summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnghelo Carvajal <angheloalf95@gmail.com>2023-07-29 12:52:32 -0400
committerGitHub <noreply@github.com>2023-07-29 12:52:32 -0400
commit632ff4b2abec60e91be7b71e0cf40043bed75f32 (patch)
treec8e53f50d0c681afc2a6542a11cbf442174751f3
parent40cc48fb7a956f94cfd4c0e90a60ee15eefc4f8e (diff)
Build a compressed ROM (#16)
* git subrepo clone (merge) --branch=5da3132606e4fd427a8d72b8428e4f921cd6e56f git@github.com:z64tools/z64compress.git tools/z64compress subrepo: subdir: "tools/z64compress" merged: "5da3132" upstream: origin: "git@github.com:z64tools/z64compress.git" branch: "5da3132606e4fd427a8d72b8428e4f921cd6e56f" commit: "5da3132" git-subrepo: version: "0.4.3" origin: "https://github.com/ingydotnet/git-subrepo.git" commit: "2f68596" * z64compress_wrapper.py * fixes * dmadata.c * readme * git subrepo pull tools/splat subrepo: subdir: "tools/splat" merged: "01ac556" upstream: origin: "git@github.com:ethteck/splat.git" branch: "master" commit: "01ac556" git-subrepo: version: "0.4.3" origin: "https://github.com/ingydotnet/git-subrepo.git" commit: "2f68596" * segment_end_before_align: True * Add compressed step to jenkinsfile * TODO * format * remove from boot_variables.h * simplify * Change makefile to match MM
-rw-r--r--Jenkinsfile5
-rw-r--r--Makefile28
-rw-r--r--README.md1
-rw-r--r--include/boot_variables.h1
-rw-r--r--include/other_types.h2
-rw-r--r--include/segment_symbols.h6
-rw-r--r--include/tables/dmadata_table.h5
-rw-r--r--include/tables/dmatables/dmadata_table_jp.h3382
-rw-r--r--include/z_std_dma.h10
-rw-r--r--src/dmadata/dmadata.c21
-rw-r--r--tools/Makefile2
-rw-r--r--tools/z64compress/.editorconfig15
-rw-r--r--tools/z64compress/.gitignore3
-rw-r--r--tools/z64compress/.gitrepo12
-rw-r--r--tools/z64compress/LICENSE674
-rw-r--r--tools/z64compress/Makefile47
-rw-r--r--tools/z64compress/README.md94
-rwxr-xr-xtools/z64compress/release-linux.sh14
-rwxr-xr-xtools/z64compress/release-linux32.sh14
-rwxr-xr-xtools/z64compress/release-win32.sh12
-rw-r--r--tools/z64compress/src/enc/aplib.c48
-rw-r--r--tools/z64compress/src/enc/apultra/apultra.c1225
-rw-r--r--tools/z64compress/src/enc/apultra/divsufsort.c460
-rw-r--r--tools/z64compress/src/enc/apultra/divsufsort.h192
-rw-r--r--tools/z64compress/src/enc/apultra/divsufsort_config.h9
-rw-r--r--tools/z64compress/src/enc/apultra/divsufsort_private.h205
-rw-r--r--tools/z64compress/src/enc/apultra/expand.c396
-rw-r--r--tools/z64compress/src/enc/apultra/expand.h71
-rw-r--r--tools/z64compress/src/enc/apultra/format.h47
-rw-r--r--tools/z64compress/src/enc/apultra/libapultra.h40
-rw-r--r--tools/z64compress/src/enc/apultra/matchfinder.c449
-rw-r--r--tools/z64compress/src/enc/apultra/matchfinder.h94
-rw-r--r--tools/z64compress/src/enc/apultra/shrink.c1731
-rw-r--r--tools/z64compress/src/enc/apultra/shrink.h174
-rw-r--r--tools/z64compress/src/enc/apultra/shrink_context.c39
-rw-r--r--tools/z64compress/src/enc/apultra/sssort.c815
-rw-r--r--tools/z64compress/src/enc/apultra/trsort.c586
-rw-r--r--tools/z64compress/src/enc/enc.h50
-rw-r--r--tools/z64compress/src/enc/lzo.c55
-rw-r--r--tools/z64compress/src/enc/lzo/config1x.h106
-rw-r--r--tools/z64compress/src/enc/lzo/lzo1_d.ch156
-rw-r--r--tools/z64compress/src/enc/lzo/lzo1x.h165
-rw-r--r--tools/z64compress/src/enc/lzo/lzo1x_1.c57
-rw-r--r--tools/z64compress/src/enc/lzo/lzo1x_9x.c867
-rw-r--r--tools/z64compress/src/enc/lzo/lzo1x_c.ch403
-rw-r--r--tools/z64compress/src/enc/lzo/lzo1x_d.ch475
-rw-r--r--tools/z64compress/src/enc/lzo/lzo1x_d1.c36
-rw-r--r--tools/z64compress/src/enc/lzo/lzo1x_d2.c61
-rw-r--r--tools/z64compress/src/enc/lzo/lzo1x_d3.c93
-rw-r--r--tools/z64compress/src/enc/lzo/lzo_conf.h436
-rw-r--r--tools/z64compress/src/enc/lzo/lzo_dict.h307
-rw-r--r--tools/z64compress/src/enc/lzo/lzo_func.h491
-rw-r--r--tools/z64compress/src/enc/lzo/lzo_mchw.ch222
-rw-r--r--tools/z64compress/src/enc/lzo/lzo_ptr.c80
-rw-r--r--tools/z64compress/src/enc/lzo/lzo_ptr.h123
-rw-r--r--tools/z64compress/src/enc/lzo/lzo_supp.h3678
-rw-r--r--tools/z64compress/src/enc/lzo/lzo_swd.ch700
-rw-r--r--tools/z64compress/src/enc/lzo/lzoconf.h453
-rw-r--r--tools/z64compress/src/enc/lzo/lzodefs.h3268
-rw-r--r--tools/z64compress/src/enc/stretchy_buffer.h262
-rw-r--r--tools/z64compress/src/enc/ucl.c50
-rw-r--r--tools/z64compress/src/enc/ucl/comp/n2_99.ch651
-rw-r--r--tools/z64compress/src/enc/ucl/comp/n2b_99.c38
-rw-r--r--tools/z64compress/src/enc/ucl/comp/ucl_mchw.ch312
-rw-r--r--tools/z64compress/src/enc/ucl/comp/ucl_swd.ch686
-rw-r--r--tools/z64compress/src/enc/ucl/getbit.h64
-rw-r--r--tools/z64compress/src/enc/ucl/n2b_d.c179
-rw-r--r--tools/z64compress/src/enc/ucl/ucl.h249
-rw-r--r--tools/z64compress/src/enc/ucl/ucl_conf.h220
-rw-r--r--tools/z64compress/src/enc/ucl/uclconf.h490
-rw-r--r--tools/z64compress/src/enc/yar.c450
-rw-r--r--tools/z64compress/src/enc/yar.h36
-rw-r--r--tools/z64compress/src/enc/yaz.c464
-rw-r--r--tools/z64compress/src/enc/zx7.c37
-rw-r--r--tools/z64compress/src/enc/zx7/compress.c160
-rw-r--r--tools/z64compress/src/enc/zx7/dzx7.c138
-rw-r--r--tools/z64compress/src/enc/zx7/optimize.c167
-rw-r--r--tools/z64compress/src/enc/zx7/zx7.c46
-rw-r--r--tools/z64compress/src/enc/zx7/zx7.h66
-rw-r--r--tools/z64compress/src/main.c379
-rw-r--r--tools/z64compress/src/n64crc.c197
-rw-r--r--tools/z64compress/src/n64crc.h32
-rw-r--r--tools/z64compress/src/rom.c1698
-rw-r--r--tools/z64compress/src/rom.h62
-rw-r--r--tools/z64compress/src/sha1.c141
-rw-r--r--tools/z64compress/src/sha1.h8
-rw-r--r--tools/z64compress/src/wow.c3
-rw-r--r--tools/z64compress/src/wow.h769
-rw-r--r--tools/z64compress/src/wow_dirent.h61
-rwxr-xr-xtools/z64compress_wrapper.py133
-rw-r--r--yamls/jp/assets.yaml4603
-rw-r--r--yamls/jp/boot.yaml4
-rw-r--r--yamls/jp/code.yaml1
-rw-r--r--yamls/jp/header.yaml1
-rw-r--r--yamls/jp/makerom.yaml18
-rw-r--r--yamls/jp/overlays.yaml1834
96 files changed, 37891 insertions, 29 deletions
diff --git a/Jenkinsfile b/Jenkinsfile
index 8f7ce46..0450f39 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -45,6 +45,11 @@ pipeline {
sh 'bash -c "make -j uncompressed"'
}
}
+ stage('Build compressed') {
+ steps {
+ sh 'bash -c "make -j compressed"'
+ }
+ }
stage('Upload to Frogress') {
when {
branch 'main'
diff --git a/Makefile b/Makefile
index bf4eabd..3643a28 100644
--- a/Makefile
+++ b/Makefile
@@ -20,6 +20,8 @@ RUN_CC_CHECK ?= 1
CC_CHECK_COMP ?= gcc
# Dump build object files
OBJDUMP_BUILD ?= 0
+# Number of threads to compress with
+N_THREADS ?= $(shell nproc)
# Set prefix to mips binutils binaries (mips-linux-gnu-ld => 'mips-linux-gnu-') - Change at your own risk!
# In nearly all cases, not having 'mips-linux-gnu-*' binaries on the PATH is indicative of missing dependencies
@@ -155,6 +157,11 @@ else
OBJCOPY_BIN = @:
endif
+# rom compression flags
+COMPFLAGS := --threads $(N_THREADS)
+ifeq ($(NON_MATCHING),0)
+ COMPFLAGS += --matching
+endif
#### Files ####
@@ -190,7 +197,7 @@ build/src/%.o: CC := $(ASM_PROC) $(ASM_PROC_FLAGS) $(CC) -- $(AS) $(ASFLAGS) --
#### Main Targets ###
-all: uncompressed
+all: uncompressed compressed
uncompressed: $(ROM)
ifneq ($(COMPARE),0)
@@ -198,12 +205,11 @@ ifneq ($(COMPARE),0)
@md5sum -c $(TARGET)_uncompressed.$(VERSION).md5
endif
-# TODO
-# compressed: $(ROMC)
-# ifneq ($(COMPARE),0)
-# @md5sum $(ROMC)
-# @md5sum -c $(TARGET).$(VERSION).md5
-# endif
+compressed: $(ROMC)
+ifneq ($(COMPARE),0)
+ @md5sum $(ROMC)
+ @md5sum -c $(TARGET).$(VERSION).md5
+endif
clean:
$(RM) -r $(BUILD_DIR)/asm $(BUILD_DIR)/bin $(BUILD_DIR)/src $(ROM) $(ROMC) $(ELF)
@@ -238,7 +244,7 @@ init:
$(MAKE) diff-init
.PHONY: all compressed uncompressed clean distclean setup extract diff-init init
-.DEFAULT_GOAL := all
+.DEFAULT_GOAL := uncompressed
# Prevent removing intermediate files
.SECONDARY:
@@ -246,7 +252,11 @@ init:
#### Various Recipes ####
$(ROM): $(ELF)
- $(OBJCOPY) -O binary --pad-to=0x1914000 --gap-fill=0xFF $< $@
+ $(OBJCOPY) -O binary --pad-to=0x1914000 --gap-fill=0x00 $< $@
+# TODO: update rom header checksum
+
+$(ROMC): $(ROM)
+ python3 tools/z64compress_wrapper.py $(COMPFLAGS) $< $@ $(ELF) $(SPLAT_YAML)
# TODO: avoid using auto/undefined
$(ELF): $(O_FILES) $(LD_SCRIPT) $(BUILD_DIR)/linker_scripts/$(VERSION)/hardware_regs.ld $(BUILD_DIR)/linker_scripts/$(VERSION)/undefined_syms.ld $(BUILD_DIR)/linker_scripts/common_undef_syms.ld $(BUILD_DIR)/linker_scripts/libultra_syms.ld
diff --git a/README.md b/README.md
index 76a8ef3..3516667 100644
--- a/README.md
+++ b/README.md
@@ -78,3 +78,4 @@ The licensing of this repository does not cover subrepos, namely:
* `tools/fado`
* `tools/splat`
* `lib/ultralib`
+* `tools/z64compress`
diff --git a/include/boot_variables.h b/include/boot_variables.h
index 60aa33f..cfd8557 100644
--- a/include/boot_variables.h
+++ b/include/boot_variables.h
@@ -286,7 +286,6 @@
// extern UNK_TYPE B_80041A00_jp;
// extern UNK_TYPE B_80044684_jp;
-// extern UNK_TYPE D_80044690_jp;
#endif
diff --git a/include/other_types.h b/include/other_types.h
index f699ccb..69af3e7 100644
--- a/include/other_types.h
+++ b/include/other_types.h
@@ -5,7 +5,7 @@
// Header for files that are well known, but don't have a proper header home yet
-typedef u32 romoffset_t;
+typedef u32 RomOffset;
typedef void* TexturePtr;
#endif
diff --git a/include/segment_symbols.h b/include/segment_symbols.h
index e2950c0..e9e7c32 100644
--- a/include/segment_symbols.h
+++ b/include/segment_symbols.h
@@ -33,11 +33,11 @@
#define SEGMENT_VRAM_END(segment) (segment ## _VRAM_END)
#define SEGMENT_VRAM_SIZE(segment) ((uintptr_t)SEGMENT_VRAM_END(segment) - (uintptr_t)SEGMENT_VRAM_START(segment))
-#define SEGMENT_ROM_START(segment) ((romoffset_t)segment ## _ROM_START)
-#define SEGMENT_ROM_END(segment) ((romoffset_t)segment ## _ROM_END)
+#define SEGMENT_ROM_START(segment) ((RomOffset)segment ## _ROM_START)
+#define SEGMENT_ROM_END(segment) ((RomOffset)segment ## _ROM_END)
#define SEGMENT_ROM_SIZE(segment) (SEGMENT_ROM_END(segment) - SEGMENT_ROM_START(segment))
-#define SEGMENT_DATA_SIZE_CONST(segment) ((romoffset_t)segment ## _DATA_SIZE)
+#define SEGMENT_DATA_SIZE_CONST(segment) ((RomOffset)segment ## _DATA_SIZE)
#define SEGMENT_BSS_START(segment) (segment ## _BSS_START)
#define SEGMENT_BSS_END(segment) (segment ## _BSS_END)
diff --git a/include/tables/dmadata_table.h b/include/tables/dmadata_table.h
new file mode 100644
index 0000000..748b262
--- /dev/null
+++ b/include/tables/dmadata_table.h
@@ -0,0 +1,5 @@
+/**
+ * Select dmadata table for version
+ */
+
+#include "dmatables/dmadata_table_jp.h"
diff --git a/include/tables/dmatables/dmadata_table_jp.h b/include/tables/dmatables/dmadata_table_jp.h
new file mode 100644
index 0000000..c5c0a7e
--- /dev/null
+++ b/include/tables/dmatables/dmadata_table_jp.h
@@ -0,0 +1,3382 @@
+/**
+ * Matching dmadata layout for JP
+ *
+ * DEFINE_DMA_ENTRY should be used for all dmadata entries
+ * - Argument 1: Name of the segment
+ * - Argument 2: String matching the original name of the segment
+ */
+DEFINE_DMA_ENTRY(makerom, "makerom")
+DEFINE_DMA_ENTRY(boot, "boot")
+DEFINE_DMA_ENTRY(dmadata, "dmadata")
+DEFINE_DMA_ENTRY(segment_027130, "segment_027130")
+DEFINE_DMA_ENTRY(segment_0E4D10, "segment_0E4D10")
+DEFINE_DMA_ENTRY(segment_13D9A0, "segment_13D9A0")
+DEFINE_DMA_ENTRY(code, "code")
+DEFINE_DMA_ENTRY(ovl_0073F4D0, "ovl_0073F4D0")
+DEFINE_DMA_ENTRY(ovl_0073F4D0_reloc, "ovl_0073F4D0_reloc")
+DEFINE_DMA_ENTRY(ovl_00741EA0, "ovl_00741EA0")
+DEFINE_DMA_ENTRY(ovl_00741EA0_reloc, "ovl_00741EA0_reloc")
+DEFINE_DMA_ENTRY(ovl_00741FB0, "ovl_00741FB0")
+DEFINE_DMA_ENTRY(ovl_00741FB0_reloc, "ovl_00741FB0_reloc")
+DEFINE_DMA_ENTRY(ovl_00743B70, "ovl_00743B70")
+DEFINE_DMA_ENTRY(ovl_00743B70_reloc, "ovl_00743B70_reloc")
+DEFINE_DMA_ENTRY(ovl_00743CD0, "ovl_00743CD0")
+DEFINE_DMA_ENTRY(ovl_00743CD0_reloc, "ovl_00743CD0_reloc")
+DEFINE_DMA_ENTRY(ovl_00744020, "ovl_00744020")
+DEFINE_DMA_ENTRY(ovl_00744020_reloc, "ovl_00744020_reloc")
+DEFINE_DMA_ENTRY(ovl_00747AA0, "ovl_00747AA0")
+DEFINE_DMA_ENTRY(ovl_00747AA0_reloc, "ovl_00747AA0_reloc")
+DEFINE_DMA_ENTRY(ovl_007486E0, "ovl_007486E0")
+DEFINE_DMA_ENTRY(ovl_007486E0_reloc, "ovl_007486E0_reloc")
+DEFINE_DMA_ENTRY(ovl_007492E0, "ovl_007492E0")
+DEFINE_DMA_ENTRY(ovl_007492E0_reloc, "ovl_007492E0_reloc")
+DEFINE_DMA_ENTRY(ovl_007745B0, "ovl_007745B0")
+DEFINE_DMA_ENTRY(ovl_007745B0_reloc, "ovl_007745B0_reloc")
+DEFINE_DMA_ENTRY(ovl_submenu, "ovl_submenu")
+DEFINE_DMA_ENTRY(ovl_submenu_reloc, "ovl_submenu_reloc")
+DEFINE_DMA_ENTRY(ovl_00777AE0, "ovl_00777AE0")
+DEFINE_DMA_ENTRY(ovl_00777AE0_reloc, "ovl_00777AE0_reloc")
+DEFINE_DMA_ENTRY(ovl_007829E0, "ovl_007829E0")
+DEFINE_DMA_ENTRY(ovl_007829E0_reloc, "ovl_007829E0_reloc")
+DEFINE_DMA_ENTRY(ovl_00784FC0, "ovl_00784FC0")
+DEFINE_DMA_ENTRY(ovl_00784FC0_reloc, "ovl_00784FC0_reloc")
+DEFINE_DMA_ENTRY(ovl_00785700, "ovl_00785700")
+DEFINE_DMA_ENTRY(ovl_00785700_reloc, "ovl_00785700_reloc")
+DEFINE_DMA_ENTRY(ovl_00789B60, "ovl_00789B60")
+DEFINE_DMA_ENTRY(ovl_00789B60_reloc, "ovl_00789B60_reloc")
+DEFINE_DMA_ENTRY(ovl_0078A560, "ovl_0078A560")
+DEFINE_DMA_ENTRY(ovl_0078A560_reloc, "ovl_0078A560_reloc")
+DEFINE_DMA_ENTRY(ovl_0078AE30, "ovl_0078AE30")
+DEFINE_DMA_ENTRY(ovl_0078AE30_reloc, "ovl_0078AE30_reloc")
+DEFINE_DMA_ENTRY(ovl_0078BFB0, "ovl_0078BFB0")
+DEFINE_DMA_ENTRY(ovl_0078BFB0_reloc, "ovl_0078BFB0_reloc")
+DEFINE_DMA_ENTRY(ovl_0078CB80, "ovl_0078CB80")
+DEFINE_DMA_ENTRY(ovl_0078CB80_reloc, "ovl_0078CB80_reloc")
+DEFINE_DMA_ENTRY(ovl_007908A0, "ovl_007908A0")
+DEFINE_DMA_ENTRY(ovl_007908A0_reloc, "ovl_007908A0_reloc")
+DEFINE_DMA_ENTRY(ovl_00792700, "ovl_00792700")
+DEFINE_DMA_ENTRY(ovl_00792700_reloc, "ovl_00792700_reloc")
+DEFINE_DMA_ENTRY(ovl_00794380, "ovl_00794380")
+DEFINE_DMA_ENTRY(ovl_00794380_reloc, "ovl_00794380_reloc")
+DEFINE_DMA_ENTRY(ovl_00795350, "ovl_00795350")
+DEFINE_DMA_ENTRY(ovl_00795350_reloc, "ovl_00795350_reloc")
+DEFINE_DMA_ENTRY(ovl_00797A50, "ovl_00797A50")
+DEFINE_DMA_ENTRY(ovl_00797A50_reloc, "ovl_00797A50_reloc")
+DEFINE_DMA_ENTRY(ovl_00799580, "ovl_00799580")
+DEFINE_DMA_ENTRY(ovl_00799580_reloc, "ovl_00799580_reloc")
+DEFINE_DMA_ENTRY(ovl_0079A290, "ovl_0079A290")
+DEFINE_DMA_ENTRY(ovl_0079A290_reloc, "ovl_0079A290_reloc")
+DEFINE_DMA_ENTRY(ovl_0079B120, "ovl_0079B120")
+DEFINE_DMA_ENTRY(ovl_0079B120_reloc, "ovl_0079B120_reloc")
+DEFINE_DMA_ENTRY(ovl_0079C020, "ovl_0079C020")
+DEFINE_DMA_ENTRY(ovl_0079C020_reloc, "ovl_0079C020_reloc")
+DEFINE_DMA_ENTRY(ovl_0079DA50, "ovl_0079DA50")
+DEFINE_DMA_ENTRY(ovl_0079DA50_reloc, "ovl_0079DA50_reloc")
+DEFINE_DMA_ENTRY(ovl_0079E430, "ovl_0079E430")
+DEFINE_DMA_ENTRY(ovl_0079E430_reloc, "ovl_0079E430_reloc")
+DEFINE_DMA_ENTRY(ovl_0079F810, "ovl_0079F810")
+DEFINE_DMA_ENTRY(ovl_0079F810_reloc, "ovl_0079F810_reloc")
+DEFINE_DMA_ENTRY(ovl_007A10E0, "ovl_007A10E0")
+DEFINE_DMA_ENTRY(ovl_007A10E0_reloc, "ovl_007A10E0_reloc")
+DEFINE_DMA_ENTRY(ovl_007A28F0, "ovl_007A28F0")
+DEFINE_DMA_ENTRY(ovl_007A28F0_reloc, "ovl_007A28F0_reloc")
+DEFINE_DMA_ENTRY(ovl_player_actor, "ovl_player_actor")
+DEFINE_DMA_ENTRY(ovl_player_actor_reloc, "ovl_player_actor_reloc")
+DEFINE_DMA_ENTRY(ovl_007DE050, "ovl_007DE050")
+DEFINE_DMA_ENTRY(ovl_007DE050_reloc, "ovl_007DE050_reloc")
+DEFINE_DMA_ENTRY(ovl_007DF180, "ovl_007DF180")
+DEFINE_DMA_ENTRY(ovl_007DF180_reloc, "ovl_007DF180_reloc")
+DEFINE_DMA_ENTRY(ovl_007E08D0, "ovl_007E08D0")
+DEFINE_DMA_ENTRY(ovl_007E08D0_reloc, "ovl_007E08D0_reloc")
+DEFINE_DMA_ENTRY(ovl_007E18F0, "ovl_007E18F0")
+DEFINE_DMA_ENTRY(ovl_007E18F0_reloc, "ovl_007E18F0_reloc")
+DEFINE_DMA_ENTRY(ovl_007E2440, "ovl_007E2440")
+DEFINE_DMA_ENTRY(ovl_007E2440_reloc, "ovl_007E2440_reloc")
+DEFINE_DMA_ENTRY(ovl_007E3170, "ovl_007E3170")
+DEFINE_DMA_ENTRY(ovl_007E3170_reloc, "ovl_007E3170_reloc")
+DEFINE_DMA_ENTRY(ovl_007E3990, "ovl_007E3990")
+DEFINE_DMA_ENTRY(ovl_007E3990_reloc, "ovl_007E3990_reloc")
+DEFINE_DMA_ENTRY(ovl_007E4130, "ovl_007E4130")
+DEFINE_DMA_ENTRY(ovl_007E4130_reloc, "ovl_007E4130_reloc")
+DEFINE_DMA_ENTRY(ovl_007E4DF0, "ovl_007E4DF0")
+DEFINE_DMA_ENTRY(ovl_007E4DF0_reloc, "ovl_007E4DF0_reloc")
+DEFINE_DMA_ENTRY(ovl_007E5640, "ovl_007E5640")
+DEFINE_DMA_ENTRY(ovl_007E5640_reloc, "ovl_007E5640_reloc")
+DEFINE_DMA_ENTRY(ovl_007E5880, "ovl_007E5880")
+DEFINE_DMA_ENTRY(ovl_007E5880_reloc, "ovl_007E5880_reloc")
+DEFINE_DMA_ENTRY(ovl_007F0350, "ovl_007F0350")
+DEFINE_DMA_ENTRY(ovl_007F0350_reloc, "ovl_007F0350_reloc")
+DEFINE_DMA_ENTRY(ovl_007FAEB0, "ovl_007FAEB0")
+DEFINE_DMA_ENTRY(ovl_007FAEB0_reloc, "ovl_007FAEB0_reloc")
+DEFINE_DMA_ENTRY(ovl_00805E30, "ovl_00805E30")
+DEFINE_DMA_ENTRY(ovl_00805E30_reloc, "ovl_00805E30_reloc")
+DEFINE_DMA_ENTRY(ovl_008108C0, "ovl_008108C0")
+DEFINE_DMA_ENTRY(ovl_008108C0_reloc, "ovl_008108C0_reloc")
+DEFINE_DMA_ENTRY(ovl_00814FA0, "ovl_00814FA0")
+DEFINE_DMA_ENTRY(ovl_00814FA0_reloc, "ovl_00814FA0_reloc")
+DEFINE_DMA_ENTRY(ovl_00815B70, "ovl_00815B70")
+DEFINE_DMA_ENTRY(ovl_00815B70_reloc, "ovl_00815B70_reloc")
+DEFINE_DMA_ENTRY(ovl_0081AA60, "ovl_0081AA60")
+DEFINE_DMA_ENTRY(ovl_0081AA60_reloc, "ovl_0081AA60_reloc")
+DEFINE_DMA_ENTRY(ovl_0081D9D0, "ovl_0081D9D0")
+DEFINE_DMA_ENTRY(ovl_0081D9D0_reloc, "ovl_0081D9D0_reloc")
+DEFINE_DMA_ENTRY(ovl_00821B40, "ovl_00821B40")
+DEFINE_DMA_ENTRY(ovl_00821B40_reloc, "ovl_00821B40_reloc")
+DEFINE_DMA_ENTRY(ovl_00824500, "ovl_00824500")
+DEFINE_DMA_ENTRY(ovl_00824500_reloc, "ovl_00824500_reloc")
+DEFINE_DMA_ENTRY(ovl_008253C0, "ovl_008253C0")
+DEFINE_DMA_ENTRY(ovl_008253C0_reloc, "ovl_008253C0_reloc")
+DEFINE_DMA_ENTRY(ovl_00827DE0, "ovl_00827DE0")
+DEFINE_DMA_ENTRY(ovl_00827DE0_reloc, "ovl_00827DE0_reloc")
+DEFINE_DMA_ENTRY(ovl_00828C50, "ovl_00828C50")
+DEFINE_DMA_ENTRY(ovl_00828C50_reloc, "ovl_00828C50_reloc")
+DEFINE_DMA_ENTRY(ovl_0082B3C0, "ovl_0082B3C0")
+DEFINE_DMA_ENTRY(ovl_0082B3C0_reloc, "ovl_0082B3C0_reloc")
+DEFINE_DMA_ENTRY(ovl_0082BB80, "ovl_0082BB80")
+DEFINE_DMA_ENTRY(ovl_0082BB80_reloc, "ovl_0082BB80_reloc")
+DEFINE_DMA_ENTRY(ovl_0082BC20, "ovl_0082BC20")
+DEFINE_DMA_ENTRY(ovl_0082BC20_reloc, "ovl_0082BC20_reloc")
+DEFINE_DMA_ENTRY(ovl_0082CED0, "ovl_0082CED0")
+DEFINE_DMA_ENTRY(ovl_0082CED0_reloc, "ovl_0082CED0_reloc")
+DEFINE_DMA_ENTRY(ovl_0082D7F0, "ovl_0082D7F0")
+DEFINE_DMA_ENTRY(ovl_0082D7F0_reloc, "ovl_0082D7F0_reloc")
+DEFINE_DMA_ENTRY(ovl_00845C40, "ovl_00845C40")
+DEFINE_DMA_ENTRY(ovl_00845C40_reloc, "ovl_00845C40_reloc")
+DEFINE_DMA_ENTRY(ovl_00846430, "ovl_00846430")
+DEFINE_DMA_ENTRY(ovl_00846430_reloc, "ovl_00846430_reloc")
+DEFINE_DMA_ENTRY(ovl_008464D0, "ovl_008464D0")
+DEFINE_DMA_ENTRY(ovl_008464D0_reloc, "ovl_008464D0_reloc")
+DEFINE_DMA_ENTRY(ovl_00846860, "ovl_00846860")
+DEFINE_DMA_ENTRY(ovl_00846860_reloc, "ovl_00846860_reloc")
+DEFINE_DMA_ENTRY(ovl_008477A0, "ovl_008477A0")
+DEFINE_DMA_ENTRY(ovl_008477A0_reloc, "ovl_008477A0_reloc")
+DEFINE_DMA_ENTRY(ovl_00848600, "ovl_00848600")
+DEFINE_DMA_ENTRY(ovl_00848600_reloc, "ovl_00848600_reloc")
+DEFINE_DMA_ENTRY(ovl_00848BF0, "ovl_00848BF0")
+DEFINE_DMA_ENTRY(ovl_00848BF0_reloc, "ovl_00848BF0_reloc")
+DEFINE_DMA_ENTRY(ovl_00849B50, "ovl_00849B50")
+DEFINE_DMA_ENTRY(ovl_00849B50_reloc, "ovl_00849B50_reloc")
+DEFINE_DMA_ENTRY(ovl_0084CBC0, "ovl_0084CBC0")
+DEFINE_DMA_ENTRY(ovl_0084CBC0_reloc, "ovl_0084CBC0_reloc")
+DEFINE_DMA_ENTRY(ovl_0084D180, "ovl_0084D180")
+DEFINE_DMA_ENTRY(ovl_0084D180_reloc, "ovl_0084D180_reloc")
+DEFINE_DMA_ENTRY(ovl_0084E080, "ovl_0084E080")
+DEFINE_DMA_ENTRY(ovl_0084E080_reloc, "ovl_0084E080_reloc")
+DEFINE_DMA_ENTRY(ovl_0084F180, "ovl_0084F180")
+DEFINE_DMA_ENTRY(ovl_0084F180_reloc, "ovl_0084F180_reloc")
+DEFINE_DMA_ENTRY(ovl_00850680, "ovl_00850680")
+DEFINE_DMA_ENTRY(ovl_00850680_reloc, "ovl_00850680_reloc")
+DEFINE_DMA_ENTRY(ovl_008576C0, "ovl_008576C0")
+DEFINE_DMA_ENTRY(ovl_008576C0_reloc, "ovl_008576C0_reloc")
+DEFINE_DMA_ENTRY(ovl_00858A50, "ovl_00858A50")
+DEFINE_DMA_ENTRY(ovl_00858A50_reloc, "ovl_00858A50_reloc")
+DEFINE_DMA_ENTRY(ovl_0085A400, "ovl_0085A400")
+DEFINE_DMA_ENTRY(ovl_0085A400_reloc, "ovl_0085A400_reloc")
+DEFINE_DMA_ENTRY(ovl_0085A8E0, "ovl_0085A8E0")
+DEFINE_DMA_ENTRY(ovl_0085A8E0_reloc, "ovl_0085A8E0_reloc")
+DEFINE_DMA_ENTRY(ovl_0085B170, "ovl_0085B170")
+DEFINE_DMA_ENTRY(ovl_0085B170_reloc, "ovl_0085B170_reloc")
+DEFINE_DMA_ENTRY(ovl_0085B960, "ovl_0085B960")
+DEFINE_DMA_ENTRY(ovl_0085B960_reloc, "ovl_0085B960_reloc")
+DEFINE_DMA_ENTRY(ovl_0085C200, "ovl_0085C200")
+DEFINE_DMA_ENTRY(ovl_0085C200_reloc, "ovl_0085C200_reloc")
+DEFINE_DMA_ENTRY(ovl_0085C570, "ovl_0085C570")
+DEFINE_DMA_ENTRY(ovl_0085C570_reloc, "ovl_0085C570_reloc")
+DEFINE_DMA_ENTRY(ovl_0085D660, "ovl_0085D660")
+DEFINE_DMA_ENTRY(ovl_0085D660_reloc, "ovl_0085D660_reloc")
+DEFINE_DMA_ENTRY(ovl_0085F7D0, "ovl_0085F7D0")
+DEFINE_DMA_ENTRY(ovl_0085F7D0_reloc, "ovl_0085F7D0_reloc")
+DEFINE_DMA_ENTRY(ovl_00861420, "ovl_00861420")
+DEFINE_DMA_ENTRY(ovl_00861420_reloc, "ovl_00861420_reloc")
+DEFINE_DMA_ENTRY(ovl_008623E0, "ovl_008623E0")
+DEFINE_DMA_ENTRY(ovl_008623E0_reloc, "ovl_008623E0_reloc")
+DEFINE_DMA_ENTRY(ovl_00862870, "ovl_00862870")
+DEFINE_DMA_ENTRY(ovl_00862870_reloc, "ovl_00862870_reloc")
+DEFINE_DMA_ENTRY(ovl_00866ED0, "ovl_00866ED0")
+DEFINE_DMA_ENTRY(ovl_00866ED0_reloc, "ovl_00866ED0_reloc")
+DEFINE_DMA_ENTRY(ovl_00867620, "ovl_00867620")
+DEFINE_DMA_ENTRY(ovl_00867620_reloc, "ovl_00867620_reloc")
+DEFINE_DMA_ENTRY(ovl_008678C0, "ovl_008678C0")
+DEFINE_DMA_ENTRY(ovl_008678C0_reloc, "ovl_008678C0_reloc")
+DEFINE_DMA_ENTRY(ovl_00867C60, "ovl_00867C60")
+DEFINE_DMA_ENTRY(ovl_00867C60_reloc, "ovl_00867C60_reloc")
+DEFINE_DMA_ENTRY(ovl_00867D00, "ovl_00867D00")
+DEFINE_DMA_ENTRY(ovl_00867D00_reloc, "ovl_00867D00_reloc")
+DEFINE_DMA_ENTRY(ovl_00867DA0, "ovl_00867DA0")
+DEFINE_DMA_ENTRY(ovl_00867DA0_reloc, "ovl_00867DA0_reloc")
+DEFINE_DMA_ENTRY(ovl_008681F0, "ovl_008681F0")
+DEFINE_DMA_ENTRY(ovl_008681F0_reloc, "ovl_008681F0_reloc")
+DEFINE_DMA_ENTRY(ovl_008798C0, "ovl_008798C0")
+DEFINE_DMA_ENTRY(ovl_008798C0_reloc, "ovl_008798C0_reloc")
+DEFINE_DMA_ENTRY(ovl_00887F90, "ovl_00887F90")
+DEFINE_DMA_ENTRY(ovl_00887F90_reloc, "ovl_00887F90_reloc")
+DEFINE_DMA_ENTRY(ovl_00889270, "ovl_00889270")
+DEFINE_DMA_ENTRY(ovl_00889270_reloc, "ovl_00889270_reloc")
+DEFINE_DMA_ENTRY(ovl_00889440, "ovl_00889440")
+DEFINE_DMA_ENTRY(ovl_00889440_reloc, "ovl_00889440_reloc")
+DEFINE_DMA_ENTRY(ovl_0088DD00, "ovl_0088DD00")
+DEFINE_DMA_ENTRY(ovl_0088DD00_reloc, "ovl_0088DD00_reloc")
+DEFINE_DMA_ENTRY(ovl_00892600, "ovl_00892600")
+DEFINE_DMA_ENTRY(ovl_00892600_reloc, "ovl_00892600_reloc")
+DEFINE_DMA_ENTRY(ovl_00892810, "ovl_00892810")
+DEFINE_DMA_ENTRY(ovl_00892810_reloc, "ovl_00892810_reloc")
+DEFINE_DMA_ENTRY(ovl_00894A70, "ovl_00894A70")
+DEFINE_DMA_ENTRY(ovl_00894A70_reloc, "ovl_00894A70_reloc")
+DEFINE_DMA_ENTRY(ovl_00896A30, "ovl_00896A30")
+DEFINE_DMA_ENTRY(ovl_00896A30_reloc, "ovl_00896A30_reloc")
+DEFINE_DMA_ENTRY(ovl_00897450, "ovl_00897450")
+DEFINE_DMA_ENTRY(ovl_00897450_reloc, "ovl_00897450_reloc")
+DEFINE_DMA_ENTRY(ovl_00898220, "ovl_00898220")
+DEFINE_DMA_ENTRY(ovl_00898220_reloc, "ovl_00898220_reloc")
+DEFINE_DMA_ENTRY(ovl_008991B0, "ovl_008991B0")
+DEFINE_DMA_ENTRY(ovl_008991B0_reloc, "ovl_008991B0_reloc")
+DEFINE_DMA_ENTRY(ovl_0089A1B0, "ovl_0089A1B0")
+DEFINE_DMA_ENTRY(ovl_0089A1B0_reloc, "ovl_0089A1B0_reloc")
+DEFINE_DMA_ENTRY(ovl_008A1160, "ovl_008A1160")
+DEFINE_DMA_ENTRY(ovl_008A1160_reloc, "ovl_008A1160_reloc")
+DEFINE_DMA_ENTRY(ovl_008A1F10, "ovl_008A1F10")
+DEFINE_DMA_ENTRY(ovl_008A1F10_reloc, "ovl_008A1F10_reloc")
+DEFINE_DMA_ENTRY(ovl_008A4940, "ovl_008A4940")
+DEFINE_DMA_ENTRY(ovl_008A4940_reloc, "ovl_008A4940_reloc")
+DEFINE_DMA_ENTRY(ovl_008A5760, "ovl_008A5760")
+DEFINE_DMA_ENTRY(ovl_008A5760_reloc, "ovl_008A5760_reloc")
+DEFINE_DMA_ENTRY(ovl_008A6C10, "ovl_008A6C10")
+DEFINE_DMA_ENTRY(ovl_008A6C10_reloc, "ovl_008A6C10_reloc")
+DEFINE_DMA_ENTRY(ovl_008A8C80, "ovl_008A8C80")
+DEFINE_DMA_ENTRY(ovl_008A8C80_reloc, "ovl_008A8C80_reloc")
+DEFINE_DMA_ENTRY(ovl_008AA370, "ovl_008AA370")
+DEFINE_DMA_ENTRY(ovl_008AA370_reloc, "ovl_008AA370_reloc")
+DEFINE_DMA_ENTRY(ovl_008AB7E0, "ovl_008AB7E0")
+DEFINE_DMA_ENTRY(ovl_008AB7E0_reloc, "ovl_008AB7E0_reloc")
+DEFINE_DMA_ENTRY(ovl_008ADF40, "ovl_008ADF40")
+DEFINE_DMA_ENTRY(ovl_008ADF40_reloc, "ovl_008ADF40_reloc")
+DEFINE_DMA_ENTRY(ovl_008B26B0, "ovl_008B26B0")
+DEFINE_DMA_ENTRY(ovl_008B26B0_reloc, "ovl_008B26B0_reloc")
+DEFINE_DMA_ENTRY(ovl_008B2CE0, "ovl_008B2CE0")
+DEFINE_DMA_ENTRY(ovl_008B2CE0_reloc, "ovl_008B2CE0_reloc")
+DEFINE_DMA_ENTRY(ovl_008B79B0, "ovl_008B79B0")
+DEFINE_DMA_ENTRY(ovl_008B79B0_reloc, "ovl_008B79B0_reloc")
+DEFINE_DMA_ENTRY(ovl_008B8FC0, "ovl_008B8FC0")
+DEFINE_DMA_ENTRY(ovl_008B8FC0_reloc, "ovl_008B8FC0_reloc")
+DEFINE_DMA_ENTRY(ovl_008BA3B0, "ovl_008BA3B0")
+DEFINE_DMA_ENTRY(ovl_008BA3B0_reloc, "ovl_008BA3B0_reloc")
+DEFINE_DMA_ENTRY(ovl_008BAE60, "ovl_008BAE60")
+DEFINE_DMA_ENTRY(ovl_008BAE60_reloc, "ovl_008BAE60_reloc")
+DEFINE_DMA_ENTRY(ovl_008BBAA0, "ovl_008BBAA0")
+DEFINE_DMA_ENTRY(ovl_008BBAA0_reloc, "ovl_008BBAA0_reloc")
+DEFINE_DMA_ENTRY(ovl_008BD480, "ovl_008BD480")
+DEFINE_DMA_ENTRY(ovl_008BD480_reloc, "ovl_008BD480_reloc")
+DEFINE_DMA_ENTRY(ovl_008BE690, "ovl_008BE690")
+DEFINE_DMA_ENTRY(ovl_008BE690_reloc, "ovl_008BE690_reloc")
+DEFINE_DMA_ENTRY(ovl_008BFC40, "ovl_008BFC40")
+DEFINE_DMA_ENTRY(ovl_008BFC40_reloc, "ovl_008BFC40_reloc")
+DEFINE_DMA_ENTRY(ovl_008C03E0, "ovl_008C03E0")
+DEFINE_DMA_ENTRY(ovl_008C03E0_reloc, "ovl_008C03E0_reloc")
+DEFINE_DMA_ENTRY(ovl_008C1040, "ovl_008C1040")
+DEFINE_DMA_ENTRY(ovl_008C1040_reloc, "ovl_008C1040_reloc")
+DEFINE_DMA_ENTRY(ovl_008C1B30, "ovl_008C1B30")
+DEFINE_DMA_ENTRY(ovl_008C1B30_reloc, "ovl_008C1B30_reloc")
+DEFINE_DMA_ENTRY(ovl_008C2480, "ovl_008C2480")
+DEFINE_DMA_ENTRY(ovl_008C2480_reloc, "ovl_008C2480_reloc")
+DEFINE_DMA_ENTRY(ovl_008C2F70, "ovl_008C2F70")
+DEFINE_DMA_ENTRY(ovl_008C2F70_reloc, "ovl_008C2F70_reloc")
+DEFINE_DMA_ENTRY(ovl_008C3210, "ovl_008C3210")
+DEFINE_DMA_ENTRY(ovl_008C3210_reloc, "ovl_008C3210_reloc")
+DEFINE_DMA_ENTRY(ovl_008C3A00, "ovl_008C3A00")
+DEFINE_DMA_ENTRY(ovl_008C3A00_reloc, "ovl_008C3A00_reloc")
+DEFINE_DMA_ENTRY(ovl_008C4300, "ovl_008C4300")
+DEFINE_DMA_ENTRY(ovl_008C4300_reloc, "ovl_008C4300_reloc")
+DEFINE_DMA_ENTRY(ovl_008C4F70, "ovl_008C4F70")
+DEFINE_DMA_ENTRY(ovl_008C4F70_reloc, "ovl_008C4F70_reloc")
+DEFINE_DMA_ENTRY(ovl_008C6390, "ovl_008C6390")
+DEFINE_DMA_ENTRY(ovl_008C6390_reloc, "ovl_008C6390_reloc")
+DEFINE_DMA_ENTRY(ovl_008C6D80, "ovl_008C6D80")
+DEFINE_DMA_ENTRY(ovl_008C6D80_reloc, "ovl_008C6D80_reloc")
+DEFINE_DMA_ENTRY(ovl_008C81F0, "ovl_008C81F0")
+DEFINE_DMA_ENTRY(ovl_008C81F0_reloc, "ovl_008C81F0_reloc")
+DEFINE_DMA_ENTRY(ovl_008C8F10, "ovl_008C8F10")
+DEFINE_DMA_ENTRY(ovl_008C8F10_reloc, "ovl_008C8F10_reloc")
+DEFINE_DMA_ENTRY(ovl_008C9BB0, "ovl_008C9BB0")
+DEFINE_DMA_ENTRY(ovl_008C9BB0_reloc, "ovl_008C9BB0_reloc")
+DEFINE_DMA_ENTRY(ovl_008CA950, "ovl_008CA950")
+DEFINE_DMA_ENTRY(ovl_008CA950_reloc, "ovl_008CA950_reloc")
+DEFINE_DMA_ENTRY(ovl_008CB690, "ovl_008CB690")
+DEFINE_DMA_ENTRY(ovl_008CB690_reloc, "ovl_008CB690_reloc")
+DEFINE_DMA_ENTRY(ovl_008CD550, "ovl_008CD550")
+DEFINE_DMA_ENTRY(ovl_008CD550_reloc, "ovl_008CD550_reloc")
+DEFINE_DMA_ENTRY(ovl_008CE890, "ovl_008CE890")
+DEFINE_DMA_ENTRY(ovl_008CE890_reloc, "ovl_008CE890_reloc")
+DEFINE_DMA_ENTRY(ovl_008CFBA0, "ovl_008CFBA0")
+DEFINE_DMA_ENTRY(ovl_008CFBA0_reloc, "ovl_008CFBA0_reloc")
+DEFINE_DMA_ENTRY(ovl_008D0D20, "ovl_008D0D20")
+DEFINE_DMA_ENTRY(ovl_008D0D20_reloc, "ovl_008D0D20_reloc")
+DEFINE_DMA_ENTRY(ovl_008D1F00, "ovl_008D1F00")
+DEFINE_DMA_ENTRY(ovl_008D1F00_reloc, "ovl_008D1F00_reloc")
+DEFINE_DMA_ENTRY(ovl_008D2170, "ovl_008D2170")
+DEFINE_DMA_ENTRY(ovl_008D2170_reloc, "ovl_008D2170_reloc")
+DEFINE_DMA_ENTRY(ovl_008D2440, "ovl_008D2440")
+DEFINE_DMA_ENTRY(ovl_008D2440_reloc, "ovl_008D2440_reloc")
+DEFINE_DMA_ENTRY(ovl_008D3D00, "ovl_008D3D00")
+DEFINE_DMA_ENTRY(ovl_008D3D00_reloc, "ovl_008D3D00_reloc")
+DEFINE_DMA_ENTRY(ovl_008D4A20, "ovl_008D4A20")
+DEFINE_DMA_ENTRY(ovl_008D4A20_reloc, "ovl_008D4A20_reloc")
+DEFINE_DMA_ENTRY(ovl_008D6550, "ovl_008D6550")
+DEFINE_DMA_ENTRY(ovl_008D6550_reloc, "ovl_008D6550_reloc")
+DEFINE_DMA_ENTRY(ovl_008D6FC0, "ovl_008D6FC0")
+DEFINE_DMA_ENTRY(ovl_008D6FC0_reloc, "ovl_008D6FC0_reloc")
+DEFINE_DMA_ENTRY(ovl_008D8000, "ovl_008D8000")
+DEFINE_DMA_ENTRY(ovl_008D8000_reloc, "ovl_008D8000_reloc")
+DEFINE_DMA_ENTRY(ovl_008D8510, "ovl_008D8510")
+DEFINE_DMA_ENTRY(ovl_008D8510_reloc, "ovl_008D8510_reloc")
+DEFINE_DMA_ENTRY(ovl_008D8EC0, "ovl_008D8EC0")
+DEFINE_DMA_ENTRY(ovl_008D8EC0_reloc, "ovl_008D8EC0_reloc")
+DEFINE_DMA_ENTRY(ovl_008DA0C0, "ovl_008DA0C0")
+DEFINE_DMA_ENTRY(ovl_008DA0C0_reloc, "ovl_008DA0C0_reloc")
+DEFINE_DMA_ENTRY(ovl_008DB2A0, "ovl_008DB2A0")
+DEFINE_DMA_ENTRY(ovl_008DB2A0_reloc, "ovl_008DB2A0_reloc")
+DEFINE_DMA_ENTRY(ovl_008DBF00, "ovl_008DBF00")
+DEFINE_DMA_ENTRY(ovl_008DBF00_reloc, "ovl_008DBF00_reloc")
+DEFINE_DMA_ENTRY(ovl_008DC7D0, "ovl_008DC7D0")
+DEFINE_DMA_ENTRY(ovl_008DC7D0_reloc, "ovl_008DC7D0_reloc")
+DEFINE_DMA_ENTRY(ovl_008DD910, "ovl_008DD910")
+DEFINE_DMA_ENTRY(ovl_008DD910_reloc, "ovl_008DD910_reloc")
+DEFINE_DMA_ENTRY(ovl_008DEEC0, "ovl_008DEEC0")
+DEFINE_DMA_ENTRY(ovl_008DEEC0_reloc, "ovl_008DEEC0_reloc")
+DEFINE_DMA_ENTRY(ovl_008E0A30, "ovl_008E0A30")
+DEFINE_DMA_ENTRY(ovl_008E0A30_reloc, "ovl_008E0A30_reloc")
+DEFINE_DMA_ENTRY(ovl_008E46A0, "ovl_008E46A0")
+DEFINE_DMA_ENTRY(ovl_008E46A0_reloc, "ovl_008E46A0_reloc")
+DEFINE_DMA_ENTRY(ovl_008E6770, "ovl_008E6770")
+DEFINE_DMA_ENTRY(ovl_008E6770_reloc, "ovl_008E6770_reloc")
+DEFINE_DMA_ENTRY(ovl_008E6FD0, "ovl_008E6FD0")
+DEFINE_DMA_ENTRY(ovl_008E6FD0_reloc, "ovl_008E6FD0_reloc")
+DEFINE_DMA_ENTRY(ovl_008E7560, "ovl_008E7560")
+DEFINE_DMA_ENTRY(ovl_008E7560_reloc, "ovl_008E7560_reloc")
+DEFINE_DMA_ENTRY(ovl_008E78A0, "ovl_008E78A0")
+DEFINE_DMA_ENTRY(ovl_008E78A0_reloc, "ovl_008E78A0_reloc")
+DEFINE_DMA_ENTRY(ovl_008E7BF0, "ovl_008E7BF0")
+DEFINE_DMA_ENTRY(ovl_008E7BF0_reloc, "ovl_008E7BF0_reloc")
+DEFINE_DMA_ENTRY(ovl_008E7F30, "ovl_008E7F30")
+DEFINE_DMA_ENTRY(ovl_008E7F30_reloc, "ovl_008E7F30_reloc")
+DEFINE_DMA_ENTRY(ovl_008E8270, "ovl_008E8270")
+DEFINE_DMA_ENTRY(ovl_008E8270_reloc, "ovl_008E8270_reloc")
+DEFINE_DMA_ENTRY(ovl_008E8720, "ovl_008E8720")
+DEFINE_DMA_ENTRY(ovl_008E8720_reloc, "ovl_008E8720_reloc")
+DEFINE_DMA_ENTRY(ovl_008E8A60, "ovl_008E8A60")
+DEFINE_DMA_ENTRY(ovl_008E8A60_reloc, "ovl_008E8A60_reloc")
+DEFINE_DMA_ENTRY(ovl_008E8E20, "ovl_008E8E20")
+DEFINE_DMA_ENTRY(ovl_008E8E20_reloc, "ovl_008E8E20_reloc")
+DEFINE_DMA_ENTRY(ovl_008E9130, "ovl_008E9130")
+DEFINE_DMA_ENTRY(ovl_008E9130_reloc, "ovl_008E9130_reloc")
+DEFINE_DMA_ENTRY(ovl_008EA970, "ovl_008EA970")
+DEFINE_DMA_ENTRY(ovl_008EA970_reloc, "ovl_008EA970_reloc")
+DEFINE_DMA_ENTRY(ovl_008ED290, "ovl_008ED290")
+DEFINE_DMA_ENTRY(ovl_008ED290_reloc, "ovl_008ED290_reloc")
+DEFINE_DMA_ENTRY(ovl_008ED5C0, "ovl_008ED5C0")
+DEFINE_DMA_ENTRY(ovl_008ED5C0_reloc, "ovl_008ED5C0_reloc")
+DEFINE_DMA_ENTRY(ovl_008EDB70, "ovl_008EDB70")
+DEFINE_DMA_ENTRY(ovl_008EDB70_reloc, "ovl_008EDB70_reloc")
+DEFINE_DMA_ENTRY(ovl_008EDDB0, "ovl_008EDDB0")
+DEFINE_DMA_ENTRY(ovl_008EDDB0_reloc, "ovl_008EDDB0_reloc")
+DEFINE_DMA_ENTRY(ovl_008EE310, "ovl_008EE310")
+DEFINE_DMA_ENTRY(ovl_008EE310_reloc, "ovl_008EE310_reloc")
+DEFINE_DMA_ENTRY(ovl_008EED90, "ovl_008EED90")
+DEFINE_DMA_ENTRY(ovl_008EED90_reloc, "ovl_008EED90_reloc")
+DEFINE_DMA_ENTRY(ovl_008EF480, "ovl_008EF480")
+DEFINE_DMA_ENTRY(ovl_008EF480_reloc, "ovl_008EF480_reloc")
+DEFINE_DMA_ENTRY(ovl_008EFF50, "ovl_008EFF50")
+DEFINE_DMA_ENTRY(ovl_008EFF50_reloc, "ovl_008EFF50_reloc")
+DEFINE_DMA_ENTRY(ovl_008F0730, "ovl_008F0730")
+DEFINE_DMA_ENTRY(ovl_008F0730_reloc, "ovl_008F0730_reloc")
+DEFINE_DMA_ENTRY(ovl_008F0A80, "ovl_008F0A80")
+DEFINE_DMA_ENTRY(ovl_008F0A80_reloc, "ovl_008F0A80_reloc")
+DEFINE_DMA_ENTRY(ovl_008F1010, "ovl_008F1010")
+DEFINE_DMA_ENTRY(ovl_008F1010_reloc, "ovl_008F1010_reloc")
+DEFINE_DMA_ENTRY(ovl_008F1470, "ovl_008F1470")
+DEFINE_DMA_ENTRY(ovl_008F1470_reloc, "ovl_008F1470_reloc")
+DEFINE_DMA_ENTRY(ovl_008F17C0, "ovl_008F17C0")
+DEFINE_DMA_ENTRY(ovl_008F17C0_reloc, "ovl_008F17C0_reloc")
+DEFINE_DMA_ENTRY(ovl_008F1950, "ovl_008F1950")
+DEFINE_DMA_ENTRY(ovl_008F1950_reloc, "ovl_008F1950_reloc")
+DEFINE_DMA_ENTRY(ovl_008F1BF0, "ovl_008F1BF0")
+DEFINE_DMA_ENTRY(ovl_008F1BF0_reloc, "ovl_008F1BF0_reloc")
+DEFINE_DMA_ENTRY(ovl_008F2020, "ovl_008F2020")
+DEFINE_DMA_ENTRY(ovl_008F2020_reloc, "ovl_008F2020_reloc")
+DEFINE_DMA_ENTRY(ovl_008F2430, "ovl_008F2430")
+DEFINE_DMA_ENTRY(ovl_008F2430_reloc, "ovl_008F2430_reloc")
+DEFINE_DMA_ENTRY(ovl_008F26B0, "ovl_008F26B0")
+DEFINE_DMA_ENTRY(ovl_008F26B0_reloc, "ovl_008F26B0_reloc")
+DEFINE_DMA_ENTRY(ovl_008F2A50, "ovl_008F2A50")
+DEFINE_DMA_ENTRY(ovl_008F2A50_reloc, "ovl_008F2A50_reloc")
+DEFINE_DMA_ENTRY(ovl_008F2E40, "ovl_008F2E40")
+DEFINE_DMA_ENTRY(ovl_008F2E40_reloc, "ovl_008F2E40_reloc")
+DEFINE_DMA_ENTRY(ovl_008F3280, "ovl_008F3280")
+DEFINE_DMA_ENTRY(ovl_008F3280_reloc, "ovl_008F3280_reloc")
+DEFINE_DMA_ENTRY(ovl_008F3780, "ovl_008F3780")
+DEFINE_DMA_ENTRY(ovl_008F3780_reloc, "ovl_008F3780_reloc")
+DEFINE_DMA_ENTRY(ovl_008F3EC0, "ovl_008F3EC0")
+DEFINE_DMA_ENTRY(ovl_008F3EC0_reloc, "ovl_008F3EC0_reloc")
+DEFINE_DMA_ENTRY(ovl_008F42E0, "ovl_008F42E0")
+DEFINE_DMA_ENTRY(ovl_008F42E0_reloc, "ovl_008F42E0_reloc")
+DEFINE_DMA_ENTRY(ovl_008F44F0, "ovl_008F44F0")
+DEFINE_DMA_ENTRY(ovl_008F44F0_reloc, "ovl_008F44F0_reloc")
+DEFINE_DMA_ENTRY(ovl_008F4890, "ovl_008F4890")
+DEFINE_DMA_ENTRY(ovl_008F4890_reloc, "ovl_008F4890_reloc")
+DEFINE_DMA_ENTRY(ovl_008F4DC0, "ovl_008F4DC0")
+DEFINE_DMA_ENTRY(ovl_008F4DC0_reloc, "ovl_008F4DC0_reloc")
+DEFINE_DMA_ENTRY(ovl_008F4F90, "ovl_008F4F90")
+DEFINE_DMA_ENTRY(ovl_008F4F90_reloc, "ovl_008F4F90_reloc")
+DEFINE_DMA_ENTRY(ovl_008F5270, "ovl_008F5270")
+DEFINE_DMA_ENTRY(ovl_008F5270_reloc, "ovl_008F5270_reloc")
+DEFINE_DMA_ENTRY(ovl_008F56A0, "ovl_008F56A0")
+DEFINE_DMA_ENTRY(ovl_008F56A0_reloc, "ovl_008F56A0_reloc")
+DEFINE_DMA_ENTRY(ovl_008F5A80, "ovl_008F5A80")
+DEFINE_DMA_ENTRY(ovl_008F5A80_reloc, "ovl_008F5A80_reloc")
+DEFINE_DMA_ENTRY(ovl_008F5CD0, "ovl_008F5CD0")
+DEFINE_DMA_ENTRY(ovl_008F5CD0_reloc, "ovl_008F5CD0_reloc")
+DEFINE_DMA_ENTRY(ovl_008F5F70, "ovl_008F5F70")
+DEFINE_DMA_ENTRY(ovl_008F5F70_reloc, "ovl_008F5F70_reloc")
+DEFINE_DMA_ENTRY(ovl_008F6320, "ovl_008F6320")
+DEFINE_DMA_ENTRY(ovl_008F6320_reloc, "ovl_008F6320_reloc")
+DEFINE_DMA_ENTRY(ovl_008F6600, "ovl_008F6600")
+DEFINE_DMA_ENTRY(ovl_008F6600_reloc, "ovl_008F6600_reloc")
+DEFINE_DMA_ENTRY(ovl_008F6BE0, "ovl_008F6BE0")
+DEFINE_DMA_ENTRY(ovl_008F6BE0_reloc, "ovl_008F6BE0_reloc")
+DEFINE_DMA_ENTRY(ovl_008F6ED0, "ovl_008F6ED0")
+DEFINE_DMA_ENTRY(ovl_008F6ED0_reloc, "ovl_008F6ED0_reloc")
+DEFINE_DMA_ENTRY(ovl_008F73B0, "ovl_008F73B0")
+DEFINE_DMA_ENTRY(ovl_008F73B0_reloc, "ovl_008F73B0_reloc")
+DEFINE_DMA_ENTRY(ovl_008F7770, "ovl_008F7770")
+DEFINE_DMA_ENTRY(ovl_008F7770_reloc, "ovl_008F7770_reloc")
+DEFINE_DMA_ENTRY(ovl_008F8140, "ovl_008F8140")
+DEFINE_DMA_ENTRY(ovl_008F8140_reloc, "ovl_008F8140_reloc")
+DEFINE_DMA_ENTRY(ovl_008F8690, "ovl_008F8690")
+DEFINE_DMA_ENTRY(ovl_008F8690_reloc, "ovl_008F8690_reloc")
+DEFINE_DMA_ENTRY(ovl_008F8A80, "ovl_008F8A80")
+DEFINE_DMA_ENTRY(ovl_008F8A80_reloc, "ovl_008F8A80_reloc")
+DEFINE_DMA_ENTRY(ovl_008F8FE0, "ovl_008F8FE0")
+DEFINE_DMA_ENTRY(ovl_008F8FE0_reloc, "ovl_008F8FE0_reloc")
+DEFINE_DMA_ENTRY(ovl_008F9650, "ovl_008F9650")
+DEFINE_DMA_ENTRY(ovl_008F9650_reloc, "ovl_008F9650_reloc")
+DEFINE_DMA_ENTRY(ovl_008F98E0, "ovl_008F98E0")
+DEFINE_DMA_ENTRY(ovl_008F98E0_reloc, "ovl_008F98E0_reloc")
+DEFINE_DMA_ENTRY(ovl_008F9D20, "ovl_008F9D20")
+DEFINE_DMA_ENTRY(ovl_008F9D20_reloc, "ovl_008F9D20_reloc")
+DEFINE_DMA_ENTRY(ovl_008F9F00, "ovl_008F9F00")
+DEFINE_DMA_ENTRY(ovl_008F9F00_reloc, "ovl_008F9F00_reloc")
+DEFINE_DMA_ENTRY(ovl_008FA340, "ovl_008FA340")
+DEFINE_DMA_ENTRY(ovl_008FA340_reloc, "ovl_008FA340_reloc")
+DEFINE_DMA_ENTRY(ovl_008FA5E0, "ovl_008FA5E0")
+DEFINE_DMA_ENTRY(ovl_008FA5E0_reloc, "ovl_008FA5E0_reloc")
+DEFINE_DMA_ENTRY(ovl_008FAC50, "ovl_008FAC50")
+DEFINE_DMA_ENTRY(ovl_008FAC50_reloc, "ovl_008FAC50_reloc")
+DEFINE_DMA_ENTRY(ovl_008FAED0, "ovl_008FAED0")
+DEFINE_DMA_ENTRY(ovl_008FAED0_reloc, "ovl_008FAED0_reloc")
+DEFINE_DMA_ENTRY(ovl_008FB460, "ovl_008FB460")
+DEFINE_DMA_ENTRY(ovl_008FB460_reloc, "ovl_008FB460_reloc")
+DEFINE_DMA_ENTRY(ovl_008FB710, "ovl_008FB710")
+DEFINE_DMA_ENTRY(ovl_008FB710_reloc, "ovl_008FB710_reloc")
+DEFINE_DMA_ENTRY(ovl_008FBB90, "ovl_008FBB90")
+DEFINE_DMA_ENTRY(ovl_008FBB90_reloc, "ovl_008FBB90_reloc")
+DEFINE_DMA_ENTRY(ovl_008FBF70, "ovl_008FBF70")
+DEFINE_DMA_ENTRY(ovl_008FBF70_reloc, "ovl_008FBF70_reloc")
+DEFINE_DMA_ENTRY(ovl_008FC210, "ovl_008FC210")
+DEFINE_DMA_ENTRY(ovl_008FC210_reloc, "ovl_008FC210_reloc")
+DEFINE_DMA_ENTRY(ovl_008FC7E0, "ovl_008FC7E0")
+DEFINE_DMA_ENTRY(ovl_008FC7E0_reloc, "ovl_008FC7E0_reloc")
+DEFINE_DMA_ENTRY(ovl_008FCA20, "ovl_008FCA20")
+DEFINE_DMA_ENTRY(ovl_008FCA20_reloc, "ovl_008FCA20_reloc")
+DEFINE_DMA_ENTRY(ovl_008FD520, "ovl_008FD520")
+DEFINE_DMA_ENTRY(ovl_008FD520_reloc, "ovl_008FD520_reloc")
+DEFINE_DMA_ENTRY(ovl_008FDE10, "ovl_008FDE10")
+DEFINE_DMA_ENTRY(ovl_008FDE10_reloc, "ovl_008FDE10_reloc")
+DEFINE_DMA_ENTRY(ovl_008FDF90, "ovl_008FDF90")
+DEFINE_DMA_ENTRY(ovl_008FDF90_reloc, "ovl_008FDF90_reloc")
+DEFINE_DMA_ENTRY(ovl_008FE3E0, "ovl_008FE3E0")
+DEFINE_DMA_ENTRY(ovl_008FE3E0_reloc, "ovl_008FE3E0_reloc")
+DEFINE_DMA_ENTRY(ovl_008FEB60, "ovl_008FEB60")
+DEFINE_DMA_ENTRY(ovl_008FEB60_reloc, "ovl_008FEB60_reloc")
+DEFINE_DMA_ENTRY(ovl_008FEE80, "ovl_008FEE80")
+DEFINE_DMA_ENTRY(ovl_008FEE80_reloc, "ovl_008FEE80_reloc")
+DEFINE_DMA_ENTRY(ovl_008FF170, "ovl_008FF170")
+DEFINE_DMA_ENTRY(ovl_008FF170_reloc, "ovl_008FF170_reloc")
+DEFINE_DMA_ENTRY(ovl_008FF7C0, "ovl_008FF7C0")
+DEFINE_DMA_ENTRY(ovl_008FF7C0_reloc, "ovl_008FF7C0_reloc")
+DEFINE_DMA_ENTRY(ovl_008FFC90, "ovl_008FFC90")
+DEFINE_DMA_ENTRY(ovl_008FFC90_reloc, "ovl_008FFC90_reloc")
+DEFINE_DMA_ENTRY(ovl_00900530, "ovl_00900530")
+DEFINE_DMA_ENTRY(ovl_00900530_reloc, "ovl_00900530_reloc")
+DEFINE_DMA_ENTRY(ovl_00900CD0, "ovl_00900CD0")
+DEFINE_DMA_ENTRY(ovl_00900CD0_reloc, "ovl_00900CD0_reloc")
+DEFINE_DMA_ENTRY(ovl_009015C0, "ovl_009015C0")
+DEFINE_DMA_ENTRY(ovl_009015C0_reloc, "ovl_009015C0_reloc")
+DEFINE_DMA_ENTRY(ovl_00901D60, "ovl_00901D60")
+DEFINE_DMA_ENTRY(ovl_00901D60_reloc, "ovl_00901D60_reloc")
+DEFINE_DMA_ENTRY(ovl_00902120, "ovl_00902120")
+DEFINE_DMA_ENTRY(ovl_00902120_reloc, "ovl_00902120_reloc")
+DEFINE_DMA_ENTRY(ovl_00902810, "ovl_00902810")
+DEFINE_DMA_ENTRY(ovl_00902810_reloc, "ovl_00902810_reloc")
+DEFINE_DMA_ENTRY(ovl_00902C40, "ovl_00902C40")
+DEFINE_DMA_ENTRY(ovl_00902C40_reloc, "ovl_00902C40_reloc")
+DEFINE_DMA_ENTRY(ovl_009031F0, "ovl_009031F0")
+DEFINE_DMA_ENTRY(ovl_009031F0_reloc, "ovl_009031F0_reloc")
+DEFINE_DMA_ENTRY(ovl_00903460, "ovl_00903460")
+DEFINE_DMA_ENTRY(ovl_00903460_reloc, "ovl_00903460_reloc")
+DEFINE_DMA_ENTRY(ovl_00903B90, "ovl_00903B90")
+DEFINE_DMA_ENTRY(ovl_00903B90_reloc, "ovl_00903B90_reloc")
+DEFINE_DMA_ENTRY(ovl_00903BD0, "ovl_00903BD0")
+DEFINE_DMA_ENTRY(ovl_00903BD0_reloc, "ovl_00903BD0_reloc")
+DEFINE_DMA_ENTRY(ovl_00904330, "ovl_00904330")
+DEFINE_DMA_ENTRY(ovl_00904330_reloc, "ovl_00904330_reloc")
+DEFINE_DMA_ENTRY(ovl_00904AB0, "ovl_00904AB0")
+DEFINE_DMA_ENTRY(ovl_00904AB0_reloc, "ovl_00904AB0_reloc")
+DEFINE_DMA_ENTRY(ovl_00905280, "ovl_00905280")
+DEFINE_DMA_ENTRY(ovl_00905280_reloc, "ovl_00905280_reloc")
+DEFINE_DMA_ENTRY(ovl_00905A30, "ovl_00905A30")
+DEFINE_DMA_ENTRY(ovl_00905A30_reloc, "ovl_00905A30_reloc")
+DEFINE_DMA_ENTRY(ovl_00906060, "ovl_00906060")
+DEFINE_DMA_ENTRY(ovl_00906060_reloc, "ovl_00906060_reloc")
+DEFINE_DMA_ENTRY(ovl_00906220, "ovl_00906220")
+DEFINE_DMA_ENTRY(ovl_00906220_reloc, "ovl_00906220_reloc")
+DEFINE_DMA_ENTRY(ovl_00906290, "ovl_00906290")
+DEFINE_DMA_ENTRY(ovl_00906290_reloc, "ovl_00906290_reloc")
+DEFINE_DMA_ENTRY(ovl_00906300, "ovl_00906300")
+DEFINE_DMA_ENTRY(ovl_00906300_reloc, "ovl_00906300_reloc")
+DEFINE_DMA_ENTRY(ovl_00906370, "ovl_00906370")
+DEFINE_DMA_ENTRY(ovl_00906370_reloc, "ovl_00906370_reloc")
+DEFINE_DMA_ENTRY(ovl_009063E0, "ovl_009063E0")
+DEFINE_DMA_ENTRY(ovl_009063E0_reloc, "ovl_009063E0_reloc")
+DEFINE_DMA_ENTRY(ovl_00906450, "ovl_00906450")
+DEFINE_DMA_ENTRY(ovl_00906450_reloc, "ovl_00906450_reloc")
+DEFINE_DMA_ENTRY(ovl_009064C0, "ovl_009064C0")
+DEFINE_DMA_ENTRY(ovl_009064C0_reloc, "ovl_009064C0_reloc")
+DEFINE_DMA_ENTRY(ovl_00906530, "ovl_00906530")
+DEFINE_DMA_ENTRY(ovl_00906530_reloc, "ovl_00906530_reloc")
+DEFINE_DMA_ENTRY(ovl_009065A0, "ovl_009065A0")
+DEFINE_DMA_ENTRY(ovl_009065A0_reloc, "ovl_009065A0_reloc")
+DEFINE_DMA_ENTRY(ovl_00906610, "ovl_00906610")
+DEFINE_DMA_ENTRY(ovl_00906610_reloc, "ovl_00906610_reloc")
+DEFINE_DMA_ENTRY(ovl_00906680, "ovl_00906680")
+DEFINE_DMA_ENTRY(ovl_00906680_reloc, "ovl_00906680_reloc")
+DEFINE_DMA_ENTRY(ovl_009066F0, "ovl_009066F0")
+DEFINE_DMA_ENTRY(ovl_009066F0_reloc, "ovl_009066F0_reloc")
+DEFINE_DMA_ENTRY(ovl_00906B80, "ovl_00906B80")
+DEFINE_DMA_ENTRY(ovl_00906B80_reloc, "ovl_00906B80_reloc")
+DEFINE_DMA_ENTRY(ovl_00906F10, "ovl_00906F10")
+DEFINE_DMA_ENTRY(ovl_00906F10_reloc, "ovl_00906F10_reloc")
+DEFINE_DMA_ENTRY(ovl_00906F80, "ovl_00906F80")
+DEFINE_DMA_ENTRY(ovl_00906F80_reloc, "ovl_00906F80_reloc")
+DEFINE_DMA_ENTRY(ovl_00906FF0, "ovl_00906FF0")
+DEFINE_DMA_ENTRY(ovl_00906FF0_reloc, "ovl_00906FF0_reloc")
+DEFINE_DMA_ENTRY(ovl_00907060, "ovl_00907060")
+DEFINE_DMA_ENTRY(ovl_00907060_reloc, "ovl_00907060_reloc")
+DEFINE_DMA_ENTRY(ovl_009070D0, "ovl_009070D0")
+DEFINE_DMA_ENTRY(ovl_009070D0_reloc, "ovl_009070D0_reloc")
+DEFINE_DMA_ENTRY(ovl_00907140, "ovl_00907140")
+DEFINE_DMA_ENTRY(ovl_00907140_reloc, "ovl_00907140_reloc")
+DEFINE_DMA_ENTRY(ovl_009071B0, "ovl_009071B0")
+DEFINE_DMA_ENTRY(ovl_009071B0_reloc, "ovl_009071B0_reloc")
+DEFINE_DMA_ENTRY(ovl_00907640, "ovl_00907640")
+DEFINE_DMA_ENTRY(ovl_00907640_reloc, "ovl_00907640_reloc")
+DEFINE_DMA_ENTRY(ovl_009076B0, "ovl_009076B0")
+DEFINE_DMA_ENTRY(ovl_009076B0_reloc, "ovl_009076B0_reloc")
+DEFINE_DMA_ENTRY(ovl_00907720, "ovl_00907720")
+DEFINE_DMA_ENTRY(ovl_00907720_reloc, "ovl_00907720_reloc")
+DEFINE_DMA_ENTRY(ovl_00907790, "ovl_00907790")
+DEFINE_DMA_ENTRY(ovl_00907790_reloc, "ovl_00907790_reloc")
+DEFINE_DMA_ENTRY(ovl_00907B20, "ovl_00907B20")
+DEFINE_DMA_ENTRY(ovl_00907B20_reloc, "ovl_00907B20_reloc")
+DEFINE_DMA_ENTRY(ovl_00907B90, "ovl_00907B90")
+DEFINE_DMA_ENTRY(ovl_00907B90_reloc, "ovl_00907B90_reloc")
+DEFINE_DMA_ENTRY(ovl_00907C00, "ovl_00907C00")
+DEFINE_DMA_ENTRY(ovl_00907C00_reloc, "ovl_00907C00_reloc")
+DEFINE_DMA_ENTRY(ovl_00907C70, "ovl_00907C70")
+DEFINE_DMA_ENTRY(ovl_00907C70_reloc, "ovl_00907C70_reloc")
+DEFINE_DMA_ENTRY(ovl_00907CE0, "ovl_00907CE0")
+DEFINE_DMA_ENTRY(ovl_00907CE0_reloc, "ovl_00907CE0_reloc")
+DEFINE_DMA_ENTRY(ovl_00907D50, "ovl_00907D50")
+DEFINE_DMA_ENTRY(ovl_00907D50_reloc, "ovl_00907D50_reloc")
+DEFINE_DMA_ENTRY(ovl_00907DC0, "ovl_00907DC0")
+DEFINE_DMA_ENTRY(ovl_00907DC0_reloc, "ovl_00907DC0_reloc")
+DEFINE_DMA_ENTRY(ovl_00907E30, "ovl_00907E30")
+DEFINE_DMA_ENTRY(ovl_00907E30_reloc, "ovl_00907E30_reloc")
+DEFINE_DMA_ENTRY(ovl_00907EA0, "ovl_00907EA0")
+DEFINE_DMA_ENTRY(ovl_00907EA0_reloc, "ovl_00907EA0_reloc")
+DEFINE_DMA_ENTRY(ovl_00907F10, "ovl_00907F10")
+DEFINE_DMA_ENTRY(ovl_00907F10_reloc, "ovl_00907F10_reloc")
+DEFINE_DMA_ENTRY(ovl_00908020, "ovl_00908020")
+DEFINE_DMA_ENTRY(ovl_00908020_reloc, "ovl_00908020_reloc")
+DEFINE_DMA_ENTRY(ovl_00908130, "ovl_00908130")
+DEFINE_DMA_ENTRY(ovl_00908130_reloc, "ovl_00908130_reloc")
+DEFINE_DMA_ENTRY(ovl_00908240, "ovl_00908240")
+DEFINE_DMA_ENTRY(ovl_00908240_reloc, "ovl_00908240_reloc")
+DEFINE_DMA_ENTRY(ovl_00908350, "ovl_00908350")
+DEFINE_DMA_ENTRY(ovl_00908350_reloc, "ovl_00908350_reloc")
+DEFINE_DMA_ENTRY(ovl_009083C0, "ovl_009083C0")
+DEFINE_DMA_ENTRY(ovl_009083C0_reloc, "ovl_009083C0_reloc")
+DEFINE_DMA_ENTRY(ovl_00908430, "ovl_00908430")
+DEFINE_DMA_ENTRY(ovl_00908430_reloc, "ovl_00908430_reloc")
+DEFINE_DMA_ENTRY(ovl_009084A0, "ovl_009084A0")
+DEFINE_DMA_ENTRY(ovl_009084A0_reloc, "ovl_009084A0_reloc")
+DEFINE_DMA_ENTRY(ovl_00908510, "ovl_00908510")
+DEFINE_DMA_ENTRY(ovl_00908510_reloc, "ovl_00908510_reloc")
+DEFINE_DMA_ENTRY(ovl_00908580, "ovl_00908580")
+DEFINE_DMA_ENTRY(ovl_00908580_reloc, "ovl_00908580_reloc")
+DEFINE_DMA_ENTRY(ovl_00908910, "ovl_00908910")
+DEFINE_DMA_ENTRY(ovl_00908910_reloc, "ovl_00908910_reloc")
+DEFINE_DMA_ENTRY(ovl_00908980, "ovl_00908980")
+DEFINE_DMA_ENTRY(ovl_00908980_reloc, "ovl_00908980_reloc")
+DEFINE_DMA_ENTRY(ovl_009089F0, "ovl_009089F0")
+DEFINE_DMA_ENTRY(ovl_009089F0_reloc, "ovl_009089F0_reloc")
+DEFINE_DMA_ENTRY(ovl_00908A60, "ovl_00908A60")
+DEFINE_DMA_ENTRY(ovl_00908A60_reloc, "ovl_00908A60_reloc")
+DEFINE_DMA_ENTRY(ovl_00908AD0, "ovl_00908AD0")
+DEFINE_DMA_ENTRY(ovl_00908AD0_reloc, "ovl_00908AD0_reloc")
+DEFINE_DMA_ENTRY(ovl_00908B40, "ovl_00908B40")
+DEFINE_DMA_ENTRY(ovl_00908B40_reloc, "ovl_00908B40_reloc")
+DEFINE_DMA_ENTRY(ovl_00908BB0, "ovl_00908BB0")
+DEFINE_DMA_ENTRY(ovl_00908BB0_reloc, "ovl_00908BB0_reloc")
+DEFINE_DMA_ENTRY(ovl_00908C20, "ovl_00908C20")
+DEFINE_DMA_ENTRY(ovl_00908C20_reloc, "ovl_00908C20_reloc")
+DEFINE_DMA_ENTRY(ovl_00908C90, "ovl_00908C90")
+DEFINE_DMA_ENTRY(ovl_00908C90_reloc, "ovl_00908C90_reloc")
+DEFINE_DMA_ENTRY(ovl_00908D00, "ovl_00908D00")
+DEFINE_DMA_ENTRY(ovl_00908D00_reloc, "ovl_00908D00_reloc")
+DEFINE_DMA_ENTRY(ovl_00908D70, "ovl_00908D70")
+DEFINE_DMA_ENTRY(ovl_00908D70_reloc, "ovl_00908D70_reloc")
+DEFINE_DMA_ENTRY(ovl_00908DE0, "ovl_00908DE0")
+DEFINE_DMA_ENTRY(ovl_00908DE0_reloc, "ovl_00908DE0_reloc")
+DEFINE_DMA_ENTRY(ovl_00908E50, "ovl_00908E50")
+DEFINE_DMA_ENTRY(ovl_00908E50_reloc, "ovl_00908E50_reloc")
+DEFINE_DMA_ENTRY(ovl_00908EC0, "ovl_00908EC0")
+DEFINE_DMA_ENTRY(ovl_00908EC0_reloc, "ovl_00908EC0_reloc")
+DEFINE_DMA_ENTRY(ovl_00908F30, "ovl_00908F30")
+DEFINE_DMA_ENTRY(ovl_00908F30_reloc, "ovl_00908F30_reloc")
+DEFINE_DMA_ENTRY(ovl_00909410, "ovl_00909410")
+DEFINE_DMA_ENTRY(ovl_00909410_reloc, "ovl_00909410_reloc")
+DEFINE_DMA_ENTRY(ovl_00909480, "ovl_00909480")
+DEFINE_DMA_ENTRY(ovl_00909480_reloc, "ovl_00909480_reloc")
+DEFINE_DMA_ENTRY(ovl_009094F0, "ovl_009094F0")
+DEFINE_DMA_ENTRY(ovl_009094F0_reloc, "ovl_009094F0_reloc")
+DEFINE_DMA_ENTRY(ovl_00909560, "ovl_00909560")
+DEFINE_DMA_ENTRY(ovl_00909560_reloc, "ovl_00909560_reloc")
+DEFINE_DMA_ENTRY(ovl_009095D0, "ovl_009095D0")
+DEFINE_DMA_ENTRY(ovl_009095D0_reloc, "ovl_009095D0_reloc")
+DEFINE_DMA_ENTRY(ovl_009096E0, "ovl_009096E0")
+DEFINE_DMA_ENTRY(ovl_009096E0_reloc, "ovl_009096E0_reloc")
+DEFINE_DMA_ENTRY(ovl_009097F0, "ovl_009097F0")
+DEFINE_DMA_ENTRY(ovl_009097F0_reloc, "ovl_009097F0_reloc")
+DEFINE_DMA_ENTRY(ovl_00909900, "ovl_00909900")
+DEFINE_DMA_ENTRY(ovl_00909900_reloc, "ovl_00909900_reloc")
+DEFINE_DMA_ENTRY(ovl_00909970, "ovl_00909970")
+DEFINE_DMA_ENTRY(ovl_00909970_reloc, "ovl_00909970_reloc")
+DEFINE_DMA_ENTRY(ovl_009099E0, "ovl_009099E0")
+DEFINE_DMA_ENTRY(ovl_009099E0_reloc, "ovl_009099E0_reloc")
+DEFINE_DMA_ENTRY(ovl_00909A50, "ovl_00909A50")
+DEFINE_DMA_ENTRY(ovl_00909A50_reloc, "ovl_00909A50_reloc")
+DEFINE_DMA_ENTRY(ovl_00909B60, "ovl_00909B60")
+DEFINE_DMA_ENTRY(ovl_00909B60_reloc, "ovl_00909B60_reloc")
+DEFINE_DMA_ENTRY(ovl_00909EF0, "ovl_00909EF0")
+DEFINE_DMA_ENTRY(ovl_00909EF0_reloc, "ovl_00909EF0_reloc")
+DEFINE_DMA_ENTRY(ovl_00909F60, "ovl_00909F60")
+DEFINE_DMA_ENTRY(ovl_00909F60_reloc, "ovl_00909F60_reloc")
+DEFINE_DMA_ENTRY(ovl_00909FD0, "ovl_00909FD0")
+DEFINE_DMA_ENTRY(ovl_00909FD0_reloc, "ovl_00909FD0_reloc")
+DEFINE_DMA_ENTRY(ovl_0090A040, "ovl_0090A040")
+DEFINE_DMA_ENTRY(ovl_0090A040_reloc, "ovl_0090A040_reloc")
+DEFINE_DMA_ENTRY(ovl_0090A3D0, "ovl_0090A3D0")
+DEFINE_DMA_ENTRY(ovl_0090A3D0_reloc, "ovl_0090A3D0_reloc")
+DEFINE_DMA_ENTRY(ovl_0090A440, "ovl_0090A440")
+DEFINE_DMA_ENTRY(ovl_0090A440_reloc, "ovl_0090A440_reloc")
+DEFINE_DMA_ENTRY(ovl_0090A4B0, "ovl_0090A4B0")
+DEFINE_DMA_ENTRY(ovl_0090A4B0_reloc, "ovl_0090A4B0_reloc")
+DEFINE_DMA_ENTRY(ovl_0090A520, "ovl_0090A520")
+DEFINE_DMA_ENTRY(ovl_0090A520_reloc, "ovl_0090A520_reloc")
+DEFINE_DMA_ENTRY(ovl_0090ADB0, "ovl_0090ADB0")
+DEFINE_DMA_ENTRY(ovl_0090ADB0_reloc, "ovl_0090ADB0_reloc")
+DEFINE_DMA_ENTRY(ovl_0090AE20, "ovl_0090AE20")
+DEFINE_DMA_ENTRY(ovl_0090AE20_reloc, "ovl_0090AE20_reloc")
+DEFINE_DMA_ENTRY(ovl_0090B1B0, "ovl_0090B1B0")
+DEFINE_DMA_ENTRY(ovl_0090B1B0_reloc, "ovl_0090B1B0_reloc")
+DEFINE_DMA_ENTRY(ovl_0090B220, "ovl_0090B220")
+DEFINE_DMA_ENTRY(ovl_0090B220_reloc, "ovl_0090B220_reloc")
+DEFINE_DMA_ENTRY(ovl_0090B290, "ovl_0090B290")
+DEFINE_DMA_ENTRY(ovl_0090B290_reloc, "ovl_0090B290_reloc")
+DEFINE_DMA_ENTRY(ovl_0090B300, "ovl_0090B300")
+DEFINE_DMA_ENTRY(ovl_0090B300_reloc, "ovl_0090B300_reloc")
+DEFINE_DMA_ENTRY(ovl_0090B370, "ovl_0090B370")
+DEFINE_DMA_ENTRY(ovl_0090B370_reloc, "ovl_0090B370_reloc")
+DEFINE_DMA_ENTRY(ovl_0090B3E0, "ovl_0090B3E0")
+DEFINE_DMA_ENTRY(ovl_0090B3E0_reloc, "ovl_0090B3E0_reloc")
+DEFINE_DMA_ENTRY(ovl_0090B450, "ovl_0090B450")
+DEFINE_DMA_ENTRY(ovl_0090B450_reloc, "ovl_0090B450_reloc")
+DEFINE_DMA_ENTRY(ovl_0090B4C0, "ovl_0090B4C0")
+DEFINE_DMA_ENTRY(ovl_0090B4C0_reloc, "ovl_0090B4C0_reloc")
+DEFINE_DMA_ENTRY(ovl_0090B530, "ovl_0090B530")
+DEFINE_DMA_ENTRY(ovl_0090B530_reloc, "ovl_0090B530_reloc")
+DEFINE_DMA_ENTRY(ovl_0090B5A0, "ovl_0090B5A0")
+DEFINE_DMA_ENTRY(ovl_0090B5A0_reloc, "ovl_0090B5A0_reloc")
+DEFINE_DMA_ENTRY(ovl_0090B610, "ovl_0090B610")
+DEFINE_DMA_ENTRY(ovl_0090B610_reloc, "ovl_0090B610_reloc")
+DEFINE_DMA_ENTRY(ovl_0090B9A0, "ovl_0090B9A0")
+DEFINE_DMA_ENTRY(ovl_0090B9A0_reloc, "ovl_0090B9A0_reloc")
+DEFINE_DMA_ENTRY(ovl_0090BA10, "ovl_0090BA10")
+DEFINE_DMA_ENTRY(ovl_0090BA10_reloc, "ovl_0090BA10_reloc")
+DEFINE_DMA_ENTRY(ovl_0090BA80, "ovl_0090BA80")
+DEFINE_DMA_ENTRY(ovl_0090BA80_reloc, "ovl_0090BA80_reloc")
+DEFINE_DMA_ENTRY(ovl_0090BAF0, "ovl_0090BAF0")
+DEFINE_DMA_ENTRY(ovl_0090BAF0_reloc, "ovl_0090BAF0_reloc")
+DEFINE_DMA_ENTRY(ovl_0090BB60, "ovl_0090BB60")
+DEFINE_DMA_ENTRY(ovl_0090BB60_reloc, "ovl_0090BB60_reloc")
+DEFINE_DMA_ENTRY(ovl_0090BC70, "ovl_0090BC70")
+DEFINE_DMA_ENTRY(ovl_0090BC70_reloc, "ovl_0090BC70_reloc")
+DEFINE_DMA_ENTRY(ovl_0090BCE0, "ovl_0090BCE0")
+DEFINE_DMA_ENTRY(ovl_0090BCE0_reloc, "ovl_0090BCE0_reloc")
+DEFINE_DMA_ENTRY(ovl_0090C070, "ovl_0090C070")
+DEFINE_DMA_ENTRY(ovl_0090C070_reloc, "ovl_0090C070_reloc")
+DEFINE_DMA_ENTRY(ovl_0090C0E0, "ovl_0090C0E0")
+DEFINE_DMA_ENTRY(ovl_0090C0E0_reloc, "ovl_0090C0E0_reloc")
+DEFINE_DMA_ENTRY(ovl_0090C280, "ovl_0090C280")
+DEFINE_DMA_ENTRY(ovl_0090C280_reloc, "ovl_0090C280_reloc")
+DEFINE_DMA_ENTRY(ovl_0090C360, "ovl_0090C360")
+DEFINE_DMA_ENTRY(ovl_0090C360_reloc, "ovl_0090C360_reloc")
+DEFINE_DMA_ENTRY(ovl_0090C470, "ovl_0090C470")
+DEFINE_DMA_ENTRY(ovl_0090C470_reloc, "ovl_0090C470_reloc")
+DEFINE_DMA_ENTRY(ovl_0090C580, "ovl_0090C580")
+DEFINE_DMA_ENTRY(ovl_0090C580_reloc, "ovl_0090C580_reloc")
+DEFINE_DMA_ENTRY(ovl_0090C690, "ovl_0090C690")
+DEFINE_DMA_ENTRY(ovl_0090C690_reloc, "ovl_0090C690_reloc")
+DEFINE_DMA_ENTRY(ovl_0090C700, "ovl_0090C700")
+DEFINE_DMA_ENTRY(ovl_0090C700_reloc, "ovl_0090C700_reloc")
+DEFINE_DMA_ENTRY(ovl_0090C770, "ovl_0090C770")
+DEFINE_DMA_ENTRY(ovl_0090C770_reloc, "ovl_0090C770_reloc")
+DEFINE_DMA_ENTRY(ovl_0090C7E0, "ovl_0090C7E0")
+DEFINE_DMA_ENTRY(ovl_0090C7E0_reloc, "ovl_0090C7E0_reloc")
+DEFINE_DMA_ENTRY(ovl_0090C850, "ovl_0090C850")
+DEFINE_DMA_ENTRY(ovl_0090C850_reloc, "ovl_0090C850_reloc")
+DEFINE_DMA_ENTRY(ovl_0090C960, "ovl_0090C960")
+DEFINE_DMA_ENTRY(ovl_0090C960_reloc, "ovl_0090C960_reloc")
+DEFINE_DMA_ENTRY(ovl_0090C9D0, "ovl_0090C9D0")
+DEFINE_DMA_ENTRY(ovl_0090C9D0_reloc, "ovl_0090C9D0_reloc")
+DEFINE_DMA_ENTRY(ovl_0090CAE0, "ovl_0090CAE0")
+DEFINE_DMA_ENTRY(ovl_0090CAE0_reloc, "ovl_0090CAE0_reloc")
+DEFINE_DMA_ENTRY(ovl_0090CEA0, "ovl_0090CEA0")
+DEFINE_DMA_ENTRY(ovl_0090CEA0_reloc, "ovl_0090CEA0_reloc")
+DEFINE_DMA_ENTRY(ovl_0090CFB0, "ovl_0090CFB0")
+DEFINE_DMA_ENTRY(ovl_0090CFB0_reloc, "ovl_0090CFB0_reloc")
+DEFINE_DMA_ENTRY(ovl_0090D480, "ovl_0090D480")
+DEFINE_DMA_ENTRY(ovl_0090D480_reloc, "ovl_0090D480_reloc")
+DEFINE_DMA_ENTRY(ovl_0090D4F0, "ovl_0090D4F0")
+DEFINE_DMA_ENTRY(ovl_0090D4F0_reloc, "ovl_0090D4F0_reloc")
+DEFINE_DMA_ENTRY(ovl_0090D560, "ovl_0090D560")
+DEFINE_DMA_ENTRY(ovl_0090D560_reloc, "ovl_0090D560_reloc")
+DEFINE_DMA_ENTRY(ovl_0090D5D0, "ovl_0090D5D0")
+DEFINE_DMA_ENTRY(ovl_0090D5D0_reloc, "ovl_0090D5D0_reloc")
+DEFINE_DMA_ENTRY(ovl_0090D640, "ovl_0090D640")
+DEFINE_DMA_ENTRY(ovl_0090D640_reloc, "ovl_0090D640_reloc")
+DEFINE_DMA_ENTRY(ovl_0090D6B0, "ovl_0090D6B0")
+DEFINE_DMA_ENTRY(ovl_0090D6B0_reloc, "ovl_0090D6B0_reloc")
+DEFINE_DMA_ENTRY(ovl_0090D720, "ovl_0090D720")
+DEFINE_DMA_ENTRY(ovl_0090D720_reloc, "ovl_0090D720_reloc")
+DEFINE_DMA_ENTRY(ovl_0090DBA0, "ovl_0090DBA0")
+DEFINE_DMA_ENTRY(ovl_0090DBA0_reloc, "ovl_0090DBA0_reloc")
+DEFINE_DMA_ENTRY(ovl_0090DC10, "ovl_0090DC10")
+DEFINE_DMA_ENTRY(ovl_0090DC10_reloc, "ovl_0090DC10_reloc")
+DEFINE_DMA_ENTRY(ovl_0090DC80, "ovl_0090DC80")
+DEFINE_DMA_ENTRY(ovl_0090DC80_reloc, "ovl_0090DC80_reloc")
+DEFINE_DMA_ENTRY(ovl_0090DCF0, "ovl_0090DCF0")
+DEFINE_DMA_ENTRY(ovl_0090DCF0_reloc, "ovl_0090DCF0_reloc")
+DEFINE_DMA_ENTRY(ovl_0090DD60, "ovl_0090DD60")
+DEFINE_DMA_ENTRY(ovl_0090DD60_reloc, "ovl_0090DD60_reloc")
+DEFINE_DMA_ENTRY(ovl_0090DDD0, "ovl_0090DDD0")
+DEFINE_DMA_ENTRY(ovl_0090DDD0_reloc, "ovl_0090DDD0_reloc")
+DEFINE_DMA_ENTRY(ovl_0090DE40, "ovl_0090DE40")
+DEFINE_DMA_ENTRY(ovl_0090DE40_reloc, "ovl_0090DE40_reloc")
+DEFINE_DMA_ENTRY(ovl_0090DEB0, "ovl_0090DEB0")
+DEFINE_DMA_ENTRY(ovl_0090DEB0_reloc, "ovl_0090DEB0_reloc")
+DEFINE_DMA_ENTRY(ovl_0090DF20, "ovl_0090DF20")
+DEFINE_DMA_ENTRY(ovl_0090DF20_reloc, "ovl_0090DF20_reloc")
+DEFINE_DMA_ENTRY(ovl_0090DF90, "ovl_0090DF90")
+DEFINE_DMA_ENTRY(ovl_0090DF90_reloc, "ovl_0090DF90_reloc")
+DEFINE_DMA_ENTRY(ovl_0090E000, "ovl_0090E000")
+DEFINE_DMA_ENTRY(ovl_0090E000_reloc, "ovl_0090E000_reloc")
+DEFINE_DMA_ENTRY(ovl_0090E070, "ovl_0090E070")
+DEFINE_DMA_ENTRY(ovl_0090E070_reloc, "ovl_0090E070_reloc")
+DEFINE_DMA_ENTRY(ovl_0090E0E0, "ovl_0090E0E0")
+DEFINE_DMA_ENTRY(ovl_0090E0E0_reloc, "ovl_0090E0E0_reloc")
+DEFINE_DMA_ENTRY(ovl_0090E150, "ovl_0090E150")
+DEFINE_DMA_ENTRY(ovl_0090E150_reloc, "ovl_0090E150_reloc")
+DEFINE_DMA_ENTRY(ovl_0090E1C0, "ovl_0090E1C0")
+DEFINE_DMA_ENTRY(ovl_0090E1C0_reloc, "ovl_0090E1C0_reloc")
+DEFINE_DMA_ENTRY(ovl_0090E230, "ovl_0090E230")
+DEFINE_DMA_ENTRY(ovl_0090E230_reloc, "ovl_0090E230_reloc")
+DEFINE_DMA_ENTRY(ovl_0090E2A0, "ovl_0090E2A0")
+DEFINE_DMA_ENTRY(ovl_0090E2A0_reloc, "ovl_0090E2A0_reloc")
+DEFINE_DMA_ENTRY(ovl_0090E310, "ovl_0090E310")
+DEFINE_DMA_ENTRY(ovl_0090E310_reloc, "ovl_0090E310_reloc")
+DEFINE_DMA_ENTRY(ovl_0090E380, "ovl_0090E380")
+DEFINE_DMA_ENTRY(ovl_0090E380_reloc, "ovl_0090E380_reloc")
+DEFINE_DMA_ENTRY(ovl_0090E3F0, "ovl_0090E3F0")
+DEFINE_DMA_ENTRY(ovl_0090E3F0_reloc, "ovl_0090E3F0_reloc")
+DEFINE_DMA_ENTRY(ovl_0090E460, "ovl_0090E460")
+DEFINE_DMA_ENTRY(ovl_0090E460_reloc, "ovl_0090E460_reloc")
+DEFINE_DMA_ENTRY(ovl_0090E880, "ovl_0090E880")
+DEFINE_DMA_ENTRY(ovl_0090E880_reloc, "ovl_0090E880_reloc")
+DEFINE_DMA_ENTRY(ovl_0090E8F0, "ovl_0090E8F0")
+DEFINE_DMA_ENTRY(ovl_0090E8F0_reloc, "ovl_0090E8F0_reloc")
+DEFINE_DMA_ENTRY(ovl_0090E960, "ovl_0090E960")
+DEFINE_DMA_ENTRY(ovl_0090E960_reloc, "ovl_0090E960_reloc")
+DEFINE_DMA_ENTRY(ovl_0090E9D0, "ovl_0090E9D0")
+DEFINE_DMA_ENTRY(ovl_0090E9D0_reloc, "ovl_0090E9D0_reloc")
+DEFINE_DMA_ENTRY(ovl_0090EA40, "ovl_0090EA40")
+DEFINE_DMA_ENTRY(ovl_0090EA40_reloc, "ovl_0090EA40_reloc")
+DEFINE_DMA_ENTRY(ovl_0090EAB0, "ovl_0090EAB0")
+DEFINE_DMA_ENTRY(ovl_0090EAB0_reloc, "ovl_0090EAB0_reloc")
+DEFINE_DMA_ENTRY(ovl_0090EB20, "ovl_0090EB20")
+DEFINE_DMA_ENTRY(ovl_0090EB20_reloc, "ovl_0090EB20_reloc")
+DEFINE_DMA_ENTRY(ovl_0090EB90, "ovl_0090EB90")
+DEFINE_DMA_ENTRY(ovl_0090EB90_reloc, "ovl_0090EB90_reloc")
+DEFINE_DMA_ENTRY(ovl_0090EC00, "ovl_0090EC00")
+DEFINE_DMA_ENTRY(ovl_0090EC00_reloc, "ovl_0090EC00_reloc")
+DEFINE_DMA_ENTRY(ovl_0090EC70, "ovl_0090EC70")
+DEFINE_DMA_ENTRY(ovl_0090EC70_reloc, "ovl_0090EC70_reloc")
+DEFINE_DMA_ENTRY(ovl_0090ECE0, "ovl_0090ECE0")
+DEFINE_DMA_ENTRY(ovl_0090ECE0_reloc, "ovl_0090ECE0_reloc")
+DEFINE_DMA_ENTRY(ovl_0090ED50, "ovl_0090ED50")
+DEFINE_DMA_ENTRY(ovl_0090ED50_reloc, "ovl_0090ED50_reloc")
+DEFINE_DMA_ENTRY(ovl_0090EDC0, "ovl_0090EDC0")
+DEFINE_DMA_ENTRY(ovl_0090EDC0_reloc, "ovl_0090EDC0_reloc")
+DEFINE_DMA_ENTRY(ovl_0090EE30, "ovl_0090EE30")
+DEFINE_DMA_ENTRY(ovl_0090EE30_reloc, "ovl_0090EE30_reloc")
+DEFINE_DMA_ENTRY(ovl_0090EEA0, "ovl_0090EEA0")
+DEFINE_DMA_ENTRY(ovl_0090EEA0_reloc, "ovl_0090EEA0_reloc")
+DEFINE_DMA_ENTRY(ovl_0090EF10, "ovl_0090EF10")
+DEFINE_DMA_ENTRY(ovl_0090EF10_reloc, "ovl_0090EF10_reloc")
+DEFINE_DMA_ENTRY(ovl_0090EF80, "ovl_0090EF80")
+DEFINE_DMA_ENTRY(ovl_0090EF80_reloc, "ovl_0090EF80_reloc")
+DEFINE_DMA_ENTRY(ovl_0090EFF0, "ovl_0090EFF0")
+DEFINE_DMA_ENTRY(ovl_0090EFF0_reloc, "ovl_0090EFF0_reloc")
+DEFINE_DMA_ENTRY(ovl_0090F060, "ovl_0090F060")
+DEFINE_DMA_ENTRY(ovl_0090F060_reloc, "ovl_0090F060_reloc")
+DEFINE_DMA_ENTRY(ovl_0090F0D0, "ovl_0090F0D0")
+DEFINE_DMA_ENTRY(ovl_0090F0D0_reloc, "ovl_0090F0D0_reloc")
+DEFINE_DMA_ENTRY(ovl_0090F140, "ovl_0090F140")
+DEFINE_DMA_ENTRY(ovl_0090F140_reloc, "ovl_0090F140_reloc")
+DEFINE_DMA_ENTRY(ovl_0090F1B0, "ovl_0090F1B0")
+DEFINE_DMA_ENTRY(ovl_0090F1B0_reloc, "ovl_0090F1B0_reloc")
+DEFINE_DMA_ENTRY(ovl_0090F220, "ovl_0090F220")
+DEFINE_DMA_ENTRY(ovl_0090F220_reloc, "ovl_0090F220_reloc")
+DEFINE_DMA_ENTRY(ovl_0090F300, "ovl_0090F300")
+DEFINE_DMA_ENTRY(ovl_0090F300_reloc, "ovl_0090F300_reloc")
+DEFINE_DMA_ENTRY(ovl_0090F370, "ovl_0090F370")
+DEFINE_DMA_ENTRY(ovl_0090F370_reloc, "ovl_0090F370_reloc")
+DEFINE_DMA_ENTRY(ovl_0090F3E0, "ovl_0090F3E0")
+DEFINE_DMA_ENTRY(ovl_0090F3E0_reloc, "ovl_0090F3E0_reloc")
+DEFINE_DMA_ENTRY(ovl_0090F450, "ovl_0090F450")
+DEFINE_DMA_ENTRY(ovl_0090F450_reloc, "ovl_0090F450_reloc")
+DEFINE_DMA_ENTRY(ovl_0090F4C0, "ovl_0090F4C0")
+DEFINE_DMA_ENTRY(ovl_0090F4C0_reloc, "ovl_0090F4C0_reloc")
+DEFINE_DMA_ENTRY(ovl_0090F530, "ovl_0090F530")
+DEFINE_DMA_ENTRY(ovl_0090F530_reloc, "ovl_0090F530_reloc")
+DEFINE_DMA_ENTRY(ovl_0090F5A0, "ovl_0090F5A0")
+DEFINE_DMA_ENTRY(ovl_0090F5A0_reloc, "ovl_0090F5A0_reloc")
+DEFINE_DMA_ENTRY(ovl_0090F610, "ovl_0090F610")
+DEFINE_DMA_ENTRY(ovl_0090F610_reloc, "ovl_0090F610_reloc")
+DEFINE_DMA_ENTRY(ovl_0090F680, "ovl_0090F680")
+DEFINE_DMA_ENTRY(ovl_0090F680_reloc, "ovl_0090F680_reloc")
+DEFINE_DMA_ENTRY(ovl_0090F6F0, "ovl_0090F6F0")
+DEFINE_DMA_ENTRY(ovl_0090F6F0_reloc, "ovl_0090F6F0_reloc")
+DEFINE_DMA_ENTRY(ovl_0090F760, "ovl_0090F760")
+DEFINE_DMA_ENTRY(ovl_0090F760_reloc, "ovl_0090F760_reloc")
+DEFINE_DMA_ENTRY(ovl_0090F7D0, "ovl_0090F7D0")
+DEFINE_DMA_ENTRY(ovl_0090F7D0_reloc, "ovl_0090F7D0_reloc")
+DEFINE_DMA_ENTRY(ovl_0090F840, "ovl_0090F840")
+DEFINE_DMA_ENTRY(ovl_0090F840_reloc, "ovl_0090F840_reloc")
+DEFINE_DMA_ENTRY(ovl_0090F8B0, "ovl_0090F8B0")
+DEFINE_DMA_ENTRY(ovl_0090F8B0_reloc, "ovl_0090F8B0_reloc")
+DEFINE_DMA_ENTRY(ovl_0090F920, "ovl_0090F920")
+DEFINE_DMA_ENTRY(ovl_0090F920_reloc, "ovl_0090F920_reloc")
+DEFINE_DMA_ENTRY(ovl_0090F990, "ovl_0090F990")
+DEFINE_DMA_ENTRY(ovl_0090F990_reloc, "ovl_0090F990_reloc")
+DEFINE_DMA_ENTRY(ovl_0090FA00, "ovl_0090FA00")
+DEFINE_DMA_ENTRY(ovl_0090FA00_reloc, "ovl_0090FA00_reloc")
+DEFINE_DMA_ENTRY(ovl_0090FA70, "ovl_0090FA70")
+DEFINE_DMA_ENTRY(ovl_0090FA70_reloc, "ovl_0090FA70_reloc")
+DEFINE_DMA_ENTRY(ovl_0090FAE0, "ovl_0090FAE0")
+DEFINE_DMA_ENTRY(ovl_0090FAE0_reloc, "ovl_0090FAE0_reloc")
+DEFINE_DMA_ENTRY(ovl_0090FB50, "ovl_0090FB50")
+DEFINE_DMA_ENTRY(ovl_0090FB50_reloc, "ovl_0090FB50_reloc")
+DEFINE_DMA_ENTRY(ovl_0090FBC0, "ovl_0090FBC0")
+DEFINE_DMA_ENTRY(ovl_0090FBC0_reloc, "ovl_0090FBC0_reloc")
+DEFINE_DMA_ENTRY(ovl_0090FC30, "ovl_0090FC30")
+DEFINE_DMA_ENTRY(ovl_0090FC30_reloc, "ovl_0090FC30_reloc")
+DEFINE_DMA_ENTRY(ovl_0090FCA0, "ovl_0090FCA0")
+DEFINE_DMA_ENTRY(ovl_0090FCA0_reloc, "ovl_0090FCA0_reloc")
+DEFINE_DMA_ENTRY(ovl_0090FD10, "ovl_0090FD10")
+DEFINE_DMA_ENTRY(ovl_0090FD10_reloc, "ovl_0090FD10_reloc")
+DEFINE_DMA_ENTRY(ovl_0090FD80, "ovl_0090FD80")
+DEFINE_DMA_ENTRY(ovl_0090FD80_reloc, "ovl_0090FD80_reloc")
+DEFINE_DMA_ENTRY(ovl_0090FDF0, "ovl_0090FDF0")
+DEFINE_DMA_ENTRY(ovl_0090FDF0_reloc, "ovl_0090FDF0_reloc")
+DEFINE_DMA_ENTRY(ovl_0090FE60, "ovl_0090FE60")
+DEFINE_DMA_ENTRY(ovl_0090FE60_reloc, "ovl_0090FE60_reloc")
+DEFINE_DMA_ENTRY(ovl_009102C0, "ovl_009102C0")
+DEFINE_DMA_ENTRY(ovl_009102C0_reloc, "ovl_009102C0_reloc")
+DEFINE_DMA_ENTRY(ovl_009103D0, "ovl_009103D0")
+DEFINE_DMA_ENTRY(ovl_009103D0_reloc, "ovl_009103D0_reloc")
+DEFINE_DMA_ENTRY(ovl_00910440, "ovl_00910440")
+DEFINE_DMA_ENTRY(ovl_00910440_reloc, "ovl_00910440_reloc")
+DEFINE_DMA_ENTRY(ovl_00910E50, "ovl_00910E50")
+DEFINE_DMA_ENTRY(ovl_00910E50_reloc, "ovl_00910E50_reloc")
+DEFINE_DMA_ENTRY(ovl_00911340, "ovl_00911340")
+DEFINE_DMA_ENTRY(ovl_00911340_reloc, "ovl_00911340_reloc")
+DEFINE_DMA_ENTRY(ovl_00911490, "ovl_00911490")
+DEFINE_DMA_ENTRY(ovl_00911490_reloc, "ovl_00911490_reloc")
+DEFINE_DMA_ENTRY(ovl_009118A0, "ovl_009118A0")
+DEFINE_DMA_ENTRY(ovl_009118A0_reloc, "ovl_009118A0_reloc")
+DEFINE_DMA_ENTRY(ovl_00911910, "ovl_00911910")
+DEFINE_DMA_ENTRY(ovl_00911910_reloc, "ovl_00911910_reloc")
+DEFINE_DMA_ENTRY(ovl_00911E60, "ovl_00911E60")
+DEFINE_DMA_ENTRY(ovl_00911E60_reloc, "ovl_00911E60_reloc")
+DEFINE_DMA_ENTRY(ovl_009120B0, "ovl_009120B0")
+DEFINE_DMA_ENTRY(ovl_009120B0_reloc, "ovl_009120B0_reloc")
+DEFINE_DMA_ENTRY(ovl_00912A90, "ovl_00912A90")
+DEFINE_DMA_ENTRY(ovl_00912A90_reloc, "ovl_00912A90_reloc")
+DEFINE_DMA_ENTRY(ovl_00912B00, "ovl_00912B00")
+DEFINE_DMA_ENTRY(ovl_00912B00_reloc, "ovl_00912B00_reloc")
+DEFINE_DMA_ENTRY(ovl_00912B70, "ovl_00912B70")
+DEFINE_DMA_ENTRY(ovl_00912B70_reloc, "ovl_00912B70_reloc")
+DEFINE_DMA_ENTRY(ovl_00912BE0, "ovl_00912BE0")
+DEFINE_DMA_ENTRY(ovl_00912BE0_reloc, "ovl_00912BE0_reloc")
+DEFINE_DMA_ENTRY(ovl_00912C50, "ovl_00912C50")
+DEFINE_DMA_ENTRY(ovl_00912C50_reloc, "ovl_00912C50_reloc")
+DEFINE_DMA_ENTRY(ovl_00912CC0, "ovl_00912CC0")
+DEFINE_DMA_ENTRY(ovl_00912CC0_reloc, "ovl_00912CC0_reloc")
+DEFINE_DMA_ENTRY(ovl_00912D30, "ovl_00912D30")
+DEFINE_DMA_ENTRY(ovl_00912D30_reloc, "ovl_00912D30_reloc")
+DEFINE_DMA_ENTRY(ovl_00912DA0, "ovl_00912DA0")
+DEFINE_DMA_ENTRY(ovl_00912DA0_reloc, "ovl_00912DA0_reloc")
+DEFINE_DMA_ENTRY(ovl_00912E10, "ovl_00912E10")
+DEFINE_DMA_ENTRY(ovl_00912E10_reloc, "ovl_00912E10_reloc")
+DEFINE_DMA_ENTRY(ovl_00912F20, "ovl_00912F20")
+DEFINE_DMA_ENTRY(ovl_00912F20_reloc, "ovl_00912F20_reloc")
+DEFINE_DMA_ENTRY(ovl_00912F90, "ovl_00912F90")
+DEFINE_DMA_ENTRY(ovl_00912F90_reloc, "ovl_00912F90_reloc")
+DEFINE_DMA_ENTRY(ovl_00913000, "ovl_00913000")
+DEFINE_DMA_ENTRY(ovl_00913000_reloc, "ovl_00913000_reloc")
+DEFINE_DMA_ENTRY(ovl_00913390, "ovl_00913390")
+DEFINE_DMA_ENTRY(ovl_00913390_reloc, "ovl_00913390_reloc")
+DEFINE_DMA_ENTRY(ovl_00913400, "ovl_00913400")
+DEFINE_DMA_ENTRY(ovl_00913400_reloc, "ovl_00913400_reloc")
+DEFINE_DMA_ENTRY(ovl_00913470, "ovl_00913470")
+DEFINE_DMA_ENTRY(ovl_00913470_reloc, "ovl_00913470_reloc")
+DEFINE_DMA_ENTRY(ovl_009134E0, "ovl_009134E0")
+DEFINE_DMA_ENTRY(ovl_009134E0_reloc, "ovl_009134E0_reloc")
+DEFINE_DMA_ENTRY(ovl_00913550, "ovl_00913550")
+DEFINE_DMA_ENTRY(ovl_00913550_reloc, "ovl_00913550_reloc")
+DEFINE_DMA_ENTRY(ovl_009135C0, "ovl_009135C0")
+DEFINE_DMA_ENTRY(ovl_009135C0_reloc, "ovl_009135C0_reloc")
+DEFINE_DMA_ENTRY(ovl_00913630, "ovl_00913630")
+DEFINE_DMA_ENTRY(ovl_00913630_reloc, "ovl_00913630_reloc")
+DEFINE_DMA_ENTRY(ovl_009136A0, "ovl_009136A0")
+DEFINE_DMA_ENTRY(ovl_009136A0_reloc, "ovl_009136A0_reloc")
+DEFINE_DMA_ENTRY(ovl_00913A30, "ovl_00913A30")
+DEFINE_DMA_ENTRY(ovl_00913A30_reloc, "ovl_00913A30_reloc")
+DEFINE_DMA_ENTRY(ovl_00913AA0, "ovl_00913AA0")
+DEFINE_DMA_ENTRY(ovl_00913AA0_reloc, "ovl_00913AA0_reloc")
+DEFINE_DMA_ENTRY(ovl_00913B10, "ovl_00913B10")
+DEFINE_DMA_ENTRY(ovl_00913B10_reloc, "ovl_00913B10_reloc")
+DEFINE_DMA_ENTRY(ovl_00913B80, "ovl_00913B80")
+DEFINE_DMA_ENTRY(ovl_00913B80_reloc, "ovl_00913B80_reloc")
+DEFINE_DMA_ENTRY(ovl_00913F10, "ovl_00913F10")
+DEFINE_DMA_ENTRY(ovl_00913F10_reloc, "ovl_00913F10_reloc")
+DEFINE_DMA_ENTRY(ovl_00913F80, "ovl_00913F80")
+DEFINE_DMA_ENTRY(ovl_00913F80_reloc, "ovl_00913F80_reloc")
+DEFINE_DMA_ENTRY(ovl_00913FF0, "ovl_00913FF0")
+DEFINE_DMA_ENTRY(ovl_00913FF0_reloc, "ovl_00913FF0_reloc")
+DEFINE_DMA_ENTRY(ovl_00914060, "ovl_00914060")
+DEFINE_DMA_ENTRY(ovl_00914060_reloc, "ovl_00914060_reloc")
+DEFINE_DMA_ENTRY(ovl_009140D0, "ovl_009140D0")
+DEFINE_DMA_ENTRY(ovl_009140D0_reloc, "ovl_009140D0_reloc")
+DEFINE_DMA_ENTRY(ovl_00914140, "ovl_00914140")
+DEFINE_DMA_ENTRY(ovl_00914140_reloc, "ovl_00914140_reloc")
+DEFINE_DMA_ENTRY(ovl_009144D0, "ovl_009144D0")
+DEFINE_DMA_ENTRY(ovl_009144D0_reloc, "ovl_009144D0_reloc")
+DEFINE_DMA_ENTRY(ovl_00914540, "ovl_00914540")
+DEFINE_DMA_ENTRY(ovl_00914540_reloc, "ovl_00914540_reloc")
+DEFINE_DMA_ENTRY(ovl_00914650, "ovl_00914650")
+DEFINE_DMA_ENTRY(ovl_00914650_reloc, "ovl_00914650_reloc")
+DEFINE_DMA_ENTRY(ovl_009146C0, "ovl_009146C0")
+DEFINE_DMA_ENTRY(ovl_009146C0_reloc, "ovl_009146C0_reloc")
+DEFINE_DMA_ENTRY(ovl_00914730, "ovl_00914730")
+DEFINE_DMA_ENTRY(ovl_00914730_reloc, "ovl_00914730_reloc")
+DEFINE_DMA_ENTRY(ovl_009147A0, "ovl_009147A0")
+DEFINE_DMA_ENTRY(ovl_009147A0_reloc, "ovl_009147A0_reloc")
+DEFINE_DMA_ENTRY(ovl_00914810, "ovl_00914810")
+DEFINE_DMA_ENTRY(ovl_00914810_reloc, "ovl_00914810_reloc")
+DEFINE_DMA_ENTRY(ovl_00914880, "ovl_00914880")
+DEFINE_DMA_ENTRY(ovl_00914880_reloc, "ovl_00914880_reloc")
+DEFINE_DMA_ENTRY(ovl_009148F0, "ovl_009148F0")
+DEFINE_DMA_ENTRY(ovl_009148F0_reloc, "ovl_009148F0_reloc")
+DEFINE_DMA_ENTRY(ovl_00914960, "ovl_00914960")
+DEFINE_DMA_ENTRY(ovl_00914960_reloc, "ovl_00914960_reloc")
+DEFINE_DMA_ENTRY(ovl_009149D0, "ovl_009149D0")
+DEFINE_DMA_ENTRY(ovl_009149D0_reloc, "ovl_009149D0_reloc")
+DEFINE_DMA_ENTRY(ovl_00914A40, "ovl_00914A40")
+DEFINE_DMA_ENTRY(ovl_00914A40_reloc, "ovl_00914A40_reloc")
+DEFINE_DMA_ENTRY(ovl_00914AB0, "ovl_00914AB0")
+DEFINE_DMA_ENTRY(ovl_00914AB0_reloc, "ovl_00914AB0_reloc")
+DEFINE_DMA_ENTRY(ovl_00914B20, "ovl_00914B20")
+DEFINE_DMA_ENTRY(ovl_00914B20_reloc, "ovl_00914B20_reloc")
+DEFINE_DMA_ENTRY(ovl_00914B90, "ovl_00914B90")
+DEFINE_DMA_ENTRY(ovl_00914B90_reloc, "ovl_00914B90_reloc")
+DEFINE_DMA_ENTRY(ovl_00914C00, "ovl_00914C00")
+DEFINE_DMA_ENTRY(ovl_00914C00_reloc, "ovl_00914C00_reloc")
+DEFINE_DMA_ENTRY(ovl_00914C70, "ovl_00914C70")
+DEFINE_DMA_ENTRY(ovl_00914C70_reloc, "ovl_00914C70_reloc")
+DEFINE_DMA_ENTRY(ovl_00914CE0, "ovl_00914CE0")
+DEFINE_DMA_ENTRY(ovl_00914CE0_reloc, "ovl_00914CE0_reloc")
+DEFINE_DMA_ENTRY(ovl_00915070, "ovl_00915070")
+DEFINE_DMA_ENTRY(ovl_00915070_reloc, "ovl_00915070_reloc")
+DEFINE_DMA_ENTRY(ovl_009150E0, "ovl_009150E0")
+DEFINE_DMA_ENTRY(ovl_009150E0_reloc, "ovl_009150E0_reloc")
+DEFINE_DMA_ENTRY(ovl_00915150, "ovl_00915150")
+DEFINE_DMA_ENTRY(ovl_00915150_reloc, "ovl_00915150_reloc")
+DEFINE_DMA_ENTRY(ovl_009151C0, "ovl_009151C0")
+DEFINE_DMA_ENTRY(ovl_009151C0_reloc, "ovl_009151C0_reloc")
+DEFINE_DMA_ENTRY(ovl_00915230, "ovl_00915230")
+DEFINE_DMA_ENTRY(ovl_00915230_reloc, "ovl_00915230_reloc")
+DEFINE_DMA_ENTRY(ovl_009152A0, "ovl_009152A0")
+DEFINE_DMA_ENTRY(ovl_009152A0_reloc, "ovl_009152A0_reloc")
+DEFINE_DMA_ENTRY(ovl_00915310, "ovl_00915310")
+DEFINE_DMA_ENTRY(ovl_00915310_reloc, "ovl_00915310_reloc")
+DEFINE_DMA_ENTRY(ovl_00915890, "ovl_00915890")
+DEFINE_DMA_ENTRY(ovl_00915890_reloc, "ovl_00915890_reloc")
+DEFINE_DMA_ENTRY(ovl_00915A10, "ovl_00915A10")
+DEFINE_DMA_ENTRY(ovl_00915A10_reloc, "ovl_00915A10_reloc")
+DEFINE_DMA_ENTRY(ovl_00915A80, "ovl_00915A80")
+DEFINE_DMA_ENTRY(ovl_00915A80_reloc, "ovl_00915A80_reloc")
+DEFINE_DMA_ENTRY(ovl_00915AF0, "ovl_00915AF0")
+DEFINE_DMA_ENTRY(ovl_00915AF0_reloc, "ovl_00915AF0_reloc")
+DEFINE_DMA_ENTRY(ovl_00915B60, "ovl_00915B60")
+DEFINE_DMA_ENTRY(ovl_00915B60_reloc, "ovl_00915B60_reloc")
+DEFINE_DMA_ENTRY(ovl_00915BD0, "ovl_00915BD0")
+DEFINE_DMA_ENTRY(ovl_00915BD0_reloc, "ovl_00915BD0_reloc")
+DEFINE_DMA_ENTRY(ovl_00915C40, "ovl_00915C40")
+DEFINE_DMA_ENTRY(ovl_00915C40_reloc, "ovl_00915C40_reloc")
+DEFINE_DMA_ENTRY(ovl_00915F80, "ovl_00915F80")
+DEFINE_DMA_ENTRY(ovl_00915F80_reloc, "ovl_00915F80_reloc")
+DEFINE_DMA_ENTRY(ovl_00915FF0, "ovl_00915FF0")
+DEFINE_DMA_ENTRY(ovl_00915FF0_reloc, "ovl_00915FF0_reloc")
+DEFINE_DMA_ENTRY(ovl_00916330, "ovl_00916330")
+DEFINE_DMA_ENTRY(ovl_00916330_reloc, "ovl_00916330_reloc")
+DEFINE_DMA_ENTRY(ovl_009163A0, "ovl_009163A0")
+DEFINE_DMA_ENTRY(ovl_009163A0_reloc, "ovl_009163A0_reloc")
+DEFINE_DMA_ENTRY(ovl_009166E0, "ovl_009166E0")
+DEFINE_DMA_ENTRY(ovl_009166E0_reloc, "ovl_009166E0_reloc")
+DEFINE_DMA_ENTRY(ovl_00916750, "ovl_00916750")
+DEFINE_DMA_ENTRY(ovl_00916750_reloc, "ovl_00916750_reloc")
+DEFINE_DMA_ENTRY(ovl_009167C0, "ovl_009167C0")
+DEFINE_DMA_ENTRY(ovl_009167C0_reloc, "ovl_009167C0_reloc")
+DEFINE_DMA_ENTRY(ovl_00916830, "ovl_00916830")
+DEFINE_DMA_ENTRY(ovl_00916830_reloc, "ovl_00916830_reloc")
+DEFINE_DMA_ENTRY(ovl_009168A0, "ovl_009168A0")
+DEFINE_DMA_ENTRY(ovl_009168A0_reloc, "ovl_009168A0_reloc")
+DEFINE_DMA_ENTRY(ovl_00916A10, "ovl_00916A10")
+DEFINE_DMA_ENTRY(ovl_00916A10_reloc, "ovl_00916A10_reloc")
+DEFINE_DMA_ENTRY(ovl_00916A80, "ovl_00916A80")
+DEFINE_DMA_ENTRY(ovl_00916A80_reloc, "ovl_00916A80_reloc")
+DEFINE_DMA_ENTRY(ovl_00916AF0, "ovl_00916AF0")
+DEFINE_DMA_ENTRY(ovl_00916AF0_reloc, "ovl_00916AF0_reloc")
+DEFINE_DMA_ENTRY(ovl_00916B60, "ovl_00916B60")
+DEFINE_DMA_ENTRY(ovl_00916B60_reloc, "ovl_00916B60_reloc")
+DEFINE_DMA_ENTRY(ovl_00916E70, "ovl_00916E70")
+DEFINE_DMA_ENTRY(ovl_00916E70_reloc, "ovl_00916E70_reloc")
+DEFINE_DMA_ENTRY(ovl_00916EE0, "ovl_00916EE0")
+DEFINE_DMA_ENTRY(ovl_00916EE0_reloc, "ovl_00916EE0_reloc")
+DEFINE_DMA_ENTRY(ovl_00916F50, "ovl_00916F50")
+DEFINE_DMA_ENTRY(ovl_00916F50_reloc, "ovl_00916F50_reloc")
+DEFINE_DMA_ENTRY(ovl_00916FC0, "ovl_00916FC0")
+DEFINE_DMA_ENTRY(ovl_00916FC0_reloc, "ovl_00916FC0_reloc")
+DEFINE_DMA_ENTRY(ovl_00917030, "ovl_00917030")
+DEFINE_DMA_ENTRY(ovl_00917030_reloc, "ovl_00917030_reloc")
+DEFINE_DMA_ENTRY(ovl_009170A0, "ovl_009170A0")
+DEFINE_DMA_ENTRY(ovl_009170A0_reloc, "ovl_009170A0_reloc")
+DEFINE_DMA_ENTRY(ovl_00917110, "ovl_00917110")
+DEFINE_DMA_ENTRY(ovl_00917110_reloc, "ovl_00917110_reloc")
+DEFINE_DMA_ENTRY(ovl_00917180, "ovl_00917180")
+DEFINE_DMA_ENTRY(ovl_00917180_reloc, "ovl_00917180_reloc")
+DEFINE_DMA_ENTRY(ovl_00917510, "ovl_00917510")
+DEFINE_DMA_ENTRY(ovl_00917510_reloc, "ovl_00917510_reloc")
+DEFINE_DMA_ENTRY(ovl_009178A0, "ovl_009178A0")
+DEFINE_DMA_ENTRY(ovl_009178A0_reloc, "ovl_009178A0_reloc")
+DEFINE_DMA_ENTRY(ovl_00917C30, "ovl_00917C30")
+DEFINE_DMA_ENTRY(ovl_00917C30_reloc, "ovl_00917C30_reloc")
+DEFINE_DMA_ENTRY(ovl_00917F40, "ovl_00917F40")
+DEFINE_DMA_ENTRY(ovl_00917F40_reloc, "ovl_00917F40_reloc")
+DEFINE_DMA_ENTRY(ovl_00917FB0, "ovl_00917FB0")
+DEFINE_DMA_ENTRY(ovl_00917FB0_reloc, "ovl_00917FB0_reloc")
+DEFINE_DMA_ENTRY(ovl_00918020, "ovl_00918020")
+DEFINE_DMA_ENTRY(ovl_00918020_reloc, "ovl_00918020_reloc")
+DEFINE_DMA_ENTRY(ovl_00918090, "ovl_00918090")
+DEFINE_DMA_ENTRY(ovl_00918090_reloc, "ovl_00918090_reloc")
+DEFINE_DMA_ENTRY(ovl_00918100, "ovl_00918100")
+DEFINE_DMA_ENTRY(ovl_00918100_reloc, "ovl_00918100_reloc")
+DEFINE_DMA_ENTRY(ovl_00918170, "ovl_00918170")
+DEFINE_DMA_ENTRY(ovl_00918170_reloc, "ovl_00918170_reloc")
+DEFINE_DMA_ENTRY(ovl_009184E0, "ovl_009184E0")
+DEFINE_DMA_ENTRY(ovl_009184E0_reloc, "ovl_009184E0_reloc")
+DEFINE_DMA_ENTRY(ovl_009187F0, "ovl_009187F0")
+DEFINE_DMA_ENTRY(ovl_009187F0_reloc, "ovl_009187F0_reloc")
+DEFINE_DMA_ENTRY(ovl_00918860, "ovl_00918860")
+DEFINE_DMA_ENTRY(ovl_00918860_reloc, "ovl_00918860_reloc")
+DEFINE_DMA_ENTRY(ovl_00918C20, "ovl_00918C20")
+DEFINE_DMA_ENTRY(ovl_00918C20_reloc, "ovl_00918C20_reloc")
+DEFINE_DMA_ENTRY(ovl_00919400, "ovl_00919400")
+DEFINE_DMA_ENTRY(ovl_00919400_reloc, "ovl_00919400_reloc")
+DEFINE_DMA_ENTRY(ovl_00919760, "ovl_00919760")
+DEFINE_DMA_ENTRY(ovl_00919760_reloc, "ovl_00919760_reloc")
+DEFINE_DMA_ENTRY(ovl_0091A2D0, "ovl_0091A2D0")
+DEFINE_DMA_ENTRY(ovl_0091A2D0_reloc, "ovl_0091A2D0_reloc")
+DEFINE_DMA_ENTRY(ovl_0091A8B0, "ovl_0091A8B0")
+DEFINE_DMA_ENTRY(ovl_0091A8B0_reloc, "ovl_0091A8B0_reloc")
+DEFINE_DMA_ENTRY(ovl_0091B080, "ovl_0091B080")
+DEFINE_DMA_ENTRY(ovl_0091B080_reloc, "ovl_0091B080_reloc")
+DEFINE_DMA_ENTRY(ovl_0091B700, "ovl_0091B700")
+DEFINE_DMA_ENTRY(ovl_0091B700_reloc, "ovl_0091B700_reloc")
+DEFINE_DMA_ENTRY(ovl_0091BF30, "ovl_0091BF30")
+DEFINE_DMA_ENTRY(ovl_0091BF30_reloc, "ovl_0091BF30_reloc")
+DEFINE_DMA_ENTRY(ovl_0091C190, "ovl_0091C190")
+DEFINE_DMA_ENTRY(ovl_0091C190_reloc, "ovl_0091C190_reloc")
+DEFINE_DMA_ENTRY(ovl_0091C600, "ovl_0091C600")
+DEFINE_DMA_ENTRY(ovl_0091C600_reloc, "ovl_0091C600_reloc")
+DEFINE_DMA_ENTRY(ovl_0091CD10, "ovl_0091CD10")
+DEFINE_DMA_ENTRY(ovl_0091CD10_reloc, "ovl_0091CD10_reloc")
+DEFINE_DMA_ENTRY(ovl_0091D450, "ovl_0091D450")
+DEFINE_DMA_ENTRY(ovl_0091D450_reloc, "ovl_0091D450_reloc")
+DEFINE_DMA_ENTRY(ovl_0091D910, "ovl_0091D910")
+DEFINE_DMA_ENTRY(ovl_0091D910_reloc, "ovl_0091D910_reloc")
+DEFINE_DMA_ENTRY(ovl_0091DF10, "ovl_0091DF10")
+DEFINE_DMA_ENTRY(ovl_0091DF10_reloc, "ovl_0091DF10_reloc")
+DEFINE_DMA_ENTRY(ovl_0091E3C0, "ovl_0091E3C0")
+DEFINE_DMA_ENTRY(ovl_0091E3C0_reloc, "ovl_0091E3C0_reloc")
+DEFINE_DMA_ENTRY(ovl_0091E800, "ovl_0091E800")
+DEFINE_DMA_ENTRY(ovl_0091E800_reloc, "ovl_0091E800_reloc")
+DEFINE_DMA_ENTRY(ovl_0091E870, "ovl_0091E870")
+DEFINE_DMA_ENTRY(ovl_0091E870_reloc, "ovl_0091E870_reloc")
+DEFINE_DMA_ENTRY(ovl_0091E8E0, "ovl_0091E8E0")
+DEFINE_DMA_ENTRY(ovl_0091E8E0_reloc, "ovl_0091E8E0_reloc")
+DEFINE_DMA_ENTRY(ovl_0091EC70, "ovl_0091EC70")
+DEFINE_DMA_ENTRY(ovl_0091EC70_reloc, "ovl_0091EC70_reloc")
+DEFINE_DMA_ENTRY(ovl_0091F3E0, "ovl_0091F3E0")
+DEFINE_DMA_ENTRY(ovl_0091F3E0_reloc, "ovl_0091F3E0_reloc")
+DEFINE_DMA_ENTRY(ovl_0091FB80, "ovl_0091FB80")
+DEFINE_DMA_ENTRY(ovl_0091FB80_reloc, "ovl_0091FB80_reloc")
+DEFINE_DMA_ENTRY(ovl_0091FBF0, "ovl_0091FBF0")
+DEFINE_DMA_ENTRY(ovl_0091FBF0_reloc, "ovl_0091FBF0_reloc")
+DEFINE_DMA_ENTRY(ovl_0091FC60, "ovl_0091FC60")
+DEFINE_DMA_ENTRY(ovl_0091FC60_reloc, "ovl_0091FC60_reloc")
+DEFINE_DMA_ENTRY(ovl_0091FCD0, "ovl_0091FCD0")
+DEFINE_DMA_ENTRY(ovl_0091FCD0_reloc, "ovl_0091FCD0_reloc")
+DEFINE_DMA_ENTRY(ovl_0091FD40, "ovl_0091FD40")
+DEFINE_DMA_ENTRY(ovl_0091FD40_reloc, "ovl_0091FD40_reloc")
+DEFINE_DMA_ENTRY(ovl_0091FDB0, "ovl_0091FDB0")
+DEFINE_DMA_ENTRY(ovl_0091FDB0_reloc, "ovl_0091FDB0_reloc")
+DEFINE_DMA_ENTRY(ovl_009202A0, "ovl_009202A0")
+DEFINE_DMA_ENTRY(ovl_009202A0_reloc, "ovl_009202A0_reloc")
+DEFINE_DMA_ENTRY(ovl_009203B0, "ovl_009203B0")
+DEFINE_DMA_ENTRY(ovl_009203B0_reloc, "ovl_009203B0_reloc")
+DEFINE_DMA_ENTRY(ovl_009204C0, "ovl_009204C0")
+DEFINE_DMA_ENTRY(ovl_009204C0_reloc, "ovl_009204C0_reloc")
+DEFINE_DMA_ENTRY(ovl_009205D0, "ovl_009205D0")
+DEFINE_DMA_ENTRY(ovl_009205D0_reloc, "ovl_009205D0_reloc")
+DEFINE_DMA_ENTRY(ovl_009206E0, "ovl_009206E0")
+DEFINE_DMA_ENTRY(ovl_009206E0_reloc, "ovl_009206E0_reloc")
+DEFINE_DMA_ENTRY(ovl_00920D20, "ovl_00920D20")
+DEFINE_DMA_ENTRY(ovl_00920D20_reloc, "ovl_00920D20_reloc")
+DEFINE_DMA_ENTRY(ovl_00920D90, "ovl_00920D90")
+DEFINE_DMA_ENTRY(ovl_00920D90_reloc, "ovl_00920D90_reloc")
+DEFINE_DMA_ENTRY(ovl_00920E00, "ovl_00920E00")
+DEFINE_DMA_ENTRY(ovl_00920E00_reloc, "ovl_00920E00_reloc")
+DEFINE_DMA_ENTRY(ovl_00922380, "ovl_00922380")
+DEFINE_DMA_ENTRY(ovl_00922380_reloc, "ovl_00922380_reloc")
+DEFINE_DMA_ENTRY(ovl_009223F0, "ovl_009223F0")
+DEFINE_DMA_ENTRY(ovl_009223F0_reloc, "ovl_009223F0_reloc")
+DEFINE_DMA_ENTRY(ovl_00922A10, "ovl_00922A10")
+DEFINE_DMA_ENTRY(ovl_00922A10_reloc, "ovl_00922A10_reloc")
+DEFINE_DMA_ENTRY(ovl_009247E0, "ovl_009247E0")
+DEFINE_DMA_ENTRY(ovl_009247E0_reloc, "ovl_009247E0_reloc")
+DEFINE_DMA_ENTRY(ovl_00924850, "ovl_00924850")
+DEFINE_DMA_ENTRY(ovl_00924850_reloc, "ovl_00924850_reloc")
+DEFINE_DMA_ENTRY(ovl_009248C0, "ovl_009248C0")
+DEFINE_DMA_ENTRY(ovl_009248C0_reloc, "ovl_009248C0_reloc")
+DEFINE_DMA_ENTRY(ovl_00924930, "ovl_00924930")
+DEFINE_DMA_ENTRY(ovl_00924930_reloc, "ovl_00924930_reloc")
+DEFINE_DMA_ENTRY(ovl_009249A0, "ovl_009249A0")
+DEFINE_DMA_ENTRY(ovl_009249A0_reloc, "ovl_009249A0_reloc")
+DEFINE_DMA_ENTRY(ovl_00924A10, "ovl_00924A10")
+DEFINE_DMA_ENTRY(ovl_00924A10_reloc, "ovl_00924A10_reloc")
+DEFINE_DMA_ENTRY(ovl_00924A80, "ovl_00924A80")
+DEFINE_DMA_ENTRY(ovl_00924A80_reloc, "ovl_00924A80_reloc")
+DEFINE_DMA_ENTRY(ovl_00924AF0, "ovl_00924AF0")
+DEFINE_DMA_ENTRY(ovl_00924AF0_reloc, "ovl_00924AF0_reloc")
+DEFINE_DMA_ENTRY(ovl_00924B60, "ovl_00924B60")
+DEFINE_DMA_ENTRY(ovl_00924B60_reloc, "ovl_00924B60_reloc")
+DEFINE_DMA_ENTRY(ovl_00924BD0, "ovl_00924BD0")
+DEFINE_DMA_ENTRY(ovl_00924BD0_reloc, "ovl_00924BD0_reloc")
+DEFINE_DMA_ENTRY(ovl_00924C40, "ovl_00924C40")
+DEFINE_DMA_ENTRY(ovl_00924C40_reloc, "ovl_00924C40_reloc")
+DEFINE_DMA_ENTRY(ovl_00927440, "ovl_00927440")
+DEFINE_DMA_ENTRY(ovl_00927440_reloc, "ovl_00927440_reloc")
+DEFINE_DMA_ENTRY(ovl_00927910, "ovl_00927910")
+DEFINE_DMA_ENTRY(ovl_00927910_reloc, "ovl_00927910_reloc")
+DEFINE_DMA_ENTRY(ovl_00928230, "ovl_00928230")
+DEFINE_DMA_ENTRY(ovl_00928230_reloc, "ovl_00928230_reloc")
+DEFINE_DMA_ENTRY(ovl_00928530, "ovl_00928530")
+DEFINE_DMA_ENTRY(ovl_00928530_reloc, "ovl_00928530_reloc")
+DEFINE_DMA_ENTRY(ovl_009287B0, "ovl_009287B0")
+DEFINE_DMA_ENTRY(ovl_009287B0_reloc, "ovl_009287B0_reloc")
+DEFINE_DMA_ENTRY(ovl_00928CC0, "ovl_00928CC0")
+DEFINE_DMA_ENTRY(ovl_00928CC0_reloc, "ovl_00928CC0_reloc")
+DEFINE_DMA_ENTRY(ovl_00928D30, "ovl_00928D30")
+DEFINE_DMA_ENTRY(ovl_00928D30_reloc, "ovl_00928D30_reloc")
+DEFINE_DMA_ENTRY(ovl_00929170, "ovl_00929170")
+DEFINE_DMA_ENTRY(ovl_00929170_reloc, "ovl_00929170_reloc")
+DEFINE_DMA_ENTRY(ovl_009291E0, "ovl_009291E0")
+DEFINE_DMA_ENTRY(ovl_009291E0_reloc, "ovl_009291E0_reloc")
+DEFINE_DMA_ENTRY(ovl_00929250, "ovl_00929250")
+DEFINE_DMA_ENTRY(ovl_00929250_reloc, "ovl_00929250_reloc")
+DEFINE_DMA_ENTRY(ovl_009292C0, "ovl_009292C0")
+DEFINE_DMA_ENTRY(ovl_009292C0_reloc, "ovl_009292C0_reloc")
+DEFINE_DMA_ENTRY(ovl_00929330, "ovl_00929330")
+DEFINE_DMA_ENTRY(ovl_00929330_reloc, "ovl_00929330_reloc")
+DEFINE_DMA_ENTRY(ovl_009293A0, "ovl_009293A0")
+DEFINE_DMA_ENTRY(ovl_009293A0_reloc, "ovl_009293A0_reloc")
+DEFINE_DMA_ENTRY(ovl_00929410, "ovl_00929410")
+DEFINE_DMA_ENTRY(ovl_00929410_reloc, "ovl_00929410_reloc")
+DEFINE_DMA_ENTRY(ovl_00929480, "ovl_00929480")
+DEFINE_DMA_ENTRY(ovl_00929480_reloc, "ovl_00929480_reloc")
+DEFINE_DMA_ENTRY(ovl_009294F0, "ovl_009294F0")
+DEFINE_DMA_ENTRY(ovl_009294F0_reloc, "ovl_009294F0_reloc")
+DEFINE_DMA_ENTRY(ovl_00929560, "ovl_00929560")
+DEFINE_DMA_ENTRY(ovl_00929560_reloc, "ovl_00929560_reloc")
+DEFINE_DMA_ENTRY(ovl_009295D0, "ovl_009295D0")
+DEFINE_DMA_ENTRY(ovl_009295D0_reloc, "ovl_009295D0_reloc")
+DEFINE_DMA_ENTRY(ovl_00929640, "ovl_00929640")
+DEFINE_DMA_ENTRY(ovl_00929640_reloc, "ovl_00929640_reloc")
+DEFINE_DMA_ENTRY(ovl_009296B0, "ovl_009296B0")
+DEFINE_DMA_ENTRY(ovl_009296B0_reloc, "ovl_009296B0_reloc")
+DEFINE_DMA_ENTRY(ovl_00929720, "ovl_00929720")
+DEFINE_DMA_ENTRY(ovl_00929720_reloc, "ovl_00929720_reloc")
+DEFINE_DMA_ENTRY(ovl_00929790, "ovl_00929790")
+DEFINE_DMA_ENTRY(ovl_00929790_reloc, "ovl_00929790_reloc")
+DEFINE_DMA_ENTRY(ovl_00929800, "ovl_00929800")
+DEFINE_DMA_ENTRY(ovl_00929800_reloc, "ovl_00929800_reloc")
+DEFINE_DMA_ENTRY(ovl_00929E80, "ovl_00929E80")
+DEFINE_DMA_ENTRY(ovl_00929E80_reloc, "ovl_00929E80_reloc")
+DEFINE_DMA_ENTRY(ovl_00929F90, "ovl_00929F90")
+DEFINE_DMA_ENTRY(ovl_00929F90_reloc, "ovl_00929F90_reloc")
+DEFINE_DMA_ENTRY(ovl_0092A000, "ovl_0092A000")
+DEFINE_DMA_ENTRY(ovl_0092A000_reloc, "ovl_0092A000_reloc")
+DEFINE_DMA_ENTRY(ovl_0092A070, "ovl_0092A070")
+DEFINE_DMA_ENTRY(ovl_0092A070_reloc, "ovl_0092A070_reloc")
+DEFINE_DMA_ENTRY(ovl_0092A0E0, "ovl_0092A0E0")
+DEFINE_DMA_ENTRY(ovl_0092A0E0_reloc, "ovl_0092A0E0_reloc")
+DEFINE_DMA_ENTRY(ovl_0092A150, "ovl_0092A150")
+DEFINE_DMA_ENTRY(ovl_0092A150_reloc, "ovl_0092A150_reloc")
+DEFINE_DMA_ENTRY(ovl_0092A1C0, "ovl_0092A1C0")
+DEFINE_DMA_ENTRY(ovl_0092A1C0_reloc, "ovl_0092A1C0_reloc")
+DEFINE_DMA_ENTRY(ovl_0092A230, "ovl_0092A230")
+DEFINE_DMA_ENTRY(ovl_0092A230_reloc, "ovl_0092A230_reloc")
+DEFINE_DMA_ENTRY(ovl_0092A2A0, "ovl_0092A2A0")
+DEFINE_DMA_ENTRY(ovl_0092A2A0_reloc, "ovl_0092A2A0_reloc")
+DEFINE_DMA_ENTRY(ovl_0092A3B0, "ovl_0092A3B0")
+DEFINE_DMA_ENTRY(ovl_0092A3B0_reloc, "ovl_0092A3B0_reloc")
+DEFINE_DMA_ENTRY(ovl_0092A420, "ovl_0092A420")
+DEFINE_DMA_ENTRY(ovl_0092A420_reloc, "ovl_0092A420_reloc")
+DEFINE_DMA_ENTRY(ovl_0092A490, "ovl_0092A490")
+DEFINE_DMA_ENTRY(ovl_0092A490_reloc, "ovl_0092A490_reloc")
+DEFINE_DMA_ENTRY(ovl_0092A730, "ovl_0092A730")
+DEFINE_DMA_ENTRY(ovl_0092A730_reloc, "ovl_0092A730_reloc")
+DEFINE_DMA_ENTRY(ovl_0092A840, "ovl_0092A840")
+DEFINE_DMA_ENTRY(ovl_0092A840_reloc, "ovl_0092A840_reloc")
+DEFINE_DMA_ENTRY(ovl_0092A8B0, "ovl_0092A8B0")
+DEFINE_DMA_ENTRY(ovl_0092A8B0_reloc, "ovl_0092A8B0_reloc")
+DEFINE_DMA_ENTRY(ovl_0092A920, "ovl_0092A920")
+DEFINE_DMA_ENTRY(ovl_0092A920_reloc, "ovl_0092A920_reloc")
+DEFINE_DMA_ENTRY(ovl_0092A990, "ovl_0092A990")
+DEFINE_DMA_ENTRY(ovl_0092A990_reloc, "ovl_0092A990_reloc")
+DEFINE_DMA_ENTRY(ovl_0092AA00, "ovl_0092AA00")
+DEFINE_DMA_ENTRY(ovl_0092AA00_reloc, "ovl_0092AA00_reloc")
+DEFINE_DMA_ENTRY(ovl_0092AA70, "ovl_0092AA70")
+DEFINE_DMA_ENTRY(ovl_0092AA70_reloc, "ovl_0092AA70_reloc")
+DEFINE_DMA_ENTRY(ovl_0092AAE0, "ovl_0092AAE0")
+DEFINE_DMA_ENTRY(ovl_0092AAE0_reloc, "ovl_0092AAE0_reloc")
+DEFINE_DMA_ENTRY(ovl_0092AB50, "ovl_0092AB50")
+DEFINE_DMA_ENTRY(ovl_0092AB50_reloc, "ovl_0092AB50_reloc")
+DEFINE_DMA_ENTRY(ovl_0092B4F0, "ovl_0092B4F0")
+DEFINE_DMA_ENTRY(ovl_0092B4F0_reloc, "ovl_0092B4F0_reloc")
+DEFINE_DMA_ENTRY(ovl_0092B560, "ovl_0092B560")
+DEFINE_DMA_ENTRY(ovl_0092B560_reloc, "ovl_0092B560_reloc")
+DEFINE_DMA_ENTRY(ovl_0092B670, "ovl_0092B670")
+DEFINE_DMA_ENTRY(ovl_0092B670_reloc, "ovl_0092B670_reloc")
+DEFINE_DMA_ENTRY(ovl_0092B6E0, "ovl_0092B6E0")
+DEFINE_DMA_ENTRY(ovl_0092B6E0_reloc, "ovl_0092B6E0_reloc")
+DEFINE_DMA_ENTRY(ovl_0092B750, "ovl_0092B750")
+DEFINE_DMA_ENTRY(ovl_0092B750_reloc, "ovl_0092B750_reloc")
+DEFINE_DMA_ENTRY(ovl_0092B970, "ovl_0092B970")
+DEFINE_DMA_ENTRY(ovl_0092B970_reloc, "ovl_0092B970_reloc")
+DEFINE_DMA_ENTRY(ovl_0092BF20, "ovl_0092BF20")
+DEFINE_DMA_ENTRY(ovl_0092BF20_reloc, "ovl_0092BF20_reloc")
+DEFINE_DMA_ENTRY(ovl_0092BF90, "ovl_0092BF90")
+DEFINE_DMA_ENTRY(ovl_0092BF90_reloc, "ovl_0092BF90_reloc")
+DEFINE_DMA_ENTRY(ovl_0092C000, "ovl_0092C000")
+DEFINE_DMA_ENTRY(ovl_0092C000_reloc, "ovl_0092C000_reloc")
+DEFINE_DMA_ENTRY(ovl_0092C070, "ovl_0092C070")
+DEFINE_DMA_ENTRY(ovl_0092C070_reloc, "ovl_0092C070_reloc")
+DEFINE_DMA_ENTRY(ovl_0092C0E0, "ovl_0092C0E0")
+DEFINE_DMA_ENTRY(ovl_0092C0E0_reloc, "ovl_0092C0E0_reloc")
+DEFINE_DMA_ENTRY(ovl_0092C150, "ovl_0092C150")
+DEFINE_DMA_ENTRY(ovl_0092C150_reloc, "ovl_0092C150_reloc")
+DEFINE_DMA_ENTRY(ovl_0092C1C0, "ovl_0092C1C0")
+DEFINE_DMA_ENTRY(ovl_0092C1C0_reloc, "ovl_0092C1C0_reloc")
+DEFINE_DMA_ENTRY(ovl_0092C230, "ovl_0092C230")
+DEFINE_DMA_ENTRY(ovl_0092C230_reloc, "ovl_0092C230_reloc")
+DEFINE_DMA_ENTRY(ovl_0092C340, "ovl_0092C340")
+DEFINE_DMA_ENTRY(ovl_0092C340_reloc, "ovl_0092C340_reloc")
+DEFINE_DMA_ENTRY(ovl_0092C3B0, "ovl_0092C3B0")
+DEFINE_DMA_ENTRY(ovl_0092C3B0_reloc, "ovl_0092C3B0_reloc")
+DEFINE_DMA_ENTRY(ovl_0092C4C0, "ovl_0092C4C0")
+DEFINE_DMA_ENTRY(ovl_0092C4C0_reloc, "ovl_0092C4C0_reloc")
+DEFINE_DMA_ENTRY(ovl_0092C850, "ovl_0092C850")
+DEFINE_DMA_ENTRY(ovl_0092C850_reloc, "ovl_0092C850_reloc")
+DEFINE_DMA_ENTRY(ovl_0092EC40, "ovl_0092EC40")
+DEFINE_DMA_ENTRY(ovl_0092EC40_reloc, "ovl_0092EC40_reloc")
+DEFINE_DMA_ENTRY(ovl_0092EFD0, "ovl_0092EFD0")
+DEFINE_DMA_ENTRY(ovl_0092EFD0_reloc, "ovl_0092EFD0_reloc")
+DEFINE_DMA_ENTRY(ovl_0092F040, "ovl_0092F040")
+DEFINE_DMA_ENTRY(ovl_0092F040_reloc, "ovl_0092F040_reloc")
+DEFINE_DMA_ENTRY(ovl_0092F3D0, "ovl_0092F3D0")
+DEFINE_DMA_ENTRY(ovl_0092F3D0_reloc, "ovl_0092F3D0_reloc")
+DEFINE_DMA_ENTRY(ovl_0092F760, "ovl_0092F760")
+DEFINE_DMA_ENTRY(ovl_0092F760_reloc, "ovl_0092F760_reloc")
+DEFINE_DMA_ENTRY(ovl_0092FAF0, "ovl_0092FAF0")
+DEFINE_DMA_ENTRY(ovl_0092FAF0_reloc, "ovl_0092FAF0_reloc")
+DEFINE_DMA_ENTRY(ovl_0092FE80, "ovl_0092FE80")
+DEFINE_DMA_ENTRY(ovl_0092FE80_reloc, "ovl_0092FE80_reloc")
+DEFINE_DMA_ENTRY(ovl_00930210, "ovl_00930210")
+DEFINE_DMA_ENTRY(ovl_00930210_reloc, "ovl_00930210_reloc")
+DEFINE_DMA_ENTRY(ovl_009305A0, "ovl_009305A0")
+DEFINE_DMA_ENTRY(ovl_009305A0_reloc, "ovl_009305A0_reloc")
+DEFINE_DMA_ENTRY(ovl_00930A90, "ovl_00930A90")
+DEFINE_DMA_ENTRY(ovl_00930A90_reloc, "ovl_00930A90_reloc")
+DEFINE_DMA_ENTRY(ovl_00930B00, "ovl_00930B00")
+DEFINE_DMA_ENTRY(ovl_00930B00_reloc, "ovl_00930B00_reloc")
+DEFINE_DMA_ENTRY(ovl_00930B70, "ovl_00930B70")
+DEFINE_DMA_ENTRY(ovl_00930B70_reloc, "ovl_00930B70_reloc")
+DEFINE_DMA_ENTRY(ovl_00930F00, "ovl_00930F00")
+DEFINE_DMA_ENTRY(ovl_00930F00_reloc, "ovl_00930F00_reloc")
+DEFINE_DMA_ENTRY(ovl_00931290, "ovl_00931290")
+DEFINE_DMA_ENTRY(ovl_00931290_reloc, "ovl_00931290_reloc")
+DEFINE_DMA_ENTRY(ovl_00931620, "ovl_00931620")
+DEFINE_DMA_ENTRY(ovl_00931620_reloc, "ovl_00931620_reloc")
+DEFINE_DMA_ENTRY(ovl_009319B0, "ovl_009319B0")
+DEFINE_DMA_ENTRY(ovl_009319B0_reloc, "ovl_009319B0_reloc")
+DEFINE_DMA_ENTRY(ovl_00931D40, "ovl_00931D40")
+DEFINE_DMA_ENTRY(ovl_00931D40_reloc, "ovl_00931D40_reloc")
+DEFINE_DMA_ENTRY(ovl_009322F0, "ovl_009322F0")
+DEFINE_DMA_ENTRY(ovl_009322F0_reloc, "ovl_009322F0_reloc")
+DEFINE_DMA_ENTRY(ovl_00932AA0, "ovl_00932AA0")
+DEFINE_DMA_ENTRY(ovl_00932AA0_reloc, "ovl_00932AA0_reloc")
+DEFINE_DMA_ENTRY(ovl_00932B60, "ovl_00932B60")
+DEFINE_DMA_ENTRY(ovl_00932B60_reloc, "ovl_00932B60_reloc")
+DEFINE_DMA_ENTRY(ovl_00933F00, "ovl_00933F00")
+DEFINE_DMA_ENTRY(ovl_00933F00_reloc, "ovl_00933F00_reloc")
+DEFINE_DMA_ENTRY(ovl_00934D50, "ovl_00934D50")
+DEFINE_DMA_ENTRY(ovl_00934D50_reloc, "ovl_00934D50_reloc")
+DEFINE_DMA_ENTRY(ovl_00936470, "ovl_00936470")
+DEFINE_DMA_ENTRY(ovl_00936470_reloc, "ovl_00936470_reloc")
+DEFINE_DMA_ENTRY(ovl_00936BC0, "ovl_00936BC0")
+DEFINE_DMA_ENTRY(ovl_00936BC0_reloc, "ovl_00936BC0_reloc")
+DEFINE_DMA_ENTRY(ovl_00937120, "ovl_00937120")
+DEFINE_DMA_ENTRY(ovl_00937120_reloc, "ovl_00937120_reloc")
+DEFINE_DMA_ENTRY(ovl_009378C0, "ovl_009378C0")
+DEFINE_DMA_ENTRY(ovl_009378C0_reloc, "ovl_009378C0_reloc")
+DEFINE_DMA_ENTRY(ovl_00939090, "ovl_00939090")
+DEFINE_DMA_ENTRY(ovl_00939090_reloc, "ovl_00939090_reloc")
+DEFINE_DMA_ENTRY(ovl_00939100, "ovl_00939100")
+DEFINE_DMA_ENTRY(ovl_00939100_reloc, "ovl_00939100_reloc")
+DEFINE_DMA_ENTRY(ovl_00939170, "ovl_00939170")
+DEFINE_DMA_ENTRY(ovl_00939170_reloc, "ovl_00939170_reloc")
+DEFINE_DMA_ENTRY(ovl_009391E0, "ovl_009391E0")
+DEFINE_DMA_ENTRY(ovl_009391E0_reloc, "ovl_009391E0_reloc")
+DEFINE_DMA_ENTRY(ovl_009392F0, "ovl_009392F0")
+DEFINE_DMA_ENTRY(ovl_009392F0_reloc, "ovl_009392F0_reloc")
+DEFINE_DMA_ENTRY(ovl_00939400, "ovl_00939400")
+DEFINE_DMA_ENTRY(ovl_00939400_reloc, "ovl_00939400_reloc")
+DEFINE_DMA_ENTRY(ovl_00939510, "ovl_00939510")
+DEFINE_DMA_ENTRY(ovl_00939510_reloc, "ovl_00939510_reloc")
+DEFINE_DMA_ENTRY(ovl_00939580, "ovl_00939580")
+DEFINE_DMA_ENTRY(ovl_00939580_reloc, "ovl_00939580_reloc")
+DEFINE_DMA_ENTRY(ovl_009395F0, "ovl_009395F0")
+DEFINE_DMA_ENTRY(ovl_009395F0_reloc, "ovl_009395F0_reloc")
+DEFINE_DMA_ENTRY(ovl_0093A8B0, "ovl_0093A8B0")
+DEFINE_DMA_ENTRY(ovl_0093A8B0_reloc, "ovl_0093A8B0_reloc")
+DEFINE_DMA_ENTRY(ovl_0093A920, "ovl_0093A920")
+DEFINE_DMA_ENTRY(ovl_0093A920_reloc, "ovl_0093A920_reloc")
+DEFINE_DMA_ENTRY(ovl_0093BD70, "ovl_0093BD70")
+DEFINE_DMA_ENTRY(ovl_0093BD70_reloc, "ovl_0093BD70_reloc")
+DEFINE_DMA_ENTRY(ovl_0093BF80, "ovl_0093BF80")
+DEFINE_DMA_ENTRY(ovl_0093BF80_reloc, "ovl_0093BF80_reloc")
+DEFINE_DMA_ENTRY(ovl_0093BFF0, "ovl_0093BFF0")
+DEFINE_DMA_ENTRY(ovl_0093BFF0_reloc, "ovl_0093BFF0_reloc")
+DEFINE_DMA_ENTRY(ovl_0093C060, "ovl_0093C060")
+DEFINE_DMA_ENTRY(ovl_0093C060_reloc, "ovl_0093C060_reloc")
+DEFINE_DMA_ENTRY(ovl_0093C0D0, "ovl_0093C0D0")
+DEFINE_DMA_ENTRY(ovl_0093C0D0_reloc, "ovl_0093C0D0_reloc")
+DEFINE_DMA_ENTRY(ovl_0093C5D0, "ovl_0093C5D0")
+DEFINE_DMA_ENTRY(ovl_0093C5D0_reloc, "ovl_0093C5D0_reloc")
+DEFINE_DMA_ENTRY(ovl_0093CAD0, "ovl_0093CAD0")
+DEFINE_DMA_ENTRY(ovl_0093CAD0_reloc, "ovl_0093CAD0_reloc")
+DEFINE_DMA_ENTRY(ovl_0093CFD0, "ovl_0093CFD0")
+DEFINE_DMA_ENTRY(ovl_0093CFD0_reloc, "ovl_0093CFD0_reloc")
+DEFINE_DMA_ENTRY(ovl_0093D4D0, "ovl_0093D4D0")
+DEFINE_DMA_ENTRY(ovl_0093D4D0_reloc, "ovl_0093D4D0_reloc")
+DEFINE_DMA_ENTRY(ovl_0093D540, "ovl_0093D540")
+DEFINE_DMA_ENTRY(ovl_0093D540_reloc, "ovl_0093D540_reloc")
+DEFINE_DMA_ENTRY(ovl_0093D5B0, "ovl_0093D5B0")
+DEFINE_DMA_ENTRY(ovl_0093D5B0_reloc, "ovl_0093D5B0_reloc")
+DEFINE_DMA_ENTRY(ovl_0093D620, "ovl_0093D620")
+DEFINE_DMA_ENTRY(ovl_0093D620_reloc, "ovl_0093D620_reloc")
+DEFINE_DMA_ENTRY(ovl_0093D690, "ovl_0093D690")
+DEFINE_DMA_ENTRY(ovl_0093D690_reloc, "ovl_0093D690_reloc")
+DEFINE_DMA_ENTRY(ovl_0093D700, "ovl_0093D700")
+DEFINE_DMA_ENTRY(ovl_0093D700_reloc, "ovl_0093D700_reloc")
+DEFINE_DMA_ENTRY(ovl_0093DC00, "ovl_0093DC00")
+DEFINE_DMA_ENTRY(ovl_0093DC00_reloc, "ovl_0093DC00_reloc")
+DEFINE_DMA_ENTRY(ovl_0093E100, "ovl_0093E100")
+DEFINE_DMA_ENTRY(ovl_0093E100_reloc, "ovl_0093E100_reloc")
+DEFINE_DMA_ENTRY(ovl_0093E600, "ovl_0093E600")
+DEFINE_DMA_ENTRY(ovl_0093E600_reloc, "ovl_0093E600_reloc")
+DEFINE_DMA_ENTRY(ovl_0093EB00, "ovl_0093EB00")
+DEFINE_DMA_ENTRY(ovl_0093EB00_reloc, "ovl_0093EB00_reloc")
+DEFINE_DMA_ENTRY(ovl_0093F000, "ovl_0093F000")
+DEFINE_DMA_ENTRY(ovl_0093F000_reloc, "ovl_0093F000_reloc")
+DEFINE_DMA_ENTRY(ovl_0093F070, "ovl_0093F070")
+DEFINE_DMA_ENTRY(ovl_0093F070_reloc, "ovl_0093F070_reloc")
+DEFINE_DMA_ENTRY(ovl_0093F0E0, "ovl_0093F0E0")
+DEFINE_DMA_ENTRY(ovl_0093F0E0_reloc, "ovl_0093F0E0_reloc")
+DEFINE_DMA_ENTRY(ovl_0093F150, "ovl_0093F150")
+DEFINE_DMA_ENTRY(ovl_0093F150_reloc, "ovl_0093F150_reloc")
+DEFINE_DMA_ENTRY(ovl_0093F1C0, "ovl_0093F1C0")
+DEFINE_DMA_ENTRY(ovl_0093F1C0_reloc, "ovl_0093F1C0_reloc")
+DEFINE_DMA_ENTRY(ovl_0093F230, "ovl_0093F230")
+DEFINE_DMA_ENTRY(ovl_0093F230_reloc, "ovl_0093F230_reloc")
+DEFINE_DMA_ENTRY(ovl_0093F2A0, "ovl_0093F2A0")
+DEFINE_DMA_ENTRY(ovl_0093F2A0_reloc, "ovl_0093F2A0_reloc")
+DEFINE_DMA_ENTRY(ovl_0093F310, "ovl_0093F310")
+DEFINE_DMA_ENTRY(ovl_0093F310_reloc, "ovl_0093F310_reloc")
+DEFINE_DMA_ENTRY(ovl_0093F380, "ovl_0093F380")
+DEFINE_DMA_ENTRY(ovl_0093F380_reloc, "ovl_0093F380_reloc")
+DEFINE_DMA_ENTRY(ovl_0093F9E0, "ovl_0093F9E0")
+DEFINE_DMA_ENTRY(ovl_0093F9E0_reloc, "ovl_0093F9E0_reloc")
+DEFINE_DMA_ENTRY(ovl_0093FA50, "ovl_0093FA50")
+DEFINE_DMA_ENTRY(ovl_0093FA50_reloc, "ovl_0093FA50_reloc")
+DEFINE_DMA_ENTRY(ovl_0093FAC0, "ovl_0093FAC0")
+DEFINE_DMA_ENTRY(ovl_0093FAC0_reloc, "ovl_0093FAC0_reloc")
+DEFINE_DMA_ENTRY(ovl_0093FB30, "ovl_0093FB30")
+DEFINE_DMA_ENTRY(ovl_0093FB30_reloc, "ovl_0093FB30_reloc")
+DEFINE_DMA_ENTRY(ovl_0093FBA0, "ovl_0093FBA0")
+DEFINE_DMA_ENTRY(ovl_0093FBA0_reloc, "ovl_0093FBA0_reloc")
+DEFINE_DMA_ENTRY(ovl_0093FC10, "ovl_0093FC10")
+DEFINE_DMA_ENTRY(ovl_0093FC10_reloc, "ovl_0093FC10_reloc")
+DEFINE_DMA_ENTRY(ovl_00940380, "ovl_00940380")
+DEFINE_DMA_ENTRY(ovl_00940380_reloc, "ovl_00940380_reloc")
+DEFINE_DMA_ENTRY(ovl_00941B10, "ovl_00941B10")
+DEFINE_DMA_ENTRY(ovl_00941B10_reloc, "ovl_00941B10_reloc")
+DEFINE_DMA_ENTRY(ovl_00941B80, "ovl_00941B80")
+DEFINE_DMA_ENTRY(ovl_00941B80_reloc, "ovl_00941B80_reloc")
+DEFINE_DMA_ENTRY(ovl_00941BF0, "ovl_00941BF0")
+DEFINE_DMA_ENTRY(ovl_00941BF0_reloc, "ovl_00941BF0_reloc")
+DEFINE_DMA_ENTRY(ovl_009428A0, "ovl_009428A0")
+DEFINE_DMA_ENTRY(ovl_009428A0_reloc, "ovl_009428A0_reloc")
+DEFINE_DMA_ENTRY(ovl_00942EE0, "ovl_00942EE0")
+DEFINE_DMA_ENTRY(ovl_00942EE0_reloc, "ovl_00942EE0_reloc")
+DEFINE_DMA_ENTRY(ovl_00942F50, "ovl_00942F50")
+DEFINE_DMA_ENTRY(ovl_00942F50_reloc, "ovl_00942F50_reloc")
+DEFINE_DMA_ENTRY(ovl_00942FC0, "ovl_00942FC0")
+DEFINE_DMA_ENTRY(ovl_00942FC0_reloc, "ovl_00942FC0_reloc")
+DEFINE_DMA_ENTRY(ovl_00943030, "ovl_00943030")
+DEFINE_DMA_ENTRY(ovl_00943030_reloc, "ovl_00943030_reloc")
+DEFINE_DMA_ENTRY(ovl_009430A0, "ovl_009430A0")
+DEFINE_DMA_ENTRY(ovl_009430A0_reloc, "ovl_009430A0_reloc")
+DEFINE_DMA_ENTRY(ovl_00943110, "ovl_00943110")
+DEFINE_DMA_ENTRY(ovl_00943110_reloc, "ovl_00943110_reloc")
+DEFINE_DMA_ENTRY(ovl_00943180, "ovl_00943180")
+DEFINE_DMA_ENTRY(ovl_00943180_reloc, "ovl_00943180_reloc")
+DEFINE_DMA_ENTRY(ovl_009431F0, "ovl_009431F0")
+DEFINE_DMA_ENTRY(ovl_009431F0_reloc, "ovl_009431F0_reloc")
+DEFINE_DMA_ENTRY(ovl_00943260, "ovl_00943260")
+DEFINE_DMA_ENTRY(ovl_00943260_reloc, "ovl_00943260_reloc")
+DEFINE_DMA_ENTRY(ovl_009432D0, "ovl_009432D0")
+DEFINE_DMA_ENTRY(ovl_009432D0_reloc, "ovl_009432D0_reloc")
+DEFINE_DMA_ENTRY(ovl_00943340, "ovl_00943340")
+DEFINE_DMA_ENTRY(ovl_00943340_reloc, "ovl_00943340_reloc")
+DEFINE_DMA_ENTRY(ovl_009433B0, "ovl_009433B0")
+DEFINE_DMA_ENTRY(ovl_009433B0_reloc, "ovl_009433B0_reloc")
+DEFINE_DMA_ENTRY(ovl_00943420, "ovl_00943420")
+DEFINE_DMA_ENTRY(ovl_00943420_reloc, "ovl_00943420_reloc")
+DEFINE_DMA_ENTRY(ovl_00943490, "ovl_00943490")
+DEFINE_DMA_ENTRY(ovl_00943490_reloc, "ovl_00943490_reloc")
+DEFINE_DMA_ENTRY(ovl_00943500, "ovl_00943500")
+DEFINE_DMA_ENTRY(ovl_00943500_reloc, "ovl_00943500_reloc")
+DEFINE_DMA_ENTRY(ovl_00943570, "ovl_00943570")
+DEFINE_DMA_ENTRY(ovl_00943570_reloc, "ovl_00943570_reloc")
+DEFINE_DMA_ENTRY(ovl_009435E0, "ovl_009435E0")
+DEFINE_DMA_ENTRY(ovl_009435E0_reloc, "ovl_009435E0_reloc")
+DEFINE_DMA_ENTRY(ovl_00943650, "ovl_00943650")
+DEFINE_DMA_ENTRY(ovl_00943650_reloc, "ovl_00943650_reloc")
+DEFINE_DMA_ENTRY(ovl_009436C0, "ovl_009436C0")
+DEFINE_DMA_ENTRY(ovl_009436C0_reloc, "ovl_009436C0_reloc")
+DEFINE_DMA_ENTRY(ovl_00943730, "ovl_00943730")
+DEFINE_DMA_ENTRY(ovl_00943730_reloc, "ovl_00943730_reloc")
+DEFINE_DMA_ENTRY(ovl_009437A0, "ovl_009437A0")
+DEFINE_DMA_ENTRY(ovl_009437A0_reloc, "ovl_009437A0_reloc")
+DEFINE_DMA_ENTRY(ovl_00943810, "ovl_00943810")
+DEFINE_DMA_ENTRY(ovl_00943810_reloc, "ovl_00943810_reloc")
+DEFINE_DMA_ENTRY(ovl_00943880, "ovl_00943880")
+DEFINE_DMA_ENTRY(ovl_00943880_reloc, "ovl_00943880_reloc")
+DEFINE_DMA_ENTRY(ovl_009438F0, "ovl_009438F0")
+DEFINE_DMA_ENTRY(ovl_009438F0_reloc, "ovl_009438F0_reloc")
+DEFINE_DMA_ENTRY(ovl_00943960, "ovl_00943960")
+DEFINE_DMA_ENTRY(ovl_00943960_reloc, "ovl_00943960_reloc")
+DEFINE_DMA_ENTRY(ovl_00944930, "ovl_00944930")
+DEFINE_DMA_ENTRY(ovl_00944930_reloc, "ovl_00944930_reloc")
+DEFINE_DMA_ENTRY(ovl_009449A0, "ovl_009449A0")
+DEFINE_DMA_ENTRY(ovl_009449A0_reloc, "ovl_009449A0_reloc")
+DEFINE_DMA_ENTRY(ovl_00944A10, "ovl_00944A10")
+DEFINE_DMA_ENTRY(ovl_00944A10_reloc, "ovl_00944A10_reloc")
+DEFINE_DMA_ENTRY(ovl_00944A80, "ovl_00944A80")
+DEFINE_DMA_ENTRY(ovl_00944A80_reloc, "ovl_00944A80_reloc")
+DEFINE_DMA_ENTRY(ovl_00944AF0, "ovl_00944AF0")
+DEFINE_DMA_ENTRY(ovl_00944AF0_reloc, "ovl_00944AF0_reloc")
+DEFINE_DMA_ENTRY(ovl_00944B60, "ovl_00944B60")
+DEFINE_DMA_ENTRY(ovl_00944B60_reloc, "ovl_00944B60_reloc")
+DEFINE_DMA_ENTRY(ovl_00944C70, "ovl_00944C70")
+DEFINE_DMA_ENTRY(ovl_00944C70_reloc, "ovl_00944C70_reloc")
+DEFINE_DMA_ENTRY(ovl_00944D80, "ovl_00944D80")
+DEFINE_DMA_ENTRY(ovl_00944D80_reloc, "ovl_00944D80_reloc")
+DEFINE_DMA_ENTRY(ovl_00944E90, "ovl_00944E90")
+DEFINE_DMA_ENTRY(ovl_00944E90_reloc, "ovl_00944E90_reloc")
+DEFINE_DMA_ENTRY(ovl_00945B10, "ovl_00945B10")
+DEFINE_DMA_ENTRY(ovl_00945B10_reloc, "ovl_00945B10_reloc")
+DEFINE_DMA_ENTRY(ovl_00946900, "ovl_00946900")
+DEFINE_DMA_ENTRY(ovl_00946900_reloc, "ovl_00946900_reloc")
+DEFINE_DMA_ENTRY(ovl_009474F0, "ovl_009474F0")
+DEFINE_DMA_ENTRY(ovl_009474F0_reloc, "ovl_009474F0_reloc")
+DEFINE_DMA_ENTRY(ovl_00948A20, "ovl_00948A20")
+DEFINE_DMA_ENTRY(ovl_00948A20_reloc, "ovl_00948A20_reloc")
+DEFINE_DMA_ENTRY(ovl_00949BE0, "ovl_00949BE0")
+DEFINE_DMA_ENTRY(ovl_00949BE0_reloc, "ovl_00949BE0_reloc")
+DEFINE_DMA_ENTRY(ovl_0094B4B0, "ovl_0094B4B0")
+DEFINE_DMA_ENTRY(ovl_0094B4B0_reloc, "ovl_0094B4B0_reloc")
+DEFINE_DMA_ENTRY(ovl_0094BFD0, "ovl_0094BFD0")
+DEFINE_DMA_ENTRY(ovl_0094BFD0_reloc, "ovl_0094BFD0_reloc")
+DEFINE_DMA_ENTRY(ovl_0094D920, "ovl_0094D920")
+DEFINE_DMA_ENTRY(ovl_0094D920_reloc, "ovl_0094D920_reloc")
+DEFINE_DMA_ENTRY(ovl_0094F170, "ovl_0094F170")
+DEFINE_DMA_ENTRY(ovl_0094F170_reloc, "ovl_0094F170_reloc")
+DEFINE_DMA_ENTRY(ovl_0094F570, "ovl_0094F570")
+DEFINE_DMA_ENTRY(ovl_0094F570_reloc, "ovl_0094F570_reloc")
+DEFINE_DMA_ENTRY(ovl_0094FA20, "ovl_0094FA20")
+DEFINE_DMA_ENTRY(ovl_0094FA20_reloc, "ovl_0094FA20_reloc")
+DEFINE_DMA_ENTRY(ovl_0094FB30, "ovl_0094FB30")
+DEFINE_DMA_ENTRY(ovl_0094FB30_reloc, "ovl_0094FB30_reloc")
+DEFINE_DMA_ENTRY(ovl_0094FC40, "ovl_0094FC40")
+DEFINE_DMA_ENTRY(ovl_0094FC40_reloc, "ovl_0094FC40_reloc")
+DEFINE_DMA_ENTRY(ovl_0094FD50, "ovl_0094FD50")
+DEFINE_DMA_ENTRY(ovl_0094FD50_reloc, "ovl_0094FD50_reloc")
+DEFINE_DMA_ENTRY(ovl_0094FE60, "ovl_0094FE60")
+DEFINE_DMA_ENTRY(ovl_0094FE60_reloc, "ovl_0094FE60_reloc")
+DEFINE_DMA_ENTRY(ovl_0094FF70, "ovl_0094FF70")
+DEFINE_DMA_ENTRY(ovl_0094FF70_reloc, "ovl_0094FF70_reloc")
+DEFINE_DMA_ENTRY(ovl_00950DE0, "ovl_00950DE0")
+DEFINE_DMA_ENTRY(ovl_00950DE0_reloc, "ovl_00950DE0_reloc")
+DEFINE_DMA_ENTRY(ovl_00951A70, "ovl_00951A70")
+DEFINE_DMA_ENTRY(ovl_00951A70_reloc, "ovl_00951A70_reloc")
+DEFINE_DMA_ENTRY(ovl_00951D10, "ovl_00951D10")
+DEFINE_DMA_ENTRY(ovl_00951D10_reloc, "ovl_00951D10_reloc")
+DEFINE_DMA_ENTRY(ovl_00952730, "ovl_00952730")
+DEFINE_DMA_ENTRY(ovl_00952730_reloc, "ovl_00952730_reloc")
+DEFINE_DMA_ENTRY(ovl_009537E0, "ovl_009537E0")
+DEFINE_DMA_ENTRY(ovl_009537E0_reloc, "ovl_009537E0_reloc")
+DEFINE_DMA_ENTRY(ovl_00953DE0, "ovl_00953DE0")
+DEFINE_DMA_ENTRY(ovl_00953DE0_reloc, "ovl_00953DE0_reloc")
+DEFINE_DMA_ENTRY(ovl_00953E50, "ovl_00953E50")
+DEFINE_DMA_ENTRY(ovl_00953E50_reloc, "ovl_00953E50_reloc")
+DEFINE_DMA_ENTRY(ovl_00953EC0, "ovl_00953EC0")
+DEFINE_DMA_ENTRY(ovl_00953EC0_reloc, "ovl_00953EC0_reloc")
+DEFINE_DMA_ENTRY(ovl_00953F30, "ovl_00953F30")
+DEFINE_DMA_ENTRY(ovl_00953F30_reloc, "ovl_00953F30_reloc")
+DEFINE_DMA_ENTRY(ovl_00954D30, "ovl_00954D30")
+DEFINE_DMA_ENTRY(ovl_00954D30_reloc, "ovl_00954D30_reloc")
+DEFINE_DMA_ENTRY(ovl_00956630, "ovl_00956630")
+DEFINE_DMA_ENTRY(ovl_00956630_reloc, "ovl_00956630_reloc")
+DEFINE_DMA_ENTRY(ovl_00956870, "ovl_00956870")
+DEFINE_DMA_ENTRY(ovl_00956870_reloc, "ovl_00956870_reloc")
+DEFINE_DMA_ENTRY(ovl_009568E0, "ovl_009568E0")
+DEFINE_DMA_ENTRY(ovl_009568E0_reloc, "ovl_009568E0_reloc")
+DEFINE_DMA_ENTRY(ovl_00956950, "ovl_00956950")
+DEFINE_DMA_ENTRY(ovl_00956950_reloc, "ovl_00956950_reloc")
+DEFINE_DMA_ENTRY(ovl_009569C0, "ovl_009569C0")
+DEFINE_DMA_ENTRY(ovl_009569C0_reloc, "ovl_009569C0_reloc")
+DEFINE_DMA_ENTRY(ovl_00956A30, "ovl_00956A30")
+DEFINE_DMA_ENTRY(ovl_00956A30_reloc, "ovl_00956A30_reloc")
+DEFINE_DMA_ENTRY(ovl_00956AA0, "ovl_00956AA0")
+DEFINE_DMA_ENTRY(ovl_00956AA0_reloc, "ovl_00956AA0_reloc")
+DEFINE_DMA_ENTRY(ovl_00956B10, "ovl_00956B10")
+DEFINE_DMA_ENTRY(ovl_00956B10_reloc, "ovl_00956B10_reloc")
+DEFINE_DMA_ENTRY(ovl_00956B80, "ovl_00956B80")
+DEFINE_DMA_ENTRY(ovl_00956B80_reloc, "ovl_00956B80_reloc")
+DEFINE_DMA_ENTRY(ovl_00956BF0, "ovl_00956BF0")
+DEFINE_DMA_ENTRY(ovl_00956BF0_reloc, "ovl_00956BF0_reloc")
+DEFINE_DMA_ENTRY(ovl_00957410, "ovl_00957410")
+DEFINE_DMA_ENTRY(ovl_00957410_reloc, "ovl_00957410_reloc")
+DEFINE_DMA_ENTRY(ovl_009577A0, "ovl_009577A0")
+DEFINE_DMA_ENTRY(ovl_009577A0_reloc, "ovl_009577A0_reloc")
+DEFINE_DMA_ENTRY(ovl_00957B30, "ovl_00957B30")
+DEFINE_DMA_ENTRY(ovl_00957B30_reloc, "ovl_00957B30_reloc")
+DEFINE_DMA_ENTRY(ovl_00957BA0, "ovl_00957BA0")
+DEFINE_DMA_ENTRY(ovl_00957BA0_reloc, "ovl_00957BA0_reloc")
+DEFINE_DMA_ENTRY(ovl_00957FF0, "ovl_00957FF0")
+DEFINE_DMA_ENTRY(ovl_00957FF0_reloc, "ovl_00957FF0_reloc")
+DEFINE_DMA_ENTRY(ovl_00958060, "ovl_00958060")
+DEFINE_DMA_ENTRY(ovl_00958060_reloc, "ovl_00958060_reloc")
+DEFINE_DMA_ENTRY(ovl_009580D0, "ovl_009580D0")
+DEFINE_DMA_ENTRY(ovl_009580D0_reloc, "ovl_009580D0_reloc")
+DEFINE_DMA_ENTRY(ovl_00958140, "ovl_00958140")
+DEFINE_DMA_ENTRY(ovl_00958140_reloc, "ovl_00958140_reloc")
+DEFINE_DMA_ENTRY(ovl_009581B0, "ovl_009581B0")
+DEFINE_DMA_ENTRY(ovl_009581B0_reloc, "ovl_009581B0_reloc")
+DEFINE_DMA_ENTRY(ovl_00958220, "ovl_00958220")
+DEFINE_DMA_ENTRY(ovl_00958220_reloc, "ovl_00958220_reloc")
+DEFINE_DMA_ENTRY(ovl_009591D0, "ovl_009591D0")
+DEFINE_DMA_ENTRY(ovl_009591D0_reloc, "ovl_009591D0_reloc")
+DEFINE_DMA_ENTRY(ovl_0095B440, "ovl_0095B440")
+DEFINE_DMA_ENTRY(ovl_0095B440_reloc, "ovl_0095B440_reloc")
+DEFINE_DMA_ENTRY(ovl_0095BDE0, "ovl_0095BDE0")
+DEFINE_DMA_ENTRY(ovl_0095BDE0_reloc, "ovl_0095BDE0_reloc")
+DEFINE_DMA_ENTRY(ovl_0095BE50, "ovl_0095BE50")
+DEFINE_DMA_ENTRY(ovl_0095BE50_reloc, "ovl_0095BE50_reloc")
+DEFINE_DMA_ENTRY(ovl_0095BEC0, "ovl_0095BEC0")
+DEFINE_DMA_ENTRY(ovl_0095BEC0_reloc, "ovl_0095BEC0_reloc")
+DEFINE_DMA_ENTRY(ovl_0095BF30, "ovl_0095BF30")
+DEFINE_DMA_ENTRY(ovl_0095BF30_reloc, "ovl_0095BF30_reloc")
+DEFINE_DMA_ENTRY(ovl_0095BFA0, "ovl_0095BFA0")
+DEFINE_DMA_ENTRY(ovl_0095BFA0_reloc, "ovl_0095BFA0_reloc")
+DEFINE_DMA_ENTRY(ovl_0095C630, "ovl_0095C630")
+DEFINE_DMA_ENTRY(ovl_0095C630_reloc, "ovl_0095C630_reloc")
+DEFINE_DMA_ENTRY(ovl_0095CFD0, "ovl_0095CFD0")
+DEFINE_DMA_ENTRY(ovl_0095CFD0_reloc, "ovl_0095CFD0_reloc")
+DEFINE_DMA_ENTRY(ovl_0095D040, "ovl_0095D040")
+DEFINE_DMA_ENTRY(ovl_0095D040_reloc, "ovl_0095D040_reloc")
+DEFINE_DMA_ENTRY(ovl_0095D0B0, "ovl_0095D0B0")
+DEFINE_DMA_ENTRY(ovl_0095D0B0_reloc, "ovl_0095D0B0_reloc")
+DEFINE_DMA_ENTRY(ovl_0095D120, "ovl_0095D120")
+DEFINE_DMA_ENTRY(ovl_0095D120_reloc, "ovl_0095D120_reloc")
+DEFINE_DMA_ENTRY(ovl_0095D4F0, "ovl_0095D4F0")
+DEFINE_DMA_ENTRY(ovl_0095D4F0_reloc, "ovl_0095D4F0_reloc")
+DEFINE_DMA_ENTRY(ovl_0095DDA0, "ovl_0095DDA0")
+DEFINE_DMA_ENTRY(ovl_0095DDA0_reloc, "ovl_0095DDA0_reloc")
+DEFINE_DMA_ENTRY(ovl_0095DEB0, "ovl_0095DEB0")
+DEFINE_DMA_ENTRY(ovl_0095DEB0_reloc, "ovl_0095DEB0_reloc")
+DEFINE_DMA_ENTRY(ovl_0095E520, "ovl_0095E520")
+DEFINE_DMA_ENTRY(ovl_0095E520_reloc, "ovl_0095E520_reloc")
+DEFINE_DMA_ENTRY(ovl_0095E590, "ovl_0095E590")
+DEFINE_DMA_ENTRY(ovl_0095E590_reloc, "ovl_0095E590_reloc")
+DEFINE_DMA_ENTRY(ovl_0095E600, "ovl_0095E600")
+DEFINE_DMA_ENTRY(ovl_0095E600_reloc, "ovl_0095E600_reloc")
+DEFINE_DMA_ENTRY(ovl_0095E670, "ovl_0095E670")
+DEFINE_DMA_ENTRY(ovl_0095E670_reloc, "ovl_0095E670_reloc")
+DEFINE_DMA_ENTRY(ovl_0095E6E0, "ovl_0095E6E0")
+DEFINE_DMA_ENTRY(ovl_0095E6E0_reloc, "ovl_0095E6E0_reloc")
+DEFINE_DMA_ENTRY(ovl_0095E750, "ovl_0095E750")
+DEFINE_DMA_ENTRY(ovl_0095E750_reloc, "ovl_0095E750_reloc")
+DEFINE_DMA_ENTRY(ovl_0095ECC0, "ovl_0095ECC0")
+DEFINE_DMA_ENTRY(ovl_0095ECC0_reloc, "ovl_0095ECC0_reloc")
+DEFINE_DMA_ENTRY(ovl_0095EDC0, "ovl_0095EDC0")
+DEFINE_DMA_ENTRY(ovl_0095EDC0_reloc, "ovl_0095EDC0_reloc")
+DEFINE_DMA_ENTRY(ovl_0095EE30, "ovl_0095EE30")
+DEFINE_DMA_ENTRY(ovl_0095EE30_reloc, "ovl_0095EE30_reloc")
+DEFINE_DMA_ENTRY(ovl_0095EEA0, "ovl_0095EEA0")
+DEFINE_DMA_ENTRY(ovl_0095EEA0_reloc, "ovl_0095EEA0_reloc")
+DEFINE_DMA_ENTRY(ovl_0095EF10, "ovl_0095EF10")
+DEFINE_DMA_ENTRY(ovl_0095EF10_reloc, "ovl_0095EF10_reloc")
+DEFINE_DMA_ENTRY(ovl_0095F830, "ovl_0095F830")
+DEFINE_DMA_ENTRY(ovl_0095F830_reloc, "ovl_0095F830_reloc")
+DEFINE_DMA_ENTRY(ovl_0095FEC0, "ovl_0095FEC0")
+DEFINE_DMA_ENTRY(ovl_0095FEC0_reloc, "ovl_0095FEC0_reloc")
+DEFINE_DMA_ENTRY(ovl_00962800, "ovl_00962800")
+DEFINE_DMA_ENTRY(ovl_00962800_reloc, "ovl_00962800_reloc")
+DEFINE_DMA_ENTRY(ovl_00962D00, "ovl_00962D00")
+DEFINE_DMA_ENTRY(ovl_00962D00_reloc, "ovl_00962D00_reloc")
+DEFINE_DMA_ENTRY(ovl_00963030, "ovl_00963030")
+DEFINE_DMA_ENTRY(ovl_00963030_reloc, "ovl_00963030_reloc")
+DEFINE_DMA_ENTRY(ovl_009634D0, "ovl_009634D0")
+DEFINE_DMA_ENTRY(ovl_009634D0_reloc, "ovl_009634D0_reloc")
+DEFINE_DMA_ENTRY(ovl_009635E0, "ovl_009635E0")
+DEFINE_DMA_ENTRY(ovl_009635E0_reloc, "ovl_009635E0_reloc")
+DEFINE_DMA_ENTRY(ovl_00963DF0, "ovl_00963DF0")
+DEFINE_DMA_ENTRY(ovl_00963DF0_reloc, "ovl_00963DF0_reloc")
+DEFINE_DMA_ENTRY(ovl_009651E0, "ovl_009651E0")
+DEFINE_DMA_ENTRY(ovl_009651E0_reloc, "ovl_009651E0_reloc")
+DEFINE_DMA_ENTRY(ovl_009652F0, "ovl_009652F0")
+DEFINE_DMA_ENTRY(ovl_009652F0_reloc, "ovl_009652F0_reloc")
+DEFINE_DMA_ENTRY(ovl_00965360, "ovl_00965360")
+DEFINE_DMA_ENTRY(ovl_00965360_reloc, "ovl_00965360_reloc")
+DEFINE_DMA_ENTRY(ovl_009653D0, "ovl_009653D0")
+DEFINE_DMA_ENTRY(ovl_009653D0_reloc, "ovl_009653D0_reloc")
+DEFINE_DMA_ENTRY(ovl_00965BE0, "ovl_00965BE0")
+DEFINE_DMA_ENTRY(ovl_00965BE0_reloc, "ovl_00965BE0_reloc")
+DEFINE_DMA_ENTRY(ovl_009672A0, "ovl_009672A0")
+DEFINE_DMA_ENTRY(ovl_009672A0_reloc, "ovl_009672A0_reloc")
+DEFINE_DMA_ENTRY(ovl_00967310, "ovl_00967310")
+DEFINE_DMA_ENTRY(ovl_00967310_reloc, "ovl_00967310_reloc")
+DEFINE_DMA_ENTRY(ovl_009679A0, "ovl_009679A0")
+DEFINE_DMA_ENTRY(ovl_009679A0_reloc, "ovl_009679A0_reloc")
+DEFINE_DMA_ENTRY(ovl_009680A0, "ovl_009680A0")
+DEFINE_DMA_ENTRY(ovl_009680A0_reloc, "ovl_009680A0_reloc")
+DEFINE_DMA_ENTRY(ovl_00968730, "ovl_00968730")
+DEFINE_DMA_ENTRY(ovl_00968730_reloc, "ovl_00968730_reloc")
+DEFINE_DMA_ENTRY(ovl_009687A0, "ovl_009687A0")
+DEFINE_DMA_ENTRY(ovl_009687A0_reloc, "ovl_009687A0_reloc")
+DEFINE_DMA_ENTRY(ovl_00968810, "ovl_00968810")
+DEFINE_DMA_ENTRY(ovl_00968810_reloc, "ovl_00968810_reloc")
+DEFINE_DMA_ENTRY(ovl_00968880, "ovl_00968880")
+DEFINE_DMA_ENTRY(ovl_00968880_reloc, "ovl_00968880_reloc")
+DEFINE_DMA_ENTRY(ovl_00968990, "ovl_00968990")
+DEFINE_DMA_ENTRY(ovl_00968990_reloc, "ovl_00968990_reloc")
+DEFINE_DMA_ENTRY(ovl_00968A00, "ovl_00968A00")
+DEFINE_DMA_ENTRY(ovl_00968A00_reloc, "ovl_00968A00_reloc")
+DEFINE_DMA_ENTRY(ovl_00968A70, "ovl_00968A70")
+DEFINE_DMA_ENTRY(ovl_00968A70_reloc, "ovl_00968A70_reloc")
+DEFINE_DMA_ENTRY(ovl_00968AE0, "ovl_00968AE0")
+DEFINE_DMA_ENTRY(ovl_00968AE0_reloc, "ovl_00968AE0_reloc")
+DEFINE_DMA_ENTRY(ovl_00968DD0, "ovl_00968DD0")
+DEFINE_DMA_ENTRY(ovl_00968DD0_reloc, "ovl_00968DD0_reloc")
+DEFINE_DMA_ENTRY(ovl_00969160, "ovl_00969160")
+DEFINE_DMA_ENTRY(ovl_00969160_reloc, "ovl_00969160_reloc")
+DEFINE_DMA_ENTRY(ovl_009691D0, "ovl_009691D0")
+DEFINE_DMA_ENTRY(ovl_009691D0_reloc, "ovl_009691D0_reloc")
+DEFINE_DMA_ENTRY(ovl_00969240, "ovl_00969240")
+DEFINE_DMA_ENTRY(ovl_00969240_reloc, "ovl_00969240_reloc")
+DEFINE_DMA_ENTRY(ovl_009692B0, "ovl_009692B0")
+DEFINE_DMA_ENTRY(ovl_009692B0_reloc, "ovl_009692B0_reloc")
+DEFINE_DMA_ENTRY(ovl_00969320, "ovl_00969320")
+DEFINE_DMA_ENTRY(ovl_00969320_reloc, "ovl_00969320_reloc")
+DEFINE_DMA_ENTRY(ovl_00969390, "ovl_00969390")
+DEFINE_DMA_ENTRY(ovl_00969390_reloc, "ovl_00969390_reloc")
+DEFINE_DMA_ENTRY(ovl_00969400, "ovl_00969400")
+DEFINE_DMA_ENTRY(ovl_00969400_reloc, "ovl_00969400_reloc")
+DEFINE_DMA_ENTRY(ovl_00969470, "ovl_00969470")
+DEFINE_DMA_ENTRY(ovl_00969470_reloc, "ovl_00969470_reloc")
+DEFINE_DMA_ENTRY(ovl_009694E0, "ovl_009694E0")
+DEFINE_DMA_ENTRY(ovl_009694E0_reloc, "ovl_009694E0_reloc")
+DEFINE_DMA_ENTRY(ovl_00969550, "ovl_00969550")
+DEFINE_DMA_ENTRY(ovl_00969550_reloc, "ovl_00969550_reloc")
+DEFINE_DMA_ENTRY(ovl_009695C0, "ovl_009695C0")
+DEFINE_DMA_ENTRY(ovl_009695C0_reloc, "ovl_009695C0_reloc")
+DEFINE_DMA_ENTRY(ovl_00969630, "ovl_00969630")
+DEFINE_DMA_ENTRY(ovl_00969630_reloc, "ovl_00969630_reloc")
+DEFINE_DMA_ENTRY(ovl_00969B80, "ovl_00969B80")
+DEFINE_DMA_ENTRY(ovl_00969B80_reloc, "ovl_00969B80_reloc")
+DEFINE_DMA_ENTRY(ovl_0096A0D0, "ovl_0096A0D0")
+DEFINE_DMA_ENTRY(ovl_0096A0D0_reloc, "ovl_0096A0D0_reloc")
+DEFINE_DMA_ENTRY(ovl_0096A140, "ovl_0096A140")
+DEFINE_DMA_ENTRY(ovl_0096A140_reloc, "ovl_0096A140_reloc")
+DEFINE_DMA_ENTRY(ovl_0096A1B0, "ovl_0096A1B0")
+DEFINE_DMA_ENTRY(ovl_0096A1B0_reloc, "ovl_0096A1B0_reloc")
+DEFINE_DMA_ENTRY(ovl_0096A220, "ovl_0096A220")
+DEFINE_DMA_ENTRY(ovl_0096A220_reloc, "ovl_0096A220_reloc")
+DEFINE_DMA_ENTRY(ovl_0096A290, "ovl_0096A290")
+DEFINE_DMA_ENTRY(ovl_0096A290_reloc, "ovl_0096A290_reloc")
+DEFINE_DMA_ENTRY(ovl_0096B010, "ovl_0096B010")
+DEFINE_DMA_ENTRY(ovl_0096B010_reloc, "ovl_0096B010_reloc")
+DEFINE_DMA_ENTRY(ovl_0096B120, "ovl_0096B120")
+DEFINE_DMA_ENTRY(ovl_0096B120_reloc, "ovl_0096B120_reloc")
+DEFINE_DMA_ENTRY(ovl_0096B230, "ovl_0096B230")
+DEFINE_DMA_ENTRY(ovl_0096B230_reloc, "ovl_0096B230_reloc")
+DEFINE_DMA_ENTRY(ovl_0096B340, "ovl_0096B340")
+DEFINE_DMA_ENTRY(ovl_0096B340_reloc, "ovl_0096B340_reloc")
+DEFINE_DMA_ENTRY(ovl_0096B470, "ovl_0096B470")
+DEFINE_DMA_ENTRY(ovl_0096B470_reloc, "ovl_0096B470_reloc")
+DEFINE_DMA_ENTRY(ovl_0096C3A0, "ovl_0096C3A0")
+DEFINE_DMA_ENTRY(ovl_0096C3A0_reloc, "ovl_0096C3A0_reloc")
+DEFINE_DMA_ENTRY(ovl_0096CCF0, "ovl_0096CCF0")
+DEFINE_DMA_ENTRY(ovl_0096CCF0_reloc, "ovl_0096CCF0_reloc")
+DEFINE_DMA_ENTRY(ovl_0096D250, "ovl_0096D250")
+DEFINE_DMA_ENTRY(ovl_0096D250_reloc, "ovl_0096D250_reloc")
+DEFINE_DMA_ENTRY(ovl_0096E8E0, "ovl_0096E8E0")
+DEFINE_DMA_ENTRY(ovl_0096E8E0_reloc, "ovl_0096E8E0_reloc")
+DEFINE_DMA_ENTRY(ovl_0096E9F0, "ovl_0096E9F0")
+DEFINE_DMA_ENTRY(ovl_0096E9F0_reloc, "ovl_0096E9F0_reloc")
+DEFINE_DMA_ENTRY(ovl_0096EB20, "ovl_0096EB20")
+DEFINE_DMA_ENTRY(ovl_0096EB20_reloc, "ovl_0096EB20_reloc")
+DEFINE_DMA_ENTRY(ovl_0096F360, "ovl_0096F360")
+DEFINE_DMA_ENTRY(ovl_0096F360_reloc, "ovl_0096F360_reloc")
+DEFINE_DMA_ENTRY(ovl_0096F3D0, "ovl_0096F3D0")
+DEFINE_DMA_ENTRY(ovl_0096F3D0_reloc, "ovl_0096F3D0_reloc")
+DEFINE_DMA_ENTRY(ovl_0096F440, "ovl_0096F440")
+DEFINE_DMA_ENTRY(ovl_0096F440_reloc, "ovl_0096F440_reloc")
+DEFINE_DMA_ENTRY(ovl_0096F4B0, "ovl_0096F4B0")
+DEFINE_DMA_ENTRY(ovl_0096F4B0_reloc, "ovl_0096F4B0_reloc")
+DEFINE_DMA_ENTRY(ovl_0096F520, "ovl_0096F520")
+DEFINE_DMA_ENTRY(ovl_0096F520_reloc, "ovl_0096F520_reloc")
+DEFINE_DMA_ENTRY(ovl_0096F590, "ovl_0096F590")
+DEFINE_DMA_ENTRY(ovl_0096F590_reloc, "ovl_0096F590_reloc")
+DEFINE_DMA_ENTRY(ovl_0096F600, "ovl_0096F600")
+DEFINE_DMA_ENTRY(ovl_0096F600_reloc, "ovl_0096F600_reloc")
+DEFINE_DMA_ENTRY(ovl_0096FAE0, "ovl_0096FAE0")
+DEFINE_DMA_ENTRY(ovl_0096FAE0_reloc, "ovl_0096FAE0_reloc")
+DEFINE_DMA_ENTRY(ovl_0096FE70, "ovl_0096FE70")
+DEFINE_DMA_ENTRY(ovl_0096FE70_reloc, "ovl_0096FE70_reloc")
+DEFINE_DMA_ENTRY(ovl_00970200, "ovl_00970200")
+DEFINE_DMA_ENTRY(ovl_00970200_reloc, "ovl_00970200_reloc")
+DEFINE_DMA_ENTRY(ovl_00970880, "ovl_00970880")
+DEFINE_DMA_ENTRY(ovl_00970880_reloc, "ovl_00970880_reloc")
+DEFINE_DMA_ENTRY(ovl_00970920, "ovl_00970920")
+DEFINE_DMA_ENTRY(ovl_00970920_reloc, "ovl_00970920_reloc")
+DEFINE_DMA_ENTRY(segment_009757E0, "segment_009757E0")
+DEFINE_DMA_ENTRY(segment_009D4000, "segment_009D4000")
+DEFINE_DMA_ENTRY(segment_009DF000, "segment_009DF000")
+DEFINE_DMA_ENTRY(segment_009EA000, "segment_009EA000")
+DEFINE_DMA_ENTRY(segment_009F5000, "segment_009F5000")
+DEFINE_DMA_ENTRY(segment_00A00000, "segment_00A00000")
+DEFINE_DMA_ENTRY(segment_00A0B000, "segment_00A0B000")
+DEFINE_DMA_ENTRY(segment_00A16000, "segment_00A16000")
+DEFINE_DMA_ENTRY(segment_00A21000, "segment_00A21000")
+DEFINE_DMA_ENTRY(segment_00A22000, "segment_00A22000")
+DEFINE_DMA_ENTRY(segment_00A30000, "segment_00A30000")
+DEFINE_DMA_ENTRY(segment_00A40000, "segment_00A40000")
+DEFINE_DMA_ENTRY(segment_00A58000, "segment_00A58000")
+DEFINE_DMA_ENTRY(segment_00A6B000, "segment_00A6B000")
+DEFINE_DMA_ENTRY(segment_00A76000, "segment_00A76000")
+DEFINE_DMA_ENTRY(segment_00A7A000, "segment_00A7A000")
+DEFINE_DMA_ENTRY(segment_00A7B000, "segment_00A7B000")
+DEFINE_DMA_ENTRY(segment_00A7C000, "segment_00A7C000")
+DEFINE_DMA_ENTRY(segment_00A82000, "segment_00A82000")
+DEFINE_DMA_ENTRY(segment_00A8A000, "segment_00A8A000")
+DEFINE_DMA_ENTRY(segment_00A8E000, "segment_00A8E000")
+DEFINE_DMA_ENTRY(segment_00A94000, "segment_00A94000")
+DEFINE_DMA_ENTRY(segment_00AAD000, "segment_00AAD000")
+DEFINE_DMA_ENTRY(segment_00ABA000, "segment_00ABA000")
+DEFINE_DMA_ENTRY(segment_00AC7000, "segment_00AC7000")
+DEFINE_DMA_ENTRY(segment_00ACA000, "segment_00ACA000")
+DEFINE_DMA_ENTRY(segment_00ACC000, "segment_00ACC000")
+DEFINE_DMA_ENTRY(segment_00AD1000, "segment_00AD1000")
+DEFINE_DMA_ENTRY(segment_00ADD000, "segment_00ADD000")
+DEFINE_DMA_ENTRY(segment_00AE3000, "segment_00AE3000")
+DEFINE_DMA_ENTRY(segment_00B0D000, "segment_00B0D000")
+DEFINE_DMA_ENTRY(segment_00B17000, "segment_00B17000")
+DEFINE_DMA_ENTRY(segment_00B1A000, "segment_00B1A000")
+DEFINE_DMA_ENTRY(segment_00B2A000, "segment_00B2A000")
+DEFINE_DMA_ENTRY(segment_00B36000, "segment_00B36000")
+DEFINE_DMA_ENTRY(segment_00B68000, "segment_00B68000")
+DEFINE_DMA_ENTRY(segment_00B88000, "segment_00B88000")
+DEFINE_DMA_ENTRY(segment_00B8A000, "segment_00B8A000")
+DEFINE_DMA_ENTRY(segment_00B8B000, "segment_00B8B000")
+DEFINE_DMA_ENTRY(segment_00B8F000, "segment_00B8F000")
+DEFINE_DMA_ENTRY(segment_00BC8000, "segment_00BC8000")
+DEFINE_DMA_ENTRY(segment_00BCD000, "segment_00BCD000")
+DEFINE_DMA_ENTRY(segment_00BD4000, "segment_00BD4000")
+DEFINE_DMA_ENTRY(segment_00CF9000, "segment_00CF9000")
+DEFINE_DMA_ENTRY(segment_00D05000, "segment_00D05000")
+DEFINE_DMA_ENTRY(segment_00D06000, "segment_00D06000")
+DEFINE_DMA_ENTRY(segment_00D07000, "segment_00D07000")
+DEFINE_DMA_ENTRY(segment_00D10000, "segment_00D10000")
+DEFINE_DMA_ENTRY(segment_00D11000, "segment_00D11000")
+DEFINE_DMA_ENTRY(segment_00D12000, "segment_00D12000")
+DEFINE_DMA_ENTRY(segment_00D13000, "segment_00D13000")
+DEFINE_DMA_ENTRY(segment_00D15000, "segment_00D15000")
+DEFINE_DMA_ENTRY(segment_00D16000, "segment_00D16000")
+DEFINE_DMA_ENTRY(segment_00D18000, "segment_00D18000")
+DEFINE_DMA_ENTRY(segment_00D1A000, "segment_00D1A000")
+DEFINE_DMA_ENTRY(segment_00D25000, "segment_00D25000")
+DEFINE_DMA_ENTRY(segment_00D29000, "segment_00D29000")
+DEFINE_DMA_ENTRY(segment_00D2D000, "segment_00D2D000")
+DEFINE_DMA_ENTRY(segment_00D38000, "segment_00D38000")
+DEFINE_DMA_ENTRY(segment_00D43000, "segment_00D43000")
+DEFINE_DMA_ENTRY(segment_00D4D000, "segment_00D4D000")
+DEFINE_DMA_ENTRY(segment_00D58000, "segment_00D58000")
+DEFINE_DMA_ENTRY(segment_00D59000, "segment_00D59000")
+DEFINE_DMA_ENTRY(segment_00D5A000, "segment_00D5A000")
+DEFINE_DMA_ENTRY(segment_00D5B000, "segment_00D5B000")
+DEFINE_DMA_ENTRY(segment_00D5D000, "segment_00D5D000")
+DEFINE_DMA_ENTRY(segment_00D5E000, "segment_00D5E000")
+DEFINE_DMA_ENTRY(segment_00DF4000, "segment_00DF4000")
+DEFINE_DMA_ENTRY(segment_00DF5000, "segment_00DF5000")
+DEFINE_DMA_ENTRY(segment_00E00000, "segment_00E00000")
+DEFINE_DMA_ENTRY(segment_00E01000, "segment_00E01000")
+DEFINE_DMA_ENTRY(segment_00E02000, "segment_00E02000")
+DEFINE_DMA_ENTRY(segment_00E03000, "segment_00E03000")
+DEFINE_DMA_ENTRY(segment_00E04000, "segment_00E04000")
+DEFINE_DMA_ENTRY(segment_00E05000, "segment_00E05000")
+DEFINE_DMA_ENTRY(segment_00E0D000, "segment_00E0D000")
+DEFINE_DMA_ENTRY(segment_00E0E000, "segment_00E0E000")
+DEFINE_DMA_ENTRY(segment_00E61000, "segment_00E61000")
+DEFINE_DMA_ENTRY(segment_00E64000, "segment_00E64000")
+DEFINE_DMA_ENTRY(segment_00E66000, "segment_00E66000")
+DEFINE_DMA_ENTRY(segment_00E69000, "segment_00E69000")
+DEFINE_DMA_ENTRY(segment_00E6B000, "segment_00E6B000")
+DEFINE_DMA_ENTRY(segment_00E6D000, "segment_00E6D000")
+DEFINE_DMA_ENTRY(segment_00E6F000, "segment_00E6F000")
+DEFINE_DMA_ENTRY(segment_00E71000, "segment_00E71000")
+DEFINE_DMA_ENTRY(segment_00E73000, "segment_00E73000")
+DEFINE_DMA_ENTRY(segment_00E76000, "segment_00E76000")
+DEFINE_DMA_ENTRY(segment_00E78000, "segment_00E78000")
+DEFINE_DMA_ENTRY(segment_00E7A000, "segment_00E7A000")
+DEFINE_DMA_ENTRY(segment_00E7C000, "segment_00E7C000")
+DEFINE_DMA_ENTRY(segment_00E7E000, "segment_00E7E000")
+DEFINE_DMA_ENTRY(segment_00E80000, "segment_00E80000")
+DEFINE_DMA_ENTRY(segment_00E82000, "segment_00E82000")
+DEFINE_DMA_ENTRY(segment_00E84000, "segment_00E84000")
+DEFINE_DMA_ENTRY(segment_00E86000, "segment_00E86000")
+DEFINE_DMA_ENTRY(segment_00E88000, "segment_00E88000")
+DEFINE_DMA_ENTRY(segment_00E8A000, "segment_00E8A000")
+DEFINE_DMA_ENTRY(segment_00E8C000, "segment_00E8C000")
+DEFINE_DMA_ENTRY(segment_00E8F000, "segment_00E8F000")
+DEFINE_DMA_ENTRY(segment_00E91000, "segment_00E91000")
+DEFINE_DMA_ENTRY(segment_00E93000, "segment_00E93000")
+DEFINE_DMA_ENTRY(segment_00E95000, "segment_00E95000")
+DEFINE_DMA_ENTRY(segment_00E97000, "segment_00E97000")
+DEFINE_DMA_ENTRY(segment_00E99000, "segment_00E99000")
+DEFINE_DMA_ENTRY(segment_00E9C000, "segment_00E9C000")
+DEFINE_DMA_ENTRY(segment_00E9E000, "segment_00E9E000")
+DEFINE_DMA_ENTRY(segment_00EA0000, "segment_00EA0000")
+DEFINE_DMA_ENTRY(segment_00EA2000, "segment_00EA2000")
+DEFINE_DMA_ENTRY(segment_00EA4000, "segment_00EA4000")
+DEFINE_DMA_ENTRY(segment_00EA6000, "segment_00EA6000")
+DEFINE_DMA_ENTRY(segment_00EA8000, "segment_00EA8000")
+DEFINE_DMA_ENTRY(segment_00EAA000, "segment_00EAA000")
+DEFINE_DMA_ENTRY(segment_00EAC000, "segment_00EAC000")
+DEFINE_DMA_ENTRY(segment_00EAE000, "segment_00EAE000")
+DEFINE_DMA_ENTRY(segment_00EB0000, "segment_00EB0000")
+DEFINE_DMA_ENTRY(segment_00EB3000, "segment_00EB3000")
+DEFINE_DMA_ENTRY(segment_00EB5000, "segment_00EB5000")
+DEFINE_DMA_ENTRY(segment_00EB8000, "segment_00EB8000")
+DEFINE_DMA_ENTRY(segment_00EBA000, "segment_00EBA000")
+DEFINE_DMA_ENTRY(segment_00EBC000, "segment_00EBC000")
+DEFINE_DMA_ENTRY(segment_00EBE000, "segment_00EBE000")
+DEFINE_DMA_ENTRY(segment_00EC0000, "segment_00EC0000")
+DEFINE_DMA_ENTRY(segment_00EC3000, "segment_00EC3000")
+DEFINE_DMA_ENTRY(segment_00EC5000, "segment_00EC5000")
+DEFINE_DMA_ENTRY(segment_00EC7000, "segment_00EC7000")
+DEFINE_DMA_ENTRY(segment_00EC9000, "segment_00EC9000")
+DEFINE_DMA_ENTRY(segment_00ECB000, "segment_00ECB000")
+DEFINE_DMA_ENTRY(segment_00ECD000, "segment_00ECD000")
+DEFINE_DMA_ENTRY(segment_00ECF000, "segment_00ECF000")
+DEFINE_DMA_ENTRY(segment_00ED1000, "segment_00ED1000")
+DEFINE_DMA_ENTRY(segment_00ED3000, "segment_00ED3000")
+DEFINE_DMA_ENTRY(segment_00ED5000, "segment_00ED5000")
+DEFINE_DMA_ENTRY(segment_00ED7000, "segment_00ED7000")
+DEFINE_DMA_ENTRY(segment_00ED9000, "segment_00ED9000")
+DEFINE_DMA_ENTRY(segment_00EDB000, "segment_00EDB000")
+DEFINE_DMA_ENTRY(segment_00EDD000, "segment_00EDD000")
+DEFINE_DMA_ENTRY(segment_00EDF000, "segment_00EDF000")
+DEFINE_DMA_ENTRY(segment_00EE1000, "segment_00EE1000")
+DEFINE_DMA_ENTRY(segment_00EE3000, "segment_00EE3000")
+DEFINE_DMA_ENTRY(segment_00EE6000, "segment_00EE6000")
+DEFINE_DMA_ENTRY(segment_00EE8000, "segment_00EE8000")
+DEFINE_DMA_ENTRY(segment_00EEA000, "segment_00EEA000")
+DEFINE_DMA_ENTRY(segment_00EEC000, "segment_00EEC000")
+DEFINE_DMA_ENTRY(segment_00EEE000, "segment_00EEE000")
+DEFINE_DMA_ENTRY(segment_00EF0000, "segment_00EF0000")
+DEFINE_DMA_ENTRY(segment_00EF2000, "segment_00EF2000")
+DEFINE_DMA_ENTRY(segment_00EF4000, "segment_00EF4000")
+DEFINE_DMA_ENTRY(segment_00EF6000, "segment_00EF6000")
+DEFINE_DMA_ENTRY(segment_00EF8000, "segment_00EF8000")
+DEFINE_DMA_ENTRY(segment_00EFA000, "segment_00EFA000")
+DEFINE_DMA_ENTRY(segment_00EFC000, "segment_00EFC000")
+DEFINE_DMA_ENTRY(segment_00EFE000, "segment_00EFE000")
+DEFINE_DMA_ENTRY(segment_00F00000, "segment_00F00000")
+DEFINE_DMA_ENTRY(segment_00F02000, "segment_00F02000")
+DEFINE_DMA_ENTRY(segment_00F04000, "segment_00F04000")
+DEFINE_DMA_ENTRY(segment_00F06000, "segment_00F06000")
+DEFINE_DMA_ENTRY(segment_00F08000, "segment_00F08000")
+DEFINE_DMA_ENTRY(segment_00F0A000, "segment_00F0A000")
+DEFINE_DMA_ENTRY(segment_00F0D000, "segment_00F0D000")
+DEFINE_DMA_ENTRY(segment_00F0F000, "segment_00F0F000")
+DEFINE_DMA_ENTRY(segment_00F12000, "segment_00F12000")
+DEFINE_DMA_ENTRY(segment_00F14000, "segment_00F14000")
+DEFINE_DMA_ENTRY(segment_00F16000, "segment_00F16000")
+DEFINE_DMA_ENTRY(segment_00F18000, "segment_00F18000")
+DEFINE_DMA_ENTRY(segment_00F1A000, "segment_00F1A000")
+DEFINE_DMA_ENTRY(segment_00F1D000, "segment_00F1D000")
+DEFINE_DMA_ENTRY(segment_00F1F000, "segment_00F1F000")
+DEFINE_DMA_ENTRY(segment_00F21000, "segment_00F21000")
+DEFINE_DMA_ENTRY(segment_00F23000, "segment_00F23000")
+DEFINE_DMA_ENTRY(segment_00F25000, "segment_00F25000")
+DEFINE_DMA_ENTRY(segment_00F27000, "segment_00F27000")
+DEFINE_DMA_ENTRY(segment_00F29000, "segment_00F29000")
+DEFINE_DMA_ENTRY(segment_00F2C000, "segment_00F2C000")
+DEFINE_DMA_ENTRY(segment_00F2E000, "segment_00F2E000")
+DEFINE_DMA_ENTRY(segment_00F31000, "segment_00F31000")
+DEFINE_DMA_ENTRY(segment_00F33000, "segment_00F33000")
+DEFINE_DMA_ENTRY(segment_00F35000, "segment_00F35000")
+DEFINE_DMA_ENTRY(segment_00F37000, "segment_00F37000")
+DEFINE_DMA_ENTRY(segment_00F39000, "segment_00F39000")
+DEFINE_DMA_ENTRY(segment_00F3B000, "segment_00F3B000")
+DEFINE_DMA_ENTRY(segment_00F3D000, "segment_00F3D000")
+DEFINE_DMA_ENTRY(segment_00F3F000, "segment_00F3F000")
+DEFINE_DMA_ENTRY(segment_00F41000, "segment_00F41000")
+DEFINE_DMA_ENTRY(segment_00F43000, "segment_00F43000")
+DEFINE_DMA_ENTRY(segment_00F45000, "segment_00F45000")
+DEFINE_DMA_ENTRY(segment_00F48000, "segment_00F48000")
+DEFINE_DMA_ENTRY(segment_00F4A000, "segment_00F4A000")
+DEFINE_DMA_ENTRY(segment_00F4C000, "segment_00F4C000")
+DEFINE_DMA_ENTRY(segment_00F4E000, "segment_00F4E000")
+DEFINE_DMA_ENTRY(segment_00F50000, "segment_00F50000")
+DEFINE_DMA_ENTRY(segment_00F52000, "segment_00F52000")
+DEFINE_DMA_ENTRY(segment_00F54000, "segment_00F54000")
+DEFINE_DMA_ENTRY(segment_00F56000, "segment_00F56000")
+DEFINE_DMA_ENTRY(segment_00F58000, "segment_00F58000")
+DEFINE_DMA_ENTRY(segment_00F5A000, "segment_00F5A000")
+DEFINE_DMA_ENTRY(segment_00F5C000, "segment_00F5C000")
+DEFINE_DMA_ENTRY(segment_00F5E000, "segment_00F5E000")
+DEFINE_DMA_ENTRY(segment_00F60000, "segment_00F60000")
+DEFINE_DMA_ENTRY(segment_00F63000, "segment_00F63000")
+DEFINE_DMA_ENTRY(segment_00F65000, "segment_00F65000")
+DEFINE_DMA_ENTRY(segment_00F67000, "segment_00F67000")
+DEFINE_DMA_ENTRY(segment_00F69000, "segment_00F69000")
+DEFINE_DMA_ENTRY(segment_00F6B000, "segment_00F6B000")
+DEFINE_DMA_ENTRY(segment_00F6D000, "segment_00F6D000")
+DEFINE_DMA_ENTRY(segment_00F6F000, "segment_00F6F000")
+DEFINE_DMA_ENTRY(segment_00F71000, "segment_00F71000")
+DEFINE_DMA_ENTRY(segment_00F73000, "segment_00F73000")
+DEFINE_DMA_ENTRY(segment_00F75000, "segment_00F75000")
+DEFINE_DMA_ENTRY(segment_00F77000, "segment_00F77000")
+DEFINE_DMA_ENTRY(segment_00F79000, "segment_00F79000")
+DEFINE_DMA_ENTRY(segment_00F7B000, "segment_00F7B000")
+DEFINE_DMA_ENTRY(segment_00F7D000, "segment_00F7D000")
+DEFINE_DMA_ENTRY(segment_00F7F000, "segment_00F7F000")
+DEFINE_DMA_ENTRY(segment_00F81000, "segment_00F81000")
+DEFINE_DMA_ENTRY(segment_00F83000, "segment_00F83000")
+DEFINE_DMA_ENTRY(segment_00F85000, "segment_00F85000")
+DEFINE_DMA_ENTRY(segment_00F87000, "segment_00F87000")
+DEFINE_DMA_ENTRY(segment_00F89000, "segment_00F89000")
+DEFINE_DMA_ENTRY(segment_00F8C000, "segment_00F8C000")
+DEFINE_DMA_ENTRY(segment_00F8E000, "segment_00F8E000")
+DEFINE_DMA_ENTRY(segment_00F91000, "segment_00F91000")
+DEFINE_DMA_ENTRY(segment_00F93000, "segment_00F93000")
+DEFINE_DMA_ENTRY(segment_00F95000, "segment_00F95000")
+DEFINE_DMA_ENTRY(segment_00F97000, "segment_00F97000")
+DEFINE_DMA_ENTRY(segment_00F99000, "segment_00F99000")
+DEFINE_DMA_ENTRY(segment_00F9B000, "segment_00F9B000")
+DEFINE_DMA_ENTRY(segment_00F9D000, "segment_00F9D000")
+DEFINE_DMA_ENTRY(segment_00FA0000, "segment_00FA0000")
+DEFINE_DMA_ENTRY(segment_00FA2000, "segment_00FA2000")
+DEFINE_DMA_ENTRY(segment_00FA4000, "segment_00FA4000")
+DEFINE_DMA_ENTRY(segment_00FA6000, "segment_00FA6000")
+DEFINE_DMA_ENTRY(segment_00FA8000, "segment_00FA8000")
+DEFINE_DMA_ENTRY(segment_00FAA000, "segment_00FAA000")
+DEFINE_DMA_ENTRY(segment_00FAC000, "segment_00FAC000")
+DEFINE_DMA_ENTRY(segment_00FAF000, "segment_00FAF000")
+DEFINE_DMA_ENTRY(segment_00FB1000, "segment_00FB1000")
+DEFINE_DMA_ENTRY(segment_00FB3000, "segment_00FB3000")
+DEFINE_DMA_ENTRY(segment_00FB4000, "segment_00FB4000")
+DEFINE_DMA_ENTRY(segment_00FB7000, "segment_00FB7000")
+DEFINE_DMA_ENTRY(segment_00FB9000, "segment_00FB9000")
+DEFINE_DMA_ENTRY(segment_00FBB000, "segment_00FBB000")
+DEFINE_DMA_ENTRY(segment_00FBD000, "segment_00FBD000")
+DEFINE_DMA_ENTRY(segment_00FBF000, "segment_00FBF000")
+DEFINE_DMA_ENTRY(segment_00FC1000, "segment_00FC1000")
+DEFINE_DMA_ENTRY(segment_00FC3000, "segment_00FC3000")
+DEFINE_DMA_ENTRY(segment_00FC5000, "segment_00FC5000")
+DEFINE_DMA_ENTRY(segment_00FC8000, "segment_00FC8000")
+DEFINE_DMA_ENTRY(segment_00FCA000, "segment_00FCA000")
+DEFINE_DMA_ENTRY(segment_00FCC000, "segment_00FCC000")
+DEFINE_DMA_ENTRY(segment_00FCE000, "segment_00FCE000")
+DEFINE_DMA_ENTRY(segment_00FD0000, "segment_00FD0000")
+DEFINE_DMA_ENTRY(segment_00FD2000, "segment_00FD2000")
+DEFINE_DMA_ENTRY(segment_00FD4000, "segment_00FD4000")
+DEFINE_DMA_ENTRY(segment_00FD6000, "segment_00FD6000")
+DEFINE_DMA_ENTRY(segment_00FD9000, "segment_00FD9000")
+DEFINE_DMA_ENTRY(segment_00FDB000, "segment_00FDB000")
+DEFINE_DMA_ENTRY(segment_00FDE000, "segment_00FDE000")
+DEFINE_DMA_ENTRY(segment_00FE0000, "segment_00FE0000")
+DEFINE_DMA_ENTRY(segment_00FE3000, "segment_00FE3000")
+DEFINE_DMA_ENTRY(segment_00FE5000, "segment_00FE5000")
+DEFINE_DMA_ENTRY(segment_00FE7000, "segment_00FE7000")
+DEFINE_DMA_ENTRY(segment_00FE9000, "segment_00FE9000")
+DEFINE_DMA_ENTRY(segment_00FEB000, "segment_00FEB000")
+DEFINE_DMA_ENTRY(segment_00FED000, "segment_00FED000")
+DEFINE_DMA_ENTRY(segment_00FEF000, "segment_00FEF000")
+DEFINE_DMA_ENTRY(segment_00FF2000, "segment_00FF2000")
+DEFINE_DMA_ENTRY(segment_00FF4000, "segment_00FF4000")
+DEFINE_DMA_ENTRY(segment_00FF6000, "segment_00FF6000")
+DEFINE_DMA_ENTRY(segment_00FF8000, "segment_00FF8000")
+DEFINE_DMA_ENTRY(segment_00FFA000, "segment_00FFA000")
+DEFINE_DMA_ENTRY(segment_00FFC000, "segment_00FFC000")
+DEFINE_DMA_ENTRY(segment_00FFE000, "segment_00FFE000")
+DEFINE_DMA_ENTRY(segment_01000000, "segment_01000000")
+DEFINE_DMA_ENTRY(segment_01003000, "segment_01003000")
+DEFINE_DMA_ENTRY(segment_01005000, "segment_01005000")
+DEFINE_DMA_ENTRY(segment_01007000, "segment_01007000")
+DEFINE_DMA_ENTRY(segment_01009000, "segment_01009000")
+DEFINE_DMA_ENTRY(segment_0100B000, "segment_0100B000")
+DEFINE_DMA_ENTRY(segment_0100D000, "segment_0100D000")
+DEFINE_DMA_ENTRY(segment_0100F000, "segment_0100F000")
+DEFINE_DMA_ENTRY(segment_01011000, "segment_01011000")
+DEFINE_DMA_ENTRY(segment_01014000, "segment_01014000")
+DEFINE_DMA_ENTRY(segment_01016000, "segment_01016000")
+DEFINE_DMA_ENTRY(segment_01019000, "segment_01019000")
+DEFINE_DMA_ENTRY(segment_0101B000, "segment_0101B000")
+DEFINE_DMA_ENTRY(segment_0101D000, "segment_0101D000")
+DEFINE_DMA_ENTRY(segment_0101F000, "segment_0101F000")
+DEFINE_DMA_ENTRY(segment_01021000, "segment_01021000")
+DEFINE_DMA_ENTRY(segment_01023000, "segment_01023000")
+DEFINE_DMA_ENTRY(segment_01025000, "segment_01025000")
+DEFINE_DMA_ENTRY(segment_01027000, "segment_01027000")
+DEFINE_DMA_ENTRY(segment_01029000, "segment_01029000")
+DEFINE_DMA_ENTRY(segment_0102B000, "segment_0102B000")
+DEFINE_DMA_ENTRY(segment_0102E000, "segment_0102E000")
+DEFINE_DMA_ENTRY(segment_01030000, "segment_01030000")
+DEFINE_DMA_ENTRY(segment_01033000, "segment_01033000")
+DEFINE_DMA_ENTRY(segment_01035000, "segment_01035000")
+DEFINE_DMA_ENTRY(segment_01037000, "segment_01037000")
+DEFINE_DMA_ENTRY(segment_01039000, "segment_01039000")
+DEFINE_DMA_ENTRY(segment_0103B000, "segment_0103B000")
+DEFINE_DMA_ENTRY(segment_0103E000, "segment_0103E000")
+DEFINE_DMA_ENTRY(segment_01040000, "segment_01040000")
+DEFINE_DMA_ENTRY(segment_01042000, "segment_01042000")
+DEFINE_DMA_ENTRY(segment_01044000, "segment_01044000")
+DEFINE_DMA_ENTRY(segment_01046000, "segment_01046000")
+DEFINE_DMA_ENTRY(segment_01048000, "segment_01048000")
+DEFINE_DMA_ENTRY(segment_0104A000, "segment_0104A000")
+DEFINE_DMA_ENTRY(segment_0104C000, "segment_0104C000")
+DEFINE_DMA_ENTRY(segment_0104E000, "segment_0104E000")
+DEFINE_DMA_ENTRY(segment_01050000, "segment_01050000")
+DEFINE_DMA_ENTRY(segment_01052000, "segment_01052000")
+DEFINE_DMA_ENTRY(segment_01054000, "segment_01054000")
+DEFINE_DMA_ENTRY(segment_01056000, "segment_01056000")
+DEFINE_DMA_ENTRY(segment_01058000, "segment_01058000")
+DEFINE_DMA_ENTRY(segment_0105A000, "segment_0105A000")
+DEFINE_DMA_ENTRY(segment_0105C000, "segment_0105C000")
+DEFINE_DMA_ENTRY(segment_0105E000, "segment_0105E000")
+DEFINE_DMA_ENTRY(segment_01060000, "segment_01060000")
+DEFINE_DMA_ENTRY(segment_01062000, "segment_01062000")
+DEFINE_DMA_ENTRY(segment_01065000, "segment_01065000")
+DEFINE_DMA_ENTRY(segment_01067000, "segment_01067000")
+DEFINE_DMA_ENTRY(segment_0106A000, "segment_0106A000")
+DEFINE_DMA_ENTRY(segment_0106C000, "segment_0106C000")
+DEFINE_DMA_ENTRY(segment_0106F000, "segment_0106F000")
+DEFINE_DMA_ENTRY(segment_01071000, "segment_01071000")
+DEFINE_DMA_ENTRY(segment_01074000, "segment_01074000")
+DEFINE_DMA_ENTRY(segment_01076000, "segment_01076000")
+DEFINE_DMA_ENTRY(segment_01079000, "segment_01079000")
+DEFINE_DMA_ENTRY(segment_0107B000, "segment_0107B000")
+DEFINE_DMA_ENTRY(segment_0107D000, "segment_0107D000")
+DEFINE_DMA_ENTRY(segment_0107F000, "segment_0107F000")
+DEFINE_DMA_ENTRY(segment_01081000, "segment_01081000")
+DEFINE_DMA_ENTRY(segment_01083000, "segment_01083000")
+DEFINE_DMA_ENTRY(segment_01085000, "segment_01085000")
+DEFINE_DMA_ENTRY(segment_01087000, "segment_01087000")
+DEFINE_DMA_ENTRY(segment_01089000, "segment_01089000")
+DEFINE_DMA_ENTRY(segment_0108B000, "segment_0108B000")
+DEFINE_DMA_ENTRY(segment_0108D000, "segment_0108D000")
+DEFINE_DMA_ENTRY(segment_0108F000, "segment_0108F000")
+DEFINE_DMA_ENTRY(segment_01091000, "segment_01091000")
+DEFINE_DMA_ENTRY(segment_01094000, "segment_01094000")
+DEFINE_DMA_ENTRY(segment_01096000, "segment_01096000")
+DEFINE_DMA_ENTRY(segment_01098000, "segment_01098000")
+DEFINE_DMA_ENTRY(segment_0109A000, "segment_0109A000")
+DEFINE_DMA_ENTRY(segment_0109C000, "segment_0109C000")
+DEFINE_DMA_ENTRY(segment_0109E000, "segment_0109E000")
+DEFINE_DMA_ENTRY(segment_010A0000, "segment_010A0000")
+DEFINE_DMA_ENTRY(segment_010A2000, "segment_010A2000")
+DEFINE_DMA_ENTRY(segment_010A4000, "segment_010A4000")
+DEFINE_DMA_ENTRY(segment_010A6000, "segment_010A6000")
+DEFINE_DMA_ENTRY(segment_010A8000, "segment_010A8000")
+DEFINE_DMA_ENTRY(segment_010AA000, "segment_010AA000")
+DEFINE_DMA_ENTRY(segment_010AC000, "segment_010AC000")
+DEFINE_DMA_ENTRY(segment_010AE000, "segment_010AE000")
+DEFINE_DMA_ENTRY(segment_010B1000, "segment_010B1000")
+DEFINE_DMA_ENTRY(segment_010B3000, "segment_010B3000")
+DEFINE_DMA_ENTRY(segment_010B6000, "segment_010B6000")
+DEFINE_DMA_ENTRY(segment_010B8000, "segment_010B8000")
+DEFINE_DMA_ENTRY(segment_010BB000, "segment_010BB000")
+DEFINE_DMA_ENTRY(segment_010BD000, "segment_010BD000")
+DEFINE_DMA_ENTRY(segment_010BF000, "segment_010BF000")
+DEFINE_DMA_ENTRY(segment_010C1000, "segment_010C1000")
+DEFINE_DMA_ENTRY(segment_010C3000, "segment_010C3000")
+DEFINE_DMA_ENTRY(segment_010C5000, "segment_010C5000")
+DEFINE_DMA_ENTRY(segment_010C7000, "segment_010C7000")
+DEFINE_DMA_ENTRY(segment_010C9000, "segment_010C9000")
+DEFINE_DMA_ENTRY(segment_010CB000, "segment_010CB000")
+DEFINE_DMA_ENTRY(segment_010CD000, "segment_010CD000")
+DEFINE_DMA_ENTRY(segment_010CF000, "segment_010CF000")
+DEFINE_DMA_ENTRY(segment_010D2000, "segment_010D2000")
+DEFINE_DMA_ENTRY(segment_010D4000, "segment_010D4000")
+DEFINE_DMA_ENTRY(segment_010D7000, "segment_010D7000")
+DEFINE_DMA_ENTRY(segment_010D9000, "segment_010D9000")
+DEFINE_DMA_ENTRY(segment_010DC000, "segment_010DC000")
+DEFINE_DMA_ENTRY(segment_010DE000, "segment_010DE000")
+DEFINE_DMA_ENTRY(segment_010E0000, "segment_010E0000")
+DEFINE_DMA_ENTRY(segment_010E2000, "segment_010E2000")
+DEFINE_DMA_ENTRY(segment_010E5000, "segment_010E5000")
+DEFINE_DMA_ENTRY(segment_010E7000, "segment_010E7000")
+DEFINE_DMA_ENTRY(segment_010EA000, "segment_010EA000")
+DEFINE_DMA_ENTRY(segment_010EC000, "segment_010EC000")
+DEFINE_DMA_ENTRY(segment_010EE000, "segment_010EE000")
+DEFINE_DMA_ENTRY(segment_010F0000, "segment_010F0000")
+DEFINE_DMA_ENTRY(segment_010F2000, "segment_010F2000")
+DEFINE_DMA_ENTRY(segment_010F4000, "segment_010F4000")
+DEFINE_DMA_ENTRY(segment_01100000, "segment_01100000")
+DEFINE_DMA_ENTRY(segment_01101000, "segment_01101000")
+DEFINE_DMA_ENTRY(segment_01102000, "segment_01102000")
+DEFINE_DMA_ENTRY(segment_01103000, "segment_01103000")
+DEFINE_DMA_ENTRY(segment_01106000, "segment_01106000")
+DEFINE_DMA_ENTRY(segment_01107000, "segment_01107000")
+DEFINE_DMA_ENTRY(segment_01108000, "segment_01108000")
+DEFINE_DMA_ENTRY(segment_01109000, "segment_01109000")
+DEFINE_DMA_ENTRY(segment_0110A000, "segment_0110A000")
+DEFINE_DMA_ENTRY(segment_0110B000, "segment_0110B000")
+DEFINE_DMA_ENTRY(segment_0110C000, "segment_0110C000")
+DEFINE_DMA_ENTRY(segment_0110D000, "segment_0110D000")
+DEFINE_DMA_ENTRY(segment_0110E000, "segment_0110E000")
+DEFINE_DMA_ENTRY(segment_0110F000, "segment_0110F000")
+DEFINE_DMA_ENTRY(segment_01110000, "segment_01110000")
+DEFINE_DMA_ENTRY(segment_01111000, "segment_01111000")
+DEFINE_DMA_ENTRY(segment_01112000, "segment_01112000")
+DEFINE_DMA_ENTRY(segment_01113000, "segment_01113000")
+DEFINE_DMA_ENTRY(segment_01114000, "segment_01114000")
+DEFINE_DMA_ENTRY(segment_01115000, "segment_01115000")
+DEFINE_DMA_ENTRY(segment_01116000, "segment_01116000")
+DEFINE_DMA_ENTRY(segment_01117000, "segment_01117000")
+DEFINE_DMA_ENTRY(segment_01118000, "segment_01118000")
+DEFINE_DMA_ENTRY(segment_01119000, "segment_01119000")
+DEFINE_DMA_ENTRY(segment_0111A000, "segment_0111A000")
+DEFINE_DMA_ENTRY(segment_0111B000, "segment_0111B000")
+DEFINE_DMA_ENTRY(segment_0111C000, "segment_0111C000")
+DEFINE_DMA_ENTRY(segment_0111D000, "segment_0111D000")
+DEFINE_DMA_ENTRY(segment_0111E000, "segment_0111E000")
+DEFINE_DMA_ENTRY(segment_0111F000, "segment_0111F000")
+DEFINE_DMA_ENTRY(segment_01120000, "segment_01120000")
+DEFINE_DMA_ENTRY(segment_01121000, "segment_01121000")
+DEFINE_DMA_ENTRY(segment_01122000, "segment_01122000")
+DEFINE_DMA_ENTRY(segment_01123000, "segment_01123000")
+DEFINE_DMA_ENTRY(segment_01124000, "segment_01124000")
+DEFINE_DMA_ENTRY(segment_01125000, "segment_01125000")
+DEFINE_DMA_ENTRY(segment_01126000, "segment_01126000")
+DEFINE_DMA_ENTRY(segment_01127000, "segment_01127000")
+DEFINE_DMA_ENTRY(segment_01128000, "segment_01128000")
+DEFINE_DMA_ENTRY(segment_01129000, "segment_01129000")
+DEFINE_DMA_ENTRY(segment_0112A000, "segment_0112A000")
+DEFINE_DMA_ENTRY(segment_0112B000, "segment_0112B000")
+DEFINE_DMA_ENTRY(segment_0112C000, "segment_0112C000")
+DEFINE_DMA_ENTRY(segment_0112D000, "segment_0112D000")
+DEFINE_DMA_ENTRY(segment_0112F000, "segment_0112F000")
+DEFINE_DMA_ENTRY(segment_01130000, "segment_01130000")
+DEFINE_DMA_ENTRY(segment_01131000, "segment_01131000")
+DEFINE_DMA_ENTRY(segment_01134000, "segment_01134000")
+DEFINE_DMA_ENTRY(segment_01135000, "segment_01135000")
+DEFINE_DMA_ENTRY(segment_01136000, "segment_01136000")
+DEFINE_DMA_ENTRY(segment_0113C000, "segment_0113C000")
+DEFINE_DMA_ENTRY(segment_0113D000, "segment_0113D000")
+DEFINE_DMA_ENTRY(segment_01147000, "segment_01147000")
+DEFINE_DMA_ENTRY(segment_01148000, "segment_01148000")
+DEFINE_DMA_ENTRY(segment_0114A000, "segment_0114A000")
+DEFINE_DMA_ENTRY(segment_01188000, "segment_01188000")
+DEFINE_DMA_ENTRY(segment_011AB000, "segment_011AB000")
+DEFINE_DMA_ENTRY(segment_011E2000, "segment_011E2000")
+DEFINE_DMA_ENTRY(segment_011E3000, "segment_011E3000")
+DEFINE_DMA_ENTRY(segment_011E4000, "segment_011E4000")
+DEFINE_DMA_ENTRY(segment_011E5000, "segment_011E5000")
+DEFINE_DMA_ENTRY(segment_011E6000, "segment_011E6000")
+DEFINE_DMA_ENTRY(segment_011E7000, "segment_011E7000")
+DEFINE_DMA_ENTRY(segment_011E8000, "segment_011E8000")
+DEFINE_DMA_ENTRY(segment_011E9000, "segment_011E9000")
+DEFINE_DMA_ENTRY(segment_011EA000, "segment_011EA000")
+DEFINE_DMA_ENTRY(segment_011EB000, "segment_011EB000")
+DEFINE_DMA_ENTRY(segment_011EC000, "segment_011EC000")
+DEFINE_DMA_ENTRY(segment_011ED000, "segment_011ED000")
+DEFINE_DMA_ENTRY(segment_011EE000, "segment_011EE000")
+DEFINE_DMA_ENTRY(segment_011EF000, "segment_011EF000")
+DEFINE_DMA_ENTRY(segment_011F0000, "segment_011F0000")
+DEFINE_DMA_ENTRY(segment_011F1000, "segment_011F1000")
+DEFINE_DMA_ENTRY(segment_011F2000, "segment_011F2000")
+DEFINE_DMA_ENTRY(segment_011F3000, "segment_011F3000")
+DEFINE_DMA_ENTRY(segment_011F4000, "segment_011F4000")
+DEFINE_DMA_ENTRY(segment_011F5000, "segment_011F5000")
+DEFINE_DMA_ENTRY(segment_011F6000, "segment_011F6000")
+DEFINE_DMA_ENTRY(segment_011F8000, "segment_011F8000")
+DEFINE_DMA_ENTRY(segment_011FA000, "segment_011FA000")
+DEFINE_DMA_ENTRY(segment_011FC000, "segment_011FC000")
+DEFINE_DMA_ENTRY(segment_011FE000, "segment_011FE000")
+DEFINE_DMA_ENTRY(segment_01200000, "segment_01200000")
+DEFINE_DMA_ENTRY(segment_01202000, "segment_01202000")
+DEFINE_DMA_ENTRY(segment_01203000, "segment_01203000")
+DEFINE_DMA_ENTRY(segment_01205000, "segment_01205000")
+DEFINE_DMA_ENTRY(segment_01207000, "segment_01207000")
+DEFINE_DMA_ENTRY(segment_01209000, "segment_01209000")
+DEFINE_DMA_ENTRY(segment_0120B000, "segment_0120B000")
+DEFINE_DMA_ENTRY(segment_0120D000, "segment_0120D000")
+DEFINE_DMA_ENTRY(segment_0120F000, "segment_0120F000")
+DEFINE_DMA_ENTRY(segment_01211000, "segment_01211000")
+DEFINE_DMA_ENTRY(segment_01213000, "segment_01213000")
+DEFINE_DMA_ENTRY(segment_01215000, "segment_01215000")
+DEFINE_DMA_ENTRY(segment_01217000, "segment_01217000")
+DEFINE_DMA_ENTRY(segment_01218000, "segment_01218000")
+DEFINE_DMA_ENTRY(segment_0121A000, "segment_0121A000")
+DEFINE_DMA_ENTRY(segment_0121C000, "segment_0121C000")
+DEFINE_DMA_ENTRY(segment_0121E000, "segment_0121E000")
+DEFINE_DMA_ENTRY(segment_01220000, "segment_01220000")
+DEFINE_DMA_ENTRY(segment_01222000, "segment_01222000")
+DEFINE_DMA_ENTRY(segment_01224000, "segment_01224000")
+DEFINE_DMA_ENTRY(segment_01226000, "segment_01226000")
+DEFINE_DMA_ENTRY(segment_01228000, "segment_01228000")
+DEFINE_DMA_ENTRY(segment_0122A000, "segment_0122A000")
+DEFINE_DMA_ENTRY(segment_0122C000, "segment_0122C000")
+DEFINE_DMA_ENTRY(segment_0122E000, "segment_0122E000")
+DEFINE_DMA_ENTRY(segment_01230000, "segment_01230000")
+DEFINE_DMA_ENTRY(segment_01232000, "segment_01232000")
+DEFINE_DMA_ENTRY(segment_01234000, "segment_01234000")
+DEFINE_DMA_ENTRY(segment_01236000, "segment_01236000")
+DEFINE_DMA_ENTRY(segment_01238000, "segment_01238000")
+DEFINE_DMA_ENTRY(segment_0123A000, "segment_0123A000")
+DEFINE_DMA_ENTRY(segment_0123C000, "segment_0123C000")
+DEFINE_DMA_ENTRY(segment_0123E000, "segment_0123E000")
+DEFINE_DMA_ENTRY(segment_01240000, "segment_01240000")
+DEFINE_DMA_ENTRY(segment_01242000, "segment_01242000")
+DEFINE_DMA_ENTRY(segment_01244000, "segment_01244000")
+DEFINE_DMA_ENTRY(segment_01245000, "segment_01245000")
+DEFINE_DMA_ENTRY(segment_01247000, "segment_01247000")
+DEFINE_DMA_ENTRY(segment_01249000, "segment_01249000")
+DEFINE_DMA_ENTRY(segment_0124B000, "segment_0124B000")
+DEFINE_DMA_ENTRY(segment_0124D000, "segment_0124D000")
+DEFINE_DMA_ENTRY(segment_0124F000, "segment_0124F000")
+DEFINE_DMA_ENTRY(segment_01251000, "segment_01251000")
+DEFINE_DMA_ENTRY(segment_01253000, "segment_01253000")
+DEFINE_DMA_ENTRY(segment_01255000, "segment_01255000")
+DEFINE_DMA_ENTRY(segment_01257000, "segment_01257000")
+DEFINE_DMA_ENTRY(segment_01259000, "segment_01259000")
+DEFINE_DMA_ENTRY(segment_0125B000, "segment_0125B000")
+DEFINE_DMA_ENTRY(segment_0125D000, "segment_0125D000")
+DEFINE_DMA_ENTRY(segment_0125F000, "segment_0125F000")
+DEFINE_DMA_ENTRY(segment_01261000, "segment_01261000")
+DEFINE_DMA_ENTRY(segment_01263000, "segment_01263000")
+DEFINE_DMA_ENTRY(segment_01265000, "segment_01265000")
+DEFINE_DMA_ENTRY(segment_01267000, "segment_01267000")
+DEFINE_DMA_ENTRY(segment_01269000, "segment_01269000")
+DEFINE_DMA_ENTRY(segment_0126B000, "segment_0126B000")
+DEFINE_DMA_ENTRY(segment_0126D000, "segment_0126D000")
+DEFINE_DMA_ENTRY(segment_0126F000, "segment_0126F000")
+DEFINE_DMA_ENTRY(segment_01271000, "segment_01271000")
+DEFINE_DMA_ENTRY(segment_01273000, "segment_01273000")
+DEFINE_DMA_ENTRY(segment_01275000, "segment_01275000")
+DEFINE_DMA_ENTRY(segment_01277000, "segment_01277000")
+DEFINE_DMA_ENTRY(segment_01279000, "segment_01279000")
+DEFINE_DMA_ENTRY(segment_0127B000, "segment_0127B000")
+DEFINE_DMA_ENTRY(segment_0127D000, "segment_0127D000")
+DEFINE_DMA_ENTRY(segment_0127F000, "segment_0127F000")
+DEFINE_DMA_ENTRY(segment_01281000, "segment_01281000")
+DEFINE_DMA_ENTRY(segment_01283000, "segment_01283000")
+DEFINE_DMA_ENTRY(segment_01285000, "segment_01285000")
+DEFINE_DMA_ENTRY(segment_01287000, "segment_01287000")
+DEFINE_DMA_ENTRY(segment_01289000, "segment_01289000")
+DEFINE_DMA_ENTRY(segment_0128B000, "segment_0128B000")
+DEFINE_DMA_ENTRY(segment_0128D000, "segment_0128D000")
+DEFINE_DMA_ENTRY(segment_0128F000, "segment_0128F000")
+DEFINE_DMA_ENTRY(segment_01291000, "segment_01291000")
+DEFINE_DMA_ENTRY(segment_01293000, "segment_01293000")
+DEFINE_DMA_ENTRY(segment_01295000, "segment_01295000")
+DEFINE_DMA_ENTRY(segment_01297000, "segment_01297000")
+DEFINE_DMA_ENTRY(segment_01298000, "segment_01298000")
+DEFINE_DMA_ENTRY(segment_0129A000, "segment_0129A000")
+DEFINE_DMA_ENTRY(segment_0129C000, "segment_0129C000")
+DEFINE_DMA_ENTRY(segment_0129E000, "segment_0129E000")
+DEFINE_DMA_ENTRY(segment_012A0000, "segment_012A0000")
+DEFINE_DMA_ENTRY(segment_012A2000, "segment_012A2000")
+DEFINE_DMA_ENTRY(segment_012A4000, "segment_012A4000")
+DEFINE_DMA_ENTRY(segment_012A6000, "segment_012A6000")
+DEFINE_DMA_ENTRY(segment_012A8000, "segment_012A8000")
+DEFINE_DMA_ENTRY(segment_012AA000, "segment_012AA000")
+DEFINE_DMA_ENTRY(segment_012AC000, "segment_012AC000")
+DEFINE_DMA_ENTRY(segment_012B2000, "segment_012B2000")
+DEFINE_DMA_ENTRY(segment_012B9000, "segment_012B9000")
+DEFINE_DMA_ENTRY(segment_012BB000, "segment_012BB000")
+DEFINE_DMA_ENTRY(segment_012C2000, "segment_012C2000")
+DEFINE_DMA_ENTRY(segment_012C6000, "segment_012C6000")
+DEFINE_DMA_ENTRY(segment_012C8000, "segment_012C8000")
+DEFINE_DMA_ENTRY(segment_012CA000, "segment_012CA000")
+DEFINE_DMA_ENTRY(segment_012CC000, "segment_012CC000")
+DEFINE_DMA_ENTRY(segment_012CE000, "segment_012CE000")
+DEFINE_DMA_ENTRY(segment_012D0000, "segment_012D0000")
+DEFINE_DMA_ENTRY(segment_012D2000, "segment_012D2000")
+DEFINE_DMA_ENTRY(segment_012D4000, "segment_012D4000")
+DEFINE_DMA_ENTRY(segment_012D6000, "segment_012D6000")
+DEFINE_DMA_ENTRY(segment_012D8000, "segment_012D8000")
+DEFINE_DMA_ENTRY(segment_012DA000, "segment_012DA000")
+DEFINE_DMA_ENTRY(segment_012DC000, "segment_012DC000")
+DEFINE_DMA_ENTRY(segment_012DE000, "segment_012DE000")
+DEFINE_DMA_ENTRY(segment_012E0000, "segment_012E0000")
+DEFINE_DMA_ENTRY(segment_012E2000, "segment_012E2000")
+DEFINE_DMA_ENTRY(segment_012E4000, "segment_012E4000")
+DEFINE_DMA_ENTRY(segment_012E6000, "segment_012E6000")
+DEFINE_DMA_ENTRY(segment_012E8000, "segment_012E8000")
+DEFINE_DMA_ENTRY(segment_012EA000, "segment_012EA000")
+DEFINE_DMA_ENTRY(segment_012EC000, "segment_012EC000")
+DEFINE_DMA_ENTRY(segment_012EE000, "segment_012EE000")
+DEFINE_DMA_ENTRY(segment_012F0000, "segment_012F0000")
+DEFINE_DMA_ENTRY(segment_012F2000, "segment_012F2000")
+DEFINE_DMA_ENTRY(segment_012F4000, "segment_012F4000")
+DEFINE_DMA_ENTRY(segment_012F6000, "segment_012F6000")
+DEFINE_DMA_ENTRY(segment_012F8000, "segment_012F8000")
+DEFINE_DMA_ENTRY(segment_012FA000, "segment_012FA000")
+DEFINE_DMA_ENTRY(segment_012FB000, "segment_012FB000")
+DEFINE_DMA_ENTRY(segment_012FD000, "segment_012FD000")
+DEFINE_DMA_ENTRY(segment_012FF000, "segment_012FF000")
+DEFINE_DMA_ENTRY(segment_01301000, "segment_01301000")
+DEFINE_DMA_ENTRY(segment_01303000, "segment_01303000")
+DEFINE_DMA_ENTRY(segment_01305000, "segment_01305000")
+DEFINE_DMA_ENTRY(segment_01307000, "segment_01307000")
+DEFINE_DMA_ENTRY(segment_01309000, "segment_01309000")
+DEFINE_DMA_ENTRY(segment_0130B000, "segment_0130B000")
+DEFINE_DMA_ENTRY(segment_0130C000, "segment_0130C000")
+DEFINE_DMA_ENTRY(segment_0130E000, "segment_0130E000")
+DEFINE_DMA_ENTRY(segment_01310000, "segment_01310000")
+DEFINE_DMA_ENTRY(segment_01312000, "segment_01312000")
+DEFINE_DMA_ENTRY(segment_01314000, "segment_01314000")
+DEFINE_DMA_ENTRY(segment_01316000, "segment_01316000")
+DEFINE_DMA_ENTRY(segment_01318000, "segment_01318000")
+DEFINE_DMA_ENTRY(segment_0131A000, "segment_0131A000")
+DEFINE_DMA_ENTRY(segment_0131C000, "segment_0131C000")
+DEFINE_DMA_ENTRY(segment_0131E000, "segment_0131E000")
+DEFINE_DMA_ENTRY(segment_01320000, "segment_01320000")
+DEFINE_DMA_ENTRY(segment_01322000, "segment_01322000")
+DEFINE_DMA_ENTRY(segment_01324000, "segment_01324000")
+DEFINE_DMA_ENTRY(segment_01326000, "segment_01326000")
+DEFINE_DMA_ENTRY(segment_01328000, "segment_01328000")
+DEFINE_DMA_ENTRY(segment_0132A000, "segment_0132A000")
+DEFINE_DMA_ENTRY(segment_0132C000, "segment_0132C000")
+DEFINE_DMA_ENTRY(segment_0132E000, "segment_0132E000")
+DEFINE_DMA_ENTRY(segment_01330000, "segment_01330000")
+DEFINE_DMA_ENTRY(segment_01331000, "segment_01331000")
+DEFINE_DMA_ENTRY(segment_01333000, "segment_01333000")
+DEFINE_DMA_ENTRY(segment_01334000, "segment_01334000")
+DEFINE_DMA_ENTRY(segment_01335000, "segment_01335000")
+DEFINE_DMA_ENTRY(segment_01336000, "segment_01336000")
+DEFINE_DMA_ENTRY(segment_01337000, "segment_01337000")
+DEFINE_DMA_ENTRY(segment_01338000, "segment_01338000")
+DEFINE_DMA_ENTRY(segment_01339000, "segment_01339000")
+DEFINE_DMA_ENTRY(segment_0133A000, "segment_0133A000")
+DEFINE_DMA_ENTRY(segment_0133B000, "segment_0133B000")
+DEFINE_DMA_ENTRY(segment_0133D000, "segment_0133D000")
+DEFINE_DMA_ENTRY(segment_0133E000, "segment_0133E000")
+DEFINE_DMA_ENTRY(segment_01340000, "segment_01340000")
+DEFINE_DMA_ENTRY(segment_01342000, "segment_01342000")
+DEFINE_DMA_ENTRY(segment_01344000, "segment_01344000")
+DEFINE_DMA_ENTRY(segment_01345000, "segment_01345000")
+DEFINE_DMA_ENTRY(segment_01347000, "segment_01347000")
+DEFINE_DMA_ENTRY(segment_01349000, "segment_01349000")
+DEFINE_DMA_ENTRY(segment_0134B000, "segment_0134B000")
+DEFINE_DMA_ENTRY(segment_0134C000, "segment_0134C000")
+DEFINE_DMA_ENTRY(segment_0134D000, "segment_0134D000")
+DEFINE_DMA_ENTRY(segment_0134F000, "segment_0134F000")
+DEFINE_DMA_ENTRY(segment_01350000, "segment_01350000")
+DEFINE_DMA_ENTRY(segment_01352000, "segment_01352000")
+DEFINE_DMA_ENTRY(segment_01353000, "segment_01353000")
+DEFINE_DMA_ENTRY(segment_01355000, "segment_01355000")
+DEFINE_DMA_ENTRY(segment_01357000, "segment_01357000")
+DEFINE_DMA_ENTRY(segment_01359000, "segment_01359000")
+DEFINE_DMA_ENTRY(segment_0135B000, "segment_0135B000")
+DEFINE_DMA_ENTRY(segment_0135D000, "segment_0135D000")
+DEFINE_DMA_ENTRY(segment_0135F000, "segment_0135F000")
+DEFINE_DMA_ENTRY(segment_01361000, "segment_01361000")
+DEFINE_DMA_ENTRY(segment_01363000, "segment_01363000")
+DEFINE_DMA_ENTRY(segment_01365000, "segment_01365000")
+DEFINE_DMA_ENTRY(segment_01367000, "segment_01367000")
+DEFINE_DMA_ENTRY(segment_01369000, "segment_01369000")
+DEFINE_DMA_ENTRY(segment_0136B000, "segment_0136B000")
+DEFINE_DMA_ENTRY(segment_0136D000, "segment_0136D000")
+DEFINE_DMA_ENTRY(segment_0136F000, "segment_0136F000")
+DEFINE_DMA_ENTRY(segment_01371000, "segment_01371000")
+DEFINE_DMA_ENTRY(segment_01373000, "segment_01373000")
+DEFINE_DMA_ENTRY(segment_01375000, "segment_01375000")
+DEFINE_DMA_ENTRY(segment_01377000, "segment_01377000")
+DEFINE_DMA_ENTRY(segment_01379000, "segment_01379000")
+DEFINE_DMA_ENTRY(segment_0137B000, "segment_0137B000")
+DEFINE_DMA_ENTRY(segment_0137C000, "segment_0137C000")
+DEFINE_DMA_ENTRY(segment_0137D000, "segment_0137D000")
+DEFINE_DMA_ENTRY(segment_0137F000, "segment_0137F000")
+DEFINE_DMA_ENTRY(segment_01381000, "segment_01381000")
+DEFINE_DMA_ENTRY(segment_01383000, "segment_01383000")
+DEFINE_DMA_ENTRY(segment_0138A000, "segment_0138A000")
+DEFINE_DMA_ENTRY(segment_0138F000, "segment_0138F000")
+DEFINE_DMA_ENTRY(segment_01390000, "segment_01390000")
+DEFINE_DMA_ENTRY(segment_01393000, "segment_01393000")
+DEFINE_DMA_ENTRY(segment_01397000, "segment_01397000")
+DEFINE_DMA_ENTRY(segment_01398000, "segment_01398000")
+DEFINE_DMA_ENTRY(segment_0139A000, "segment_0139A000")
+DEFINE_DMA_ENTRY(segment_0139C000, "segment_0139C000")
+DEFINE_DMA_ENTRY(segment_0139E000, "segment_0139E000")
+DEFINE_DMA_ENTRY(segment_013A0000, "segment_013A0000")
+DEFINE_DMA_ENTRY(segment_013A2000, "segment_013A2000")
+DEFINE_DMA_ENTRY(segment_013A4000, "segment_013A4000")
+DEFINE_DMA_ENTRY(segment_013A5000, "segment_013A5000")
+DEFINE_DMA_ENTRY(segment_013A6000, "segment_013A6000")
+DEFINE_DMA_ENTRY(segment_013A7000, "segment_013A7000")
+DEFINE_DMA_ENTRY(segment_013A8000, "segment_013A8000")
+DEFINE_DMA_ENTRY(segment_013A9000, "segment_013A9000")
+DEFINE_DMA_ENTRY(segment_013AB000, "segment_013AB000")
+DEFINE_DMA_ENTRY(segment_013AC000, "segment_013AC000")
+DEFINE_DMA_ENTRY(segment_013AF000, "segment_013AF000")
+DEFINE_DMA_ENTRY(segment_013B6000, "segment_013B6000")
+DEFINE_DMA_ENTRY(segment_013BB000, "segment_013BB000")
+DEFINE_DMA_ENTRY(segment_013BF000, "segment_013BF000")
+DEFINE_DMA_ENTRY(segment_013C7000, "segment_013C7000")
+DEFINE_DMA_ENTRY(segment_013CD000, "segment_013CD000")
+DEFINE_DMA_ENTRY(segment_013D4000, "segment_013D4000")
+DEFINE_DMA_ENTRY(segment_013DC000, "segment_013DC000")
+DEFINE_DMA_ENTRY(segment_013E2000, "segment_013E2000")
+DEFINE_DMA_ENTRY(segment_013E3000, "segment_013E3000")
+DEFINE_DMA_ENTRY(segment_013E5000, "segment_013E5000")
+DEFINE_DMA_ENTRY(segment_013E7000, "segment_013E7000")
+DEFINE_DMA_ENTRY(segment_013E9000, "segment_013E9000")
+DEFINE_DMA_ENTRY(segment_013EB000, "segment_013EB000")
+DEFINE_DMA_ENTRY(segment_013EC000, "segment_013EC000")
+DEFINE_DMA_ENTRY(segment_013F1000, "segment_013F1000")
+DEFINE_DMA_ENTRY(segment_013F3000, "segment_013F3000")
+DEFINE_DMA_ENTRY(segment_01408000, "segment_01408000")
+DEFINE_DMA_ENTRY(segment_01409000, "segment_01409000")
+DEFINE_DMA_ENTRY(segment_0140A000, "segment_0140A000")
+DEFINE_DMA_ENTRY(segment_0140B000, "segment_0140B000")
+DEFINE_DMA_ENTRY(segment_0140C000, "segment_0140C000")
+DEFINE_DMA_ENTRY(segment_01410000, "segment_01410000")
+DEFINE_DMA_ENTRY(segment_01427000, "segment_01427000")
+DEFINE_DMA_ENTRY(segment_01428000, "segment_01428000")
+DEFINE_DMA_ENTRY(segment_01429000, "segment_01429000")
+DEFINE_DMA_ENTRY(segment_0142A000, "segment_0142A000")
+DEFINE_DMA_ENTRY(segment_0142B000, "segment_0142B000")
+DEFINE_DMA_ENTRY(segment_0142C000, "segment_0142C000")
+DEFINE_DMA_ENTRY(segment_0142D000, "segment_0142D000")
+DEFINE_DMA_ENTRY(segment_0142E000, "segment_0142E000")
+DEFINE_DMA_ENTRY(segment_0142F000, "segment_0142F000")
+DEFINE_DMA_ENTRY(segment_01430000, "segment_01430000")
+DEFINE_DMA_ENTRY(segment_01431000, "segment_01431000")
+DEFINE_DMA_ENTRY(segment_01432000, "segment_01432000")
+DEFINE_DMA_ENTRY(segment_01434000, "segment_01434000")
+DEFINE_DMA_ENTRY(segment_01435000, "segment_01435000")
+DEFINE_DMA_ENTRY(segment_01436000, "segment_01436000")
+DEFINE_DMA_ENTRY(segment_01437000, "segment_01437000")
+DEFINE_DMA_ENTRY(segment_01438000, "segment_01438000")
+DEFINE_DMA_ENTRY(segment_01439000, "segment_01439000")
+DEFINE_DMA_ENTRY(segment_0143A000, "segment_0143A000")
+DEFINE_DMA_ENTRY(segment_0143B000, "segment_0143B000")
+DEFINE_DMA_ENTRY(segment_0143D000, "segment_0143D000")
+DEFINE_DMA_ENTRY(segment_0143E000, "segment_0143E000")
+DEFINE_DMA_ENTRY(segment_0143F000, "segment_0143F000")
+DEFINE_DMA_ENTRY(segment_01440000, "segment_01440000")
+DEFINE_DMA_ENTRY(segment_01441000, "segment_01441000")
+DEFINE_DMA_ENTRY(segment_01442000, "segment_01442000")
+DEFINE_DMA_ENTRY(segment_01443000, "segment_01443000")
+DEFINE_DMA_ENTRY(segment_01444000, "segment_01444000")
+DEFINE_DMA_ENTRY(segment_01445000, "segment_01445000")
+DEFINE_DMA_ENTRY(segment_01446000, "segment_01446000")
+DEFINE_DMA_ENTRY(segment_01447000, "segment_01447000")
+DEFINE_DMA_ENTRY(segment_01448000, "segment_01448000")
+DEFINE_DMA_ENTRY(segment_01449000, "segment_01449000")
+DEFINE_DMA_ENTRY(segment_0144A000, "segment_0144A000")
+DEFINE_DMA_ENTRY(segment_0144B000, "segment_0144B000")
+DEFINE_DMA_ENTRY(segment_0144C000, "segment_0144C000")
+DEFINE_DMA_ENTRY(segment_0144D000, "segment_0144D000")
+DEFINE_DMA_ENTRY(segment_0144E000, "segment_0144E000")
+DEFINE_DMA_ENTRY(segment_01450000, "segment_01450000")
+DEFINE_DMA_ENTRY(segment_01451000, "segment_01451000")
+DEFINE_DMA_ENTRY(segment_01452000, "segment_01452000")
+DEFINE_DMA_ENTRY(segment_01453000, "segment_01453000")
+DEFINE_DMA_ENTRY(segment_01454000, "segment_01454000")
+DEFINE_DMA_ENTRY(segment_01455000, "segment_01455000")
+DEFINE_DMA_ENTRY(segment_01456000, "segment_01456000")
+DEFINE_DMA_ENTRY(segment_01458000, "segment_01458000")
+DEFINE_DMA_ENTRY(segment_01459000, "segment_01459000")
+DEFINE_DMA_ENTRY(segment_0145A000, "segment_0145A000")
+DEFINE_DMA_ENTRY(segment_0145C000, "segment_0145C000")
+DEFINE_DMA_ENTRY(segment_0145D000, "segment_0145D000")
+DEFINE_DMA_ENTRY(segment_0145E000, "segment_0145E000")
+DEFINE_DMA_ENTRY(segment_0145F000, "segment_0145F000")
+DEFINE_DMA_ENTRY(segment_01460000, "segment_01460000")
+DEFINE_DMA_ENTRY(segment_01461000, "segment_01461000")
+DEFINE_DMA_ENTRY(segment_01462000, "segment_01462000")
+DEFINE_DMA_ENTRY(segment_01463000, "segment_01463000")
+DEFINE_DMA_ENTRY(segment_01464000, "segment_01464000")
+DEFINE_DMA_ENTRY(segment_01465000, "segment_01465000")
+DEFINE_DMA_ENTRY(segment_01466000, "segment_01466000")
+DEFINE_DMA_ENTRY(segment_01467000, "segment_01467000")
+DEFINE_DMA_ENTRY(segment_01468000, "segment_01468000")
+DEFINE_DMA_ENTRY(segment_01469000, "segment_01469000")
+DEFINE_DMA_ENTRY(segment_0146A000, "segment_0146A000")
+DEFINE_DMA_ENTRY(segment_0146B000, "segment_0146B000")
+DEFINE_DMA_ENTRY(segment_0146C000, "segment_0146C000")
+DEFINE_DMA_ENTRY(segment_0146D000, "segment_0146D000")
+DEFINE_DMA_ENTRY(segment_0146E000, "segment_0146E000")
+DEFINE_DMA_ENTRY(segment_0146F000, "segment_0146F000")
+DEFINE_DMA_ENTRY(segment_01470000, "segment_01470000")
+DEFINE_DMA_ENTRY(segment_01471000, "segment_01471000")
+DEFINE_DMA_ENTRY(segment_01472000, "segment_01472000")
+DEFINE_DMA_ENTRY(segment_01473000, "segment_01473000")
+DEFINE_DMA_ENTRY(segment_01474000, "segment_01474000")
+DEFINE_DMA_ENTRY(segment_01475000, "segment_01475000")
+DEFINE_DMA_ENTRY(segment_01476000, "segment_01476000")
+DEFINE_DMA_ENTRY(segment_01477000, "segment_01477000")
+DEFINE_DMA_ENTRY(segment_01478000, "segment_01478000")
+DEFINE_DMA_ENTRY(segment_01479000, "segment_01479000")
+DEFINE_DMA_ENTRY(segment_0147A000, "segment_0147A000")
+DEFINE_DMA_ENTRY(segment_0147B000, "segment_0147B000")
+DEFINE_DMA_ENTRY(segment_0147C000, "segment_0147C000")
+DEFINE_DMA_ENTRY(segment_0147D000, "segment_0147D000")
+DEFINE_DMA_ENTRY(segment_0147F000, "segment_0147F000")
+DEFINE_DMA_ENTRY(segment_01480000, "segment_01480000")
+DEFINE_DMA_ENTRY(segment_01481000, "segment_01481000")
+DEFINE_DMA_ENTRY(segment_01482000, "segment_01482000")
+DEFINE_DMA_ENTRY(segment_01484000, "segment_01484000")
+DEFINE_DMA_ENTRY(segment_01486000, "segment_01486000")
+DEFINE_DMA_ENTRY(segment_01488000, "segment_01488000")
+DEFINE_DMA_ENTRY(segment_01489000, "segment_01489000")
+DEFINE_DMA_ENTRY(segment_0148A000, "segment_0148A000")
+DEFINE_DMA_ENTRY(segment_0148B000, "segment_0148B000")
+DEFINE_DMA_ENTRY(segment_0148C000, "segment_0148C000")
+DEFINE_DMA_ENTRY(segment_0148D000, "segment_0148D000")
+DEFINE_DMA_ENTRY(segment_0148E000, "segment_0148E000")
+DEFINE_DMA_ENTRY(segment_0148F000, "segment_0148F000")
+DEFINE_DMA_ENTRY(segment_01490000, "segment_01490000")
+DEFINE_DMA_ENTRY(segment_01491000, "segment_01491000")
+DEFINE_DMA_ENTRY(segment_01492000, "segment_01492000")
+DEFINE_DMA_ENTRY(segment_01493000, "segment_01493000")
+DEFINE_DMA_ENTRY(segment_01495000, "segment_01495000")
+DEFINE_DMA_ENTRY(segment_01496000, "segment_01496000")
+DEFINE_DMA_ENTRY(segment_01497000, "segment_01497000")
+DEFINE_DMA_ENTRY(segment_01498000, "segment_01498000")
+DEFINE_DMA_ENTRY(segment_01499000, "segment_01499000")
+DEFINE_DMA_ENTRY(segment_0149A000, "segment_0149A000")
+DEFINE_DMA_ENTRY(segment_0149B000, "segment_0149B000")
+DEFINE_DMA_ENTRY(segment_0149C000, "segment_0149C000")
+DEFINE_DMA_ENTRY(segment_0149D000, "segment_0149D000")
+DEFINE_DMA_ENTRY(segment_0149E000, "segment_0149E000")
+DEFINE_DMA_ENTRY(segment_0149F000, "segment_0149F000")
+DEFINE_DMA_ENTRY(segment_014A0000, "segment_014A0000")
+DEFINE_DMA_ENTRY(segment_014A1000, "segment_014A1000")
+DEFINE_DMA_ENTRY(segment_014A2000, "segment_014A2000")
+DEFINE_DMA_ENTRY(segment_014A3000, "segment_014A3000")
+DEFINE_DMA_ENTRY(segment_014A5000, "segment_014A5000")
+DEFINE_DMA_ENTRY(segment_014A6000, "segment_014A6000")
+DEFINE_DMA_ENTRY(segment_014A7000, "segment_014A7000")
+DEFINE_DMA_ENTRY(segment_014A8000, "segment_014A8000")
+DEFINE_DMA_ENTRY(segment_014AA000, "segment_014AA000")
+DEFINE_DMA_ENTRY(segment_014AB000, "segment_014AB000")
+DEFINE_DMA_ENTRY(segment_014AC000, "segment_014AC000")
+DEFINE_DMA_ENTRY(segment_014AE000, "segment_014AE000")
+DEFINE_DMA_ENTRY(segment_014AF000, "segment_014AF000")
+DEFINE_DMA_ENTRY(segment_014B0000, "segment_014B0000")
+DEFINE_DMA_ENTRY(segment_014B1000, "segment_014B1000")
+DEFINE_DMA_ENTRY(segment_014B2000, "segment_014B2000")
+DEFINE_DMA_ENTRY(segment_014B3000, "segment_014B3000")
+DEFINE_DMA_ENTRY(segment_014B4000, "segment_014B4000")
+DEFINE_DMA_ENTRY(segment_014B6000, "segment_014B6000")
+DEFINE_DMA_ENTRY(segment_014B7000, "segment_014B7000")
+DEFINE_DMA_ENTRY(segment_014B8000, "segment_014B8000")
+DEFINE_DMA_ENTRY(segment_014B9000, "segment_014B9000")
+DEFINE_DMA_ENTRY(segment_014BA000, "segment_014BA000")
+DEFINE_DMA_ENTRY(segment_014BB000, "segment_014BB000")
+DEFINE_DMA_ENTRY(segment_014BC000, "segment_014BC000")
+DEFINE_DMA_ENTRY(segment_014BD000, "segment_014BD000")
+DEFINE_DMA_ENTRY(segment_014BE000, "segment_014BE000")
+DEFINE_DMA_ENTRY(segment_014BF000, "segment_014BF000")
+DEFINE_DMA_ENTRY(segment_014C0000, "segment_014C0000")
+DEFINE_DMA_ENTRY(segment_014C1000, "segment_014C1000")
+DEFINE_DMA_ENTRY(segment_014C2000, "segment_014C2000")
+DEFINE_DMA_ENTRY(segment_014C3000, "segment_014C3000")
+DEFINE_DMA_ENTRY(segment_014C4000, "segment_014C4000")
+DEFINE_DMA_ENTRY(segment_014C5000, "segment_014C5000")
+DEFINE_DMA_ENTRY(segment_014C6000, "segment_014C6000")
+DEFINE_DMA_ENTRY(segment_014C7000, "segment_014C7000")
+DEFINE_DMA_ENTRY(segment_014C8000, "segment_014C8000")
+DEFINE_DMA_ENTRY(segment_014C9000, "segment_014C9000")
+DEFINE_DMA_ENTRY(segment_014CA000, "segment_014CA000")
+DEFINE_DMA_ENTRY(segment_014CB000, "segment_014CB000")
+DEFINE_DMA_ENTRY(segment_014CC000, "segment_014CC000")
+DEFINE_DMA_ENTRY(segment_014CD000, "segment_014CD000")
+DEFINE_DMA_ENTRY(segment_014CF000, "segment_014CF000")
+DEFINE_DMA_ENTRY(segment_014D0000, "segment_014D0000")
+DEFINE_DMA_ENTRY(segment_014D1000, "segment_014D1000")
+DEFINE_DMA_ENTRY(segment_014D2000, "segment_014D2000")
+DEFINE_DMA_ENTRY(segment_014D3000, "segment_014D3000")
+DEFINE_DMA_ENTRY(segment_014D4000, "segment_014D4000")
+DEFINE_DMA_ENTRY(segment_014D5000, "segment_014D5000")
+DEFINE_DMA_ENTRY(segment_014D6000, "segment_014D6000")
+DEFINE_DMA_ENTRY(segment_014D7000, "segment_014D7000")
+DEFINE_DMA_ENTRY(segment_014D8000, "segment_014D8000")
+DEFINE_DMA_ENTRY(segment_014D9000, "segment_014D9000")
+DEFINE_DMA_ENTRY(segment_014DA000, "segment_014DA000")
+DEFINE_DMA_ENTRY(segment_014DB000, "segment_014DB000")
+DEFINE_DMA_ENTRY(segment_014DC000, "segment_014DC000")
+DEFINE_DMA_ENTRY(segment_014DE000, "segment_014DE000")
+DEFINE_DMA_ENTRY(segment_014E0000, "segment_014E0000")
+DEFINE_DMA_ENTRY(segment_014E1000, "segment_014E1000")
+DEFINE_DMA_ENTRY(segment_014E2000, "segment_014E2000")
+DEFINE_DMA_ENTRY(segment_014E3000, "segment_014E3000")
+DEFINE_DMA_ENTRY(segment_014E4000, "segment_014E4000")
+DEFINE_DMA_ENTRY(segment_014E6000, "segment_014E6000")
+DEFINE_DMA_ENTRY(segment_014E7000, "segment_014E7000")
+DEFINE_DMA_ENTRY(segment_014E8000, "segment_014E8000")
+DEFINE_DMA_ENTRY(segment_014E9000, "segment_014E9000")
+DEFINE_DMA_ENTRY(segment_014EA000, "segment_014EA000")
+DEFINE_DMA_ENTRY(segment_014EB000, "segment_014EB000")
+DEFINE_DMA_ENTRY(segment_014EC000, "segment_014EC000")
+DEFINE_DMA_ENTRY(segment_014ED000, "segment_014ED000")
+DEFINE_DMA_ENTRY(segment_014EE000, "segment_014EE000")
+DEFINE_DMA_ENTRY(segment_014EF000, "segment_014EF000")
+DEFINE_DMA_ENTRY(segment_014F0000, "segment_014F0000")
+DEFINE_DMA_ENTRY(segment_014F1000, "segment_014F1000")
+DEFINE_DMA_ENTRY(segment_014F2000, "segment_014F2000")
+DEFINE_DMA_ENTRY(segment_014F3000, "segment_014F3000")
+DEFINE_DMA_ENTRY(segment_014F4000, "segment_014F4000")
+DEFINE_DMA_ENTRY(segment_014F5000, "segment_014F5000")
+DEFINE_DMA_ENTRY(segment_014F6000, "segment_014F6000")
+DEFINE_DMA_ENTRY(segment_014F7000, "segment_014F7000")
+DEFINE_DMA_ENTRY(segment_014F8000, "segment_014F8000")
+DEFINE_DMA_ENTRY(segment_014F9000, "segment_014F9000")
+DEFINE_DMA_ENTRY(segment_014FA000, "segment_014FA000")
+DEFINE_DMA_ENTRY(segment_014FC000, "segment_014FC000")
+DEFINE_DMA_ENTRY(segment_014FD000, "segment_014FD000")
+DEFINE_DMA_ENTRY(segment_014FE000, "segment_014FE000")
+DEFINE_DMA_ENTRY(segment_01500000, "segment_01500000")
+DEFINE_DMA_ENTRY(segment_01502000, "segment_01502000")
+DEFINE_DMA_ENTRY(segment_01503000, "segment_01503000")
+DEFINE_DMA_ENTRY(segment_01504000, "segment_01504000")
+DEFINE_DMA_ENTRY(segment_01506000, "segment_01506000")
+DEFINE_DMA_ENTRY(segment_01508000, "segment_01508000")
+DEFINE_DMA_ENTRY(segment_01509000, "segment_01509000")
+DEFINE_DMA_ENTRY(segment_0150A000, "segment_0150A000")
+DEFINE_DMA_ENTRY(segment_0150B000, "segment_0150B000")
+DEFINE_DMA_ENTRY(segment_0150C000, "segment_0150C000")
+DEFINE_DMA_ENTRY(segment_0150D000, "segment_0150D000")
+DEFINE_DMA_ENTRY(segment_0150E000, "segment_0150E000")
+DEFINE_DMA_ENTRY(segment_0150F000, "segment_0150F000")
+DEFINE_DMA_ENTRY(segment_01510000, "segment_01510000")
+DEFINE_DMA_ENTRY(segment_01511000, "segment_01511000")
+DEFINE_DMA_ENTRY(segment_01512000, "segment_01512000")
+DEFINE_DMA_ENTRY(segment_01513000, "segment_01513000")
+DEFINE_DMA_ENTRY(segment_01514000, "segment_01514000")
+DEFINE_DMA_ENTRY(segment_01515000, "segment_01515000")
+DEFINE_DMA_ENTRY(segment_01516000, "segment_01516000")
+DEFINE_DMA_ENTRY(segment_01517000, "segment_01517000")
+DEFINE_DMA_ENTRY(segment_01518000, "segment_01518000")
+DEFINE_DMA_ENTRY(segment_01519000, "segment_01519000")
+DEFINE_DMA_ENTRY(segment_0151A000, "segment_0151A000")
+DEFINE_DMA_ENTRY(segment_0151B000, "segment_0151B000")
+DEFINE_DMA_ENTRY(segment_0151C000, "segment_0151C000")
+DEFINE_DMA_ENTRY(segment_0151D000, "segment_0151D000")
+DEFINE_DMA_ENTRY(segment_0151E000, "segment_0151E000")
+DEFINE_DMA_ENTRY(segment_0151F000, "segment_0151F000")
+DEFINE_DMA_ENTRY(segment_01520000, "segment_01520000")
+DEFINE_DMA_ENTRY(segment_01521000, "segment_01521000")
+DEFINE_DMA_ENTRY(segment_01522000, "segment_01522000")
+DEFINE_DMA_ENTRY(segment_01523000, "segment_01523000")
+DEFINE_DMA_ENTRY(segment_01524000, "segment_01524000")
+DEFINE_DMA_ENTRY(segment_01525000, "segment_01525000")
+DEFINE_DMA_ENTRY(segment_01526000, "segment_01526000")
+DEFINE_DMA_ENTRY(segment_01527000, "segment_01527000")
+DEFINE_DMA_ENTRY(segment_01528000, "segment_01528000")
+DEFINE_DMA_ENTRY(segment_01529000, "segment_01529000")
+DEFINE_DMA_ENTRY(segment_0152A000, "segment_0152A000")
+DEFINE_DMA_ENTRY(segment_0152B000, "segment_0152B000")
+DEFINE_DMA_ENTRY(segment_0152C000, "segment_0152C000")
+DEFINE_DMA_ENTRY(segment_0152D000, "segment_0152D000")
+DEFINE_DMA_ENTRY(segment_0152E000, "segment_0152E000")
+DEFINE_DMA_ENTRY(segment_0152F000, "segment_0152F000")
+DEFINE_DMA_ENTRY(segment_01530000, "segment_01530000")
+DEFINE_DMA_ENTRY(segment_01531000, "segment_01531000")
+DEFINE_DMA_ENTRY(segment_01532000, "segment_01532000")
+DEFINE_DMA_ENTRY(segment_01533000, "segment_01533000")
+DEFINE_DMA_ENTRY(segment_01534000, "segment_01534000")
+DEFINE_DMA_ENTRY(segment_01535000, "segment_01535000")
+DEFINE_DMA_ENTRY(segment_01536000, "segment_01536000")
+DEFINE_DMA_ENTRY(segment_01537000, "segment_01537000")
+DEFINE_DMA_ENTRY(segment_01538000, "segment_01538000")
+DEFINE_DMA_ENTRY(segment_01539000, "segment_01539000")
+DEFINE_DMA_ENTRY(segment_0153A000, "segment_0153A000")
+DEFINE_DMA_ENTRY(segment_0153B000, "segment_0153B000")
+DEFINE_DMA_ENTRY(segment_0153D000, "segment_0153D000")
+DEFINE_DMA_ENTRY(segment_0153E000, "segment_0153E000")
+DEFINE_DMA_ENTRY(segment_0153F000, "segment_0153F000")
+DEFINE_DMA_ENTRY(segment_01540000, "segment_01540000")
+DEFINE_DMA_ENTRY(segment_01541000, "segment_01541000")
+DEFINE_DMA_ENTRY(segment_01542000, "segment_01542000")
+DEFINE_DMA_ENTRY(segment_01543000, "segment_01543000")
+DEFINE_DMA_ENTRY(segment_01544000, "segment_01544000")
+DEFINE_DMA_ENTRY(segment_01545000, "segment_01545000")
+DEFINE_DMA_ENTRY(segment_01546000, "segment_01546000")
+DEFINE_DMA_ENTRY(segment_01547000, "segment_01547000")
+DEFINE_DMA_ENTRY(segment_01548000, "segment_01548000")
+DEFINE_DMA_ENTRY(segment_01549000, "segment_01549000")
+DEFINE_DMA_ENTRY(segment_0154A000, "segment_0154A000")
+DEFINE_DMA_ENTRY(segment_0154B000, "segment_0154B000")
+DEFINE_DMA_ENTRY(segment_0154C000, "segment_0154C000")
+DEFINE_DMA_ENTRY(segment_0154D000, "segment_0154D000")
+DEFINE_DMA_ENTRY(segment_0154E000, "segment_0154E000")
+DEFINE_DMA_ENTRY(segment_0154F000, "segment_0154F000")
+DEFINE_DMA_ENTRY(segment_01550000, "segment_01550000")
+DEFINE_DMA_ENTRY(segment_01552000, "segment_01552000")
+DEFINE_DMA_ENTRY(segment_01553000, "segment_01553000")
+DEFINE_DMA_ENTRY(segment_01554000, "segment_01554000")
+DEFINE_DMA_ENTRY(segment_01555000, "segment_01555000")
+DEFINE_DMA_ENTRY(segment_01556000, "segment_01556000")
+DEFINE_DMA_ENTRY(segment_01557000, "segment_01557000")
+DEFINE_DMA_ENTRY(segment_01559000, "segment_01559000")
+DEFINE_DMA_ENTRY(segment_0155A000, "segment_0155A000")
+DEFINE_DMA_ENTRY(segment_0155B000, "segment_0155B000")
+DEFINE_DMA_ENTRY(segment_0155C000, "segment_0155C000")
+DEFINE_DMA_ENTRY(segment_0155D000, "segment_0155D000")
+DEFINE_DMA_ENTRY(segment_0155E000, "segment_0155E000")
+DEFINE_DMA_ENTRY(segment_0155F000, "segment_0155F000")
+DEFINE_DMA_ENTRY(segment_01560000, "segment_01560000")
+DEFINE_DMA_ENTRY(segment_01561000, "segment_01561000")
+DEFINE_DMA_ENTRY(segment_01562000, "segment_01562000")
+DEFINE_DMA_ENTRY(segment_01563000, "segment_01563000")
+DEFINE_DMA_ENTRY(segment_01564000, "segment_01564000")
+DEFINE_DMA_ENTRY(segment_01565000, "segment_01565000")
+DEFINE_DMA_ENTRY(segment_01566000, "segment_01566000")
+DEFINE_DMA_ENTRY(segment_01567000, "segment_01567000")
+DEFINE_DMA_ENTRY(segment_01568000, "segment_01568000")
+DEFINE_DMA_ENTRY(segment_01569000, "segment_01569000")
+DEFINE_DMA_ENTRY(segment_0156A000, "segment_0156A000")
+DEFINE_DMA_ENTRY(segment_0156B000, "segment_0156B000")
+DEFINE_DMA_ENTRY(segment_0156C000, "segment_0156C000")
+DEFINE_DMA_ENTRY(segment_0156D000, "segment_0156D000")
+DEFINE_DMA_ENTRY(segment_0156E000, "segment_0156E000")
+DEFINE_DMA_ENTRY(segment_0156F000, "segment_0156F000")
+DEFINE_DMA_ENTRY(segment_01570000, "segment_01570000")
+DEFINE_DMA_ENTRY(segment_01571000, "segment_01571000")
+DEFINE_DMA_ENTRY(segment_01572000, "segment_01572000")
+DEFINE_DMA_ENTRY(segment_01573000, "segment_01573000")
+DEFINE_DMA_ENTRY(segment_01574000, "segment_01574000")
+DEFINE_DMA_ENTRY(segment_01575000, "segment_01575000")
+DEFINE_DMA_ENTRY(segment_01576000, "segment_01576000")
+DEFINE_DMA_ENTRY(segment_01577000, "segment_01577000")
+DEFINE_DMA_ENTRY(segment_01578000, "segment_01578000")
+DEFINE_DMA_ENTRY(segment_01579000, "segment_01579000")
+DEFINE_DMA_ENTRY(segment_0157A000, "segment_0157A000")
+DEFINE_DMA_ENTRY(segment_0157C000, "segment_0157C000")
+DEFINE_DMA_ENTRY(segment_0157D000, "segment_0157D000")
+DEFINE_DMA_ENTRY(segment_0157E000, "segment_0157E000")
+DEFINE_DMA_ENTRY(segment_0157F000, "segment_0157F000")
+DEFINE_DMA_ENTRY(segment_01580000, "segment_01580000")
+DEFINE_DMA_ENTRY(segment_01581000, "segment_01581000")
+DEFINE_DMA_ENTRY(segment_01582000, "segment_01582000")
+DEFINE_DMA_ENTRY(segment_01583000, "segment_01583000")
+DEFINE_DMA_ENTRY(segment_01584000, "segment_01584000")
+DEFINE_DMA_ENTRY(segment_01585000, "segment_01585000")
+DEFINE_DMA_ENTRY(segment_01587000, "segment_01587000")
+DEFINE_DMA_ENTRY(segment_01588000, "segment_01588000")
+DEFINE_DMA_ENTRY(segment_01589000, "segment_01589000")
+DEFINE_DMA_ENTRY(segment_0158A000, "segment_0158A000")
+DEFINE_DMA_ENTRY(segment_0158B000, "segment_0158B000")
+DEFINE_DMA_ENTRY(segment_0158C000, "segment_0158C000")
+DEFINE_DMA_ENTRY(segment_0158E000, "segment_0158E000")
+DEFINE_DMA_ENTRY(segment_01590000, "segment_01590000")
+DEFINE_DMA_ENTRY(segment_01591000, "segment_01591000")
+DEFINE_DMA_ENTRY(segment_01592000, "segment_01592000")
+DEFINE_DMA_ENTRY(segment_01593000, "segment_01593000")
+DEFINE_DMA_ENTRY(segment_01595000, "segment_01595000")
+DEFINE_DMA_ENTRY(segment_01596000, "segment_01596000")
+DEFINE_DMA_ENTRY(segment_01597000, "segment_01597000")
+DEFINE_DMA_ENTRY(segment_01598000, "segment_01598000")
+DEFINE_DMA_ENTRY(segment_01599000, "segment_01599000")
+DEFINE_DMA_ENTRY(segment_0159A000, "segment_0159A000")
+DEFINE_DMA_ENTRY(segment_0159B000, "segment_0159B000")
+DEFINE_DMA_ENTRY(segment_0159C000, "segment_0159C000")
+DEFINE_DMA_ENTRY(segment_0159D000, "segment_0159D000")
+DEFINE_DMA_ENTRY(segment_0159F000, "segment_0159F000")
+DEFINE_DMA_ENTRY(segment_015A0000, "segment_015A0000")
+DEFINE_DMA_ENTRY(segment_015A1000, "segment_015A1000")
+DEFINE_DMA_ENTRY(segment_015A2000, "segment_015A2000")
+DEFINE_DMA_ENTRY(segment_015A3000, "segment_015A3000")
+DEFINE_DMA_ENTRY(segment_015A5000, "segment_015A5000")
+DEFINE_DMA_ENTRY(segment_015A6000, "segment_015A6000")
+DEFINE_DMA_ENTRY(segment_015A7000, "segment_015A7000")
+DEFINE_DMA_ENTRY(segment_015A8000, "segment_015A8000")
+DEFINE_DMA_ENTRY(segment_015A9000, "segment_015A9000")
+DEFINE_DMA_ENTRY(segment_015AA000, "segment_015AA000")
+DEFINE_DMA_ENTRY(segment_015AC000, "segment_015AC000")
+DEFINE_DMA_ENTRY(segment_015AD000, "segment_015AD000")
+DEFINE_DMA_ENTRY(segment_015AE000, "segment_015AE000")
+DEFINE_DMA_ENTRY(segment_015AF000, "segment_015AF000")
+DEFINE_DMA_ENTRY(segment_015B1000, "segment_015B1000")
+DEFINE_DMA_ENTRY(segment_015B2000, "segment_015B2000")
+DEFINE_DMA_ENTRY(segment_015B3000, "segment_015B3000")
+DEFINE_DMA_ENTRY(segment_015B4000, "segment_015B4000")
+DEFINE_DMA_ENTRY(segment_015B5000, "segment_015B5000")
+DEFINE_DMA_ENTRY(segment_015B6000, "segment_015B6000")
+DEFINE_DMA_ENTRY(segment_015B7000, "segment_015B7000")
+DEFINE_DMA_ENTRY(segment_015B8000, "segment_015B8000")
+DEFINE_DMA_ENTRY(segment_015B9000, "segment_015B9000")
+DEFINE_DMA_ENTRY(segment_015BA000, "segment_015BA000")
+DEFINE_DMA_ENTRY(segment_015BB000, "segment_015BB000")
+DEFINE_DMA_ENTRY(segment_015BC000, "segment_015BC000")
+DEFINE_DMA_ENTRY(segment_015BD000, "segment_015BD000")
+DEFINE_DMA_ENTRY(segment_015BE000, "segment_015BE000")
+DEFINE_DMA_ENTRY(segment_015BF000, "segment_015BF000")
+DEFINE_DMA_ENTRY(segment_015C0000, "segment_015C0000")
+DEFINE_DMA_ENTRY(segment_015C1000, "segment_015C1000")
+DEFINE_DMA_ENTRY(segment_015C2000, "segment_015C2000")
+DEFINE_DMA_ENTRY(segment_015C3000, "segment_015C3000")
+DEFINE_DMA_ENTRY(segment_015C4000, "segment_015C4000")
+DEFINE_DMA_ENTRY(segment_015C5000, "segment_015C5000")
+DEFINE_DMA_ENTRY(segment_015C6000, "segment_015C6000")
+DEFINE_DMA_ENTRY(segment_015C8000, "segment_015C8000")
+DEFINE_DMA_ENTRY(segment_015CA000, "segment_015CA000")
+DEFINE_DMA_ENTRY(segment_015CB000, "segment_015CB000")
+DEFINE_DMA_ENTRY(segment_015CD000, "segment_015CD000")
+DEFINE_DMA_ENTRY(segment_015CE000, "segment_015CE000")
+DEFINE_DMA_ENTRY(segment_015CF000, "segment_015CF000")
+DEFINE_DMA_ENTRY(segment_015D0000, "segment_015D0000")
+DEFINE_DMA_ENTRY(segment_015D1000, "segment_015D1000")
+DEFINE_DMA_ENTRY(segment_015D2000, "segment_015D2000")
+DEFINE_DMA_ENTRY(segment_015D3000, "segment_015D3000")
+DEFINE_DMA_ENTRY(segment_015D4000, "segment_015D4000")
+DEFINE_DMA_ENTRY(segment_015D6000, "segment_015D6000")
+DEFINE_DMA_ENTRY(segment_015D8000, "segment_015D8000")
+DEFINE_DMA_ENTRY(segment_015DA000, "segment_015DA000")
+DEFINE_DMA_ENTRY(segment_015DC000, "segment_015DC000")
+DEFINE_DMA_ENTRY(segment_015DE000, "segment_015DE000")
+DEFINE_DMA_ENTRY(segment_015E0000, "segment_015E0000")
+DEFINE_DMA_ENTRY(segment_015E2000, "segment_015E2000")
+DEFINE_DMA_ENTRY(segment_015E4000, "segment_015E4000")
+DEFINE_DMA_ENTRY(segment_015E6000, "segment_015E6000")
+DEFINE_DMA_ENTRY(segment_015E8000, "segment_015E8000")
+DEFINE_DMA_ENTRY(segment_015EA000, "segment_015EA000")
+DEFINE_DMA_ENTRY(segment_015EC000, "segment_015EC000")
+DEFINE_DMA_ENTRY(segment_015EE000, "segment_015EE000")
+DEFINE_DMA_ENTRY(segment_015F0000, "segment_015F0000")
+DEFINE_DMA_ENTRY(segment_015F2000, "segment_015F2000")
+DEFINE_DMA_ENTRY(segment_015F4000, "segment_015F4000")
+DEFINE_DMA_ENTRY(segment_015F6000, "segment_015F6000")
+DEFINE_DMA_ENTRY(segment_015F8000, "segment_015F8000")
+DEFINE_DMA_ENTRY(segment_015FA000, "segment_015FA000")
+DEFINE_DMA_ENTRY(segment_015FC000, "segment_015FC000")
+DEFINE_DMA_ENTRY(segment_015FE000, "segment_015FE000")
+DEFINE_DMA_ENTRY(segment_01600000, "segment_01600000")
+DEFINE_DMA_ENTRY(segment_01602000, "segment_01602000")
+DEFINE_DMA_ENTRY(segment_01604000, "segment_01604000")
+DEFINE_DMA_ENTRY(segment_01606000, "segment_01606000")
+DEFINE_DMA_ENTRY(segment_01608000, "segment_01608000")
+DEFINE_DMA_ENTRY(segment_0160A000, "segment_0160A000")
+DEFINE_DMA_ENTRY(segment_0160C000, "segment_0160C000")
+DEFINE_DMA_ENTRY(segment_0160E000, "segment_0160E000")
+DEFINE_DMA_ENTRY(segment_01610000, "segment_01610000")
+DEFINE_DMA_ENTRY(segment_01612000, "segment_01612000")
+DEFINE_DMA_ENTRY(segment_01614000, "segment_01614000")
+DEFINE_DMA_ENTRY(segment_01616000, "segment_01616000")
+DEFINE_DMA_ENTRY(segment_01618000, "segment_01618000")
+DEFINE_DMA_ENTRY(segment_0161A000, "segment_0161A000")
+DEFINE_DMA_ENTRY(segment_0161C000, "segment_0161C000")
+DEFINE_DMA_ENTRY(segment_0161E000, "segment_0161E000")
+DEFINE_DMA_ENTRY(segment_01620000, "segment_01620000")
+DEFINE_DMA_ENTRY(segment_01622000, "segment_01622000")
+DEFINE_DMA_ENTRY(segment_01624000, "segment_01624000")
+DEFINE_DMA_ENTRY(segment_01626000, "segment_01626000")
+DEFINE_DMA_ENTRY(segment_01628000, "segment_01628000")
+DEFINE_DMA_ENTRY(segment_0162A000, "segment_0162A000")
+DEFINE_DMA_ENTRY(segment_0162C000, "segment_0162C000")
+DEFINE_DMA_ENTRY(segment_0162E000, "segment_0162E000")
+DEFINE_DMA_ENTRY(segment_01630000, "segment_01630000")
+DEFINE_DMA_ENTRY(segment_01632000, "segment_01632000")
+DEFINE_DMA_ENTRY(segment_01634000, "segment_01634000")
+DEFINE_DMA_ENTRY(segment_01636000, "segment_01636000")
+DEFINE_DMA_ENTRY(segment_01638000, "segment_01638000")
+DEFINE_DMA_ENTRY(segment_0163A000, "segment_0163A000")
+DEFINE_DMA_ENTRY(segment_0163C000, "segment_0163C000")
+DEFINE_DMA_ENTRY(segment_0163E000, "segment_0163E000")
+DEFINE_DMA_ENTRY(segment_01640000, "segment_01640000")
+DEFINE_DMA_ENTRY(segment_01642000, "segment_01642000")
+DEFINE_DMA_ENTRY(segment_01644000, "segment_01644000")
+DEFINE_DMA_ENTRY(segment_01646000, "segment_01646000")
+DEFINE_DMA_ENTRY(segment_01648000, "segment_01648000")
+DEFINE_DMA_ENTRY(segment_0164A000, "segment_0164A000")
+DEFINE_DMA_ENTRY(segment_0164C000, "segment_0164C000")
+DEFINE_DMA_ENTRY(segment_0164E000, "segment_0164E000")
+DEFINE_DMA_ENTRY(segment_01650000, "segment_01650000")
+DEFINE_DMA_ENTRY(segment_01652000, "segment_01652000")
+DEFINE_DMA_ENTRY(segment_01654000, "segment_01654000")
+DEFINE_DMA_ENTRY(segment_01656000, "segment_01656000")
+DEFINE_DMA_ENTRY(segment_01658000, "segment_01658000")
+DEFINE_DMA_ENTRY(segment_0165A000, "segment_0165A000")
+DEFINE_DMA_ENTRY(segment_0165C000, "segment_0165C000")
+DEFINE_DMA_ENTRY(segment_0165E000, "segment_0165E000")
+DEFINE_DMA_ENTRY(segment_01660000, "segment_01660000")
+DEFINE_DMA_ENTRY(segment_01662000, "segment_01662000")
+DEFINE_DMA_ENTRY(segment_01664000, "segment_01664000")
+DEFINE_DMA_ENTRY(segment_01666000, "segment_01666000")
+DEFINE_DMA_ENTRY(segment_01668000, "segment_01668000")
+DEFINE_DMA_ENTRY(segment_0166A000, "segment_0166A000")
+DEFINE_DMA_ENTRY(segment_0166C000, "segment_0166C000")
+DEFINE_DMA_ENTRY(segment_0166E000, "segment_0166E000")
+DEFINE_DMA_ENTRY(segment_01670000, "segment_01670000")
+DEFINE_DMA_ENTRY(segment_01672000, "segment_01672000")
+DEFINE_DMA_ENTRY(segment_01674000, "segment_01674000")
+DEFINE_DMA_ENTRY(segment_01676000, "segment_01676000")
+DEFINE_DMA_ENTRY(segment_01678000, "segment_01678000")
+DEFINE_DMA_ENTRY(segment_0167A000, "segment_0167A000")
+DEFINE_DMA_ENTRY(segment_0167C000, "segment_0167C000")
+DEFINE_DMA_ENTRY(segment_0167E000, "segment_0167E000")
+DEFINE_DMA_ENTRY(segment_01680000, "segment_01680000")
+DEFINE_DMA_ENTRY(segment_01682000, "segment_01682000")
+DEFINE_DMA_ENTRY(segment_01684000, "segment_01684000")
+DEFINE_DMA_ENTRY(segment_01686000, "segment_01686000")
+DEFINE_DMA_ENTRY(segment_01688000, "segment_01688000")
+DEFINE_DMA_ENTRY(segment_0168A000, "segment_0168A000")
+DEFINE_DMA_ENTRY(segment_0168C000, "segment_0168C000")
+DEFINE_DMA_ENTRY(segment_0168E000, "segment_0168E000")
+DEFINE_DMA_ENTRY(segment_01690000, "segment_01690000")
+DEFINE_DMA_ENTRY(segment_01692000, "segment_01692000")
+DEFINE_DMA_ENTRY(segment_01694000, "segment_01694000")
+DEFINE_DMA_ENTRY(segment_01696000, "segment_01696000")
+DEFINE_DMA_ENTRY(segment_01698000, "segment_01698000")
+DEFINE_DMA_ENTRY(segment_0169A000, "segment_0169A000")
+DEFINE_DMA_ENTRY(segment_0169C000, "segment_0169C000")
+DEFINE_DMA_ENTRY(segment_0169E000, "segment_0169E000")
+DEFINE_DMA_ENTRY(segment_016A0000, "segment_016A0000")
+DEFINE_DMA_ENTRY(segment_016A2000, "segment_016A2000")
+DEFINE_DMA_ENTRY(segment_016A4000, "segment_016A4000")
+DEFINE_DMA_ENTRY(segment_016A6000, "segment_016A6000")
+DEFINE_DMA_ENTRY(segment_016A8000, "segment_016A8000")
+DEFINE_DMA_ENTRY(segment_016AA000, "segment_016AA000")
+DEFINE_DMA_ENTRY(segment_016AC000, "segment_016AC000")
+DEFINE_DMA_ENTRY(segment_016AE000, "segment_016AE000")
+DEFINE_DMA_ENTRY(segment_016B0000, "segment_016B0000")
+DEFINE_DMA_ENTRY(segment_016B2000, "segment_016B2000")
+DEFINE_DMA_ENTRY(segment_016B4000, "segment_016B4000")
+DEFINE_DMA_ENTRY(segment_016B6000, "segment_016B6000")
+DEFINE_DMA_ENTRY(segment_016B8000, "segment_016B8000")
+DEFINE_DMA_ENTRY(segment_016BA000, "segment_016BA000")
+DEFINE_DMA_ENTRY(segment_016BC000, "segment_016BC000")
+DEFINE_DMA_ENTRY(segment_016BE000, "segment_016BE000")
+DEFINE_DMA_ENTRY(segment_016C0000, "segment_016C0000")
+DEFINE_DMA_ENTRY(segment_016C2000, "segment_016C2000")
+DEFINE_DMA_ENTRY(segment_016C4000, "segment_016C4000")
+DEFINE_DMA_ENTRY(segment_016C6000, "segment_016C6000")
+DEFINE_DMA_ENTRY(segment_016C8000, "segment_016C8000")
+DEFINE_DMA_ENTRY(segment_016CA000, "segment_016CA000")
+DEFINE_DMA_ENTRY(segment_016CC000, "segment_016CC000")
+DEFINE_DMA_ENTRY(segment_016CE000, "segment_016CE000")
+DEFINE_DMA_ENTRY(segment_016D0000, "segment_016D0000")
+DEFINE_DMA_ENTRY(segment_016D2000, "segment_016D2000")
+DEFINE_DMA_ENTRY(segment_016D3000, "segment_016D3000")
+DEFINE_DMA_ENTRY(segment_016D4000, "segment_016D4000")
+DEFINE_DMA_ENTRY(segment_016D5000, "segment_016D5000")
+DEFINE_DMA_ENTRY(segment_016D6000, "segment_016D6000")
+DEFINE_DMA_ENTRY(segment_016D7000, "segment_016D7000")
+DEFINE_DMA_ENTRY(segment_016D8000, "segment_016D8000")
+DEFINE_DMA_ENTRY(segment_016D9000, "segment_016D9000")
+DEFINE_DMA_ENTRY(segment_016DA000, "segment_016DA000")
+DEFINE_DMA_ENTRY(segment_016DB000, "segment_016DB000")
+DEFINE_DMA_ENTRY(segment_016DC000, "segment_016DC000")
+DEFINE_DMA_ENTRY(segment_016DD000, "segment_016DD000")
+DEFINE_DMA_ENTRY(segment_016DE000, "segment_016DE000")
+DEFINE_DMA_ENTRY(segment_016E0000, "segment_016E0000")
+DEFINE_DMA_ENTRY(segment_016E2000, "segment_016E2000")
+DEFINE_DMA_ENTRY(segment_016E4000, "segment_016E4000")
+DEFINE_DMA_ENTRY(segment_016E6000, "segment_016E6000")
+DEFINE_DMA_ENTRY(segment_016E8000, "segment_016E8000")
+DEFINE_DMA_ENTRY(segment_016EA000, "segment_016EA000")
+DEFINE_DMA_ENTRY(segment_016EC000, "segment_016EC000")
+DEFINE_DMA_ENTRY(segment_016EE000, "segment_016EE000")
+DEFINE_DMA_ENTRY(segment_016F0000, "segment_016F0000")
+DEFINE_DMA_ENTRY(segment_016F2000, "segment_016F2000")
+DEFINE_DMA_ENTRY(segment_016F4000, "segment_016F4000")
+DEFINE_DMA_ENTRY(segment_016F6000, "segment_016F6000")
+DEFINE_DMA_ENTRY(segment_016F8000, "segment_016F8000")
+DEFINE_DMA_ENTRY(segment_016FA000, "segment_016FA000")
+DEFINE_DMA_ENTRY(segment_016FC000, "segment_016FC000")
+DEFINE_DMA_ENTRY(segment_016FE000, "segment_016FE000")
+DEFINE_DMA_ENTRY(segment_01700000, "segment_01700000")
+DEFINE_DMA_ENTRY(segment_01702000, "segment_01702000")
+DEFINE_DMA_ENTRY(segment_01703000, "segment_01703000")
+DEFINE_DMA_ENTRY(segment_01704000, "segment_01704000")
+DEFINE_DMA_ENTRY(segment_01705000, "segment_01705000")
+DEFINE_DMA_ENTRY(segment_01706000, "segment_01706000")
+DEFINE_DMA_ENTRY(segment_01708000, "segment_01708000")
+DEFINE_DMA_ENTRY(segment_01709000, "segment_01709000")
+DEFINE_DMA_ENTRY(segment_0170A000, "segment_0170A000")
+DEFINE_DMA_ENTRY(segment_0170B000, "segment_0170B000")
+DEFINE_DMA_ENTRY(segment_0170D000, "segment_0170D000")
+DEFINE_DMA_ENTRY(segment_0170F000, "segment_0170F000")
+DEFINE_DMA_ENTRY(segment_01710000, "segment_01710000")
+DEFINE_DMA_ENTRY(segment_01711000, "segment_01711000")
+DEFINE_DMA_ENTRY(segment_01712000, "segment_01712000")
+DEFINE_DMA_ENTRY(segment_01713000, "segment_01713000")
+DEFINE_DMA_ENTRY(segment_01714000, "segment_01714000")
+DEFINE_DMA_ENTRY(segment_01715000, "segment_01715000")
+DEFINE_DMA_ENTRY(segment_01716000, "segment_01716000")
+DEFINE_DMA_ENTRY(segment_01717000, "segment_01717000")
+DEFINE_DMA_ENTRY(segment_01718000, "segment_01718000")
+DEFINE_DMA_ENTRY(segment_01719000, "segment_01719000")
+DEFINE_DMA_ENTRY(segment_0171A000, "segment_0171A000")
+DEFINE_DMA_ENTRY(segment_0171B000, "segment_0171B000")
+DEFINE_DMA_ENTRY(segment_0171C000, "segment_0171C000")
+DEFINE_DMA_ENTRY(segment_0171D000, "segment_0171D000")
+DEFINE_DMA_ENTRY(segment_0171E000, "segment_0171E000")
+DEFINE_DMA_ENTRY(segment_0171F000, "segment_0171F000")
+DEFINE_DMA_ENTRY(segment_01720000, "segment_01720000")
+DEFINE_DMA_ENTRY(segment_01721000, "segment_01721000")
+DEFINE_DMA_ENTRY(segment_01722000, "segment_01722000")
+DEFINE_DMA_ENTRY(segment_01723000, "segment_01723000")
+DEFINE_DMA_ENTRY(segment_01724000, "segment_01724000")
+DEFINE_DMA_ENTRY(segment_01725000, "segment_01725000")
+DEFINE_DMA_ENTRY(segment_01726000, "segment_01726000")
+DEFINE_DMA_ENTRY(segment_01727000, "segment_01727000")
+DEFINE_DMA_ENTRY(segment_01728000, "segment_01728000")
+DEFINE_DMA_ENTRY(segment_01729000, "segment_01729000")
+DEFINE_DMA_ENTRY(segment_0172A000, "segment_0172A000")
+DEFINE_DMA_ENTRY(segment_0172B000, "segment_0172B000")
+DEFINE_DMA_ENTRY(segment_0172C000, "segment_0172C000")
+DEFINE_DMA_ENTRY(segment_0172D000, "segment_0172D000")
+DEFINE_DMA_ENTRY(segment_0172E000, "segment_0172E000")
+DEFINE_DMA_ENTRY(segment_0172F000, "segment_0172F000")
+DEFINE_DMA_ENTRY(segment_01730000, "segment_01730000")
+DEFINE_DMA_ENTRY(segment_01731000, "segment_01731000")
+DEFINE_DMA_ENTRY(segment_01732000, "segment_01732000")
+DEFINE_DMA_ENTRY(segment_01733000, "segment_01733000")
+DEFINE_DMA_ENTRY(segment_01734000, "segment_01734000")
+DEFINE_DMA_ENTRY(segment_01735000, "segment_01735000")
+DEFINE_DMA_ENTRY(segment_01736000, "segment_01736000")
+DEFINE_DMA_ENTRY(segment_01737000, "segment_01737000")
+DEFINE_DMA_ENTRY(segment_01739000, "segment_01739000")
+DEFINE_DMA_ENTRY(segment_0173A000, "segment_0173A000")
+DEFINE_DMA_ENTRY(segment_0173B000, "segment_0173B000")
+DEFINE_DMA_ENTRY(segment_0173C000, "segment_0173C000")
+DEFINE_DMA_ENTRY(segment_0173D000, "segment_0173D000")
+DEFINE_DMA_ENTRY(segment_0173E000, "segment_0173E000")
+DEFINE_DMA_ENTRY(segment_01740000, "segment_01740000")
+DEFINE_DMA_ENTRY(segment_01741000, "segment_01741000")
+DEFINE_DMA_ENTRY(segment_01742000, "segment_01742000")
+DEFINE_DMA_ENTRY(segment_01743000, "segment_01743000")
+DEFINE_DMA_ENTRY(segment_01744000, "segment_01744000")
+DEFINE_DMA_ENTRY(segment_01746000, "segment_01746000")
+DEFINE_DMA_ENTRY(segment_01747000, "segment_01747000")
+DEFINE_DMA_ENTRY(segment_01748000, "segment_01748000")
+DEFINE_DMA_ENTRY(segment_01749000, "segment_01749000")
+DEFINE_DMA_ENTRY(segment_0174A000, "segment_0174A000")
+DEFINE_DMA_ENTRY(segment_0174B000, "segment_0174B000")
+DEFINE_DMA_ENTRY(segment_0174C000, "segment_0174C000")
+DEFINE_DMA_ENTRY(segment_0174D000, "segment_0174D000")
+DEFINE_DMA_ENTRY(segment_0174E000, "segment_0174E000")
+DEFINE_DMA_ENTRY(segment_0174F000, "segment_0174F000")
+DEFINE_DMA_ENTRY(segment_01751000, "segment_01751000")
+DEFINE_DMA_ENTRY(segment_01752000, "segment_01752000")
+DEFINE_DMA_ENTRY(segment_01754000, "segment_01754000")
+DEFINE_DMA_ENTRY(segment_01755000, "segment_01755000")
+DEFINE_DMA_ENTRY(segment_01756000, "segment_01756000")
+DEFINE_DMA_ENTRY(segment_01757000, "segment_01757000")
+DEFINE_DMA_ENTRY(segment_01758000, "segment_01758000")
+DEFINE_DMA_ENTRY(segment_01759000, "segment_01759000")
+DEFINE_DMA_ENTRY(segment_0175A000, "segment_0175A000")
+DEFINE_DMA_ENTRY(segment_0175B000, "segment_0175B000")
+DEFINE_DMA_ENTRY(segment_0175C000, "segment_0175C000")
+DEFINE_DMA_ENTRY(segment_0175D000, "segment_0175D000")
+DEFINE_DMA_ENTRY(segment_0175E000, "segment_0175E000")
+DEFINE_DMA_ENTRY(segment_0175F000, "segment_0175F000")
+DEFINE_DMA_ENTRY(segment_01760000, "segment_01760000")
+DEFINE_DMA_ENTRY(segment_01761000, "segment_01761000")
+DEFINE_DMA_ENTRY(segment_01762000, "segment_01762000")
+DEFINE_DMA_ENTRY(segment_01763000, "segment_01763000")
+DEFINE_DMA_ENTRY(segment_01764000, "segment_01764000")
+DEFINE_DMA_ENTRY(segment_01765000, "segment_01765000")
+DEFINE_DMA_ENTRY(segment_01766000, "segment_01766000")
+DEFINE_DMA_ENTRY(segment_01767000, "segment_01767000")
+DEFINE_DMA_ENTRY(segment_01769000, "segment_01769000")
+DEFINE_DMA_ENTRY(segment_0176A000, "segment_0176A000")
+DEFINE_DMA_ENTRY(segment_0176C000, "segment_0176C000")
+DEFINE_DMA_ENTRY(segment_0176D000, "segment_0176D000")
+DEFINE_DMA_ENTRY(segment_0176E000, "segment_0176E000")
+DEFINE_DMA_ENTRY(segment_0176F000, "segment_0176F000")
+DEFINE_DMA_ENTRY(segment_01770000, "segment_01770000")
+DEFINE_DMA_ENTRY(segment_01771000, "segment_01771000")
+DEFINE_DMA_ENTRY(segment_01772000, "segment_01772000")
+DEFINE_DMA_ENTRY(segment_01773000, "segment_01773000")
+DEFINE_DMA_ENTRY(segment_01774000, "segment_01774000")
+DEFINE_DMA_ENTRY(segment_01775000, "segment_01775000")
+DEFINE_DMA_ENTRY(segment_01776000, "segment_01776000")
+DEFINE_DMA_ENTRY(segment_01777000, "segment_01777000")
+DEFINE_DMA_ENTRY(segment_01779000, "segment_01779000")
+DEFINE_DMA_ENTRY(segment_0177A000, "segment_0177A000")
+DEFINE_DMA_ENTRY(segment_0177B000, "segment_0177B000")
+DEFINE_DMA_ENTRY(segment_0177C000, "segment_0177C000")
+DEFINE_DMA_ENTRY(segment_0177D000, "segment_0177D000")
+DEFINE_DMA_ENTRY(segment_0177E000, "segment_0177E000")
+DEFINE_DMA_ENTRY(segment_0177F000, "segment_0177F000")
+DEFINE_DMA_ENTRY(segment_01780000, "segment_01780000")
+DEFINE_DMA_ENTRY(segment_01781000, "segment_01781000")
+DEFINE_DMA_ENTRY(segment_01782000, "segment_01782000")
+DEFINE_DMA_ENTRY(segment_01783000, "segment_01783000")
+DEFINE_DMA_ENTRY(segment_01784000, "segment_01784000")
+DEFINE_DMA_ENTRY(segment_01785000, "segment_01785000")
+DEFINE_DMA_ENTRY(segment_01786000, "segment_01786000")
+DEFINE_DMA_ENTRY(segment_01787000, "segment_01787000")
+DEFINE_DMA_ENTRY(segment_01788000, "segment_01788000")
+DEFINE_DMA_ENTRY(segment_01789000, "segment_01789000")
+DEFINE_DMA_ENTRY(segment_0178A000, "segment_0178A000")
+DEFINE_DMA_ENTRY(segment_0178B000, "segment_0178B000")
+DEFINE_DMA_ENTRY(segment_0178C000, "segment_0178C000")
+DEFINE_DMA_ENTRY(segment_0178D000, "segment_0178D000")
+DEFINE_DMA_ENTRY(segment_0178E000, "segment_0178E000")
+DEFINE_DMA_ENTRY(segment_0178F000, "segment_0178F000")
+DEFINE_DMA_ENTRY(segment_01790000, "segment_01790000")
+DEFINE_DMA_ENTRY(segment_01791000, "segment_01791000")
+DEFINE_DMA_ENTRY(segment_01792000, "segment_01792000")
+DEFINE_DMA_ENTRY(segment_01793000, "segment_01793000")
+DEFINE_DMA_ENTRY(segment_01794000, "segment_01794000")
+DEFINE_DMA_ENTRY(segment_01795000, "segment_01795000")
+DEFINE_DMA_ENTRY(segment_01796000, "segment_01796000")
+DEFINE_DMA_ENTRY(segment_01797000, "segment_01797000")
+DEFINE_DMA_ENTRY(segment_01798000, "segment_01798000")
+DEFINE_DMA_ENTRY(segment_0179A000, "segment_0179A000")
+DEFINE_DMA_ENTRY(segment_0179B000, "segment_0179B000")
+DEFINE_DMA_ENTRY(segment_0179C000, "segment_0179C000")
+DEFINE_DMA_ENTRY(segment_0179E000, "segment_0179E000")
+DEFINE_DMA_ENTRY(segment_0179F000, "segment_0179F000")
+DEFINE_DMA_ENTRY(segment_017A1000, "segment_017A1000")
+DEFINE_DMA_ENTRY(segment_0182A000, "segment_0182A000")
+DEFINE_DMA_ENTRY(segment_0186F000, "segment_0186F000")
+DEFINE_DMA_ENTRY(segment_01871000, "segment_01871000")
+DEFINE_DMA_ENTRY(segment_01880000, "segment_01880000")
+DEFINE_DMA_ENTRY(segment_01884000, "segment_01884000")
+DEFINE_DMA_ENTRY(segment_01888000, "segment_01888000")
+DEFINE_DMA_ENTRY(segment_0188C000, "segment_0188C000")
+DEFINE_DMA_ENTRY(segment_0188D000, "segment_0188D000")
+DEFINE_DMA_ENTRY(segment_0188E000, "segment_0188E000")
+DEFINE_DMA_ENTRY(segment_0188F000, "segment_0188F000")
+DEFINE_DMA_ENTRY(segment_01890000, "segment_01890000")
+DEFINE_DMA_ENTRY(segment_01891000, "segment_01891000")
+DEFINE_DMA_ENTRY(segment_01892000, "segment_01892000")
+DEFINE_DMA_ENTRY(segment_01893000, "segment_01893000")
+DEFINE_DMA_ENTRY(segment_01894000, "segment_01894000")
+DEFINE_DMA_ENTRY(segment_01895000, "segment_01895000")
+DEFINE_DMA_ENTRY(segment_01896000, "segment_01896000")
+DEFINE_DMA_ENTRY(segment_01897000, "segment_01897000")
+DEFINE_DMA_ENTRY(segment_01898000, "segment_01898000")
+DEFINE_DMA_ENTRY(segment_01899000, "segment_01899000")
+DEFINE_DMA_ENTRY(segment_0189A000, "segment_0189A000")
+DEFINE_DMA_ENTRY(segment_0189B000, "segment_0189B000")
+DEFINE_DMA_ENTRY(segment_0189C000, "segment_0189C000")
+DEFINE_DMA_ENTRY(segment_0189D000, "segment_0189D000")
+DEFINE_DMA_ENTRY(segment_0189E000, "segment_0189E000")
+DEFINE_DMA_ENTRY(segment_0189F000, "segment_0189F000")
+DEFINE_DMA_ENTRY(segment_018A0000, "segment_018A0000")
+DEFINE_DMA_ENTRY(segment_018A1000, "segment_018A1000")
+DEFINE_DMA_ENTRY(segment_018A2000, "segment_018A2000")
+DEFINE_DMA_ENTRY(segment_018A3000, "segment_018A3000")
+DEFINE_DMA_ENTRY(segment_018A4000, "segment_018A4000")
+DEFINE_DMA_ENTRY(segment_018A5000, "segment_018A5000")
+DEFINE_DMA_ENTRY(segment_018A6000, "segment_018A6000")
+DEFINE_DMA_ENTRY(segment_018A7000, "segment_018A7000")
+DEFINE_DMA_ENTRY(segment_018A8000, "segment_018A8000")
+DEFINE_DMA_ENTRY(segment_018A9000, "segment_018A9000")
+DEFINE_DMA_ENTRY(segment_018AA000, "segment_018AA000")
+DEFINE_DMA_ENTRY(segment_018AB000, "segment_018AB000")
+DEFINE_DMA_ENTRY(segment_018AC000, "segment_018AC000")
+DEFINE_DMA_ENTRY(segment_018AD000, "segment_018AD000")
+DEFINE_DMA_ENTRY(segment_018AE000, "segment_018AE000")
+DEFINE_DMA_ENTRY(segment_018AF000, "segment_018AF000")
+DEFINE_DMA_ENTRY(segment_018B0000, "segment_018B0000")
+DEFINE_DMA_ENTRY(segment_018B1000, "segment_018B1000")
+DEFINE_DMA_ENTRY(segment_018B2000, "segment_018B2000")
+DEFINE_DMA_ENTRY(segment_018B3000, "segment_018B3000")
+DEFINE_DMA_ENTRY(segment_018B4000, "segment_018B4000")
+DEFINE_DMA_ENTRY(segment_018B5000, "segment_018B5000")
+DEFINE_DMA_ENTRY(segment_018B6000, "segment_018B6000")
+DEFINE_DMA_ENTRY(segment_018B7000, "segment_018B7000")
+DEFINE_DMA_ENTRY(segment_018B8000, "segment_018B8000")
+DEFINE_DMA_ENTRY(segment_018B9000, "segment_018B9000")
+DEFINE_DMA_ENTRY(segment_018BA000, "segment_018BA000")
+DEFINE_DMA_ENTRY(segment_018BB000, "segment_018BB000")
+DEFINE_DMA_ENTRY(segment_018BC000, "segment_018BC000")
+DEFINE_DMA_ENTRY(segment_018C4000, "segment_018C4000")
+DEFINE_DMA_ENTRY(segment_018C7000, "segment_018C7000")
+DEFINE_DMA_ENTRY(segment_018C8000, "segment_018C8000")
+DEFINE_DMA_ENTRY(segment_018C9000, "segment_018C9000")
+DEFINE_DMA_ENTRY(segment_018CA000, "segment_018CA000")
+DEFINE_DMA_ENTRY(segment_018CB000, "segment_018CB000")
+DEFINE_DMA_ENTRY(segment_018CC000, "segment_018CC000")
+DEFINE_DMA_ENTRY(segment_018CD000, "segment_018CD000")
+DEFINE_DMA_ENTRY(segment_018CE000, "segment_018CE000")
+DEFINE_DMA_ENTRY(segment_018CF000, "segment_018CF000")
+DEFINE_DMA_ENTRY(segment_018D0000, "segment_018D0000")
+DEFINE_DMA_ENTRY(segment_018D1000, "segment_018D1000")
+DEFINE_DMA_ENTRY(segment_018D2000, "segment_018D2000")
+DEFINE_DMA_ENTRY(segment_018D3000, "segment_018D3000")
+DEFINE_DMA_ENTRY(segment_018D4000, "segment_018D4000")
+DEFINE_DMA_ENTRY(segment_018D5000, "segment_018D5000")
+DEFINE_DMA_ENTRY(segment_018D6000, "segment_018D6000")
+DEFINE_DMA_ENTRY(segment_018D7000, "segment_018D7000")
+DEFINE_DMA_ENTRY(segment_018D8000, "segment_018D8000")
+DEFINE_DMA_ENTRY(segment_018D9000, "segment_018D9000")
+DEFINE_DMA_ENTRY(segment_018DA000, "segment_018DA000")
+DEFINE_DMA_ENTRY(segment_018DB000, "segment_018DB000")
+DEFINE_DMA_ENTRY(segment_018DC000, "segment_018DC000")
+DEFINE_DMA_ENTRY(segment_018DD000, "segment_018DD000")
+DEFINE_DMA_ENTRY(segment_018DE000, "segment_018DE000")
+DEFINE_DMA_ENTRY(segment_018DF000, "segment_018DF000")
+DEFINE_DMA_ENTRY(segment_018E0000, "segment_018E0000")
+DEFINE_DMA_ENTRY(segment_018E1000, "segment_018E1000")
+DEFINE_DMA_ENTRY(segment_018E2000, "segment_018E2000")
+DEFINE_DMA_ENTRY(segment_018E3000, "segment_018E3000")
+DEFINE_DMA_ENTRY(segment_018E4000, "segment_018E4000")
+DEFINE_DMA_ENTRY(segment_018E5000, "segment_018E5000")
+DEFINE_DMA_ENTRY(segment_018E6000, "segment_018E6000")
+DEFINE_DMA_ENTRY(segment_018E7000, "segment_018E7000")
+DEFINE_DMA_ENTRY(segment_018E8000, "segment_018E8000")
+DEFINE_DMA_ENTRY(segment_018E9000, "segment_018E9000")
+DEFINE_DMA_ENTRY(segment_018EA000, "segment_018EA000")
+DEFINE_DMA_ENTRY(segment_018EB000, "segment_018EB000")
+DEFINE_DMA_ENTRY(segment_018EC000, "segment_018EC000")
+DEFINE_DMA_ENTRY(segment_018ED000, "segment_018ED000")
+DEFINE_DMA_ENTRY(segment_018EE000, "segment_018EE000")
+DEFINE_DMA_ENTRY(segment_018EF000, "segment_018EF000")
+DEFINE_DMA_ENTRY(segment_018F0000, "segment_018F0000")
+DEFINE_DMA_ENTRY(segment_018F1000, "segment_018F1000")
+DEFINE_DMA_ENTRY(segment_018F2000, "segment_018F2000")
+DEFINE_DMA_ENTRY(segment_018F3000, "segment_018F3000")
+DEFINE_DMA_ENTRY(segment_018F4000, "segment_018F4000")
+DEFINE_DMA_ENTRY(segment_018F5000, "segment_018F5000")
+DEFINE_DMA_ENTRY(segment_018F6000, "segment_018F6000")
+DEFINE_DMA_ENTRY(segment_018F7000, "segment_018F7000")
+DEFINE_DMA_ENTRY(segment_018F8000, "segment_018F8000")
+DEFINE_DMA_ENTRY(segment_018F9000, "segment_018F9000")
+DEFINE_DMA_ENTRY(segment_018FA000, "segment_018FA000")
+DEFINE_DMA_ENTRY(segment_018FB000, "segment_018FB000")
+DEFINE_DMA_ENTRY(segment_018FC000, "segment_018FC000")
+DEFINE_DMA_ENTRY(segment_018FD000, "segment_018FD000")
+DEFINE_DMA_ENTRY(segment_018FE000, "segment_018FE000")
+DEFINE_DMA_ENTRY(segment_018FF000, "segment_018FF000")
+DEFINE_DMA_ENTRY(segment_01900000, "segment_01900000")
+DEFINE_DMA_ENTRY(segment_01901000, "segment_01901000")
+DEFINE_DMA_ENTRY(segment_01902000, "segment_01902000")
+DEFINE_DMA_ENTRY(segment_01903000, "segment_01903000")
+DEFINE_DMA_ENTRY(segment_01904000, "segment_01904000")
+DEFINE_DMA_ENTRY(segment_01905000, "segment_01905000")
+DEFINE_DMA_ENTRY(segment_01906000, "segment_01906000")
+DEFINE_DMA_ENTRY(anime_model_1_static, "anime_model_1_static")
+DEFINE_DMA_ENTRY(anime_model_2_static, "anime_model_2_static")
+DEFINE_DMA_ENTRY(anime_model_3_static, "anime_model_3_static")
+DEFINE_DMA_ENTRY(anime_model_4_static, "anime_model_4_static")
+DEFINE_DMA_ENTRY(anime_model_5_static, "anime_model_5_static")
+DEFINE_DMA_ENTRY(anime_model_6_static, "anime_model_6_static")
+DEFINE_DMA_ENTRY(anime_texture_1_static, "anime_texture_1_static")
+DEFINE_DMA_ENTRY(anime_texture_2_static, "anime_texture_2_static")
+DEFINE_DMA_ENTRY(anime_texture_3_static, "anime_texture_3_static")
+DEFINE_DMA_ENTRY(anime_texture_4_static, "anime_texture_4_static")
+DEFINE_DMA_ENTRY(anime_texture_5_static, "anime_texture_5_static")
+DEFINE_DMA_ENTRY(anime_texture_6_static, "anime_texture_6_static")
+DEFINE_DMA_ENTRY(softsprite_matrix_static, "softsprite_matrix_static")
diff --git a/include/z_std_dma.h b/include/z_std_dma.h
index 36a4051..e152956 100644
--- a/include/z_std_dma.h
+++ b/include/z_std_dma.h
@@ -2,6 +2,16 @@
#define Z_STD_DMA_H
#include "ultra64.h"
+#include "other_types.h"
+
+typedef struct DmaEntry {
+ /* 0x0 */ RomOffset vromStart;
+ /* 0x4 */ RomOffset vromEnd;
+ /* 0x8 */ RomOffset romStart;
+ /* 0xC */ RomOffset romEnd;
+} DmaEntry; // size = 0x10
+
+extern DmaEntry gDmaDataTable[];
// void func_800263F0_jp();
// void DmaMgr_DmaRomToRam();
diff --git a/src/dmadata/dmadata.c b/src/dmadata/dmadata.c
new file mode 100644
index 0000000..45d5030
--- /dev/null
+++ b/src/dmadata/dmadata.c
@@ -0,0 +1,21 @@
+#include "segment_symbols.h"
+#include "z_std_dma.h"
+
+// Linker symbol declarations (used in the table below)
+#define DEFINE_DMA_ENTRY(name, _nameString) DECLARE_ROM_SEGMENT(name);
+
+#include "tables/dmadata_table.h"
+
+#undef DEFINE_DMA_ENTRY
+
+// dmadata Table definition
+#define DEFINE_DMA_ENTRY(name, _1) { SEGMENT_ROM_START(name), SEGMENT_ROM_END(name), SEGMENT_ROM_START(name), 0 },
+
+DmaEntry gDmaDataTable[] = {
+#include "tables/dmadata_table.h"
+ { 0 },
+};
+
+#undef DEFINE_DMA_ENTRY
+
+u8 sDmaDataPadding[0xF0] = { 0 };
diff --git a/tools/Makefile b/tools/Makefile
index 2e155fc..308b437 100644
--- a/tools/Makefile
+++ b/tools/Makefile
@@ -18,6 +18,8 @@ IDO_7_1_DIR := ido/$(DETECTED_OS)/7.1
IDO_7_1 := $(IDO_7_1_DIR)/cc
all: $(IDO_5_3) $(IDO_7_1)
+ $(MAKE) -C fado
+ $(MAKE) -C z64compress
clean:
$(RM) -rf $(IDO_5_3_DIR) $(IDO_7_1_DIR)
diff --git a/tools/z64compress/.editorconfig b/tools/z64compress/.editorconfig
new file mode 100644
index 0000000..342ff35
--- /dev/null
+++ b/tools/z64compress/.editorconfig
@@ -0,0 +1,15 @@
+root = true
+
+[*]
+end_of_line = lf
+insert_final_newline = true
+
+# Matches multiple files with brace expansion notation
+[*.{c,h,ch}]
+charset = utf-8
+indent_style = tab
+indent_size = 3
+trim_trailing_whitespace = false
+
+[*.md]
+trim_trailing_whitespace = false
diff --git a/tools/z64compress/.gitignore b/tools/z64compress/.gitignore
new file mode 100644
index 0000000..6a47e05
--- /dev/null
+++ b/tools/z64compress/.gitignore
@@ -0,0 +1,3 @@
+bin/
+o/
+z64compress
diff --git a/tools/z64compress/.gitrepo b/tools/z64compress/.gitrepo
new file mode 100644
index 0000000..dd77cbd
--- /dev/null
+++ b/tools/z64compress/.gitrepo
@@ -0,0 +1,12 @@
+; DO NOT EDIT (unless you know what you are doing)
+;
+; This subdirectory is a git "subrepo", and this file is maintained by the
+; git-subrepo command. See https://github.com/git-commands/git-subrepo#readme
+;
+[subrepo]
+ remote = git@github.com:z64tools/z64compress.git
+ branch = 5da3132606e4fd427a8d72b8428e4f921cd6e56f
+ commit = 5da3132606e4fd427a8d72b8428e4f921cd6e56f
+ parent = f9be35e4bc4894d44e23cd349992c6d369e9e623
+ method = merge
+ cmdver = 0.4.3
diff --git a/tools/z64compress/LICENSE b/tools/z64compress/LICENSE
new file mode 100644
index 0000000..f288702
--- /dev/null
+++ b/tools/z64compress/LICENSE
@@ -0,0 +1,674 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<https://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+<https://www.gnu.org/licenses/why-not-lgpl.html>.
diff --git a/tools/z64compress/Makefile b/tools/z64compress/Makefile
new file mode 100644
index 0000000..f16167c
--- /dev/null
+++ b/tools/z64compress/Makefile
@@ -0,0 +1,47 @@
+CC := gcc
+CFLAGS := -DNDEBUG -s -Os -flto -Wall -Wextra
+
+# Target platform, specify with TARGET= on the command line, linux64 is default.
+# Currently supported: linux64, linux32, win32
+TARGET ?= linux64
+
+ifeq ($(TARGET),linux32)
+ TARGET_CFLAGS := -m32
+else ifeq ($(TARGET),win32)
+# If using a cross compiler, specify the compiler executable on the command line.
+# make TARGET=win32 CC=~/c/mxe/usr/bin/i686-w64-mingw32.static-gcc
+ TARGET_LIBS := -mconsole -municode
+else ifneq ($(TARGET),linux64)
+ $(error Supported targets: linux64, linux32, win32)
+endif
+
+# Whether to use native optimizations, specify with NATIVE_OPT=0/1 on the command line, default is 0.
+# This is not supported by all compilers which is particularly an issue on Mac, and may inhibit tests.
+NATIVE_OPT ?= 0
+ifeq ($(NATIVE_OPT),1)
+ TARGET_CFLAGS += -march=native -mtune=native
+endif
+
+OBJ_DIR := o/$(TARGET)
+
+$(OBJ_DIR)/src/enc/%.o: CFLAGS := -DNDEBUG -s -Ofast -flto -Wall
+
+SRC_DIRS := $(shell find src -type d)
+C_FILES := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.c))
+O_FILES := $(foreach f,$(C_FILES:.c=.o),$(OBJ_DIR)/$f)
+
+# Make build directories
+$(shell mkdir -p $(foreach dir,$(SRC_DIRS),$(OBJ_DIR)/$(dir)))
+
+.PHONY: all clean
+
+all: z64compress
+
+z64compress: $(O_FILES)
+ $(CC) $(TARGET_CFLAGS) $(CFLAGS) $(O_FILES) -lm -lpthread $(TARGET_LIBS) -o z64compress
+
+$(OBJ_DIR)/%.o: %.c
+ $(CC) -c $(TARGET_CFLAGS) $(CFLAGS) $< -o $@
+
+clean:
+ $(RM) -rf z64compress bin o
diff --git a/tools/z64compress/README.md b/tools/z64compress/README.md
new file mode 100644
index 0000000..1731a8a
--- /dev/null
+++ b/tools/z64compress/README.md
@@ -0,0 +1,94 @@
+# z64compress
+
+`z64compress` is a program for compressing Zelda 64 roms: be they retail, hacked traditionally, or custom-built from the [`Ocarina of Time`](https://github.com/zeldaret/oot) or [`Majora's Mask`](https://github.com/zeldaret/mm) reverse engineering projects. It is written in highly efficient C and leverages the power of multithreading to make compression as fast as possible. To reduce overhead on subsequent compressions, an optional cache directory can be specified.
+
+In addition to the default `yaz`, it supports some faster and more compact algorithms such as `lzo`, `ucl`, and `aplib`. In order to use these, grab patches or code from my [`z64enc` repository](https://github.com/z64me/z64enc).
+
+If you add an algorithm, please make sure `valgrind` reports no memory leaks or other errors before making a pull request. Thank you!
+
+(By the way, `valgrind` works better without the `-march=native -mtune=native` optimizations, so turn those off when testing `valgrind`.)
+
+## Usage
+This is a command line application. Learn from these common examples and adapt the arguments to your needs:
+```
+ compressing oot debug
+ --in "path/to/in.z64"
+ --out "path/to/out.z64"
+ --mb 32
+ --codec yaz
+ --cache "path/to/cache"
+ --dma "0x12F70,1548"
+ --compress "9-14,28-END"
+ --threads 4
+
+ compressing oot ntsc 1.0
+ --in "path/to/in.z64"
+ --out "path/to/out.z64"
+ --mb 32
+ --codec yaz
+ --cache "path/to/cache"
+ --dma "0x7430,1526"
+ --compress "10-14,27-END"
+ --threads 4
+
+ compressing mm usa
+ --in "path/to/in.z64"
+ --out "path/to/out.z64"
+ --mb 32
+ --codec yaz
+ --cache "path/to/cache"
+ --dma "0x1A500,1568"
+ --compress "10-14,23,24,31-END"
+ --skip "1127"
+ --repack "15-20,22"
+ --threads 4
+```
+
+## Arguments
+```
+ --in uncompressed input rom
+
+ --out compressed output rom
+
+ --matching attempt matching compression at the cost of
+ some optimizations and reduced performance
+
+ --mb how many mb the compressed rom should be
+
+ --codec currently supported codecs
+ yaz
+ ucl
+ lzo
+ aplib
+ * to use non-yaz codecs, find patches
+ and code on my z64enc repo
+
+ --cache is optional and won't be created if
+ no path is specified (having a cache
+ makes subsequent compressions faster)
+ * pro-tip: linux users who don't want a
+ cache to persist across power cycles
+ can use the path "/tmp/z64compress"
+
+ --dma specify dmadata address and count
+
+ --compress enable compression on specified files
+
+ --skip disable compression on specified files
+
+ --repack handles Majora's Mask archives
+
+ --threads optional multithreading;
+ exclude this argument to disable it
+
+ --only-stdout reserve stderr for errors and print
+ everything else to stdout
+
+ arguments are executed as they
+ are parsed, so order matters!
+```
+
+## Building
+I have included shell scripts for building Linux and Windows binaries. Windows binaries are built using a cross compiler ([I recommend `MXE`](https://mxe.cc/)).
+
+Alternatively, a Makefile-based build system is provided. Choose the target platform with `make TARGET=linux64|linux32|win32`, default is linux64. If building for windows with a cross compiler, specify the compiler executable with `make TARGET=win32 CC=/path/to/executable`.
diff --git a/tools/z64compress/release-linux.sh b/tools/z64compress/release-linux.sh
new file mode 100755
index 0000000..24f4cb2
--- /dev/null
+++ b/tools/z64compress/release-linux.sh
@@ -0,0 +1,14 @@
+# build compression functions (slow)
+gcc -DNDEBUG -s -Ofast -flto -lm -c -Wall -march=native -mtune=native src/enc/*.c src/enc/lzo/*.c src/enc/ucl/comp/*.c src/enc/apultra/*.c
+mkdir -p o
+mv *.o o
+
+# build everything else
+gcc -o z64compress -DNDEBUG src/*.c o/*.o -Wall -Wextra -s -Os -flto -lpthread -march=native -mtune=native
+
+# move to bin directory
+mkdir -p bin/linux64
+mv z64compress bin/linux64
+
+
+
diff --git a/tools/z64compress/release-linux32.sh b/tools/z64compress/release-linux32.sh
new file mode 100755
index 0000000..9f413e2
--- /dev/null
+++ b/tools/z64compress/release-linux32.sh
@@ -0,0 +1,14 @@
+# build compression functions (slow)
+gcc -m32 -DNDEBUG -s -Ofast -flto -lm -c -Wall -march=native -mtune=native src/enc/*.c src/enc/lzo/*.c src/enc/ucl/comp/*.c src/enc/apultra/*.c
+mkdir -p o
+mv *.o o
+
+# build everything else
+gcc -m32 -o z64compress -DNDEBUG src/*.c o/*.o -Wall -Wextra -s -Os -flto -lpthread -march=native -mtune=native
+
+# move to bin directory
+mkdir -p bin/linux32
+mv z64compress bin/linux32
+
+
+
diff --git a/tools/z64compress/release-win32.sh b/tools/z64compress/release-win32.sh
new file mode 100755
index 0000000..5b11581
--- /dev/null
+++ b/tools/z64compress/release-win32.sh
@@ -0,0 +1,12 @@
+# build compression functions (slow)
+~/c/mxe/usr/bin/i686-w64-mingw32.static-gcc -DNDEBUG -s -Ofast -flto -lm -c -Wall src/enc/*.c src/enc/lzo/*.c src/enc/ucl/comp/*.c src/enc/apultra/*.c
+mkdir -p o
+mv *.o o
+
+# build everything else
+~/c/mxe/usr/bin/i686-w64-mingw32.static-gcc -o z64compress.exe -DNDEBUG src/*.c o/*.o -Wall -Wextra -s -Os -flto -lpthread -mconsole -municode
+
+# move to bin directory
+mkdir -p bin/win32
+mv z64compress.exe bin/win32
+
diff --git a/tools/z64compress/src/enc/aplib.c b/tools/z64compress/src/enc/aplib.c
new file mode 100644
index 0000000..e4aa95f
--- /dev/null
+++ b/tools/z64compress/src/enc/aplib.c
@@ -0,0 +1,48 @@
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include "apultra/libapultra.h"
+
+static void compression_progress(long long nOriginalSize, long long nCompressedSize) {
+ /* do nothing */
+}
+
+int
+aplenc(
+ void *_src
+ , unsigned src_sz
+ , void *_dst
+ , unsigned *dst_sz
+ , void *_ctx
+)
+{
+ unsigned char *src = _src;
+ unsigned char *dst = _dst;
+ int nMaxCompressedSize = apultra_get_max_compressed_size(src_sz);
+ apultra_stats stats;
+
+ int hlen = 8; /* header length; required due to MM's archives */
+ memset(dst, 0, hlen);
+ memcpy(dst, "APL0", 4);
+ dst[4] = (src_sz >> 24);
+ dst[5] = (src_sz >> 16);
+ dst[6] = (src_sz >> 8);
+ dst[7] = (src_sz >> 0);
+
+ *dst_sz = apultra_compress(
+ src
+ , dst + hlen
+ , src_sz
+ , nMaxCompressedSize
+ , 0 /* flags */
+ , 0 /* nMaxWindowSize */
+ , 0 /* nDictionarySize */
+ , compression_progress
+ , &stats
+ );
+
+ *dst_sz = *dst_sz + hlen;
+
+ return 0;
+}
+
diff --git a/tools/z64compress/src/enc/apultra/apultra.c b/tools/z64compress/src/enc/apultra/apultra.c
new file mode 100644
index 0000000..a61d6b4
--- /dev/null
+++ b/tools/z64compress/src/enc/apultra/apultra.c
@@ -0,0 +1,1225 @@
+#if 0
+/*
+ * apultra.c - command line compression utility for the apultra library
+ *
+ * Copyright (C) 2019 Emmanuel Marty
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ * claim that you wrote the original software. If you use this software
+ * in a product, an acknowledgment in the product documentation would be
+ * appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ * misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+ */
+
+/*
+ * Uses the libdivsufsort library Copyright (c) 2003-2008 Yuta Mori
+ *
+ * Inspired by cap by Sven-ke Dahl. https://github.com/svendahl/cap
+ * Also inspired by Charles Bloom's compression blog. http://cbloomrants.blogspot.com/
+ * With ideas from LZ4 by Yann Collet. https://github.com/lz4/lz4
+ * With help and support from spke <zxintrospec@gmail.com>
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#ifdef _WIN32
+#include <windows.h>
+#include <sys/timeb.h>
+#else
+#include <sys/time.h>
+#endif
+#include "libapultra.h"
+
+#define OPT_VERBOSE 1
+#define OPT_STATS 2
+#define OPT_BACKWARD 4
+
+#define TOOL_VERSION "1.4.1"
+
+/*---------------------------------------------------------------------------*/
+
+#ifdef _WIN32
+LARGE_INTEGER hpc_frequency;
+BOOL hpc_available = FALSE;
+#endif
+
+static void do_init_time() {
+#ifdef _WIN32
+ hpc_frequency.QuadPart = 0;
+ hpc_available = QueryPerformanceFrequency(&hpc_frequency);
+#endif
+}
+
+static long long do_get_time() {
+ long long nTime;
+
+#ifdef _WIN32
+ if (hpc_available) {
+ LARGE_INTEGER nCurTime;
+
+ /* Use HPC hardware for best precision */
+ QueryPerformanceCounter(&nCurTime);
+ nTime = (long long)(nCurTime.QuadPart * 1000000LL / hpc_frequency.QuadPart);
+ }
+ else {
+ struct _timeb tb;
+ _ftime(&tb);
+
+ nTime = ((long long)tb.time * 1000LL + (long long)tb.millitm) * 1000LL;
+ }
+#else
+ struct timeval tm;
+ gettimeofday(&tm, NULL);
+
+ nTime = (long long)tm.tv_sec * 1000000LL + (long long)tm.tv_usec;
+#endif
+ return nTime;
+}
+
+static void do_reverse_buffer(unsigned char *pBuffer, size_t nBufferSize) {
+ size_t nMidPoint = nBufferSize / 2;
+ size_t i, j;
+
+ for (i = 0, j = nBufferSize - 1; i < nMidPoint; i++, j--) {
+ unsigned char c = pBuffer[i];
+ pBuffer[i] = pBuffer[j];
+ pBuffer[j] = c;
+ }
+}
+
+/*---------------------------------------------------------------------------*/
+
+static void compression_progress(long long nOriginalSize, long long nCompressedSize) {
+ if (nOriginalSize >= 512 * 1024) {
+ fprintf(stdout, "\r%lld => %lld (%g %%) \b\b\b\b\b", nOriginalSize, nCompressedSize, (double)(nCompressedSize * 100.0 / nOriginalSize));
+ fflush(stdout);
+ }
+}
+
+static int do_compress(const char *pszInFilename, const char *pszOutFilename, const char *pszDictionaryFilename, const unsigned int nOptions, const unsigned int nMaxWindowSize) {
+ long long nStartTime = 0LL, nEndTime = 0LL;
+ size_t nOriginalSize = 0L, nCompressedSize = 0L, nMaxCompressedSize;
+ int nFlags = 0;
+ apultra_stats stats;
+ unsigned char *pDecompressedData;
+ unsigned char *pCompressedData;
+
+ if (nOptions & OPT_VERBOSE) {
+ nStartTime = do_get_time();
+ }
+
+ FILE* f_dict = NULL;
+ size_t nDictionarySize = 0;
+ if (pszDictionaryFilename) {
+ /* Open the dictionary */
+ f_dict = fopen(pszDictionaryFilename, "rb");
+ if (!f_dict) {
+ fprintf(stderr, "error opening dictionary '%s' for reading\n", pszDictionaryFilename);
+ return 100;
+ }
+
+ /* Get dictionary size */
+ fseek(f_dict, 0, SEEK_END);
+ nDictionarySize = (size_t)ftell(f_dict);
+ fseek(f_dict, 0, SEEK_SET);
+
+ if (nDictionarySize > BLOCK_SIZE) nDictionarySize = BLOCK_SIZE;
+ }
+
+ /* Read the whole original file in memory */
+
+ FILE *f_in = fopen(pszInFilename, "rb");
+ if (!f_in) {
+ if (f_dict) fclose(f_dict);
+ fprintf(stderr, "error opening '%s' for reading\n", pszInFilename);
+ return 100;
+ }
+
+ fseek(f_in, 0, SEEK_END);
+ nOriginalSize = (size_t)ftell(f_in);
+ fseek(f_in, 0, SEEK_SET);
+
+ pDecompressedData = (unsigned char*)malloc(nDictionarySize + nOriginalSize);
+ if (!pDecompressedData) {
+ fclose(f_in);
+ if (f_dict) fclose(f_dict);
+ fprintf(stderr, "out of memory for reading '%s', %zd bytes needed\n", pszInFilename, nOriginalSize);
+ return 100;
+ }
+
+ if (f_dict) {
+ /* Read dictionary data */
+ if (fread(pDecompressedData + ((nOptions & OPT_BACKWARD) ? nOriginalSize : 0), 1, nDictionarySize, f_dict) != nDictionarySize) {
+ free(pDecompressedData);
+ fclose(f_in);
+ fclose(f_dict);
+ fprintf(stderr, "I/O error while reading dictionary '%s'\n", pszDictionaryFilename);
+ return 100;
+ }
+
+ fclose(f_dict);
+ f_dict = NULL;
+ }
+
+ /* Read input file data */
+ if (fread(pDecompressedData + ((nOptions & OPT_BACKWARD) ? 0 : nDictionarySize), 1, nOriginalSize, f_in) != nOriginalSize) {
+ free(pDecompressedData);
+ fclose(f_in);
+ fprintf(stderr, "I/O error while reading '%s'\n", pszInFilename);
+ return 100;
+ }
+
+ fclose(f_in);
+
+ if (nOptions & OPT_BACKWARD)
+ do_reverse_buffer(pDecompressedData, nDictionarySize + nOriginalSize);
+
+ /* Allocate max compressed size */
+
+ nMaxCompressedSize = apultra_get_max_compressed_size(nDictionarySize + nOriginalSize);
+
+ pCompressedData = (unsigned char*)malloc(nMaxCompressedSize);
+ if (!pCompressedData) {
+ free(pDecompressedData);
+ fprintf(stderr, "out of memory for compressing '%s', %zd bytes needed\n", pszInFilename, nMaxCompressedSize);
+ return 100;
+ }
+
+ memset(pCompressedData, 0, nMaxCompressedSize);
+
+ nCompressedSize = apultra_compress(pDecompressedData, pCompressedData, nDictionarySize + nOriginalSize, nMaxCompressedSize, nFlags, nMaxWindowSize, nDictionarySize, compression_progress, &stats);
+
+ if ((nOptions & OPT_VERBOSE)) {
+ nEndTime = do_get_time();
+ }
+
+ if (nCompressedSize == -1) {
+ free(pCompressedData);
+ free(pDecompressedData);
+ fprintf(stderr, "compression error for '%s'\n", pszInFilename);
+ return 100;
+ }
+
+ if (nOptions & OPT_BACKWARD)
+ do_reverse_buffer(pCompressedData, nCompressedSize);
+
+ if (pszOutFilename) {
+ FILE *f_out;
+
+ /* Write whole compressed file out */
+
+ f_out = fopen(pszOutFilename, "wb");
+ if (f_out) {
+ fwrite(pCompressedData, 1, nCompressedSize, f_out);
+ fclose(f_out);
+ }
+ }
+
+ free(pCompressedData);
+ free(pDecompressedData);
+
+ if ((nOptions & OPT_VERBOSE)) {
+ double fDelta = ((double)(nEndTime - nStartTime)) / 1000000.0;
+ double fSpeed = ((double)nOriginalSize / 1048576.0) / fDelta;
+ fprintf(stdout, "\rCompressed '%s' in %g seconds, %.02g Mb/s, %d tokens (%g bytes/token), %d into %d bytes ==> %g %%\n",
+ pszInFilename, fDelta, fSpeed, stats.commands_divisor, (double)nOriginalSize / (double)stats.commands_divisor,
+ (int)nOriginalSize, (int)nCompressedSize, (double)(nCompressedSize * 100.0 / nOriginalSize));
+ }
+
+ if (nOptions & OPT_STATS) {
+ fprintf(stdout, "Tokens: literals: %d short matches: %d normal matches: %d large matches: %d rep matches: %d EOD: %d\n",
+ stats.num_literals, stats.num_4bit_matches, stats.num_7bit_matches, stats.num_variable_matches, stats.num_rep_matches, stats.num_eod);
+ if (stats.match_divisor > 0) {
+ fprintf(stdout, "Offsets: min: %d avg: %d max: %d count: %d\n", stats.min_offset, (int)(stats.total_offsets / (long long)stats.match_divisor), stats.max_offset, stats.match_divisor);
+ fprintf(stdout, "Match lens: min: %d avg: %d max: %d count: %d\n", stats.min_match_len, stats.total_match_lens / stats.match_divisor, stats.max_match_len, stats.match_divisor);
+ }
+ else {
+ fprintf(stdout, "Offsets: none\n");
+ fprintf(stdout, "Match lens: none\n");
+ }
+ if (stats.rle1_divisor > 0) {
+ fprintf(stdout, "RLE1 lens: min: %d avg: %d max: %d count: %d\n", stats.min_rle1_len, stats.total_rle1_lens / stats.rle1_divisor, stats.max_rle1_len, stats.rle1_divisor);
+ }
+ else {
+ fprintf(stdout, "RLE1 lens: none\n");
+ }
+ if (stats.rle2_divisor > 0) {
+ fprintf(stdout, "RLE2 lens: min: %d avg: %d max: %d count: %d\n", stats.min_rle2_len, stats.total_rle2_lens / stats.rle2_divisor, stats.max_rle2_len, stats.rle2_divisor);
+ }
+ else {
+ fprintf(stdout, "RLE2 lens: none\n");
+ }
+ fprintf(stdout, "Safe distance: %d (0x%X)\n", stats.safe_dist, stats.safe_dist);
+ }
+ return 0;
+}
+
+/*---------------------------------------------------------------------------*/
+
+static int do_decompress(const char *pszInFilename, const char *pszOutFilename, const char *pszDictionaryFilename, const unsigned int nOptions) {
+ long long nStartTime = 0LL, nEndTime = 0LL;
+ size_t nCompressedSize, nMaxDecompressedSize, nOriginalSize;
+ unsigned char *pCompressedData;
+ unsigned char *pDecompressedData;
+ int nFlags = 0;
+
+ /* Read the whole compressed file in memory */
+
+ FILE *f_in = fopen(pszInFilename, "rb");
+ if (!f_in) {
+ fprintf(stderr, "error opening '%s' for reading\n", pszInFilename);
+ return 100;
+ }
+
+ fseek(f_in, 0, SEEK_END);
+ nCompressedSize = (size_t)ftell(f_in);
+ fseek(f_in, 0, SEEK_SET);
+
+ pCompressedData = (unsigned char*)malloc(nCompressedSize);
+ if (!pCompressedData) {
+ fclose(f_in);
+ fprintf(stderr, "out of memory for reading '%s', %zd bytes needed\n", pszInFilename, nCompressedSize);
+ return 100;
+ }
+
+ if (fread(pCompressedData, 1, nCompressedSize, f_in) != nCompressedSize) {
+ free(pCompressedData);
+ fclose(f_in);
+ fprintf(stderr, "I/O error while reading '%s'\n", pszInFilename);
+ return 100;
+ }
+
+ fclose(f_in);
+
+ if (nOptions & OPT_BACKWARD)
+ do_reverse_buffer(pCompressedData, nCompressedSize);
+
+ /* Get max decompressed size */
+
+ nMaxDecompressedSize = apultra_get_max_decompressed_size(pCompressedData, nCompressedSize, nFlags);
+ if (nMaxDecompressedSize == -1) {
+ free(pCompressedData);
+ fprintf(stderr, "invalid compressed format for file '%s'\n", pszInFilename);
+ return 100;
+ }
+
+ FILE* f_dict = NULL;
+ size_t nDictionarySize = 0;
+ if (pszDictionaryFilename) {
+ /* Open the dictionary */
+ f_dict = fopen(pszDictionaryFilename, "rb");
+ if (!f_dict) {
+ fprintf(stderr, "error opening dictionary '%s' for reading\n", pszDictionaryFilename);
+ return 100;
+ }
+
+ /* Get dictionary size */
+ fseek(f_dict, 0, SEEK_END);
+ nDictionarySize = (size_t)ftell(f_dict);
+ fseek(f_dict, 0, SEEK_SET);
+
+ if (nDictionarySize > BLOCK_SIZE) nDictionarySize = BLOCK_SIZE;
+ }
+
+ /* Allocate max decompressed size */
+
+ pDecompressedData = (unsigned char*)malloc(nDictionarySize + nMaxDecompressedSize);
+ if (!pDecompressedData) {
+ free(pCompressedData);
+ if (f_dict) fclose(f_dict);
+ fprintf(stderr, "out of memory for decompressing '%s', %zd bytes needed\n", pszInFilename, nMaxDecompressedSize);
+ return 100;
+ }
+
+ memset(pDecompressedData, 0, nDictionarySize + nMaxDecompressedSize);
+
+ if (f_dict) {
+ /* Read dictionary data */
+ if (fread(pDecompressedData, 1, nDictionarySize, f_dict) != nDictionarySize) {
+ free(pDecompressedData);
+ fclose(f_in);
+ fclose(f_dict);
+ fprintf(stderr, "I/O error while reading dictionary '%s'\n", pszDictionaryFilename);
+ return 100;
+ }
+
+ fclose(f_dict);
+ f_dict = NULL;
+
+ if (nOptions & OPT_BACKWARD)
+ do_reverse_buffer(pDecompressedData, nDictionarySize);
+ }
+
+ if (nOptions & OPT_VERBOSE) {
+ nStartTime = do_get_time();
+ }
+
+ nOriginalSize = apultra_decompress(pCompressedData, pDecompressedData, nCompressedSize, nMaxDecompressedSize, nDictionarySize, nFlags);
+ if (nOriginalSize == -1) {
+ free(pDecompressedData);
+ free(pCompressedData);
+
+ fprintf(stderr, "decompression error for '%s'\n", pszInFilename);
+ return 100;
+ }
+
+ if (nOptions & OPT_BACKWARD)
+ do_reverse_buffer(pDecompressedData + nDictionarySize, nOriginalSize);
+
+ if (pszOutFilename) {
+ FILE *f_out;
+
+ /* Write whole decompressed file out */
+
+ f_out = fopen(pszOutFilename, "wb");
+ if (f_out) {
+ fwrite(pDecompressedData + nDictionarySize, 1, nOriginalSize, f_out);
+ fclose(f_out);
+ }
+ }
+
+ free(pDecompressedData);
+ free(pCompressedData);
+
+ if (nOptions & OPT_VERBOSE) {
+ nEndTime = do_get_time();
+ double fDelta = ((double)(nEndTime - nStartTime)) / 1000000.0;
+ double fSpeed = ((double)nOriginalSize / 1048576.0) / fDelta;
+ fprintf(stdout, "Decompressed '%s' in %g seconds, %g Mb/s\n",
+ pszInFilename, fDelta, fSpeed);
+ }
+
+ return 0;
+}
+
+/*---------------------------------------------------------------------------*/
+
+static int do_compare(const char *pszInFilename, const char *pszOutFilename, const char *pszDictionaryFilename, const unsigned int nOptions) {
+ long long nStartTime = 0LL, nEndTime = 0LL;
+ size_t nCompressedSize, nMaxDecompressedSize, nOriginalSize, nDecompressedSize;
+ unsigned char *pCompressedData = NULL;
+ unsigned char *pOriginalData = NULL;
+ unsigned char *pDecompressedData = NULL;
+ int nFlags = 0;
+
+ /* Read the whole compressed file in memory */
+
+ FILE *f_in = fopen(pszInFilename, "rb");
+ if (!f_in) {
+ fprintf(stderr, "error opening '%s' for reading\n", pszInFilename);
+ return 100;
+ }
+
+ fseek(f_in, 0, SEEK_END);
+ nCompressedSize = (size_t)ftell(f_in);
+ fseek(f_in, 0, SEEK_SET);
+
+ pCompressedData = (unsigned char*)malloc(nCompressedSize);
+ if (!pCompressedData) {
+ fclose(f_in);
+ fprintf(stderr, "out of memory for reading '%s', %zd bytes needed\n", pszInFilename, nCompressedSize);
+ return 100;
+ }
+
+ if (fread(pCompressedData, 1, nCompressedSize, f_in) != nCompressedSize) {
+ free(pCompressedData);
+ fclose(f_in);
+ fprintf(stderr, "I/O error while reading '%s'\n", pszInFilename);
+ return 100;
+ }
+
+ fclose(f_in);
+
+ if (nOptions & OPT_BACKWARD)
+ do_reverse_buffer(pCompressedData, nCompressedSize);
+
+ /* Read the whole original file in memory */
+
+ f_in = fopen(pszOutFilename, "rb");
+ if (!f_in) {
+ free(pCompressedData);
+ fprintf(stderr, "error opening '%s' for reading\n", pszInFilename);
+ return 100;
+ }
+
+ fseek(f_in, 0, SEEK_END);
+ nOriginalSize = (size_t)ftell(f_in);
+ fseek(f_in, 0, SEEK_SET);
+
+ pOriginalData = (unsigned char*)malloc(nOriginalSize);
+ if (!pOriginalData) {
+ fclose(f_in);
+ free(pCompressedData);
+ fprintf(stderr, "out of memory for reading '%s', %zd bytes needed\n", pszInFilename, nOriginalSize);
+ return 100;
+ }
+
+ if (fread(pOriginalData, 1, nOriginalSize, f_in) != nOriginalSize) {
+ free(pOriginalData);
+ fclose(f_in);
+ free(pCompressedData);
+ fprintf(stderr, "I/O error while reading '%s'\n", pszInFilename);
+ return 100;
+ }
+
+ fclose(f_in);
+
+ /* Get max decompressed size */
+
+ nMaxDecompressedSize = apultra_get_max_decompressed_size(pCompressedData, nCompressedSize, nFlags);
+ if (nMaxDecompressedSize == -1) {
+ free(pOriginalData);
+ free(pCompressedData);
+ fprintf(stderr, "invalid compressed format for file '%s'\n", pszInFilename);
+ return 100;
+ }
+
+ FILE* f_dict = NULL;
+ size_t nDictionarySize = 0;
+ if (pszDictionaryFilename) {
+ /* Open the dictionary */
+ f_dict = fopen(pszDictionaryFilename, "rb");
+ if (!f_dict) {
+ fprintf(stderr, "error opening dictionary '%s' for reading\n", pszDictionaryFilename);
+ return 100;
+ }
+
+ /* Get dictionary size */
+ fseek(f_dict, 0, SEEK_END);
+ nDictionarySize = (size_t)ftell(f_dict);
+ fseek(f_dict, 0, SEEK_SET);
+
+ if (nDictionarySize > BLOCK_SIZE) nDictionarySize = BLOCK_SIZE;
+ }
+
+ /* Allocate max decompressed size */
+
+ pDecompressedData = (unsigned char*)malloc(nDictionarySize + nMaxDecompressedSize);
+ if (!pDecompressedData) {
+ free(pOriginalData);
+ free(pCompressedData);
+ if (f_dict) fclose(f_dict);
+ fprintf(stderr, "out of memory for decompressing '%s', %zd bytes needed\n", pszInFilename, nMaxDecompressedSize);
+ return 100;
+ }
+
+ memset(pDecompressedData, 0, nDictionarySize + nMaxDecompressedSize);
+
+ if (f_dict) {
+ /* Read dictionary data */
+ if (fread(pDecompressedData, 1, nDictionarySize, f_dict) != nDictionarySize) {
+ free(pDecompressedData);
+ fclose(f_in);
+ fclose(f_dict);
+ fprintf(stderr, "I/O error while reading dictionary '%s'\n", pszDictionaryFilename);
+ return 100;
+ }
+
+ fclose(f_dict);
+ f_dict = NULL;
+
+ if (nOptions & OPT_BACKWARD)
+ do_reverse_buffer(pDecompressedData, nDictionarySize);
+ }
+
+ if (nOptions & OPT_VERBOSE) {
+ nStartTime = do_get_time();
+ }
+
+ nDecompressedSize = apultra_decompress(pCompressedData, pDecompressedData, nCompressedSize, nMaxDecompressedSize, nDictionarySize, nFlags);
+ if (nDecompressedSize == -1) {
+ free(pDecompressedData);
+ free(pOriginalData);
+ free(pCompressedData);
+
+ fprintf(stderr, "decompression error for '%s'\n", pszInFilename);
+ return 100;
+ }
+
+ if (nOptions & OPT_BACKWARD)
+ do_reverse_buffer(pDecompressedData + nDictionarySize, nDecompressedSize);
+
+ if (nDecompressedSize != nOriginalSize || memcmp(pDecompressedData + nDictionarySize, pOriginalData, nOriginalSize)) {
+ fprintf(stderr, "error comparing compressed file '%s' with original '%s'\n", pszInFilename, pszOutFilename);
+ return 100;
+ }
+
+ free(pDecompressedData);
+ free(pOriginalData);
+ free(pCompressedData);
+
+ if (nOptions & OPT_VERBOSE) {
+ nEndTime = do_get_time();
+ double fDelta = ((double)(nEndTime - nStartTime)) / 1000000.0;
+ double fSpeed = ((double)nOriginalSize / 1048576.0) / fDelta;
+ fprintf(stdout, "Compared '%s' in %g seconds, %g Mb/s\n",
+ pszInFilename, fDelta, fSpeed);
+ }
+
+ return 0;
+}
+
+/*---------------------------------------------------------------------------*/
+
+static void generate_compressible_data(unsigned char *pBuffer, size_t nBufferSize, unsigned int nSeed, int nNumLiteralValues, float fMatchProbability) {
+ size_t nIndex = 0;
+ int nMatchProbability = (int)(fMatchProbability * 1023.0f);
+
+ srand(nSeed);
+
+ if (nIndex >= nBufferSize) return;
+ pBuffer[nIndex++] = rand() % nNumLiteralValues;
+
+ while (nIndex < nBufferSize) {
+ if ((rand() & 1023) >= nMatchProbability) {
+ size_t nLiteralCount = rand() & 127;
+ if (nLiteralCount > (nBufferSize - nIndex))
+ nLiteralCount = nBufferSize - nIndex;
+
+ while (nLiteralCount--)
+ pBuffer[nIndex++] = rand() % nNumLiteralValues;
+ }
+ else {
+ size_t nMatchLength = MIN_MATCH_SIZE + (rand() & 1023);
+ size_t nMatchOffset;
+
+ if (nMatchLength > (nBufferSize - nIndex))
+ nMatchLength = nBufferSize - nIndex;
+ if (nMatchLength > nIndex)
+ nMatchLength = nIndex;
+
+ if (nMatchLength < nIndex)
+ nMatchOffset = rand() % (nIndex - nMatchLength);
+ else
+ nMatchOffset = 0;
+
+ while (nMatchLength--) {
+ pBuffer[nIndex] = pBuffer[nIndex - nMatchOffset];
+ nIndex++;
+ }
+ }
+ }
+}
+
+static void xor_data(unsigned char *pBuffer, size_t nBufferSize, unsigned int nSeed, float fXorProbability) {
+ size_t nIndex = 0;
+ int nXorProbability = (int)(fXorProbability * 1023.0f);
+
+ srand(nSeed);
+
+ if (nIndex >= nBufferSize) return;
+
+ while (nIndex < nBufferSize) {
+ if ((rand() & 1023) < nXorProbability) {
+ pBuffer[nIndex] ^= 0xff;
+ }
+ nIndex++;
+ }
+}
+
+static int do_self_test(const unsigned int nOptions, const unsigned int nMaxWindowSize, const int nIsQuickTest) {
+ unsigned char *pGeneratedData;
+ unsigned char *pCompressedData;
+ unsigned char *pTmpCompressedData;
+ unsigned char *pTmpDecompressedData;
+ size_t nGeneratedDataSize;
+ size_t nMaxCompressedDataSize;
+ unsigned int nSeed = 123;
+ int nFlags = 0;
+ int i;
+
+ pGeneratedData = (unsigned char*)malloc(4 * BLOCK_SIZE);
+ if (!pGeneratedData) {
+ fprintf(stderr, "out of memory, %d bytes needed\n", 4 * BLOCK_SIZE);
+ return 100;
+ }
+
+ nMaxCompressedDataSize = apultra_get_max_compressed_size(4 * BLOCK_SIZE);
+ pCompressedData = (unsigned char*)malloc(nMaxCompressedDataSize);
+ if (!pCompressedData) {
+ free(pGeneratedData);
+ pGeneratedData = NULL;
+
+ fprintf(stderr, "out of memory, %zd bytes needed\n", nMaxCompressedDataSize);
+ return 100;
+ }
+
+ pTmpCompressedData = (unsigned char*)malloc(nMaxCompressedDataSize);
+ if (!pTmpCompressedData) {
+ free(pCompressedData);
+ pCompressedData = NULL;
+ free(pGeneratedData);
+ pGeneratedData = NULL;
+
+ fprintf(stderr, "out of memory, %zd bytes needed\n", nMaxCompressedDataSize);
+ return 100;
+ }
+
+ pTmpDecompressedData = (unsigned char*)malloc(4 * BLOCK_SIZE);
+ if (!pTmpDecompressedData) {
+ free(pTmpCompressedData);
+ pTmpCompressedData = NULL;
+ free(pCompressedData);
+ pCompressedData = NULL;
+ free(pGeneratedData);
+ pGeneratedData = NULL;
+
+ fprintf(stderr, "out of memory, %d bytes needed\n", 4 * BLOCK_SIZE);
+ return 100;
+ }
+
+ memset(pGeneratedData, 0, 4 * BLOCK_SIZE);
+ memset(pCompressedData, 0, nMaxCompressedDataSize);
+ memset(pTmpCompressedData, 0, nMaxCompressedDataSize);
+
+ /* Test compressing with a too small buffer to do anything, expect to fail cleanly */
+ for (i = 0; i < 12; i++) {
+ generate_compressible_data(pGeneratedData, i, nSeed, 256, 0.5f);
+ apultra_compress(pGeneratedData, pCompressedData, i, i, nFlags, nMaxWindowSize, 0 /* dictionary size */, NULL, NULL);
+ }
+
+ size_t nDataSizeStep = 128;
+ float fProbabilitySizeStep = nIsQuickTest ? 0.005f : 0.0005f;
+
+ for (nGeneratedDataSize = 1024; nGeneratedDataSize <= (nIsQuickTest ? 1024U : (4U * BLOCK_SIZE)); nGeneratedDataSize += nDataSizeStep) {
+ float fMatchProbability;
+
+ fprintf(stdout, "size %zd", nGeneratedDataSize);
+ for (fMatchProbability = 0; fMatchProbability <= 0.995f; fMatchProbability += fProbabilitySizeStep) {
+ int nNumLiteralValues[12] = { 1, 2, 3, 15, 30, 56, 96, 137, 178, 191, 255, 256 };
+ float fXorProbability;
+
+ fputc('.', stdout);
+ fflush(stdout);
+
+ for (i = 0; i < 12; i++) {
+ /* Generate data to compress */
+ generate_compressible_data(pGeneratedData, nGeneratedDataSize, nSeed, nNumLiteralValues[i], fMatchProbability);
+
+ /* Try to compress it, expected to succeed */
+ size_t nActualCompressedSize = apultra_compress(pGeneratedData, pCompressedData, nGeneratedDataSize, apultra_get_max_compressed_size(nGeneratedDataSize),
+ nFlags, nMaxWindowSize, 0 /* dictionary size */, NULL, NULL);
+ if (nActualCompressedSize == -1 || nActualCompressedSize < (1 + 1 + 1 /* footer */)) {
+ free(pTmpDecompressedData);
+ pTmpDecompressedData = NULL;
+ free(pTmpCompressedData);
+ pTmpCompressedData = NULL;
+ free(pCompressedData);
+ pCompressedData = NULL;
+ free(pGeneratedData);
+ pGeneratedData = NULL;
+
+ fprintf(stderr, "\nself-test: error compressing size %zd, seed %d, match probability %f, literals range %d\n", nGeneratedDataSize, nSeed, fMatchProbability, nNumLiteralValues[i]);
+ return 100;
+ }
+
+ /* Try to decompress it, expected to succeed */
+ size_t nActualDecompressedSize;
+ nActualDecompressedSize = apultra_decompress(pCompressedData, pTmpDecompressedData, nActualCompressedSize, nGeneratedDataSize, 0 /* dictionary size */, nFlags);
+ if (nActualDecompressedSize == -1) {
+ free(pTmpDecompressedData);
+ pTmpDecompressedData = NULL;
+ free(pTmpCompressedData);
+ pTmpCompressedData = NULL;
+ free(pCompressedData);
+ pCompressedData = NULL;
+ free(pGeneratedData);
+ pGeneratedData = NULL;
+
+ fprintf(stderr, "\nself-test: error decompressing size %zd, seed %d, match probability %f, literals range %d\n", nGeneratedDataSize, nSeed, fMatchProbability, nNumLiteralValues[i]);
+ return 100;
+ }
+
+ if (memcmp(pGeneratedData, pTmpDecompressedData, nGeneratedDataSize)) {
+ free(pTmpDecompressedData);
+ pTmpDecompressedData = NULL;
+ free(pTmpCompressedData);
+ pTmpCompressedData = NULL;
+ free(pCompressedData);
+ pCompressedData = NULL;
+ free(pGeneratedData);
+ pGeneratedData = NULL;
+
+ fprintf(stderr, "\nself-test: error comparing decompressed and original data, size %zd, seed %d, match probability %f, literals range %d\n", nGeneratedDataSize, nSeed, fMatchProbability, nNumLiteralValues[i]);
+ return 100;
+ }
+
+ /* Try to decompress corrupted data, expected to fail cleanly, without crashing or corrupting memory outside the output buffer */
+ for (fXorProbability = 0.05f; fXorProbability <= 0.5f; fXorProbability += 0.05f) {
+ memcpy(pTmpCompressedData, pCompressedData, nActualCompressedSize);
+ xor_data(pTmpCompressedData, nActualCompressedSize, nSeed, fXorProbability);
+ apultra_decompress(pTmpCompressedData, pGeneratedData, nActualCompressedSize, nGeneratedDataSize, 0 /* dictionary size */, nFlags);
+ }
+ }
+
+ nSeed++;
+ }
+
+ fputc(10, stdout);
+ fflush(stdout);
+
+ nDataSizeStep <<= 1;
+ if (nDataSizeStep > (128 * 4096))
+ nDataSizeStep = 128 * 4096;
+ fProbabilitySizeStep *= 1.25;
+ if (fProbabilitySizeStep > (0.0005f * 4096))
+ fProbabilitySizeStep = 0.0005f * 4096;
+ }
+
+ free(pTmpDecompressedData);
+ pTmpDecompressedData = NULL;
+
+ free(pTmpCompressedData);
+ pTmpCompressedData = NULL;
+
+ free(pCompressedData);
+ pCompressedData = NULL;
+
+ free(pGeneratedData);
+ pGeneratedData = NULL;
+
+ fprintf(stdout, "All tests passed.\n");
+ return 0;
+}
+
+/*---------------------------------------------------------------------------*/
+
+static int do_compr_benchmark(const char *pszInFilename, const char *pszOutFilename, const char *pszDictionaryFilename, const unsigned int nOptions, const unsigned int nMaxWindowSize) {
+ size_t nFileSize, nMaxCompressedSize;
+ unsigned char *pFileData;
+ unsigned char *pCompressedData;
+ int nFlags = 0;
+ int i;
+
+ if (pszDictionaryFilename) {
+ fprintf(stderr, "in-memory benchmarking does not support dictionaries\n");
+ return 100;
+ }
+
+ /* Read the whole original file in memory */
+
+ FILE *f_in = fopen(pszInFilename, "rb");
+ if (!f_in) {
+ fprintf(stderr, "error opening '%s' for reading\n", pszInFilename);
+ return 100;
+ }
+
+ fseek(f_in, 0, SEEK_END);
+ nFileSize = (size_t)ftell(f_in);
+ fseek(f_in, 0, SEEK_SET);
+
+ pFileData = (unsigned char*)malloc(nFileSize);
+ if (!pFileData) {
+ fclose(f_in);
+ fprintf(stderr, "out of memory for reading '%s', %zd bytes needed\n", pszInFilename, nFileSize);
+ return 100;
+ }
+
+ if (fread(pFileData, 1, nFileSize, f_in) != nFileSize) {
+ free(pFileData);
+ fclose(f_in);
+ fprintf(stderr, "I/O error while reading '%s'\n", pszInFilename);
+ return 100;
+ }
+
+ fclose(f_in);
+
+ if (nOptions & OPT_BACKWARD)
+ do_reverse_buffer(pFileData, nFileSize);
+
+ /* Allocate max compressed size */
+
+ nMaxCompressedSize = apultra_get_max_compressed_size(nFileSize);
+
+ pCompressedData = (unsigned char*)malloc(nMaxCompressedSize + 2048);
+ if (!pCompressedData) {
+ free(pFileData);
+ fprintf(stderr, "out of memory for compressing '%s', %zd bytes needed\n", pszInFilename, nMaxCompressedSize);
+ return 100;
+ }
+
+ memset(pCompressedData + 1024, 0, nMaxCompressedSize);
+
+ long long nBestCompTime = -1;
+
+ size_t nActualCompressedSize = 0;
+ size_t nRightGuardPos = nMaxCompressedSize;
+
+ for (i = 0; i < 5; i++) {
+ unsigned char nGuard = 0x33 + i;
+ int j;
+
+ /* Write guard bytes around the output buffer, to help check for writes outside of it by the compressor */
+ memset(pCompressedData, nGuard, 1024);
+ memset(pCompressedData + 1024 + nRightGuardPos, nGuard, 1024);
+
+ long long t0 = do_get_time();
+ nActualCompressedSize = apultra_compress(pFileData, pCompressedData + 1024, nFileSize, nRightGuardPos, nFlags, nMaxWindowSize, 0 /* dictionary size */, NULL, NULL);
+ long long t1 = do_get_time();
+ if (nActualCompressedSize == -1) {
+ free(pCompressedData);
+ free(pFileData);
+ fprintf(stderr, "compression error\n");
+ return 100;
+ }
+
+ long long nCurDecTime = t1 - t0;
+ if (nBestCompTime == -1 || nBestCompTime > nCurDecTime)
+ nBestCompTime = nCurDecTime;
+
+ /* Check guard bytes before the output buffer */
+ for (j = 0; j < 1024; j++) {
+ if (pCompressedData[j] != nGuard) {
+ free(pCompressedData);
+ free(pFileData);
+ fprintf(stderr, "error, wrote outside of output buffer at %d!\n", j - 1024);
+ return 100;
+ }
+ }
+
+ /* Check guard bytes after the output buffer */
+ for (j = 0; j < 1024; j++) {
+ if (pCompressedData[1024 + nRightGuardPos + j] != nGuard) {
+ free(pCompressedData);
+ free(pFileData);
+ fprintf(stderr, "error, wrote outside of output buffer at %d!\n", j);
+ return 100;
+ }
+ }
+
+ nRightGuardPos = nActualCompressedSize;
+ }
+
+ if (nOptions & OPT_BACKWARD)
+ do_reverse_buffer(pCompressedData + 1024, nActualCompressedSize);
+
+ if (pszOutFilename) {
+ FILE *f_out;
+
+ /* Write whole compressed file out */
+
+ f_out = fopen(pszOutFilename, "wb");
+ if (f_out) {
+ fwrite(pCompressedData + 1024, 1, nActualCompressedSize, f_out);
+ fclose(f_out);
+ }
+ }
+
+ free(pCompressedData);
+ free(pFileData);
+
+ fprintf(stdout, "compressed size: %zd bytes\n", nActualCompressedSize);
+ fprintf(stdout, "compression time: %lld microseconds (%g Mb/s)\n", nBestCompTime, ((double)nActualCompressedSize / 1024.0) / ((double)nBestCompTime / 1000.0));
+
+ return 0;
+}
+
+/*---------------------------------------------------------------------------*/
+
+static int do_dec_benchmark(const char *pszInFilename, const char *pszOutFilename, const char *pszDictionaryFilename, const unsigned int nOptions) {
+ size_t nFileSize, nMaxDecompressedSize;
+ unsigned char *pFileData;
+ unsigned char *pDecompressedData;
+ int nFlags = 0;
+ int i;
+
+ if (pszDictionaryFilename) {
+ fprintf(stderr, "in-memory benchmarking does not support dictionaries\n");
+ return 100;
+ }
+
+ /* Read the whole compressed file in memory */
+
+ FILE *f_in = fopen(pszInFilename, "rb");
+ if (!f_in) {
+ fprintf(stderr, "error opening '%s' for reading\n", pszInFilename);
+ return 100;
+ }
+
+ fseek(f_in, 0, SEEK_END);
+ nFileSize = (size_t)ftell(f_in);
+ fseek(f_in, 0, SEEK_SET);
+
+ pFileData = (unsigned char*)malloc(nFileSize);
+ if (!pFileData) {
+ fclose(f_in);
+ fprintf(stderr, "out of memory for reading '%s', %zd bytes needed\n", pszInFilename, nFileSize);
+ return 100;
+ }
+
+ if (fread(pFileData, 1, nFileSize, f_in) != nFileSize) {
+ free(pFileData);
+ fclose(f_in);
+ fprintf(stderr, "I/O error while reading '%s'\n", pszInFilename);
+ return 100;
+ }
+
+ fclose(f_in);
+
+ if (nOptions & OPT_BACKWARD)
+ do_reverse_buffer(pFileData, nFileSize);
+
+ /* Allocate max decompressed size */
+
+ nMaxDecompressedSize = apultra_get_max_decompressed_size(pFileData, nFileSize, nFlags);
+ if (nMaxDecompressedSize == -1) {
+ free(pFileData);
+ fprintf(stderr, "invalid compressed format for file '%s'\n", pszInFilename);
+ return 100;
+ }
+
+ pDecompressedData = (unsigned char*)malloc(nMaxDecompressedSize);
+ if (!pDecompressedData) {
+ free(pFileData);
+ fprintf(stderr, "out of memory for decompressing '%s', %zd bytes needed\n", pszInFilename, nMaxDecompressedSize);
+ return 100;
+ }
+
+ memset(pDecompressedData, 0, nMaxDecompressedSize);
+
+ long long nBestDecTime = -1;
+
+ size_t nActualDecompressedSize = 0;
+ for (i = 0; i < 50; i++) {
+ long long t0 = do_get_time();
+ nActualDecompressedSize = apultra_decompress(pFileData, pDecompressedData, nFileSize, nMaxDecompressedSize, 0 /* dictionary size */, nFlags);
+ long long t1 = do_get_time();
+ if (nActualDecompressedSize == -1) {
+ free(pDecompressedData);
+ free(pFileData);
+ fprintf(stderr, "decompression error\n");
+ return 100;
+ }
+
+ long long nCurDecTime = t1 - t0;
+ if (nBestDecTime == -1 || nBestDecTime > nCurDecTime)
+ nBestDecTime = nCurDecTime;
+ }
+
+ if (nOptions & OPT_BACKWARD)
+ do_reverse_buffer(pDecompressedData, nActualDecompressedSize);
+
+ if (pszOutFilename) {
+ FILE *f_out;
+
+ /* Write whole decompressed file out */
+
+ f_out = fopen(pszOutFilename, "wb");
+ if (f_out) {
+ fwrite(pDecompressedData, 1, nActualDecompressedSize, f_out);
+ fclose(f_out);
+ }
+ }
+
+ free(pDecompressedData);
+ free(pFileData);
+
+ fprintf(stdout, "decompressed size: %zd bytes\n", nActualDecompressedSize);
+ fprintf(stdout, "decompression time: %lld microseconds (%g Mb/s)\n", nBestDecTime, ((double)nActualDecompressedSize / 1024.0) / ((double)nBestDecTime / 1000.0));
+
+ return 0;
+}
+
+/*---------------------------------------------------------------------------*/
+
+int main(int argc, char **argv) {
+ int i;
+ const char *pszInFilename = NULL;
+ const char *pszOutFilename = NULL;
+ const char *pszDictionaryFilename = NULL;
+ int nArgsError = 0;
+ int nCommandDefined = 0;
+ int nVerifyCompression = 0;
+ char cCommand = 'z';
+ unsigned int nOptions = 0;
+ unsigned int nMaxWindowSize = 0;
+
+ for (i = 1; i < argc; i++) {
+ if (!strcmp(argv[i], "-d")) {
+ if (!nCommandDefined) {
+ nCommandDefined = 1;
+ cCommand = 'd';
+ }
+ else
+ nArgsError = 1;
+ }
+ else if (!strcmp(argv[i], "-z")) {
+ if (!nCommandDefined) {
+ nCommandDefined = 1;
+ cCommand = 'z';
+ }
+ else
+ nArgsError = 1;
+ }
+ else if (!strcmp(argv[i], "-c")) {
+ if (!nVerifyCompression) {
+ nVerifyCompression = 1;
+ }
+ else
+ nArgsError = 1;
+ }
+ else if (!strcmp(argv[i], "-cbench")) {
+ if (!nCommandDefined) {
+ nCommandDefined = 1;
+ cCommand = 'B';
+ }
+ else
+ nArgsError = 1;
+ }
+ else if (!strcmp(argv[i], "-dbench")) {
+ if (!nCommandDefined) {
+ nCommandDefined = 1;
+ cCommand = 'b';
+ }
+ else
+ nArgsError = 1;
+ }
+ else if (!strcmp(argv[i], "-test")) {
+ if (!nCommandDefined) {
+ nCommandDefined = 1;
+ cCommand = 't';
+ }
+ else
+ nArgsError = 1;
+ }
+ else if (!strcmp(argv[i], "-quicktest")) {
+ if (!nCommandDefined) {
+ nCommandDefined = 1;
+ cCommand = 'T';
+ }
+ else
+ nArgsError = 1;
+ }
+ else if (!strcmp(argv[i], "-D")) {
+ if (!pszDictionaryFilename && (i + 1) < argc) {
+ pszDictionaryFilename = argv[i + 1];
+ i++;
+ }
+ else
+ nArgsError = 1;
+ }
+ else if (!strncmp(argv[i], "-D", 2)) {
+ if (!pszDictionaryFilename) {
+ pszDictionaryFilename = argv[i] + 2;
+ }
+ else
+ nArgsError = 1;
+ }
+ else if (!strcmp(argv[i], "-v")) {
+ if ((nOptions & OPT_VERBOSE) == 0) {
+ nOptions |= OPT_VERBOSE;
+ }
+ else
+ nArgsError = 1;
+ }
+ else if (!strcmp(argv[i], "-w")) {
+ if (!nMaxWindowSize && (i + 1) < argc) {
+ char *pEnd = NULL;
+ nMaxWindowSize = (int)strtol(argv[i + 1], &pEnd, 10);
+ if (pEnd && pEnd != argv[i + 1] && (nMaxWindowSize >= 16 && nMaxWindowSize <= 0x200000)) {
+ i++;
+ }
+ else {
+ nArgsError = 1;
+ }
+ }
+ else
+ nArgsError = 1;
+ }
+ else if (!strncmp(argv[i], "-w", 2)) {
+ if (!nMaxWindowSize) {
+ char *pEnd = NULL;
+ nMaxWindowSize = (int)strtol(argv[i] + 2, &pEnd, 10);
+ if (!(pEnd && pEnd != (argv[i] + 2) && (nMaxWindowSize >= 16 && nMaxWindowSize <= 0x200000))) {
+ nArgsError = 1;
+ }
+ }
+ else
+ nArgsError = 1;
+ }
+ else if (!strcmp(argv[i], "-stats")) {
+ if ((nOptions & OPT_STATS) == 0) {
+ nOptions |= OPT_STATS;
+ }
+ else
+ nArgsError = 1;
+ }
+ else if (!strcmp(argv[i], "-b")) {
+ if ((nOptions & OPT_BACKWARD) == 0) {
+ nOptions |= OPT_BACKWARD;
+ }
+ else
+ nArgsError = 1;
+ }
+ else {
+ if (!pszInFilename)
+ pszInFilename = argv[i];
+ else {
+ if (!pszOutFilename)
+ pszOutFilename = argv[i];
+ else
+ nArgsError = 1;
+ }
+ }
+ }
+
+ if (!nArgsError && cCommand == 't') {
+ return do_self_test(nOptions, nMaxWindowSize, 0);
+ }
+ else if (!nArgsError && cCommand == 'T') {
+ return do_self_test(nOptions, nMaxWindowSize, 1);
+ }
+
+ if (nArgsError || !pszInFilename || !pszOutFilename) {
+ fprintf(stderr, "apultra command-line tool v" TOOL_VERSION " by Emmanuel Marty and spke\n");
+ fprintf(stderr, "usage: %s [-c] [-d] [-v] [-b] <infile> <outfile>\n", argv[0]);
+ fprintf(stderr, " -c: check resulting stream after compressing\n");
+ fprintf(stderr, " -d: decompress (default: compress)\n");
+ fprintf(stderr, " -b: backwards compression or decompression\n");
+ fprintf(stderr, " -w <size>: maximum window size, in bytes (16..2097152), defaults to maximum\n");
+ fprintf(stderr, " -D <file>: use dictionary file\n");
+ fprintf(stderr, " -cbench: benchmark in-memory compression\n");
+ fprintf(stderr, " -dbench: benchmark in-memory decompression\n");
+ fprintf(stderr, " -test: run full automated self-tests\n");
+ fprintf(stderr, "-quicktest: run quick automated self-tests\n");
+ fprintf(stderr, " -stats: show compressed data stats\n");
+ fprintf(stderr, " -v: be verbose\n");
+ return 100;
+ }
+
+ do_init_time();
+
+ if (cCommand == 'z') {
+ int nResult = do_compress(pszInFilename, pszOutFilename, pszDictionaryFilename, nOptions, nMaxWindowSize);
+ if (nResult == 0 && nVerifyCompression) {
+ return do_compare(pszOutFilename, pszInFilename, pszDictionaryFilename, nOptions);
+ } else {
+ return nResult;
+ }
+ }
+ else if (cCommand == 'd') {
+ return do_decompress(pszInFilename, pszOutFilename, pszDictionaryFilename, nOptions);
+ }
+ else if (cCommand == 'B') {
+ return do_compr_benchmark(pszInFilename, pszOutFilename, pszDictionaryFilename, nOptions, nMaxWindowSize);
+ }
+ else if (cCommand == 'b') {
+ return do_dec_benchmark(pszInFilename, pszOutFilename, pszDictionaryFilename, nOptions);
+ }
+ else {
+ return 100;
+ }
+}
+#endif
diff --git a/tools/z64compress/src/enc/apultra/divsufsort.c b/tools/z64compress/src/enc/apultra/divsufsort.c
new file mode 100644
index 0000000..3a1c753
--- /dev/null
+++ b/tools/z64compress/src/enc/apultra/divsufsort.c
@@ -0,0 +1,460 @@
+/*
+ * divsufsort.c for libdivsufsort
+ * Copyright (c) 2003-2008 Yuta Mori 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 "divsufsort_private.h"
+#ifdef _OPENMP
+# include <omp.h>
+#endif
+
+
+/*- Private Functions -*/
+
+/* Sorts suffixes of type B*. */
+static
+saidx_t
+sort_typeBstar(const sauchar_t *T, saidx_t *SA,
+ saidx_t *bucket_A, saidx_t *bucket_B,
+ saidx_t n) {
+ saidx_t *PAb, *ISAb, *buf;
+#ifdef _OPENMP
+ saidx_t *curbuf;
+ saidx_t l;
+#endif
+ saidx_t i, j, k, t, m, bufsize;
+ saint_t c0, c1;
+#ifdef _OPENMP
+ saint_t d0, d1;
+ int tmp;
+#endif
+
+ /* Initialize bucket arrays. */
+ for(i = 0; i < BUCKET_A_SIZE; ++i) { bucket_A[i] = 0; }
+ for(i = 0; i < BUCKET_B_SIZE; ++i) { bucket_B[i] = 0; }
+
+ /* Count the number of occurrences of the first one or two characters of each
+ type A, B and B* suffix. Moreover, store the beginning position of all
+ type B* suffixes into the array SA. */
+ for(i = n - 1, m = n, c0 = T[n - 1]; 0 <= i;) {
+ /* type A suffix. */
+ do { ++BUCKET_A(c1 = c0); } while((0 <= --i) && ((c0 = T[i]) >= c1));
+ if(0 <= i) {
+ /* type B* suffix. */
+ ++BUCKET_BSTAR(c0, c1);
+ SA[--m] = i;
+ /* type B suffix. */
+ for(--i, c1 = c0; (0 <= i) && ((c0 = T[i]) <= c1); --i, c1 = c0) {
+ ++BUCKET_B(c0, c1);
+ }
+ }
+ }
+ m = n - m;
+/*
+note:
+ A type B* suffix is lexicographically smaller than a type B suffix that
+ begins with the same first two characters.
+*/
+
+ /* Calculate the index of start/end point of each bucket. */
+ for(c0 = 0, i = 0, j = 0; c0 < ALPHABET_SIZE; ++c0) {
+ t = i + BUCKET_A(c0);
+ BUCKET_A(c0) = i + j; /* start point */
+ i = t + BUCKET_B(c0, c0);
+ for(c1 = c0 + 1; c1 < ALPHABET_SIZE; ++c1) {
+ j += BUCKET_BSTAR(c0, c1);
+ BUCKET_BSTAR(c0, c1) = j; /* end point */
+ i += BUCKET_B(c0, c1);
+ }
+ }
+
+ if(0 < m) {
+ /* Sort the type B* suffixes by their first two characters. */
+ PAb = SA + n - m; ISAb = SA + m;
+ for(i = m - 2; 0 <= i; --i) {
+ t = PAb[i], c0 = T[t], c1 = T[t + 1];
+ SA[--BUCKET_BSTAR(c0, c1)] = i;
+ }
+ t = PAb[m - 1], c0 = T[t], c1 = T[t + 1];
+ SA[--BUCKET_BSTAR(c0, c1)] = m - 1;
+
+ /* Sort the type B* substrings using sssort. */
+#ifdef _OPENMP
+ tmp = omp_get_max_threads();
+ buf = SA + m, bufsize = (n - (2 * m)) / tmp;
+ c0 = ALPHABET_SIZE - 2, c1 = ALPHABET_SIZE - 1, j = m;
+#pragma omp parallel default(shared) private(curbuf, k, l, d0, d1, tmp)
+ {
+ tmp = omp_get_thread_num();
+ curbuf = buf + tmp * bufsize;
+ k = 0;
+ for(;;) {
+ #pragma omp critical(sssort_lock)
+ {
+ if(0 < (l = j)) {
+ d0 = c0, d1 = c1;
+ do {
+ k = BUCKET_BSTAR(d0, d1);
+ if(--d1 <= d0) {
+ d1 = ALPHABET_SIZE - 1;
+ if(--d0 < 0) { break; }
+ }
+ } while(((l - k) <= 1) && (0 < (l = k)));
+ c0 = d0, c1 = d1, j = k;
+ }
+ }
+ if(l == 0) { break; }
+ sssort(T, PAb, SA + k, SA + l,
+ curbuf, bufsize, 2, n, *(SA + k) == (m - 1));
+ }
+ }
+#else
+ buf = SA + m, bufsize = n - (2 * m);
+ for(c0 = ALPHABET_SIZE - 2, j = m; 0 < j; --c0) {
+ for(c1 = ALPHABET_SIZE - 1; c0 < c1; j = i, --c1) {
+ i = BUCKET_BSTAR(c0, c1);
+ if(1 < (j - i)) {
+ sssort(T, PAb, SA + i, SA + j,
+ buf, bufsize, 2, n, *(SA + i) == (m - 1));
+ }
+ }
+ }
+#endif
+
+ /* Compute ranks of type B* substrings. */
+ for(i = m - 1; 0 <= i; --i) {
+ if(0 <= SA[i]) {
+ j = i;
+ do { ISAb[SA[i]] = i; } while((0 <= --i) && (0 <= SA[i]));
+ SA[i + 1] = i - j;
+ if(i <= 0) { break; }
+ }
+ j = i;
+ do { ISAb[SA[i] = ~SA[i]] = j; } while(SA[--i] < 0);
+ ISAb[SA[i]] = j;
+ }
+
+ /* Construct the inverse suffix array of type B* suffixes using trsort. */
+ trsort(ISAb, SA, m, 1);
+
+ /* Set the sorted order of tyoe B* suffixes. */
+ for(i = n - 1, j = m, c0 = T[n - 1]; 0 <= i;) {
+ for(--i, c1 = c0; (0 <= i) && ((c0 = T[i]) >= c1); --i, c1 = c0) { }
+ if(0 <= i) {
+ t = i;
+ for(--i, c1 = c0; (0 <= i) && ((c0 = T[i]) <= c1); --i, c1 = c0) { }
+ SA[ISAb[--j]] = ((t == 0) || (1 < (t - i))) ? t : ~t;
+ }
+ }
+
+ /* Calculate the index of start/end point of each bucket. */
+ BUCKET_B(ALPHABET_SIZE - 1, ALPHABET_SIZE - 1) = n; /* end point */
+ for(c0 = ALPHABET_SIZE - 2, k = m - 1; 0 <= c0; --c0) {
+ i = BUCKET_A(c0 + 1) - 1;
+ for(c1 = ALPHABET_SIZE - 1; c0 < c1; --c1) {
+ t = i - BUCKET_B(c0, c1);
+ BUCKET_B(c0, c1) = i; /* end point */
+
+ /* Move all type B* suffixes to the correct position. */
+ for(i = t, j = BUCKET_BSTAR(c0, c1);
+ j <= k;
+ --i, --k) { SA[i] = SA[k]; }
+ }
+ BUCKET_BSTAR(c0, c0 + 1) = i - BUCKET_B(c0, c0) + 1; /* start point */
+ BUCKET_B(c0, c0) = i; /* end point */
+ }
+ }
+
+ return m;
+}
+
+/* Constructs the suffix array by using the sorted order of type B* suffixes. */
+static
+void
+construct_SA(const sauchar_t *T, saidx_t *SA,
+ saidx_t *bucket_A, saidx_t *bucket_B,
+ saidx_t n, saidx_t m) {
+ saidx_t *i, *j, *k;
+ saidx_t s;
+ saint_t c0, c1, c2;
+
+ if(0 < m) {
+ /* Construct the sorted order of type B suffixes by using
+ the sorted order of type B* suffixes. */
+ for(c1 = ALPHABET_SIZE - 2; 0 <= c1; --c1) {
+ /* Scan the suffix array from right to left. */
+ for(i = SA + BUCKET_BSTAR(c1, c1 + 1),
+ j = SA + BUCKET_A(c1 + 1) - 1, k = NULL, c2 = -1;
+ i <= j;
+ --j) {
+ if(0 < (s = *j)) {
+ assert(T[s] == c1);
+ assert(((s + 1) < n) && (T[s] <= T[s + 1]));
+ assert(T[s - 1] <= T[s]);
+ *j = ~s;
+ c0 = T[--s];
+ if((0 < s) && (T[s - 1] > c0)) { s = ~s; }
+ if(c0 != c2) {
+ if(0 <= c2) { BUCKET_B(c2, c1) = k - SA; }
+ k = SA + BUCKET_B(c2 = c0, c1);
+ }
+ assert(k < j);
+ *k-- = s;
+ } else {
+ assert(((s == 0) && (T[s] == c1)) || (s < 0));
+ *j = ~s;
+ }
+ }
+ }
+ }
+
+ /* Construct the suffix array by using
+ the sorted order of type B suffixes. */
+ k = SA + BUCKET_A(c2 = T[n - 1]);
+ *k++ = (T[n - 2] < c2) ? ~(n - 1) : (n - 1);
+ /* Scan the suffix array from left to right. */
+ for(i = SA, j = SA + n; i < j; ++i) {
+ if(0 < (s = *i)) {
+ assert(T[s - 1] >= T[s]);
+ c0 = T[--s];
+ if((s == 0) || (T[s - 1] < c0)) { s = ~s; }
+ if(c0 != c2) {
+ BUCKET_A(c2) = k - SA;
+ k = SA + BUCKET_A(c2 = c0);
+ }
+ assert(i < k);
+ *k++ = s;
+ } else {
+ assert(s < 0);
+ *i = ~s;
+ }
+ }
+}
+
+#if 0
+/* Constructs the burrows-wheeler transformed string directly
+ by using the sorted order of type B* suffixes. */
+static
+saidx_t
+construct_BWT(const sauchar_t *T, saidx_t *SA,
+ saidx_t *bucket_A, saidx_t *bucket_B,
+ saidx_t n, saidx_t m) {
+ saidx_t *i, *j, *k, *orig;
+ saidx_t s;
+ saint_t c0, c1, c2;
+
+ if(0 < m) {
+ /* Construct the sorted order of type B suffixes by using
+ the sorted order of type B* suffixes. */
+ for(c1 = ALPHABET_SIZE - 2; 0 <= c1; --c1) {
+ /* Scan the suffix array from right to left. */
+ for(i = SA + BUCKET_BSTAR(c1, c1 + 1),
+ j = SA + BUCKET_A(c1 + 1) - 1, k = NULL, c2 = -1;
+ i <= j;
+ --j) {
+ if(0 < (s = *j)) {
+ assert(T[s] == c1);
+ assert(((s + 1) < n) && (T[s] <= T[s + 1]));
+ assert(T[s - 1] <= T[s]);
+ c0 = T[--s];
+ *j = ~((saidx_t)c0);
+ if((0 < s) && (T[s - 1] > c0)) { s = ~s; }
+ if(c0 != c2) {
+ if(0 <= c2) { BUCKET_B(c2, c1) = k - SA; }
+ k = SA + BUCKET_B(c2 = c0, c1);
+ }
+ assert(k < j);
+ *k-- = s;
+ } else if(s != 0) {
+ *j = ~s;
+#ifndef NDEBUG
+ } else {
+ assert(T[s] == c1);
+#endif
+ }
+ }
+ }
+ }
+
+ /* Construct the BWTed string by using
+ the sorted order of type B suffixes. */
+ k = SA + BUCKET_A(c2 = T[n - 1]);
+ *k++ = (T[n - 2] < c2) ? ~((saidx_t)T[n - 2]) : (n - 1);
+ /* Scan the suffix array from left to right. */
+ for(i = SA, j = SA + n, orig = SA; i < j; ++i) {
+ if(0 < (s = *i)) {
+ assert(T[s - 1] >= T[s]);
+ c0 = T[--s];
+ *i = c0;
+ if((0 < s) && (T[s - 1] < c0)) { s = ~((saidx_t)T[s - 1]); }
+ if(c0 != c2) {
+ BUCKET_A(c2) = k - SA;
+ k = SA + BUCKET_A(c2 = c0);
+ }
+ assert(i < k);
+ *k++ = s;
+ } else if(s != 0) {
+ *i = ~s;
+ } else {
+ orig = i;
+ }
+ }
+
+ return orig - SA;
+}
+#endif
+
+/*---------------------------------------------------------------------------*/
+
+/**
+ * Initialize suffix array context
+ *
+ * @return 0 for success, or non-zero in case of an error
+ */
+int divsufsort_init(divsufsort_ctx_t *ctx) {
+ ctx->bucket_A = (saidx_t *)malloc(BUCKET_A_SIZE * sizeof(saidx_t));
+ ctx->bucket_B = NULL;
+
+ if (ctx->bucket_A) {
+ ctx->bucket_B = (saidx_t *)malloc(BUCKET_B_SIZE * sizeof(saidx_t));
+
+ if (ctx->bucket_B)
+ return 0;
+ }
+
+ divsufsort_destroy(ctx);
+ return -1;
+}
+
+/**
+ * Destroy suffix array context
+ *
+ * @param ctx suffix array context to destroy
+ */
+void divsufsort_destroy(divsufsort_ctx_t *ctx) {
+ if (ctx->bucket_B) {
+ free(ctx->bucket_B);
+ ctx->bucket_B = NULL;
+ }
+
+ if (ctx->bucket_A) {
+ free(ctx->bucket_A);
+ ctx->bucket_A = NULL;
+ }
+}
+
+/*- Function -*/
+
+saint_t
+divsufsort_build_array(divsufsort_ctx_t *ctx, const sauchar_t *T, saidx_t *SA, saidx_t n) {
+ saidx_t m;
+ saint_t err = 0;
+
+ /* Check arguments. */
+ if((T == NULL) || (SA == NULL) || (n < 0)) { return -1; }
+ else if(n == 0) { return 0; }
+ else if(n == 1) { SA[0] = 0; return 0; }
+ else if(n == 2) { m = (T[0] < T[1]); SA[m ^ 1] = 0, SA[m] = 1; return 0; }
+
+ /* Suffixsort. */
+ if((ctx->bucket_A != NULL) && (ctx->bucket_B != NULL)) {
+ m = sort_typeBstar(T, SA, ctx->bucket_A, ctx->bucket_B, n);
+ construct_SA(T, SA, ctx->bucket_A, ctx->bucket_B, n, m);
+ } else {
+ err = -2;
+ }
+
+ return err;
+}
+
+#if 0
+saidx_t
+divbwt(const sauchar_t *T, sauchar_t *U, saidx_t *A, saidx_t n) {
+ saidx_t *B;
+ saidx_t *bucket_A, *bucket_B;
+ saidx_t m, pidx, i;
+
+ /* Check arguments. */
+ if((T == NULL) || (U == NULL) || (n < 0)) { return -1; }
+ else if(n <= 1) { if(n == 1) { U[0] = T[0]; } return n; }
+
+ if((B = A) == NULL) { B = (saidx_t *)malloc((size_t)(n + 1) * sizeof(saidx_t)); }
+ bucket_A = (saidx_t *)malloc(BUCKET_A_SIZE * sizeof(saidx_t));
+ bucket_B = (saidx_t *)malloc(BUCKET_B_SIZE * sizeof(saidx_t));
+
+ /* Burrows-Wheeler Transform. */
+ if((B != NULL) && (bucket_A != NULL) && (bucket_B != NULL)) {
+ m = sort_typeBstar(T, B, bucket_A, bucket_B, n);
+ pidx = construct_BWT(T, B, bucket_A, bucket_B, n, m);
+
+ /* Copy to output string. */
+ U[0] = T[n - 1];
+ for(i = 0; i < pidx; ++i) { U[i + 1] = (sauchar_t)B[i]; }
+ for(i += 1; i < n; ++i) { U[i] = (sauchar_t)B[i]; }
+ pidx += 1;
+ } else {
+ pidx = -2;
+ }
+
+ free(bucket_B);
+ free(bucket_A);
+ if(A == NULL) { free(B); }
+
+ return pidx;
+}
+
+const char *
+divsufsort_version(void) {
+ return PROJECT_VERSION_FULL;
+}
+#endif
+
+saint_t
+divsufsort(const sauchar_t *T, saidx_t *SA, saidx_t n) {
+ saidx_t *bucket_A, *bucket_B;
+ saidx_t m;
+ saint_t err = 0;
+
+ /* Check arguments. */
+ if((T == NULL) || (SA == NULL) || (n < 0)) { return -1; }
+ else if(n == 0) { return 0; }
+ else if(n == 1) { SA[0] = 0; return 0; }
+ else if(n == 2) { m = (T[0] < T[1]); SA[m ^ 1] = 0, SA[m] = 1; return 0; }
+
+ bucket_A = (saidx_t *)malloc(BUCKET_A_SIZE * sizeof(saidx_t));
+ bucket_B = (saidx_t *)malloc(BUCKET_B_SIZE * sizeof(saidx_t));
+
+ /* Suffixsort. */
+ if((bucket_A != NULL) && (bucket_B != NULL)) {
+ m = sort_typeBstar(T, SA, bucket_A, bucket_B, n);
+ construct_SA(T, SA, bucket_A, bucket_B, n, m);
+ } else {
+ err = -2;
+ }
+
+ free(bucket_B);
+ free(bucket_A);
+
+ return err;
+}
diff --git a/tools/z64compress/src/enc/apultra/divsufsort.h b/tools/z64compress/src/enc/apultra/divsufsort.h
new file mode 100644
index 0000000..5c617ee
--- /dev/null
+++ b/tools/z64compress/src/enc/apultra/divsufsort.h
@@ -0,0 +1,192 @@
+/*
+ * divsufsort.h for libdivsufsort
+ * Copyright (c) 2003-2008 Yuta Mori 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.
+ */
+
+#ifndef _DIVSUFSORT_H
+#define _DIVSUFSORT_H 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#define DIVSUFSORT_API
+
+/*- Datatypes -*/
+#ifndef SAUCHAR_T
+#define SAUCHAR_T
+typedef unsigned char sauchar_t;
+#endif /* SAUCHAR_T */
+#ifndef SAINT_T
+#define SAINT_T
+typedef int saint_t;
+#endif /* SAINT_T */
+#ifndef SAIDX_T
+#define SAIDX_T
+typedef int saidx_t;
+#endif /* SAIDX_T */
+#ifndef PRIdSAIDX_T
+#define PRIdSAIDX_T "d"
+#endif
+
+/*- divsufsort context */
+typedef struct _divsufsort_ctx_t {
+ saidx_t *bucket_A;
+ saidx_t *bucket_B;
+} divsufsort_ctx_t;
+
+/*- Prototypes -*/
+
+/**
+ * Initialize suffix array context
+ *
+ * @return 0 for success, or non-zero in case of an error
+ */
+int divsufsort_init(divsufsort_ctx_t *ctx);
+
+/**
+ * Destroy suffix array context
+ *
+ * @param ctx suffix array context to destroy
+ */
+void divsufsort_destroy(divsufsort_ctx_t *ctx);
+
+/**
+ * Constructs the suffix array of a given string.
+ * @param ctx suffix array context
+ * @param T[0..n-1] The input string.
+ * @param SA[0..n-1] The output array of suffixes.
+ * @param n The length of the given string.
+ * @return 0 if no error occurred, -1 or -2 otherwise.
+ */
+DIVSUFSORT_API
+saint_t divsufsort_build_array(divsufsort_ctx_t *ctx, const sauchar_t *T, saidx_t *SA, saidx_t n);
+
+#if 0
+/**
+ * Constructs the burrows-wheeler transformed string of a given string.
+ * @param T[0..n-1] The input string.
+ * @param U[0..n-1] The output string. (can be T)
+ * @param A[0..n-1] The temporary array. (can be NULL)
+ * @param n The length of the given string.
+ * @return The primary index if no error occurred, -1 or -2 otherwise.
+ */
+DIVSUFSORT_API
+saidx_t
+divbwt(const sauchar_t *T, sauchar_t *U, saidx_t *A, saidx_t n);
+
+/**
+ * Returns the version of the divsufsort library.
+ * @return The version number string.
+ */
+DIVSUFSORT_API
+const char *
+divsufsort_version(void);
+
+
+/**
+ * Constructs the burrows-wheeler transformed string of a given string and suffix array.
+ * @param T[0..n-1] The input string.
+ * @param U[0..n-1] The output string. (can be T)
+ * @param SA[0..n-1] The suffix array. (can be NULL)
+ * @param n The length of the given string.
+ * @param idx The output primary index.
+ * @return 0 if no error occurred, -1 or -2 otherwise.
+ */
+DIVSUFSORT_API
+saint_t
+bw_transform(const sauchar_t *T, sauchar_t *U,
+ saidx_t *SA /* can NULL */,
+ saidx_t n, saidx_t *idx);
+
+/**
+ * Inverse BW-transforms a given BWTed string.
+ * @param T[0..n-1] The input string.
+ * @param U[0..n-1] The output string. (can be T)
+ * @param A[0..n-1] The temporary array. (can be NULL)
+ * @param n The length of the given string.
+ * @param idx The primary index.
+ * @return 0 if no error occurred, -1 or -2 otherwise.
+ */
+DIVSUFSORT_API
+saint_t
+inverse_bw_transform(const sauchar_t *T, sauchar_t *U,
+ saidx_t *A /* can NULL */,
+ saidx_t n, saidx_t idx);
+
+/**
+ * Checks the correctness of a given suffix array.
+ * @param T[0..n-1] The input string.
+ * @param SA[0..n-1] The input suffix array.
+ * @param n The length of the given string.
+ * @param verbose The verbose mode.
+ * @return 0 if no error occurred.
+ */
+DIVSUFSORT_API
+saint_t
+sufcheck(const sauchar_t *T, const saidx_t *SA, saidx_t n, saint_t verbose);
+
+/**
+ * Search for the pattern P in the string T.
+ * @param T[0..Tsize-1] The input string.
+ * @param Tsize The length of the given string.
+ * @param P[0..Psize-1] The input pattern string.
+ * @param Psize The length of the given pattern string.
+ * @param SA[0..SAsize-1] The input suffix array.
+ * @param SAsize The length of the given suffix array.
+ * @param idx The output index.
+ * @return The count of matches if no error occurred, -1 otherwise.
+ */
+DIVSUFSORT_API
+saidx_t
+sa_search(const sauchar_t *T, saidx_t Tsize,
+ const sauchar_t *P, saidx_t Psize,
+ const saidx_t *SA, saidx_t SAsize,
+ saidx_t *left);
+
+/**
+ * Search for the character c in the string T.
+ * @param T[0..Tsize-1] The input string.
+ * @param Tsize The length of the given string.
+ * @param SA[0..SAsize-1] The input suffix array.
+ * @param SAsize The length of the given suffix array.
+ * @param c The input character.
+ * @param idx The output index.
+ * @return The count of matches if no error occurred, -1 otherwise.
+ */
+DIVSUFSORT_API
+saidx_t
+sa_simplesearch(const sauchar_t *T, saidx_t Tsize,
+ const saidx_t *SA, saidx_t SAsize,
+ saint_t c, saidx_t *left);
+#endif
+
+saint_t
+divsufsort(const sauchar_t *T, saidx_t *SA, saidx_t n);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* __cplusplus */
+
+#endif /* _DIVSUFSORT_H */
diff --git a/tools/z64compress/src/enc/apultra/divsufsort_config.h b/tools/z64compress/src/enc/apultra/divsufsort_config.h
new file mode 100644
index 0000000..4054a8a
--- /dev/null
+++ b/tools/z64compress/src/enc/apultra/divsufsort_config.h
@@ -0,0 +1,9 @@
+#define HAVE_STRING_H 1
+#define HAVE_STDLIB_H 1
+#define HAVE_MEMORY_H 1
+#define HAVE_STDINT_H 1
+#define INLINE inline
+
+#ifdef _MSC_VER
+#pragma warning( disable : 4244 )
+#endif /* _MSC_VER */
diff --git a/tools/z64compress/src/enc/apultra/divsufsort_private.h b/tools/z64compress/src/enc/apultra/divsufsort_private.h
new file mode 100644
index 0000000..b4d97ad
--- /dev/null
+++ b/tools/z64compress/src/enc/apultra/divsufsort_private.h
@@ -0,0 +1,205 @@
+/*
+ * divsufsort_private.h for libdivsufsort
+ * Copyright (c) 2003-2008 Yuta Mori 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.
+ */
+
+#ifndef _DIVSUFSORT_PRIVATE_H
+#define _DIVSUFSORT_PRIVATE_H 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include "divsufsort_config.h"
+#include <assert.h>
+#include <stdio.h>
+#if HAVE_STRING_H
+# include <string.h>
+#endif
+#if HAVE_STDLIB_H
+# include <stdlib.h>
+#endif
+#if HAVE_MEMORY_H
+# include <memory.h>
+#endif
+#if HAVE_STDDEF_H
+# include <stddef.h>
+#endif
+#if HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#if HAVE_INTTYPES_H
+# include <inttypes.h>
+#else
+# if HAVE_STDINT_H
+# include <stdint.h>
+# endif
+#endif
+#if defined(BUILD_DIVSUFSORT64)
+# include "divsufsort64.h"
+# ifndef SAIDX_T
+# define SAIDX_T
+# define saidx_t saidx64_t
+# endif /* SAIDX_T */
+# ifndef PRIdSAIDX_T
+# define PRIdSAIDX_T PRIdSAIDX64_T
+# endif /* PRIdSAIDX_T */
+# define divsufsort divsufsort64
+# define divbwt divbwt64
+# define divsufsort_version divsufsort64_version
+# define bw_transform bw_transform64
+# define inverse_bw_transform inverse_bw_transform64
+# define sufcheck sufcheck64
+# define sa_search sa_search64
+# define sa_simplesearch sa_simplesearch64
+# define sssort sssort64
+# define trsort trsort64
+#else
+# include "divsufsort.h"
+#endif
+
+
+/*- Constants -*/
+#if !defined(UINT8_MAX)
+# define UINT8_MAX (255)
+#endif /* UINT8_MAX */
+#if defined(ALPHABET_SIZE) && (ALPHABET_SIZE < 1)
+# undef ALPHABET_SIZE
+#endif
+#if !defined(ALPHABET_SIZE)
+# define ALPHABET_SIZE (UINT8_MAX + 1)
+#endif
+/* for divsufsort.c */
+#define BUCKET_A_SIZE (ALPHABET_SIZE)
+#define BUCKET_B_SIZE (ALPHABET_SIZE * ALPHABET_SIZE)
+/* for sssort.c */
+#if defined(SS_INSERTIONSORT_THRESHOLD)
+# if SS_INSERTIONSORT_THRESHOLD < 1
+# undef SS_INSERTIONSORT_THRESHOLD
+# define SS_INSERTIONSORT_THRESHOLD (1)
+# endif
+#else
+# define SS_INSERTIONSORT_THRESHOLD (8)
+#endif
+#if defined(SS_BLOCKSIZE)
+# if SS_BLOCKSIZE < 0
+# undef SS_BLOCKSIZE
+# define SS_BLOCKSIZE (0)
+# elif 32768 <= SS_BLOCKSIZE
+# undef SS_BLOCKSIZE
+# define SS_BLOCKSIZE (32767)
+# endif
+#else
+# define SS_BLOCKSIZE (1024)
+#endif
+/* minstacksize = log(SS_BLOCKSIZE) / log(3) * 2 */
+#if SS_BLOCKSIZE == 0
+# if defined(BUILD_DIVSUFSORT64)
+# define SS_MISORT_STACKSIZE (96)
+# else
+# define SS_MISORT_STACKSIZE (64)
+# endif
+#elif SS_BLOCKSIZE <= 4096
+# define SS_MISORT_STACKSIZE (16)
+#else
+# define SS_MISORT_STACKSIZE (24)
+#endif
+#if defined(BUILD_DIVSUFSORT64)
+# define SS_SMERGE_STACKSIZE (64)
+#else
+# define SS_SMERGE_STACKSIZE (32)
+#endif
+/* for trsort.c */
+#define TR_INSERTIONSORT_THRESHOLD (8)
+#if defined(BUILD_DIVSUFSORT64)
+# define TR_STACKSIZE (96)
+#else
+# define TR_STACKSIZE (64)
+#endif
+
+
+/*- Macros -*/
+#ifndef SWAP
+# define SWAP(_a, _b) do { t = (_a); (_a) = (_b); (_b) = t; } while(0)
+#endif /* SWAP */
+#ifndef MIN
+# define MIN(_a, _b) (((_a) < (_b)) ? (_a) : (_b))
+#endif /* MIN */
+#ifndef MAX
+# define MAX(_a, _b) (((_a) > (_b)) ? (_a) : (_b))
+#endif /* MAX */
+#define STACK_PUSH(_a, _b, _c, _d)\
+ do {\
+ assert(ssize < STACK_SIZE);\
+ stack[ssize].a = (_a), stack[ssize].b = (_b),\
+ stack[ssize].c = (_c), stack[ssize++].d = (_d);\
+ } while(0)
+#define STACK_PUSH5(_a, _b, _c, _d, _e)\
+ do {\
+ assert(ssize < STACK_SIZE);\
+ stack[ssize].a = (_a), stack[ssize].b = (_b),\
+ stack[ssize].c = (_c), stack[ssize].d = (_d), stack[ssize++].e = (_e);\
+ } while(0)
+#define STACK_POP(_a, _b, _c, _d)\
+ do {\
+ assert(0 <= ssize);\
+ if(ssize == 0) { return; }\
+ (_a) = stack[--ssize].a, (_b) = stack[ssize].b,\
+ (_c) = stack[ssize].c, (_d) = stack[ssize].d;\
+ } while(0)
+#define STACK_POP5(_a, _b, _c, _d, _e)\
+ do {\
+ assert(0 <= ssize);\
+ if(ssize == 0) { return; }\
+ (_a) = stack[--ssize].a, (_b) = stack[ssize].b,\
+ (_c) = stack[ssize].c, (_d) = stack[ssize].d, (_e) = stack[ssize].e;\
+ } while(0)
+/* for divsufsort.c */
+#define BUCKET_A(_c0) bucket_A[(_c0)]
+#if ALPHABET_SIZE == 256
+#define BUCKET_B(_c0, _c1) (bucket_B[((_c1) << 8) | (_c0)])
+#define BUCKET_BSTAR(_c0, _c1) (bucket_B[((_c0) << 8) | (_c1)])
+#else
+#define BUCKET_B(_c0, _c1) (bucket_B[(_c1) * ALPHABET_SIZE + (_c0)])
+#define BUCKET_BSTAR(_c0, _c1) (bucket_B[(_c0) * ALPHABET_SIZE + (_c1)])
+#endif
+
+
+/*- Private Prototypes -*/
+/* sssort.c */
+void
+sssort(const sauchar_t *Td, const saidx_t *PA,
+ saidx_t *first, saidx_t *last,
+ saidx_t *buf, saidx_t bufsize,
+ saidx_t depth, saidx_t n, saint_t lastsuffix);
+/* trsort.c */
+void
+trsort(saidx_t *ISA, saidx_t *SA, saidx_t n, saidx_t depth);
+
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* __cplusplus */
+
+#endif /* _DIVSUFSORT_PRIVATE_H */
diff --git a/tools/z64compress/src/enc/apultra/expand.c b/tools/z64compress/src/enc/apultra/expand.c
new file mode 100644
index 0000000..b65409d
--- /dev/null
+++ b/tools/z64compress/src/enc/apultra/expand.c
@@ -0,0 +1,396 @@
+/*
+ * expand.c - decompressor implementation
+ *
+ * Copyright (C) 2019 Emmanuel Marty
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ * claim that you wrote the original software. If you use this software
+ * in a product, an acknowledgment in the product documentation would be
+ * appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ * misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+ */
+
+/*
+ * Uses the libdivsufsort library Copyright (c) 2003-2008 Yuta Mori
+ *
+ * Inspired by cap by Sven-ke Dahl. https://github.com/svendahl/cap
+ * Also inspired by Charles Bloom's compression blog. http://cbloomrants.blogspot.com/
+ * With ideas from LZ4 by Yann Collet. https://github.com/lz4/lz4
+ * With help and support from spke <zxintrospec@gmail.com>
+ *
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include "format.h"
+#include "expand.h"
+#include "libapultra.h"
+
+#ifdef _MSC_VER
+#define FORCE_INLINE __forceinline
+#else /* _MSC_VER */
+#define FORCE_INLINE __attribute__((always_inline))
+#endif /* _MSC_VER */
+
+static inline FORCE_INLINE int apultra_read_bit(const unsigned char **ppInBlock, const unsigned char *pDataEnd, int *nCurBitMask, unsigned char *bits) {
+ const unsigned char *pInBlock = *ppInBlock;
+ int nBit;
+
+ if ((*nCurBitMask) == 0) {
+ if (pInBlock >= pDataEnd) return -1;
+ (*bits) = *pInBlock++;
+ (*nCurBitMask) = 128;
+ }
+
+ nBit = ((*bits) & 128) ? 1 : 0;
+
+ (*bits) <<= 1;
+ (*nCurBitMask) >>= 1;
+
+ *ppInBlock = pInBlock;
+ return nBit;
+}
+
+static inline FORCE_INLINE int apultra_read_gamma2(const unsigned char **ppInBlock, const unsigned char *pDataEnd, int *nCurBitMask, unsigned char *bits) {
+ int bit;
+ unsigned int v = 1;
+
+ do {
+ v = (v << 1) + apultra_read_bit(ppInBlock, pDataEnd, nCurBitMask, bits);
+ bit = apultra_read_bit(ppInBlock, pDataEnd, nCurBitMask, bits);
+ if (bit < 0) return bit;
+ } while (bit);
+
+ return v;
+}
+
+/**
+ * Get maximum decompressed size of compressed data
+ *
+ * @param pInputData compressed data
+ * @param nInputSize compressed size in bytes
+ * @param nFlags compression flags (set to 0)
+ *
+ * @return maximum decompressed size
+ */
+size_t apultra_get_max_decompressed_size(const unsigned char *pInputData, size_t nInputSize, const unsigned int nFlags) {
+ const unsigned char *pInputDataEnd = pInputData + nInputSize;
+ int nCurBitMask = 0;
+ unsigned char bits = 0;
+ int nMatchOffset = -1;
+ int nFollowsLiteral = 3;
+ size_t nDecompressedSize = 0;
+
+ if (pInputData >= pInputDataEnd)
+ return -1;
+ pInputData++;
+ nDecompressedSize++;
+
+ while (1) {
+ int nResult;
+
+ nResult = apultra_read_bit(&pInputData, pInputDataEnd, &nCurBitMask, &bits);
+ if (nResult < 0) return -1;
+
+ if (!nResult) {
+ /* '0': literal */
+ if (pInputData < pInputDataEnd) {
+ pInputData++;
+ nDecompressedSize++;
+ nFollowsLiteral = 3;
+ }
+ else {
+ return -1;
+ }
+ }
+ else {
+ nResult = apultra_read_bit(&pInputData, pInputDataEnd, &nCurBitMask, &bits);
+ if (nResult < 0) return -1;
+
+ if (nResult == 0) {
+ unsigned int nMatchLen;
+
+ /* '10': 8+n bits offset */
+ int nMatchOffsetHi = apultra_read_gamma2(&pInputData, pInputDataEnd, &nCurBitMask, &bits);
+ nMatchOffsetHi -= nFollowsLiteral;
+ if (nMatchOffsetHi >= 0) {
+ nMatchOffset = ((unsigned int) nMatchOffsetHi) << 8;
+ nMatchOffset |= (unsigned int)(*pInputData++);
+
+ nMatchLen = apultra_read_gamma2(&pInputData, pInputDataEnd, &nCurBitMask, &bits);
+
+ if (nMatchOffset < 128 || nMatchOffset >= MINMATCH4_OFFSET)
+ nMatchLen += 2;
+ else if (nMatchOffset >= MINMATCH3_OFFSET)
+ nMatchLen++;
+ }
+ else {
+ /* else rep-match */
+ nMatchLen = apultra_read_gamma2(&pInputData, pInputDataEnd, &nCurBitMask, &bits);
+ }
+
+ nFollowsLiteral = 2;
+
+ nDecompressedSize += nMatchLen;
+ }
+ else {
+ nResult = apultra_read_bit(&pInputData, pInputDataEnd, &nCurBitMask, &bits);
+ if (nResult < 0) return -1;
+
+ if (nResult == 0) {
+ unsigned int nCommand;
+ unsigned int nMatchLen;
+
+ /* '110': 7 bits offset + 1 bit length */
+ nCommand = (unsigned int)(*pInputData++);
+ if (nCommand == 0x00) {
+ /* EOD. No match len follows. */
+ break;
+ }
+
+ /* Bits 7-1: offset; bit 0: length */
+ nMatchOffset = (nCommand >> 1);
+ nMatchLen = (nCommand & 1) + 2;
+
+ nFollowsLiteral = 2;
+ nDecompressedSize += nMatchLen;
+ }
+ else {
+ unsigned int nShortMatchOffset;
+
+ /* '111': 4 bit offset */
+ nResult = apultra_read_bit(&pInputData, pInputDataEnd, &nCurBitMask, &bits);
+ if (nResult < 0) return -1;
+ nShortMatchOffset = nResult << 3;
+
+ nResult = apultra_read_bit(&pInputData, pInputDataEnd, &nCurBitMask, &bits);
+ if (nResult < 0) return -1;
+ nShortMatchOffset |= nResult << 2;
+
+ nResult = apultra_read_bit(&pInputData, pInputDataEnd, &nCurBitMask, &bits);
+ if (nResult < 0) return -1;
+ nShortMatchOffset |= nResult << 1;
+
+ nResult = apultra_read_bit(&pInputData, pInputDataEnd, &nCurBitMask, &bits);
+ if (nResult < 0) return -1;
+ nShortMatchOffset |= nResult << 0;
+
+ nFollowsLiteral = 3;
+ nDecompressedSize++;
+ }
+ }
+ }
+ }
+
+ return nDecompressedSize;
+}
+
+/**
+ * Decompress data in memory
+ *
+ * @param pInputData compressed data
+ * @param pOutBuffer buffer for decompressed data
+ * @param nInputSize compressed size in bytes
+ * @param nMaxOutBufferSize maximum capacity of decompression buffer
+ * @param nDictionarySize size of dictionary in front of input data (0 for none)
+ * @param nFlags compression flags (set to 0)
+ *
+ * @return actual decompressed size, or -1 for error
+ */
+size_t apultra_decompress(const unsigned char *pInputData, unsigned char *pOutData, size_t nInputSize, size_t nMaxOutBufferSize, size_t nDictionarySize, const unsigned int nFlags) {
+ const unsigned char *pInputDataEnd = pInputData + nInputSize;
+ unsigned char *pCurOutData = pOutData + nDictionarySize;
+ const unsigned char *pOutDataEnd = pCurOutData + nMaxOutBufferSize;
+ const unsigned char *pOutDataFastEnd = pOutDataEnd - 20;
+ int nCurBitMask = 0;
+ unsigned char bits = 0;
+ int nMatchOffset = -1;
+ int nFollowsLiteral = 3;
+
+ if (pInputData >= pInputDataEnd && pCurOutData < pOutDataEnd)
+ return -1;
+ *pCurOutData++ = *pInputData++;
+
+ while (1) {
+ int nResult;
+
+ nResult = apultra_read_bit(&pInputData, pInputDataEnd, &nCurBitMask, &bits);
+ if (nResult < 0) return -1;
+
+ if (!nResult) {
+ /* '0': literal */
+ if (pInputData < pInputDataEnd && pCurOutData < pOutDataEnd) {
+ *pCurOutData++ = *pInputData++;
+ nFollowsLiteral = 3;
+ }
+ else {
+ return -1;
+ }
+ }
+ else {
+ nResult = apultra_read_bit(&pInputData, pInputDataEnd, &nCurBitMask, &bits);
+ if (nResult < 0) return -1;
+
+ if (nResult == 0) {
+ unsigned int nMatchLen;
+
+ /* '10': 8+n bits offset */
+ int nMatchOffsetHi = apultra_read_gamma2(&pInputData, pInputDataEnd, &nCurBitMask, &bits);
+ nMatchOffsetHi -= nFollowsLiteral;
+ if (nMatchOffsetHi >= 0) {
+ nMatchOffset = ((unsigned int) nMatchOffsetHi) << 8;
+ nMatchOffset |= (unsigned int)(*pInputData++);
+
+ nMatchLen = apultra_read_gamma2(&pInputData, pInputDataEnd, &nCurBitMask, &bits);
+
+ if (nMatchOffset < 128 || nMatchOffset >= MINMATCH4_OFFSET)
+ nMatchLen += 2;
+ else if (nMatchOffset >= MINMATCH3_OFFSET)
+ nMatchLen++;
+ }
+ else {
+ /* else rep-match */
+ nMatchLen = apultra_read_gamma2(&pInputData, pInputDataEnd, &nCurBitMask, &bits);
+ }
+
+ nFollowsLiteral = 2;
+ const unsigned char *pSrc = pCurOutData - nMatchOffset;
+ if (pSrc >= pOutData && (pSrc + nMatchLen) <= pOutDataEnd) {
+ if (nMatchLen < 11 && nMatchOffset >= 8 && pCurOutData < pOutDataFastEnd) {
+ memcpy(pCurOutData, pSrc, 8);
+ memcpy(pCurOutData + 8, pSrc + 8, 2);
+ pCurOutData += nMatchLen;
+ }
+ else {
+ if ((pCurOutData + nMatchLen) <= pOutDataEnd) {
+ /* Do a deterministic, left to right byte copy instead of memcpy() so as to handle overlaps */
+
+ if (nMatchOffset >= 16 && (pCurOutData + nMatchLen) < (pOutDataFastEnd - 15)) {
+ const unsigned char *pCopySrc = pSrc;
+ unsigned char *pCopyDst = pCurOutData;
+ const unsigned char *pCopyEndDst = pCurOutData + nMatchLen;
+
+ do {
+ memcpy(pCopyDst, pCopySrc, 16);
+ pCopySrc += 16;
+ pCopyDst += 16;
+ } while (pCopyDst < pCopyEndDst);
+
+ pCurOutData += nMatchLen;
+ }
+ else {
+ while (nMatchLen) {
+ *pCurOutData++ = *pSrc++;
+ nMatchLen--;
+ }
+ }
+ }
+ else {
+ return -1;
+ }
+ }
+ }
+ else {
+ return -1;
+ }
+ }
+ else {
+ nResult = apultra_read_bit(&pInputData, pInputDataEnd, &nCurBitMask, &bits);
+ if (nResult < 0) return -1;
+
+ if (nResult == 0) {
+ unsigned int nCommand;
+ unsigned int nMatchLen;
+
+ /* '110': 7 bits offset + 1 bit length */
+ nCommand = (unsigned int)(*pInputData++);
+ if (nCommand == 0x00) {
+ /* EOD. No match len follows. */
+ break;
+ }
+
+ /* Bits 7-1: offset; bit 0: length */
+ nMatchOffset = (nCommand >> 1);
+ nMatchLen = (nCommand & 1) + 2;
+
+ nFollowsLiteral = 2;
+ const unsigned char *pSrc = pCurOutData - nMatchOffset;
+ if (pSrc >= pOutData && (pSrc + nMatchLen) <= pOutDataEnd) {
+ if (nMatchOffset >= 8 && pCurOutData < pOutDataFastEnd) {
+ memcpy(pCurOutData, pSrc, 8);
+ memcpy(pCurOutData + 8, pSrc + 8, 2);
+ pCurOutData += nMatchLen;
+ }
+ else {
+ if ((pCurOutData + nMatchLen) <= pOutDataEnd) {
+ while (nMatchLen) {
+ *pCurOutData++ = *pSrc++;
+ nMatchLen--;
+ }
+ }
+ else {
+ return -1;
+ }
+ }
+ }
+ else {
+ return -1;
+ }
+ }
+ else {
+ unsigned int nShortMatchOffset;
+
+ /* '111': 4 bit offset */
+ nResult = apultra_read_bit(&pInputData, pInputDataEnd, &nCurBitMask, &bits);
+ if (nResult < 0) return -1;
+ nShortMatchOffset = nResult << 3;
+
+ nResult = apultra_read_bit(&pInputData, pInputDataEnd, &nCurBitMask, &bits);
+ if (nResult < 0) return -1;
+ nShortMatchOffset |= nResult << 2;
+
+ nResult = apultra_read_bit(&pInputData, pInputDataEnd, &nCurBitMask, &bits);
+ if (nResult < 0) return -1;
+ nShortMatchOffset |= nResult << 1;
+
+ nResult = apultra_read_bit(&pInputData, pInputDataEnd, &nCurBitMask, &bits);
+ if (nResult < 0) return -1;
+ nShortMatchOffset |= nResult << 0;
+
+ nFollowsLiteral = 3;
+ if (nShortMatchOffset) {
+ /* Short offset, 1-15 */
+ const unsigned char *pSrc = pCurOutData - nShortMatchOffset;
+ if (pSrc >= pOutData && (pCurOutData + 1) <= pOutDataEnd && (pSrc + 1) <= pOutDataEnd) {
+ *pCurOutData++ = *pSrc++;
+ }
+ else {
+ return -1;
+ }
+ }
+ else {
+ /* Write zero */
+ if ((pCurOutData + 1) <= pOutDataEnd) {
+ *pCurOutData++ = 0;
+ }
+ else {
+ return -1;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return (size_t)(pCurOutData - pOutData) - nDictionarySize;
+}
diff --git a/tools/z64compress/src/enc/apultra/expand.h b/tools/z64compress/src/enc/apultra/expand.h
new file mode 100644
index 0000000..474660c
--- /dev/null
+++ b/tools/z64compress/src/enc/apultra/expand.h
@@ -0,0 +1,71 @@
+/*
+ * expand.h - decompressor definitions
+ *
+ * Copyright (C) 2019 Emmanuel Marty
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ * claim that you wrote the original software. If you use this software
+ * in a product, an acknowledgment in the product documentation would be
+ * appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ * misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+ */
+
+/*
+ * Uses the libdivsufsort library Copyright (c) 2003-2008 Yuta Mori
+ *
+ * Inspired by cap by Sven-ke Dahl. https://github.com/svendahl/cap
+ * Also inspired by Charles Bloom's compression blog. http://cbloomrants.blogspot.com/
+ * With ideas from LZ4 by Yann Collet. https://github.com/lz4/lz4
+ * With help and support from spke <zxintrospec@gmail.com>
+ *
+ */
+
+#ifndef _EXPAND_H
+#define _EXPAND_H
+
+#include <stdlib.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Get maximum decompressed size of compressed data
+ *
+ * @param pInputData compressed data
+ * @param nInputSize compressed size in bytes
+ * @param nFlags compression flags (set to 0)
+ *
+ * @return maximum decompressed size
+ */
+size_t apultra_get_max_decompressed_size(const unsigned char *pInputData, size_t nInputSize, const unsigned int nFlags);
+
+/**
+ * Decompress data in memory
+ *
+ * @param pInputData compressed data
+ * @param pOutBuffer buffer for decompressed data
+ * @param nInputSize compressed size in bytes
+ * @param nMaxOutBufferSize maximum capacity of decompression buffer
+ * @param nDictionarySize size of dictionary in front of input data (0 for none)
+ * @param nFlags compression flags (set to 0)
+ *
+ * @return actual decompressed size, or -1 for error
+ */
+size_t apultra_decompress(const unsigned char *pInputData, unsigned char *pOutBuffer, size_t nInputSize, size_t nMaxOutBufferSize, size_t nDictionarySize, const unsigned int nFlags);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _EXPAND_H */
diff --git a/tools/z64compress/src/enc/apultra/format.h b/tools/z64compress/src/enc/apultra/format.h
new file mode 100644
index 0000000..cf949b5
--- /dev/null
+++ b/tools/z64compress/src/enc/apultra/format.h
@@ -0,0 +1,47 @@
+/*
+ * format.h - byte stream format definitions
+ *
+ * Copyright (C) 2019 Emmanuel Marty
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ * claim that you wrote the original software. If you use this software
+ * in a product, an acknowledgment in the product documentation would be
+ * appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ * misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+ */
+
+/*
+ * Uses the libdivsufsort library Copyright (c) 2003-2008 Yuta Mori
+ *
+ * Inspired by cap by Sven-ke Dahl. https://github.com/svendahl/cap
+ * Also inspired by Charles Bloom's compression blog. http://cbloomrants.blogspot.com/
+ * With ideas from LZ4 by Yann Collet. https://github.com/lz4/lz4
+ * With help and support from spke <zxintrospec@gmail.com>
+ *
+ */
+
+#ifndef _FORMAT_H
+#define _FORMAT_H
+
+#define MIN_OFFSET 1
+#define MAX_OFFSET 0x1fffff
+
+#define MAX_VARLEN 0x1fffff
+
+#define BLOCK_SIZE 0x100000
+
+#define MIN_MATCH_SIZE 1
+#define MINMATCH3_OFFSET 1280
+#define MINMATCH4_OFFSET 32000
+
+#endif /* _FORMAT_H */
diff --git a/tools/z64compress/src/enc/apultra/libapultra.h b/tools/z64compress/src/enc/apultra/libapultra.h
new file mode 100644
index 0000000..f97e336
--- /dev/null
+++ b/tools/z64compress/src/enc/apultra/libapultra.h
@@ -0,0 +1,40 @@
+/*
+ * libapultra.h - library definitions
+ *
+ * Copyright (C) 2019 Emmanuel Marty
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ * claim that you wrote the original software. If you use this software
+ * in a product, an acknowledgment in the product documentation would be
+ * appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ * misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+ */
+
+/*
+ * Uses the libdivsufsort library Copyright (c) 2003-2008 Yuta Mori
+ *
+ * Inspired by cap by Sven-ke Dahl. https://github.com/svendahl/cap
+ * Also inspired by Charles Bloom's compression blog. http://cbloomrants.blogspot.com/
+ * With ideas from LZ4 by Yann Collet. https://github.com/lz4/lz4
+ * With help and support from spke <zxintrospec@gmail.com>
+ *
+ */
+
+#ifndef _LIB_APULTRA_H
+#define _LIB_APULTRA_H
+
+#include "format.h"
+#include "shrink.h"
+#include "expand.h"
+
+#endif /* _LIB_APULTRA_H */
diff --git a/tools/z64compress/src/enc/apultra/matchfinder.c b/tools/z64compress/src/enc/apultra/matchfinder.c
new file mode 100644
index 0000000..a9987f9
--- /dev/null
+++ b/tools/z64compress/src/enc/apultra/matchfinder.c
@@ -0,0 +1,449 @@
+/*
+ * matchfinder.c - LZ match finder implementation
+ *
+ * The following copying information applies to this specific source code file:
+ *
+ * Written in 2019 by Emmanuel Marty <marty.emmanuel@gmail.com>
+ * Portions written in 2014-2015 by Eric Biggers <ebiggers3@gmail.com>
+ *
+ * To the extent possible under law, the author(s) have dedicated all copyright
+ * and related and neighboring rights to this software to the public domain
+ * worldwide via the Creative Commons Zero 1.0 Universal Public Domain
+ * Dedication (the "CC0").
+ *
+ * This software is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the CC0 for more details.
+ *
+ * You should have received a copy of the CC0 along with this software; if not
+ * see <http://creativecommons.org/publicdomain/zero/1.0/>.
+ */
+
+/*
+ * Uses the libdivsufsort library Copyright (c) 2003-2008 Yuta Mori
+ *
+ * Inspired by cap by Sven-ke Dahl. https://github.com/svendahl/cap
+ * Also inspired by Charles Bloom's compression blog. http://cbloomrants.blogspot.com/
+ * With ideas from LZ4 by Yann Collet. https://github.com/lz4/lz4
+ * With help and support from spke <zxintrospec@gmail.com>
+ *
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include "matchfinder.h"
+#include "format.h"
+#include "libapultra.h"
+
+/**
+ * Hash index into TAG_BITS
+ *
+ * @param nIndex index value
+ *
+ * @return hash
+ */
+static inline int apultra_get_index_tag(unsigned int nIndex) {
+ return (int)(((unsigned long long)nIndex * 11400714819323198485ULL) >> (64ULL - TAG_BITS));
+}
+
+/**
+ * Parse input data, build suffix array and overlaid data structures to speed up match finding
+ *
+ * @param pCompressor compression context
+ * @param pInWindow pointer to input data window (previously compressed bytes + bytes to compress)
+ * @param nInWindowSize total input size in bytes (previously compressed bytes + bytes to compress)
+ *
+ * @return 0 for success, non-zero for failure
+ */
+int apultra_build_suffix_array(apultra_compressor *pCompressor, const unsigned char *pInWindow, const int nInWindowSize) {
+ unsigned long long *intervals = pCompressor->intervals;
+
+ /* Build suffix array from input data */
+ saidx_t *suffixArray = (saidx_t*)intervals;
+ if (divsufsort_build_array(&pCompressor->divsufsort_context, pInWindow, suffixArray, nInWindowSize) != 0) {
+ return 100;
+ }
+
+ int i, r;
+
+ for (i = nInWindowSize - 1; i >= 0; i--) {
+ intervals[i] = suffixArray[i];
+ }
+
+ int *PLCP = (int*)pCompressor->pos_data; /* Use temporarily */
+ int *Phi = PLCP;
+ int nCurLen = 0;
+
+ /* Compute the permuted LCP first (Krkkinen method) */
+ Phi[intervals[0]] = -1;
+ for (i = 1; i < nInWindowSize; i++)
+ Phi[intervals[i]] = (unsigned int)intervals[i - 1];
+ for (i = 0; i < nInWindowSize; i++) {
+ if (Phi[i] == -1) {
+ PLCP[i] = 0;
+ continue;
+ }
+ int nMaxLen = (i > Phi[i]) ? (nInWindowSize - i) : (nInWindowSize - Phi[i]);
+ while (nCurLen < nMaxLen && pInWindow[i + nCurLen] == pInWindow[Phi[i] + nCurLen]) nCurLen++;
+ PLCP[i] = nCurLen;
+ if (nCurLen > 0)
+ nCurLen--;
+ }
+
+ /* Rotate permuted LCP into the LCP. This has better cache locality than the direct Kasai LCP method. This also
+ * saves us from having to build the inverse suffix array index, as the LCP is calculated without it using this method,
+ * and the interval builder below doesn't need it either. */
+ intervals[0] &= POS_MASK;
+
+ for (i = 1; i < nInWindowSize; i++) {
+ int nIndex = (int)(intervals[i] & POS_MASK);
+ int nLen = PLCP[nIndex];
+ if (nLen < MIN_MATCH_SIZE)
+ nLen = 0;
+ if (nLen > LCP_MAX)
+ nLen = LCP_MAX;
+ int nTaggedLen = 0;
+ if (nLen)
+ nTaggedLen = (nLen << TAG_BITS) | (apultra_get_index_tag((unsigned int)nIndex) & ((1 << TAG_BITS) - 1));
+ intervals[i] = ((unsigned long long)nIndex) | (((unsigned long long)nTaggedLen) << LCP_SHIFT);
+ }
+
+ /**
+ * Build intervals for finding matches
+ *
+ * Methodology and code fragment taken from wimlib (CC0 license):
+ * https://wimlib.net/git/?p=wimlib;a=blob_plain;f=src/lcpit_matchfinder.c;h=a2d6a1e0cd95200d1f3a5464d8359d5736b14cbe;hb=HEAD
+ */
+ unsigned long long * const SA_and_LCP = intervals;
+ unsigned long long *pos_data = pCompressor->pos_data;
+ unsigned long long next_interval_idx;
+ unsigned long long *top = pCompressor->open_intervals;
+ unsigned long long prev_pos = SA_and_LCP[0] & POS_MASK;
+
+ *top = 0;
+ intervals[0] = 0;
+ next_interval_idx = 1;
+
+ for (r = 1; r < nInWindowSize; r++) {
+ const unsigned long long next_pos = SA_and_LCP[r] & POS_MASK;
+ const unsigned long long next_lcp = SA_and_LCP[r] & LCP_MASK;
+ const unsigned long long top_lcp = *top & LCP_MASK;
+
+ if (next_lcp == top_lcp) {
+ /* Continuing the deepest open interval */
+ pos_data[prev_pos] = *top;
+ }
+ else if (next_lcp > top_lcp) {
+ /* Opening a new interval */
+ *++top = next_lcp | next_interval_idx++;
+ pos_data[prev_pos] = *top;
+ }
+ else {
+ /* Closing the deepest open interval */
+ pos_data[prev_pos] = *top;
+ for (;;) {
+ const unsigned long long closed_interval_idx = *top-- & POS_MASK;
+ const unsigned long long superinterval_lcp = *top & LCP_MASK;
+
+ if (next_lcp == superinterval_lcp) {
+ /* Continuing the superinterval */
+ intervals[closed_interval_idx] = *top;
+ break;
+ }
+ else if (next_lcp > superinterval_lcp) {
+ /* Creating a new interval that is a
+ * superinterval of the one being
+ * closed, but still a subinterval of
+ * its superinterval */
+ *++top = next_lcp | next_interval_idx++;
+ intervals[closed_interval_idx] = *top;
+ break;
+ }
+ else {
+ /* Also closing the superinterval */
+ intervals[closed_interval_idx] = *top;
+ }
+ }
+ }
+ prev_pos = next_pos;
+ }
+
+ /* Close any still-open intervals. */
+ pos_data[prev_pos] = *top;
+ for (; top > pCompressor->open_intervals; top--)
+ intervals[*top & POS_MASK] = *(top - 1);
+
+ /* Success */
+ return 0;
+}
+
+/**
+ * Find matches at the specified offset in the input window
+ *
+ * @param pCompressor compression context
+ * @param nOffset offset to find matches at, in the input window
+ * @param pMatches pointer to returned matches
+ * @param pMatchDepth pointer to returned match depths
+ * @param pMatch1 pointer to 1-byte length, 4 bit offset match
+ * @param nMaxMatches maximum number of matches to return (0 for none)
+ * @param nBlockFlags bit 0: 1 for first block, 0 otherwise; bit 1: 1 for last block, 0 otherwise
+ *
+ * @return number of matches
+ */
+int apultra_find_matches_at(apultra_compressor *pCompressor, const int nOffset, apultra_match *pMatches, unsigned short *pMatchDepth, unsigned char *pMatch1, const int nMaxMatches, const int nBlockFlags) {
+ unsigned long long *intervals = pCompressor->intervals;
+ unsigned long long *pos_data = pCompressor->pos_data;
+ unsigned long long ref;
+ unsigned long long super_ref;
+ unsigned long long match_pos;
+ apultra_match *matchptr;
+ unsigned short *depthptr;
+ const int nMaxOffset = pCompressor->max_offset;
+
+ *pMatch1 = 0;
+
+ /**
+ * Find matches using intervals
+ *
+ * Taken from wimlib (CC0 license):
+ * https://wimlib.net/git/?p=wimlib;a=blob_plain;f=src/lcpit_matchfinder.c;h=a2d6a1e0cd95200d1f3a5464d8359d5736b14cbe;hb=HEAD
+ */
+
+ /* Get the deepest lcp-interval containing the current suffix. */
+ ref = pos_data[nOffset];
+
+ pos_data[nOffset] = 0;
+
+ /* Ascend until we reach a visited interval, the root, or a child of the
+ * root. Link unvisited intervals to the current suffix as we go. */
+ while ((super_ref = intervals[ref & POS_MASK]) & LCP_MASK) {
+ intervals[ref & POS_MASK] = nOffset | VISITED_FLAG;
+ ref = super_ref;
+ }
+
+ if (super_ref == 0) {
+ /* In this case, the current interval may be any of:
+ * (1) the root;
+ * (2) an unvisited child of the root */
+
+ if (ref != 0) /* Not the root? */
+ intervals[ref & POS_MASK] = nOffset | VISITED_FLAG;
+ return 0;
+ }
+
+ /* Ascend indirectly via pos_data[] links. */
+ match_pos = super_ref & EXCL_VISITED_MASK;
+ matchptr = pMatches;
+ depthptr = pMatchDepth;
+ int nPrevOffset = 0;
+ int nPrevLen = 0;
+ int nCurDepth = 0;
+ unsigned short *cur_depth = NULL;
+
+ if (nOffset >= match_pos && (nBlockFlags & 3) == 3) {
+ int nMatchOffset = (int)(nOffset - match_pos);
+ int nMatchLen = (int)(ref >> (LCP_SHIFT + TAG_BITS));
+
+ if ((matchptr - pMatches) < nMaxMatches) {
+ if (nMatchOffset <= nMaxOffset) {
+ if (nPrevOffset && nPrevLen > 2 && nMatchOffset == (nPrevOffset - 1) && nMatchLen == (nPrevLen - 1) && cur_depth && nCurDepth < LCP_MAX) {
+ nCurDepth++;
+ *cur_depth = nCurDepth;
+ }
+ else {
+ nCurDepth = 0;
+
+ cur_depth = depthptr;
+ matchptr->length = nMatchLen;
+ matchptr->offset = nMatchOffset;
+ *depthptr = 0;
+ matchptr++;
+ depthptr++;
+ }
+
+ nPrevLen = nMatchLen;
+ nPrevOffset = nMatchOffset;
+ }
+ }
+ }
+
+ for (;;) {
+ if ((super_ref = pos_data[match_pos]) > ref) {
+ match_pos = intervals[super_ref & POS_MASK] & EXCL_VISITED_MASK;
+
+ if (nOffset >= match_pos && (nBlockFlags & 3) == 3) {
+ int nMatchOffset = (int)(nOffset - match_pos);
+ int nMatchLen = (int)(ref >> (LCP_SHIFT + TAG_BITS));
+
+ if ((matchptr - pMatches) < nMaxMatches) {
+ if (nMatchOffset <= nMaxOffset && abs(nMatchOffset - nPrevOffset) >= 128) {
+ if (nPrevOffset && nPrevLen > 2 && nMatchOffset == (nPrevOffset - 1) && nMatchLen == (nPrevLen - 1) && cur_depth && nCurDepth < LCP_MAX) {
+ nCurDepth++;
+ *cur_depth = nCurDepth | 0x8000;
+ }
+ else {
+ nCurDepth = 0;
+
+ cur_depth = depthptr;
+ matchptr->length = nMatchLen;
+ matchptr->offset = nMatchOffset;
+ *depthptr = 0x8000;
+ matchptr++;
+ depthptr++;
+ }
+
+ nPrevLen = nMatchLen;
+ nPrevOffset = nMatchOffset;
+ }
+ }
+ }
+ }
+
+ while ((super_ref = pos_data[match_pos]) > ref) {
+ match_pos = intervals[super_ref & POS_MASK] & EXCL_VISITED_MASK;
+
+ if (nOffset > match_pos && (nBlockFlags & 3) == 3) {
+ int nMatchOffset = (int)(nOffset - match_pos);
+ int nMatchLen = (int)(ref >> (LCP_SHIFT + TAG_BITS));
+
+ if ((matchptr - pMatches) < nMaxMatches) {
+ if (nMatchOffset <= nMaxOffset && (nMatchLen >= 3 || (nMatchLen >= 2 && (matchptr - pMatches) < (nMaxMatches - 1))) && nMatchLen < 1280 && abs(nMatchOffset - nPrevOffset) >= 128) {
+ if (nPrevOffset && nPrevLen > 2 && nMatchOffset == (nPrevOffset - 1) && nMatchLen == (nPrevLen - 1) && cur_depth && nCurDepth < LCP_MAX) {
+ nCurDepth++;
+ *cur_depth = nCurDepth | 0x8000;
+ }
+ else {
+ nCurDepth = 0;
+
+ cur_depth = depthptr;
+ matchptr->length = nMatchLen;
+ matchptr->offset = nMatchOffset;
+ *depthptr = 0x8000;
+ matchptr++;
+ depthptr++;
+ }
+
+ nPrevLen = nMatchLen;
+ nPrevOffset = nMatchOffset;
+ }
+ }
+ }
+ }
+
+ intervals[ref & POS_MASK] = nOffset | VISITED_FLAG;
+ pos_data[match_pos] = (unsigned long long)ref;
+
+ int nMatchOffset = (int)(nOffset - match_pos);
+ int nMatchLen = (int)(ref >> (LCP_SHIFT + TAG_BITS));
+
+ if ((matchptr - pMatches) < nMaxMatches) {
+ if (nMatchOffset <= nMaxOffset && nMatchOffset != nPrevOffset) {
+ if (nPrevOffset && nPrevLen > 2 && nMatchOffset == (nPrevOffset - 1) && nMatchLen == (nPrevLen - 1) && cur_depth && nCurDepth < LCP_MAX) {
+ nCurDepth++;
+ *cur_depth = nCurDepth;
+ }
+ else {
+ nCurDepth = 0;
+
+ cur_depth = depthptr;
+ matchptr->length = nMatchLen;
+ matchptr->offset = nMatchOffset;
+ *depthptr = 0;
+ matchptr++;
+ depthptr++;
+ }
+
+ nPrevLen = nMatchLen;
+ nPrevOffset = nMatchOffset;
+ }
+ }
+
+ if (nMatchOffset && nMatchOffset < 16 && nMatchLen)
+ *pMatch1 = nMatchOffset;
+
+ if (super_ref == 0)
+ break;
+ ref = super_ref;
+ match_pos = intervals[ref & POS_MASK] & EXCL_VISITED_MASK;
+
+ if (nOffset > match_pos && (nBlockFlags & 3) == 3) {
+ int nMatchOffset = (int)(nOffset - match_pos);
+ int nMatchLen = (int)(ref >> (LCP_SHIFT + TAG_BITS));
+
+ if ((matchptr - pMatches) < nMaxMatches) {
+ if (nMatchOffset <= nMaxOffset && nMatchLen >= 2 && abs(nMatchOffset - nPrevOffset) >= 128) {
+ if (nPrevOffset && nPrevLen > 2 && nMatchOffset == (nPrevOffset - 1) && nMatchLen == (nPrevLen - 1) && cur_depth && nCurDepth < LCP_MAX) {
+ nCurDepth++;
+ *cur_depth = nCurDepth | 0x8000;
+ }
+ else {
+ nCurDepth = 0;
+
+ cur_depth = depthptr;
+ matchptr->length = nMatchLen;
+ matchptr->offset = nMatchOffset;
+ *depthptr = 0x8000;
+ matchptr++;
+ depthptr++;
+ }
+
+ nPrevLen = nMatchLen;
+ nPrevOffset = nMatchOffset;
+ }
+ }
+ }
+ }
+
+ return (int)(matchptr - pMatches);
+}
+
+/**
+ * Skip previously compressed bytes
+ *
+ * @param pCompressor compression context
+ * @param nStartOffset current offset in input window (typically 0)
+ * @param nEndOffset offset to skip to in input window (typically the number of previously compressed bytes)
+ */
+void apultra_skip_matches(apultra_compressor *pCompressor, const int nStartOffset, const int nEndOffset) {
+ apultra_match match;
+ unsigned short depth;
+ unsigned char match1;
+ int i;
+
+ /* Skipping still requires scanning for matches, as this also performs a lazy update of the intervals. However,
+ * we don't store the matches. */
+ for (i = nStartOffset; i < nEndOffset; i++) {
+ apultra_find_matches_at(pCompressor, i, &match, &depth, &match1, 0, 0);
+ }
+}
+
+/**
+ * Find all matches for the data to be compressed
+ *
+ * @param pCompressor compression context
+ * @param nMatchesPerOffset maximum number of matches to store for each offset
+ * @param nStartOffset current offset in input window (typically the number of previously compressed bytes)
+ * @param nEndOffset offset to end finding matches at (typically the size of the total input window in bytes
+ * @param nBlockFlags bit 0: 1 for first block, 0 otherwise; bit 1: 1 for last block, 0 otherwise
+ */
+void apultra_find_all_matches(apultra_compressor *pCompressor, const int nMatchesPerOffset, const int nStartOffset, const int nEndOffset, const int nBlockFlags) {
+ apultra_match *pMatch = pCompressor->match;
+ unsigned short *pMatchDepth = pCompressor->match_depth;
+ unsigned char *pMatch1 = pCompressor->match1;
+ int i;
+
+ for (i = nStartOffset; i < nEndOffset; i++) {
+ int nMatches = apultra_find_matches_at(pCompressor, i, pMatch, pMatchDepth, pMatch1, nMatchesPerOffset, nBlockFlags);
+
+ while (nMatches < nMatchesPerOffset) {
+ pMatch[nMatches].length = 0;
+ pMatch[nMatches].offset = 0;
+ pMatchDepth[nMatches] = 0;
+ nMatches++;
+ }
+
+ pMatch += nMatchesPerOffset;
+ pMatchDepth += nMatchesPerOffset;
+ pMatch1++;
+ }
+}
diff --git a/tools/z64compress/src/enc/apultra/matchfinder.h b/tools/z64compress/src/enc/apultra/matchfinder.h
new file mode 100644
index 0000000..7d68eaf
--- /dev/null
+++ b/tools/z64compress/src/enc/apultra/matchfinder.h
@@ -0,0 +1,94 @@
+/*
+ * matchfinder.h - LZ match finder definitions
+ *
+ * Copyright (C) 2019 Emmanuel Marty
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ * claim that you wrote the original software. If you use this software
+ * in a product, an acknowledgment in the product documentation would be
+ * appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ * misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+ */
+
+/*
+ * Uses the libdivsufsort library Copyright (c) 2003-2008 Yuta Mori
+ *
+ * Inspired by cap by Sven-ke Dahl. https://github.com/svendahl/cap
+ * Also inspired by Charles Bloom's compression blog. http://cbloomrants.blogspot.com/
+ * With ideas from LZ4 by Yann Collet. https://github.com/lz4/lz4
+ * With help and support from spke <zxintrospec@gmail.com>
+ *
+ */
+
+#ifndef _MATCHFINDER_H
+#define _MATCHFINDER_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+typedef struct _apultra_match apultra_match;
+typedef struct _apultra_compressor apultra_compressor;
+
+/**
+ * Parse input data, build suffix array and overlaid data structures to speed up match finding
+ *
+ * @param pCompressor compression context
+ * @param pInWindow pointer to input data window (previously compressed bytes + bytes to compress)
+ * @param nInWindowSize total input size in bytes (previously compressed bytes + bytes to compress)
+ *
+ * @return 0 for success, non-zero for failure
+ */
+int apultra_build_suffix_array(apultra_compressor *pCompressor, const unsigned char *pInWindow, const int nInWindowSize);
+
+/**
+ * Find matches at the specified offset in the input window
+ *
+ * @param pCompressor compression context
+ * @param nOffset offset to find matches at, in the input window
+ * @param pMatches pointer to returned matches
+ * @param pMatchDepth pointer to returned match depths
+ * @param pMatch1 pointer to 1-byte length, 4 bit offset match
+ * @param nMaxMatches maximum number of matches to return (0 for none)
+ * @param nBlockFlags bit 0: 1 for first block, 0 otherwise; bit 1: 1 for last block, 0 otherwise
+ *
+ * @return number of matches
+ */
+int apultra_find_matches_at(apultra_compressor *pCompressor, const int nOffset, apultra_match *pMatches, unsigned short *pMatchDepth, unsigned char *pMatch1, const int nMaxMatches, const int nBlockFlags);
+
+/**
+ * Skip previously compressed bytes
+ *
+ * @param pCompressor compression context
+ * @param nStartOffset current offset in input window (typically 0)
+ * @param nEndOffset offset to skip to in input window (typically the number of previously compressed bytes)
+ */
+void apultra_skip_matches(apultra_compressor *pCompressor, const int nStartOffset, const int nEndOffset);
+
+/**
+ * Find all matches for the data to be compressed
+ *
+ * @param pCompressor compression context
+ * @param nMatchesPerOffset maximum number of matches to store for each offset
+ * @param nStartOffset current offset in input window (typically the number of previously compressed bytes)
+ * @param nEndOffset offset to end finding matches at (typically the size of the total input window in bytes
+ * @param nBlockFlags bit 0: 1 for first block, 0 otherwise; bit 1: 1 for last block, 0 otherwise
+ */
+void apultra_find_all_matches(apultra_compressor *pCompressor, const int nMatchesPerOffset, const int nStartOffset, const int nEndOffset, const int nBlockFlags);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _MATCHFINDER_H */
diff --git a/tools/z64compress/src/enc/apultra/shrink.c b/tools/z64compress/src/enc/apultra/shrink.c
new file mode 100644
index 0000000..1d24a9c
--- /dev/null
+++ b/tools/z64compress/src/enc/apultra/shrink.c
@@ -0,0 +1,1731 @@
+/*
+ * shrink.c - compressor implementation
+ *
+ * Copyright (C) 2019 Emmanuel Marty
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ * claim that you wrote the original software. If you use this software
+ * in a product, an acknowledgment in the product documentation would be
+ * appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ * misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+ */
+
+/*
+ * Uses the libdivsufsort library Copyright (c) 2003-2008 Yuta Mori
+ *
+ * Inspired by cap by Sven-ke Dahl. https://github.com/svendahl/cap
+ * Also inspired by Charles Bloom's compression blog. http://cbloomrants.blogspot.com/
+ * With ideas from LZ4 by Yann Collet. https://github.com/lz4/lz4
+ * With help and support from spke <zxintrospec@gmail.com>
+ *
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+#include "libapultra.h"
+#include "matchfinder.h"
+#include "shrink.h"
+#include "format.h"
+
+#define TOKEN_CODE_LARGE_MATCH 2 /* 10 */
+#define TOKEN_SIZE_LARGE_MATCH 2
+
+#define TOKEN_CODE_7BIT_MATCH 6 /* 110 */
+#define TOKEN_SIZE_7BIT_MATCH 3
+
+#define TOKEN_CODE_4BIT_MATCH 7 /* 111 */
+#define TOKEN_SIZE_4BIT_MATCH 3
+
+#define CountShift(N,bits) if ((N)>>(bits)) { (N)>>=(bits); (n) += (bits); }
+
+/** Gamma2 bit counts for common values, up to 255 */
+static char _gamma2_size[256] = {
+ 0, 0, 2, 2, 4, 4, 4, 4, 6, 6, 6, 6, 6, 6, 6, 6, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+};
+
+/**
+ * Write bitpacked value to output (compressed) buffer
+ *
+ * @param pOutData pointer to output buffer
+ * @param nOutOffset current write index into output buffer
+ * @param nMaxOutDataSize maximum size of output buffer, in bytes
+ * @param nValue value to write
+ * @param nBits number of least significant bits to write in value
+ * @param nCurBitsOffset write index into output buffer, of current byte being filled with bits
+ * @param nCurBitShift bit shift count
+ *
+ * @return updated write index into output buffer, or -1 in case of an error
+ */
+static int apultra_write_bits(unsigned char *pOutData, int nOutOffset, const int nMaxOutDataSize, const int nValue, const int nBits, int *nCurBitsOffset, int *nCurBitShift) {
+ int i;
+
+ if (nOutOffset < 0) return -1;
+
+ for (i = nBits - 1; i >= 0; i--) {
+ if ((*nCurBitsOffset) == INT_MIN) {
+ /* Allocate a new byte in the stream to pack bits in */
+ if (nOutOffset >= nMaxOutDataSize) return -1;
+ (*nCurBitsOffset) = nOutOffset;
+ (*nCurBitShift) = 7;
+ pOutData[nOutOffset++] = 0;
+ }
+
+ pOutData[(*nCurBitsOffset)] |= ((nValue >> i) & 1) << (*nCurBitShift);
+
+ (*nCurBitShift) --;
+ if ((*nCurBitShift) == -1) {
+ /* Current byte is full */
+ (*nCurBitsOffset) = INT_MIN;
+ }
+ }
+
+ return nOutOffset;
+}
+
+/**
+ * Get size of gamma2 encoded value
+ *
+ * @param nValue value of evaluate (2..n)
+ *
+ * @return number of bits required
+ */
+static int apultra_get_gamma2_size(int nValue) {
+ if (nValue >= 0 && nValue < 256)
+ return _gamma2_size[nValue];
+ else {
+ unsigned int n = 0;
+ CountShift(nValue, 16);
+ CountShift(nValue, 8);
+ CountShift(nValue, 4);
+ CountShift(nValue, 2);
+ CountShift(nValue, 1);
+
+ return n << 1;
+ }
+}
+
+/**
+ * Write gamma2 encoded value to output (compressed) buffer
+ *
+ * @param pOutData pointer to output buffer
+ * @param nOutOffset current write index into output buffer
+ * @param nMaxOutDataSize maximum size of output buffer, in bytes
+ * @param nValue value of write (2..n)
+ * @param nCurBitsOffset write index into output buffer, of current byte being filled with bits
+ * @param nCurBitShift bit shift count
+ *
+ * @return updated write index into output buffer, or -1 in case of an error
+ */
+static int apultra_write_gamma2_value(unsigned char *pOutData, int nOutOffset, const int nMaxOutDataSize, int nValue, int *nCurBitsOffset, int *nCurBitShift) {
+ int msb = 30;
+ while ((nValue >> msb--) == 0);
+
+ while (msb > 0) {
+ int bit = (nValue >> msb) & 1;
+
+ nOutOffset = apultra_write_bits(pOutData, nOutOffset, nMaxOutDataSize, bit, 1, nCurBitsOffset, nCurBitShift);
+ msb--;
+ nOutOffset = apultra_write_bits(pOutData, nOutOffset, nMaxOutDataSize, 1, 1, nCurBitsOffset, nCurBitShift);
+ }
+
+ nOutOffset = apultra_write_bits(pOutData, nOutOffset, nMaxOutDataSize, nValue & 1, 1, nCurBitsOffset, nCurBitShift);
+ nOutOffset = apultra_write_bits(pOutData, nOutOffset, nMaxOutDataSize, 0, 1, nCurBitsOffset, nCurBitShift);
+ return nOutOffset;
+}
+
+/**
+ * Get the number of extra bits required to represent a match offset
+ *
+ * @param nLength match length
+ * @param nMatchOffset match offset
+ * @param nFollowsLiteral non-zero if the match follows a literal, zero if it immediately follows another match
+ *
+ * @return number of extra bits required
+ */
+static inline int apultra_get_offset_varlen_size(const int nLength, const int nMatchOffset, const int nFollowsLiteral) {
+ if (nLength <= 3 && nMatchOffset < 128)
+ return 8 + TOKEN_SIZE_7BIT_MATCH;
+ else {
+ if (nFollowsLiteral)
+ return 8 + TOKEN_SIZE_LARGE_MATCH + apultra_get_gamma2_size((nMatchOffset >> 8) + 3);
+ else
+ return 8 + TOKEN_SIZE_LARGE_MATCH + apultra_get_gamma2_size((nMatchOffset >> 8) + 2);
+ }
+}
+
+/**
+ * Get the number of extra bits required to represent a match length
+ *
+ * @param nLength match length
+ * @param nMatchOffset match offset
+ *
+ * @return number of extra bits required
+ */
+static inline int apultra_get_match_varlen_size(int nLength, const int nMatchOffset) {
+ if (nLength <= 3 && nMatchOffset < 128)
+ return 0;
+ else {
+ if (nMatchOffset < 128 || nMatchOffset >= MINMATCH4_OFFSET)
+ return apultra_get_gamma2_size(nLength - 2);
+ else if (nMatchOffset < MINMATCH3_OFFSET)
+ return apultra_get_gamma2_size(nLength);
+ else
+ return apultra_get_gamma2_size(nLength - 1);
+ }
+}
+
+/**
+ * Insert forward rep candidate
+ *
+ * @param pCompressor compression context
+ * @param pInWindow pointer to input data window (previously compressed bytes + bytes to compress)
+ * @param i input data window position whose matches are being considered
+ * @param nMatchOffset match offset to use as rep candidate
+ * @param nStartOffset current offset in input window (typically the number of previously compressed bytes)
+ * @param nEndOffset offset to end finding matches at (typically the size of the total input window in bytes
+ * @param nArrivalsPerPosition maximum number of arrivals per input buffer position
+ * @param nDepth current insertion depth
+ */
+static void apultra_insert_forward_match(apultra_compressor *pCompressor, const unsigned char *pInWindow, const int i, const int nMatchOffset, const int nStartOffset, const int nEndOffset, const int nArrivalsPerPosition, int nDepth) {
+ const apultra_arrival *arrival = pCompressor->arrival + ((i - nStartOffset) * nArrivalsPerPosition);
+ const int *rle_len = (int*)pCompressor->intervals /* reuse */;
+ int* visited = ((int*)pCompressor->pos_data) - nStartOffset /* reuse */;
+ int* visited2 = visited + (nEndOffset - nStartOffset) /* reuse */;
+ int j;
+
+ for (j = 0; j < nArrivalsPerPosition && arrival[j].from_slot; j++) {
+ if (arrival[j].follows_literal) {
+ int nRepOffset = arrival[j].rep_offset;
+
+ if (nMatchOffset != nRepOffset && nRepOffset) {
+ int nRepPos = arrival[j].rep_pos;
+
+ if (nRepPos >= nStartOffset &&
+ nRepPos < nEndOffset &&
+ visited[nRepPos] != nMatchOffset) {
+
+ visited[nRepPos] = nMatchOffset;
+
+ if (visited2[nRepPos] != nMatchOffset && nRepPos >= nMatchOffset && pCompressor->match[((nRepPos - nStartOffset) << MATCHES_PER_INDEX_SHIFT) + NMATCHES_PER_INDEX - 1].length == 0) {
+ const unsigned char* pInWindowAtRepOffset = pInWindow + nRepPos;
+
+ if (pInWindowAtRepOffset[0] == pInWindowAtRepOffset[-nMatchOffset]) {
+ int nLen0 = rle_len[nRepPos - nMatchOffset];
+ int nLen1 = rle_len[nRepPos];
+ int nMinLen = (nLen0 < nLen1) ? nLen0 : nLen1;
+
+ int nMaxRepLen = nEndOffset - nRepPos;
+ if (nMaxRepLen > LCP_MAX)
+ nMaxRepLen = LCP_MAX;
+
+ if (nMinLen > nMaxRepLen)
+ nMinLen = nMaxRepLen;
+
+ const unsigned char* pInWindowMax = pInWindowAtRepOffset + nMaxRepLen;
+ pInWindowAtRepOffset += nMinLen;
+
+ while ((pInWindowAtRepOffset + 8) < pInWindowMax && !memcmp(pInWindowAtRepOffset, pInWindowAtRepOffset - nMatchOffset, 8))
+ pInWindowAtRepOffset += 8;
+ while ((pInWindowAtRepOffset + 4) < pInWindowMax && !memcmp(pInWindowAtRepOffset, pInWindowAtRepOffset - nMatchOffset, 4))
+ pInWindowAtRepOffset += 4;
+ while (pInWindowAtRepOffset < pInWindowMax && pInWindowAtRepOffset[0] == pInWindowAtRepOffset[-nMatchOffset])
+ pInWindowAtRepOffset++;
+
+ int nCurRepLen = (int)(pInWindowAtRepOffset - (pInWindow + nRepPos));
+
+ if (nCurRepLen >= 2) {
+ apultra_match* fwd_match = pCompressor->match + ((nRepPos - nStartOffset) << MATCHES_PER_INDEX_SHIFT);
+ unsigned short* fwd_depth = pCompressor->match_depth + ((nRepPos - nStartOffset) << MATCHES_PER_INDEX_SHIFT);
+ int r;
+
+ for (r = 0; fwd_match[r].length >= MIN_MATCH_SIZE; r++) {
+ if (fwd_match[r].offset == nMatchOffset && (fwd_depth[r] & 0x3fff) == 0) {
+ if ((int)fwd_match[r].length < nCurRepLen) {
+ fwd_match[r].length = nCurRepLen;
+ fwd_depth[r] = 0;
+ }
+ r = NMATCHES_PER_INDEX;
+ break;
+ }
+ }
+
+ if (r < NMATCHES_PER_INDEX) {
+ visited2[nRepPos] = nMatchOffset;
+
+ fwd_match[r].offset = nMatchOffset;
+ fwd_match[r].length = nCurRepLen;
+ fwd_depth[r] = 0;
+
+ if (nDepth < 9)
+ apultra_insert_forward_match(pCompressor, pInWindow, nRepPos, nMatchOffset, nStartOffset, nEndOffset, nArrivalsPerPosition, nDepth + 1);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+/**
+ * Attempt to pick optimal matches, so as to produce the smallest possible output that decompresses to the same input
+ *
+ * @param pCompressor compression context
+ * @param pInWindow pointer to input data window (previously compressed bytes + bytes to compress)
+ * @param nStartOffset current offset in input window (typically the number of previously compressed bytes)
+ * @param nEndOffset offset to end finding matches at (typically the size of the total input window in bytes
+ * @param nInsertForwardReps non-zero to insert forward repmatch candidates, zero to use the previously inserted candidates
+ * @param nCurRepMatchOffset starting rep offset for this block
+ * @param nBlockFlags bit 0: 1 for first block, 0 otherwise; bit 1: 1 for last block, 0 otherwise
+ * @param nArrivalsPerPosition maximum number of arrivals per input buffer position
+ */
+static void apultra_optimize_forward(apultra_compressor *pCompressor, const unsigned char *pInWindow, const int nStartOffset, const int nEndOffset, const int nInsertForwardReps, const int *nCurRepMatchOffset, const int nBlockFlags, const int nArrivalsPerPosition) {
+ apultra_arrival *arrival = pCompressor->arrival - (nStartOffset * nArrivalsPerPosition);
+ const int* rle_len = (int*)pCompressor->intervals /* reuse */;
+ int* visited = ((int*)pCompressor->pos_data) - nStartOffset /* reuse */;
+ int i, j, n;
+
+ if ((nEndOffset - nStartOffset) > pCompressor->block_size) return;
+
+ memset(arrival + (nStartOffset * nArrivalsPerPosition), 0, sizeof(apultra_arrival) * ((nEndOffset - nStartOffset + 1) * nArrivalsPerPosition));
+
+ arrival[nStartOffset * nArrivalsPerPosition].from_slot = -1;
+ arrival[nStartOffset * nArrivalsPerPosition].rep_offset = *nCurRepMatchOffset;
+
+ for (i = (nStartOffset * nArrivalsPerPosition); i != ((nEndOffset+1) * nArrivalsPerPosition); i++) {
+ arrival[i].cost = 0x40000000;
+ }
+
+ if (nInsertForwardReps) {
+ memset(visited + nStartOffset, 0, 2 * (nEndOffset - nStartOffset) * sizeof(int));
+ }
+
+ for (i = nStartOffset; i != nEndOffset; i++) {
+ apultra_arrival *cur_arrival = &arrival[i * nArrivalsPerPosition];
+ int m;
+
+ const unsigned char nMatch1Offs = pCompressor->match1[i - nStartOffset];
+ int nShortOffset;
+ int nShortLen;
+ int nLiteralScore;
+ int nLiteralCost;
+
+ if ((pInWindow[i] != 0 && nMatch1Offs == 0) || (i == nStartOffset && (nBlockFlags & 1))) {
+ nShortOffset = 0;
+ nShortLen = 0;
+ nLiteralCost = 9 /* literal bit + literal byte */;
+ }
+ else {
+ nShortOffset = (pInWindow[i] == 0) ? 0 : nMatch1Offs;
+ nShortLen = 1;
+ nLiteralCost = 4 + TOKEN_SIZE_4BIT_MATCH /* command and offset cost; no length cost */;
+ }
+
+ nLiteralScore = nShortOffset ? 3 : 1;
+
+ if (cur_arrival[nArrivalsPerPosition].from_slot) {
+ for (j = 0; j < nArrivalsPerPosition && cur_arrival[j].from_slot; j++) {
+ int nPrevCost = cur_arrival[j].cost & 0x3fffffff;
+ int nCodingChoiceCost = nPrevCost + nLiteralCost;
+ int nScore = cur_arrival[j].score + nLiteralScore;
+
+ apultra_arrival* pDestSlots = &cur_arrival[nArrivalsPerPosition];
+ if (nCodingChoiceCost < pDestSlots[nArrivalsPerPosition - 1].cost ||
+ (nCodingChoiceCost == pDestSlots[nArrivalsPerPosition - 1].cost && nScore < pDestSlots[nArrivalsPerPosition - 1].score)) {
+ int nRepOffset = cur_arrival[j].rep_offset;
+ int exists = 0;
+
+ for (n = 0;
+ pDestSlots[n].cost < nCodingChoiceCost;
+ n++) {
+ if (pDestSlots[n].rep_offset == nRepOffset) {
+ exists = 1;
+ break;
+ }
+ }
+
+ if (!exists) {
+ for (;
+ n < nArrivalsPerPosition && pDestSlots[n].cost == nCodingChoiceCost && nScore >= pDestSlots[n].score;
+ n++) {
+ if (pDestSlots[n].rep_offset == nRepOffset) {
+ exists = 1;
+ break;
+ }
+ }
+
+ if (!exists) {
+ if (n < nArrivalsPerPosition) {
+ int nn;
+
+ for (nn = n;
+ nn < nArrivalsPerPosition && pDestSlots[nn].cost == nCodingChoiceCost;
+ nn++) {
+ if (pDestSlots[nn].rep_offset == nRepOffset) {
+ exists = 1;
+ break;
+ }
+ }
+
+ if (!exists) {
+ int z;
+
+ for (z = n; z < nArrivalsPerPosition - 1 && pDestSlots[z].from_slot; z++) {
+ if (pDestSlots[z].rep_offset == nRepOffset)
+ break;
+ }
+
+ apultra_arrival* pDestArrival = &pDestSlots[n];
+ memmove(&pDestSlots[n + 1],
+ &pDestSlots[n],
+ sizeof(apultra_arrival) * (z - n));
+
+ pDestArrival->cost = nCodingChoiceCost;
+ pDestArrival->from_pos = i;
+ pDestArrival->from_slot = j + 1;
+ pDestArrival->follows_literal = 1;
+ pDestArrival->rep_offset = nRepOffset;
+ pDestArrival->short_offset = nShortOffset;
+ pDestArrival->rep_pos = cur_arrival[j].rep_pos;
+ pDestArrival->match_len = nShortLen;
+ pDestArrival->score = nScore;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ else {
+ for (j = 0; j < nArrivalsPerPosition && cur_arrival[j].from_slot; j++) {
+ int nPrevCost = cur_arrival[j].cost & 0x3fffffff;
+ int nCodingChoiceCost = nPrevCost + nLiteralCost;
+ int nScore = cur_arrival[j].score + nLiteralScore;
+
+ apultra_arrival* pDestArrival = &cur_arrival[nArrivalsPerPosition + j];
+
+ pDestArrival->cost = nCodingChoiceCost;
+ pDestArrival->from_pos = i;
+ pDestArrival->from_slot = j + 1;
+ pDestArrival->follows_literal = 1;
+ pDestArrival->rep_offset = cur_arrival[j].rep_offset;
+ pDestArrival->short_offset = nShortOffset;
+ pDestArrival->rep_pos = cur_arrival[j].rep_pos;
+ pDestArrival->match_len = nShortLen;
+ pDestArrival->score = nScore;
+ }
+ }
+
+ if (i == nStartOffset && (nBlockFlags & 1)) continue;
+
+ const apultra_match *match = pCompressor->match + ((i - nStartOffset) << MATCHES_PER_INDEX_SHIFT);
+ const unsigned short *match_depth = pCompressor->match_depth + ((i - nStartOffset) << MATCHES_PER_INDEX_SHIFT);
+ int nNumArrivalsForThisPos = j, nOverallMinRepLen = 0, nOverallMaxRepLen = 0;
+
+ int nRepLenForArrival[NARRIVALS_PER_POSITION_MAX];
+ memset(nRepLenForArrival, 0, nArrivalsPerPosition * sizeof(int));
+
+ int nRepMatchArrivalIdx[NARRIVALS_PER_POSITION_MAX + 1];
+ int nNumRepMatchArrivals = 0;
+
+ int nMaxRepLenForPos = nEndOffset - i;
+ if (nMaxRepLenForPos > LCP_MAX)
+ nMaxRepLenForPos = LCP_MAX;
+ const unsigned char* pInWindowStart = pInWindow + i;
+ const unsigned char* pInWindowMax = pInWindowStart + nMaxRepLenForPos;
+ const int nLen1 = rle_len[i];
+
+ for (j = 0; j < nNumArrivalsForThisPos && (i + 2) <= nEndOffset; j++) {
+ if (cur_arrival[j].follows_literal) {
+ int nRepOffset = cur_arrival[j].rep_offset;
+
+ if (nRepOffset && i >= nRepOffset) {
+ if (pInWindowStart[0] == pInWindowStart[-nRepOffset]) {
+ int nLen0 = rle_len[i - nRepOffset];
+ int nMinLen = (nLen0 < nLen1) ? nLen0 : nLen1;
+
+ if (nMinLen > nMaxRepLenForPos)
+ nMinLen = nMaxRepLenForPos;
+
+ const unsigned char* pInWindowAtRepOffset = pInWindowStart + nMinLen;
+ while ((pInWindowAtRepOffset + 8) < pInWindowMax && !memcmp(pInWindowAtRepOffset, pInWindowAtRepOffset - nRepOffset, 8))
+ pInWindowAtRepOffset += 8;
+ while ((pInWindowAtRepOffset + 4) < pInWindowMax && !memcmp(pInWindowAtRepOffset, pInWindowAtRepOffset - nRepOffset, 4))
+ pInWindowAtRepOffset += 4;
+ while (pInWindowAtRepOffset < pInWindowMax && pInWindowAtRepOffset[0] == pInWindowAtRepOffset[-nRepOffset])
+ pInWindowAtRepOffset++;
+
+ int nCurMaxLen = (int)(pInWindowAtRepOffset - pInWindowStart);
+
+ if (nCurMaxLen >= 2) {
+ nRepLenForArrival[j] = nCurMaxLen;
+ nRepMatchArrivalIdx[nNumRepMatchArrivals++] = j;
+
+ if (nOverallMaxRepLen < nCurMaxLen)
+ nOverallMaxRepLen = nCurMaxLen;
+ }
+ }
+ }
+ }
+ }
+ nRepMatchArrivalIdx[nNumRepMatchArrivals] = -1;
+
+ for (m = 0; m < NMATCHES_PER_INDEX && match[m].length; m++) {
+ const int nOrigMatchLen = match[m].length;
+ const int nOrigMatchOffset = match[m].offset;
+ const unsigned int nOrigMatchDepth = match_depth[m] & 0x3fff;
+ const int nScorePenalty = 3 + ((match_depth[m] & 0x8000) >> 15);
+ unsigned int d;
+
+ for (d = 0; d <= nOrigMatchDepth; d += (nOrigMatchDepth ? nOrigMatchDepth : 1)) {
+ const int nMatchOffset = nOrigMatchOffset - d;
+ int nMatchLen = nOrigMatchLen - d;
+
+ if ((i + nMatchLen) > nEndOffset)
+ nMatchLen = nEndOffset - i;
+
+ if (nInsertForwardReps) {
+ apultra_insert_forward_match(pCompressor, pInWindow, i, nMatchOffset, nStartOffset, nEndOffset, nArrivalsPerPosition, 0);
+ }
+
+ if (nMatchLen >= 2) {
+ int nStartingMatchLen, nJumpMatchLen, k;
+ int nNoRepMatchOffsetCostForLit[2], nNoRepMatchOffsetCostDelta;
+ int nMinMatchLenForOffset;
+ int nNoRepCostAdjusment = (nMatchLen >= LCP_MAX) ? 1 : 0;
+
+ if (nMatchOffset < MINMATCH3_OFFSET)
+ nMinMatchLenForOffset = 2;
+ else {
+ if (nMatchOffset < MINMATCH4_OFFSET)
+ nMinMatchLenForOffset = 3;
+ else
+ nMinMatchLenForOffset = 4;
+ }
+
+ if (nMatchLen >= LEAVE_ALONE_MATCH_SIZE && i >= nMatchLen)
+ nStartingMatchLen = nMatchLen;
+ else
+ nStartingMatchLen = 2;
+
+ if ((nBlockFlags & 3) == 3 && nMatchLen > 90 && i >= 90)
+ nJumpMatchLen = 90;
+ else
+ nJumpMatchLen = nMatchLen + 1;
+
+ if (nStartingMatchLen <= 3 && nMatchOffset < 128) {
+ nNoRepMatchOffsetCostForLit[0] = 8 + TOKEN_SIZE_7BIT_MATCH;
+ nNoRepMatchOffsetCostForLit[1] = 8 + TOKEN_SIZE_7BIT_MATCH;
+ }
+ else {
+ nNoRepMatchOffsetCostForLit[0] = 8 + TOKEN_SIZE_LARGE_MATCH + apultra_get_gamma2_size((nMatchOffset >> 8) + 2);
+ nNoRepMatchOffsetCostForLit[1] = 8 + TOKEN_SIZE_LARGE_MATCH + apultra_get_gamma2_size((nMatchOffset >> 8) + 3);
+ }
+ nNoRepMatchOffsetCostDelta = nNoRepMatchOffsetCostForLit[1] - nNoRepMatchOffsetCostForLit[0];
+
+ for (k = nStartingMatchLen; k <= nMatchLen; k++) {
+ int nRepMatchMatchLenCost = apultra_get_gamma2_size(k);
+ apultra_arrival *pDestSlots = &cur_arrival[k * nArrivalsPerPosition];
+
+ /* Insert non-repmatch candidate */
+
+ if (k >= nMinMatchLenForOffset) {
+ int nNoRepMatchMatchLenCost;
+
+ if (k <= 3 && nMatchOffset < 128)
+ nNoRepMatchMatchLenCost = 0;
+ else {
+ if (nMatchOffset < 128 || nMatchOffset >= MINMATCH4_OFFSET)
+ nNoRepMatchMatchLenCost = apultra_get_gamma2_size(k - 2);
+ else if (nMatchOffset < MINMATCH3_OFFSET)
+ nNoRepMatchMatchLenCost = nRepMatchMatchLenCost;
+ else
+ nNoRepMatchMatchLenCost = apultra_get_gamma2_size(k - 1);
+ }
+
+ for (j = 0; j < nNumArrivalsForThisPos; j++) {
+ if (nMatchOffset != cur_arrival[j].rep_offset || cur_arrival[j].follows_literal == 0) {
+ int nPrevCost = cur_arrival[j].cost & 0x3fffffff;
+ int nMatchCmdCost = nNoRepMatchMatchLenCost + nNoRepMatchOffsetCostForLit[cur_arrival[j].follows_literal];
+ int nCodingChoiceCost = nPrevCost + nMatchCmdCost;
+
+ if (nCodingChoiceCost <= (pDestSlots[nArrivalsPerPosition - 1].cost + 1)) {
+ int nScore = cur_arrival[j].score + nScorePenalty;
+
+ if (nCodingChoiceCost < pDestSlots[nArrivalsPerPosition - 2].cost ||
+ (nCodingChoiceCost == pDestSlots[nArrivalsPerPosition - 2].cost && nScore < pDestSlots[nArrivalsPerPosition - 2].score)) {
+ int exists = 0;
+
+ for (n = 0;
+ pDestSlots[n].cost < nCodingChoiceCost;
+ n++) {
+ if (pDestSlots[n].rep_offset == nMatchOffset) {
+ exists = 1;
+ break;
+ }
+ }
+
+ if (!exists) {
+ int nRevisedCodingChoiceCost = nCodingChoiceCost - nNoRepCostAdjusment;
+
+ for (;
+ n < nArrivalsPerPosition - 1 && pDestSlots[n].cost == nRevisedCodingChoiceCost && nScore >= pDestSlots[n].score;
+ n++) {
+ if (pDestSlots[n].rep_offset == nMatchOffset) {
+ exists = 1;
+ break;
+ }
+ }
+
+ if (!exists) {
+ if (n < nArrivalsPerPosition - 1) {
+ int nn;
+
+ for (nn = n;
+ nn < nArrivalsPerPosition && pDestSlots[nn].cost == nCodingChoiceCost;
+ nn++) {
+ if (pDestSlots[nn].rep_offset == nMatchOffset) {
+ exists = 1;
+ break;
+ }
+ }
+
+ if (!exists) {
+ int z;
+
+ for (z = n; z < nArrivalsPerPosition - 1 && pDestSlots[z].from_slot; z++) {
+ if (pDestSlots[z].rep_offset == nMatchOffset)
+ break;
+ }
+
+ apultra_arrival* pDestArrival = &pDestSlots[n];
+ memmove(&pDestSlots[n + 1],
+ &pDestSlots[n],
+ sizeof(apultra_arrival) * (z - n));
+
+ pDestArrival->cost = nRevisedCodingChoiceCost;
+ pDestArrival->from_pos = i;
+ pDestArrival->from_slot = j + 1;
+ pDestArrival->follows_literal = 0;
+ pDestArrival->rep_offset = nMatchOffset;
+ pDestArrival->short_offset = 0;
+ pDestArrival->rep_pos = i;
+ pDestArrival->match_len = k;
+ pDestArrival->score = nScore;
+ }
+ }
+ }
+ }
+ else {
+ if ((nCodingChoiceCost - pDestSlots[n].cost) >= nNoRepMatchOffsetCostDelta)
+ break;
+ }
+ }
+ if (cur_arrival[j].follows_literal == 0 || nNoRepMatchOffsetCostDelta == 0)
+ break;
+ }
+ else {
+ break;
+ }
+ }
+ }
+ }
+
+ /* Insert repmatch candidate */
+
+ if (k > nOverallMinRepLen && k <= nOverallMaxRepLen) {
+ int nRepMatchCmdCost = TOKEN_SIZE_LARGE_MATCH + 2 /* apultra_get_gamma2_size(2) */ + nRepMatchMatchLenCost;
+ int nCurRepMatchArrival;
+
+ if (k <= 90)
+ nOverallMinRepLen = k;
+ else if (nOverallMaxRepLen == k)
+ nOverallMaxRepLen--;
+
+ for (nCurRepMatchArrival = 0; (j = nRepMatchArrivalIdx[nCurRepMatchArrival]) >= 0; nCurRepMatchArrival++) {
+ if (nRepLenForArrival[j] >= k) {
+ int nPrevCost = cur_arrival[j].cost & 0x3fffffff;
+ int nRepCodingChoiceCost = nPrevCost + nRepMatchCmdCost;
+ int nScore = cur_arrival[j].score + 2;
+
+ if (nRepCodingChoiceCost < pDestSlots[nArrivalsPerPosition - 1].cost ||
+ (nRepCodingChoiceCost == pDestSlots[nArrivalsPerPosition - 1].cost && nScore < pDestSlots[nArrivalsPerPosition - 1].score)) {
+ int nRepOffset = cur_arrival[j].rep_offset;
+ int exists = 0;
+
+ for (n = 0;
+ pDestSlots[n].cost < nRepCodingChoiceCost;
+ n++) {
+ if (pDestSlots[n].rep_offset == nRepOffset) {
+ exists = 1;
+ break;
+ }
+ }
+
+ if (!exists) {
+ for (;
+ n < nArrivalsPerPosition && pDestSlots[n].cost == nRepCodingChoiceCost && nScore >= pDestSlots[n].score;
+ n++) {
+ if (pDestSlots[n].rep_offset == nRepOffset) {
+ exists = 1;
+ break;
+ }
+ }
+
+ if (!exists) {
+ if (n < nArrivalsPerPosition) {
+ int nn;
+
+ for (nn = n;
+ nn < nArrivalsPerPosition && pDestSlots[nn].cost == nRepCodingChoiceCost;
+ nn++) {
+ if (pDestSlots[nn].rep_offset == nRepOffset) {
+ exists = 1;
+ break;
+ }
+ }
+
+ if (!exists) {
+ int z;
+
+ for (z = n; z < nArrivalsPerPosition - 1 && pDestSlots[z].from_slot; z++) {
+ if (pDestSlots[z].rep_offset == nRepOffset)
+ break;
+ }
+
+ apultra_arrival* pDestArrival = &pDestSlots[n];
+ memmove(&pDestSlots[n + 1],
+ &pDestSlots[n],
+ sizeof(apultra_arrival) * (z - n));
+
+ pDestArrival->cost = nRepCodingChoiceCost;
+ pDestArrival->from_pos = i;
+ pDestArrival->from_slot = j + 1;
+ pDestArrival->follows_literal = 0;
+ pDestArrival->rep_offset = nRepOffset;
+ pDestArrival->short_offset = 0;
+ pDestArrival->rep_pos = i;
+ pDestArrival->match_len = k;
+ pDestArrival->score = nScore;
+ }
+ }
+ }
+ }
+ }
+ else {
+ break;
+ }
+ }
+ }
+ }
+
+ if (k == 3 && nMatchOffset < 128) {
+ nNoRepMatchOffsetCostForLit[0] = 8 + TOKEN_SIZE_LARGE_MATCH + 2 /* apultra_get_gamma2_size((nMatchOffset >> 8) + 2) */;
+ nNoRepMatchOffsetCostForLit[1] = 8 + TOKEN_SIZE_LARGE_MATCH + 2 /* apultra_get_gamma2_size((nMatchOffset >> 8) + 3) */;
+ }
+
+ if (k == nJumpMatchLen)
+ k = nMatchLen - 1;
+ }
+ }
+
+ if (nOrigMatchLen >= 512)
+ break;
+ }
+ }
+ }
+
+ if (!nInsertForwardReps) {
+ const apultra_arrival* end_arrival = &arrival[(i * nArrivalsPerPosition) + 0];
+ apultra_final_match* pBestMatch = pCompressor->best_match - nStartOffset;
+
+ while (end_arrival->from_slot > 0 && end_arrival->from_pos >= 0 && (int)end_arrival->from_pos < nEndOffset) {
+ pBestMatch[end_arrival->from_pos].length = end_arrival->match_len;
+ if (end_arrival->match_len >= 2)
+ pBestMatch[end_arrival->from_pos].offset = end_arrival->rep_offset;
+ else
+ pBestMatch[end_arrival->from_pos].offset = end_arrival->short_offset;
+
+ end_arrival = &arrival[(end_arrival->from_pos * nArrivalsPerPosition) + (end_arrival->from_slot - 1)];
+ }
+ }
+}
+
+/**
+ * Attempt to replace matches by literals when it makes the final bitstream smaller, and merge large matches
+ *
+ * @param pCompressor compression context
+ * @param pInWindow pointer to input data window (previously compressed bytes + bytes to compress)
+ * @param pBestMatch optimal matches to evaluate and update
+ * @param nStartOffset current offset in input window (typically the number of previously compressed bytes)
+ * @param nEndOffset offset to end finding matches at (typically the size of the total input window in bytes
+ * @param nCurRepMatchOffset starting rep offset for this block
+ * @param nBlockFlags bit 0: 1 for first block, 0 otherwise; bit 1: 1 for last block, 0 otherwise
+ *
+ * @return non-zero if the number of tokens was reduced, 0 if it wasn't
+ */
+static int apultra_reduce_commands(apultra_compressor *pCompressor, const unsigned char *pInWindow, apultra_final_match *pBestMatch, const int nStartOffset, const int nEndOffset, const int *nCurRepMatchOffset, const int nBlockFlags) {
+ int i;
+ int nRepMatchOffset = *nCurRepMatchOffset;
+ int nFollowsLiteral = 0;
+ int nDidReduce = 0;
+ int nLastMatchLen = 0;
+ const unsigned char *match1 = pCompressor->match1 - nStartOffset;
+
+ for (i = nStartOffset + ((nBlockFlags & 1) ? 1 : 0); i < nEndOffset; ) {
+ apultra_final_match *pMatch = pBestMatch + i;
+
+ if (pMatch->length <= 1 &&
+ (i + 1) < nEndOffset &&
+ pBestMatch[i + 1].length >= 2 &&
+ pBestMatch[i + 1].length < MAX_VARLEN &&
+ pBestMatch[i + 1].offset &&
+ i >= pBestMatch[i + 1].offset &&
+ (i + pBestMatch[i + 1].length + 1) <= nEndOffset &&
+ !memcmp(pInWindow + i - (pBestMatch[i + 1].offset), pInWindow + i, pBestMatch[i + 1].length + 1)) {
+ if ((pBestMatch[i + 1].offset < MINMATCH3_OFFSET || (pBestMatch[i + 1].length + 1) >= 3 || (pBestMatch[i + 1].offset == nRepMatchOffset && nFollowsLiteral)) &&
+ (pBestMatch[i + 1].offset < MINMATCH4_OFFSET || (pBestMatch[i + 1].length + 1) >= 4 || (pBestMatch[i + 1].offset == nRepMatchOffset && nFollowsLiteral))) {
+
+ int nCurPartialCommandSize = (pMatch->length == 1) ? (TOKEN_SIZE_4BIT_MATCH + 4) : (1 /* literal bit */ + 8 /* literal size */);
+ if (pBestMatch[i + 1].offset == nRepMatchOffset /* always follows a literal, the one at the current position */) {
+ nCurPartialCommandSize += TOKEN_SIZE_LARGE_MATCH + 2 /* apultra_get_gamma2_size(2) */ + apultra_get_gamma2_size(pBestMatch[i + 1].length);
+ }
+ else {
+ nCurPartialCommandSize += apultra_get_offset_varlen_size(pBestMatch[i + 1].length, pBestMatch[i + 1].offset, 1) + apultra_get_match_varlen_size(pBestMatch[i + 1].length, pBestMatch[i + 1].offset);
+ }
+
+ int nReducedPartialCommandSize;
+ if (pBestMatch[i + 1].offset == nRepMatchOffset && nFollowsLiteral) {
+ nReducedPartialCommandSize = TOKEN_SIZE_LARGE_MATCH + 2 /* apultra_get_gamma2_size(2) */ + apultra_get_gamma2_size(pBestMatch[i + 1].length);
+ }
+ else {
+ nReducedPartialCommandSize = apultra_get_offset_varlen_size(pBestMatch[i + 1].length, pBestMatch[i + 1].offset, nFollowsLiteral) + apultra_get_match_varlen_size(pBestMatch[i + 1].length, pBestMatch[i + 1].offset);
+ }
+
+ if (nReducedPartialCommandSize < nCurPartialCommandSize || (nFollowsLiteral == 0 && nLastMatchLen >= LCP_MAX)) {
+ /* Merge */
+ pBestMatch[i].length = pBestMatch[i + 1].length + 1;
+ pBestMatch[i].offset = pBestMatch[i + 1].offset;
+ pBestMatch[i + 1].length = 0;
+ pBestMatch[i + 1].offset = 0;
+ nDidReduce = 1;
+ continue;
+ }
+ }
+ }
+
+ if (pMatch->length >= 2) {
+ if (pMatch->length < 32 && /* Don't waste time considering large matches, they will always win over literals */
+ (i + pMatch->length) < nEndOffset /* Don't consider the last match in the block, we can only reduce a match inbetween other tokens */) {
+ int nNextIndex = i + pMatch->length;
+ int nNextFollowsLiteral = 0;
+ int nCannotEncode = 0;
+
+ while (nNextIndex < nEndOffset && pBestMatch[nNextIndex].length < 2) {
+ nNextIndex++;
+ nNextFollowsLiteral = 1;
+ }
+
+ if (nNextIndex < nEndOffset && pBestMatch[nNextIndex].length >= 2) {
+ if (nRepMatchOffset && nRepMatchOffset != pMatch->offset && pBestMatch[nNextIndex].offset && pMatch->offset != pBestMatch[nNextIndex].offset &&
+ nNextFollowsLiteral) {
+ /* Try to gain a match forward */
+ if (i >= pBestMatch[nNextIndex].offset && (i - pBestMatch[nNextIndex].offset + pMatch->length) <= nEndOffset) {
+ if ((pBestMatch[nNextIndex].offset < MINMATCH3_OFFSET || pMatch->length >= 3) &&
+ (pBestMatch[nNextIndex].offset < MINMATCH4_OFFSET || pMatch->length >= 4)) {
+ int nMaxLen = 0;
+ const unsigned char* pInWindowAtPos = pInWindow + i;
+ while (nMaxLen < pMatch->length && pInWindowAtPos[nMaxLen - pBestMatch[nNextIndex].offset] == pInWindowAtPos[nMaxLen])
+ nMaxLen++;
+
+ if (nMaxLen >= pMatch->length) {
+ /* Replace */
+ pMatch->offset = pBestMatch[nNextIndex].offset;
+ nDidReduce = 1;
+ }
+ else if (nMaxLen >= 2) {
+ if ((nFollowsLiteral && nRepMatchOffset == pBestMatch[nNextIndex].offset) ||
+ ((pBestMatch[nNextIndex].offset < MINMATCH3_OFFSET || nMaxLen >= 3) &&
+ (pBestMatch[nNextIndex].offset < MINMATCH4_OFFSET || nMaxLen >= 4))) {
+
+ int nPartialSizeBefore, nPartialSizeAfter, j;
+
+ nPartialSizeBefore = apultra_get_offset_varlen_size(pMatch->length, pMatch->offset, nFollowsLiteral);
+ nPartialSizeBefore += apultra_get_match_varlen_size(pMatch->length, pMatch->offset);
+
+ nPartialSizeBefore += apultra_get_offset_varlen_size(pBestMatch[nNextIndex].length, pBestMatch[nNextIndex].offset, 1);
+ nPartialSizeBefore += apultra_get_match_varlen_size(pBestMatch[nNextIndex].length, pBestMatch[nNextIndex].offset);
+
+ nPartialSizeAfter = apultra_get_offset_varlen_size(nMaxLen, pBestMatch[nNextIndex].offset, nFollowsLiteral);
+ if (nFollowsLiteral && nRepMatchOffset == pBestMatch[nNextIndex].offset)
+ nPartialSizeAfter += apultra_get_gamma2_size(nMaxLen);
+ else
+ nPartialSizeAfter += apultra_get_match_varlen_size(nMaxLen, pBestMatch[nNextIndex].offset);
+
+ nPartialSizeAfter += TOKEN_SIZE_LARGE_MATCH + 2 /* apultra_get_gamma2_size(2) */;
+ nPartialSizeAfter += apultra_get_gamma2_size(pBestMatch[nNextIndex].length);
+
+ for (j = nMaxLen; j < pMatch->length; j++) {
+ if (pInWindow[i + j] == 0 || match1[i + j])
+ nPartialSizeAfter += TOKEN_SIZE_4BIT_MATCH + 4;
+ else
+ nPartialSizeAfter += 1 /* literal bit */ + 8 /* literal byte */;
+ }
+
+ if (nPartialSizeAfter < nPartialSizeBefore) {
+ /* We gain a repmatch that is shorter than the original match as this is the best we can do, so it is followed by extra literals, but
+ * we have calculated that this is shorter */
+
+ int nOrigLen = pMatch->length;
+ int j;
+
+ pMatch->offset = pBestMatch[nNextIndex].offset;
+ pMatch->length = nMaxLen;
+
+ for (j = nMaxLen; j < nOrigLen; j++) {
+ pBestMatch[i + j].offset = match1[i + j];
+ pBestMatch[i + j].length = (pInWindow[i + j] && match1[i+j] == 0) ? 0 : 1;
+ }
+
+ nDidReduce = 1;
+ continue;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /* Calculate this command's current cost */
+
+ int nCurCommandSize;
+ if (pMatch->offset == nRepMatchOffset && nFollowsLiteral) {
+ nCurCommandSize = TOKEN_SIZE_LARGE_MATCH + 2 /* apultra_get_gamma2_size(2) */ + apultra_get_gamma2_size(pMatch->length);
+ }
+ else {
+ nCurCommandSize = apultra_get_offset_varlen_size(pMatch->length, pMatch->offset, nFollowsLiteral) + apultra_get_match_varlen_size(pMatch->length, pMatch->offset);
+ }
+
+ /* Calculate the next command's current cost */
+ int nNextCommandSize;
+ if (pBestMatch[nNextIndex].offset == pMatch->offset && nNextFollowsLiteral && pBestMatch[nNextIndex].length >= 2) {
+ nNextCommandSize = TOKEN_SIZE_LARGE_MATCH + 2 /* apultra_get_gamma2_size(2) */ + apultra_get_gamma2_size(pBestMatch[nNextIndex].length);
+ }
+ else {
+ nNextCommandSize = apultra_get_offset_varlen_size(pBestMatch[nNextIndex].length, pBestMatch[nNextIndex].offset, nNextFollowsLiteral) + apultra_get_match_varlen_size(pBestMatch[nNextIndex].length, pBestMatch[nNextIndex].offset);
+ }
+
+ int nOriginalCombinedCommandSize = nCurCommandSize + nNextCommandSize;
+
+ /* Calculate the cost of replacing this match command by literals + the effect on the cost of the next command */
+ int nReducedCommandSize = 0;
+ int j;
+
+ for (j = 0; j < pMatch->length; j++) {
+ if (pInWindow[i + j] == 0 || match1[i + j])
+ nReducedCommandSize += TOKEN_SIZE_4BIT_MATCH + 4;
+ else
+ nReducedCommandSize += 1 /* literal bit */ + 8;
+ }
+
+ if (pBestMatch[nNextIndex].offset == nRepMatchOffset /* the new command would always follow literals, the ones we create */ && pBestMatch[nNextIndex].length >= 2) {
+ nReducedCommandSize += TOKEN_SIZE_LARGE_MATCH + 2 /* apultra_get_gamma2_size(2) */ + apultra_get_gamma2_size(pBestMatch[nNextIndex].length);
+ }
+ else {
+ if ((pBestMatch[nNextIndex].length < 3 && pBestMatch[nNextIndex].offset >= MINMATCH3_OFFSET) ||
+ (pBestMatch[nNextIndex].length < 4 && pBestMatch[nNextIndex].offset >= MINMATCH4_OFFSET)) {
+ /* This match length can only be encoded with a rep-match */
+ nCannotEncode = 1;
+ }
+ else {
+ nReducedCommandSize += apultra_get_offset_varlen_size(pBestMatch[nNextIndex].length, pBestMatch[nNextIndex].offset, 1 /* follows literals */) + apultra_get_match_varlen_size(pBestMatch[nNextIndex].length, pBestMatch[nNextIndex].offset);
+ }
+ }
+
+ if (!nCannotEncode && nOriginalCombinedCommandSize > nReducedCommandSize) {
+ /* Reduce */
+ int nMatchLen = pMatch->length;
+ int j;
+
+ for (j = 0; j < nMatchLen; j++) {
+ pBestMatch[i + j].offset = match1[i + j];
+ pBestMatch[i + j].length = (pInWindow[i + j] && match1[i + j] == 0) ? 0 : 1;
+ }
+
+ nDidReduce = 1;
+ continue;
+ }
+ }
+ }
+
+ if ((i + pMatch->length) < nEndOffset && pMatch->offset > 0 &&
+ pBestMatch[i + pMatch->length].offset > 0 &&
+ pBestMatch[i + pMatch->length].length >= 2 &&
+ (pMatch->length + pBestMatch[i + pMatch->length].length) >= LEAVE_ALONE_MATCH_SIZE &&
+ (pMatch->length + pBestMatch[i + pMatch->length].length) <= MAX_VARLEN &&
+ (i + pMatch->length) >= pMatch->offset &&
+ (i + pMatch->length) >= pBestMatch[i + pMatch->length].offset &&
+ (i + pMatch->length + pBestMatch[i + pMatch->length].length) <= nEndOffset &&
+ !memcmp(pInWindow + i + pMatch->length - pMatch->offset,
+ pInWindow + i + pMatch->length - pBestMatch[i + pMatch->length].offset,
+ pBestMatch[i + pMatch->length].length)) {
+ int nMatchLen = pMatch->length;
+
+ /* Join large matches */
+
+ int nNextIndex = i + pMatch->length + pBestMatch[i + pMatch->length].length;
+ int nNextFollowsLiteral = 0;
+ int nCannotEncode = 0;
+
+ while (nNextIndex < nEndOffset && pBestMatch[nNextIndex].length < 2) {
+ nNextIndex++;
+ nNextFollowsLiteral = 1;
+ }
+
+ if (nNextIndex < nEndOffset && nNextFollowsLiteral && pBestMatch[nNextIndex].length >= 2 &&
+ pBestMatch[nNextIndex].offset == pBestMatch[i + pMatch->length].offset) {
+ if ((pBestMatch[nNextIndex].offset >= MINMATCH3_OFFSET && pBestMatch[nNextIndex].length < 3) ||
+ (pBestMatch[nNextIndex].offset >= MINMATCH4_OFFSET && pBestMatch[nNextIndex].length < 4)) {
+ nCannotEncode = 1;
+ }
+ }
+
+ if (!nCannotEncode) {
+ pMatch->length += pBestMatch[i + nMatchLen].length;
+ pBestMatch[i + nMatchLen].offset = 0;
+ pBestMatch[i + nMatchLen].length = -1;
+ nDidReduce = 1;
+ continue;
+ }
+ }
+
+ nRepMatchOffset = pMatch->offset;
+ nFollowsLiteral = 0;
+ nLastMatchLen = pMatch->length;
+
+ i += pMatch->length;
+ }
+ else {
+ /* 4 bits offset (1 byte match) or literal */
+ i++;
+ nFollowsLiteral = 1;
+ nLastMatchLen = 0;
+ }
+ }
+
+ return nDidReduce;
+}
+
+/**
+ * Emit a block of compressed data
+ *
+ * @param pCompressor compression context
+ * @param pBestMatch optimal matches to emit
+ * @param pInWindow pointer to input data window (previously compressed bytes + bytes to compress)
+ * @param nStartOffset current offset in input window (typically the number of previously compressed bytes)
+ * @param nEndOffset offset to end finding matches at (typically the size of the total input window in bytes
+ * @param pOutData pointer to output buffer
+ * @param nMaxOutDataSize maximum size of output buffer, in bytes
+ * @param nCurBitsOffset write index into output buffer, of current byte being filled with bits
+ * @param nCurBitShift bit shift count
+ * @param nFollowsLiteral non-zero if the next command to be issued follows a literal, 0 if not
+ * @param nCurRepMatchOffset starting rep offset for this block, updated after the block is compressed successfully
+ * @param nBlockFlags bit 0: 1 for first block, 0 otherwise; bit 1: 1 for last block, 0 otherwise
+ *
+ * @return size of compressed data in output buffer, or -1 if the data is uncompressible
+ */
+static int apultra_write_block(apultra_compressor *pCompressor, apultra_final_match *pBestMatch, const unsigned char *pInWindow, const int nStartOffset, const int nEndOffset, unsigned char *pOutData, int nOutOffset, const int nMaxOutDataSize, int *nCurBitsOffset, int *nCurBitShift, int *nFollowsLiteral, int *nCurRepMatchOffset, const int nBlockFlags) {
+ int i;
+ int nRepMatchOffset = *nCurRepMatchOffset;
+ const int nMaxOffset = pCompressor->max_offset;
+
+ if (nBlockFlags & 1) {
+ if (nOutOffset < 0 || nOutOffset >= nMaxOutDataSize)
+ return -1;
+ pOutData[nOutOffset++] = pInWindow[nStartOffset];
+ *nFollowsLiteral = 1;
+ }
+
+ for (i = nStartOffset + ((nBlockFlags & 1) ? 1 : 0); i < nEndOffset; ) {
+ const apultra_final_match *pMatch = pBestMatch + i;
+
+ if (pMatch->length >= 2) {
+ int nMatchOffset = pMatch->offset;
+ int nMatchLen = pMatch->length;
+
+ if (nMatchOffset < MIN_OFFSET || nMatchOffset > nMaxOffset)
+ return -1;
+
+ if (nMatchOffset == nRepMatchOffset && *nFollowsLiteral) {
+ /* Rep-match */
+ nOutOffset = apultra_write_bits(pOutData, nOutOffset, nMaxOutDataSize, TOKEN_CODE_LARGE_MATCH, TOKEN_SIZE_LARGE_MATCH, nCurBitsOffset, nCurBitShift);
+ nOutOffset = apultra_write_bits(pOutData, nOutOffset, nMaxOutDataSize, 0 /* length of 2 encoded as gamma 2 */, 2, nCurBitsOffset, nCurBitShift);
+
+ /* The match length isn't encoded in the command, emit elias gamma value */
+ nOutOffset = apultra_write_gamma2_value(pOutData, nOutOffset, nMaxOutDataSize, nMatchLen, nCurBitsOffset, nCurBitShift);
+ if (nOutOffset < 0) return -1;
+
+ *nFollowsLiteral = 0;
+
+ pCompressor->stats.num_rep_matches++;
+ }
+ else {
+ if (nMatchLen <= 3 && nMatchOffset < 128) {
+ /* 7 bits offset + 1 bit length */
+ nOutOffset = apultra_write_bits(pOutData, nOutOffset, nMaxOutDataSize, TOKEN_CODE_7BIT_MATCH, TOKEN_SIZE_7BIT_MATCH, nCurBitsOffset, nCurBitShift);
+
+ if (nOutOffset < 0 || nOutOffset >= nMaxOutDataSize)
+ return -1;
+ pOutData[nOutOffset++] = ((nMatchOffset) & 0x7f) << 1 | (nMatchLen - 2);
+
+ *nFollowsLiteral = 0;
+ nRepMatchOffset = nMatchOffset;
+
+ pCompressor->stats.num_7bit_matches++;
+ }
+ else {
+ /* 8+n bits offset */
+ nOutOffset = apultra_write_bits(pOutData, nOutOffset, nMaxOutDataSize, TOKEN_CODE_LARGE_MATCH, TOKEN_SIZE_LARGE_MATCH, nCurBitsOffset, nCurBitShift);
+
+ if (nOutOffset < 0 || nOutOffset >= nMaxOutDataSize)
+ return -1;
+ if (*nFollowsLiteral)
+ nOutOffset = apultra_write_gamma2_value(pOutData, nOutOffset, nMaxOutDataSize, (nMatchOffset >> 8) + 3, nCurBitsOffset, nCurBitShift);
+ else
+ nOutOffset = apultra_write_gamma2_value(pOutData, nOutOffset, nMaxOutDataSize, (nMatchOffset >> 8) + 2, nCurBitsOffset, nCurBitShift);
+ pOutData[nOutOffset++] = nMatchOffset & 0xff;
+
+ /* The match length isn't encoded in the command, emit elias gamma value */
+
+ if (nMatchOffset < 128 || nMatchOffset >= MINMATCH4_OFFSET)
+ nOutOffset = apultra_write_gamma2_value(pOutData, nOutOffset, nMaxOutDataSize, nMatchLen - 2, nCurBitsOffset, nCurBitShift);
+ else if (nMatchOffset < MINMATCH3_OFFSET)
+ nOutOffset = apultra_write_gamma2_value(pOutData, nOutOffset, nMaxOutDataSize, nMatchLen, nCurBitsOffset, nCurBitShift);
+ else
+ nOutOffset = apultra_write_gamma2_value(pOutData, nOutOffset, nMaxOutDataSize, nMatchLen - 1, nCurBitsOffset, nCurBitShift);
+ if (nOutOffset < 0) return -1;
+
+ *nFollowsLiteral = 0;
+ nRepMatchOffset = nMatchOffset;
+
+ pCompressor->stats.num_variable_matches++;
+ }
+ }
+
+ if (nMatchOffset < pCompressor->stats.min_offset || pCompressor->stats.min_offset == -1)
+ pCompressor->stats.min_offset = nMatchOffset;
+ if (nMatchOffset > pCompressor->stats.max_offset)
+ pCompressor->stats.max_offset = nMatchOffset;
+ pCompressor->stats.total_offsets += (long long)nMatchOffset;
+
+ if (nMatchLen < pCompressor->stats.min_match_len || pCompressor->stats.min_match_len == -1)
+ pCompressor->stats.min_match_len = nMatchLen;
+ if (nMatchLen > pCompressor->stats.max_match_len)
+ pCompressor->stats.max_match_len = nMatchLen;
+ pCompressor->stats.total_match_lens += nMatchLen;
+ pCompressor->stats.match_divisor++;
+
+ if (nMatchOffset == 1) {
+ if (nMatchLen < pCompressor->stats.min_rle1_len || pCompressor->stats.min_rle1_len == -1)
+ pCompressor->stats.min_rle1_len = nMatchLen;
+ if (nMatchLen > pCompressor->stats.max_rle1_len)
+ pCompressor->stats.max_rle1_len = nMatchLen;
+ pCompressor->stats.total_rle1_lens += nMatchLen;
+ pCompressor->stats.rle1_divisor++;
+ }
+ else if (nMatchOffset == 2) {
+ if (nMatchLen < pCompressor->stats.min_rle2_len || pCompressor->stats.min_rle2_len == -1)
+ pCompressor->stats.min_rle2_len = nMatchLen;
+ if (nMatchLen > pCompressor->stats.max_rle2_len)
+ pCompressor->stats.max_rle2_len = nMatchLen;
+ pCompressor->stats.total_rle2_lens += nMatchLen;
+ pCompressor->stats.rle2_divisor++;
+ }
+
+ i += nMatchLen;
+
+ pCompressor->stats.commands_divisor++;
+ }
+ else if (pMatch->length == 1) {
+ int nMatchOffset = pMatch->offset;
+
+ /* 4 bits offset */
+
+ if (nMatchOffset < 0 || nMatchOffset > 15)
+ return -1;
+
+ nOutOffset = apultra_write_bits(pOutData, nOutOffset, nMaxOutDataSize, TOKEN_CODE_4BIT_MATCH, TOKEN_SIZE_4BIT_MATCH, nCurBitsOffset, nCurBitShift);
+ nOutOffset = apultra_write_bits(pOutData, nOutOffset, nMaxOutDataSize, nMatchOffset, 4, nCurBitsOffset, nCurBitShift);
+ if (nOutOffset < 0) return -1;
+
+ pCompressor->stats.num_4bit_matches++;
+ pCompressor->stats.commands_divisor++;
+
+ i++;
+ *nFollowsLiteral = 1;
+ }
+ else {
+ /* Literal */
+
+ nOutOffset = apultra_write_bits(pOutData, nOutOffset, nMaxOutDataSize, 0 /* literal */, 1, nCurBitsOffset, nCurBitShift);
+
+ if (nOutOffset < 0 || nOutOffset >= nMaxOutDataSize)
+ return -1;
+ pOutData[nOutOffset++] = pInWindow[i];
+
+ pCompressor->stats.num_literals++;
+ pCompressor->stats.commands_divisor++;
+ i++;
+ *nFollowsLiteral = 1;
+ }
+
+ int nCurSafeDist = (i - nStartOffset) - nOutOffset;
+ if (nCurSafeDist >= 0 && pCompressor->stats.safe_dist < nCurSafeDist)
+ pCompressor->stats.safe_dist = nCurSafeDist;
+ }
+
+ if (nBlockFlags & 2) {
+ /* 8 bits offset */
+
+ nOutOffset = apultra_write_bits(pOutData, nOutOffset, nMaxOutDataSize, TOKEN_CODE_7BIT_MATCH, TOKEN_SIZE_7BIT_MATCH, nCurBitsOffset, nCurBitShift);
+
+ if (nOutOffset < 0 || nOutOffset >= nMaxOutDataSize)
+ return -1;
+ pOutData[nOutOffset++] = 0x00; /* Offset: EOD */
+ pCompressor->stats.num_eod++;
+ pCompressor->stats.commands_divisor++;
+
+ int nCurSafeDist = (i - nStartOffset) - nOutOffset;
+ if (nCurSafeDist >= 0 && pCompressor->stats.safe_dist < nCurSafeDist)
+ pCompressor->stats.safe_dist = nCurSafeDist;
+ }
+
+ *nCurRepMatchOffset = nRepMatchOffset;
+ return nOutOffset;
+}
+
+/**
+ * Select the most optimal matches, reduce the token count if possible, and then emit a block of compressed data
+ *
+ * @param pCompressor compression context
+ * @param pInWindow pointer to input data window (previously compressed bytes + bytes to compress)
+ * @param nPreviousBlockSize number of previously compressed bytes (or 0 for none)
+ * @param nInDataSize number of input bytes to compress
+ * @param pOutData pointer to output buffer
+ * @param nMaxOutDataSize maximum size of output buffer, in bytes
+ * @param nCurBitsOffset write index into output buffer, of current byte being filled with bits
+ * @param nCurBitShift bit shift count
+ * @param nCurFollowsLiteral non-zero if the next command to be issued follows a literal, 0 if not
+ * @param nCurRepMatchOffset starting rep offset for this block, updated after the block is compressed successfully
+ * @param nBlockFlags bit 0: 1 for first block, 0 otherwise; bit 1: 1 for last block, 0 otherwise
+ *
+ * @return size of compressed data in output buffer, or -1 if the data is uncompressible
+ */
+static int apultra_optimize_and_write_block(apultra_compressor *pCompressor, const unsigned char *pInWindow, const int nPreviousBlockSize, const int nInDataSize, unsigned char *pOutData, const int nMaxOutDataSize, int *nCurBitsOffset, int *nCurBitShift, int *nCurFollowsLiteral, int *nCurRepMatchOffset, const int nBlockFlags) {
+ int nOutOffset = 0;
+ const int nEndOffset = nPreviousBlockSize + nInDataSize;
+ const int nArrivalsPerPosition = pCompressor->max_arrivals;
+ int *rle_len = (int*)pCompressor->intervals /* reuse */;
+ int i, nPosition;
+
+ memset(pCompressor->best_match, 0, pCompressor->block_size * sizeof(apultra_final_match));
+
+ if ((nBlockFlags & 3) == 3) {
+ int *first_offset_for_byte = pCompressor->first_offset_for_byte;
+ int *next_offset_for_pos = pCompressor->next_offset_for_pos;
+
+ /* Supplement 2 and 3-byte matches */
+
+ memset(first_offset_for_byte, 0xff, sizeof(int) * 65536);
+ memset(next_offset_for_pos, 0xff, sizeof(int) * nInDataSize);
+
+ for (nPosition = nPreviousBlockSize; nPosition < (nEndOffset - 1); nPosition++) {
+ next_offset_for_pos[nPosition - nPreviousBlockSize] = first_offset_for_byte[((unsigned int)pInWindow[nPosition]) | (((unsigned int)pInWindow[nPosition + 1]) << 8)];
+ first_offset_for_byte[((unsigned int)pInWindow[nPosition]) | (((unsigned int)pInWindow[nPosition + 1]) << 8)] = nPosition;
+ }
+
+ for (nPosition = nPreviousBlockSize + 1; nPosition < (nEndOffset - 1); nPosition++) {
+ apultra_match *match = pCompressor->match + ((nPosition - nPreviousBlockSize) << MATCHES_PER_INDEX_SHIFT);
+ unsigned short *match_depth = pCompressor->match_depth + ((nPosition - nPreviousBlockSize) << MATCHES_PER_INDEX_SHIFT);
+ int m = 0, nInserted = 0;
+ int nMatchPos;
+
+ while (m < 15 && match[m].length)
+ m++;
+
+ for (nMatchPos = next_offset_for_pos[nPosition - nPreviousBlockSize]; m < 15 && nMatchPos >= 0; nMatchPos = next_offset_for_pos[nMatchPos - nPreviousBlockSize]) {
+ int nMatchOffset = nPosition - nMatchPos;
+
+ if (nMatchOffset <= pCompressor->max_offset) {
+ int nExistingMatchIdx;
+ int nAlreadyExists = 0;
+
+ for (nExistingMatchIdx = 0; nExistingMatchIdx < m; nExistingMatchIdx++) {
+ if (match[nExistingMatchIdx].offset == nMatchOffset ||
+ (match[nExistingMatchIdx].offset - (match_depth[nExistingMatchIdx] & 0x3fff)) == nMatchOffset) {
+ nAlreadyExists = 1;
+ break;
+ }
+ }
+
+ if (!nAlreadyExists) {
+ match[m].length = (nPosition < (nEndOffset - 2) && pInWindow[nMatchPos + 2] == pInWindow[nPosition + 2]) ? 3 : 2;
+ match[m].offset = nMatchOffset;
+ match_depth[m] = 0x4000;
+ m++;
+ nInserted++;
+ if (nInserted >= 6)
+ break;
+ }
+ }
+ else {
+ break;
+ }
+ }
+ }
+ }
+
+ i = 0;
+ while (i < nEndOffset) {
+ int nRangeStartIdx = i;
+ unsigned char c = pInWindow[nRangeStartIdx];
+ do {
+ i++;
+ }
+ while (i < nEndOffset && pInWindow[i] == c);
+ while (nRangeStartIdx < i) {
+ rle_len[nRangeStartIdx] = i - nRangeStartIdx;
+ nRangeStartIdx++;
+ }
+ }
+
+ apultra_optimize_forward(pCompressor, pInWindow, nPreviousBlockSize, nEndOffset, 1 /* nInsertForwardReps */, nCurRepMatchOffset, nBlockFlags, nArrivalsPerPosition);
+
+ if ((nBlockFlags & 3) == 3 && nArrivalsPerPosition == NARRIVALS_PER_POSITION_MAX) {
+ const int* next_offset_for_pos = pCompressor->next_offset_for_pos;
+ int* offset_cache = pCompressor->offset_cache;
+
+ /* Supplement matches further */
+
+ memset(offset_cache, 0xff, sizeof(int) * 2048);
+
+ for (nPosition = nPreviousBlockSize + 1; nPosition < (nEndOffset - 1); nPosition++) {
+ apultra_match* match = pCompressor->match + ((nPosition - nPreviousBlockSize) << MATCHES_PER_INDEX_SHIFT);
+
+ if (match[0].length < 8) {
+ unsigned short* match_depth = pCompressor->match_depth + ((nPosition - nPreviousBlockSize) << MATCHES_PER_INDEX_SHIFT);
+ int m = 0, nInserted = 0;
+ int nMatchPos;
+
+ while (m < 46 && match[m].length) {
+ offset_cache[match[m].offset & 2047] = nPosition;
+ offset_cache[(match[m].offset - (match_depth[m] & 0x3fff)) & 2047] = nPosition;
+ m++;
+ }
+
+ for (nMatchPos = next_offset_for_pos[nPosition - nPreviousBlockSize]; m < 46 && nMatchPos >= 0; nMatchPos = next_offset_for_pos[nMatchPos - nPreviousBlockSize]) {
+ int nMatchOffset = nPosition - nMatchPos;
+
+ if (nMatchOffset <= pCompressor->max_offset) {
+ int nAlreadyExists = 0;
+
+ if (offset_cache[nMatchOffset & 2047] == nPosition) {
+ int nExistingMatchIdx;
+
+ for (nExistingMatchIdx = 0; nExistingMatchIdx < m; nExistingMatchIdx++) {
+ if (match[nExistingMatchIdx].offset == nMatchOffset ||
+ (match[nExistingMatchIdx].offset - (match_depth[nExistingMatchIdx] & 0x3fff)) == nMatchOffset) {
+ nAlreadyExists = 1;
+
+ if (match_depth[nExistingMatchIdx] == 0x4000) {
+ int nMatchLen = 2;
+ while (nMatchLen < 16 && nPosition < (nEndOffset - nMatchLen) && pInWindow[nMatchPos + nMatchLen] == pInWindow[nPosition + nMatchLen])
+ nMatchLen++;
+ if (nMatchLen > (int)match[nExistingMatchIdx].length)
+ match[nExistingMatchIdx].length = nMatchLen;
+ }
+
+ break;
+ }
+ }
+ }
+
+ if (!nAlreadyExists) {
+ int nForwardPos = nPosition + 2 + 1;
+ int nGotMatch = 0;
+
+ while (nForwardPos >= nMatchOffset && (nForwardPos + 2) < nEndOffset && nForwardPos < (nPosition + 2 + 1 + 5)) {
+ if (!memcmp(pInWindow + nForwardPos, pInWindow + nForwardPos - nMatchOffset, 2)) {
+ nGotMatch = 1;
+ break;
+ }
+ nForwardPos++;
+ }
+
+ if (nGotMatch) {
+ int nMatchLen = 2;
+ while (nMatchLen < 16 && nPosition < (nEndOffset - nMatchLen) && pInWindow[nMatchPos + nMatchLen] == pInWindow[nPosition + nMatchLen])
+ nMatchLen++;
+ match[m].length = nMatchLen;
+ match[m].offset = nMatchOffset;
+ match_depth[m] = 0;
+ m++;
+
+ apultra_insert_forward_match(pCompressor, pInWindow, nPosition, nMatchOffset, nPreviousBlockSize, nEndOffset, nArrivalsPerPosition, 8);
+
+ nInserted++;
+ if (nInserted >= 18 || (nInserted >= 15 && m >= 38))
+ break;
+ }
+ }
+ }
+ else {
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ /* Pick optimal matches */
+ apultra_optimize_forward(pCompressor, pInWindow, nPreviousBlockSize, nEndOffset, 0 /* nInsertForwardReps */, nCurRepMatchOffset, nBlockFlags, nArrivalsPerPosition);
+
+ /* Apply reduction and merge pass */
+ int nDidReduce;
+ int nPasses = 0;
+ do {
+ nDidReduce = apultra_reduce_commands(pCompressor, pInWindow, pCompressor->best_match - nPreviousBlockSize, nPreviousBlockSize, nEndOffset, nCurRepMatchOffset, nBlockFlags);
+ nPasses++;
+ } while (nDidReduce && nPasses < 20);
+
+ /* Write compressed block */
+
+ return apultra_write_block(pCompressor, pCompressor->best_match - nPreviousBlockSize, pInWindow, nPreviousBlockSize, nEndOffset, pOutData, nOutOffset, nMaxOutDataSize, nCurBitsOffset, nCurBitShift, nCurFollowsLiteral, nCurRepMatchOffset, nBlockFlags);
+}
+
+/* Forward declaration */
+static void apultra_compressor_destroy(apultra_compressor *pCompressor);
+
+/**
+ * Initialize compression context
+ *
+ * @param pCompressor compression context to initialize
+ * @param nBlockSize maximum size of input data (bytes to compress only)
+ * @param nMaxWindowSize maximum size of input data window (previously compressed bytes + bytes to compress)
+ * @param nMaxArrivals maximum number of arrivals per position
+ * @param nFlags compression flags
+ *
+ * @return 0 for success, non-zero for failure
+ */
+static int apultra_compressor_init(apultra_compressor *pCompressor, const int nBlockSize, const int nMaxWindowSize, const int nMaxArrivals, const int nFlags) {
+ int nResult;
+
+ nResult = divsufsort_init(&pCompressor->divsufsort_context);
+ pCompressor->intervals = NULL;
+ pCompressor->pos_data = NULL;
+ pCompressor->open_intervals = NULL;
+ pCompressor->match = NULL;
+ pCompressor->match_depth = NULL;
+ pCompressor->match1 = NULL;
+ pCompressor->best_match = NULL;
+ pCompressor->arrival = NULL;
+ pCompressor->first_offset_for_byte = NULL;
+ pCompressor->next_offset_for_pos = NULL;
+ pCompressor->offset_cache = NULL;
+ pCompressor->flags = nFlags;
+ pCompressor->block_size = nBlockSize;
+ pCompressor->max_arrivals = nMaxArrivals;
+
+ memset(&pCompressor->stats, 0, sizeof(pCompressor->stats));
+ pCompressor->stats.min_match_len = -1;
+ pCompressor->stats.min_offset = -1;
+ pCompressor->stats.min_rle1_len = -1;
+ pCompressor->stats.min_rle2_len = -1;
+
+ if (!nResult) {
+ pCompressor->intervals = (unsigned long long *)malloc(nMaxWindowSize * sizeof(unsigned long long));
+
+ if (pCompressor->intervals) {
+ pCompressor->pos_data = (unsigned long long *)malloc(nMaxWindowSize * sizeof(unsigned long long));
+
+ if (pCompressor->pos_data) {
+ pCompressor->open_intervals = (unsigned long long *)malloc((LCP_AND_TAG_MAX + 1) * sizeof(unsigned long long));
+
+ if (pCompressor->open_intervals) {
+ pCompressor->arrival = (apultra_arrival *)malloc((nBlockSize + 1) * nMaxArrivals * sizeof(apultra_arrival));
+
+ if (pCompressor->arrival) {
+ pCompressor->best_match = (apultra_final_match *)malloc(nBlockSize * sizeof(apultra_final_match));
+
+ if (pCompressor->best_match) {
+ pCompressor->match = (apultra_match *)malloc(nBlockSize * NMATCHES_PER_INDEX * sizeof(apultra_match));
+ if (pCompressor->match) {
+ pCompressor->match_depth = (unsigned short *)malloc(nBlockSize * NMATCHES_PER_INDEX * sizeof(unsigned short));
+ if (pCompressor->match_depth) {
+ pCompressor->match1 = (unsigned char *)malloc(nBlockSize * sizeof(unsigned char));
+ if (pCompressor->match1) {
+ pCompressor->first_offset_for_byte = (int*)malloc(65536 * sizeof(int));
+ if (pCompressor->first_offset_for_byte) {
+ pCompressor->next_offset_for_pos = (int*)malloc(nBlockSize * sizeof(int));
+ if (pCompressor->next_offset_for_pos) {
+ if (nMaxArrivals == NARRIVALS_PER_POSITION_MAX) {
+ pCompressor->offset_cache = (int*)malloc(2048 * sizeof(int));
+ if (pCompressor->offset_cache) {
+ return 0;
+ }
+ }
+ else {
+ return 0;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ apultra_compressor_destroy(pCompressor);
+ return 100;
+}
+
+/**
+ * Clean up compression context and free up any associated resources
+ *
+ * @param pCompressor compression context to clean up
+ */
+static void apultra_compressor_destroy(apultra_compressor *pCompressor) {
+ divsufsort_destroy(&pCompressor->divsufsort_context);
+
+ if (pCompressor->offset_cache) {
+ free(pCompressor->offset_cache);
+ pCompressor->offset_cache = NULL;
+ }
+
+ if (pCompressor->next_offset_for_pos) {
+ free(pCompressor->next_offset_for_pos);
+ pCompressor->next_offset_for_pos = NULL;
+ }
+
+ if (pCompressor->first_offset_for_byte) {
+ free(pCompressor->first_offset_for_byte);
+ pCompressor->first_offset_for_byte = NULL;
+ }
+
+ if (pCompressor->match1) {
+ free(pCompressor->match1);
+ pCompressor->match1 = NULL;
+ }
+
+ if (pCompressor->match_depth) {
+ free(pCompressor->match_depth);
+ pCompressor->match_depth = NULL;
+ }
+
+ if (pCompressor->match) {
+ free(pCompressor->match);
+ pCompressor->match = NULL;
+ }
+
+ if (pCompressor->arrival) {
+ free(pCompressor->arrival);
+ pCompressor->arrival = NULL;
+ }
+
+ if (pCompressor->best_match) {
+ free(pCompressor->best_match);
+ pCompressor->best_match = NULL;
+ }
+
+ if (pCompressor->open_intervals) {
+ free(pCompressor->open_intervals);
+ pCompressor->open_intervals = NULL;
+ }
+
+ if (pCompressor->pos_data) {
+ free(pCompressor->pos_data);
+ pCompressor->pos_data = NULL;
+ }
+
+ if (pCompressor->intervals) {
+ free(pCompressor->intervals);
+ pCompressor->intervals = NULL;
+ }
+}
+
+/**
+ * Compress one block of data
+ *
+ * @param pCompressor compression context
+ * @param pInWindow pointer to input data window (previously compressed bytes + bytes to compress)
+ * @param nPreviousBlockSize number of previously compressed bytes (or 0 for none)
+ * @param nInDataSize number of input bytes to compress
+ * @param pOutData pointer to output buffer
+ * @param nMaxOutDataSize maximum size of output buffer, in bytes
+ * @param nCurBitsOffset write index into output buffer, of current byte being filled with bits
+ * @param nCurBitShift bit shift count
+ * @param nCurFollowsLiteral non-zero if the next command to be issued follows a literal, 0 if not
+ * @param nCurRepMatchOffset starting rep offset for this block, updated after the block is compressed successfully
+ * @param nBlockFlags bit 0: 1 for first block, 0 otherwise; bit 1: 1 for last block, 0 otherwise
+ *
+ * @return size of compressed data in output buffer, or -1 if the data is uncompressible
+ */
+static int apultra_compressor_shrink_block(apultra_compressor *pCompressor, const unsigned char *pInWindow, const int nPreviousBlockSize, const int nInDataSize, unsigned char *pOutData, const int nMaxOutDataSize, int *nCurBitsOffset, int *nCurBitShift, int *nCurFollowsLiteral, int *nCurRepMatchOffset, const int nBlockFlags) {
+ int nCompressedSize;
+
+ if (apultra_build_suffix_array(pCompressor, pInWindow, nPreviousBlockSize + nInDataSize))
+ nCompressedSize = -1;
+ else {
+ if (nPreviousBlockSize) {
+ apultra_skip_matches(pCompressor, 0, nPreviousBlockSize);
+ }
+ apultra_find_all_matches(pCompressor, NMATCHES_PER_INDEX, nPreviousBlockSize, nPreviousBlockSize + nInDataSize, nBlockFlags);
+
+ nCompressedSize = apultra_optimize_and_write_block(pCompressor, pInWindow, nPreviousBlockSize, nInDataSize, pOutData, nMaxOutDataSize, nCurBitsOffset, nCurBitShift, nCurFollowsLiteral, nCurRepMatchOffset, nBlockFlags);
+ }
+
+ return nCompressedSize;
+}
+
+/**
+ * Get maximum compressed size of input(source) data
+ *
+ * @param nInputSize input(source) size in bytes
+ *
+ * @return maximum compressed size
+ */
+size_t apultra_get_max_compressed_size(size_t nInputSize) {
+ return ((nInputSize * 9 /* literals + literal bits */ + 1 /* match bit */ + 2 /* 7+1 command bits */ + 8 /* EOD offset bits */) + 7) >> 3;
+}
+
+/**
+ * Compress memory
+ *
+ * @param pInputData pointer to input(source) data to compress
+ * @param pOutBuffer buffer for compressed data
+ * @param nInputSize input(source) size in bytes
+ * @param nMaxOutBufferSize maximum capacity of compression buffer
+ * @param nFlags compression flags (set to 0)
+ * @param nMaxWindowSize maximum window size to use (0 for default)
+ * @param nDictionarySize size of dictionary in front of input data (0 for none)
+ * @param progress progress function, called after compressing each block, or NULL for none
+ * @param pStats pointer to compression stats that are filled if this function is successful, or NULL
+ *
+ * @return actual compressed size, or -1 for error
+ */
+size_t apultra_compress(const unsigned char *pInputData, unsigned char *pOutBuffer, size_t nInputSize, size_t nMaxOutBufferSize,
+ const unsigned int nFlags, size_t nMaxWindowSize, size_t nDictionarySize, void(*progress)(long long nOriginalSize, long long nCompressedSize), apultra_stats *pStats) {
+ apultra_compressor compressor;
+ size_t nOriginalSize = 0;
+ size_t nCompressedSize = 0L;
+ int nResult;
+ int nMaxArrivals = NARRIVALS_PER_POSITION_SMALL;
+ int nError = 0;
+ const int nBlockSize = (nInputSize < BLOCK_SIZE) ? ((nInputSize < 1024) ? 1024 : (int)nInputSize) : BLOCK_SIZE;
+ const int nMaxOutBlockSize = (int)apultra_get_max_compressed_size(nBlockSize);
+
+ if (nDictionarySize < nInputSize) {
+ int nInDataSize = (int)(nInputSize - nDictionarySize);
+ if (nInDataSize > nBlockSize)
+ nInDataSize = nBlockSize;
+
+ if (nInDataSize > 0 && (nDictionarySize + nInDataSize) >= nInputSize) {
+ if (nInputSize <= 262144)
+ nMaxArrivals = NARRIVALS_PER_POSITION_MAX;
+ else
+ nMaxArrivals = NARRIVALS_PER_POSITION_NORMAL;
+ }
+ }
+
+ nResult = apultra_compressor_init(&compressor, nBlockSize, nBlockSize * 2, nMaxArrivals, nFlags);
+ if (nResult != 0) {
+ return -1;
+ }
+
+ compressor.max_offset = nMaxWindowSize ? (int)nMaxWindowSize : MAX_OFFSET;
+
+ int nPreviousBlockSize = 0;
+ int nNumBlocks = 0;
+ int nCurBitsOffset = INT_MIN, nCurBitShift = 0, nCurFollowsLiteral = 0;
+ int nBlockFlags = 1;
+ int nCurRepMatchOffset = 0;
+
+ if (nDictionarySize) {
+ nOriginalSize = (int)nDictionarySize;
+ nPreviousBlockSize = (int)nDictionarySize;
+ }
+
+ while (nOriginalSize < nInputSize && !nError) {
+ int nInDataSize;
+
+ nInDataSize = (int)(nInputSize - nOriginalSize);
+ if (nInDataSize > nBlockSize)
+ nInDataSize = nBlockSize;
+
+ if (nInDataSize > 0) {
+ int nOutDataSize;
+ int nOutDataEnd = (int)(nMaxOutBufferSize - nCompressedSize);
+
+ if (nOutDataEnd > nMaxOutBlockSize)
+ nOutDataEnd = nMaxOutBlockSize;
+
+ if ((nOriginalSize + nInDataSize) >= nInputSize)
+ nBlockFlags |= 2;
+ nOutDataSize = apultra_compressor_shrink_block(&compressor, pInputData + nOriginalSize - nPreviousBlockSize, nPreviousBlockSize, nInDataSize, pOutBuffer + nCompressedSize, nOutDataEnd,
+ &nCurBitsOffset, &nCurBitShift, &nCurFollowsLiteral, &nCurRepMatchOffset, nBlockFlags);
+ nBlockFlags &= (~1);
+
+ if (nOutDataSize >= 0) {
+ /* Write compressed block */
+
+ if (!nError) {
+ nOriginalSize += nInDataSize;
+ nCompressedSize += nOutDataSize;
+ if (nCurBitsOffset != INT_MIN)
+ nCurBitsOffset -= nOutDataSize;
+ }
+ }
+ else {
+ nError = -1;
+ }
+
+ nPreviousBlockSize = nInDataSize;
+ nNumBlocks++;
+ }
+
+ if (!nError && nOriginalSize < nInputSize) {
+ if (progress)
+ progress(nOriginalSize, nCompressedSize);
+ }
+ }
+
+ if (progress)
+ progress(nOriginalSize, nCompressedSize);
+ if (pStats)
+ *pStats = compressor.stats;
+
+ apultra_compressor_destroy(&compressor);
+
+ if (nError) {
+ return -1;
+ }
+ else {
+ return nCompressedSize;
+ }
+}
diff --git a/tools/z64compress/src/enc/apultra/shrink.h b/tools/z64compress/src/enc/apultra/shrink.h
new file mode 100644
index 0000000..7c9b548
--- /dev/null
+++ b/tools/z64compress/src/enc/apultra/shrink.h
@@ -0,0 +1,174 @@
+/*
+ * shrink.h - compressor definitions
+ *
+ * Copyright (C) 2019 Emmanuel Marty
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ * claim that you wrote the original software. If you use this software
+ * in a product, an acknowledgment in the product documentation would be
+ * appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ * misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+ */
+
+/*
+ * Uses the libdivsufsort library Copyright (c) 2003-2008 Yuta Mori
+ *
+ * Inspired by cap by Sven-ke Dahl. https://github.com/svendahl/cap
+ * Also inspired by Charles Bloom's compression blog. http://cbloomrants.blogspot.com/
+ * With ideas from LZ4 by Yann Collet. https://github.com/lz4/lz4
+ * With help and support from spke <zxintrospec@gmail.com>
+ *
+ */
+
+#ifndef _SHRINK_H
+#define _SHRINK_H
+
+#include "divsufsort.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define LCP_BITS 15
+#define TAG_BITS 4
+#define LCP_MAX ((1U<<(LCP_BITS - TAG_BITS)) - 1)
+#define LCP_AND_TAG_MAX ((1U<<LCP_BITS) - 1)
+#define LCP_SHIFT (63-LCP_BITS)
+#define LCP_MASK (((1ULL<<LCP_BITS) - 1) << LCP_SHIFT)
+#define POS_MASK ((1ULL<<LCP_SHIFT) - 1)
+#define VISITED_FLAG 0x8000000000000000ULL
+#define EXCL_VISITED_MASK 0x7fffffffffffffffULL
+
+#define NARRIVALS_PER_POSITION_MAX 62
+#define NARRIVALS_PER_POSITION_NORMAL 46
+#define NARRIVALS_PER_POSITION_SMALL 9
+
+#define NMATCHES_PER_INDEX 64
+#define MATCHES_PER_INDEX_SHIFT 6
+
+#define LEAVE_ALONE_MATCH_SIZE 120
+
+/** One match option */
+typedef struct _apultra_match {
+ unsigned int length:11;
+ unsigned int offset:21;
+} apultra_match;
+
+/** One finalized match */
+typedef struct _apultra_final_match {
+ int length;
+ int offset;
+} apultra_final_match;
+
+/** Forward arrival slot */
+typedef struct {
+ int cost;
+
+ unsigned int from_pos:21;
+ int from_slot:7;
+ unsigned int follows_literal:1;
+
+ unsigned int rep_offset:21;
+ unsigned int short_offset:4;
+ unsigned int rep_pos:21;
+ unsigned int match_len:11;
+
+ int score;
+} apultra_arrival;
+
+/** Compression statistics */
+typedef struct _apultra_stats {
+ int num_literals;
+ int num_4bit_matches;
+ int num_7bit_matches;
+ int num_variable_matches;
+ int num_rep_matches;
+ int num_eod;
+
+ int safe_dist;
+
+ int min_offset;
+ int max_offset;
+ long long total_offsets;
+
+ int min_match_len;
+ int max_match_len;
+ int total_match_lens;
+
+ int min_rle1_len;
+ int max_rle1_len;
+ int total_rle1_lens;
+
+ int min_rle2_len;
+ int max_rle2_len;
+ int total_rle2_lens;
+
+ int commands_divisor;
+ int match_divisor;
+ int rle1_divisor;
+ int rle2_divisor;
+} apultra_stats;
+
+/** Compression context */
+typedef struct _apultra_compressor {
+ divsufsort_ctx_t divsufsort_context;
+ unsigned long long *intervals;
+ unsigned long long *pos_data;
+ unsigned long long *open_intervals;
+ apultra_match *match;
+ unsigned short *match_depth;
+ unsigned char *match1;
+ apultra_final_match *best_match;
+ apultra_arrival *arrival;
+ int *first_offset_for_byte;
+ int *next_offset_for_pos;
+ int *offset_cache;
+ int flags;
+ int block_size;
+ int max_offset;
+ int max_arrivals;
+ apultra_stats stats;
+} apultra_compressor;
+
+/**
+ * Get maximum compressed size of input(source) data
+ *
+ * @param nInputSize input(source) size in bytes
+ *
+ * @return maximum compressed size
+ */
+size_t apultra_get_max_compressed_size(size_t nInputSize);
+
+/**
+ * Compress memory
+ *
+ * @param pInputData pointer to input(source) data to compress
+ * @param pOutBuffer buffer for compressed data
+ * @param nInputSize input(source) size in bytes
+ * @param nMaxOutBufferSize maximum capacity of compression buffer
+ * @param nFlags compression flags (set to 0)
+ * @param nMaxWindowSize maximum window size to use (0 for default)
+ * @param nDictionarySize size of dictionary in front of input data (0 for none)
+ * @param progress progress function, called after compressing each block, or NULL for none
+ * @param pStats pointer to compression stats that are filled if this function is successful, or NULL
+ *
+ * @return actual compressed size, or -1 for error
+ */
+size_t apultra_compress(const unsigned char *pInputData, unsigned char *pOutBuffer, size_t nInputSize, size_t nMaxOutBufferSize,
+ const unsigned int nFlags, size_t nMaxWindowSize, size_t nDictionarySize, void(*progress)(long long nOriginalSize, long long nCompressedSize), apultra_stats *pStats);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _SHRINK_H */
diff --git a/tools/z64compress/src/enc/apultra/shrink_context.c b/tools/z64compress/src/enc/apultra/shrink_context.c
new file mode 100644
index 0000000..ccf2d53
--- /dev/null
+++ b/tools/z64compress/src/enc/apultra/shrink_context.c
@@ -0,0 +1,39 @@
+/*
+ * shrink_context.c - compression context implementation
+ *
+ * Copyright (C) 2019 Emmanuel Marty
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ * claim that you wrote the original software. If you use this software
+ * in a product, an acknowledgment in the product documentation would be
+ * appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ * misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+ */
+
+/*
+ * Uses the libdivsufsort library Copyright (c) 2003-2008 Yuta Mori
+ *
+ * Inspired by LZ4 by Yann Collet. https://github.com/lz4/lz4
+ * With help, ideas, optimizations and speed measurements by spke <zxintrospec@gmail.com>
+ * With ideas from Lizard by Przemyslaw Skibinski and Yann Collet. https://github.com/inikep/lizard
+ * Also with ideas from smallz4 by Stephan Brumme. https://create.stephan-brumme.com/smallz4/
+ *
+ */
+
+#include <stdlib.h>
+#include <string.h>
+//#include "shrink_context.h"
+//#include "shrink_block.h"
+#include "format.h"
+#include "matchfinder.h"
+//#include "lib.h"
diff --git a/tools/z64compress/src/enc/apultra/sssort.c b/tools/z64compress/src/enc/apultra/sssort.c
new file mode 100644
index 0000000..4a18fd2
--- /dev/null
+++ b/tools/z64compress/src/enc/apultra/sssort.c
@@ -0,0 +1,815 @@
+/*
+ * sssort.c for libdivsufsort
+ * Copyright (c) 2003-2008 Yuta Mori 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 "divsufsort_private.h"
+
+
+/*- Private Functions -*/
+
+static const saint_t lg_table[256]= {
+ -1,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+ 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+ 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
+ 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
+ 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
+ 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7
+};
+
+#if (SS_BLOCKSIZE == 0) || (SS_INSERTIONSORT_THRESHOLD < SS_BLOCKSIZE)
+
+static INLINE
+saint_t
+ss_ilg(saidx_t n) {
+#if SS_BLOCKSIZE == 0
+# if defined(BUILD_DIVSUFSORT64)
+ return (n >> 32) ?
+ ((n >> 48) ?
+ ((n >> 56) ?
+ 56 + lg_table[(n >> 56) & 0xff] :
+ 48 + lg_table[(n >> 48) & 0xff]) :
+ ((n >> 40) ?
+ 40 + lg_table[(n >> 40) & 0xff] :
+ 32 + lg_table[(n >> 32) & 0xff])) :
+ ((n & 0xffff0000) ?
+ ((n & 0xff000000) ?
+ 24 + lg_table[(n >> 24) & 0xff] :
+ 16 + lg_table[(n >> 16) & 0xff]) :
+ ((n & 0x0000ff00) ?
+ 8 + lg_table[(n >> 8) & 0xff] :
+ 0 + lg_table[(n >> 0) & 0xff]));
+# else
+ return (n & 0xffff0000) ?
+ ((n & 0xff000000) ?
+ 24 + lg_table[(n >> 24) & 0xff] :
+ 16 + lg_table[(n >> 16) & 0xff]) :
+ ((n & 0x0000ff00) ?
+ 8 + lg_table[(n >> 8) & 0xff] :
+ 0 + lg_table[(n >> 0) & 0xff]);
+# endif
+#elif SS_BLOCKSIZE < 256
+ return lg_table[n];
+#else
+ return (n & 0xff00) ?
+ 8 + lg_table[(n >> 8) & 0xff] :
+ 0 + lg_table[(n >> 0) & 0xff];
+#endif
+}
+
+#endif /* (SS_BLOCKSIZE == 0) || (SS_INSERTIONSORT_THRESHOLD < SS_BLOCKSIZE) */
+
+#if SS_BLOCKSIZE != 0
+
+static const saint_t sqq_table[256] = {
+ 0, 16, 22, 27, 32, 35, 39, 42, 45, 48, 50, 53, 55, 57, 59, 61,
+ 64, 65, 67, 69, 71, 73, 75, 76, 78, 80, 81, 83, 84, 86, 87, 89,
+ 90, 91, 93, 94, 96, 97, 98, 99, 101, 102, 103, 104, 106, 107, 108, 109,
+110, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
+128, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
+143, 144, 144, 145, 146, 147, 148, 149, 150, 150, 151, 152, 153, 154, 155, 155,
+156, 157, 158, 159, 160, 160, 161, 162, 163, 163, 164, 165, 166, 167, 167, 168,
+169, 170, 170, 171, 172, 173, 173, 174, 175, 176, 176, 177, 178, 178, 179, 180,
+181, 181, 182, 183, 183, 184, 185, 185, 186, 187, 187, 188, 189, 189, 190, 191,
+192, 192, 193, 193, 194, 195, 195, 196, 197, 197, 198, 199, 199, 200, 201, 201,
+202, 203, 203, 204, 204, 205, 206, 206, 207, 208, 208, 209, 209, 210, 211, 211,
+212, 212, 213, 214, 214, 215, 215, 216, 217, 217, 218, 218, 219, 219, 220, 221,
+221, 222, 222, 223, 224, 224, 225, 225, 226, 226, 227, 227, 228, 229, 229, 230,
+230, 231, 231, 232, 232, 233, 234, 234, 235, 235, 236, 236, 237, 237, 238, 238,
+239, 240, 240, 241, 241, 242, 242, 243, 243, 244, 244, 245, 245, 246, 246, 247,
+247, 248, 248, 249, 249, 250, 250, 251, 251, 252, 252, 253, 253, 254, 254, 255
+};
+
+static INLINE
+saidx_t
+ss_isqrt(saidx_t x) {
+ saidx_t y, e;
+
+ if(x >= (SS_BLOCKSIZE * SS_BLOCKSIZE)) { return SS_BLOCKSIZE; }
+ e = (x & 0xffff0000) ?
+ ((x & 0xff000000) ?
+ 24 + lg_table[(x >> 24) & 0xff] :
+ 16 + lg_table[(x >> 16) & 0xff]) :
+ ((x & 0x0000ff00) ?
+ 8 + lg_table[(x >> 8) & 0xff] :
+ 0 + lg_table[(x >> 0) & 0xff]);
+
+ if(e >= 16) {
+ y = sqq_table[x >> ((e - 6) - (e & 1))] << ((e >> 1) - 7);
+ if(e >= 24) { y = (y + 1 + x / y) >> 1; }
+ y = (y + 1 + x / y) >> 1;
+ } else if(e >= 8) {
+ y = (sqq_table[x >> ((e - 6) - (e & 1))] >> (7 - (e >> 1))) + 1;
+ } else {
+ return sqq_table[x] >> 4;
+ }
+
+ return (x < (y * y)) ? y - 1 : y;
+}
+
+#endif /* SS_BLOCKSIZE != 0 */
+
+
+/*---------------------------------------------------------------------------*/
+
+/* Compares two suffixes. */
+static INLINE
+saint_t
+ss_compare(const sauchar_t *T,
+ const saidx_t *p1, const saidx_t *p2,
+ saidx_t depth) {
+ const sauchar_t *U1, *U2, *U1n, *U2n;
+
+ for(U1 = T + depth + *p1,
+ U2 = T + depth + *p2,
+ U1n = T + *(p1 + 1) + 2,
+ U2n = T + *(p2 + 1) + 2;
+ (U1 < U1n) && (U2 < U2n) && (*U1 == *U2);
+ ++U1, ++U2) {
+ }
+
+ return U1 < U1n ?
+ (U2 < U2n ? *U1 - *U2 : 1) :
+ (U2 < U2n ? -1 : 0);
+}
+
+
+/*---------------------------------------------------------------------------*/
+
+#if (SS_BLOCKSIZE != 1) && (SS_INSERTIONSORT_THRESHOLD != 1)
+
+/* Insertionsort for small size groups */
+static
+void
+ss_insertionsort(const sauchar_t *T, const saidx_t *PA,
+ saidx_t *first, saidx_t *last, saidx_t depth) {
+ saidx_t *i, *j;
+ saidx_t t;
+ saint_t r;
+
+ for(i = last - 2; first <= i; --i) {
+ for(t = *i, j = i + 1; 0 < (r = ss_compare(T, PA + t, PA + *j, depth));) {
+ do { *(j - 1) = *j; } while((++j < last) && (*j < 0));
+ if(last <= j) { break; }
+ }
+ if(r == 0) { *j = ~*j; }
+ *(j - 1) = t;
+ }
+}
+
+#endif /* (SS_BLOCKSIZE != 1) && (SS_INSERTIONSORT_THRESHOLD != 1) */
+
+
+/*---------------------------------------------------------------------------*/
+
+#if (SS_BLOCKSIZE == 0) || (SS_INSERTIONSORT_THRESHOLD < SS_BLOCKSIZE)
+
+static INLINE
+void
+ss_fixdown(const sauchar_t *Td, const saidx_t *PA,
+ saidx_t *SA, saidx_t i, saidx_t size) {
+ saidx_t j, k;
+ saidx_t v;
+ saint_t c, d, e;
+
+ for(v = SA[i], c = Td[PA[v]]; (j = 2 * i + 1) < size; SA[i] = SA[k], i = k) {
+ d = Td[PA[SA[k = j++]]];
+ if(d < (e = Td[PA[SA[j]]])) { k = j; d = e; }
+ if(d <= c) { break; }
+ }
+ SA[i] = v;
+}
+
+/* Simple top-down heapsort. */
+static
+void
+ss_heapsort(const sauchar_t *Td, const saidx_t *PA, saidx_t *SA, saidx_t size) {
+ saidx_t i, m;
+ saidx_t t;
+
+ m = size;
+ if((size % 2) == 0) {
+ m--;
+ if(Td[PA[SA[m / 2]]] < Td[PA[SA[m]]]) { SWAP(SA[m], SA[m / 2]); }
+ }
+
+ for(i = m / 2 - 1; 0 <= i; --i) { ss_fixdown(Td, PA, SA, i, m); }
+ if((size % 2) == 0) { SWAP(SA[0], SA[m]); ss_fixdown(Td, PA, SA, 0, m); }
+ for(i = m - 1; 0 < i; --i) {
+ t = SA[0], SA[0] = SA[i];
+ ss_fixdown(Td, PA, SA, 0, i);
+ SA[i] = t;
+ }
+}
+
+
+/*---------------------------------------------------------------------------*/
+
+/* Returns the median of three elements. */
+static INLINE
+saidx_t *
+ss_median3(const sauchar_t *Td, const saidx_t *PA,
+ saidx_t *v1, saidx_t *v2, saidx_t *v3) {
+ saidx_t *t;
+ if(Td[PA[*v1]] > Td[PA[*v2]]) { SWAP(v1, v2); }
+ if(Td[PA[*v2]] > Td[PA[*v3]]) {
+ if(Td[PA[*v1]] > Td[PA[*v3]]) { return v1; }
+ else { return v3; }
+ }
+ return v2;
+}
+
+/* Returns the median of five elements. */
+static INLINE
+saidx_t *
+ss_median5(const sauchar_t *Td, const saidx_t *PA,
+ saidx_t *v1, saidx_t *v2, saidx_t *v3, saidx_t *v4, saidx_t *v5) {
+ saidx_t *t;
+ if(Td[PA[*v2]] > Td[PA[*v3]]) { SWAP(v2, v3); }
+ if(Td[PA[*v4]] > Td[PA[*v5]]) { SWAP(v4, v5); }
+ if(Td[PA[*v2]] > Td[PA[*v4]]) { SWAP(v2, v4); SWAP(v3, v5); }
+ if(Td[PA[*v1]] > Td[PA[*v3]]) { SWAP(v1, v3); }
+ if(Td[PA[*v1]] > Td[PA[*v4]]) { SWAP(v1, v4); SWAP(v3, v5); }
+ if(Td[PA[*v3]] > Td[PA[*v4]]) { return v4; }
+ return v3;
+}
+
+/* Returns the pivot element. */
+static INLINE
+saidx_t *
+ss_pivot(const sauchar_t *Td, const saidx_t *PA, saidx_t *first, saidx_t *last) {
+ saidx_t *middle;
+ saidx_t t;
+
+ t = last - first;
+ middle = first + t / 2;
+
+ if(t <= 512) {
+ if(t <= 32) {
+ return ss_median3(Td, PA, first, middle, last - 1);
+ } else {
+ t >>= 2;
+ return ss_median5(Td, PA, first, first + t, middle, last - 1 - t, last - 1);
+ }
+ }
+ t >>= 3;
+ first = ss_median3(Td, PA, first, first + t, first + (t << 1));
+ middle = ss_median3(Td, PA, middle - t, middle, middle + t);
+ last = ss_median3(Td, PA, last - 1 - (t << 1), last - 1 - t, last - 1);
+ return ss_median3(Td, PA, first, middle, last);
+}
+
+
+/*---------------------------------------------------------------------------*/
+
+/* Binary partition for substrings. */
+static INLINE
+saidx_t *
+ss_partition(const saidx_t *PA,
+ saidx_t *first, saidx_t *last, saidx_t depth) {
+ saidx_t *a, *b;
+ saidx_t t;
+ for(a = first - 1, b = last;;) {
+ for(; (++a < b) && ((PA[*a] + depth) >= (PA[*a + 1] + 1));) { *a = ~*a; }
+ for(; (a < --b) && ((PA[*b] + depth) < (PA[*b + 1] + 1));) { }
+ if(b <= a) { break; }
+ t = ~*b;
+ *b = *a;
+ *a = t;
+ }
+ if(first < a) { *first = ~*first; }
+ return a;
+}
+
+/* Multikey introsort for medium size groups. */
+static
+void
+ss_mintrosort(const sauchar_t *T, const saidx_t *PA,
+ saidx_t *first, saidx_t *last,
+ saidx_t depth) {
+#define STACK_SIZE SS_MISORT_STACKSIZE
+ struct { saidx_t *a, *b, c; saint_t d; } stack[STACK_SIZE];
+ const sauchar_t *Td;
+ saidx_t *a, *b, *c, *d, *e, *f;
+ saidx_t s, t;
+ saint_t ssize;
+ saint_t limit;
+ saint_t v, x = 0;
+
+ for(ssize = 0, limit = ss_ilg(last - first);;) {
+
+ if((last - first) <= SS_INSERTIONSORT_THRESHOLD) {
+#if 1 < SS_INSERTIONSORT_THRESHOLD
+ if(1 < (last - first)) { ss_insertionsort(T, PA, first, last, depth); }
+#endif
+ STACK_POP(first, last, depth, limit);
+ continue;
+ }
+
+ Td = T + depth;
+ if(limit-- == 0) { ss_heapsort(Td, PA, first, last - first); }
+ if(limit < 0) {
+ for(a = first + 1, v = Td[PA[*first]]; a < last; ++a) {
+ if((x = Td[PA[*a]]) != v) {
+ if(1 < (a - first)) { break; }
+ v = x;
+ first = a;
+ }
+ }
+ if(Td[PA[*first] - 1] < v) {
+ first = ss_partition(PA, first, a, depth);
+ }
+ if((a - first) <= (last - a)) {
+ if(1 < (a - first)) {
+ STACK_PUSH(a, last, depth, -1);
+ last = a, depth += 1, limit = ss_ilg(a - first);
+ } else {
+ first = a, limit = -1;
+ }
+ } else {
+ if(1 < (last - a)) {
+ STACK_PUSH(first, a, depth + 1, ss_ilg(a - first));
+ first = a, limit = -1;
+ } else {
+ last = a, depth += 1, limit = ss_ilg(a - first);
+ }
+ }
+ continue;
+ }
+
+ /* choose pivot */
+ a = ss_pivot(Td, PA, first, last);
+ v = Td[PA[*a]];
+ SWAP(*first, *a);
+
+ /* partition */
+ for(b = first; (++b < last) && ((x = Td[PA[*b]]) == v);) { }
+ if(((a = b) < last) && (x < v)) {
+ for(; (++b < last) && ((x = Td[PA[*b]]) <= v);) {
+ if(x == v) { SWAP(*b, *a); ++a; }
+ }
+ }
+ for(c = last; (b < --c) && ((x = Td[PA[*c]]) == v);) { }
+ if((b < (d = c)) && (x > v)) {
+ for(; (b < --c) && ((x = Td[PA[*c]]) >= v);) {
+ if(x == v) { SWAP(*c, *d); --d; }
+ }
+ }
+ for(; b < c;) {
+ SWAP(*b, *c);
+ for(; (++b < c) && ((x = Td[PA[*b]]) <= v);) {
+ if(x == v) { SWAP(*b, *a); ++a; }
+ }
+ for(; (b < --c) && ((x = Td[PA[*c]]) >= v);) {
+ if(x == v) { SWAP(*c, *d); --d; }
+ }
+ }
+
+ if(a <= d) {
+ c = b - 1;
+
+ if((s = a - first) > (t = b - a)) { s = t; }
+ for(e = first, f = b - s; 0 < s; --s, ++e, ++f) { SWAP(*e, *f); }
+ if((s = d - c) > (t = last - d - 1)) { s = t; }
+ for(e = b, f = last - s; 0 < s; --s, ++e, ++f) { SWAP(*e, *f); }
+
+ a = first + (b - a), c = last - (d - c);
+ b = (v <= Td[PA[*a] - 1]) ? a : ss_partition(PA, a, c, depth);
+
+ if((a - first) <= (last - c)) {
+ if((last - c) <= (c - b)) {
+ STACK_PUSH(b, c, depth + 1, ss_ilg(c - b));
+ STACK_PUSH(c, last, depth, limit);
+ last = a;
+ } else if((a - first) <= (c - b)) {
+ STACK_PUSH(c, last, depth, limit);
+ STACK_PUSH(b, c, depth + 1, ss_ilg(c - b));
+ last = a;
+ } else {
+ STACK_PUSH(c, last, depth, limit);
+ STACK_PUSH(first, a, depth, limit);
+ first = b, last = c, depth += 1, limit = ss_ilg(c - b);
+ }
+ } else {
+ if((a - first) <= (c - b)) {
+ STACK_PUSH(b, c, depth + 1, ss_ilg(c - b));
+ STACK_PUSH(first, a, depth, limit);
+ first = c;
+ } else if((last - c) <= (c - b)) {
+ STACK_PUSH(first, a, depth, limit);
+ STACK_PUSH(b, c, depth + 1, ss_ilg(c - b));
+ first = c;
+ } else {
+ STACK_PUSH(first, a, depth, limit);
+ STACK_PUSH(c, last, depth, limit);
+ first = b, last = c, depth += 1, limit = ss_ilg(c - b);
+ }
+ }
+ } else {
+ limit += 1;
+ if(Td[PA[*first] - 1] < v) {
+ first = ss_partition(PA, first, last, depth);
+ limit = ss_ilg(last - first);
+ }
+ depth += 1;
+ }
+ }
+#undef STACK_SIZE
+}
+
+#endif /* (SS_BLOCKSIZE == 0) || (SS_INSERTIONSORT_THRESHOLD < SS_BLOCKSIZE) */
+
+
+/*---------------------------------------------------------------------------*/
+
+#if SS_BLOCKSIZE != 0
+
+static INLINE
+void
+ss_blockswap(saidx_t *a, saidx_t *b, saidx_t n) {
+ saidx_t t;
+ for(; 0 < n; --n, ++a, ++b) {
+ t = *a, *a = *b, *b = t;
+ }
+}
+
+static INLINE
+void
+ss_rotate(saidx_t *first, saidx_t *middle, saidx_t *last) {
+ saidx_t *a, *b, t;
+ saidx_t l, r;
+ l = middle - first, r = last - middle;
+ for(; (0 < l) && (0 < r);) {
+ if(l == r) { ss_blockswap(first, middle, l); break; }
+ if(l < r) {
+ a = last - 1, b = middle - 1;
+ t = *a;
+ do {
+ *a-- = *b, *b-- = *a;
+ if(b < first) {
+ *a = t;
+ last = a;
+ if((r -= l + 1) <= l) { break; }
+ a -= 1, b = middle - 1;
+ t = *a;
+ }
+ } while(1);
+ } else {
+ a = first, b = middle;
+ t = *a;
+ do {
+ *a++ = *b, *b++ = *a;
+ if(last <= b) {
+ *a = t;
+ first = a + 1;
+ if((l -= r + 1) <= r) { break; }
+ a += 1, b = middle;
+ t = *a;
+ }
+ } while(1);
+ }
+ }
+}
+
+
+/*---------------------------------------------------------------------------*/
+
+static
+void
+ss_inplacemerge(const sauchar_t *T, const saidx_t *PA,
+ saidx_t *first, saidx_t *middle, saidx_t *last,
+ saidx_t depth) {
+ const saidx_t *p;
+ saidx_t *a, *b;
+ saidx_t len, half;
+ saint_t q, r;
+ saint_t x;
+
+ for(;;) {
+ if(*(last - 1) < 0) { x = 1; p = PA + ~*(last - 1); }
+ else { x = 0; p = PA + *(last - 1); }
+ for(a = first, len = middle - first, half = len >> 1, r = -1;
+ 0 < len;
+ len = half, half >>= 1) {
+ b = a + half;
+ q = ss_compare(T, PA + ((0 <= *b) ? *b : ~*b), p, depth);
+ if(q < 0) {
+ a = b + 1;
+ half -= (len & 1) ^ 1;
+ } else {
+ r = q;
+ }
+ }
+ if(a < middle) {
+ if(r == 0) { *a = ~*a; }
+ ss_rotate(a, middle, last);
+ last -= middle - a;
+ middle = a;
+ if(first == middle) { break; }
+ }
+ --last;
+ if(x != 0) { while(*--last < 0) { } }
+ if(middle == last) { break; }
+ }
+}
+
+
+/*---------------------------------------------------------------------------*/
+
+/* Merge-forward with internal buffer. */
+static
+void
+ss_mergeforward(const sauchar_t *T, const saidx_t *PA,
+ saidx_t *first, saidx_t *middle, saidx_t *last,
+ saidx_t *buf, saidx_t depth) {
+ saidx_t *a, *b, *c, *bufend;
+ saidx_t t;
+ saint_t r;
+
+ bufend = buf + (middle - first) - 1;
+ ss_blockswap(buf, first, middle - first);
+
+ for(t = *(a = first), b = buf, c = middle;;) {
+ r = ss_compare(T, PA + *b, PA + *c, depth);
+ if(r < 0) {
+ do {
+ *a++ = *b;
+ if(bufend <= b) { *bufend = t; return; }
+ *b++ = *a;
+ } while(*b < 0);
+ } else if(r > 0) {
+ do {
+ *a++ = *c, *c++ = *a;
+ if(last <= c) {
+ while(b < bufend) { *a++ = *b, *b++ = *a; }
+ *a = *b, *b = t;
+ return;
+ }
+ } while(*c < 0);
+ } else {
+ *c = ~*c;
+ do {
+ *a++ = *b;
+ if(bufend <= b) { *bufend = t; return; }
+ *b++ = *a;
+ } while(*b < 0);
+
+ do {
+ *a++ = *c, *c++ = *a;
+ if(last <= c) {
+ while(b < bufend) { *a++ = *b, *b++ = *a; }
+ *a = *b, *b = t;
+ return;
+ }
+ } while(*c < 0);
+ }
+ }
+}
+
+/* Merge-backward with internal buffer. */
+static
+void
+ss_mergebackward(const sauchar_t *T, const saidx_t *PA,
+ saidx_t *first, saidx_t *middle, saidx_t *last,
+ saidx_t *buf, saidx_t depth) {
+ const saidx_t *p1, *p2;
+ saidx_t *a, *b, *c, *bufend;
+ saidx_t t;
+ saint_t r;
+ saint_t x;
+
+ bufend = buf + (last - middle) - 1;
+ ss_blockswap(buf, middle, last - middle);
+
+ x = 0;
+ if(*bufend < 0) { p1 = PA + ~*bufend; x |= 1; }
+ else { p1 = PA + *bufend; }
+ if(*(middle - 1) < 0) { p2 = PA + ~*(middle - 1); x |= 2; }
+ else { p2 = PA + *(middle - 1); }
+ for(t = *(a = last - 1), b = bufend, c = middle - 1;;) {
+ r = ss_compare(T, p1, p2, depth);
+ if(0 < r) {
+ if(x & 1) { do { *a-- = *b, *b-- = *a; } while(*b < 0); x ^= 1; }
+ *a-- = *b;
+ if(b <= buf) { *buf = t; break; }
+ *b-- = *a;
+ if(*b < 0) { p1 = PA + ~*b; x |= 1; }
+ else { p1 = PA + *b; }
+ } else if(r < 0) {
+ if(x & 2) { do { *a-- = *c, *c-- = *a; } while(*c < 0); x ^= 2; }
+ *a-- = *c, *c-- = *a;
+ if(c < first) {
+ while(buf < b) { *a-- = *b, *b-- = *a; }
+ *a = *b, *b = t;
+ break;
+ }
+ if(*c < 0) { p2 = PA + ~*c; x |= 2; }
+ else { p2 = PA + *c; }
+ } else {
+ if(x & 1) { do { *a-- = *b, *b-- = *a; } while(*b < 0); x ^= 1; }
+ *a-- = ~*b;
+ if(b <= buf) { *buf = t; break; }
+ *b-- = *a;
+ if(x & 2) { do { *a-- = *c, *c-- = *a; } while(*c < 0); x ^= 2; }
+ *a-- = *c, *c-- = *a;
+ if(c < first) {
+ while(buf < b) { *a-- = *b, *b-- = *a; }
+ *a = *b, *b = t;
+ break;
+ }
+ if(*b < 0) { p1 = PA + ~*b; x |= 1; }
+ else { p1 = PA + *b; }
+ if(*c < 0) { p2 = PA + ~*c; x |= 2; }
+ else { p2 = PA + *c; }
+ }
+ }
+}
+
+/* D&C based merge. */
+static
+void
+ss_swapmerge(const sauchar_t *T, const saidx_t *PA,
+ saidx_t *first, saidx_t *middle, saidx_t *last,
+ saidx_t *buf, saidx_t bufsize, saidx_t depth) {
+#define STACK_SIZE SS_SMERGE_STACKSIZE
+#define GETIDX(a) ((0 <= (a)) ? (a) : (~(a)))
+#define MERGE_CHECK(a, b, c)\
+ do {\
+ if(((c) & 1) ||\
+ (((c) & 2) && (ss_compare(T, PA + GETIDX(*((a) - 1)), PA + *(a), depth) == 0))) {\
+ *(a) = ~*(a);\
+ }\
+ if(((c) & 4) && ((ss_compare(T, PA + GETIDX(*((b) - 1)), PA + *(b), depth) == 0))) {\
+ *(b) = ~*(b);\
+ }\
+ } while(0)
+ struct { saidx_t *a, *b, *c; saint_t d; } stack[STACK_SIZE];
+ saidx_t *l, *r, *lm, *rm;
+ saidx_t m, len, half;
+ saint_t ssize;
+ saint_t check, next;
+
+ for(check = 0, ssize = 0;;) {
+ if((last - middle) <= bufsize) {
+ if((first < middle) && (middle < last)) {
+ ss_mergebackward(T, PA, first, middle, last, buf, depth);
+ }
+ MERGE_CHECK(first, last, check);
+ STACK_POP(first, middle, last, check);
+ continue;
+ }
+
+ if((middle - first) <= bufsize) {
+ if(first < middle) {
+ ss_mergeforward(T, PA, first, middle, last, buf, depth);
+ }
+ MERGE_CHECK(first, last, check);
+ STACK_POP(first, middle, last, check);
+ continue;
+ }
+
+ for(m = 0, len = MIN(middle - first, last - middle), half = len >> 1;
+ 0 < len;
+ len = half, half >>= 1) {
+ if(ss_compare(T, PA + GETIDX(*(middle + m + half)),
+ PA + GETIDX(*(middle - m - half - 1)), depth) < 0) {
+ m += half + 1;
+ half -= (len & 1) ^ 1;
+ }
+ }
+
+ if(0 < m) {
+ lm = middle - m, rm = middle + m;
+ ss_blockswap(lm, middle, m);
+ l = r = middle, next = 0;
+ if(rm < last) {
+ if(*rm < 0) {
+ *rm = ~*rm;
+ if(first < lm) { for(; *--l < 0;) { } next |= 4; }
+ next |= 1;
+ } else if(first < lm) {
+ for(; *r < 0; ++r) { }
+ next |= 2;
+ }
+ }
+
+ if((l - first) <= (last - r)) {
+ STACK_PUSH(r, rm, last, (next & 3) | (check & 4));
+ middle = lm, last = l, check = (check & 3) | (next & 4);
+ } else {
+ if((next & 2) && (r == middle)) { next ^= 6; }
+ STACK_PUSH(first, lm, l, (check & 3) | (next & 4));
+ first = r, middle = rm, check = (next & 3) | (check & 4);
+ }
+ } else {
+ if(ss_compare(T, PA + GETIDX(*(middle - 1)), PA + *middle, depth) == 0) {
+ *middle = ~*middle;
+ }
+ MERGE_CHECK(first, last, check);
+ STACK_POP(first, middle, last, check);
+ }
+ }
+#undef STACK_SIZE
+}
+
+#endif /* SS_BLOCKSIZE != 0 */
+
+
+/*---------------------------------------------------------------------------*/
+
+/*- Function -*/
+
+/* Substring sort */
+void
+sssort(const sauchar_t *T, const saidx_t *PA,
+ saidx_t *first, saidx_t *last,
+ saidx_t *buf, saidx_t bufsize,
+ saidx_t depth, saidx_t n, saint_t lastsuffix) {
+ saidx_t *a;
+#if SS_BLOCKSIZE != 0
+ saidx_t *b, *middle, *curbuf;
+ saidx_t j, k, curbufsize, limit;
+#endif
+ saidx_t i;
+
+ if(lastsuffix != 0) { ++first; }
+
+#if SS_BLOCKSIZE == 0
+ ss_mintrosort(T, PA, first, last, depth);
+#else
+ if((bufsize < SS_BLOCKSIZE) &&
+ (bufsize < (last - first)) &&
+ (bufsize < (limit = ss_isqrt(last - first)))) {
+ if(SS_BLOCKSIZE < limit) { limit = SS_BLOCKSIZE; }
+ buf = middle = last - limit, bufsize = limit;
+ } else {
+ middle = last, limit = 0;
+ }
+ for(a = first, i = 0; SS_BLOCKSIZE < (middle - a); a += SS_BLOCKSIZE, ++i) {
+#if SS_INSERTIONSORT_THRESHOLD < SS_BLOCKSIZE
+ ss_mintrosort(T, PA, a, a + SS_BLOCKSIZE, depth);
+#elif 1 < SS_BLOCKSIZE
+ ss_insertionsort(T, PA, a, a + SS_BLOCKSIZE, depth);
+#endif
+ curbufsize = last - (a + SS_BLOCKSIZE);
+ curbuf = a + SS_BLOCKSIZE;
+ if(curbufsize <= bufsize) { curbufsize = bufsize, curbuf = buf; }
+ for(b = a, k = SS_BLOCKSIZE, j = i; j & 1; b -= k, k <<= 1, j >>= 1) {
+ ss_swapmerge(T, PA, b - k, b, b + k, curbuf, curbufsize, depth);
+ }
+ }
+#if SS_INSERTIONSORT_THRESHOLD < SS_BLOCKSIZE
+ ss_mintrosort(T, PA, a, middle, depth);
+#elif 1 < SS_BLOCKSIZE
+ ss_insertionsort(T, PA, a, middle, depth);
+#endif
+ for(k = SS_BLOCKSIZE; i != 0; k <<= 1, i >>= 1) {
+ if(i & 1) {
+ ss_swapmerge(T, PA, a - k, a, middle, buf, bufsize, depth);
+ a -= k;
+ }
+ }
+ if(limit != 0) {
+#if SS_INSERTIONSORT_THRESHOLD < SS_BLOCKSIZE
+ ss_mintrosort(T, PA, middle, last, depth);
+#elif 1 < SS_BLOCKSIZE
+ ss_insertionsort(T, PA, middle, last, depth);
+#endif
+ ss_inplacemerge(T, PA, first, middle, last, depth);
+ }
+#endif
+
+ if(lastsuffix != 0) {
+ /* Insert last type B* suffix. */
+ saidx_t PAi[2]; PAi[0] = PA[*(first - 1)], PAi[1] = n - 2;
+ for(a = first, i = *(first - 1);
+ (a < last) && ((*a < 0) || (0 < ss_compare(T, &(PAi[0]), PA + *a, depth)));
+ ++a) {
+ *(a - 1) = *a;
+ }
+ *(a - 1) = i;
+ }
+}
diff --git a/tools/z64compress/src/enc/apultra/trsort.c b/tools/z64compress/src/enc/apultra/trsort.c
new file mode 100644
index 0000000..6fe3e67
--- /dev/null
+++ b/tools/z64compress/src/enc/apultra/trsort.c
@@ -0,0 +1,586 @@
+/*
+ * trsort.c for libdivsufsort
+ * Copyright (c) 2003-2008 Yuta Mori 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 "divsufsort_private.h"
+
+
+/*- Private Functions -*/
+
+static const saint_t lg_table[256]= {
+ -1,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+ 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+ 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
+ 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
+ 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
+ 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7
+};
+
+static INLINE
+saint_t
+tr_ilg(saidx_t n) {
+#if defined(BUILD_DIVSUFSORT64)
+ return (n >> 32) ?
+ ((n >> 48) ?
+ ((n >> 56) ?
+ 56 + lg_table[(n >> 56) & 0xff] :
+ 48 + lg_table[(n >> 48) & 0xff]) :
+ ((n >> 40) ?
+ 40 + lg_table[(n >> 40) & 0xff] :
+ 32 + lg_table[(n >> 32) & 0xff])) :
+ ((n & 0xffff0000) ?
+ ((n & 0xff000000) ?
+ 24 + lg_table[(n >> 24) & 0xff] :
+ 16 + lg_table[(n >> 16) & 0xff]) :
+ ((n & 0x0000ff00) ?
+ 8 + lg_table[(n >> 8) & 0xff] :
+ 0 + lg_table[(n >> 0) & 0xff]));
+#else
+ return (n & 0xffff0000) ?
+ ((n & 0xff000000) ?
+ 24 + lg_table[(n >> 24) & 0xff] :
+ 16 + lg_table[(n >> 16) & 0xff]) :
+ ((n & 0x0000ff00) ?
+ 8 + lg_table[(n >> 8) & 0xff] :
+ 0 + lg_table[(n >> 0) & 0xff]);
+#endif
+}
+
+
+/*---------------------------------------------------------------------------*/
+
+/* Simple insertionsort for small size groups. */
+static
+void
+tr_insertionsort(const saidx_t *ISAd, saidx_t *first, saidx_t *last) {
+ saidx_t *a, *b;
+ saidx_t t, r;
+
+ for(a = first + 1; a < last; ++a) {
+ for(t = *a, b = a - 1; 0 > (r = ISAd[t] - ISAd[*b]);) {
+ do { *(b + 1) = *b; } while((first <= --b) && (*b < 0));
+ if(b < first) { break; }
+ }
+ if(r == 0) { *b = ~*b; }
+ *(b + 1) = t;
+ }
+}
+
+
+/*---------------------------------------------------------------------------*/
+
+static INLINE
+void
+tr_fixdown(const saidx_t *ISAd, saidx_t *SA, saidx_t i, saidx_t size) {
+ saidx_t j, k;
+ saidx_t v;
+ saidx_t c, d, e;
+
+ for(v = SA[i], c = ISAd[v]; (j = 2 * i + 1) < size; SA[i] = SA[k], i = k) {
+ d = ISAd[SA[k = j++]];
+ if(d < (e = ISAd[SA[j]])) { k = j; d = e; }
+ if(d <= c) { break; }
+ }
+ SA[i] = v;
+}
+
+/* Simple top-down heapsort. */
+static
+void
+tr_heapsort(const saidx_t *ISAd, saidx_t *SA, saidx_t size) {
+ saidx_t i, m;
+ saidx_t t;
+
+ m = size;
+ if((size % 2) == 0) {
+ m--;
+ if(ISAd[SA[m / 2]] < ISAd[SA[m]]) { SWAP(SA[m], SA[m / 2]); }
+ }
+
+ for(i = m / 2 - 1; 0 <= i; --i) { tr_fixdown(ISAd, SA, i, m); }
+ if((size % 2) == 0) { SWAP(SA[0], SA[m]); tr_fixdown(ISAd, SA, 0, m); }
+ for(i = m - 1; 0 < i; --i) {
+ t = SA[0], SA[0] = SA[i];
+ tr_fixdown(ISAd, SA, 0, i);
+ SA[i] = t;
+ }
+}
+
+
+/*---------------------------------------------------------------------------*/
+
+/* Returns the median of three elements. */
+static INLINE
+saidx_t *
+tr_median3(const saidx_t *ISAd, saidx_t *v1, saidx_t *v2, saidx_t *v3) {
+ saidx_t *t;
+ if(ISAd[*v1] > ISAd[*v2]) { SWAP(v1, v2); }
+ if(ISAd[*v2] > ISAd[*v3]) {
+ if(ISAd[*v1] > ISAd[*v3]) { return v1; }
+ else { return v3; }
+ }
+ return v2;
+}
+
+/* Returns the median of five elements. */
+static INLINE
+saidx_t *
+tr_median5(const saidx_t *ISAd,
+ saidx_t *v1, saidx_t *v2, saidx_t *v3, saidx_t *v4, saidx_t *v5) {
+ saidx_t *t;
+ if(ISAd[*v2] > ISAd[*v3]) { SWAP(v2, v3); }
+ if(ISAd[*v4] > ISAd[*v5]) { SWAP(v4, v5); }
+ if(ISAd[*v2] > ISAd[*v4]) { SWAP(v2, v4); SWAP(v3, v5); }
+ if(ISAd[*v1] > ISAd[*v3]) { SWAP(v1, v3); }
+ if(ISAd[*v1] > ISAd[*v4]) { SWAP(v1, v4); SWAP(v3, v5); }
+ if(ISAd[*v3] > ISAd[*v4]) { return v4; }
+ return v3;
+}
+
+/* Returns the pivot element. */
+static INLINE
+saidx_t *
+tr_pivot(const saidx_t *ISAd, saidx_t *first, saidx_t *last) {
+ saidx_t *middle;
+ saidx_t t;
+
+ t = last - first;
+ middle = first + t / 2;
+
+ if(t <= 512) {
+ if(t <= 32) {
+ return tr_median3(ISAd, first, middle, last - 1);
+ } else {
+ t >>= 2;
+ return tr_median5(ISAd, first, first + t, middle, last - 1 - t, last - 1);
+ }
+ }
+ t >>= 3;
+ first = tr_median3(ISAd, first, first + t, first + (t << 1));
+ middle = tr_median3(ISAd, middle - t, middle, middle + t);
+ last = tr_median3(ISAd, last - 1 - (t << 1), last - 1 - t, last - 1);
+ return tr_median3(ISAd, first, middle, last);
+}
+
+
+/*---------------------------------------------------------------------------*/
+
+typedef struct _trbudget_t trbudget_t;
+struct _trbudget_t {
+ saidx_t chance;
+ saidx_t remain;
+ saidx_t incval;
+ saidx_t count;
+};
+
+static INLINE
+void
+trbudget_init(trbudget_t *budget, saidx_t chance, saidx_t incval) {
+ budget->chance = chance;
+ budget->remain = budget->incval = incval;
+}
+
+static INLINE
+saint_t
+trbudget_check(trbudget_t *budget, saidx_t size) {
+ if(size <= budget->remain) { budget->remain -= size; return 1; }
+ if(budget->chance == 0) { budget->count += size; return 0; }
+ budget->remain += budget->incval - size;
+ budget->chance -= 1;
+ return 1;
+}
+
+
+/*---------------------------------------------------------------------------*/
+
+static INLINE
+void
+tr_partition(const saidx_t *ISAd,
+ saidx_t *first, saidx_t *middle, saidx_t *last,
+ saidx_t **pa, saidx_t **pb, saidx_t v) {
+ saidx_t *a, *b, *c, *d, *e, *f;
+ saidx_t t, s;
+ saidx_t x = 0;
+
+ for(b = middle - 1; (++b < last) && ((x = ISAd[*b]) == v);) { }
+ if(((a = b) < last) && (x < v)) {
+ for(; (++b < last) && ((x = ISAd[*b]) <= v);) {
+ if(x == v) { SWAP(*b, *a); ++a; }
+ }
+ }
+ for(c = last; (b < --c) && ((x = ISAd[*c]) == v);) { }
+ if((b < (d = c)) && (x > v)) {
+ for(; (b < --c) && ((x = ISAd[*c]) >= v);) {
+ if(x == v) { SWAP(*c, *d); --d; }
+ }
+ }
+ for(; b < c;) {
+ SWAP(*b, *c);
+ for(; (++b < c) && ((x = ISAd[*b]) <= v);) {
+ if(x == v) { SWAP(*b, *a); ++a; }
+ }
+ for(; (b < --c) && ((x = ISAd[*c]) >= v);) {
+ if(x == v) { SWAP(*c, *d); --d; }
+ }
+ }
+
+ if(a <= d) {
+ c = b - 1;
+ if((s = a - first) > (t = b - a)) { s = t; }
+ for(e = first, f = b - s; 0 < s; --s, ++e, ++f) { SWAP(*e, *f); }
+ if((s = d - c) > (t = last - d - 1)) { s = t; }
+ for(e = b, f = last - s; 0 < s; --s, ++e, ++f) { SWAP(*e, *f); }
+ first += (b - a), last -= (d - c);
+ }
+ *pa = first, *pb = last;
+}
+
+static
+void
+tr_copy(saidx_t *ISA, const saidx_t *SA,
+ saidx_t *first, saidx_t *a, saidx_t *b, saidx_t *last,
+ saidx_t depth) {
+ /* sort suffixes of middle partition
+ by using sorted order of suffixes of left and right partition. */
+ saidx_t *c, *d, *e;
+ saidx_t s, v;
+
+ v = b - SA - 1;
+ for(c = first, d = a - 1; c <= d; ++c) {
+ if((0 <= (s = *c - depth)) && (ISA[s] == v)) {
+ *++d = s;
+ ISA[s] = d - SA;
+ }
+ }
+ for(c = last - 1, e = d + 1, d = b; e < d; --c) {
+ if((0 <= (s = *c - depth)) && (ISA[s] == v)) {
+ *--d = s;
+ ISA[s] = d - SA;
+ }
+ }
+}
+
+static
+void
+tr_partialcopy(saidx_t *ISA, const saidx_t *SA,
+ saidx_t *first, saidx_t *a, saidx_t *b, saidx_t *last,
+ saidx_t depth) {
+ saidx_t *c, *d, *e;
+ saidx_t s, v;
+ saidx_t rank, lastrank, newrank = -1;
+
+ v = b - SA - 1;
+ lastrank = -1;
+ for(c = first, d = a - 1; c <= d; ++c) {
+ if((0 <= (s = *c - depth)) && (ISA[s] == v)) {
+ *++d = s;
+ rank = ISA[s + depth];
+ if(lastrank != rank) { lastrank = rank; newrank = d - SA; }
+ ISA[s] = newrank;
+ }
+ }
+
+ lastrank = -1;
+ for(e = d; first <= e; --e) {
+ rank = ISA[*e];
+ if(lastrank != rank) { lastrank = rank; newrank = e - SA; }
+ if(newrank != rank) { ISA[*e] = newrank; }
+ }
+
+ lastrank = -1;
+ for(c = last - 1, e = d + 1, d = b; e < d; --c) {
+ if((0 <= (s = *c - depth)) && (ISA[s] == v)) {
+ *--d = s;
+ rank = ISA[s + depth];
+ if(lastrank != rank) { lastrank = rank; newrank = d - SA; }
+ ISA[s] = newrank;
+ }
+ }
+}
+
+static
+void
+tr_introsort(saidx_t *ISA, const saidx_t *ISAd,
+ saidx_t *SA, saidx_t *first, saidx_t *last,
+ trbudget_t *budget) {
+#define STACK_SIZE TR_STACKSIZE
+ struct { const saidx_t *a; saidx_t *b, *c; saint_t d, e; }stack[STACK_SIZE];
+ saidx_t *a, *b, *c;
+ saidx_t t;
+ saidx_t v, x = 0;
+ saidx_t incr = ISAd - ISA;
+ saint_t limit, next;
+ saint_t ssize, trlink = -1;
+
+ for(ssize = 0, limit = tr_ilg(last - first);;) {
+
+ if(limit < 0) {
+ if(limit == -1) {
+ /* tandem repeat partition */
+ tr_partition(ISAd - incr, first, first, last, &a, &b, last - SA - 1);
+
+ /* update ranks */
+ if(a < last) {
+ for(c = first, v = a - SA - 1; c < a; ++c) { ISA[*c] = v; }
+ }
+ if(b < last) {
+ for(c = a, v = b - SA - 1; c < b; ++c) { ISA[*c] = v; }
+ }
+
+ /* push */
+ if(1 < (b - a)) {
+ STACK_PUSH5(NULL, a, b, 0, 0);
+ STACK_PUSH5(ISAd - incr, first, last, -2, trlink);
+ trlink = ssize - 2;
+ }
+ if((a - first) <= (last - b)) {
+ if(1 < (a - first)) {
+ STACK_PUSH5(ISAd, b, last, tr_ilg(last - b), trlink);
+ last = a, limit = tr_ilg(a - first);
+ } else if(1 < (last - b)) {
+ first = b, limit = tr_ilg(last - b);
+ } else {
+ STACK_POP5(ISAd, first, last, limit, trlink);
+ }
+ } else {
+ if(1 < (last - b)) {
+ STACK_PUSH5(ISAd, first, a, tr_ilg(a - first), trlink);
+ first = b, limit = tr_ilg(last - b);
+ } else if(1 < (a - first)) {
+ last = a, limit = tr_ilg(a - first);
+ } else {
+ STACK_POP5(ISAd, first, last, limit, trlink);
+ }
+ }
+ } else if(limit == -2) {
+ /* tandem repeat copy */
+ a = stack[--ssize].b, b = stack[ssize].c;
+ if(stack[ssize].d == 0) {
+ tr_copy(ISA, SA, first, a, b, last, ISAd - ISA);
+ } else {
+ if(0 <= trlink) { stack[trlink].d = -1; }
+ tr_partialcopy(ISA, SA, first, a, b, last, ISAd - ISA);
+ }
+ STACK_POP5(ISAd, first, last, limit, trlink);
+ } else {
+ /* sorted partition */
+ if(0 <= *first) {
+ a = first;
+ do { ISA[*a] = a - SA; } while((++a < last) && (0 <= *a));
+ first = a;
+ }
+ if(first < last) {
+ a = first; do { *a = ~*a; } while(*++a < 0);
+ next = (ISA[*a] != ISAd[*a]) ? tr_ilg(a - first + 1) : -1;
+ if(++a < last) { for(b = first, v = a - SA - 1; b < a; ++b) { ISA[*b] = v; } }
+
+ /* push */
+ if(trbudget_check(budget, a - first)) {
+ if((a - first) <= (last - a)) {
+ STACK_PUSH5(ISAd, a, last, -3, trlink);
+ ISAd += incr, last = a, limit = next;
+ } else {
+ if(1 < (last - a)) {
+ STACK_PUSH5(ISAd + incr, first, a, next, trlink);
+ first = a, limit = -3;
+ } else {
+ ISAd += incr, last = a, limit = next;
+ }
+ }
+ } else {
+ if(0 <= trlink) { stack[trlink].d = -1; }
+ if(1 < (last - a)) {
+ first = a, limit = -3;
+ } else {
+ STACK_POP5(ISAd, first, last, limit, trlink);
+ }
+ }
+ } else {
+ STACK_POP5(ISAd, first, last, limit, trlink);
+ }
+ }
+ continue;
+ }
+
+ if((last - first) <= TR_INSERTIONSORT_THRESHOLD) {
+ tr_insertionsort(ISAd, first, last);
+ limit = -3;
+ continue;
+ }
+
+ if(limit-- == 0) {
+ tr_heapsort(ISAd, first, last - first);
+ for(a = last - 1; first < a; a = b) {
+ for(x = ISAd[*a], b = a - 1; (first <= b) && (ISAd[*b] == x); --b) { *b = ~*b; }
+ }
+ limit = -3;
+ continue;
+ }
+
+ /* choose pivot */
+ a = tr_pivot(ISAd, first, last);
+ SWAP(*first, *a);
+ v = ISAd[*first];
+
+ /* partition */
+ tr_partition(ISAd, first, first + 1, last, &a, &b, v);
+ if((last - first) != (b - a)) {
+ next = (ISA[*a] != v) ? tr_ilg(b - a) : -1;
+
+ /* update ranks */
+ for(c = first, v = a - SA - 1; c < a; ++c) { ISA[*c] = v; }
+ if(b < last) { for(c = a, v = b - SA - 1; c < b; ++c) { ISA[*c] = v; } }
+
+ /* push */
+ if((1 < (b - a)) && (trbudget_check(budget, b - a))) {
+ if((a - first) <= (last - b)) {
+ if((last - b) <= (b - a)) {
+ if(1 < (a - first)) {
+ STACK_PUSH5(ISAd + incr, a, b, next, trlink);
+ STACK_PUSH5(ISAd, b, last, limit, trlink);
+ last = a;
+ } else if(1 < (last - b)) {
+ STACK_PUSH5(ISAd + incr, a, b, next, trlink);
+ first = b;
+ } else {
+ ISAd += incr, first = a, last = b, limit = next;
+ }
+ } else if((a - first) <= (b - a)) {
+ if(1 < (a - first)) {
+ STACK_PUSH5(ISAd, b, last, limit, trlink);
+ STACK_PUSH5(ISAd + incr, a, b, next, trlink);
+ last = a;
+ } else {
+ STACK_PUSH5(ISAd, b, last, limit, trlink);
+ ISAd += incr, first = a, last = b, limit = next;
+ }
+ } else {
+ STACK_PUSH5(ISAd, b, last, limit, trlink);
+ STACK_PUSH5(ISAd, first, a, limit, trlink);
+ ISAd += incr, first = a, last = b, limit = next;
+ }
+ } else {
+ if((a - first) <= (b - a)) {
+ if(1 < (last - b)) {
+ STACK_PUSH5(ISAd + incr, a, b, next, trlink);
+ STACK_PUSH5(ISAd, first, a, limit, trlink);
+ first = b;
+ } else if(1 < (a - first)) {
+ STACK_PUSH5(ISAd + incr, a, b, next, trlink);
+ last = a;
+ } else {
+ ISAd += incr, first = a, last = b, limit = next;
+ }
+ } else if((last - b) <= (b - a)) {
+ if(1 < (last - b)) {
+ STACK_PUSH5(ISAd, first, a, limit, trlink);
+ STACK_PUSH5(ISAd + incr, a, b, next, trlink);
+ first = b;
+ } else {
+ STACK_PUSH5(ISAd, first, a, limit, trlink);
+ ISAd += incr, first = a, last = b, limit = next;
+ }
+ } else {
+ STACK_PUSH5(ISAd, first, a, limit, trlink);
+ STACK_PUSH5(ISAd, b, last, limit, trlink);
+ ISAd += incr, first = a, last = b, limit = next;
+ }
+ }
+ } else {
+ if((1 < (b - a)) && (0 <= trlink)) { stack[trlink].d = -1; }
+ if((a - first) <= (last - b)) {
+ if(1 < (a - first)) {
+ STACK_PUSH5(ISAd, b, last, limit, trlink);
+ last = a;
+ } else if(1 < (last - b)) {
+ first = b;
+ } else {
+ STACK_POP5(ISAd, first, last, limit, trlink);
+ }
+ } else {
+ if(1 < (last - b)) {
+ STACK_PUSH5(ISAd, first, a, limit, trlink);
+ first = b;
+ } else if(1 < (a - first)) {
+ last = a;
+ } else {
+ STACK_POP5(ISAd, first, last, limit, trlink);
+ }
+ }
+ }
+ } else {
+ if(trbudget_check(budget, last - first)) {
+ limit = tr_ilg(last - first), ISAd += incr;
+ } else {
+ if(0 <= trlink) { stack[trlink].d = -1; }
+ STACK_POP5(ISAd, first, last, limit, trlink);
+ }
+ }
+ }
+#undef STACK_SIZE
+}
+
+
+
+/*---------------------------------------------------------------------------*/
+
+/*- Function -*/
+
+/* Tandem repeat sort */
+void
+trsort(saidx_t *ISA, saidx_t *SA, saidx_t n, saidx_t depth) {
+ saidx_t *ISAd;
+ saidx_t *first, *last;
+ trbudget_t budget;
+ saidx_t t, skip, unsorted;
+
+ trbudget_init(&budget, tr_ilg(n) * 2 / 3, n);
+/* trbudget_init(&budget, tr_ilg(n) * 3 / 4, n); */
+ for(ISAd = ISA + depth; -n < *SA; ISAd += ISAd - ISA) {
+ first = SA;
+ skip = 0;
+ unsorted = 0;
+ do {
+ if((t = *first) < 0) { first -= t; skip += t; }
+ else {
+ if(skip != 0) { *(first + skip) = skip; skip = 0; }
+ last = SA + ISA[t] + 1;
+ if(1 < (last - first)) {
+ budget.count = 0;
+ tr_introsort(ISA, ISAd, SA, first, last, &budget);
+ if(budget.count != 0) { unsorted += budget.count; }
+ else { skip = first - last; }
+ } else if((last - first) == 1) {
+ skip = -1;
+ }
+ first = last;
+ }
+ } while(first < (SA + n));
+ if(skip != 0) { *(first + skip) = skip; }
+ if(unsorted == 0) { break; }
+ }
+}
diff --git a/tools/z64compress/src/enc/enc.h b/tools/z64compress/src/enc/enc.h
new file mode 100644
index 0000000..48a2475
--- /dev/null
+++ b/tools/z64compress/src/enc/enc.h
@@ -0,0 +1,50 @@
+#ifndef Z64COMPRESS_ENC_H_INCLUDED
+#define Z64COMPRESS_ENC_H_INCLUDED
+
+int yazenc(
+ void *src
+ , unsigned src_sz
+ , void *dst
+ , unsigned *dst_sz
+ , void *_ctx
+);
+void *yazCtx_new(void);
+void yazCtx_free(void *_ctx);
+int yazdec(void *_src, void *_dst, unsigned dstSz, unsigned *srcSz);
+
+int lzoenc(
+ void *src
+ , unsigned src_sz
+ , void *dst
+ , unsigned *dst_sz
+ , void *_ctx
+);
+void *lzoCtx_new(void);
+void lzoCtx_free(void *_ctx);
+
+int uclenc(
+ void *src
+ , unsigned src_sz
+ , void *dst
+ , unsigned *dst_sz
+ , void *_ctx
+);
+
+int zx7enc(
+ void *src
+ , unsigned src_sz
+ , void *dst
+ , unsigned *dst_sz
+ , void *_ctx
+);
+
+int aplenc(
+ void *_src
+ , unsigned src_sz
+ , void *_dst
+ , unsigned *dst_sz
+ , void *_ctx
+);
+
+#endif /* Z64COMPRESS_ENC_H_INCLUDED */
+
diff --git a/tools/z64compress/src/enc/lzo.c b/tools/z64compress/src/enc/lzo.c
new file mode 100644
index 0000000..64f79b7
--- /dev/null
+++ b/tools/z64compress/src/enc/lzo.c
@@ -0,0 +1,55 @@
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include "lzo/lzoconf.h"
+#include "lzo/lzo1x.h"
+
+void
+lzoCtx_free(void *_ctx)
+{
+ if (!_ctx)
+ return;
+
+ free(_ctx);
+}
+
+void *
+lzoCtx_new(void)
+{
+ return malloc(LZO1X_999_MEM_COMPRESS);
+}
+
+int
+lzoenc(
+ void *_src
+ , unsigned src_sz
+ , void *_dst
+ , unsigned *dst_sz
+ , void *_ctx
+)
+{
+ unsigned char *src = _src;
+ unsigned char *dst = _dst;
+ unsigned char *wrkmem = _ctx;
+ lzo_uint result_sz = 0;
+
+ int hlen = 8; /* header length; required due to MM's archives */
+ memset(dst, 0, hlen);
+ memcpy(dst, "LZO0", 4);
+ dst[4] = (src_sz >> 24);
+ dst[5] = (src_sz >> 16);
+ dst[6] = (src_sz >> 8);
+ dst[7] = (src_sz >> 0);
+
+ if (!wrkmem)
+ return 1;
+
+ memset(wrkmem, 0, LZO1X_999_MEM_COMPRESS);
+
+ lzo1x_999_compress(src, src_sz, dst + hlen, &result_sz, wrkmem);
+
+ *dst_sz = result_sz + hlen;
+
+ return 0;
+}
+
diff --git a/tools/z64compress/src/enc/lzo/config1x.h b/tools/z64compress/src/enc/lzo/config1x.h
new file mode 100644
index 0000000..f85cb65
--- /dev/null
+++ b/tools/z64compress/src/enc/lzo/config1x.h
@@ -0,0 +1,106 @@
+/* config1x.h -- configuration for the LZO1X algorithm
+
+ This file is part of the LZO real-time data compression library.
+
+ Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer
+ All Rights Reserved.
+
+ The LZO library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of
+ the License, or (at your option) any later version.
+
+ The LZO library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with the LZO library; see the file COPYING.
+ If not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ Markus F.X.J. Oberhumer
+ <markus@oberhumer.com>
+ http://www.oberhumer.com/opensource/lzo/
+ */
+
+
+/* WARNING: this file should *not* be used by applications. It is
+ part of the implementation of the library and is subject
+ to change.
+ */
+
+
+#ifndef __LZO_CONFIG1X_H
+#define __LZO_CONFIG1X_H 1
+
+#if !defined(LZO1X) && !defined(LZO1Y) && !defined(LZO1Z)
+# define LZO1X 1
+#endif
+
+#include "lzo_conf.h"
+#if !defined(__LZO_IN_MINILZO)
+#include "lzo1x.h"
+#endif
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+#ifndef LZO_EOF_CODE
+#define LZO_EOF_CODE 1
+#endif
+#undef LZO_DETERMINISTIC
+
+#define M1_MAX_OFFSET 0x0400
+#ifndef M2_MAX_OFFSET
+#define M2_MAX_OFFSET 0x0800
+#endif
+#define M3_MAX_OFFSET 0x4000
+#define M4_MAX_OFFSET 0xbfff
+
+#define MX_MAX_OFFSET (M1_MAX_OFFSET + M2_MAX_OFFSET)
+
+#define M1_MIN_LEN 2
+#define M1_MAX_LEN 2
+#define M2_MIN_LEN 3
+#ifndef M2_MAX_LEN
+#define M2_MAX_LEN 8
+#endif
+#define M3_MIN_LEN 3
+#define M3_MAX_LEN 33
+#define M4_MIN_LEN 3
+#define M4_MAX_LEN 9
+
+#define M1_MARKER 0
+#define M2_MARKER 64
+#define M3_MARKER 32
+#define M4_MARKER 16
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+#ifndef MIN_LOOKAHEAD
+#define MIN_LOOKAHEAD (M2_MAX_LEN + 1)
+#endif
+
+#if defined(LZO_NEED_DICT_H)
+
+#ifndef LZO_HASH
+#define LZO_HASH LZO_HASH_LZO_INCREMENTAL_B
+#endif
+#define DL_MIN_LEN M2_MIN_LEN
+#include "lzo_dict.h"
+
+#endif
+
+
+
+#endif /* already included */
+
+
+/* vim:set ts=4 sw=4 et: */
diff --git a/tools/z64compress/src/enc/lzo/lzo1_d.ch b/tools/z64compress/src/enc/lzo/lzo1_d.ch
new file mode 100644
index 0000000..bedc7ce
--- /dev/null
+++ b/tools/z64compress/src/enc/lzo/lzo1_d.ch
@@ -0,0 +1,156 @@
+/* lzo1_d.ch -- common decompression stuff
+
+ This file is part of the LZO real-time data compression library.
+
+ Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer
+ All Rights Reserved.
+
+ The LZO library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of
+ the License, or (at your option) any later version.
+
+ The LZO library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with the LZO library; see the file COPYING.
+ If not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ Markus F.X.J. Oberhumer
+ <markus@oberhumer.com>
+ http://www.oberhumer.com/opensource/lzo/
+ */
+
+
+
+#if defined(LZO_TEST_OVERRUN)
+# if !defined(LZO_TEST_OVERRUN_INPUT)
+# define LZO_TEST_OVERRUN_INPUT 2
+# endif
+# if !defined(LZO_TEST_OVERRUN_OUTPUT)
+# define LZO_TEST_OVERRUN_OUTPUT 2
+# endif
+# if !defined(LZO_TEST_OVERRUN_LOOKBEHIND)
+# define LZO_TEST_OVERRUN_LOOKBEHIND 1
+# endif
+#endif
+
+
+/***********************************************************************
+// Overrun detection is internally handled by these macros:
+//
+// TEST_IP test input overrun at loop begin
+// NEED_IP test input overrun at every input byte
+//
+// TEST_OP test output overrun at loop begin
+// NEED_OP test output overrun at every output byte
+//
+// TEST_LB test match position
+//
+// The fastest decompressor results when testing for no overruns
+// and using LZO_EOF_CODE.
+************************************************************************/
+
+#undef TEST_IP
+#undef TEST_OP
+#undef TEST_IP_AND_TEST_OP
+#undef TEST_LB
+#undef TEST_LBO
+#undef NEED_IP
+#undef NEED_OP
+#undef TEST_IV
+#undef TEST_OV
+#undef HAVE_TEST_IP
+#undef HAVE_TEST_OP
+#undef HAVE_NEED_IP
+#undef HAVE_NEED_OP
+#undef HAVE_ANY_IP
+#undef HAVE_ANY_OP
+
+
+#if defined(LZO_TEST_OVERRUN_INPUT)
+# if (LZO_TEST_OVERRUN_INPUT >= 1)
+# define TEST_IP (ip < ip_end)
+# endif
+# if (LZO_TEST_OVERRUN_INPUT >= 2)
+# define NEED_IP(x) \
+ if ((lzo_uint)(ip_end - ip) < (lzo_uint)(x)) goto input_overrun
+# define TEST_IV(x) if ((x) > (lzo_uint)0 - (511)) goto input_overrun
+# endif
+#endif
+
+#if defined(LZO_TEST_OVERRUN_OUTPUT)
+# if (LZO_TEST_OVERRUN_OUTPUT >= 1)
+# define TEST_OP (op <= op_end)
+# endif
+# if (LZO_TEST_OVERRUN_OUTPUT >= 2)
+# undef TEST_OP /* don't need both of the tests here */
+# define NEED_OP(x) \
+ if ((lzo_uint)(op_end - op) < (lzo_uint)(x)) goto output_overrun
+# define TEST_OV(x) if ((x) > (lzo_uint)0 - (511)) goto output_overrun
+# endif
+#endif
+
+#if defined(LZO_TEST_OVERRUN_LOOKBEHIND)
+# define TEST_LB(m_pos) if (PTR_LT(m_pos,out) || PTR_GE(m_pos,op)) goto lookbehind_overrun
+# define TEST_LBO(m_pos,o) if (PTR_LT(m_pos,out) || PTR_GE(m_pos,op-(o))) goto lookbehind_overrun
+#else
+# define TEST_LB(m_pos) ((void) 0)
+# define TEST_LBO(m_pos,o) ((void) 0)
+#endif
+
+
+#if !defined(LZO_EOF_CODE) && !defined(TEST_IP)
+ /* if we have no EOF code, we have to test for the end of the input */
+# define TEST_IP (ip < ip_end)
+#endif
+
+
+#if defined(TEST_IP)
+# define HAVE_TEST_IP 1
+#else
+# define TEST_IP 1
+#endif
+#if defined(TEST_OP)
+# define HAVE_TEST_OP 1
+#else
+# define TEST_OP 1
+#endif
+
+#if defined(HAVE_TEST_IP) && defined(HAVE_TEST_OP)
+# define TEST_IP_AND_TEST_OP (TEST_IP && TEST_OP)
+#elif defined(HAVE_TEST_IP)
+# define TEST_IP_AND_TEST_OP TEST_IP
+#elif defined(HAVE_TEST_OP)
+# define TEST_IP_AND_TEST_OP TEST_OP
+#else
+# define TEST_IP_AND_TEST_OP 1
+#endif
+
+#if defined(NEED_IP)
+# define HAVE_NEED_IP 1
+#else
+# define NEED_IP(x) ((void) 0)
+# define TEST_IV(x) ((void) 0)
+#endif
+#if defined(NEED_OP)
+# define HAVE_NEED_OP 1
+#else
+# define NEED_OP(x) ((void) 0)
+# define TEST_OV(x) ((void) 0)
+#endif
+
+
+#if defined(HAVE_TEST_IP) || defined(HAVE_NEED_IP)
+# define HAVE_ANY_IP 1
+#endif
+#if defined(HAVE_TEST_OP) || defined(HAVE_NEED_OP)
+# define HAVE_ANY_OP 1
+#endif
+
+
+/* vim:set ts=4 sw=4 et: */
diff --git a/tools/z64compress/src/enc/lzo/lzo1x.h b/tools/z64compress/src/enc/lzo/lzo1x.h
new file mode 100644
index 0000000..a111514
--- /dev/null
+++ b/tools/z64compress/src/enc/lzo/lzo1x.h
@@ -0,0 +1,165 @@
+/* lzo1x.h -- public interface of the LZO1X compression algorithm
+
+ This file is part of the LZO real-time data compression library.
+
+ Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer
+ All Rights Reserved.
+
+ The LZO library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of
+ the License, or (at your option) any later version.
+
+ The LZO library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with the LZO library; see the file COPYING.
+ If not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ Markus F.X.J. Oberhumer
+ <markus@oberhumer.com>
+ http://www.oberhumer.com/opensource/lzo/
+ */
+
+
+#ifndef __LZO1X_H_INCLUDED
+#define __LZO1X_H_INCLUDED 1
+
+#ifndef __LZOCONF_H_INCLUDED
+#include <lzo/lzoconf.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+/* Memory required for the wrkmem parameter.
+ * When the required size is 0, you can also pass a NULL pointer.
+ */
+
+#define LZO1X_MEM_COMPRESS LZO1X_1_MEM_COMPRESS
+#define LZO1X_MEM_DECOMPRESS (0)
+#define LZO1X_MEM_OPTIMIZE (0)
+
+
+/* decompression */
+LZO_EXTERN(int)
+lzo1x_decompress ( const lzo_bytep src, lzo_uint src_len,
+ lzo_bytep dst, lzo_uintp dst_len,
+ lzo_voidp wrkmem /* NOT USED */ );
+
+/* safe decompression with overrun testing */
+LZO_EXTERN(int)
+lzo1x_decompress_safe ( const lzo_bytep src, lzo_uint src_len,
+ lzo_bytep dst, lzo_uintp dst_len,
+ lzo_voidp wrkmem /* NOT USED */ );
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+#define LZO1X_1_MEM_COMPRESS ((lzo_uint32_t) (16384L * lzo_sizeof_dict_t))
+
+LZO_EXTERN(int)
+lzo1x_1_compress ( const lzo_bytep src, lzo_uint src_len,
+ lzo_bytep dst, lzo_uintp dst_len,
+ lzo_voidp wrkmem );
+
+
+/***********************************************************************
+// special compressor versions
+************************************************************************/
+
+/* this version needs only 8 KiB work memory */
+#define LZO1X_1_11_MEM_COMPRESS ((lzo_uint32_t) (2048L * lzo_sizeof_dict_t))
+
+LZO_EXTERN(int)
+lzo1x_1_11_compress ( const lzo_bytep src, lzo_uint src_len,
+ lzo_bytep dst, lzo_uintp dst_len,
+ lzo_voidp wrkmem );
+
+
+/* this version needs 16 KiB work memory */
+#define LZO1X_1_12_MEM_COMPRESS ((lzo_uint32_t) (4096L * lzo_sizeof_dict_t))
+
+LZO_EXTERN(int)
+lzo1x_1_12_compress ( const lzo_bytep src, lzo_uint src_len,
+ lzo_bytep dst, lzo_uintp dst_len,
+ lzo_voidp wrkmem );
+
+
+/* use this version if you need a little more compression speed */
+#define LZO1X_1_15_MEM_COMPRESS ((lzo_uint32_t) (32768L * lzo_sizeof_dict_t))
+
+LZO_EXTERN(int)
+lzo1x_1_15_compress ( const lzo_bytep src, lzo_uint src_len,
+ lzo_bytep dst, lzo_uintp dst_len,
+ lzo_voidp wrkmem );
+
+
+/***********************************************************************
+// better compression ratio at the cost of more memory and time
+************************************************************************/
+
+#define LZO1X_999_MEM_COMPRESS ((lzo_uint32_t) (14 * 16384L * sizeof(short)))
+
+LZO_EXTERN(int)
+lzo1x_999_compress ( const lzo_bytep src, lzo_uint src_len,
+ lzo_bytep dst, lzo_uintp dst_len,
+ lzo_voidp wrkmem );
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+LZO_EXTERN(int)
+lzo1x_999_compress_dict ( const lzo_bytep src, lzo_uint src_len,
+ lzo_bytep dst, lzo_uintp dst_len,
+ lzo_voidp wrkmem,
+ const lzo_bytep dict, lzo_uint dict_len );
+
+LZO_EXTERN(int)
+lzo1x_999_compress_level ( const lzo_bytep src, lzo_uint src_len,
+ lzo_bytep dst, lzo_uintp dst_len,
+ lzo_voidp wrkmem,
+ const lzo_bytep dict, lzo_uint dict_len,
+ lzo_callback_p cb,
+ int compression_level );
+
+LZO_EXTERN(int)
+lzo1x_decompress_dict_safe ( const lzo_bytep src, lzo_uint src_len,
+ lzo_bytep dst, lzo_uintp dst_len,
+ lzo_voidp wrkmem /* NOT USED */,
+ const lzo_bytep dict, lzo_uint dict_len );
+
+
+/***********************************************************************
+// optimize a compressed data block
+************************************************************************/
+
+LZO_EXTERN(int)
+lzo1x_optimize ( lzo_bytep src, lzo_uint src_len,
+ lzo_bytep dst, lzo_uintp dst_len,
+ lzo_voidp wrkmem /* NOT USED */ );
+
+
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* already included */
+
+
+/* vim:set ts=4 sw=4 et: */
diff --git a/tools/z64compress/src/enc/lzo/lzo1x_1.c b/tools/z64compress/src/enc/lzo/lzo1x_1.c
new file mode 100644
index 0000000..a659393
--- /dev/null
+++ b/tools/z64compress/src/enc/lzo/lzo1x_1.c
@@ -0,0 +1,57 @@
+/* lzo1x_1.c -- LZO1X-1 compression
+
+ This file is part of the LZO real-time data compression library.
+
+ Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer
+ All Rights Reserved.
+
+ The LZO library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of
+ the License, or (at your option) any later version.
+
+ The LZO library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with the LZO library; see the file COPYING.
+ If not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ Markus F.X.J. Oberhumer
+ <markus@oberhumer.com>
+ http://www.oberhumer.com/opensource/lzo/
+ */
+
+
+#include "lzo_conf.h"
+#if 1 && defined(UA_GET_LE32)
+#undef LZO_DICT_USE_PTR
+#define LZO_DICT_USE_PTR 0
+#undef lzo_dict_t
+#define lzo_dict_t lzo_uint16_t
+#endif
+
+#define LZO_NEED_DICT_H 1
+#ifndef D_BITS
+#define D_BITS 14
+#endif
+#define D_INDEX1(d,p) d = DM(DMUL(0x21,DX3(p,5,5,6)) >> 5)
+#define D_INDEX2(d,p) d = (d & (D_MASK & 0x7ff)) ^ (D_HIGH | 0x1f)
+#if 1
+#define DINDEX(dv,p) DM(((DMUL(0x1824429d,dv)) >> (32-D_BITS)))
+#else
+#define DINDEX(dv,p) DM((dv) + ((dv) >> (32-D_BITS)))
+#endif
+#include "config1x.h"
+#define LZO_DETERMINISTIC !(LZO_DICT_USE_PTR)
+
+#ifndef DO_COMPRESS
+#define DO_COMPRESS lzo1x_1_compress
+#endif
+
+#include "lzo1x_c.ch"
+
+/* vim:set ts=4 sw=4 et: */
diff --git a/tools/z64compress/src/enc/lzo/lzo1x_9x.c b/tools/z64compress/src/enc/lzo/lzo1x_9x.c
new file mode 100644
index 0000000..39a211e
--- /dev/null
+++ b/tools/z64compress/src/enc/lzo/lzo1x_9x.c
@@ -0,0 +1,867 @@
+/* lzo1x_9x.c -- implementation of the LZO1X-999 compression algorithm
+
+ This file is part of the LZO real-time data compression library.
+
+ Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer
+ All Rights Reserved.
+
+ The LZO library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of
+ the License, or (at your option) any later version.
+
+ The LZO library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with the LZO library; see the file COPYING.
+ If not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ Markus F.X.J. Oberhumer
+ <markus@oberhumer.com>
+ http://www.oberhumer.com/opensource/lzo/
+ */
+
+
+#if !defined(LZO1X) && !defined(LZO1Y) && !defined(LZO1Z)
+# define LZO1X 1
+#endif
+
+#if defined(LZO1X)
+# include "config1x.h"
+#elif defined(LZO1Y)
+# include "config1y.h"
+#elif defined(LZO1Z)
+# include "config1z.h"
+#else
+# error
+#endif
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+#define SWD_N M4_MAX_OFFSET /* size of ring buffer */
+#define SWD_THRESHOLD 1 /* lower limit for match length */
+#define SWD_F 2048 /* upper limit for match length */
+
+#define SWD_BEST_OFF (LZO_MAX3( M2_MAX_LEN, M3_MAX_LEN, M4_MAX_LEN ) + 1)
+
+#if defined(LZO1X)
+# define LZO_COMPRESS_T lzo1x_999_t
+# define lzo_swd_t lzo1x_999_swd_t
+#elif defined(LZO1Y)
+# define LZO_COMPRESS_T lzo1y_999_t
+# define lzo_swd_t lzo1y_999_swd_t
+# define lzo1x_999_compress_internal lzo1y_999_compress_internal
+# define lzo1x_999_compress_dict lzo1y_999_compress_dict
+# define lzo1x_999_compress_level lzo1y_999_compress_level
+# define lzo1x_999_compress lzo1y_999_compress
+#elif defined(LZO1Z)
+# define LZO_COMPRESS_T lzo1z_999_t
+# define lzo_swd_t lzo1z_999_swd_t
+# define lzo1x_999_compress_internal lzo1z_999_compress_internal
+# define lzo1x_999_compress_dict lzo1z_999_compress_dict
+# define lzo1x_999_compress_level lzo1z_999_compress_level
+# define lzo1x_999_compress lzo1z_999_compress
+#else
+# error
+#endif
+
+#if 0
+# define HEAD3(b,p) \
+ ((((((lzo_xint)b[p]<<3)^b[p+1])<<3)^b[p+2]) & (SWD_HSIZE-1))
+#endif
+#if 0 && (LZO_OPT_UNALIGNED32) && (LZO_ABI_LITTLE_ENDIAN)
+# define HEAD3(b,p) \
+ (((* (lzo_uint32_tp) &b[p]) ^ ((* (lzo_uint32_tp) &b[p])>>10)) & (SWD_HSIZE-1))
+#endif
+
+#include "lzo_mchw.ch"
+
+
+/* this is a public functions, but there is no prototype in a header file */
+LZO_EXTERN(int)
+lzo1x_999_compress_internal ( const lzo_bytep in , lzo_uint in_len,
+ lzo_bytep out, lzo_uintp out_len,
+ lzo_voidp wrkmem,
+ const lzo_bytep dict, lzo_uint dict_len,
+ lzo_callback_p cb,
+ int try_lazy_parm,
+ lzo_uint good_length,
+ lzo_uint max_lazy,
+ lzo_uint nice_length,
+ lzo_uint max_chain,
+ lzo_uint32_t flags );
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+static lzo_bytep
+code_match ( LZO_COMPRESS_T *c, lzo_bytep op, lzo_uint m_len, lzo_uint m_off )
+{
+ lzo_uint x_len = m_len;
+ lzo_uint x_off = m_off;
+
+ c->match_bytes += m_len;
+
+#if 0
+/*
+ static lzo_uint last_m_len = 0, last_m_off = 0;
+ static lzo_uint prev_m_off[4];
+ static unsigned prev_m_off_ptr = 0;
+ unsigned i;
+
+ //if (m_len >= 3 && m_len <= M2_MAX_LEN && m_off <= M2_MAX_OFFSET)
+ if (m_len >= 3 && m_len <= M2_MAX_LEN)
+ {
+ //if (m_len == last_m_len && m_off == last_m_off)
+ //printf("last_m_len + last_m_off\n");
+ //else
+ if (m_off == last_m_off)
+ printf("last_m_off\n");
+ else
+ {
+ for (i = 0; i < 4; i++)
+ if (m_off == prev_m_off[i])
+ printf("prev_m_off %u: %5ld\n",i,(long)m_off);
+ }
+ }
+ last_m_len = m_len;
+ last_m_off = prev_m_off[prev_m_off_ptr] = m_off;
+ prev_m_off_ptr = (prev_m_off_ptr + 1) & 3;
+*/
+#endif
+
+ assert(op > c->out);
+ if (m_len == 2)
+ {
+ assert(m_off <= M1_MAX_OFFSET);
+ assert(c->r1_lit > 0); assert(c->r1_lit < 4);
+ m_off -= 1;
+#if defined(LZO1Z)
+ *op++ = LZO_BYTE(M1_MARKER | (m_off >> 6));
+ *op++ = LZO_BYTE(m_off << 2);
+#else
+ *op++ = LZO_BYTE(M1_MARKER | ((m_off & 3) << 2));
+ *op++ = LZO_BYTE(m_off >> 2);
+#endif
+ c->m1a_m++;
+ }
+#if defined(LZO1Z)
+ else if (m_len <= M2_MAX_LEN && (m_off <= M2_MAX_OFFSET || m_off == c->last_m_off))
+#else
+ else if (m_len <= M2_MAX_LEN && m_off <= M2_MAX_OFFSET)
+#endif
+ {
+ assert(m_len >= 3);
+#if defined(LZO1X)
+ m_off -= 1;
+ *op++ = LZO_BYTE(((m_len - 1) << 5) | ((m_off & 7) << 2));
+ *op++ = LZO_BYTE(m_off >> 3);
+ assert(op[-2] >= M2_MARKER);
+#elif defined(LZO1Y)
+ m_off -= 1;
+ *op++ = LZO_BYTE(((m_len + 1) << 4) | ((m_off & 3) << 2));
+ *op++ = LZO_BYTE(m_off >> 2);
+ assert(op[-2] >= M2_MARKER);
+#elif defined(LZO1Z)
+ if (m_off == c->last_m_off)
+ *op++ = LZO_BYTE(((m_len - 1) << 5) | (0x700 >> 6));
+ else
+ {
+ m_off -= 1;
+ *op++ = LZO_BYTE(((m_len - 1) << 5) | (m_off >> 6));
+ *op++ = LZO_BYTE(m_off << 2);
+ }
+#endif
+ c->m2_m++;
+ }
+ else if (m_len == M2_MIN_LEN && m_off <= MX_MAX_OFFSET && c->r1_lit >= 4)
+ {
+ assert(m_len == 3);
+ assert(m_off > M2_MAX_OFFSET);
+ m_off -= 1 + M2_MAX_OFFSET;
+#if defined(LZO1Z)
+ *op++ = LZO_BYTE(M1_MARKER | (m_off >> 6));
+ *op++ = LZO_BYTE(m_off << 2);
+#else
+ *op++ = LZO_BYTE(M1_MARKER | ((m_off & 3) << 2));
+ *op++ = LZO_BYTE(m_off >> 2);
+#endif
+ c->m1b_m++;
+ }
+ else if (m_off <= M3_MAX_OFFSET)
+ {
+ assert(m_len >= 3);
+ m_off -= 1;
+ if (m_len <= M3_MAX_LEN)
+ *op++ = LZO_BYTE(M3_MARKER | (m_len - 2));
+ else
+ {
+ m_len -= M3_MAX_LEN;
+ *op++ = M3_MARKER | 0;
+ while (m_len > 255)
+ {
+ m_len -= 255;
+ *op++ = 0;
+ }
+ assert(m_len > 0);
+ *op++ = LZO_BYTE(m_len);
+ }
+#if defined(LZO1Z)
+ *op++ = LZO_BYTE(m_off >> 6);
+ *op++ = LZO_BYTE(m_off << 2);
+#else
+ *op++ = LZO_BYTE(m_off << 2);
+ *op++ = LZO_BYTE(m_off >> 6);
+#endif
+ c->m3_m++;
+ }
+ else
+ {
+ lzo_uint k;
+
+ assert(m_len >= 3);
+ assert(m_off > 0x4000); assert(m_off <= 0xbfff);
+ m_off -= 0x4000;
+ k = (m_off & 0x4000) >> 11;
+ if (m_len <= M4_MAX_LEN)
+ *op++ = LZO_BYTE(M4_MARKER | k | (m_len - 2));
+ else
+ {
+ m_len -= M4_MAX_LEN;
+ *op++ = LZO_BYTE(M4_MARKER | k | 0);
+ while (m_len > 255)
+ {
+ m_len -= 255;
+ *op++ = 0;
+ }
+ assert(m_len > 0);
+ *op++ = LZO_BYTE(m_len);
+ }
+#if defined(LZO1Z)
+ *op++ = LZO_BYTE(m_off >> 6);
+ *op++ = LZO_BYTE(m_off << 2);
+#else
+ *op++ = LZO_BYTE(m_off << 2);
+ *op++ = LZO_BYTE(m_off >> 6);
+#endif
+ c->m4_m++;
+ }
+
+ c->last_m_len = x_len;
+ c->last_m_off = x_off;
+ return op;
+}
+
+
+static lzo_bytep
+STORE_RUN ( LZO_COMPRESS_T *c, lzo_bytep op, const lzo_bytep ii, lzo_uint t )
+{
+ c->lit_bytes += t;
+
+ if (op == c->out && t <= 238)
+ {
+ *op++ = LZO_BYTE(17 + t);
+ }
+ else if (t <= 3)
+ {
+#if defined(LZO1Z)
+ op[-1] = LZO_BYTE(op[-1] | t);
+#else
+ op[-2] = LZO_BYTE(op[-2] | t);
+#endif
+ c->lit1_r++;
+ }
+ else if (t <= 18)
+ {
+ *op++ = LZO_BYTE(t - 3);
+ c->lit2_r++;
+ }
+ else
+ {
+ lzo_uint tt = t - 18;
+
+ *op++ = 0;
+ while (tt > 255)
+ {
+ tt -= 255;
+ *op++ = 0;
+ }
+ assert(tt > 0);
+ *op++ = LZO_BYTE(tt);
+ c->lit3_r++;
+ }
+ do *op++ = *ii++; while (--t > 0);
+
+ return op;
+}
+
+
+static lzo_bytep
+code_run ( LZO_COMPRESS_T *c, lzo_bytep op, const lzo_bytep ii,
+ lzo_uint lit, lzo_uint m_len )
+{
+ if (lit > 0)
+ {
+ assert(m_len >= 2);
+ op = STORE_RUN(c,op,ii,lit);
+ c->r1_m_len = m_len;
+ c->r1_lit = lit;
+ }
+ else
+ {
+ assert(m_len >= 3);
+ c->r1_m_len = 0;
+ c->r1_lit = 0;
+ }
+
+ return op;
+}
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+static lzo_uint
+len_of_coded_match ( lzo_uint m_len, lzo_uint m_off, lzo_uint lit )
+{
+ lzo_uint n = 4;
+
+ if (m_len < 2)
+ return 0;
+ if (m_len == 2)
+ return (m_off <= M1_MAX_OFFSET && lit > 0 && lit < 4) ? 2 : 0;
+ if (m_len <= M2_MAX_LEN && m_off <= M2_MAX_OFFSET)
+ return 2;
+ if (m_len == M2_MIN_LEN && m_off <= MX_MAX_OFFSET && lit >= 4)
+ return 2;
+ if (m_off <= M3_MAX_OFFSET)
+ {
+ if (m_len <= M3_MAX_LEN)
+ return 3;
+ m_len -= M3_MAX_LEN;
+ while (m_len > 255)
+ {
+ m_len -= 255;
+ n++;
+ }
+ return n;
+ }
+ if (m_off <= M4_MAX_OFFSET)
+ {
+ if (m_len <= M4_MAX_LEN)
+ return 3;
+ m_len -= M4_MAX_LEN;
+ while (m_len > 255)
+ {
+ m_len -= 255;
+ n++;
+ }
+ return n;
+ }
+ return 0;
+}
+
+
+static lzo_uint
+min_gain(lzo_uint ahead, lzo_uint lit1, lzo_uint lit2, lzo_uint l1, lzo_uint l2, lzo_uint l3)
+{
+ lzo_uint lazy_match_min_gain;
+
+ assert (ahead >= 1);
+ lazy_match_min_gain = ahead;
+
+#if 0
+ if (l3)
+ lit2 -= ahead;
+#endif
+
+ if (lit1 <= 3)
+ lazy_match_min_gain += (lit2 <= 3) ? 0 : 2;
+ else if (lit1 <= 18)
+ lazy_match_min_gain += (lit2 <= 18) ? 0 : 1;
+
+ lazy_match_min_gain += (l2 - l1) * 2;
+ if (l3)
+ lazy_match_min_gain -= (ahead - l3) * 2;
+
+ if ((lzo_int) lazy_match_min_gain < 0)
+ lazy_match_min_gain = 0;
+
+#if 0
+ if (l1 == 2)
+ if (lazy_match_min_gain == 0)
+ lazy_match_min_gain = 1;
+#endif
+
+ return lazy_match_min_gain;
+}
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+#if !defined(NDEBUG)
+static
+void assert_match( const lzo_swd_p swd, lzo_uint m_len, lzo_uint m_off )
+{
+ const LZO_COMPRESS_T *c = swd->c;
+ lzo_uint d_off;
+
+ assert(m_len >= 2);
+ if (m_off <= (lzo_uint) (c->bp - c->in))
+ {
+ assert(c->bp - m_off + m_len < c->ip);
+ assert(lzo_memcmp(c->bp, c->bp - m_off, m_len) == 0);
+ }
+ else
+ {
+ assert(swd->dict != NULL);
+ d_off = m_off - (lzo_uint) (c->bp - c->in);
+ assert(d_off <= swd->dict_len);
+ if (m_len > d_off)
+ {
+ assert(lzo_memcmp(c->bp, swd->dict_end - d_off, d_off) == 0);
+ assert(c->in + m_len - d_off < c->ip);
+ assert(lzo_memcmp(c->bp + d_off, c->in, m_len - d_off) == 0);
+ }
+ else
+ {
+ assert(lzo_memcmp(c->bp, swd->dict_end - d_off, m_len) == 0);
+ }
+ }
+}
+#else
+# define assert_match(a,b,c) ((void)0)
+#endif
+
+
+#if defined(SWD_BEST_OFF)
+
+static void
+better_match ( const lzo_swd_p swd, lzo_uint *m_len, lzo_uint *m_off )
+{
+#if defined(LZO1Z)
+ const LZO_COMPRESS_T *c = swd->c;
+#endif
+
+ if (*m_len <= M2_MIN_LEN)
+ return;
+#if defined(LZO1Z)
+ if (*m_off == c->last_m_off && *m_len <= M2_MAX_LEN)
+ return;
+#if 1
+ if (*m_len >= M2_MIN_LEN + 1 && *m_len <= M2_MAX_LEN + 1 &&
+ c->last_m_off && swd->best_off[*m_len-1] == c->last_m_off)
+ {
+ *m_len = *m_len - 1;
+ *m_off = swd->best_off[*m_len];
+ return;
+ }
+#endif
+#endif
+
+ if (*m_off <= M2_MAX_OFFSET)
+ return;
+
+#if 1
+ /* M3/M4 -> M2 */
+ if (*m_off > M2_MAX_OFFSET &&
+ *m_len >= M2_MIN_LEN + 1 && *m_len <= M2_MAX_LEN + 1 &&
+ swd->best_off[*m_len-1] && swd->best_off[*m_len-1] <= M2_MAX_OFFSET)
+ {
+ *m_len = *m_len - 1;
+ *m_off = swd->best_off[*m_len];
+ return;
+ }
+#endif
+
+#if 1
+ /* M4 -> M2 */
+ if (*m_off > M3_MAX_OFFSET &&
+ *m_len >= M4_MAX_LEN + 1 && *m_len <= M2_MAX_LEN + 2 &&
+ swd->best_off[*m_len-2] && swd->best_off[*m_len-2] <= M2_MAX_OFFSET)
+ {
+ *m_len = *m_len - 2;
+ *m_off = swd->best_off[*m_len];
+ return;
+ }
+#endif
+
+#if 1
+ /* M4 -> M3 */
+ if (*m_off > M3_MAX_OFFSET &&
+ *m_len >= M4_MAX_LEN + 1 && *m_len <= M3_MAX_LEN + 1 &&
+ swd->best_off[*m_len-1] && swd->best_off[*m_len-1] <= M3_MAX_OFFSET)
+ {
+ *m_len = *m_len - 1;
+ *m_off = swd->best_off[*m_len];
+ }
+#endif
+}
+
+#endif
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+LZO_PUBLIC(int)
+lzo1x_999_compress_internal ( const lzo_bytep in , lzo_uint in_len,
+ lzo_bytep out, lzo_uintp out_len,
+ lzo_voidp wrkmem,
+ const lzo_bytep dict, lzo_uint dict_len,
+ lzo_callback_p cb,
+ int try_lazy_parm,
+ lzo_uint good_length,
+ lzo_uint max_lazy,
+ lzo_uint nice_length,
+ lzo_uint max_chain,
+ lzo_uint32_t flags )
+{
+ lzo_bytep op;
+ const lzo_bytep ii;
+ lzo_uint lit;
+ lzo_uint m_len, m_off;
+ LZO_COMPRESS_T cc;
+ LZO_COMPRESS_T * const c = &cc;
+ lzo_swd_p const swd = (lzo_swd_p) wrkmem;
+ lzo_uint try_lazy;
+ int r;
+
+ /* sanity check */
+#if defined(LZO1X)
+ LZO_COMPILE_TIME_ASSERT(LZO1X_999_MEM_COMPRESS >= SIZEOF_LZO_SWD_T)
+#elif defined(LZO1Y)
+ LZO_COMPILE_TIME_ASSERT(LZO1Y_999_MEM_COMPRESS >= SIZEOF_LZO_SWD_T)
+#elif defined(LZO1Z)
+ LZO_COMPILE_TIME_ASSERT(LZO1Z_999_MEM_COMPRESS >= SIZEOF_LZO_SWD_T)
+#else
+# error
+#endif
+
+/* setup parameter defaults */
+ /* number of lazy match tries */
+ try_lazy = (lzo_uint) try_lazy_parm;
+ if (try_lazy_parm < 0)
+ try_lazy = 1;
+ /* reduce lazy match search if we already have a match with this length */
+ if (good_length == 0)
+ good_length = 32;
+ /* do not try a lazy match if we already have a match with this length */
+ if (max_lazy == 0)
+ max_lazy = 32;
+ /* stop searching for longer matches than this one */
+ if (nice_length == 0)
+ nice_length = 0;
+ /* don't search more positions than this */
+ if (max_chain == 0)
+ max_chain = SWD_MAX_CHAIN;
+
+ c->init = 0;
+ c->ip = c->in = in;
+ c->in_end = in + in_len;
+ c->out = out;
+ c->cb = cb;
+ c->m1a_m = c->m1b_m = c->m2_m = c->m3_m = c->m4_m = 0;
+ c->lit1_r = c->lit2_r = c->lit3_r = 0;
+
+ op = out;
+ ii = c->ip; /* point to start of literal run */
+ lit = 0;
+ c->r1_lit = c->r1_m_len = 0;
+
+ r = init_match(c,swd,dict,dict_len,flags);
+ if (r != 0)
+ return r;
+ if (max_chain > 0)
+ swd->max_chain = max_chain;
+ if (nice_length > 0)
+ swd->nice_length = nice_length;
+
+ r = find_match(c,swd,0,0);
+ if (r != 0)
+ return r;
+ while (c->look > 0)
+ {
+ lzo_uint ahead;
+ lzo_uint max_ahead;
+ lzo_uint l1, l2, l3;
+
+ c->codesize = pd(op, out);
+
+ m_len = c->m_len;
+ m_off = c->m_off;
+
+ assert(c->bp == c->ip - c->look);
+ assert(c->bp >= in);
+ if (lit == 0)
+ ii = c->bp;
+ assert(ii + lit == c->bp);
+ assert(swd->b_char == *(c->bp));
+
+ if ( m_len < 2 ||
+ (m_len == 2 && (m_off > M1_MAX_OFFSET || lit == 0 || lit >= 4)) ||
+#if 1
+ /* Do not accept this match for compressed-data compatibility
+ * with LZO v1.01 and before
+ * [ might be a problem for decompress() and optimize() ]
+ */
+ (m_len == 2 && op == out) ||
+#endif
+ (op == out && lit == 0))
+ {
+ /* a literal */
+ m_len = 0;
+ }
+ else if (m_len == M2_MIN_LEN)
+ {
+ /* compression ratio improves if we code a literal in some cases */
+ if (m_off > MX_MAX_OFFSET && lit >= 4)
+ m_len = 0;
+ }
+
+ if (m_len == 0)
+ {
+ /* a literal */
+ lit++;
+ swd->max_chain = max_chain;
+ r = find_match(c,swd,1,0);
+ assert(r == 0); LZO_UNUSED(r);
+ continue;
+ }
+
+ /* a match */
+#if defined(SWD_BEST_OFF)
+ if (swd->use_best_off)
+ better_match(swd,&m_len,&m_off);
+#endif
+ assert_match(swd,m_len,m_off);
+
+
+ /* shall we try a lazy match ? */
+ ahead = 0;
+ if (try_lazy == 0 || m_len >= max_lazy)
+ {
+ /* no */
+ l1 = 0;
+ max_ahead = 0;
+ }
+ else
+ {
+ /* yes, try a lazy match */
+ l1 = len_of_coded_match(m_len,m_off,lit);
+ assert(l1 > 0);
+#if 1
+ max_ahead = LZO_MIN(try_lazy, l1 - 1);
+#else
+ max_ahead = LZO_MIN3(try_lazy, l1, m_len - 1);
+#endif
+ }
+
+
+ while (ahead < max_ahead && c->look > m_len)
+ {
+ lzo_uint lazy_match_min_gain;
+
+ if (m_len >= good_length)
+ swd->max_chain = max_chain >> 2;
+ else
+ swd->max_chain = max_chain;
+ r = find_match(c,swd,1,0);
+ ahead++;
+
+ assert(r == 0); LZO_UNUSED(r);
+ assert(c->look > 0);
+ assert(ii + lit + ahead == c->bp);
+
+#if defined(LZO1Z)
+ if (m_off == c->last_m_off && c->m_off != c->last_m_off)
+ if (m_len >= M2_MIN_LEN && m_len <= M2_MAX_LEN)
+ c->m_len = 0;
+#endif
+ if (c->m_len < m_len)
+ continue;
+#if 1
+ if (c->m_len == m_len && c->m_off >= m_off)
+ continue;
+#endif
+#if defined(SWD_BEST_OFF)
+ if (swd->use_best_off)
+ better_match(swd,&c->m_len,&c->m_off);
+#endif
+ l2 = len_of_coded_match(c->m_len,c->m_off,lit+ahead);
+ if (l2 == 0)
+ continue;
+#if 0
+ if (c->m_len == m_len && l2 >= l1)
+ continue;
+#endif
+
+
+#if 1
+ /* compressed-data compatibility [see above] */
+ l3 = (op == out) ? 0 : len_of_coded_match(ahead,m_off,lit);
+#else
+ l3 = len_of_coded_match(ahead,m_off,lit);
+#endif
+
+ lazy_match_min_gain = min_gain(ahead,lit,lit+ahead,l1,l2,l3);
+ if (c->m_len >= m_len + lazy_match_min_gain)
+ {
+ c->lazy++;
+ assert_match(swd,c->m_len,c->m_off);
+
+ if (l3)
+ {
+ /* code previous run */
+ op = code_run(c,op,ii,lit,ahead);
+ lit = 0;
+ /* code shortened match */
+ op = code_match(c,op,ahead,m_off);
+ }
+ else
+ {
+ lit += ahead;
+ assert(ii + lit == c->bp);
+ }
+ goto lazy_match_done;
+ }
+ }
+
+
+ assert(ii + lit + ahead == c->bp);
+
+ /* 1 - code run */
+ op = code_run(c,op,ii,lit,m_len);
+ lit = 0;
+
+ /* 2 - code match */
+ op = code_match(c,op,m_len,m_off);
+ swd->max_chain = max_chain;
+ r = find_match(c,swd,m_len,1+ahead);
+ assert(r == 0); LZO_UNUSED(r);
+
+lazy_match_done: ;
+ }
+
+
+ /* store final run */
+ if (lit > 0)
+ op = STORE_RUN(c,op,ii,lit);
+
+#if defined(LZO_EOF_CODE)
+ *op++ = M4_MARKER | 1;
+ *op++ = 0;
+ *op++ = 0;
+#endif
+
+ c->codesize = pd(op, out);
+ assert(c->textsize == in_len);
+
+ *out_len = pd(op, out);
+
+ if (c->cb && c->cb->nprogress)
+ (*c->cb->nprogress)(c->cb, c->textsize, c->codesize, 0);
+
+#if 0
+ printf("%ld %ld -> %ld %ld: %ld %ld %ld %ld %ld %ld: %ld %ld %ld %ld\n",
+ (long) c->textsize, (long) in_len, (long) c->codesize,
+ c->match_bytes, c->m1a_m, c->m1b_m, c->m2_m, c->m3_m, c->m4_m,
+ c->lit_bytes, c->lit1_r, c->lit2_r, c->lit3_r, c->lazy);
+#endif
+ assert(c->lit_bytes + c->match_bytes == in_len);
+
+ return LZO_E_OK;
+}
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+LZO_PUBLIC(int)
+lzo1x_999_compress_level ( const lzo_bytep in , lzo_uint in_len,
+ lzo_bytep out, lzo_uintp out_len,
+ lzo_voidp wrkmem,
+ const lzo_bytep dict, lzo_uint dict_len,
+ lzo_callback_p cb,
+ int compression_level )
+{
+ static const struct
+ {
+ int try_lazy_parm;
+ lzo_uint good_length;
+ lzo_uint max_lazy;
+ lzo_uint nice_length;
+ lzo_uint max_chain;
+ lzo_uint32_t flags;
+ } c[9] = {
+ /* faster compression */
+ { 0, 0, 0, 8, 4, 0 },
+ { 0, 0, 0, 16, 8, 0 },
+ { 0, 0, 0, 32, 16, 0 },
+ { 1, 4, 4, 16, 16, 0 },
+ { 1, 8, 16, 32, 32, 0 },
+ { 1, 8, 16, 128, 128, 0 },
+ { 2, 8, 32, 128, 256, 0 },
+ { 2, 32, 128, SWD_F, 2048, 1 },
+ { 2, SWD_F, SWD_F, SWD_F, 4096, 1 }
+ /* max. compression */
+ };
+
+ if (compression_level < 1 || compression_level > 9)
+ return LZO_E_ERROR;
+
+ compression_level -= 1;
+ return lzo1x_999_compress_internal(in, in_len, out, out_len, wrkmem,
+ dict, dict_len, cb,
+ c[compression_level].try_lazy_parm,
+ c[compression_level].good_length,
+ c[compression_level].max_lazy,
+#if 0
+ c[compression_level].nice_length,
+#else
+ 0,
+#endif
+ c[compression_level].max_chain,
+ c[compression_level].flags);
+}
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+LZO_PUBLIC(int)
+lzo1x_999_compress_dict ( const lzo_bytep in , lzo_uint in_len,
+ lzo_bytep out, lzo_uintp out_len,
+ lzo_voidp wrkmem,
+ const lzo_bytep dict, lzo_uint dict_len )
+{
+ return lzo1x_999_compress_level(in, in_len, out, out_len, wrkmem,
+ dict, dict_len, 0, 8);
+}
+
+LZO_PUBLIC(int)
+lzo1x_999_compress ( const lzo_bytep in , lzo_uint in_len,
+ lzo_bytep out, lzo_uintp out_len,
+ lzo_voidp wrkmem )
+{
+ return lzo1x_999_compress_level(in, in_len, out, out_len, wrkmem,
+ NULL, 0, (lzo_callback_p) 0, 9/*ootntsc10: 9 saves 2580 bytes over 8*/);
+}
+
+
+/* vim:set ts=4 sw=4 et: */
diff --git a/tools/z64compress/src/enc/lzo/lzo1x_c.ch b/tools/z64compress/src/enc/lzo/lzo1x_c.ch
new file mode 100644
index 0000000..be19b2b
--- /dev/null
+++ b/tools/z64compress/src/enc/lzo/lzo1x_c.ch
@@ -0,0 +1,403 @@
+/* lzo1x_c.ch -- implementation of the LZO1[XY]-1 compression algorithm
+
+ This file is part of the LZO real-time data compression library.
+
+ Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer
+ All Rights Reserved.
+
+ The LZO library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of
+ the License, or (at your option) any later version.
+
+ The LZO library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with the LZO library; see the file COPYING.
+ If not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ Markus F.X.J. Oberhumer
+ <markus@oberhumer.com>
+ http://www.oberhumer.com/opensource/lzo/
+ */
+
+
+
+#if 1 && defined(DO_COMPRESS) && !defined(do_compress)
+ /* choose a unique name to better help PGO optimizations */
+# define do_compress LZO_PP_ECONCAT2(DO_COMPRESS,_core)
+#endif
+
+
+/***********************************************************************
+// compress a block of data.
+************************************************************************/
+
+static __lzo_noinline lzo_uint
+do_compress ( const lzo_bytep in , lzo_uint in_len,
+ lzo_bytep out, lzo_uintp out_len,
+ lzo_uint ti, lzo_voidp wrkmem)
+{
+ const lzo_bytep ip;
+ lzo_bytep op;
+ const lzo_bytep const in_end = in + in_len;
+ const lzo_bytep const ip_end = in + in_len - 20;
+ const lzo_bytep ii;
+ lzo_dict_p const dict = (lzo_dict_p) wrkmem;
+
+ op = out;
+ ip = in;
+ ii = ip;
+
+ ip += ti < 4 ? 4 - ti : 0;
+ for (;;)
+ {
+ const lzo_bytep m_pos;
+#if !(LZO_DETERMINISTIC)
+ LZO_DEFINE_UNINITIALIZED_VAR(lzo_uint, m_off, 0);
+ lzo_uint m_len;
+ lzo_uint dindex;
+next:
+ if __lzo_unlikely(ip >= ip_end)
+ break;
+ DINDEX1(dindex,ip);
+ GINDEX(m_pos,m_off,dict,dindex,in);
+ if (LZO_CHECK_MPOS_NON_DET(m_pos,m_off,in,ip,M4_MAX_OFFSET))
+ goto literal;
+#if 1
+ if (m_off <= M2_MAX_OFFSET || m_pos[3] == ip[3])
+ goto try_match;
+ DINDEX2(dindex,ip);
+#endif
+ GINDEX(m_pos,m_off,dict,dindex,in);
+ if (LZO_CHECK_MPOS_NON_DET(m_pos,m_off,in,ip,M4_MAX_OFFSET))
+ goto literal;
+ if (m_off <= M2_MAX_OFFSET || m_pos[3] == ip[3])
+ goto try_match;
+ goto literal;
+
+try_match:
+#if (LZO_OPT_UNALIGNED32)
+ if (UA_GET_NE32(m_pos) != UA_GET_NE32(ip))
+#else
+ if (m_pos[0] != ip[0] || m_pos[1] != ip[1] || m_pos[2] != ip[2] || m_pos[3] != ip[3])
+#endif
+ {
+ /* a literal */
+literal:
+ UPDATE_I(dict,0,dindex,ip,in);
+ ip += 1 + ((ip - ii) >> 5);
+ continue;
+ }
+/*match:*/
+ UPDATE_I(dict,0,dindex,ip,in);
+#else
+ lzo_uint m_off;
+ lzo_uint m_len;
+ {
+ lzo_uint32_t dv;
+ lzo_uint dindex;
+literal:
+ ip += 1 + ((ip - ii) >> 5);
+next:
+ if __lzo_unlikely(ip >= ip_end)
+ break;
+ dv = UA_GET_LE32(ip);
+ dindex = DINDEX(dv,ip);
+ GINDEX(m_off,m_pos,in+dict,dindex,in);
+ UPDATE_I(dict,0,dindex,ip,in);
+ if __lzo_unlikely(dv != UA_GET_LE32(m_pos))
+ goto literal;
+ }
+#endif
+
+ /* a match */
+
+ ii -= ti; ti = 0;
+ {
+ lzo_uint t = pd(ip,ii);
+ if (t != 0)
+ {
+ if (t <= 3)
+ {
+ op[-2] = LZO_BYTE(op[-2] | t);
+#if (LZO_OPT_UNALIGNED32)
+ UA_COPY4(op, ii);
+ op += t;
+#else
+ { do *op++ = *ii++; while (--t > 0); }
+#endif
+ }
+#if (LZO_OPT_UNALIGNED32) || (LZO_OPT_UNALIGNED64)
+ else if (t <= 16)
+ {
+ *op++ = LZO_BYTE(t - 3);
+ UA_COPY8(op, ii);
+ UA_COPY8(op+8, ii+8);
+ op += t;
+ }
+#endif
+ else
+ {
+ if (t <= 18)
+ *op++ = LZO_BYTE(t - 3);
+ else
+ {
+ lzo_uint tt = t - 18;
+ *op++ = 0;
+ while __lzo_unlikely(tt > 255)
+ {
+ tt -= 255;
+ UA_SET1(op, 0);
+ op++;
+ }
+ assert(tt > 0);
+ *op++ = LZO_BYTE(tt);
+ }
+#if (LZO_OPT_UNALIGNED32) || (LZO_OPT_UNALIGNED64)
+ do {
+ UA_COPY8(op, ii);
+ UA_COPY8(op+8, ii+8);
+ op += 16; ii += 16; t -= 16;
+ } while (t >= 16); if (t > 0)
+#endif
+ { do *op++ = *ii++; while (--t > 0); }
+ }
+ }
+ }
+ m_len = 4;
+ {
+#if (LZO_OPT_UNALIGNED64)
+ lzo_uint64_t v;
+ v = UA_GET_NE64(ip + m_len) ^ UA_GET_NE64(m_pos + m_len);
+ if __lzo_unlikely(v == 0) {
+ do {
+ m_len += 8;
+ v = UA_GET_NE64(ip + m_len) ^ UA_GET_NE64(m_pos + m_len);
+ if __lzo_unlikely(ip + m_len >= ip_end)
+ goto m_len_done;
+ } while (v == 0);
+ }
+#if (LZO_ABI_BIG_ENDIAN) && defined(lzo_bitops_ctlz64)
+ m_len += lzo_bitops_ctlz64(v) / CHAR_BIT;
+#elif (LZO_ABI_BIG_ENDIAN)
+ if ((v >> (64 - CHAR_BIT)) == 0) do {
+ v <<= CHAR_BIT;
+ m_len += 1;
+ } while ((v >> (64 - CHAR_BIT)) == 0);
+#elif (LZO_ABI_LITTLE_ENDIAN) && defined(lzo_bitops_cttz64)
+ m_len += lzo_bitops_cttz64(v) / CHAR_BIT;
+#elif (LZO_ABI_LITTLE_ENDIAN)
+ if ((v & UCHAR_MAX) == 0) do {
+ v >>= CHAR_BIT;
+ m_len += 1;
+ } while ((v & UCHAR_MAX) == 0);
+#else
+ if (ip[m_len] == m_pos[m_len]) do {
+ m_len += 1;
+ } while (ip[m_len] == m_pos[m_len]);
+#endif
+#elif (LZO_OPT_UNALIGNED32)
+ lzo_uint32_t v;
+ v = UA_GET_NE32(ip + m_len) ^ UA_GET_NE32(m_pos + m_len);
+ if __lzo_unlikely(v == 0) {
+ do {
+ m_len += 4;
+ v = UA_GET_NE32(ip + m_len) ^ UA_GET_NE32(m_pos + m_len);
+ if (v != 0)
+ break;
+ m_len += 4;
+ v = UA_GET_NE32(ip + m_len) ^ UA_GET_NE32(m_pos + m_len);
+ if __lzo_unlikely(ip + m_len >= ip_end)
+ goto m_len_done;
+ } while (v == 0);
+ }
+#if (LZO_ABI_BIG_ENDIAN) && defined(lzo_bitops_ctlz32)
+ m_len += lzo_bitops_ctlz32(v) / CHAR_BIT;
+#elif (LZO_ABI_BIG_ENDIAN)
+ if ((v >> (32 - CHAR_BIT)) == 0) do {
+ v <<= CHAR_BIT;
+ m_len += 1;
+ } while ((v >> (32 - CHAR_BIT)) == 0);
+#elif (LZO_ABI_LITTLE_ENDIAN) && defined(lzo_bitops_cttz32)
+ m_len += lzo_bitops_cttz32(v) / CHAR_BIT;
+#elif (LZO_ABI_LITTLE_ENDIAN)
+ if ((v & UCHAR_MAX) == 0) do {
+ v >>= CHAR_BIT;
+ m_len += 1;
+ } while ((v & UCHAR_MAX) == 0);
+#else
+ if (ip[m_len] == m_pos[m_len]) do {
+ m_len += 1;
+ } while (ip[m_len] == m_pos[m_len]);
+#endif
+#else
+ if __lzo_unlikely(ip[m_len] == m_pos[m_len]) {
+ do {
+ m_len += 1;
+ if (ip[m_len] != m_pos[m_len])
+ break;
+ m_len += 1;
+ if (ip[m_len] != m_pos[m_len])
+ break;
+ m_len += 1;
+ if (ip[m_len] != m_pos[m_len])
+ break;
+ m_len += 1;
+ if (ip[m_len] != m_pos[m_len])
+ break;
+ m_len += 1;
+ if (ip[m_len] != m_pos[m_len])
+ break;
+ m_len += 1;
+ if (ip[m_len] != m_pos[m_len])
+ break;
+ m_len += 1;
+ if (ip[m_len] != m_pos[m_len])
+ break;
+ m_len += 1;
+ if __lzo_unlikely(ip + m_len >= ip_end)
+ goto m_len_done;
+ } while (ip[m_len] == m_pos[m_len]);
+ }
+#endif
+ }
+m_len_done:
+ m_off = pd(ip,m_pos);
+ ip += m_len;
+ ii = ip;
+ if (m_len <= M2_MAX_LEN && m_off <= M2_MAX_OFFSET)
+ {
+ m_off -= 1;
+#if defined(LZO1X)
+ *op++ = LZO_BYTE(((m_len - 1) << 5) | ((m_off & 7) << 2));
+ *op++ = LZO_BYTE(m_off >> 3);
+#elif defined(LZO1Y)
+ *op++ = LZO_BYTE(((m_len + 1) << 4) | ((m_off & 3) << 2));
+ *op++ = LZO_BYTE(m_off >> 2);
+#endif
+ }
+ else if (m_off <= M3_MAX_OFFSET)
+ {
+ m_off -= 1;
+ if (m_len <= M3_MAX_LEN)
+ *op++ = LZO_BYTE(M3_MARKER | (m_len - 2));
+ else
+ {
+ m_len -= M3_MAX_LEN;
+ *op++ = M3_MARKER | 0;
+ while __lzo_unlikely(m_len > 255)
+ {
+ m_len -= 255;
+ UA_SET1(op, 0);
+ op++;
+ }
+ *op++ = LZO_BYTE(m_len);
+ }
+ *op++ = LZO_BYTE(m_off << 2);
+ *op++ = LZO_BYTE(m_off >> 6);
+ }
+ else
+ {
+ m_off -= 0x4000;
+ if (m_len <= M4_MAX_LEN)
+ *op++ = LZO_BYTE(M4_MARKER | ((m_off >> 11) & 8) | (m_len - 2));
+ else
+ {
+ m_len -= M4_MAX_LEN;
+ *op++ = LZO_BYTE(M4_MARKER | ((m_off >> 11) & 8));
+ while __lzo_unlikely(m_len > 255)
+ {
+ m_len -= 255;
+ UA_SET1(op, 0);
+ op++;
+ }
+ *op++ = LZO_BYTE(m_len);
+ }
+ *op++ = LZO_BYTE(m_off << 2);
+ *op++ = LZO_BYTE(m_off >> 6);
+ }
+ goto next;
+ }
+
+ *out_len = pd(op, out);
+ return pd(in_end,ii-ti);
+}
+
+
+/***********************************************************************
+// public entry point
+************************************************************************/
+
+LZO_PUBLIC(int)
+DO_COMPRESS ( const lzo_bytep in , lzo_uint in_len,
+ lzo_bytep out, lzo_uintp out_len,
+ lzo_voidp wrkmem )
+{
+ const lzo_bytep ip = in;
+ lzo_bytep op = out;
+ lzo_uint l = in_len;
+ lzo_uint t = 0;
+
+ while (l > 20)
+ {
+ lzo_uint ll = l;
+ lzo_uintptr_t ll_end;
+#if 0 || (LZO_DETERMINISTIC)
+ ll = LZO_MIN(ll, 49152);
+#endif
+ ll_end = (lzo_uintptr_t)ip + ll;
+ if ((ll_end + ((t + ll) >> 5)) <= ll_end || (const lzo_bytep)(ll_end + ((t + ll) >> 5)) <= ip + ll)
+ break;
+#if (LZO_DETERMINISTIC)
+ lzo_memset(wrkmem, 0, ((lzo_uint)1 << D_BITS) * sizeof(lzo_dict_t));
+#endif
+ t = do_compress(ip,ll,op,out_len,t,wrkmem);
+ ip += ll;
+ op += *out_len;
+ l -= ll;
+ }
+ t += l;
+
+ if (t > 0)
+ {
+ const lzo_bytep ii = in + in_len - t;
+
+ if (op == out && t <= 238)
+ *op++ = LZO_BYTE(17 + t);
+ else if (t <= 3)
+ op[-2] = LZO_BYTE(op[-2] | t);
+ else if (t <= 18)
+ *op++ = LZO_BYTE(t - 3);
+ else
+ {
+ lzo_uint tt = t - 18;
+
+ *op++ = 0;
+ while (tt > 255)
+ {
+ tt -= 255;
+ UA_SET1(op, 0);
+ op++;
+ }
+ assert(tt > 0);
+ *op++ = LZO_BYTE(tt);
+ }
+ UA_COPYN(op, ii, t);
+ op += t;
+ }
+
+ *op++ = M4_MARKER | 1;
+ *op++ = 0;
+ *op++ = 0;
+
+ *out_len = pd(op, out);
+ return LZO_E_OK;
+}
+
+
+/* vim:set ts=4 sw=4 et: */
diff --git a/tools/z64compress/src/enc/lzo/lzo1x_d.ch b/tools/z64compress/src/enc/lzo/lzo1x_d.ch
new file mode 100644
index 0000000..b6c6d99
--- /dev/null
+++ b/tools/z64compress/src/enc/lzo/lzo1x_d.ch
@@ -0,0 +1,475 @@
+/* lzo1x_d.ch -- implementation of the LZO1X decompression algorithm
+
+ This file is part of the LZO real-time data compression library.
+
+ Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer
+ All Rights Reserved.
+
+ The LZO library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of
+ the License, or (at your option) any later version.
+
+ The LZO library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with the LZO library; see the file COPYING.
+ If not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ Markus F.X.J. Oberhumer
+ <markus@oberhumer.com>
+ http://www.oberhumer.com/opensource/lzo/
+ */
+
+
+#include "lzo1_d.ch"
+
+
+/***********************************************************************
+// decompress a block of data.
+************************************************************************/
+
+#if defined(DO_DECOMPRESS)
+LZO_PUBLIC(int)
+DO_DECOMPRESS ( const lzo_bytep in , lzo_uint in_len,
+ lzo_bytep out, lzo_uintp out_len,
+ lzo_voidp wrkmem )
+#endif
+{
+ lzo_bytep op;
+ const lzo_bytep ip;
+ lzo_uint t;
+#if defined(COPY_DICT)
+ lzo_uint m_off;
+ const lzo_bytep dict_end;
+#else
+ const lzo_bytep m_pos;
+#endif
+
+ const lzo_bytep const ip_end = in + in_len;
+#if defined(HAVE_ANY_OP)
+ lzo_bytep const op_end = out + *out_len;
+#endif
+#if defined(LZO1Z)
+ lzo_uint last_m_off = 0;
+#endif
+
+ LZO_UNUSED(wrkmem);
+
+#if defined(COPY_DICT)
+ if (dict)
+ {
+ if (dict_len > M4_MAX_OFFSET)
+ {
+ dict += dict_len - M4_MAX_OFFSET;
+ dict_len = M4_MAX_OFFSET;
+ }
+ dict_end = dict + dict_len;
+ }
+ else
+ {
+ dict_len = 0;
+ dict_end = NULL;
+ }
+#endif /* COPY_DICT */
+
+ *out_len = 0;
+
+ op = out;
+ ip = in;
+
+ NEED_IP(1);
+ if (*ip > 17)
+ {
+ t = *ip++ - 17;
+ if (t < 4)
+ goto match_next;
+ assert(t > 0); NEED_OP(t); NEED_IP(t+3);
+ do *op++ = *ip++; while (--t > 0);
+ goto first_literal_run;
+ }
+
+ for (;;)
+ {
+ NEED_IP(3);
+ t = *ip++;
+ if (t >= 16)
+ goto match;
+ /* a literal run */
+ if (t == 0)
+ {
+ while (*ip == 0)
+ {
+ t += 255;
+ ip++;
+ TEST_IV(t);
+ NEED_IP(1);
+ }
+ t += 15 + *ip++;
+ }
+ /* copy literals */
+ assert(t > 0); NEED_OP(t+3); NEED_IP(t+6);
+#if (LZO_OPT_UNALIGNED64) && (LZO_OPT_UNALIGNED32)
+ t += 3;
+ if (t >= 8) do
+ {
+ UA_COPY8(op,ip);
+ op += 8; ip += 8; t -= 8;
+ } while (t >= 8);
+ if (t >= 4)
+ {
+ UA_COPY4(op,ip);
+ op += 4; ip += 4; t -= 4;
+ }
+ if (t > 0)
+ {
+ *op++ = *ip++;
+ if (t > 1) { *op++ = *ip++; if (t > 2) { *op++ = *ip++; } }
+ }
+#elif (LZO_OPT_UNALIGNED32) || (LZO_ALIGNED_OK_4)
+#if !(LZO_OPT_UNALIGNED32)
+ if (PTR_ALIGNED2_4(op,ip))
+ {
+#endif
+ UA_COPY4(op,ip);
+ op += 4; ip += 4;
+ if (--t > 0)
+ {
+ if (t >= 4)
+ {
+ do {
+ UA_COPY4(op,ip);
+ op += 4; ip += 4; t -= 4;
+ } while (t >= 4);
+ if (t > 0) do *op++ = *ip++; while (--t > 0);
+ }
+ else
+ do *op++ = *ip++; while (--t > 0);
+ }
+#if !(LZO_OPT_UNALIGNED32)
+ }
+ else
+#endif
+#endif
+#if !(LZO_OPT_UNALIGNED32)
+ {
+ *op++ = *ip++; *op++ = *ip++; *op++ = *ip++;
+ do *op++ = *ip++; while (--t > 0);
+ }
+#endif
+
+
+first_literal_run:
+
+
+ t = *ip++;
+ if (t >= 16)
+ goto match;
+#if defined(COPY_DICT)
+#if defined(LZO1Z)
+ m_off = (1 + M2_MAX_OFFSET) + (t << 6) + (*ip++ >> 2);
+ last_m_off = m_off;
+#else
+ m_off = (1 + M2_MAX_OFFSET) + (t >> 2) + (*ip++ << 2);
+#endif
+ NEED_OP(3);
+ t = 3; COPY_DICT(t,m_off)
+#else /* !COPY_DICT */
+#if defined(LZO1Z)
+ t = (1 + M2_MAX_OFFSET) + (t << 6) + (*ip++ >> 2);
+ m_pos = op - t;
+ last_m_off = t;
+#else
+ m_pos = op - (1 + M2_MAX_OFFSET);
+ m_pos -= t >> 2;
+ m_pos -= *ip++ << 2;
+#endif
+ TEST_LB(m_pos); NEED_OP(3);
+ *op++ = *m_pos++; *op++ = *m_pos++; *op++ = *m_pos;
+#endif /* COPY_DICT */
+ goto match_done;
+
+
+ /* handle matches */
+ for (;;) {
+match:
+ if (t >= 64) /* a M2 match */
+ {
+#if defined(COPY_DICT)
+#if defined(LZO1X)
+ m_off = 1 + ((t >> 2) & 7) + (*ip++ << 3);
+ t = (t >> 5) - 1;
+#elif defined(LZO1Y)
+ m_off = 1 + ((t >> 2) & 3) + (*ip++ << 2);
+ t = (t >> 4) - 3;
+#elif defined(LZO1Z)
+ m_off = t & 0x1f;
+ if (m_off >= 0x1c)
+ m_off = last_m_off;
+ else
+ {
+ m_off = 1 + (m_off << 6) + (*ip++ >> 2);
+ last_m_off = m_off;
+ }
+ t = (t >> 5) - 1;
+#endif
+#else /* !COPY_DICT */
+#if defined(LZO1X)
+ m_pos = op - 1;
+ m_pos -= (t >> 2) & 7;
+ m_pos -= *ip++ << 3;
+ t = (t >> 5) - 1;
+#elif defined(LZO1Y)
+ m_pos = op - 1;
+ m_pos -= (t >> 2) & 3;
+ m_pos -= *ip++ << 2;
+ t = (t >> 4) - 3;
+#elif defined(LZO1Z)
+ {
+ lzo_uint off = t & 0x1f;
+ m_pos = op;
+ if (off >= 0x1c)
+ {
+ assert(last_m_off > 0);
+ m_pos -= last_m_off;
+ }
+ else
+ {
+ off = 1 + (off << 6) + (*ip++ >> 2);
+ m_pos -= off;
+ last_m_off = off;
+ }
+ }
+ t = (t >> 5) - 1;
+#endif
+ TEST_LB(m_pos); assert(t > 0); NEED_OP(t+3-1);
+ goto copy_match;
+#endif /* COPY_DICT */
+ }
+ else if (t >= 32) /* a M3 match */
+ {
+ t &= 31;
+ if (t == 0)
+ {
+ while (*ip == 0)
+ {
+ t += 255;
+ ip++;
+ TEST_OV(t);
+ NEED_IP(1);
+ }
+ t += 31 + *ip++;
+ NEED_IP(2);
+ }
+#if defined(COPY_DICT)
+#if defined(LZO1Z)
+ m_off = 1 + (ip[0] << 6) + (ip[1] >> 2);
+ last_m_off = m_off;
+#else
+ m_off = 1 + (ip[0] >> 2) + (ip[1] << 6);
+#endif
+#else /* !COPY_DICT */
+#if defined(LZO1Z)
+ {
+ lzo_uint off = 1 + (ip[0] << 6) + (ip[1] >> 2);
+ m_pos = op - off;
+ last_m_off = off;
+ }
+#elif (LZO_OPT_UNALIGNED16) && (LZO_ABI_LITTLE_ENDIAN)
+ m_pos = op - 1;
+ m_pos -= UA_GET_LE16(ip) >> 2;
+#else
+ m_pos = op - 1;
+ m_pos -= (ip[0] >> 2) + (ip[1] << 6);
+#endif
+#endif /* COPY_DICT */
+ ip += 2;
+ }
+ else if (t >= 16) /* a M4 match */
+ {
+#if defined(COPY_DICT)
+ m_off = (t & 8) << 11;
+#else /* !COPY_DICT */
+ m_pos = op;
+ m_pos -= (t & 8) << 11;
+#endif /* COPY_DICT */
+ t &= 7;
+ if (t == 0)
+ {
+ while (*ip == 0)
+ {
+ t += 255;
+ ip++;
+ TEST_OV(t);
+ NEED_IP(1);
+ }
+ t += 7 + *ip++;
+ NEED_IP(2);
+ }
+#if defined(COPY_DICT)
+#if defined(LZO1Z)
+ m_off += (ip[0] << 6) + (ip[1] >> 2);
+#else
+ m_off += (ip[0] >> 2) + (ip[1] << 6);
+#endif
+ ip += 2;
+ if (m_off == 0)
+ goto eof_found;
+ m_off += 0x4000;
+#if defined(LZO1Z)
+ last_m_off = m_off;
+#endif
+#else /* !COPY_DICT */
+#if defined(LZO1Z)
+ m_pos -= (ip[0] << 6) + (ip[1] >> 2);
+#elif (LZO_OPT_UNALIGNED16) && (LZO_ABI_LITTLE_ENDIAN)
+ m_pos -= UA_GET_LE16(ip) >> 2;
+#else
+ m_pos -= (ip[0] >> 2) + (ip[1] << 6);
+#endif
+ ip += 2;
+ if (m_pos == op)
+ goto eof_found;
+ m_pos -= 0x4000;
+#if defined(LZO1Z)
+ last_m_off = pd((const lzo_bytep)op, m_pos);
+#endif
+#endif /* COPY_DICT */
+ }
+ else /* a M1 match */
+ {
+#if defined(COPY_DICT)
+#if defined(LZO1Z)
+ m_off = 1 + (t << 6) + (*ip++ >> 2);
+ last_m_off = m_off;
+#else
+ m_off = 1 + (t >> 2) + (*ip++ << 2);
+#endif
+ NEED_OP(2);
+ t = 2; COPY_DICT(t,m_off)
+#else /* !COPY_DICT */
+#if defined(LZO1Z)
+ t = 1 + (t << 6) + (*ip++ >> 2);
+ m_pos = op - t;
+ last_m_off = t;
+#else
+ m_pos = op - 1;
+ m_pos -= t >> 2;
+ m_pos -= *ip++ << 2;
+#endif
+ TEST_LB(m_pos); NEED_OP(2);
+ *op++ = *m_pos++; *op++ = *m_pos;
+#endif /* COPY_DICT */
+ goto match_done;
+ }
+
+ /* copy match */
+#if defined(COPY_DICT)
+
+ NEED_OP(t+3-1);
+ t += 3-1; COPY_DICT(t,m_off)
+
+#else /* !COPY_DICT */
+
+ TEST_LB(m_pos); assert(t > 0); NEED_OP(t+3-1);
+#if (LZO_OPT_UNALIGNED64) && (LZO_OPT_UNALIGNED32)
+ if (op - m_pos >= 8)
+ {
+ t += (3 - 1);
+ if (t >= 8) do
+ {
+ UA_COPY8(op,m_pos);
+ op += 8; m_pos += 8; t -= 8;
+ } while (t >= 8);
+ if (t >= 4)
+ {
+ UA_COPY4(op,m_pos);
+ op += 4; m_pos += 4; t -= 4;
+ }
+ if (t > 0)
+ {
+ *op++ = m_pos[0];
+ if (t > 1) { *op++ = m_pos[1]; if (t > 2) { *op++ = m_pos[2]; } }
+ }
+ }
+ else
+#elif (LZO_OPT_UNALIGNED32) || (LZO_ALIGNED_OK_4)
+#if !(LZO_OPT_UNALIGNED32)
+ if (t >= 2 * 4 - (3 - 1) && PTR_ALIGNED2_4(op,m_pos))
+ {
+ assert((op - m_pos) >= 4); /* both pointers are aligned */
+#else
+ if (t >= 2 * 4 - (3 - 1) && (op - m_pos) >= 4)
+ {
+#endif
+ UA_COPY4(op,m_pos);
+ op += 4; m_pos += 4; t -= 4 - (3 - 1);
+ do {
+ UA_COPY4(op,m_pos);
+ op += 4; m_pos += 4; t -= 4;
+ } while (t >= 4);
+ if (t > 0) do *op++ = *m_pos++; while (--t > 0);
+ }
+ else
+#endif
+ {
+copy_match:
+ *op++ = *m_pos++; *op++ = *m_pos++;
+ do *op++ = *m_pos++; while (--t > 0);
+ }
+
+#endif /* COPY_DICT */
+
+match_done:
+#if defined(LZO1Z)
+ t = ip[-1] & 3;
+#else
+ t = ip[-2] & 3;
+#endif
+ if (t == 0)
+ break;
+
+ /* copy literals */
+match_next:
+ assert(t > 0); assert(t < 4); NEED_OP(t); NEED_IP(t+3);
+#if 0
+ do *op++ = *ip++; while (--t > 0);
+#else
+ *op++ = *ip++;
+ if (t > 1) { *op++ = *ip++; if (t > 2) { *op++ = *ip++; } }
+#endif
+ t = *ip++;
+ }
+ }
+
+eof_found:
+ *out_len = pd(op, out);
+ return (ip == ip_end ? LZO_E_OK :
+ (ip < ip_end ? LZO_E_INPUT_NOT_CONSUMED : LZO_E_INPUT_OVERRUN));
+
+
+#if defined(HAVE_NEED_IP)
+input_overrun:
+ *out_len = pd(op, out);
+ return LZO_E_INPUT_OVERRUN;
+#endif
+
+#if defined(HAVE_NEED_OP)
+output_overrun:
+ *out_len = pd(op, out);
+ return LZO_E_OUTPUT_OVERRUN;
+#endif
+
+#if defined(LZO_TEST_OVERRUN_LOOKBEHIND)
+lookbehind_overrun:
+ *out_len = pd(op, out);
+ return LZO_E_LOOKBEHIND_OVERRUN;
+#endif
+}
+
+
+/* vim:set ts=4 sw=4 et: */
diff --git a/tools/z64compress/src/enc/lzo/lzo1x_d1.c b/tools/z64compress/src/enc/lzo/lzo1x_d1.c
new file mode 100644
index 0000000..68faf48
--- /dev/null
+++ b/tools/z64compress/src/enc/lzo/lzo1x_d1.c
@@ -0,0 +1,36 @@
+/* lzo1x_d1.c -- LZO1X decompression
+
+ This file is part of the LZO real-time data compression library.
+
+ Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer
+ All Rights Reserved.
+
+ The LZO library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of
+ the License, or (at your option) any later version.
+
+ The LZO library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with the LZO library; see the file COPYING.
+ If not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ Markus F.X.J. Oberhumer
+ <markus@oberhumer.com>
+ http://www.oberhumer.com/opensource/lzo/
+ */
+
+
+#include "config1x.h"
+
+#undef LZO_TEST_OVERRUN
+#define DO_DECOMPRESS lzo1x_decompress
+
+#include "lzo1x_d.ch"
+
+/* vim:set ts=4 sw=4 et: */
diff --git a/tools/z64compress/src/enc/lzo/lzo1x_d2.c b/tools/z64compress/src/enc/lzo/lzo1x_d2.c
new file mode 100644
index 0000000..8b7c316
--- /dev/null
+++ b/tools/z64compress/src/enc/lzo/lzo1x_d2.c
@@ -0,0 +1,61 @@
+/* lzo1x_d2.c -- LZO1X decompression with overrun testing
+
+ This file is part of the LZO real-time data compression library.
+
+ Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer
+ All Rights Reserved.
+
+ The LZO library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of
+ the License, or (at your option) any later version.
+
+ The LZO library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with the LZO library; see the file COPYING.
+ If not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ Markus F.X.J. Oberhumer
+ <markus@oberhumer.com>
+ http://www.oberhumer.com/opensource/lzo/
+ */
+
+
+#include "config1x.h"
+
+#define LZO_TEST_OVERRUN 1
+#define DO_DECOMPRESS lzo1x_decompress_safe
+
+#include "lzo1x_d.ch"
+
+#if defined(LZO_ARCH_I386) && defined(LZO_USE_ASM)
+LZO_EXTERN(int) lzo1x_decompress_asm_safe
+ (const lzo_bytep src, lzo_uint src_len,
+ lzo_bytep dst, lzo_uintp dst_len,
+ lzo_voidp wrkmem);
+LZO_PUBLIC(int) lzo1x_decompress_asm_safe
+ (const lzo_bytep src, lzo_uint src_len,
+ lzo_bytep dst, lzo_uintp dst_len,
+ lzo_voidp wrkmem)
+{
+ return lzo1x_decompress_safe(src, src_len, dst, dst_len, wrkmem);
+}
+LZO_EXTERN(int) lzo1x_decompress_asm_fast_safe
+ (const lzo_bytep src, lzo_uint src_len,
+ lzo_bytep dst, lzo_uintp dst_len,
+ lzo_voidp wrkmem);
+LZO_PUBLIC(int) lzo1x_decompress_asm_fast_safe
+ (const lzo_bytep src, lzo_uint src_len,
+ lzo_bytep dst, lzo_uintp dst_len,
+ lzo_voidp wrkmem)
+{
+ return lzo1x_decompress_safe(src, src_len, dst, dst_len, wrkmem);
+}
+#endif
+
+/* vim:set ts=4 sw=4 et: */
diff --git a/tools/z64compress/src/enc/lzo/lzo1x_d3.c b/tools/z64compress/src/enc/lzo/lzo1x_d3.c
new file mode 100644
index 0000000..b3d430f
--- /dev/null
+++ b/tools/z64compress/src/enc/lzo/lzo1x_d3.c
@@ -0,0 +1,93 @@
+/* lzo1x_d3.c -- LZO1X decompression with preset dictionary
+
+ This file is part of the LZO real-time data compression library.
+
+ Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer
+ All Rights Reserved.
+
+ The LZO library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of
+ the License, or (at your option) any later version.
+
+ The LZO library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with the LZO library; see the file COPYING.
+ If not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ Markus F.X.J. Oberhumer
+ <markus@oberhumer.com>
+ http://www.oberhumer.com/opensource/lzo/
+ */
+
+
+#include "config1x.h"
+
+#define LZO_TEST_OVERRUN 1
+
+
+#define SLOW_MEMCPY(a,b,l) { do *a++ = *b++; while (--l > 0); }
+#define FAST_MEMCPY(a,b,l) { lzo_memcpy(a,b,l); a += l; }
+
+#if 1 && defined(FAST_MEMCPY)
+# define DICT_MEMMOVE(op,m_pos,m_len,m_off) \
+ if (m_off >= (m_len)) \
+ FAST_MEMCPY(op,m_pos,m_len) \
+ else \
+ SLOW_MEMCPY(op,m_pos,m_len)
+#else
+# define DICT_MEMMOVE(op,m_pos,m_len,m_off) \
+ SLOW_MEMCPY(op,m_pos,m_len)
+#endif
+
+#if !defined(FAST_MEMCPY)
+# define FAST_MEMCPY SLOW_MEMCPY
+#endif
+
+
+#define COPY_DICT_DICT(m_len,m_off) \
+ { \
+ const lzo_bytep m_pos; \
+ m_off -= pd(op, out); assert(m_off > 0); \
+ if (m_off > dict_len) goto lookbehind_overrun; \
+ m_pos = dict_end - m_off; \
+ if (m_len > m_off) \
+ { \
+ m_len -= m_off; \
+ FAST_MEMCPY(op,m_pos,m_off) \
+ m_pos = out; \
+ SLOW_MEMCPY(op,m_pos,m_len) \
+ } \
+ else \
+ FAST_MEMCPY(op,m_pos,m_len) \
+ }
+
+#define COPY_DICT(m_len,m_off) \
+ assert(m_len >= 2); assert(m_off > 0); assert(op > out); \
+ if (m_off <= pd(op, out)) \
+ { \
+ const lzo_bytep m_pos = op - m_off; \
+ DICT_MEMMOVE(op,m_pos,m_len,m_off) \
+ } \
+ else \
+ COPY_DICT_DICT(m_len,m_off)
+
+
+
+
+LZO_PUBLIC(int)
+lzo1x_decompress_dict_safe ( const lzo_bytep in, lzo_uint in_len,
+ lzo_bytep out, lzo_uintp out_len,
+ lzo_voidp wrkmem /* NOT USED */,
+ const lzo_bytep dict, lzo_uint dict_len)
+
+
+#include "lzo1x_d.ch"
+
+
+/* vim:set ts=4 sw=4 et: */
diff --git a/tools/z64compress/src/enc/lzo/lzo_conf.h b/tools/z64compress/src/enc/lzo/lzo_conf.h
new file mode 100644
index 0000000..fff021d
--- /dev/null
+++ b/tools/z64compress/src/enc/lzo/lzo_conf.h
@@ -0,0 +1,436 @@
+/* lzo_conf.h -- main internal configuration file for the the LZO library
+
+ This file is part of the LZO real-time data compression library.
+
+ Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer
+ All Rights Reserved.
+
+ The LZO library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of
+ the License, or (at your option) any later version.
+
+ The LZO library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with the LZO library; see the file COPYING.
+ If not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ Markus F.X.J. Oberhumer
+ <markus@oberhumer.com>
+ http://www.oberhumer.com/opensource/lzo/
+ */
+
+
+/* WARNING: this file should *not* be used by applications. It is
+ part of the implementation of the library and is subject
+ to change.
+ */
+
+
+#ifndef __LZO_CONF_H
+#define __LZO_CONF_H 1
+
+#if !defined(__LZO_IN_MINILZO)
+#if defined(LZO_CFG_FREESTANDING) && (LZO_CFG_FREESTANDING)
+# define LZO_LIBC_FREESTANDING 1
+# define LZO_OS_FREESTANDING 1
+#endif
+#if defined(LZO_CFG_EXTRA_CONFIG_HEADER)
+# include LZO_CFG_EXTRA_CONFIG_HEADER
+#endif
+#if defined(__LZOCONF_H) || defined(__LZOCONF_H_INCLUDED)
+# error "include this file first"
+#endif
+#if defined(LZO_CFG_BUILD_DLL) && (LZO_CFG_BUILD_DLL+0) && !defined(__LZO_EXPORT1) && !defined(__LZO_EXPORT2) && 0
+ /* idea: we could auto-define __LZO_EXPORT1 for DLL exports */
+#ifndef __LZODEFS_H_INCLUDED
+#if defined(LZO_HAVE_CONFIG_H)
+# include <config.h>
+#endif
+#include <limits.h>
+#include <stddef.h>
+#include "lzodefs.h"
+#endif
+ /* #define __LZO_EXPORT1 __attribute__((__visibility__("default"))) */
+ /* #define __LZO_EXPORT1 __declspec(dllexport) */
+#endif
+#include "lzoconf.h"
+#if defined(LZO_CFG_EXTRA_CONFIG_HEADER2)
+# include LZO_CFG_EXTRA_CONFIG_HEADER2
+#endif
+#endif /* !defined(__LZO_IN_MINILZO) */
+
+#if !defined(__LZOCONF_H_INCLUDED) || (LZO_VERSION+0 != 0x20a0)
+# error "version mismatch"
+#endif
+
+
+/***********************************************************************
+// pragmas
+************************************************************************/
+
+#if (LZO_CC_MSC && (_MSC_VER >= 1000 && _MSC_VER < 1100))
+ /* disable bogus "unreachable code" warnings */
+# pragma warning(disable: 4702)
+#endif
+#if (LZO_CC_MSC && (_MSC_VER >= 1000))
+# pragma warning(disable: 4127 4701)
+ /* disable warnings about inlining */
+# pragma warning(disable: 4514 4710 4711)
+#endif
+#if (LZO_CC_MSC && (_MSC_VER >= 1300))
+ /* disable '-Wall' warnings in system header files */
+# pragma warning(disable: 4820)
+#endif
+#if (LZO_CC_MSC && (_MSC_VER >= 1800))
+ /* disable '-Wall' warnings in system header files */
+# pragma warning(disable: 4746)
+#endif
+#if (LZO_CC_INTELC && (__INTEL_COMPILER >= 900))
+ /* disable pedantic warnings in system header files */
+# pragma warning(disable: 1684)
+#endif
+
+#if (LZO_CC_SUNPROC)
+#if !defined(__cplusplus)
+# pragma error_messages(off,E_END_OF_LOOP_CODE_NOT_REACHED)
+# pragma error_messages(off,E_LOOP_NOT_ENTERED_AT_TOP)
+# pragma error_messages(off,E_STATEMENT_NOT_REACHED)
+#endif
+#endif
+
+
+/***********************************************************************
+// function types
+************************************************************************/
+
+#if !defined(__LZO_NOEXPORT1)
+# define __LZO_NOEXPORT1 /*empty*/
+#endif
+#if !defined(__LZO_NOEXPORT2)
+# define __LZO_NOEXPORT2 /*empty*/
+#endif
+
+#if 1
+# define LZO_PUBLIC_DECL(r) LZO_EXTERN(r)
+#endif
+#if 1
+# define LZO_PUBLIC_IMPL(r) LZO_PUBLIC(r)
+#endif
+#if !defined(LZO_LOCAL_DECL)
+# define LZO_LOCAL_DECL(r) __LZO_EXTERN_C LZO_LOCAL_IMPL(r)
+#endif
+#if !defined(LZO_LOCAL_IMPL)
+# define LZO_LOCAL_IMPL(r) __LZO_NOEXPORT1 r __LZO_NOEXPORT2 __LZO_CDECL
+#endif
+#if 1
+# define LZO_STATIC_DECL(r) LZO_PRIVATE(r)
+#endif
+#if 1
+# define LZO_STATIC_IMPL(r) LZO_PRIVATE(r)
+#endif
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+#if defined(__LZO_IN_MINILZO) || (LZO_CFG_FREESTANDING)
+#elif 1
+# include <string.h>
+#else
+# define LZO_WANT_ACC_INCD_H 1
+#endif
+#if defined(LZO_HAVE_CONFIG_H)
+# define LZO_CFG_NO_CONFIG_HEADER 1
+#endif
+#include "lzo_supp.h"
+
+/* Integral types */
+#if 1 || defined(lzo_int8_t) || defined(lzo_uint8_t)
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int8_t) == 1)
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uint8_t) == 1)
+#endif
+#if 1 || defined(lzo_int16_t) || defined(lzo_uint16_t)
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int16_t) == 2)
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uint16_t) == 2)
+#endif
+#if 1 || defined(lzo_int32_t) || defined(lzo_uint32_t)
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int32_t) == 4)
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uint32_t) == 4)
+#endif
+#if defined(lzo_int64_t) || defined(lzo_uint64_t)
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int64_t) == 8)
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uint64_t) == 8)
+#endif
+
+#if (LZO_CFG_FREESTANDING)
+# undef HAVE_MEMCMP
+# undef HAVE_MEMCPY
+# undef HAVE_MEMMOVE
+# undef HAVE_MEMSET
+#endif
+
+#if !(HAVE_MEMCMP)
+# undef memcmp
+# define memcmp(a,b,c) lzo_memcmp(a,b,c)
+#else
+# undef lzo_memcmp
+# define lzo_memcmp(a,b,c) memcmp(a,b,c)
+#endif
+#if !(HAVE_MEMCPY)
+# undef memcpy
+# define memcpy(a,b,c) lzo_memcpy(a,b,c)
+#else
+# undef lzo_memcpy
+# define lzo_memcpy(a,b,c) memcpy(a,b,c)
+#endif
+#if !(HAVE_MEMMOVE)
+# undef memmove
+# define memmove(a,b,c) lzo_memmove(a,b,c)
+#else
+# undef lzo_memmove
+# define lzo_memmove(a,b,c) memmove(a,b,c)
+#endif
+#if !(HAVE_MEMSET)
+# undef memset
+# define memset(a,b,c) lzo_memset(a,b,c)
+#else
+# undef lzo_memset
+# define lzo_memset(a,b,c) memset(a,b,c)
+#endif
+
+#undef NDEBUG
+#if (LZO_CFG_FREESTANDING)
+# undef LZO_DEBUG
+# define NDEBUG 1
+# undef assert
+# define assert(e) ((void)0)
+#else
+# if !defined(LZO_DEBUG)
+# define NDEBUG 1
+# endif
+# include <assert.h>
+#endif
+
+#if 0 && defined(__BOUNDS_CHECKING_ON)
+# include <unchecked.h>
+#else
+# define BOUNDS_CHECKING_OFF_DURING(stmt) stmt
+# define BOUNDS_CHECKING_OFF_IN_EXPR(expr) (expr)
+#endif
+
+#if (LZO_CFG_PGO)
+# undef __lzo_likely
+# undef __lzo_unlikely
+# define __lzo_likely(e) (e)
+# define __lzo_unlikely(e) (e)
+#endif
+
+#undef _
+#undef __
+#undef ___
+#undef ____
+#undef _p0
+#undef _p1
+#undef _p2
+#undef _p3
+#undef _p4
+#undef _s0
+#undef _s1
+#undef _s2
+#undef _s3
+#undef _s4
+#undef _ww
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+#if 1
+# define LZO_BYTE(x) ((unsigned char) (x))
+#else
+# define LZO_BYTE(x) ((unsigned char) ((x) & 0xff))
+#endif
+
+#define LZO_MAX(a,b) ((a) >= (b) ? (a) : (b))
+#define LZO_MIN(a,b) ((a) <= (b) ? (a) : (b))
+#define LZO_MAX3(a,b,c) ((a) >= (b) ? LZO_MAX(a,c) : LZO_MAX(b,c))
+#define LZO_MIN3(a,b,c) ((a) <= (b) ? LZO_MIN(a,c) : LZO_MIN(b,c))
+
+#define lzo_sizeof(type) ((lzo_uint) (sizeof(type)))
+
+#define LZO_HIGH(array) ((lzo_uint) (sizeof(array)/sizeof(*(array))))
+
+/* this always fits into 32 bits */
+#define LZO_SIZE(bits) (1u << (bits))
+#define LZO_MASK(bits) (LZO_SIZE(bits) - 1)
+
+#define LZO_USIZE(bits) ((lzo_uint) 1 << (bits))
+#define LZO_UMASK(bits) (LZO_USIZE(bits) - 1)
+
+#if !defined(DMUL)
+#if 0
+ /* 32*32 multiplies may be faster than 64*64 on some 64-bit machines,
+ * but then we need extra casts from unsigned<->size_t */
+# define DMUL(a,b) ((lzo_xint) ((lzo_uint32_t)(a) * (lzo_uint32_t)(b)))
+#else
+# define DMUL(a,b) ((lzo_xint) ((a) * (b)))
+#endif
+#endif
+
+
+/***********************************************************************
+// compiler and architecture specific stuff
+************************************************************************/
+
+/* Some defines that indicate if memory can be accessed at unaligned
+ * memory addresses. You should also test that this is actually faster
+ * even if it is allowed by your system.
+ */
+
+#include "lzo_func.h"
+
+#ifndef UA_SET1
+#define UA_SET1 LZO_MEMOPS_SET1
+#endif
+#ifndef UA_SET2
+#define UA_SET2 LZO_MEMOPS_SET2
+#endif
+#ifndef UA_SET3
+#define UA_SET3 LZO_MEMOPS_SET3
+#endif
+#ifndef UA_SET4
+#define UA_SET4 LZO_MEMOPS_SET4
+#endif
+#ifndef UA_MOVE1
+#define UA_MOVE1 LZO_MEMOPS_MOVE1
+#endif
+#ifndef UA_MOVE2
+#define UA_MOVE2 LZO_MEMOPS_MOVE2
+#endif
+#ifndef UA_MOVE3
+#define UA_MOVE3 LZO_MEMOPS_MOVE3
+#endif
+#ifndef UA_MOVE4
+#define UA_MOVE4 LZO_MEMOPS_MOVE4
+#endif
+#ifndef UA_MOVE8
+#define UA_MOVE8 LZO_MEMOPS_MOVE8
+#endif
+#ifndef UA_COPY1
+#define UA_COPY1 LZO_MEMOPS_COPY1
+#endif
+#ifndef UA_COPY2
+#define UA_COPY2 LZO_MEMOPS_COPY2
+#endif
+#ifndef UA_COPY3
+#define UA_COPY3 LZO_MEMOPS_COPY3
+#endif
+#ifndef UA_COPY4
+#define UA_COPY4 LZO_MEMOPS_COPY4
+#endif
+#ifndef UA_COPY8
+#define UA_COPY8 LZO_MEMOPS_COPY8
+#endif
+#ifndef UA_COPYN
+#define UA_COPYN LZO_MEMOPS_COPYN
+#endif
+#ifndef UA_COPYN_X
+#define UA_COPYN_X LZO_MEMOPS_COPYN
+#endif
+#ifndef UA_GET_LE16
+#define UA_GET_LE16 LZO_MEMOPS_GET_LE16
+#endif
+#ifndef UA_GET_LE32
+#define UA_GET_LE32 LZO_MEMOPS_GET_LE32
+#endif
+#ifdef LZO_MEMOPS_GET_LE64
+#ifndef UA_GET_LE64
+#define UA_GET_LE64 LZO_MEMOPS_GET_LE64
+#endif
+#endif
+#ifndef UA_GET_NE16
+#define UA_GET_NE16 LZO_MEMOPS_GET_NE16
+#endif
+#ifndef UA_GET_NE32
+#define UA_GET_NE32 LZO_MEMOPS_GET_NE32
+#endif
+#ifdef LZO_MEMOPS_GET_NE64
+#ifndef UA_GET_NE64
+#define UA_GET_NE64 LZO_MEMOPS_GET_NE64
+#endif
+#endif
+#ifndef UA_PUT_LE16
+#define UA_PUT_LE16 LZO_MEMOPS_PUT_LE16
+#endif
+#ifndef UA_PUT_LE32
+#define UA_PUT_LE32 LZO_MEMOPS_PUT_LE32
+#endif
+#ifndef UA_PUT_NE16
+#define UA_PUT_NE16 LZO_MEMOPS_PUT_NE16
+#endif
+#ifndef UA_PUT_NE32
+#define UA_PUT_NE32 LZO_MEMOPS_PUT_NE32
+#endif
+
+
+/* Fast memcpy that copies multiples of 8 byte chunks.
+ * len is the number of bytes.
+ * note: all parameters must be lvalues, len >= 8
+ * dest and src advance, len is undefined afterwards
+ */
+
+#define MEMCPY8_DS(dest,src,len) \
+ lzo_memcpy(dest,src,len); dest += len; src += len
+
+#define BZERO8_PTR(s,l,n) \
+ lzo_memset((lzo_voidp)(s),0,(lzo_uint)(l)*(n))
+
+#define MEMCPY_DS(dest,src,len) \
+ do *dest++ = *src++; while (--len > 0)
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+LZO_EXTERN(const lzo_bytep) lzo_copyright(void);
+
+#include "lzo_ptr.h"
+
+/* Generate compressed data in a deterministic way.
+ * This is fully portable, and compression can be faster as well.
+ * A reason NOT to be deterministic is when the block size is
+ * very small (e.g. 8kB) or the dictionary is big, because
+ * then the initialization of the dictionary becomes a relevant
+ * magnitude for compression speed.
+ */
+#ifndef LZO_DETERMINISTIC
+#define LZO_DETERMINISTIC 1
+#endif
+
+
+#ifndef LZO_DICT_USE_PTR
+#define LZO_DICT_USE_PTR 1
+#endif
+
+#if (LZO_DICT_USE_PTR)
+# define lzo_dict_t const lzo_bytep
+# define lzo_dict_p lzo_dict_t *
+#else
+# define lzo_dict_t lzo_uint
+# define lzo_dict_p lzo_dict_t *
+#endif
+
+
+#endif /* already included */
+
+
+/* vim:set ts=4 sw=4 et: */
diff --git a/tools/z64compress/src/enc/lzo/lzo_dict.h b/tools/z64compress/src/enc/lzo/lzo_dict.h
new file mode 100644
index 0000000..e48addb
--- /dev/null
+++ b/tools/z64compress/src/enc/lzo/lzo_dict.h
@@ -0,0 +1,307 @@
+/* lzo_dict.h -- dictionary definitions for the the LZO library
+
+ This file is part of the LZO real-time data compression library.
+
+ Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer
+ All Rights Reserved.
+
+ The LZO library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of
+ the License, or (at your option) any later version.
+
+ The LZO library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with the LZO library; see the file COPYING.
+ If not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ Markus F.X.J. Oberhumer
+ <markus@oberhumer.com>
+ http://www.oberhumer.com/opensource/lzo/
+ */
+
+
+/* WARNING: this file should *not* be used by applications. It is
+ part of the implementation of the library and is subject
+ to change.
+ */
+
+
+#ifndef __LZO_DICT_H
+#define __LZO_DICT_H 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+
+/***********************************************************************
+// dictionary size
+************************************************************************/
+
+/* dictionary needed for compression */
+#if !defined(D_BITS) && defined(DBITS)
+# define D_BITS DBITS
+#endif
+#if !defined(D_BITS)
+# error "D_BITS is not defined"
+#endif
+#if (D_BITS < 16)
+# define D_SIZE LZO_SIZE(D_BITS)
+# define D_MASK LZO_MASK(D_BITS)
+#else
+# define D_SIZE LZO_USIZE(D_BITS)
+# define D_MASK LZO_UMASK(D_BITS)
+#endif
+#define D_HIGH ((D_MASK >> 1) + 1)
+
+
+/* dictionary depth */
+#if !defined(DD_BITS)
+# define DD_BITS 0
+#endif
+#define DD_SIZE LZO_SIZE(DD_BITS)
+#define DD_MASK LZO_MASK(DD_BITS)
+
+/* dictionary length */
+#if !defined(DL_BITS)
+# define DL_BITS (D_BITS - DD_BITS)
+#endif
+#if (DL_BITS < 16)
+# define DL_SIZE LZO_SIZE(DL_BITS)
+# define DL_MASK LZO_MASK(DL_BITS)
+#else
+# define DL_SIZE LZO_USIZE(DL_BITS)
+# define DL_MASK LZO_UMASK(DL_BITS)
+#endif
+
+
+#if (D_BITS != DL_BITS + DD_BITS)
+# error "D_BITS does not match"
+#endif
+#if (D_BITS < 6 || D_BITS > 18)
+# error "invalid D_BITS"
+#endif
+#if (DL_BITS < 6 || DL_BITS > 20)
+# error "invalid DL_BITS"
+#endif
+#if (DD_BITS < 0 || DD_BITS > 6)
+# error "invalid DD_BITS"
+#endif
+
+
+#if !defined(DL_MIN_LEN)
+# define DL_MIN_LEN 3
+#endif
+#if !defined(DL_SHIFT)
+# define DL_SHIFT ((DL_BITS + (DL_MIN_LEN - 1)) / DL_MIN_LEN)
+#endif
+
+
+
+/***********************************************************************
+// dictionary access
+************************************************************************/
+
+#define LZO_HASH_GZIP 1
+#define LZO_HASH_GZIP_INCREMENTAL 2
+#define LZO_HASH_LZO_INCREMENTAL_A 3
+#define LZO_HASH_LZO_INCREMENTAL_B 4
+
+#if !defined(LZO_HASH)
+# error "choose a hashing strategy"
+#endif
+
+#undef DM
+#undef DX
+
+#if (DL_MIN_LEN == 3)
+# define _DV2_A(p,shift1,shift2) \
+ (((( (lzo_xint)((p)[0]) << shift1) ^ (p)[1]) << shift2) ^ (p)[2])
+# define _DV2_B(p,shift1,shift2) \
+ (((( (lzo_xint)((p)[2]) << shift1) ^ (p)[1]) << shift2) ^ (p)[0])
+# define _DV3_B(p,shift1,shift2,shift3) \
+ ((_DV2_B((p)+1,shift1,shift2) << (shift3)) ^ (p)[0])
+#elif (DL_MIN_LEN == 2)
+# define _DV2_A(p,shift1,shift2) \
+ (( (lzo_xint)(p[0]) << shift1) ^ p[1])
+# define _DV2_B(p,shift1,shift2) \
+ (( (lzo_xint)(p[1]) << shift1) ^ p[2])
+#else
+# error "invalid DL_MIN_LEN"
+#endif
+#define _DV_A(p,shift) _DV2_A(p,shift,shift)
+#define _DV_B(p,shift) _DV2_B(p,shift,shift)
+#define DA2(p,s1,s2) \
+ (((((lzo_xint)((p)[2]) << (s2)) + (p)[1]) << (s1)) + (p)[0])
+#define DS2(p,s1,s2) \
+ (((((lzo_xint)((p)[2]) << (s2)) - (p)[1]) << (s1)) - (p)[0])
+#define DX2(p,s1,s2) \
+ (((((lzo_xint)((p)[2]) << (s2)) ^ (p)[1]) << (s1)) ^ (p)[0])
+#define DA3(p,s1,s2,s3) ((DA2((p)+1,s2,s3) << (s1)) + (p)[0])
+#define DS3(p,s1,s2,s3) ((DS2((p)+1,s2,s3) << (s1)) - (p)[0])
+#define DX3(p,s1,s2,s3) ((DX2((p)+1,s2,s3) << (s1)) ^ (p)[0])
+#define DMS(v,s) ((lzo_uint) (((v) & (D_MASK >> (s))) << (s)))
+#define DM(v) DMS(v,0)
+
+
+#if (LZO_HASH == LZO_HASH_GZIP)
+ /* hash function like in gzip/zlib (deflate) */
+# define _DINDEX(dv,p) (_DV_A((p),DL_SHIFT))
+
+#elif (LZO_HASH == LZO_HASH_GZIP_INCREMENTAL)
+ /* incremental hash like in gzip/zlib (deflate) */
+# define __LZO_HASH_INCREMENTAL 1
+# define DVAL_FIRST(dv,p) dv = _DV_A((p),DL_SHIFT)
+# define DVAL_NEXT(dv,p) dv = (((dv) << DL_SHIFT) ^ p[2])
+# define _DINDEX(dv,p) (dv)
+# define DVAL_LOOKAHEAD DL_MIN_LEN
+
+#elif (LZO_HASH == LZO_HASH_LZO_INCREMENTAL_A)
+ /* incremental LZO hash version A */
+# define __LZO_HASH_INCREMENTAL 1
+# define DVAL_FIRST(dv,p) dv = _DV_A((p),5)
+# define DVAL_NEXT(dv,p) \
+ dv ^= (lzo_xint)(p[-1]) << (2*5); dv = (((dv) << 5) ^ p[2])
+# define _DINDEX(dv,p) ((DMUL(0x9f5f,dv)) >> 5)
+# define DVAL_LOOKAHEAD DL_MIN_LEN
+
+#elif (LZO_HASH == LZO_HASH_LZO_INCREMENTAL_B)
+ /* incremental LZO hash version B */
+# define __LZO_HASH_INCREMENTAL 1
+# define DVAL_FIRST(dv,p) dv = _DV_B((p),5)
+# define DVAL_NEXT(dv,p) \
+ dv ^= p[-1]; dv = (((dv) >> 5) ^ ((lzo_xint)(p[2]) << (2*5)))
+# define _DINDEX(dv,p) ((DMUL(0x9f5f,dv)) >> 5)
+# define DVAL_LOOKAHEAD DL_MIN_LEN
+
+#else
+# error "choose a hashing strategy"
+#endif
+
+
+#ifndef DINDEX
+#define DINDEX(dv,p) ((lzo_uint)((_DINDEX(dv,p)) & DL_MASK) << DD_BITS)
+#endif
+#if !defined(DINDEX1) && defined(D_INDEX1)
+#define DINDEX1 D_INDEX1
+#endif
+#if !defined(DINDEX2) && defined(D_INDEX2)
+#define DINDEX2 D_INDEX2
+#endif
+
+
+
+#if !defined(__LZO_HASH_INCREMENTAL)
+# define DVAL_FIRST(dv,p) ((void) 0)
+# define DVAL_NEXT(dv,p) ((void) 0)
+# define DVAL_LOOKAHEAD 0
+#endif
+
+
+#if !defined(DVAL_ASSERT)
+#if defined(__LZO_HASH_INCREMENTAL) && !defined(NDEBUG)
+#if 1 && (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || (LZO_CC_GNUC >= 0x020700ul) || LZO_CC_INTELC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE || LZO_CC_PGI)
+static void __attribute__((__unused__))
+#else
+static void
+#endif
+DVAL_ASSERT(lzo_xint dv, const lzo_bytep p)
+{
+ lzo_xint df;
+ DVAL_FIRST(df,(p));
+ assert(DINDEX(dv,p) == DINDEX(df,p));
+}
+#else
+# define DVAL_ASSERT(dv,p) ((void) 0)
+#endif
+#endif
+
+
+
+/***********************************************************************
+// dictionary updating
+************************************************************************/
+
+#if (LZO_DICT_USE_PTR)
+# define DENTRY(p,in) (p)
+# define GINDEX(m_pos,m_off,dict,dindex,in) m_pos = dict[dindex]
+#else
+# define DENTRY(p,in) ((lzo_dict_t) pd(p, in))
+# define GINDEX(m_pos,m_off,dict,dindex,in) m_off = dict[dindex]
+#endif
+
+
+#if (DD_BITS == 0)
+
+# define UPDATE_D(dict,drun,dv,p,in) dict[ DINDEX(dv,p) ] = DENTRY(p,in)
+# define UPDATE_I(dict,drun,index,p,in) dict[index] = DENTRY(p,in)
+# define UPDATE_P(ptr,drun,p,in) (ptr)[0] = DENTRY(p,in)
+
+#else
+
+# define UPDATE_D(dict,drun,dv,p,in) \
+ dict[ DINDEX(dv,p) + drun++ ] = DENTRY(p,in); drun &= DD_MASK
+# define UPDATE_I(dict,drun,index,p,in) \
+ dict[ (index) + drun++ ] = DENTRY(p,in); drun &= DD_MASK
+# define UPDATE_P(ptr,drun,p,in) \
+ (ptr) [ drun++ ] = DENTRY(p,in); drun &= DD_MASK
+
+#endif
+
+
+/***********************************************************************
+// test for a match
+************************************************************************/
+
+#if (LZO_DICT_USE_PTR)
+
+/* m_pos is either NULL or a valid pointer */
+#define LZO_CHECK_MPOS_DET(m_pos,m_off,in,ip,max_offset) \
+ (m_pos == NULL || (m_off = pd(ip, m_pos)) > max_offset)
+
+/* m_pos may point anywhere... */
+#define LZO_CHECK_MPOS_NON_DET(m_pos,m_off,in,ip,max_offset) \
+ (BOUNDS_CHECKING_OFF_IN_EXPR(( \
+ m_pos = ip - (lzo_uint) PTR_DIFF(ip,m_pos), \
+ PTR_LT(m_pos,in) || \
+ (m_off = (lzo_uint) PTR_DIFF(ip,m_pos)) == 0 || \
+ m_off > max_offset )))
+
+#else
+
+#define LZO_CHECK_MPOS_DET(m_pos,m_off,in,ip,max_offset) \
+ (m_off == 0 || \
+ ((m_off = pd(ip, in) - m_off) > max_offset) || \
+ (m_pos = (ip) - (m_off), 0) )
+
+#define LZO_CHECK_MPOS_NON_DET(m_pos,m_off,in,ip,max_offset) \
+ (pd(ip, in) <= m_off || \
+ ((m_off = pd(ip, in) - m_off) > max_offset) || \
+ (m_pos = (ip) - (m_off), 0) )
+
+#endif
+
+
+#if (LZO_DETERMINISTIC)
+# define LZO_CHECK_MPOS LZO_CHECK_MPOS_DET
+#else
+# define LZO_CHECK_MPOS LZO_CHECK_MPOS_NON_DET
+#endif
+
+
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* already included */
+
+
+/* vim:set ts=4 sw=4 et: */
diff --git a/tools/z64compress/src/enc/lzo/lzo_func.h b/tools/z64compress/src/enc/lzo/lzo_func.h
new file mode 100644
index 0000000..f3ac8e3
--- /dev/null
+++ b/tools/z64compress/src/enc/lzo/lzo_func.h
@@ -0,0 +1,491 @@
+/* lzo_func.h -- functions
+
+ This file is part of the LZO real-time data compression library.
+
+ Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer
+ All Rights Reserved.
+
+ The LZO library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of
+ the License, or (at your option) any later version.
+
+ The LZO library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with the LZO library; see the file COPYING.
+ If not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ Markus F.X.J. Oberhumer
+ <markus@oberhumer.com>
+ http://www.oberhumer.com/opensource/lzo/
+ */
+
+
+/* WARNING: this file should *not* be used by applications. It is
+ part of the implementation of the library and is subject
+ to change.
+ */
+
+
+#ifndef __LZO_FUNC_H
+#define __LZO_FUNC_H 1
+
+
+/***********************************************************************
+// bitops
+************************************************************************/
+
+#if !defined(LZO_BITOPS_USE_ASM_BITSCAN) && !defined(LZO_BITOPS_USE_GNUC_BITSCAN) && !defined(LZO_BITOPS_USE_MSC_BITSCAN)
+#if 1 && (LZO_ARCH_AMD64) && (LZO_CC_GNUC && (LZO_CC_GNUC < 0x040000ul)) && (LZO_ASM_SYNTAX_GNUC)
+#define LZO_BITOPS_USE_ASM_BITSCAN 1
+#elif (LZO_CC_CLANG || (LZO_CC_GNUC >= 0x030400ul) || (LZO_CC_INTELC_GNUC && (__INTEL_COMPILER >= 1000)) || (LZO_CC_LLVM && (!defined(__llvm_tools_version__) || (__llvm_tools_version__+0 >= 0x010500ul))))
+#define LZO_BITOPS_USE_GNUC_BITSCAN 1
+#elif (LZO_OS_WIN32 || LZO_OS_WIN64) && ((LZO_CC_INTELC_MSC && (__INTEL_COMPILER >= 1010)) || (LZO_CC_MSC && (_MSC_VER >= 1400)))
+#define LZO_BITOPS_USE_MSC_BITSCAN 1
+#if (LZO_CC_MSC) && (LZO_ARCH_AMD64 || LZO_ARCH_I386)
+#include <intrin.h>
+#endif
+#if (LZO_CC_MSC) && (LZO_ARCH_AMD64 || LZO_ARCH_I386)
+#pragma intrinsic(_BitScanReverse)
+#pragma intrinsic(_BitScanForward)
+#endif
+#if (LZO_CC_MSC) && (LZO_ARCH_AMD64)
+#pragma intrinsic(_BitScanReverse64)
+#pragma intrinsic(_BitScanForward64)
+#endif
+#endif
+#endif
+
+__lzo_static_forceinline unsigned lzo_bitops_ctlz32_func(lzo_uint32_t v)
+{
+#if (LZO_BITOPS_USE_MSC_BITSCAN) && (LZO_ARCH_AMD64 || LZO_ARCH_I386)
+ unsigned long r; (void) _BitScanReverse(&r, v); return (unsigned) r ^ 31;
+#define lzo_bitops_ctlz32(v) lzo_bitops_ctlz32_func(v)
+#elif (LZO_BITOPS_USE_ASM_BITSCAN) && (LZO_ARCH_AMD64 || LZO_ARCH_I386) && (LZO_ASM_SYNTAX_GNUC)
+ lzo_uint32_t r;
+ __asm__("bsr %1,%0" : "=r" (r) : "rm" (v) __LZO_ASM_CLOBBER_LIST_CC);
+ return (unsigned) r ^ 31;
+#define lzo_bitops_ctlz32(v) lzo_bitops_ctlz32_func(v)
+#elif (LZO_BITOPS_USE_GNUC_BITSCAN) && (LZO_SIZEOF_INT == 4)
+ unsigned r; r = (unsigned) __builtin_clz(v); return r;
+#define lzo_bitops_ctlz32(v) ((unsigned) __builtin_clz(v))
+#elif (LZO_BITOPS_USE_GNUC_BITSCAN) && (LZO_SIZEOF_LONG == 8) && (LZO_WORDSIZE >= 8)
+ unsigned r; r = (unsigned) __builtin_clzl(v); return r ^ 32;
+#define lzo_bitops_ctlz32(v) (((unsigned) __builtin_clzl(v)) ^ 32)
+#else
+ LZO_UNUSED(v); return 0;
+#endif
+}
+
+#if defined(lzo_uint64_t)
+__lzo_static_forceinline unsigned lzo_bitops_ctlz64_func(lzo_uint64_t v)
+{
+#if (LZO_BITOPS_USE_MSC_BITSCAN) && (LZO_ARCH_AMD64)
+ unsigned long r; (void) _BitScanReverse64(&r, v); return (unsigned) r ^ 63;
+#define lzo_bitops_ctlz64(v) lzo_bitops_ctlz64_func(v)
+#elif (LZO_BITOPS_USE_ASM_BITSCAN) && (LZO_ARCH_AMD64) && (LZO_ASM_SYNTAX_GNUC)
+ lzo_uint64_t r;
+ __asm__("bsr %1,%0" : "=r" (r) : "rm" (v) __LZO_ASM_CLOBBER_LIST_CC);
+ return (unsigned) r ^ 63;
+#define lzo_bitops_ctlz64(v) lzo_bitops_ctlz64_func(v)
+#elif (LZO_BITOPS_USE_GNUC_BITSCAN) && (LZO_SIZEOF_LONG == 8) && (LZO_WORDSIZE >= 8)
+ unsigned r; r = (unsigned) __builtin_clzl(v); return r;
+#define lzo_bitops_ctlz64(v) ((unsigned) __builtin_clzl(v))
+#elif (LZO_BITOPS_USE_GNUC_BITSCAN) && (LZO_SIZEOF_LONG_LONG == 8) && (LZO_WORDSIZE >= 8)
+ unsigned r; r = (unsigned) __builtin_clzll(v); return r;
+#define lzo_bitops_ctlz64(v) ((unsigned) __builtin_clzll(v))
+#else
+ LZO_UNUSED(v); return 0;
+#endif
+}
+#endif
+
+__lzo_static_forceinline unsigned lzo_bitops_cttz32_func(lzo_uint32_t v)
+{
+#if (LZO_BITOPS_USE_MSC_BITSCAN) && (LZO_ARCH_AMD64 || LZO_ARCH_I386)
+ unsigned long r; (void) _BitScanForward(&r, v); return (unsigned) r;
+#define lzo_bitops_cttz32(v) lzo_bitops_cttz32_func(v)
+#elif (LZO_BITOPS_USE_ASM_BITSCAN) && (LZO_ARCH_AMD64 || LZO_ARCH_I386) && (LZO_ASM_SYNTAX_GNUC)
+ lzo_uint32_t r;
+ __asm__("bsf %1,%0" : "=r" (r) : "rm" (v) __LZO_ASM_CLOBBER_LIST_CC);
+ return (unsigned) r;
+#define lzo_bitops_cttz32(v) lzo_bitops_cttz32_func(v)
+#elif (LZO_BITOPS_USE_GNUC_BITSCAN) && (LZO_SIZEOF_INT >= 4)
+ unsigned r; r = (unsigned) __builtin_ctz(v); return r;
+#define lzo_bitops_cttz32(v) ((unsigned) __builtin_ctz(v))
+#else
+ LZO_UNUSED(v); return 0;
+#endif
+}
+
+#if defined(lzo_uint64_t)
+__lzo_static_forceinline unsigned lzo_bitops_cttz64_func(lzo_uint64_t v)
+{
+#if (LZO_BITOPS_USE_MSC_BITSCAN) && (LZO_ARCH_AMD64)
+ unsigned long r; (void) _BitScanForward64(&r, v); return (unsigned) r;
+#define lzo_bitops_cttz64(v) lzo_bitops_cttz64_func(v)
+#elif (LZO_BITOPS_USE_ASM_BITSCAN) && (LZO_ARCH_AMD64) && (LZO_ASM_SYNTAX_GNUC)
+ lzo_uint64_t r;
+ __asm__("bsf %1,%0" : "=r" (r) : "rm" (v) __LZO_ASM_CLOBBER_LIST_CC);
+ return (unsigned) r;
+#define lzo_bitops_cttz64(v) lzo_bitops_cttz64_func(v)
+#elif (LZO_BITOPS_USE_GNUC_BITSCAN) && (LZO_SIZEOF_LONG >= 8) && (LZO_WORDSIZE >= 8)
+ unsigned r; r = (unsigned) __builtin_ctzl(v); return r;
+#define lzo_bitops_cttz64(v) ((unsigned) __builtin_ctzl(v))
+#elif (LZO_BITOPS_USE_GNUC_BITSCAN) && (LZO_SIZEOF_LONG_LONG >= 8) && (LZO_WORDSIZE >= 8)
+ unsigned r; r = (unsigned) __builtin_ctzll(v); return r;
+#define lzo_bitops_cttz64(v) ((unsigned) __builtin_ctzll(v))
+#else
+ LZO_UNUSED(v); return 0;
+#endif
+}
+#endif
+
+lzo_unused_funcs_impl(void, lzo_bitops_unused_funcs)(void)
+{
+ LZO_UNUSED_FUNC(lzo_bitops_unused_funcs);
+ LZO_UNUSED_FUNC(lzo_bitops_ctlz32_func);
+ LZO_UNUSED_FUNC(lzo_bitops_cttz32_func);
+#if defined(lzo_uint64_t)
+ LZO_UNUSED_FUNC(lzo_bitops_ctlz64_func);
+ LZO_UNUSED_FUNC(lzo_bitops_cttz64_func);
+#endif
+}
+
+
+/***********************************************************************
+// memops
+************************************************************************/
+
+#if defined(__lzo_alignof) && !(LZO_CFG_NO_UNALIGNED)
+/* CBUG: disabled because of gcc bug 64516 */
+#if !defined(lzo_memops_tcheck__) && 0
+#define lzo_memops_tcheck__(t,a,b) ((void)0, sizeof(t) == (a) && __lzo_alignof(t) == (b))
+#endif
+#endif
+#ifndef lzo_memops_TU0p
+#define lzo_memops_TU0p void __LZO_MMODEL *
+#endif
+#ifndef lzo_memops_TU1p
+#define lzo_memops_TU1p unsigned char __LZO_MMODEL *
+#endif
+#ifndef lzo_memops_TU2p
+#if (LZO_OPT_UNALIGNED16)
+typedef lzo_uint16_t __lzo_may_alias lzo_memops_TU2;
+#define lzo_memops_TU2p volatile lzo_memops_TU2 *
+#elif defined(__lzo_byte_struct)
+__lzo_byte_struct(lzo_memops_TU2_struct,2)
+typedef struct lzo_memops_TU2_struct lzo_memops_TU2;
+#else
+struct lzo_memops_TU2_struct { unsigned char a[2]; } __lzo_may_alias;
+typedef struct lzo_memops_TU2_struct lzo_memops_TU2;
+#endif
+#ifndef lzo_memops_TU2p
+#define lzo_memops_TU2p lzo_memops_TU2 *
+#endif
+#endif
+#ifndef lzo_memops_TU4p
+#if (LZO_OPT_UNALIGNED32)
+typedef lzo_uint32_t __lzo_may_alias lzo_memops_TU4;
+#define lzo_memops_TU4p volatile lzo_memops_TU4 __LZO_MMODEL *
+#elif defined(__lzo_byte_struct)
+__lzo_byte_struct(lzo_memops_TU4_struct,4)
+typedef struct lzo_memops_TU4_struct lzo_memops_TU4;
+#else
+struct lzo_memops_TU4_struct { unsigned char a[4]; } __lzo_may_alias;
+typedef struct lzo_memops_TU4_struct lzo_memops_TU4;
+#endif
+#ifndef lzo_memops_TU4p
+#define lzo_memops_TU4p lzo_memops_TU4 __LZO_MMODEL *
+#endif
+#endif
+#ifndef lzo_memops_TU8p
+#if (LZO_OPT_UNALIGNED64)
+typedef lzo_uint64_t __lzo_may_alias lzo_memops_TU8;
+#define lzo_memops_TU8p volatile lzo_memops_TU8 __LZO_MMODEL *
+#elif defined(__lzo_byte_struct)
+__lzo_byte_struct(lzo_memops_TU8_struct,8)
+typedef struct lzo_memops_TU8_struct lzo_memops_TU8;
+#else
+struct lzo_memops_TU8_struct { unsigned char a[8]; } __lzo_may_alias;
+typedef struct lzo_memops_TU8_struct lzo_memops_TU8;
+#endif
+#ifndef lzo_memops_TU8p
+#define lzo_memops_TU8p lzo_memops_TU8 __LZO_MMODEL *
+#endif
+#endif
+#ifndef lzo_memops_set_TU1p
+#define lzo_memops_set_TU1p volatile lzo_memops_TU1p
+#endif
+#ifndef lzo_memops_move_TU1p
+#define lzo_memops_move_TU1p lzo_memops_TU1p
+#endif
+#define LZO_MEMOPS_SET1(dd,cc) \
+ LZO_BLOCK_BEGIN \
+ lzo_memops_set_TU1p d__1 = (lzo_memops_set_TU1p) (lzo_memops_TU0p) (dd); \
+ d__1[0] = LZO_BYTE(cc); \
+ LZO_BLOCK_END
+#define LZO_MEMOPS_SET2(dd,cc) \
+ LZO_BLOCK_BEGIN \
+ lzo_memops_set_TU1p d__2 = (lzo_memops_set_TU1p) (lzo_memops_TU0p) (dd); \
+ d__2[0] = LZO_BYTE(cc); d__2[1] = LZO_BYTE(cc); \
+ LZO_BLOCK_END
+#define LZO_MEMOPS_SET3(dd,cc) \
+ LZO_BLOCK_BEGIN \
+ lzo_memops_set_TU1p d__3 = (lzo_memops_set_TU1p) (lzo_memops_TU0p) (dd); \
+ d__3[0] = LZO_BYTE(cc); d__3[1] = LZO_BYTE(cc); d__3[2] = LZO_BYTE(cc); \
+ LZO_BLOCK_END
+#define LZO_MEMOPS_SET4(dd,cc) \
+ LZO_BLOCK_BEGIN \
+ lzo_memops_set_TU1p d__4 = (lzo_memops_set_TU1p) (lzo_memops_TU0p) (dd); \
+ d__4[0] = LZO_BYTE(cc); d__4[1] = LZO_BYTE(cc); d__4[2] = LZO_BYTE(cc); d__4[3] = LZO_BYTE(cc); \
+ LZO_BLOCK_END
+#define LZO_MEMOPS_MOVE1(dd,ss) \
+ LZO_BLOCK_BEGIN \
+ lzo_memops_move_TU1p d__1 = (lzo_memops_move_TU1p) (lzo_memops_TU0p) (dd); \
+ const lzo_memops_move_TU1p s__1 = (const lzo_memops_move_TU1p) (const lzo_memops_TU0p) (ss); \
+ d__1[0] = s__1[0]; \
+ LZO_BLOCK_END
+#define LZO_MEMOPS_MOVE2(dd,ss) \
+ LZO_BLOCK_BEGIN \
+ lzo_memops_move_TU1p d__2 = (lzo_memops_move_TU1p) (lzo_memops_TU0p) (dd); \
+ const lzo_memops_move_TU1p s__2 = (const lzo_memops_move_TU1p) (const lzo_memops_TU0p) (ss); \
+ d__2[0] = s__2[0]; d__2[1] = s__2[1]; \
+ LZO_BLOCK_END
+#define LZO_MEMOPS_MOVE3(dd,ss) \
+ LZO_BLOCK_BEGIN \
+ lzo_memops_move_TU1p d__3 = (lzo_memops_move_TU1p) (lzo_memops_TU0p) (dd); \
+ const lzo_memops_move_TU1p s__3 = (const lzo_memops_move_TU1p) (const lzo_memops_TU0p) (ss); \
+ d__3[0] = s__3[0]; d__3[1] = s__3[1]; d__3[2] = s__3[2]; \
+ LZO_BLOCK_END
+#define LZO_MEMOPS_MOVE4(dd,ss) \
+ LZO_BLOCK_BEGIN \
+ lzo_memops_move_TU1p d__4 = (lzo_memops_move_TU1p) (lzo_memops_TU0p) (dd); \
+ const lzo_memops_move_TU1p s__4 = (const lzo_memops_move_TU1p) (const lzo_memops_TU0p) (ss); \
+ d__4[0] = s__4[0]; d__4[1] = s__4[1]; d__4[2] = s__4[2]; d__4[3] = s__4[3]; \
+ LZO_BLOCK_END
+#define LZO_MEMOPS_MOVE8(dd,ss) \
+ LZO_BLOCK_BEGIN \
+ lzo_memops_move_TU1p d__8 = (lzo_memops_move_TU1p) (lzo_memops_TU0p) (dd); \
+ const lzo_memops_move_TU1p s__8 = (const lzo_memops_move_TU1p) (const lzo_memops_TU0p) (ss); \
+ d__8[0] = s__8[0]; d__8[1] = s__8[1]; d__8[2] = s__8[2]; d__8[3] = s__8[3]; \
+ d__8[4] = s__8[4]; d__8[5] = s__8[5]; d__8[6] = s__8[6]; d__8[7] = s__8[7]; \
+ LZO_BLOCK_END
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(*(lzo_memops_TU1p)0)==1)
+#define LZO_MEMOPS_COPY1(dd,ss) LZO_MEMOPS_MOVE1(dd,ss)
+#if (LZO_OPT_UNALIGNED16)
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(*(lzo_memops_TU2p)0)==2)
+#define LZO_MEMOPS_COPY2(dd,ss) \
+ * (lzo_memops_TU2p) (lzo_memops_TU0p) (dd) = * (const lzo_memops_TU2p) (const lzo_memops_TU0p) (ss)
+#elif defined(lzo_memops_tcheck__)
+#define LZO_MEMOPS_COPY2(dd,ss) \
+ LZO_BLOCK_BEGIN if (lzo_memops_tcheck__(lzo_memops_TU2,2,1)) { \
+ * (lzo_memops_TU2p) (lzo_memops_TU0p) (dd) = * (const lzo_memops_TU2p) (const lzo_memops_TU0p) (ss); \
+ } else { LZO_MEMOPS_MOVE2(dd,ss); } LZO_BLOCK_END
+#else
+#define LZO_MEMOPS_COPY2(dd,ss) LZO_MEMOPS_MOVE2(dd,ss)
+#endif
+#if (LZO_OPT_UNALIGNED32)
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(*(lzo_memops_TU4p)0)==4)
+#define LZO_MEMOPS_COPY4(dd,ss) \
+ * (lzo_memops_TU4p) (lzo_memops_TU0p) (dd) = * (const lzo_memops_TU4p) (const lzo_memops_TU0p) (ss)
+#elif defined(lzo_memops_tcheck__)
+#define LZO_MEMOPS_COPY4(dd,ss) \
+ LZO_BLOCK_BEGIN if (lzo_memops_tcheck__(lzo_memops_TU4,4,1)) { \
+ * (lzo_memops_TU4p) (lzo_memops_TU0p) (dd) = * (const lzo_memops_TU4p) (const lzo_memops_TU0p) (ss); \
+ } else { LZO_MEMOPS_MOVE4(dd,ss); } LZO_BLOCK_END
+#else
+#define LZO_MEMOPS_COPY4(dd,ss) LZO_MEMOPS_MOVE4(dd,ss)
+#endif
+#if (LZO_WORDSIZE != 8)
+#define LZO_MEMOPS_COPY8(dd,ss) \
+ LZO_BLOCK_BEGIN LZO_MEMOPS_COPY4(dd,ss); LZO_MEMOPS_COPY4((lzo_memops_TU1p)(lzo_memops_TU0p)(dd)+4,(const lzo_memops_TU1p)(const lzo_memops_TU0p)(ss)+4); LZO_BLOCK_END
+#else
+#if (LZO_OPT_UNALIGNED64)
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(*(lzo_memops_TU8p)0)==8)
+#define LZO_MEMOPS_COPY8(dd,ss) \
+ * (lzo_memops_TU8p) (lzo_memops_TU0p) (dd) = * (const lzo_memops_TU8p) (const lzo_memops_TU0p) (ss)
+#elif (LZO_OPT_UNALIGNED32)
+#define LZO_MEMOPS_COPY8(dd,ss) \
+ LZO_BLOCK_BEGIN LZO_MEMOPS_COPY4(dd,ss); LZO_MEMOPS_COPY4((lzo_memops_TU1p)(lzo_memops_TU0p)(dd)+4,(const lzo_memops_TU1p)(const lzo_memops_TU0p)(ss)+4); LZO_BLOCK_END
+#elif defined(lzo_memops_tcheck__)
+#define LZO_MEMOPS_COPY8(dd,ss) \
+ LZO_BLOCK_BEGIN if (lzo_memops_tcheck__(lzo_memops_TU8,8,1)) { \
+ * (lzo_memops_TU8p) (lzo_memops_TU0p) (dd) = * (const lzo_memops_TU8p) (const lzo_memops_TU0p) (ss); \
+ } else { LZO_MEMOPS_MOVE8(dd,ss); } LZO_BLOCK_END
+#else
+#define LZO_MEMOPS_COPY8(dd,ss) LZO_MEMOPS_MOVE8(dd,ss)
+#endif
+#endif
+#define LZO_MEMOPS_COPYN(dd,ss,nn) \
+ LZO_BLOCK_BEGIN \
+ lzo_memops_TU1p d__n = (lzo_memops_TU1p) (lzo_memops_TU0p) (dd); \
+ const lzo_memops_TU1p s__n = (const lzo_memops_TU1p) (const lzo_memops_TU0p) (ss); \
+ lzo_uint n__n = (nn); \
+ while ((void)0, n__n >= 8) { LZO_MEMOPS_COPY8(d__n, s__n); d__n += 8; s__n += 8; n__n -= 8; } \
+ if ((void)0, n__n >= 4) { LZO_MEMOPS_COPY4(d__n, s__n); d__n += 4; s__n += 4; n__n -= 4; } \
+ if ((void)0, n__n > 0) do { *d__n++ = *s__n++; } while (--n__n > 0); \
+ LZO_BLOCK_END
+
+__lzo_static_forceinline lzo_uint16_t lzo_memops_get_le16(const lzo_voidp ss)
+{
+ lzo_uint16_t v;
+#if (LZO_ABI_LITTLE_ENDIAN)
+ LZO_MEMOPS_COPY2(&v, ss);
+#elif (LZO_OPT_UNALIGNED16 && LZO_ARCH_POWERPC && LZO_ABI_BIG_ENDIAN) && (LZO_ASM_SYNTAX_GNUC)
+ const lzo_memops_TU2p s = (const lzo_memops_TU2p) ss;
+ unsigned long vv;
+ __asm__("lhbrx %0,0,%1" : "=r" (vv) : "r" (s), "m" (*s));
+ v = (lzo_uint16_t) vv;
+#else
+ const lzo_memops_TU1p s = (const lzo_memops_TU1p) ss;
+ v = (lzo_uint16_t) (((lzo_uint16_t)s[0]) | ((lzo_uint16_t)s[1] << 8));
+#endif
+ return v;
+}
+#if (LZO_OPT_UNALIGNED16) && (LZO_ABI_LITTLE_ENDIAN)
+#define LZO_MEMOPS_GET_LE16(ss) (* (const lzo_memops_TU2p) (const lzo_memops_TU0p) (ss))
+#else
+#define LZO_MEMOPS_GET_LE16(ss) lzo_memops_get_le16(ss)
+#endif
+
+__lzo_static_forceinline lzo_uint32_t lzo_memops_get_le32(const lzo_voidp ss)
+{
+ lzo_uint32_t v;
+#if (LZO_ABI_LITTLE_ENDIAN)
+ LZO_MEMOPS_COPY4(&v, ss);
+#elif (LZO_OPT_UNALIGNED32 && LZO_ARCH_POWERPC && LZO_ABI_BIG_ENDIAN) && (LZO_ASM_SYNTAX_GNUC)
+ const lzo_memops_TU4p s = (const lzo_memops_TU4p) ss;
+ unsigned long vv;
+ __asm__("lwbrx %0,0,%1" : "=r" (vv) : "r" (s), "m" (*s));
+ v = (lzo_uint32_t) vv;
+#else
+ const lzo_memops_TU1p s = (const lzo_memops_TU1p) ss;
+ v = (lzo_uint32_t) (((lzo_uint32_t)s[0]) | ((lzo_uint32_t)s[1] << 8) | ((lzo_uint32_t)s[2] << 16) | ((lzo_uint32_t)s[3] << 24));
+#endif
+ return v;
+}
+#if (LZO_OPT_UNALIGNED32) && (LZO_ABI_LITTLE_ENDIAN)
+#define LZO_MEMOPS_GET_LE32(ss) (* (const lzo_memops_TU4p) (const lzo_memops_TU0p) (ss))
+#else
+#define LZO_MEMOPS_GET_LE32(ss) lzo_memops_get_le32(ss)
+#endif
+
+#if (LZO_OPT_UNALIGNED64) && (LZO_ABI_LITTLE_ENDIAN)
+#define LZO_MEMOPS_GET_LE64(ss) (* (const lzo_memops_TU8p) (const lzo_memops_TU0p) (ss))
+#endif
+
+__lzo_static_forceinline lzo_uint16_t lzo_memops_get_ne16(const lzo_voidp ss)
+{
+ lzo_uint16_t v;
+ LZO_MEMOPS_COPY2(&v, ss);
+ return v;
+}
+#if (LZO_OPT_UNALIGNED16)
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(*(lzo_memops_TU2p)0)==2)
+#define LZO_MEMOPS_GET_NE16(ss) (* (const lzo_memops_TU2p) (const lzo_memops_TU0p) (ss))
+#else
+#define LZO_MEMOPS_GET_NE16(ss) lzo_memops_get_ne16(ss)
+#endif
+
+__lzo_static_forceinline lzo_uint32_t lzo_memops_get_ne32(const lzo_voidp ss)
+{
+ lzo_uint32_t v;
+ LZO_MEMOPS_COPY4(&v, ss);
+ return v;
+}
+#if (LZO_OPT_UNALIGNED32)
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(*(lzo_memops_TU4p)0)==4)
+#define LZO_MEMOPS_GET_NE32(ss) (* (const lzo_memops_TU4p) (const lzo_memops_TU0p) (ss))
+#else
+#define LZO_MEMOPS_GET_NE32(ss) lzo_memops_get_ne32(ss)
+#endif
+
+#if (LZO_OPT_UNALIGNED64)
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(*(lzo_memops_TU8p)0)==8)
+#define LZO_MEMOPS_GET_NE64(ss) (* (const lzo_memops_TU8p) (const lzo_memops_TU0p) (ss))
+#endif
+
+__lzo_static_forceinline void lzo_memops_put_le16(lzo_voidp dd, lzo_uint16_t vv)
+{
+#if (LZO_ABI_LITTLE_ENDIAN)
+ LZO_MEMOPS_COPY2(dd, &vv);
+#elif (LZO_OPT_UNALIGNED16 && LZO_ARCH_POWERPC && LZO_ABI_BIG_ENDIAN) && (LZO_ASM_SYNTAX_GNUC)
+ lzo_memops_TU2p d = (lzo_memops_TU2p) dd;
+ unsigned long v = vv;
+ __asm__("sthbrx %2,0,%1" : "=m" (*d) : "r" (d), "r" (v));
+#else
+ lzo_memops_TU1p d = (lzo_memops_TU1p) dd;
+ d[0] = LZO_BYTE((vv ) & 0xff);
+ d[1] = LZO_BYTE((vv >> 8) & 0xff);
+#endif
+}
+#if (LZO_OPT_UNALIGNED16) && (LZO_ABI_LITTLE_ENDIAN)
+#define LZO_MEMOPS_PUT_LE16(dd,vv) (* (lzo_memops_TU2p) (lzo_memops_TU0p) (dd) = (vv))
+#else
+#define LZO_MEMOPS_PUT_LE16(dd,vv) lzo_memops_put_le16(dd,vv)
+#endif
+
+__lzo_static_forceinline void lzo_memops_put_le32(lzo_voidp dd, lzo_uint32_t vv)
+{
+#if (LZO_ABI_LITTLE_ENDIAN)
+ LZO_MEMOPS_COPY4(dd, &vv);
+#elif (LZO_OPT_UNALIGNED32 && LZO_ARCH_POWERPC && LZO_ABI_BIG_ENDIAN) && (LZO_ASM_SYNTAX_GNUC)
+ lzo_memops_TU4p d = (lzo_memops_TU4p) dd;
+ unsigned long v = vv;
+ __asm__("stwbrx %2,0,%1" : "=m" (*d) : "r" (d), "r" (v));
+#else
+ lzo_memops_TU1p d = (lzo_memops_TU1p) dd;
+ d[0] = LZO_BYTE((vv ) & 0xff);
+ d[1] = LZO_BYTE((vv >> 8) & 0xff);
+ d[2] = LZO_BYTE((vv >> 16) & 0xff);
+ d[3] = LZO_BYTE((vv >> 24) & 0xff);
+#endif
+}
+#if (LZO_OPT_UNALIGNED32) && (LZO_ABI_LITTLE_ENDIAN)
+#define LZO_MEMOPS_PUT_LE32(dd,vv) (* (lzo_memops_TU4p) (lzo_memops_TU0p) (dd) = (vv))
+#else
+#define LZO_MEMOPS_PUT_LE32(dd,vv) lzo_memops_put_le32(dd,vv)
+#endif
+
+__lzo_static_forceinline void lzo_memops_put_ne16(lzo_voidp dd, lzo_uint16_t vv)
+{
+ LZO_MEMOPS_COPY2(dd, &vv);
+}
+#if (LZO_OPT_UNALIGNED16)
+#define LZO_MEMOPS_PUT_NE16(dd,vv) (* (lzo_memops_TU2p) (lzo_memops_TU0p) (dd) = (vv))
+#else
+#define LZO_MEMOPS_PUT_NE16(dd,vv) lzo_memops_put_ne16(dd,vv)
+#endif
+
+__lzo_static_forceinline void lzo_memops_put_ne32(lzo_voidp dd, lzo_uint32_t vv)
+{
+ LZO_MEMOPS_COPY4(dd, &vv);
+}
+#if (LZO_OPT_UNALIGNED32)
+#define LZO_MEMOPS_PUT_NE32(dd,vv) (* (lzo_memops_TU4p) (lzo_memops_TU0p) (dd) = (vv))
+#else
+#define LZO_MEMOPS_PUT_NE32(dd,vv) lzo_memops_put_ne32(dd,vv)
+#endif
+
+lzo_unused_funcs_impl(void, lzo_memops_unused_funcs)(void)
+{
+ LZO_UNUSED_FUNC(lzo_memops_unused_funcs);
+ LZO_UNUSED_FUNC(lzo_memops_get_le16);
+ LZO_UNUSED_FUNC(lzo_memops_get_le32);
+ LZO_UNUSED_FUNC(lzo_memops_get_ne16);
+ LZO_UNUSED_FUNC(lzo_memops_get_ne32);
+ LZO_UNUSED_FUNC(lzo_memops_put_le16);
+ LZO_UNUSED_FUNC(lzo_memops_put_le32);
+ LZO_UNUSED_FUNC(lzo_memops_put_ne16);
+ LZO_UNUSED_FUNC(lzo_memops_put_ne32);
+}
+
+#endif /* already included */
+
+/* vim:set ts=4 sw=4 et: */
diff --git a/tools/z64compress/src/enc/lzo/lzo_mchw.ch b/tools/z64compress/src/enc/lzo/lzo_mchw.ch
new file mode 100644
index 0000000..94bedc3
--- /dev/null
+++ b/tools/z64compress/src/enc/lzo/lzo_mchw.ch
@@ -0,0 +1,222 @@
+/* lzo_mchw.ch -- matching functions using a window
+
+ This file is part of the LZO real-time data compression library.
+
+ Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer
+ All Rights Reserved.
+
+ The LZO library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of
+ the License, or (at your option) any later version.
+
+ The LZO library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with the LZO library; see the file COPYING.
+ If not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ Markus F.X.J. Oberhumer
+ <markus@oberhumer.com>
+ http://www.oberhumer.com/opensource/lzo/
+ */
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+typedef struct
+{
+ unsigned init;
+
+ lzo_uint look; /* bytes in lookahead buffer */
+
+ lzo_uint m_len;
+ lzo_uint m_off;
+
+ lzo_uint last_m_len;
+ lzo_uint last_m_off;
+
+ const lzo_bytep bp;
+ const lzo_bytep ip;
+ const lzo_bytep in;
+ const lzo_bytep in_end;
+ lzo_bytep out;
+
+ lzo_callback_p cb;
+
+ lzo_uint textsize; /* text size counter */
+ lzo_uint codesize; /* code size counter */
+ lzo_uint printcount; /* counter for reporting progress every 1K bytes */
+
+ /* some stats */
+ lzo_uint lit_bytes;
+ lzo_uint match_bytes;
+ lzo_uint rep_bytes;
+ lzo_uint lazy;
+
+#if defined(LZO1B)
+ lzo_uint r1_m_len;
+
+ /* some stats */
+ lzo_uint r1_r, m3_r, m2_m, m3_m;
+#endif
+
+#if defined(LZO1C)
+ lzo_uint r1_m_len;
+ lzo_bytep m3;
+
+ /* some stats */
+ lzo_uint r1_r, m3_r, m2_m, m3_m;
+#endif
+
+#if defined(LZO1F)
+ lzo_uint r1_lit;
+ lzo_uint r1_m_len;
+
+ /* some stats */
+ lzo_uint r1_r, m2_m, m3_m;
+#endif
+
+#if defined(LZO1X) || defined(LZO1Y) || defined(LZO1Z)
+ lzo_uint r1_lit;
+ lzo_uint r1_m_len;
+
+ /* some stats */
+ lzo_uint m1a_m, m1b_m, m2_m, m3_m, m4_m;
+ lzo_uint lit1_r, lit2_r, lit3_r;
+#endif
+
+#if defined(LZO2A)
+ /* some stats */
+ lzo_uint m1, m2, m3, m4;
+#endif
+}
+LZO_COMPRESS_T;
+
+
+#define getbyte(c) ((c).ip < (c).in_end ? *((c).ip)++ : (-1))
+
+#include "lzo_swd.ch"
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+static int
+init_match ( LZO_COMPRESS_T *c, lzo_swd_p s,
+ const lzo_bytep dict, lzo_uint dict_len,
+ lzo_uint32_t flags )
+{
+ int r;
+
+ assert(!c->init);
+ c->init = 1;
+
+ s->c = c;
+
+ c->last_m_len = c->last_m_off = 0;
+
+ c->textsize = c->codesize = c->printcount = 0;
+ c->lit_bytes = c->match_bytes = c->rep_bytes = 0;
+ c->lazy = 0;
+
+ r = swd_init(s,dict,dict_len);
+ if (r != LZO_E_OK)
+ {
+ swd_exit(s);
+ return r;
+ }
+
+ s->use_best_off = (flags & 1) ? 1 : 0;
+ return LZO_E_OK;
+}
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+static int
+find_match ( LZO_COMPRESS_T *c, lzo_swd_p s,
+ lzo_uint this_len, lzo_uint skip )
+{
+ assert(c->init);
+
+ if (skip > 0)
+ {
+ assert(this_len >= skip);
+ swd_accept(s, this_len - skip);
+ c->textsize += this_len - skip + 1;
+ }
+ else
+ {
+ assert(this_len <= 1);
+ c->textsize += this_len - skip;
+ }
+
+ s->m_len = SWD_THRESHOLD;
+ s->m_off = 0;
+#ifdef SWD_BEST_OFF
+ if (s->use_best_off)
+ lzo_memset(s->best_pos,0,sizeof(s->best_pos));
+#endif
+ swd_findbest(s);
+ c->m_len = s->m_len;
+ c->m_off = s->m_off;
+
+ swd_getbyte(s);
+
+ if (s->b_char < 0)
+ {
+ c->look = 0;
+ c->m_len = 0;
+ swd_exit(s);
+ }
+ else
+ {
+ c->look = s->look + 1;
+ }
+ c->bp = c->ip - c->look;
+
+#if 0
+ /* brute force match search */
+ if (c->m_len > SWD_THRESHOLD && c->m_len + 1 <= c->look)
+ {
+ const lzo_bytep ip = c->bp;
+ const lzo_bytep m = c->bp - c->m_off;
+ const lzo_bytep in = c->in;
+
+ if (ip - in > s->swd_n)
+ in = ip - s->swd_n;
+ for (;;)
+ {
+ while (*in != *ip)
+ in++;
+ if (in == ip)
+ break;
+ if (in != m)
+ if (lzo_memcmp(in,ip,c->m_len+1) == 0)
+ printf("%p %p %p %5d\n",in,ip,m,c->m_len);
+ in++;
+ }
+ }
+#endif
+
+ if (c->cb && c->cb->nprogress && c->textsize > c->printcount)
+ {
+ (*c->cb->nprogress)(c->cb, c->textsize, c->codesize, 0);
+ c->printcount += 1024;
+ }
+
+ return LZO_E_OK;
+}
+
+
+/* vim:set ts=4 sw=4 et: */
diff --git a/tools/z64compress/src/enc/lzo/lzo_ptr.c b/tools/z64compress/src/enc/lzo/lzo_ptr.c
new file mode 100644
index 0000000..d2def7f
--- /dev/null
+++ b/tools/z64compress/src/enc/lzo/lzo_ptr.c
@@ -0,0 +1,80 @@
+/* lzo_ptr.c -- low-level pointer constructs
+
+ This file is part of the LZO real-time data compression library.
+
+ Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer
+ All Rights Reserved.
+
+ The LZO library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of
+ the License, or (at your option) any later version.
+
+ The LZO library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with the LZO library; see the file COPYING.
+ If not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ Markus F.X.J. Oberhumer
+ <markus@oberhumer.com>
+ http://www.oberhumer.com/opensource/lzo/
+ */
+
+
+#include "lzo_conf.h"
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+LZO_PUBLIC(lzo_uintptr_t)
+__lzo_ptr_linear(const lzo_voidp ptr)
+{
+ lzo_uintptr_t p;
+
+#if (LZO_ARCH_I086)
+#error "LZO_ARCH_I086 is unsupported"
+#elif (LZO_MM_PVP)
+#error "LZO_MM_PVP is unsupported"
+#else
+ p = (lzo_uintptr_t) PTR_LINEAR(ptr);
+#endif
+
+ return p;
+}
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+LZO_PUBLIC(unsigned)
+__lzo_align_gap(const lzo_voidp ptr, lzo_uint size)
+{
+#if (__LZO_UINTPTR_T_IS_POINTER)
+#error "__LZO_UINTPTR_T_IS_POINTER is unsupported"
+#else
+ lzo_uintptr_t p, n;
+ if (size < 2) return 0;
+ p = __lzo_ptr_linear(ptr);
+#if 0
+ n = (((p + size - 1) / size) * size) - p;
+#else
+ if ((size & (size - 1)) != 0)
+ return 0;
+ n = size; n = ((p + n - 1) & ~(n - 1)) - p;
+#endif
+#endif
+ assert((long)n >= 0);
+ assert(n <= size);
+ return (unsigned)n;
+}
+
+
+/* vim:set ts=4 sw=4 et: */
diff --git a/tools/z64compress/src/enc/lzo/lzo_ptr.h b/tools/z64compress/src/enc/lzo/lzo_ptr.h
new file mode 100644
index 0000000..8d7ee44
--- /dev/null
+++ b/tools/z64compress/src/enc/lzo/lzo_ptr.h
@@ -0,0 +1,123 @@
+/* lzo_ptr.h -- low-level pointer constructs
+
+ This file is part of the LZO real-time data compression library.
+
+ Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer
+ All Rights Reserved.
+
+ The LZO library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of
+ the License, or (at your option) any later version.
+
+ The LZO library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with the LZO library; see the file COPYING.
+ If not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ Markus F.X.J. Oberhumer
+ <markus@oberhumer.com>
+ http://www.oberhumer.com/opensource/lzo/
+ */
+
+
+/* WARNING: this file should *not* be used by applications. It is
+ part of the implementation of the library and is subject
+ to change.
+ */
+
+
+#ifndef __LZO_PTR_H
+#define __LZO_PTR_H 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+/* Always use the safe (=integral) version for pointer-comparisons.
+ * The compiler should optimize away the additional casts anyway.
+ *
+ * Note that this only works if the representation and ordering
+ * of the pointer and the integral is the same (at bit level).
+ */
+
+#if (LZO_ARCH_I086)
+#error "LZO_ARCH_I086 is unsupported"
+#elif (LZO_MM_PVP)
+#error "LZO_MM_PVP is unsupported"
+#else
+#define PTR(a) ((lzo_uintptr_t) (a))
+#define PTR_LINEAR(a) PTR(a)
+#define PTR_ALIGNED_4(a) ((PTR_LINEAR(a) & 3) == 0)
+#define PTR_ALIGNED_8(a) ((PTR_LINEAR(a) & 7) == 0)
+#define PTR_ALIGNED2_4(a,b) (((PTR_LINEAR(a) | PTR_LINEAR(b)) & 3) == 0)
+#define PTR_ALIGNED2_8(a,b) (((PTR_LINEAR(a) | PTR_LINEAR(b)) & 7) == 0)
+#endif
+
+#define PTR_LT(a,b) (PTR(a) < PTR(b))
+#define PTR_GE(a,b) (PTR(a) >= PTR(b))
+#define PTR_DIFF(a,b) (PTR(a) - PTR(b))
+#define pd(a,b) ((lzo_uint) ((a)-(b)))
+
+
+LZO_EXTERN(lzo_uintptr_t)
+__lzo_ptr_linear(const lzo_voidp ptr);
+
+
+typedef union
+{
+ char a_char;
+ unsigned char a_uchar;
+ short a_short;
+ unsigned short a_ushort;
+ int a_int;
+ unsigned int a_uint;
+ long a_long;
+ unsigned long a_ulong;
+ lzo_int a_lzo_int;
+ lzo_uint a_lzo_uint;
+ lzo_xint a_lzo_xint;
+ lzo_int16_t a_lzo_int16_t;
+ lzo_uint16_t a_lzo_uint16_t;
+ lzo_int32_t a_lzo_int32_t;
+ lzo_uint32_t a_lzo_uint32_t;
+#if defined(lzo_uint64_t)
+ lzo_int64_t a_lzo_int64_t;
+ lzo_uint64_t a_lzo_uint64_t;
+#endif
+ size_t a_size_t;
+ ptrdiff_t a_ptrdiff_t;
+ lzo_uintptr_t a_lzo_uintptr_t;
+ void * a_void_p;
+ char * a_char_p;
+ unsigned char * a_uchar_p;
+ const void * a_c_void_p;
+ const char * a_c_char_p;
+ const unsigned char * a_c_uchar_p;
+ lzo_voidp a_lzo_voidp;
+ lzo_bytep a_lzo_bytep;
+ const lzo_voidp a_c_lzo_voidp;
+ const lzo_bytep a_c_lzo_bytep;
+}
+lzo_full_align_t;
+
+
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* already included */
+
+
+/* vim:set ts=4 sw=4 et: */
diff --git a/tools/z64compress/src/enc/lzo/lzo_supp.h b/tools/z64compress/src/enc/lzo/lzo_supp.h
new file mode 100644
index 0000000..a2c9021
--- /dev/null
+++ b/tools/z64compress/src/enc/lzo/lzo_supp.h
@@ -0,0 +1,3678 @@
+/* lzo_supp.h -- architecture, OS and compiler specific defines
+
+ This file is part of the LZO real-time data compression library.
+
+ Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer
+ All Rights Reserved.
+
+ The LZO library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of
+ the License, or (at your option) any later version.
+
+ The LZO library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with the LZO library; see the file COPYING.
+ If not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ Markus F.X.J. Oberhumer
+ <markus@oberhumer.com>
+ http://www.oberhumer.com/opensource/lzo/
+ */
+
+
+#ifndef __LZO_SUPP_H_INCLUDED
+#define __LZO_SUPP_H_INCLUDED 1
+#if (LZO_CFG_NO_CONFIG_HEADER)
+#elif defined(LZO_CFG_CONFIG_HEADER)
+#else
+#if !(LZO_CFG_AUTO_NO_HEADERS)
+#if (LZO_LIBC_NAKED)
+#elif (LZO_LIBC_FREESTANDING)
+# define HAVE_LIMITS_H 1
+# define HAVE_STDARG_H 1
+# define HAVE_STDDEF_H 1
+#elif (LZO_LIBC_MOSTLY_FREESTANDING)
+# define HAVE_LIMITS_H 1
+# define HAVE_SETJMP_H 1
+# define HAVE_STDARG_H 1
+# define HAVE_STDDEF_H 1
+# define HAVE_STDIO_H 1
+# define HAVE_STRING_H 1
+#else
+#define STDC_HEADERS 1
+#define HAVE_ASSERT_H 1
+#define HAVE_CTYPE_H 1
+#define HAVE_DIRENT_H 1
+#define HAVE_ERRNO_H 1
+#define HAVE_FCNTL_H 1
+#define HAVE_FLOAT_H 1
+#define HAVE_LIMITS_H 1
+#define HAVE_MALLOC_H 1
+#define HAVE_MEMORY_H 1
+#define HAVE_SETJMP_H 1
+#define HAVE_SIGNAL_H 1
+#define HAVE_STDARG_H 1
+#define HAVE_STDDEF_H 1
+#define HAVE_STDIO_H 1
+#define HAVE_STDLIB_H 1
+#define HAVE_STRING_H 1
+#define HAVE_TIME_H 1
+#define HAVE_UNISTD_H 1
+#define HAVE_UTIME_H 1
+#define HAVE_SYS_STAT_H 1
+#define HAVE_SYS_TIME_H 1
+#define HAVE_SYS_TYPES_H 1
+#if (LZO_OS_POSIX)
+# if (LZO_OS_POSIX_AIX)
+# define HAVE_SYS_RESOURCE_H 1
+# elif (LZO_OS_POSIX_DARWIN || LZO_OS_POSIX_FREEBSD || LZO_OS_POSIX_NETBSD || LZO_OS_POSIX_OPENBSD)
+# define HAVE_STRINGS_H 1
+# undef HAVE_MALLOC_H
+# elif (LZO_OS_POSIX_HPUX || LZO_OS_POSIX_INTERIX)
+# define HAVE_ALLOCA_H 1
+# elif (LZO_OS_POSIX_DARWIN && LZO_LIBC_MSL)
+# undef HAVE_SYS_TIME_H
+# undef HAVE_SYS_TYPES_H
+# elif (LZO_OS_POSIX_SOLARIS || LZO_OS_POSIX_SUNOS)
+# define HAVE_ALLOCA_H 1
+# endif
+# if (LZO_LIBC_DIETLIBC || LZO_LIBC_GLIBC || LZO_LIBC_UCLIBC)
+# define HAVE_STRINGS_H 1
+# define HAVE_SYS_MMAN_H 1
+# define HAVE_SYS_RESOURCE_H 1
+# define HAVE_SYS_WAIT_H 1
+# endif
+# if (LZO_LIBC_NEWLIB)
+# undef HAVE_STRINGS_H
+# endif
+#elif (LZO_OS_CYGWIN)
+# define HAVE_IO_H 1
+#elif (LZO_OS_EMX)
+# define HAVE_ALLOCA_H 1
+# define HAVE_IO_H 1
+#elif (LZO_ARCH_M68K && LZO_OS_TOS && LZO_CC_GNUC)
+# if !defined(__MINT__)
+# undef HAVE_MALLOC_H
+# endif
+#elif (LZO_ARCH_M68K && LZO_OS_TOS && (LZO_CC_PUREC || LZO_CC_TURBOC))
+# undef HAVE_DIRENT_H
+# undef HAVE_FCNTL_H
+# undef HAVE_MALLOC_H
+# undef HAVE_MEMORY_H
+# undef HAVE_UNISTD_H
+# undef HAVE_UTIME_H
+# undef HAVE_SYS_STAT_H
+# undef HAVE_SYS_TIME_H
+# undef HAVE_SYS_TYPES_H
+#endif
+#if (LZO_OS_DOS16 || LZO_OS_DOS32 || LZO_OS_OS2 || LZO_OS_OS216 || LZO_OS_WIN16 || LZO_OS_WIN32 || LZO_OS_WIN64)
+#define HAVE_CONIO_H 1
+#define HAVE_DIRECT_H 1
+#define HAVE_DOS_H 1
+#define HAVE_IO_H 1
+#define HAVE_SHARE_H 1
+#if (LZO_CC_AZTECC)
+# undef HAVE_CONIO_H
+# undef HAVE_DIRECT_H
+# undef HAVE_DIRENT_H
+# undef HAVE_MALLOC_H
+# undef HAVE_SHARE_H
+# undef HAVE_UNISTD_H
+# undef HAVE_UTIME_H
+# undef HAVE_SYS_STAT_H
+# undef HAVE_SYS_TIME_H
+# undef HAVE_SYS_TYPES_H
+#elif (LZO_CC_BORLANDC)
+# undef HAVE_UNISTD_H
+# undef HAVE_SYS_TIME_H
+# if (LZO_OS_WIN32 || LZO_OS_WIN64)
+# undef HAVE_DIRENT_H
+# endif
+# if (__BORLANDC__ < 0x0400)
+# undef HAVE_DIRENT_H
+# undef HAVE_UTIME_H
+# endif
+#elif (LZO_CC_DMC)
+# undef HAVE_DIRENT_H
+# undef HAVE_UNISTD_H
+# define HAVE_SYS_DIRENT_H 1
+#elif (LZO_OS_DOS32 && LZO_CC_GNUC) && defined(__DJGPP__)
+#elif (LZO_OS_DOS32 && LZO_CC_HIGHC)
+# define HAVE_ALLOCA_H 1
+# undef HAVE_DIRENT_H
+# undef HAVE_UNISTD_H
+#elif (LZO_CC_IBMC && LZO_OS_OS2)
+# undef HAVE_DOS_H
+# undef HAVE_DIRENT_H
+# undef HAVE_UNISTD_H
+# undef HAVE_UTIME_H
+# undef HAVE_SYS_TIME_H
+# define HAVE_SYS_UTIME_H 1
+#elif (LZO_CC_CLANG_C2 || LZO_CC_CLANG_MSC || LZO_CC_GHS || LZO_CC_INTELC_MSC || LZO_CC_MSC)
+# undef HAVE_DIRENT_H
+# undef HAVE_UNISTD_H
+# undef HAVE_UTIME_H
+# undef HAVE_SYS_TIME_H
+# define HAVE_SYS_UTIME_H 1
+#elif (LZO_CC_LCCWIN32)
+# undef HAVE_DIRENT_H
+# undef HAVE_DOS_H
+# undef HAVE_UNISTD_H
+# undef HAVE_SYS_TIME_H
+#elif (LZO_OS_WIN32 && LZO_CC_GNUC) && defined(__MINGW32__)
+# undef HAVE_UTIME_H
+# define HAVE_SYS_UTIME_H 1
+#elif (LZO_OS_WIN32 && LZO_LIBC_MSL)
+# define HAVE_ALLOCA_H 1
+# undef HAVE_DOS_H
+# undef HAVE_SHARE_H
+# undef HAVE_SYS_TIME_H
+#elif (LZO_CC_NDPC)
+# undef HAVE_DIRENT_H
+# undef HAVE_DOS_H
+# undef HAVE_UNISTD_H
+# undef HAVE_UTIME_H
+# undef HAVE_SYS_TIME_H
+#elif (LZO_CC_PACIFICC)
+# undef HAVE_DIRECT_H
+# undef HAVE_DIRENT_H
+# undef HAVE_FCNTL_H
+# undef HAVE_IO_H
+# undef HAVE_MALLOC_H
+# undef HAVE_MEMORY_H
+# undef HAVE_SHARE_H
+# undef HAVE_UNISTD_H
+# undef HAVE_UTIME_H
+# undef HAVE_SYS_STAT_H
+# undef HAVE_SYS_TIME_H
+# undef HAVE_SYS_TYPES_H
+#elif (LZO_OS_WIN32 && LZO_CC_PELLESC)
+# undef HAVE_DIRENT_H
+# undef HAVE_DOS_H
+# undef HAVE_MALLOC_H
+# undef HAVE_SHARE_H
+# undef HAVE_UNISTD_H
+# undef HAVE_UTIME_H
+# undef HAVE_SYS_TIME_H
+# if (__POCC__ < 280)
+# else
+# define HAVE_SYS_UTIME_H 1
+# endif
+#elif (LZO_OS_WIN32 && LZO_CC_PGI) && defined(__MINGW32__)
+# undef HAVE_UTIME_H
+# define HAVE_SYS_UTIME_H 1
+#elif (LZO_OS_WIN32 && LZO_CC_GNUC) && defined(__PW32__)
+#elif (LZO_CC_SYMANTECC)
+# undef HAVE_DIRENT_H
+# undef HAVE_UNISTD_H
+# if (__SC__ < 0x700)
+# undef HAVE_UTIME_H
+# undef HAVE_SYS_TIME_H
+# endif
+#elif (LZO_CC_TOPSPEEDC)
+# undef HAVE_DIRENT_H
+# undef HAVE_UNISTD_H
+# undef HAVE_UTIME_H
+# undef HAVE_SYS_STAT_H
+# undef HAVE_SYS_TIME_H
+# undef HAVE_SYS_TYPES_H
+#elif (LZO_CC_TURBOC)
+# undef HAVE_UNISTD_H
+# undef HAVE_SYS_TIME_H
+# undef HAVE_SYS_TYPES_H
+# if (LZO_OS_WIN32 || LZO_OS_WIN64)
+# undef HAVE_DIRENT_H
+# endif
+# if (__TURBOC__ < 0x0200)
+# undef HAVE_SIGNAL_H
+# endif
+# if (__TURBOC__ < 0x0400)
+# undef HAVE_DIRECT_H
+# undef HAVE_DIRENT_H
+# undef HAVE_MALLOC_H
+# undef HAVE_MEMORY_H
+# undef HAVE_UTIME_H
+# endif
+#elif (LZO_CC_WATCOMC)
+# undef HAVE_DIRENT_H
+# undef HAVE_UTIME_H
+# undef HAVE_SYS_TIME_H
+# define HAVE_SYS_UTIME_H 1
+# if (__WATCOMC__ < 950)
+# undef HAVE_UNISTD_H
+# endif
+#elif (LZO_CC_ZORTECHC)
+# undef HAVE_DIRENT_H
+# undef HAVE_MEMORY_H
+# undef HAVE_UNISTD_H
+# undef HAVE_UTIME_H
+# undef HAVE_SYS_TIME_H
+#endif
+#endif
+#if (LZO_OS_CONSOLE)
+# undef HAVE_DIRENT_H
+#endif
+#if (LZO_OS_EMBEDDED)
+# undef HAVE_DIRENT_H
+#endif
+#if (LZO_LIBC_ISOC90 || LZO_LIBC_ISOC99)
+# undef HAVE_DIRENT_H
+# undef HAVE_FCNTL_H
+# undef HAVE_MALLOC_H
+# undef HAVE_UNISTD_H
+# undef HAVE_UTIME_H
+# undef HAVE_SYS_STAT_H
+# undef HAVE_SYS_TIME_H
+# undef HAVE_SYS_TYPES_H
+#endif
+#if (LZO_LIBC_GLIBC >= 0x020100ul)
+# define HAVE_STDINT_H 1
+#elif (LZO_LIBC_DIETLIBC)
+# undef HAVE_STDINT_H
+#elif (LZO_LIBC_UCLIBC)
+# define HAVE_STDINT_H 1
+#elif (LZO_CC_BORLANDC) && (__BORLANDC__ >= 0x560)
+# undef HAVE_STDINT_H
+#elif (LZO_CC_DMC) && (__DMC__ >= 0x825)
+# define HAVE_STDINT_H 1
+#endif
+#if (HAVE_SYS_TIME_H && HAVE_TIME_H)
+# define TIME_WITH_SYS_TIME 1
+#endif
+#endif
+#endif
+#if !(LZO_CFG_AUTO_NO_FUNCTIONS)
+#if (LZO_LIBC_NAKED)
+#elif (LZO_LIBC_FREESTANDING)
+#elif (LZO_LIBC_MOSTLY_FREESTANDING)
+# define HAVE_LONGJMP 1
+# define HAVE_MEMCMP 1
+# define HAVE_MEMCPY 1
+# define HAVE_MEMMOVE 1
+# define HAVE_MEMSET 1
+# define HAVE_SETJMP 1
+#else
+#define HAVE_ACCESS 1
+#define HAVE_ALLOCA 1
+#define HAVE_ATEXIT 1
+#define HAVE_ATOI 1
+#define HAVE_ATOL 1
+#define HAVE_CHMOD 1
+#define HAVE_CHOWN 1
+#define HAVE_CTIME 1
+#define HAVE_DIFFTIME 1
+#define HAVE_FILENO 1
+#define HAVE_FSTAT 1
+#define HAVE_GETENV 1
+#define HAVE_GETTIMEOFDAY 1
+#define HAVE_GMTIME 1
+#define HAVE_ISATTY 1
+#define HAVE_LOCALTIME 1
+#define HAVE_LONGJMP 1
+#define HAVE_LSTAT 1
+#define HAVE_MEMCMP 1
+#define HAVE_MEMCPY 1
+#define HAVE_MEMMOVE 1
+#define HAVE_MEMSET 1
+#define HAVE_MKDIR 1
+#define HAVE_MKTIME 1
+#define HAVE_QSORT 1
+#define HAVE_RAISE 1
+#define HAVE_RMDIR 1
+#define HAVE_SETJMP 1
+#define HAVE_SIGNAL 1
+#define HAVE_SNPRINTF 1
+#define HAVE_STAT 1
+#define HAVE_STRCHR 1
+#define HAVE_STRDUP 1
+#define HAVE_STRERROR 1
+#define HAVE_STRFTIME 1
+#define HAVE_STRRCHR 1
+#define HAVE_STRSTR 1
+#define HAVE_TIME 1
+#define HAVE_UMASK 1
+#define HAVE_UTIME 1
+#define HAVE_VSNPRINTF 1
+#if (LZO_OS_BEOS || LZO_OS_CYGWIN || LZO_OS_POSIX || LZO_OS_QNX || LZO_OS_VMS)
+# define HAVE_STRCASECMP 1
+# define HAVE_STRNCASECMP 1
+#elif (LZO_OS_WIN32 && LZO_CC_GNUC) && defined(__PW32__)
+# define HAVE_STRCASECMP 1
+# define HAVE_STRNCASECMP 1
+#else
+# define HAVE_STRICMP 1
+# define HAVE_STRNICMP 1
+#endif
+#if (LZO_OS_POSIX)
+# if (LZO_OS_POSIX_AIX)
+# define HAVE_GETRUSAGE 1
+# elif (LZO_OS_POSIX_DARWIN && LZO_LIBC_MSL)
+# undef HAVE_CHOWN
+# undef HAVE_LSTAT
+# elif (LZO_OS_POSIX_UNICOS)
+# undef HAVE_ALLOCA
+# undef HAVE_SNPRINTF
+# undef HAVE_VSNPRINTF
+# endif
+# if (LZO_CC_TINYC)
+# undef HAVE_ALLOCA
+# endif
+# if (LZO_LIBC_DIETLIBC || LZO_LIBC_GLIBC || LZO_LIBC_UCLIBC)
+# define HAVE_GETRUSAGE 1
+# define HAVE_GETPAGESIZE 1
+# define HAVE_MMAP 1
+# define HAVE_MPROTECT 1
+# define HAVE_MUNMAP 1
+# endif
+#elif (LZO_OS_CYGWIN)
+# if (LZO_CC_GNUC < 0x025a00ul)
+# undef HAVE_GETTIMEOFDAY
+# undef HAVE_LSTAT
+# endif
+# if (LZO_CC_GNUC < 0x025f00ul)
+# undef HAVE_SNPRINTF
+# undef HAVE_VSNPRINTF
+# endif
+#elif (LZO_OS_EMX)
+# undef HAVE_CHOWN
+# undef HAVE_LSTAT
+#elif (LZO_ARCH_M68K && LZO_OS_TOS && LZO_CC_GNUC)
+# if !defined(__MINT__)
+# undef HAVE_SNPRINTF
+# undef HAVE_VSNPRINTF
+# endif
+#elif (LZO_ARCH_M68K && LZO_OS_TOS && (LZO_CC_PUREC || LZO_CC_TURBOC))
+# undef HAVE_ALLOCA
+# undef HAVE_ACCESS
+# undef HAVE_CHMOD
+# undef HAVE_CHOWN
+# undef HAVE_FSTAT
+# undef HAVE_GETTIMEOFDAY
+# undef HAVE_LSTAT
+# undef HAVE_SNPRINTF
+# undef HAVE_UMASK
+# undef HAVE_UTIME
+# undef HAVE_VSNPRINTF
+#endif
+#if (LZO_OS_DOS16 || LZO_OS_DOS32 || LZO_OS_OS2 || LZO_OS_OS216 || LZO_OS_WIN16 || LZO_OS_WIN32 || LZO_OS_WIN64)
+#undef HAVE_CHOWN
+#undef HAVE_GETTIMEOFDAY
+#undef HAVE_LSTAT
+#undef HAVE_UMASK
+#if (LZO_CC_AZTECC)
+# undef HAVE_ALLOCA
+# undef HAVE_DIFFTIME
+# undef HAVE_FSTAT
+# undef HAVE_STRDUP
+# undef HAVE_SNPRINTF
+# undef HAVE_UTIME
+# undef HAVE_VSNPRINTF
+#elif (LZO_CC_BORLANDC)
+# if (__BORLANDC__ < 0x0400)
+# undef HAVE_ALLOCA
+# undef HAVE_UTIME
+# endif
+# if ((__BORLANDC__ < 0x0410) && LZO_OS_WIN16)
+# undef HAVE_ALLOCA
+# endif
+# if (__BORLANDC__ < 0x0550)
+# undef HAVE_SNPRINTF
+# undef HAVE_VSNPRINTF
+# endif
+#elif (LZO_CC_DMC)
+# if (LZO_OS_WIN16)
+# undef HAVE_ALLOCA
+# endif
+# define snprintf _snprintf
+# define vsnprintf _vsnprintf
+#elif (LZO_OS_DOS32 && LZO_CC_GNUC) && defined(__DJGPP__)
+# undef HAVE_SNPRINTF
+# undef HAVE_VSNPRINTF
+#elif (LZO_OS_DOS32 && LZO_CC_HIGHC)
+# undef HAVE_SNPRINTF
+# undef HAVE_VSNPRINTF
+#elif (LZO_CC_GHS)
+# undef HAVE_ALLOCA
+# ifndef snprintf
+# define snprintf _snprintf
+# endif
+# ifndef vsnprintf
+# define vsnprintf _vsnprintf
+# endif
+#elif (LZO_CC_IBMC)
+# undef HAVE_SNPRINTF
+# undef HAVE_VSNPRINTF
+#elif (LZO_CC_CLANG_MSC || LZO_CC_INTELC_MSC)
+# ifndef snprintf
+# define snprintf _snprintf
+# endif
+# ifndef vsnprintf
+# define vsnprintf _vsnprintf
+# endif
+#elif (LZO_CC_LCCWIN32)
+# define utime _utime
+#elif (LZO_CC_CLANG_C2 || LZO_CC_MSC)
+# if (_MSC_VER < 600)
+# undef HAVE_STRFTIME
+# endif
+# if (_MSC_VER < 700)
+# undef HAVE_SNPRINTF
+# undef HAVE_VSNPRINTF
+# elif (_MSC_VER < 1500)
+# ifndef snprintf
+# define snprintf _snprintf
+# endif
+# ifndef vsnprintf
+# define vsnprintf _vsnprintf
+# endif
+# elif (_MSC_VER < 1900)
+# ifndef snprintf
+# define snprintf _snprintf
+# endif
+# endif
+# if ((_MSC_VER < 800) && LZO_OS_WIN16)
+# undef HAVE_ALLOCA
+# endif
+# if (LZO_ARCH_I086) && defined(__cplusplus)
+# undef HAVE_LONGJMP
+# undef HAVE_SETJMP
+# endif
+#elif (LZO_OS_WIN32 && LZO_CC_GNUC) && defined(__MINGW32__)
+# if (LZO_CC_GNUC < 0x025f00ul)
+# undef HAVE_SNPRINTF
+# undef HAVE_VSNPRINTF
+# else
+# define snprintf _snprintf
+# define vsnprintf _vsnprintf
+# endif
+#elif (LZO_OS_WIN32 && LZO_LIBC_MSL)
+# if (__MSL__ < 0x8000ul)
+# undef HAVE_CHMOD
+# endif
+#elif (LZO_CC_NDPC)
+# undef HAVE_ALLOCA
+# undef HAVE_SNPRINTF
+# undef HAVE_STRNICMP
+# undef HAVE_UTIME
+# undef HAVE_VSNPRINTF
+# if defined(__cplusplus)
+# undef HAVE_STAT
+# endif
+#elif (LZO_CC_PACIFICC)
+# undef HAVE_ACCESS
+# undef HAVE_ALLOCA
+# undef HAVE_CHMOD
+# undef HAVE_DIFFTIME
+# undef HAVE_FSTAT
+# undef HAVE_MKTIME
+# undef HAVE_RAISE
+# undef HAVE_SNPRINTF
+# undef HAVE_STRFTIME
+# undef HAVE_UTIME
+# undef HAVE_VSNPRINTF
+#elif (LZO_OS_WIN32 && LZO_CC_PELLESC)
+# if (__POCC__ < 280)
+# define alloca _alloca
+# undef HAVE_UTIME
+# endif
+#elif (LZO_OS_WIN32 && LZO_CC_PGI) && defined(__MINGW32__)
+# define snprintf _snprintf
+# define vsnprintf _vsnprintf
+#elif (LZO_OS_WIN32 && LZO_CC_GNUC) && defined(__PW32__)
+# undef HAVE_SNPRINTF
+# undef HAVE_VSNPRINTF
+#elif (LZO_CC_SYMANTECC)
+# if (LZO_OS_WIN16 && (LZO_MM_MEDIUM || LZO_MM_LARGE || LZO_MM_HUGE))
+# undef HAVE_ALLOCA
+# endif
+# if (__SC__ < 0x600)
+# undef HAVE_SNPRINTF
+# undef HAVE_VSNPRINTF
+# else
+# define snprintf _snprintf
+# define vsnprintf _vsnprintf
+# endif
+# if (__SC__ < 0x700)
+# undef HAVE_DIFFTIME
+# undef HAVE_UTIME
+# endif
+#elif (LZO_CC_TOPSPEEDC)
+# undef HAVE_SNPRINTF
+# undef HAVE_VSNPRINTF
+#elif (LZO_CC_TURBOC)
+# undef HAVE_ALLOCA
+# undef HAVE_SNPRINTF
+# undef HAVE_VSNPRINTF
+# if (__TURBOC__ < 0x0200)
+# undef HAVE_RAISE
+# undef HAVE_SIGNAL
+# endif
+# if (__TURBOC__ < 0x0295)
+# undef HAVE_MKTIME
+# undef HAVE_STRFTIME
+# endif
+# if (__TURBOC__ < 0x0400)
+# undef HAVE_UTIME
+# endif
+#elif (LZO_CC_WATCOMC)
+# if (__WATCOMC__ < 1100)
+# undef HAVE_SNPRINTF
+# undef HAVE_VSNPRINTF
+# elif (__WATCOMC__ < 1200)
+# define snprintf _snprintf
+# define vsnprintf _vsnprintf
+# endif
+#elif (LZO_CC_ZORTECHC)
+# if (LZO_OS_WIN16 && (LZO_MM_MEDIUM || LZO_MM_LARGE || LZO_MM_HUGE))
+# undef HAVE_ALLOCA
+# endif
+# undef HAVE_DIFFTIME
+# undef HAVE_SNPRINTF
+# undef HAVE_UTIME
+# undef HAVE_VSNPRINTF
+#endif
+#endif
+#if (LZO_OS_CONSOLE)
+# undef HAVE_ACCESS
+# undef HAVE_CHMOD
+# undef HAVE_CHOWN
+# undef HAVE_GETTIMEOFDAY
+# undef HAVE_LSTAT
+# undef HAVE_TIME
+# undef HAVE_UMASK
+# undef HAVE_UTIME
+#endif
+#if (LZO_LIBC_ISOC90 || LZO_LIBC_ISOC99)
+# undef HAVE_ACCESS
+# undef HAVE_CHMOD
+# undef HAVE_CHOWN
+# undef HAVE_FILENO
+# undef HAVE_FSTAT
+# undef HAVE_GETTIMEOFDAY
+# undef HAVE_LSTAT
+# undef HAVE_STAT
+# undef HAVE_UMASK
+# undef HAVE_UTIME
+# if 1
+# undef HAVE_ALLOCA
+# undef HAVE_ISATTY
+# undef HAVE_MKDIR
+# undef HAVE_RMDIR
+# undef HAVE_STRDUP
+# undef HAVE_STRICMP
+# undef HAVE_STRNICMP
+# endif
+#endif
+#endif
+#endif
+#if !(LZO_CFG_AUTO_NO_SIZES)
+#if !defined(SIZEOF_SHORT) && defined(LZO_SIZEOF_SHORT)
+# define SIZEOF_SHORT LZO_SIZEOF_SHORT
+#endif
+#if !defined(SIZEOF_INT) && defined(LZO_SIZEOF_INT)
+# define SIZEOF_INT LZO_SIZEOF_INT
+#endif
+#if !defined(SIZEOF_LONG) && defined(LZO_SIZEOF_LONG)
+# define SIZEOF_LONG LZO_SIZEOF_LONG
+#endif
+#if !defined(SIZEOF_LONG_LONG) && defined(LZO_SIZEOF_LONG_LONG)
+# define SIZEOF_LONG_LONG LZO_SIZEOF_LONG_LONG
+#endif
+#if !defined(SIZEOF___INT32) && defined(LZO_SIZEOF___INT32)
+# define SIZEOF___INT32 LZO_SIZEOF___INT32
+#endif
+#if !defined(SIZEOF___INT64) && defined(LZO_SIZEOF___INT64)
+# define SIZEOF___INT64 LZO_SIZEOF___INT64
+#endif
+#if !defined(SIZEOF_VOID_P) && defined(LZO_SIZEOF_VOID_P)
+# define SIZEOF_VOID_P LZO_SIZEOF_VOID_P
+#endif
+#if !defined(SIZEOF_SIZE_T) && defined(LZO_SIZEOF_SIZE_T)
+# define SIZEOF_SIZE_T LZO_SIZEOF_SIZE_T
+#endif
+#if !defined(SIZEOF_PTRDIFF_T) && defined(LZO_SIZEOF_PTRDIFF_T)
+# define SIZEOF_PTRDIFF_T LZO_SIZEOF_PTRDIFF_T
+#endif
+#endif
+#if (HAVE_SIGNAL) && !defined(RETSIGTYPE)
+# define RETSIGTYPE void
+#endif
+#endif
+#if !(LZO_CFG_SKIP_LZO_TYPES)
+#if 1 && !defined(lzo_signo_t) && defined(__linux__) && defined(__dietlibc__) && (LZO_SIZEOF_INT != 4)
+# define lzo_signo_t lzo_int32e_t
+#endif
+#if !defined(lzo_signo_t)
+# define lzo_signo_t int
+#endif
+#if defined(__cplusplus)
+extern "C" {
+#endif
+#if (LZO_BROKEN_CDECL_ALT_SYNTAX)
+typedef void __lzo_cdecl_sighandler (*lzo_sighandler_t)(lzo_signo_t);
+#else
+typedef void (__lzo_cdecl_sighandler *lzo_sighandler_t)(lzo_signo_t);
+#endif
+#if defined(__cplusplus)
+}
+#endif
+#endif
+#endif
+#if defined(LZO_WANT_ACC_INCD_H)
+# undef LZO_WANT_ACC_INCD_H
+#ifndef __LZO_INCD_H_INCLUDED
+#define __LZO_INCD_H_INCLUDED 1
+#if (LZO_LIBC_NAKED)
+#ifndef __LZO_FALLBACK_STDDEF_H_INCLUDED
+#define __LZO_FALLBACK_STDDEF_H_INCLUDED 1
+#if defined(__PTRDIFF_TYPE__)
+typedef __PTRDIFF_TYPE__ lzo_fallback_ptrdiff_t;
+#elif defined(__MIPS_PSX2__)
+typedef int lzo_fallback_ptrdiff_t;
+#else
+typedef long lzo_fallback_ptrdiff_t;
+#endif
+#if defined(__SIZE_TYPE__)
+typedef __SIZE_TYPE__ lzo_fallback_size_t;
+#elif defined(__MIPS_PSX2__)
+typedef unsigned int lzo_fallback_size_t;
+#else
+typedef unsigned long lzo_fallback_size_t;
+#endif
+#if !defined(ptrdiff_t)
+typedef lzo_fallback_ptrdiff_t ptrdiff_t;
+#ifndef _PTRDIFF_T_DEFINED
+#define _PTRDIFF_T_DEFINED 1
+#endif
+#endif
+#if !defined(size_t)
+typedef lzo_fallback_size_t size_t;
+#ifndef _SIZE_T_DEFINED
+#define _SIZE_T_DEFINED 1
+#endif
+#endif
+#if !defined(__cplusplus) && !defined(wchar_t)
+typedef unsigned short wchar_t;
+#ifndef _WCHAR_T_DEFINED
+#define _WCHAR_T_DEFINED 1
+#endif
+#endif
+#ifndef NULL
+#if defined(__cplusplus) && defined(__GNUC__) && (__GNUC__ >= 4)
+#define NULL __null
+#elif defined(__cplusplus)
+#define NULL 0
+#else
+#define NULL ((void*)0)
+#endif
+#endif
+#ifndef offsetof
+#define offsetof(s,m) ((size_t)((ptrdiff_t)&(((s*)0)->m)))
+#endif
+#endif
+#elif (LZO_LIBC_FREESTANDING)
+# if defined(HAVE_STDDEF_H) && (HAVE_STDDEF_H+0)
+# include <stddef.h>
+# endif
+# if defined(HAVE_STDINT_H) && (HAVE_STDINT_H+0)
+# include <stdint.h>
+# endif
+#elif (LZO_LIBC_MOSTLY_FREESTANDING)
+# if defined(HAVE_STDIO_H) && (HAVE_STDIO_H+0)
+# include <stdio.h>
+# endif
+# if defined(HAVE_STDDEF_H) && (HAVE_STDDEF_H+0)
+# include <stddef.h>
+# endif
+# if defined(HAVE_STDINT_H) && (HAVE_STDINT_H+0)
+# include <stdint.h>
+# endif
+#else
+#include <stdio.h>
+#if defined(HAVE_TIME_H) && (HAVE_TIME_H+0) && defined(__MSL__) && defined(__cplusplus)
+# include <time.h>
+#endif
+#if defined(HAVE_SYS_TYPES_H) && (HAVE_SYS_TYPES_H+0)
+# include <sys/types.h>
+#endif
+#if defined(HAVE_SYS_STAT_H) && (HAVE_SYS_STAT_H+0)
+# include <sys/stat.h>
+#endif
+#if defined(STDC_HEADERS) && (STDC_HEADERS+0)
+# include <stdlib.h>
+#elif defined(HAVE_STDLIB_H) && (HAVE_STDLIB_H+0)
+# include <stdlib.h>
+#endif
+#include <stddef.h>
+#if defined(HAVE_STRING_H) && (HAVE_STRING_H+0)
+# if defined(STDC_HEADERS) && (STDC_HEADERS+0)
+# elif defined(HAVE_MEMORY_H) && (HAVE_MEMORY_H+0)
+# include <memory.h>
+# endif
+# include <string.h>
+#endif
+#if defined(HAVE_STRINGS_H) && (HAVE_STRINGS_H+0)
+# include <strings.h>
+#endif
+#if defined(HAVE_INTTYPES_H) && (HAVE_INTTYPES_H+0)
+# include <inttypes.h>
+#endif
+#if defined(HAVE_STDINT_H) && (HAVE_STDINT_H+0)
+# include <stdint.h>
+#endif
+#if defined(HAVE_UNISTD_H) && (HAVE_UNISTD_H+0)
+# include <unistd.h>
+#endif
+#endif
+#endif
+#endif
+#if defined(LZO_WANT_ACC_INCE_H)
+# undef LZO_WANT_ACC_INCE_H
+#ifndef __LZO_INCE_H_INCLUDED
+#define __LZO_INCE_H_INCLUDED 1
+#if (LZO_LIBC_NAKED)
+#elif (LZO_LIBC_FREESTANDING)
+#elif (LZO_LIBC_MOSTLY_FREESTANDING)
+# if (HAVE_SETJMP_H)
+# include <setjmp.h>
+# endif
+#else
+#if (HAVE_STDARG_H)
+# include <stdarg.h>
+#endif
+#if (HAVE_CTYPE_H)
+# include <ctype.h>
+#endif
+#if (HAVE_ERRNO_H)
+# include <errno.h>
+#endif
+#if (HAVE_MALLOC_H)
+# include <malloc.h>
+#endif
+#if (HAVE_ALLOCA_H)
+# include <alloca.h>
+#endif
+#if (HAVE_FCNTL_H)
+# include <fcntl.h>
+#endif
+#if (HAVE_DIRENT_H)
+# include <dirent.h>
+#endif
+#if (HAVE_SETJMP_H)
+# include <setjmp.h>
+#endif
+#if (HAVE_SIGNAL_H)
+# include <signal.h>
+#endif
+#if (HAVE_SYS_TIME_H && HAVE_TIME_H)
+# include <sys/time.h>
+# include <time.h>
+#elif (HAVE_TIME_H)
+# include <time.h>
+#endif
+#if (HAVE_UTIME_H)
+# include <utime.h>
+#elif (HAVE_SYS_UTIME_H)
+# include <sys/utime.h>
+#endif
+#if (HAVE_IO_H)
+# include <io.h>
+#endif
+#if (HAVE_DOS_H)
+# include <dos.h>
+#endif
+#if (HAVE_DIRECT_H)
+# include <direct.h>
+#endif
+#if (HAVE_SHARE_H)
+# include <share.h>
+#endif
+#if (LZO_CC_NDPC)
+# include <os.h>
+#endif
+#if defined(__TOS__) && (defined(__PUREC__) || defined(__TURBOC__))
+# include <ext.h>
+#endif
+#endif
+#endif
+#endif
+#if defined(LZO_WANT_ACC_INCI_H)
+# undef LZO_WANT_ACC_INCI_H
+#ifndef __LZO_INCI_H_INCLUDED
+#define __LZO_INCI_H_INCLUDED 1
+#if (LZO_LIBC_NAKED)
+#elif (LZO_LIBC_FREESTANDING)
+#elif (LZO_LIBC_MOSTLY_FREESTANDING)
+#else
+#if (LZO_OS_TOS && (LZO_CC_PUREC || LZO_CC_TURBOC))
+# include <tos.h>
+#elif (LZO_HAVE_WINDOWS_H)
+# if 1 && !defined(WIN32_LEAN_AND_MEAN)
+# define WIN32_LEAN_AND_MEAN 1
+# endif
+# if 1 && !defined(_WIN32_WINNT)
+# define _WIN32_WINNT 0x0400
+# endif
+# include <windows.h>
+# if (LZO_CC_BORLANDC || LZO_CC_TURBOC)
+# include <dir.h>
+# endif
+#elif (LZO_OS_DOS16 || LZO_OS_DOS32 || LZO_OS_WIN16)
+# if (LZO_CC_AZTECC)
+# include <model.h>
+# include <stat.h>
+# elif (LZO_CC_BORLANDC || LZO_CC_TURBOC)
+# include <alloc.h>
+# include <dir.h>
+# elif (LZO_OS_DOS32 && LZO_CC_GNUC) && defined(__DJGPP__)
+# include <sys/exceptn.h>
+# elif (LZO_CC_PACIFICC)
+# include <unixio.h>
+# include <stat.h>
+# include <sys.h>
+# elif (LZO_CC_WATCOMC)
+# include <i86.h>
+# endif
+#elif (LZO_OS_OS216)
+# if (LZO_CC_WATCOMC)
+# include <i86.h>
+# endif
+#endif
+#if (HAVE_SYS_MMAN_H)
+# include <sys/mman.h>
+#endif
+#if (HAVE_SYS_RESOURCE_H)
+# include <sys/resource.h>
+#endif
+#if (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16)
+# if defined(FP_OFF)
+# define LZO_PTR_FP_OFF(x) FP_OFF(x)
+# elif defined(_FP_OFF)
+# define LZO_PTR_FP_OFF(x) _FP_OFF(x)
+# else
+# define LZO_PTR_FP_OFF(x) (((const unsigned __far*)&(x))[0])
+# endif
+# if defined(FP_SEG)
+# define LZO_PTR_FP_SEG(x) FP_SEG(x)
+# elif defined(_FP_SEG)
+# define LZO_PTR_FP_SEG(x) _FP_SEG(x)
+# else
+# define LZO_PTR_FP_SEG(x) (((const unsigned __far*)&(x))[1])
+# endif
+# if defined(MK_FP)
+# define LZO_PTR_MK_FP(s,o) MK_FP(s,o)
+# elif defined(_MK_FP)
+# define LZO_PTR_MK_FP(s,o) _MK_FP(s,o)
+# else
+# define LZO_PTR_MK_FP(s,o) ((void __far*)(((unsigned long)(s)<<16)+(unsigned)(o)))
+# endif
+# if 0
+# undef LZO_PTR_FP_OFF
+# undef LZO_PTR_FP_SEG
+# undef LZO_PTR_MK_FP
+# define LZO_PTR_FP_OFF(x) (((const unsigned __far*)&(x))[0])
+# define LZO_PTR_FP_SEG(x) (((const unsigned __far*)&(x))[1])
+# define LZO_PTR_MK_FP(s,o) ((void __far*)(((unsigned long)(s)<<16)+(unsigned)(o)))
+# endif
+#endif
+#endif
+#endif
+#endif
+#if defined(LZO_WANT_ACC_LIB_H)
+# undef LZO_WANT_ACC_LIB_H
+#ifndef __LZO_LIB_H_INCLUDED
+#define __LZO_LIB_H_INCLUDED 1
+#if !defined(__LZOLIB_FUNCNAME)
+# define __LZOLIB_FUNCNAME(f) f
+#endif
+#if !defined(LZOLIB_EXTERN)
+# define LZOLIB_EXTERN(r,f) extern r __LZOLIB_FUNCNAME(f)
+#endif
+#if !defined(LZOLIB_EXTERN_NOINLINE)
+# if defined(__lzo_noinline)
+# define LZOLIB_EXTERN_NOINLINE(r,f) extern __lzo_noinline r __LZOLIB_FUNCNAME(f)
+# else
+# define LZOLIB_EXTERN_NOINLINE(r,f) extern r __LZOLIB_FUNCNAME(f)
+# endif
+#endif
+#if (LZO_SIZEOF_LONG > LZO_SIZEOF_VOID_P)
+# define lzolib_handle_t long
+#else
+# define lzolib_handle_t lzo_intptr_t
+#endif
+#if 0
+LZOLIB_EXTERN(int, lzo_ascii_digit) (int);
+LZOLIB_EXTERN(int, lzo_ascii_islower) (int);
+LZOLIB_EXTERN(int, lzo_ascii_isupper) (int);
+LZOLIB_EXTERN(int, lzo_ascii_tolower) (int);
+LZOLIB_EXTERN(int, lzo_ascii_toupper) (int);
+LZOLIB_EXTERN(int, lzo_ascii_utolower) (int);
+LZOLIB_EXTERN(int, lzo_ascii_utoupper) (int);
+#endif
+#define lzo_ascii_isdigit(c) ((LZO_ICAST(unsigned, c) - 48) < 10)
+#define lzo_ascii_islower(c) ((LZO_ICAST(unsigned, c) - 97) < 26)
+#define lzo_ascii_isupper(c) ((LZO_ICAST(unsigned, c) - 65) < 26)
+#define lzo_ascii_tolower(c) (LZO_ICAST(int, c) + (lzo_ascii_isupper(c) << 5))
+#define lzo_ascii_toupper(c) (LZO_ICAST(int, c) - (lzo_ascii_islower(c) << 5))
+#define lzo_ascii_utolower(c) lzo_ascii_tolower(LZO_ITRUNC(unsigned char, c))
+#define lzo_ascii_utoupper(c) lzo_ascii_toupper(LZO_ITRUNC(unsigned char, c))
+#ifndef lzo_hsize_t
+#if (LZO_HAVE_MM_HUGE_PTR)
+# define lzo_hsize_t unsigned long
+# define lzo_hvoid_p void __huge *
+# define lzo_hchar_p char __huge *
+# define lzo_hchar_pp char __huge * __huge *
+# define lzo_hbyte_p unsigned char __huge *
+#else
+# define lzo_hsize_t size_t
+# define lzo_hvoid_p void *
+# define lzo_hchar_p char *
+# define lzo_hchar_pp char **
+# define lzo_hbyte_p unsigned char *
+#endif
+#endif
+LZOLIB_EXTERN(lzo_hvoid_p, lzo_halloc) (lzo_hsize_t);
+LZOLIB_EXTERN(void, lzo_hfree) (lzo_hvoid_p);
+#if (LZO_OS_DOS16 || LZO_OS_OS216)
+LZOLIB_EXTERN(void __far*, lzo_dos_alloc) (unsigned long);
+LZOLIB_EXTERN(int, lzo_dos_free) (void __far*);
+#endif
+LZOLIB_EXTERN(int, lzo_hmemcmp) (const lzo_hvoid_p, const lzo_hvoid_p, lzo_hsize_t);
+LZOLIB_EXTERN(lzo_hvoid_p, lzo_hmemcpy) (lzo_hvoid_p, const lzo_hvoid_p, lzo_hsize_t);
+LZOLIB_EXTERN(lzo_hvoid_p, lzo_hmemmove) (lzo_hvoid_p, const lzo_hvoid_p, lzo_hsize_t);
+LZOLIB_EXTERN(lzo_hvoid_p, lzo_hmemset) (lzo_hvoid_p, int, lzo_hsize_t);
+LZOLIB_EXTERN(lzo_hsize_t, lzo_hstrlen) (const lzo_hchar_p);
+LZOLIB_EXTERN(int, lzo_hstrcmp) (const lzo_hchar_p, const lzo_hchar_p);
+LZOLIB_EXTERN(int, lzo_hstrncmp)(const lzo_hchar_p, const lzo_hchar_p, lzo_hsize_t);
+LZOLIB_EXTERN(int, lzo_ascii_hstricmp) (const lzo_hchar_p, const lzo_hchar_p);
+LZOLIB_EXTERN(int, lzo_ascii_hstrnicmp)(const lzo_hchar_p, const lzo_hchar_p, lzo_hsize_t);
+LZOLIB_EXTERN(int, lzo_ascii_hmemicmp) (const lzo_hvoid_p, const lzo_hvoid_p, lzo_hsize_t);
+LZOLIB_EXTERN(lzo_hchar_p, lzo_hstrstr) (const lzo_hchar_p, const lzo_hchar_p);
+LZOLIB_EXTERN(lzo_hchar_p, lzo_ascii_hstristr) (const lzo_hchar_p, const lzo_hchar_p);
+LZOLIB_EXTERN(lzo_hvoid_p, lzo_hmemmem) (const lzo_hvoid_p, lzo_hsize_t, const lzo_hvoid_p, lzo_hsize_t);
+LZOLIB_EXTERN(lzo_hvoid_p, lzo_ascii_hmemimem) (const lzo_hvoid_p, lzo_hsize_t, const lzo_hvoid_p, lzo_hsize_t);
+LZOLIB_EXTERN(lzo_hchar_p, lzo_hstrcpy) (lzo_hchar_p, const lzo_hchar_p);
+LZOLIB_EXTERN(lzo_hchar_p, lzo_hstrcat) (lzo_hchar_p, const lzo_hchar_p);
+LZOLIB_EXTERN(lzo_hsize_t, lzo_hstrlcpy) (lzo_hchar_p, const lzo_hchar_p, lzo_hsize_t);
+LZOLIB_EXTERN(lzo_hsize_t, lzo_hstrlcat) (lzo_hchar_p, const lzo_hchar_p, lzo_hsize_t);
+LZOLIB_EXTERN(int, lzo_hstrscpy) (lzo_hchar_p, const lzo_hchar_p, lzo_hsize_t);
+LZOLIB_EXTERN(int, lzo_hstrscat) (lzo_hchar_p, const lzo_hchar_p, lzo_hsize_t);
+LZOLIB_EXTERN(lzo_hchar_p, lzo_hstrccpy) (lzo_hchar_p, const lzo_hchar_p, int);
+LZOLIB_EXTERN(lzo_hvoid_p, lzo_hmemccpy) (lzo_hvoid_p, const lzo_hvoid_p, int, lzo_hsize_t);
+LZOLIB_EXTERN(lzo_hchar_p, lzo_hstrchr) (const lzo_hchar_p, int);
+LZOLIB_EXTERN(lzo_hchar_p, lzo_hstrrchr) (const lzo_hchar_p, int);
+LZOLIB_EXTERN(lzo_hchar_p, lzo_ascii_hstrichr) (const lzo_hchar_p, int);
+LZOLIB_EXTERN(lzo_hchar_p, lzo_ascii_hstrrichr) (const lzo_hchar_p, int);
+LZOLIB_EXTERN(lzo_hvoid_p, lzo_hmemchr) (const lzo_hvoid_p, int, lzo_hsize_t);
+LZOLIB_EXTERN(lzo_hvoid_p, lzo_hmemrchr) (const lzo_hvoid_p, int, lzo_hsize_t);
+LZOLIB_EXTERN(lzo_hvoid_p, lzo_ascii_hmemichr) (const lzo_hvoid_p, int, lzo_hsize_t);
+LZOLIB_EXTERN(lzo_hvoid_p, lzo_ascii_hmemrichr) (const lzo_hvoid_p, int, lzo_hsize_t);
+LZOLIB_EXTERN(lzo_hsize_t, lzo_hstrspn) (const lzo_hchar_p, const lzo_hchar_p);
+LZOLIB_EXTERN(lzo_hsize_t, lzo_hstrrspn) (const lzo_hchar_p, const lzo_hchar_p);
+LZOLIB_EXTERN(lzo_hsize_t, lzo_hstrcspn) (const lzo_hchar_p, const lzo_hchar_p);
+LZOLIB_EXTERN(lzo_hsize_t, lzo_hstrrcspn) (const lzo_hchar_p, const lzo_hchar_p);
+LZOLIB_EXTERN(lzo_hchar_p, lzo_hstrpbrk) (const lzo_hchar_p, const lzo_hchar_p);
+LZOLIB_EXTERN(lzo_hchar_p, lzo_hstrrpbrk) (const lzo_hchar_p, const lzo_hchar_p);
+LZOLIB_EXTERN(lzo_hchar_p, lzo_hstrsep) (lzo_hchar_pp, const lzo_hchar_p);
+LZOLIB_EXTERN(lzo_hchar_p, lzo_hstrrsep) (lzo_hchar_pp, const lzo_hchar_p);
+LZOLIB_EXTERN(lzo_hchar_p, lzo_ascii_hstrlwr) (lzo_hchar_p);
+LZOLIB_EXTERN(lzo_hchar_p, lzo_ascii_hstrupr) (lzo_hchar_p);
+LZOLIB_EXTERN(lzo_hvoid_p, lzo_ascii_hmemlwr) (lzo_hvoid_p, lzo_hsize_t);
+LZOLIB_EXTERN(lzo_hvoid_p, lzo_ascii_hmemupr) (lzo_hvoid_p, lzo_hsize_t);
+LZOLIB_EXTERN(lzo_hsize_t, lzo_hfread) (void *, lzo_hvoid_p, lzo_hsize_t);
+LZOLIB_EXTERN(lzo_hsize_t, lzo_hfwrite) (void *, const lzo_hvoid_p, lzo_hsize_t);
+#if (LZO_HAVE_MM_HUGE_PTR)
+LZOLIB_EXTERN(long, lzo_hread) (int, lzo_hvoid_p, long);
+LZOLIB_EXTERN(long, lzo_hwrite) (int, const lzo_hvoid_p, long);
+#endif
+LZOLIB_EXTERN(long, lzo_safe_hread) (int, lzo_hvoid_p, long);
+LZOLIB_EXTERN(long, lzo_safe_hwrite) (int, const lzo_hvoid_p, long);
+LZOLIB_EXTERN(unsigned, lzo_ua_get_be16) (const lzo_hvoid_p);
+LZOLIB_EXTERN(lzo_uint32l_t, lzo_ua_get_be24) (const lzo_hvoid_p);
+LZOLIB_EXTERN(lzo_uint32l_t, lzo_ua_get_be32) (const lzo_hvoid_p);
+LZOLIB_EXTERN(void, lzo_ua_set_be16) (lzo_hvoid_p, unsigned);
+LZOLIB_EXTERN(void, lzo_ua_set_be24) (lzo_hvoid_p, lzo_uint32l_t);
+LZOLIB_EXTERN(void, lzo_ua_set_be32) (lzo_hvoid_p, lzo_uint32l_t);
+LZOLIB_EXTERN(unsigned, lzo_ua_get_le16) (const lzo_hvoid_p);
+LZOLIB_EXTERN(lzo_uint32l_t, lzo_ua_get_le24) (const lzo_hvoid_p);
+LZOLIB_EXTERN(lzo_uint32l_t, lzo_ua_get_le32) (const lzo_hvoid_p);
+LZOLIB_EXTERN(void, lzo_ua_set_le16) (lzo_hvoid_p, unsigned);
+LZOLIB_EXTERN(void, lzo_ua_set_le24) (lzo_hvoid_p, lzo_uint32l_t);
+LZOLIB_EXTERN(void, lzo_ua_set_le32) (lzo_hvoid_p, lzo_uint32l_t);
+#if defined(lzo_int64l_t)
+LZOLIB_EXTERN(lzo_uint64l_t, lzo_ua_get_be64) (const lzo_hvoid_p);
+LZOLIB_EXTERN(void, lzo_ua_set_be64) (lzo_hvoid_p, lzo_uint64l_t);
+LZOLIB_EXTERN(lzo_uint64l_t, lzo_ua_get_le64) (const lzo_hvoid_p);
+LZOLIB_EXTERN(void, lzo_ua_set_le64) (lzo_hvoid_p, lzo_uint64l_t);
+#endif
+LZOLIB_EXTERN_NOINLINE(short, lzo_vget_short) (short, int);
+LZOLIB_EXTERN_NOINLINE(int, lzo_vget_int) (int, int);
+LZOLIB_EXTERN_NOINLINE(long, lzo_vget_long) (long, int);
+#if defined(lzo_int64l_t)
+LZOLIB_EXTERN_NOINLINE(lzo_int64l_t, lzo_vget_lzo_int64l_t) (lzo_int64l_t, int);
+#endif
+LZOLIB_EXTERN_NOINLINE(lzo_hsize_t, lzo_vget_lzo_hsize_t) (lzo_hsize_t, int);
+#if !(LZO_CFG_NO_FLOAT)
+LZOLIB_EXTERN_NOINLINE(float, lzo_vget_float) (float, int);
+#endif
+#if !(LZO_CFG_NO_DOUBLE)
+LZOLIB_EXTERN_NOINLINE(double, lzo_vget_double) (double, int);
+#endif
+LZOLIB_EXTERN_NOINLINE(lzo_hvoid_p, lzo_vget_lzo_hvoid_p) (lzo_hvoid_p, int);
+LZOLIB_EXTERN_NOINLINE(const lzo_hvoid_p, lzo_vget_lzo_hvoid_cp) (const lzo_hvoid_p, int);
+#if !defined(LZO_FN_PATH_MAX)
+#if (LZO_OS_DOS16 || LZO_OS_WIN16)
+# define LZO_FN_PATH_MAX 143
+#elif (LZO_OS_DOS32 || LZO_OS_OS2 || LZO_OS_OS216 || LZO_OS_WIN32 || LZO_OS_WIN64)
+# define LZO_FN_PATH_MAX 259
+#elif (LZO_OS_TOS)
+# define LZO_FN_PATH_MAX 259
+#endif
+#endif
+#if !defined(LZO_FN_PATH_MAX)
+# define LZO_FN_PATH_MAX 1023
+#endif
+#if !defined(LZO_FN_NAME_MAX)
+#if (LZO_OS_DOS16 || LZO_OS_WIN16)
+# define LZO_FN_NAME_MAX 12
+#elif (LZO_ARCH_M68K && LZO_OS_TOS && (LZO_CC_PUREC || LZO_CC_TURBOC))
+# define LZO_FN_NAME_MAX 12
+#elif (LZO_OS_DOS32 && LZO_CC_GNUC) && defined(__DJGPP__)
+#elif (LZO_OS_DOS32)
+# define LZO_FN_NAME_MAX 12
+#endif
+#endif
+#if !defined(LZO_FN_NAME_MAX)
+# define LZO_FN_NAME_MAX LZO_FN_PATH_MAX
+#endif
+#define LZO_FNMATCH_NOESCAPE 1
+#define LZO_FNMATCH_PATHNAME 2
+#define LZO_FNMATCH_PATHSTAR 4
+#define LZO_FNMATCH_PERIOD 8
+#define LZO_FNMATCH_ASCII_CASEFOLD 16
+LZOLIB_EXTERN(int, lzo_fnmatch) (const lzo_hchar_p, const lzo_hchar_p, int);
+#undef __LZOLIB_USE_OPENDIR
+#if (HAVE_DIRENT_H || LZO_CC_WATCOMC)
+# define __LZOLIB_USE_OPENDIR 1
+# if (LZO_OS_DOS32 && defined(__BORLANDC__))
+# elif (LZO_OS_DOS32 && LZO_CC_GNUC) && defined(__DJGPP__)
+# elif (LZO_OS_OS2 || LZO_OS_OS216)
+# elif (LZO_ARCH_M68K && LZO_OS_TOS && LZO_CC_GNUC)
+# elif (LZO_OS_WIN32 && !(LZO_HAVE_WINDOWS_H))
+# elif (LZO_OS_DOS16 || LZO_OS_DOS32 || LZO_OS_OS2 || LZO_OS_OS216 || LZO_OS_TOS || LZO_OS_WIN16 || LZO_OS_WIN32 || LZO_OS_WIN64)
+# undef __LZOLIB_USE_OPENDIR
+# endif
+#endif
+typedef struct
+{
+#if defined(__LZOLIB_USE_OPENDIR)
+ void* u_dirp;
+# if (LZO_CC_WATCOMC)
+ unsigned short f_time;
+ unsigned short f_date;
+ unsigned long f_size;
+# endif
+ char f_name[LZO_FN_NAME_MAX+1];
+#elif (LZO_OS_WIN32 || LZO_OS_WIN64)
+ lzolib_handle_t u_handle;
+ unsigned f_attr;
+ unsigned f_size_low;
+ unsigned f_size_high;
+ char f_name[LZO_FN_NAME_MAX+1];
+#elif (LZO_OS_DOS16 || LZO_OS_DOS32 || LZO_OS_TOS || LZO_OS_WIN16)
+ char u_dta[21];
+ unsigned char f_attr;
+ unsigned short f_time;
+ unsigned short f_date;
+ unsigned short f_size_low;
+ unsigned short f_size_high;
+ char f_name[LZO_FN_NAME_MAX+1];
+ char u_dirp;
+#else
+ void* u_dirp;
+ char f_name[LZO_FN_NAME_MAX+1];
+#endif
+} lzo_dir_t;
+#ifndef lzo_dir_p
+#define lzo_dir_p lzo_dir_t *
+#endif
+LZOLIB_EXTERN(int, lzo_opendir) (lzo_dir_p, const char*);
+LZOLIB_EXTERN(int, lzo_readdir) (lzo_dir_p);
+LZOLIB_EXTERN(int, lzo_closedir) (lzo_dir_p);
+#if (LZO_CC_GNUC) && (defined(__CYGWIN__) || defined(__MINGW32__))
+# define lzo_alloca(x) __builtin_alloca((x))
+#elif (LZO_CC_GNUC) && (LZO_OS_CONSOLE_PS2)
+# define lzo_alloca(x) __builtin_alloca((x))
+#elif (LZO_CC_BORLANDC || LZO_CC_LCC) && defined(__linux__)
+#elif (HAVE_ALLOCA)
+# define lzo_alloca(x) LZO_STATIC_CAST(void *, alloca((x)))
+#endif
+#if (LZO_OS_DOS32 && LZO_CC_GNUC) && defined(__DJGPP__)
+# define lzo_stackavail() stackavail()
+#elif (LZO_ARCH_I086 && LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0410))
+# define lzo_stackavail() stackavail()
+#elif (LZO_ARCH_I086 && LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0400))
+# if (LZO_OS_WIN16) && (LZO_MM_TINY || LZO_MM_SMALL || LZO_MM_MEDIUM)
+# else
+# define lzo_stackavail() stackavail()
+# endif
+#elif ((LZO_ARCH_I086 || LZO_ARCH_I386) && (LZO_CC_DMC || LZO_CC_SYMANTECC))
+# define lzo_stackavail() stackavail()
+#elif ((LZO_ARCH_I086) && LZO_CC_MSC && (_MSC_VER >= 700))
+# define lzo_stackavail() _stackavail()
+#elif ((LZO_ARCH_I086) && LZO_CC_MSC)
+# define lzo_stackavail() stackavail()
+#elif ((LZO_ARCH_I086 || LZO_ARCH_I386) && LZO_CC_TURBOC && (__TURBOC__ >= 0x0450))
+# define lzo_stackavail() stackavail()
+#elif (LZO_ARCH_I086 && LZO_CC_TURBOC && (__TURBOC__ >= 0x0400))
+ LZO_EXTERN_C size_t __cdecl stackavail(void);
+# define lzo_stackavail() stackavail()
+#elif ((LZO_ARCH_I086 || LZO_ARCH_I386) && (LZO_CC_WATCOMC))
+# define lzo_stackavail() stackavail()
+#elif (LZO_ARCH_I086 && LZO_CC_ZORTECHC)
+# define lzo_stackavail() _chkstack()
+#endif
+LZOLIB_EXTERN(lzo_intptr_t, lzo_get_osfhandle) (int);
+LZOLIB_EXTERN(const char *, lzo_getenv) (const char *);
+LZOLIB_EXTERN(int, lzo_isatty) (int);
+LZOLIB_EXTERN(int, lzo_mkdir) (const char*, unsigned);
+LZOLIB_EXTERN(int, lzo_rmdir) (const char*);
+LZOLIB_EXTERN(int, lzo_response) (int*, char***);
+LZOLIB_EXTERN(int, lzo_set_binmode) (int, int);
+#if defined(lzo_int32e_t)
+LZOLIB_EXTERN(lzo_int32e_t, lzo_muldiv32s) (lzo_int32e_t, lzo_int32e_t, lzo_int32e_t);
+LZOLIB_EXTERN(lzo_uint32e_t, lzo_muldiv32u) (lzo_uint32e_t, lzo_uint32e_t, lzo_uint32e_t);
+#endif
+LZOLIB_EXTERN(void, lzo_wildargv) (int*, char***);
+LZOLIB_EXTERN_NOINLINE(void, lzo_debug_break) (void);
+LZOLIB_EXTERN_NOINLINE(void, lzo_debug_nop) (void);
+LZOLIB_EXTERN_NOINLINE(int, lzo_debug_align_check_query) (void);
+LZOLIB_EXTERN_NOINLINE(int, lzo_debug_align_check_enable) (int);
+LZOLIB_EXTERN_NOINLINE(unsigned, lzo_debug_running_on_qemu) (void);
+LZOLIB_EXTERN_NOINLINE(unsigned, lzo_debug_running_on_valgrind) (void);
+#if defined(lzo_int32e_t)
+LZOLIB_EXTERN(int, lzo_tsc_read) (lzo_uint32e_t*);
+#endif
+struct lzo_pclock_handle_t;
+struct lzo_pclock_t;
+typedef struct lzo_pclock_handle_t lzo_pclock_handle_t;
+typedef struct lzo_pclock_t lzo_pclock_t;
+#ifndef lzo_pclock_handle_p
+#define lzo_pclock_handle_p lzo_pclock_handle_t *
+#endif
+#ifndef lzo_pclock_p
+#define lzo_pclock_p lzo_pclock_t *
+#endif
+#define LZO_PCLOCK_REALTIME 0
+#define LZO_PCLOCK_MONOTONIC 1
+#define LZO_PCLOCK_PROCESS_CPUTIME_ID 2
+#define LZO_PCLOCK_THREAD_CPUTIME_ID 3
+typedef int (*lzo_pclock_gettime_t) (lzo_pclock_handle_p, lzo_pclock_p);
+struct lzo_pclock_handle_t {
+ lzolib_handle_t h;
+ int mode;
+ int read_error;
+ const char* name;
+ lzo_pclock_gettime_t gettime;
+#if defined(lzo_int64l_t)
+ lzo_uint64l_t ticks_base;
+#endif
+};
+struct lzo_pclock_t {
+#if defined(lzo_int64l_t)
+ lzo_int64l_t tv_sec;
+#else
+ lzo_int32l_t tv_sec_high;
+ lzo_uint32l_t tv_sec_low;
+#endif
+ lzo_uint32l_t tv_nsec;
+};
+LZOLIB_EXTERN(int, lzo_pclock_open) (lzo_pclock_handle_p, int);
+LZOLIB_EXTERN(int, lzo_pclock_open_default) (lzo_pclock_handle_p);
+LZOLIB_EXTERN(int, lzo_pclock_close) (lzo_pclock_handle_p);
+LZOLIB_EXTERN(void, lzo_pclock_read) (lzo_pclock_handle_p, lzo_pclock_p);
+#if !(LZO_CFG_NO_DOUBLE)
+LZOLIB_EXTERN(double, lzo_pclock_get_elapsed) (lzo_pclock_handle_p, const lzo_pclock_p, const lzo_pclock_p);
+#endif
+LZOLIB_EXTERN(int, lzo_pclock_flush_cpu_cache) (lzo_pclock_handle_p, unsigned);
+struct lzo_getopt_t;
+typedef struct lzo_getopt_t lzo_getopt_t;
+#ifndef lzo_getopt_p
+#define lzo_getopt_p lzo_getopt_t *
+#endif
+struct lzo_getopt_longopt_t;
+typedef struct lzo_getopt_longopt_t lzo_getopt_longopt_t;
+#ifndef lzo_getopt_longopt_p
+#define lzo_getopt_longopt_p lzo_getopt_longopt_t *
+#endif
+struct lzo_getopt_longopt_t {
+ const char* name;
+ int has_arg;
+ int* flag;
+ int val;
+};
+typedef void (*lzo_getopt_opterr_t)(lzo_getopt_p, const char*, void *);
+struct lzo_getopt_t {
+ void *user;
+ const char *progname;
+ int bad_option;
+ char *optarg;
+ lzo_getopt_opterr_t opterr;
+ int optind;
+ int optopt;
+ int errcount;
+ int argc; char** argv;
+ int eof; int shortpos;
+ int pending_rotate_first, pending_rotate_middle;
+};
+enum { LZO_GETOPT_NO_ARG, LZO_GETOPT_REQUIRED_ARG, LZO_GETOPT_OPTIONAL_ARG, LZO_GETOPT_EXACT_ARG = 0x10 };
+enum { LZO_GETOPT_PERMUTE, LZO_GETOPT_RETURN_IN_ORDER, LZO_GETOPT_REQUIRE_ORDER };
+LZOLIB_EXTERN(void, lzo_getopt_init) (lzo_getopt_p g,
+ int start_argc, int argc, char** argv);
+LZOLIB_EXTERN(int, lzo_getopt) (lzo_getopt_p g,
+ const char* shortopts,
+ const lzo_getopt_longopt_p longopts,
+ int* longind);
+typedef struct {
+ lzo_uint32l_t seed;
+} lzo_rand31_t;
+#ifndef lzo_rand31_p
+#define lzo_rand31_p lzo_rand31_t *
+#endif
+LZOLIB_EXTERN(void, lzo_srand31) (lzo_rand31_p, lzo_uint32l_t);
+LZOLIB_EXTERN(lzo_uint32l_t, lzo_rand31) (lzo_rand31_p);
+#if defined(lzo_int64l_t)
+typedef struct {
+ lzo_uint64l_t seed;
+} lzo_rand48_t;
+#ifndef lzo_rand48_p
+#define lzo_rand48_p lzo_rand48_t *
+#endif
+LZOLIB_EXTERN(void, lzo_srand48) (lzo_rand48_p, lzo_uint32l_t);
+LZOLIB_EXTERN(lzo_uint32l_t, lzo_rand48) (lzo_rand48_p);
+LZOLIB_EXTERN(lzo_uint32l_t, lzo_rand48_r32) (lzo_rand48_p);
+#endif
+#if defined(lzo_int64l_t)
+typedef struct {
+ lzo_uint64l_t seed;
+} lzo_rand64_t;
+#ifndef lzo_rand64_p
+#define lzo_rand64_p lzo_rand64_t *
+#endif
+LZOLIB_EXTERN(void, lzo_srand64) (lzo_rand64_p, lzo_uint64l_t);
+LZOLIB_EXTERN(lzo_uint32l_t, lzo_rand64) (lzo_rand64_p);
+LZOLIB_EXTERN(lzo_uint32l_t, lzo_rand64_r32) (lzo_rand64_p);
+#endif
+typedef struct {
+ unsigned n;
+ lzo_uint32l_t s[624];
+} lzo_randmt_t;
+#ifndef lzo_randmt_p
+#define lzo_randmt_p lzo_randmt_t *
+#endif
+LZOLIB_EXTERN(void, lzo_srandmt) (lzo_randmt_p, lzo_uint32l_t);
+LZOLIB_EXTERN(lzo_uint32l_t, lzo_randmt) (lzo_randmt_p);
+LZOLIB_EXTERN(lzo_uint32l_t, lzo_randmt_r32) (lzo_randmt_p);
+#if defined(lzo_int64l_t)
+typedef struct {
+ unsigned n;
+ lzo_uint64l_t s[312];
+} lzo_randmt64_t;
+#ifndef lzo_randmt64_p
+#define lzo_randmt64_p lzo_randmt64_t *
+#endif
+LZOLIB_EXTERN(void, lzo_srandmt64) (lzo_randmt64_p, lzo_uint64l_t);
+LZOLIB_EXTERN(lzo_uint64l_t, lzo_randmt64_r64) (lzo_randmt64_p);
+#endif
+#define LZO_SPAWN_P_WAIT 0
+#define LZO_SPAWN_P_NOWAIT 1
+LZOLIB_EXTERN(int, lzo_spawnv) (int mode, const char* fn, const char* const * argv);
+LZOLIB_EXTERN(int, lzo_spawnvp) (int mode, const char* fn, const char* const * argv);
+LZOLIB_EXTERN(int, lzo_spawnve) (int mode, const char* fn, const char* const * argv, const char * const envp);
+#endif
+#endif
+#if defined(LZO_WANT_ACC_CXX_H)
+# undef LZO_WANT_ACC_CXX_H
+#ifndef __LZO_CXX_H_INCLUDED
+#define __LZO_CXX_H_INCLUDED 1
+#if defined(__cplusplus)
+#if defined(LZO_CXX_NOTHROW)
+#elif (LZO_CC_GNUC && (LZO_CC_GNUC < 0x020800ul))
+#elif (LZO_CC_BORLANDC && (__BORLANDC__ < 0x0450))
+#elif (LZO_CC_GHS && !defined(__EXCEPTIONS))
+#elif (LZO_CC_HIGHC)
+#elif (LZO_CC_MSC && (_MSC_VER < 1100))
+#elif (LZO_CC_NDPC)
+#elif (LZO_CC_TURBOC)
+#elif (LZO_CC_WATCOMC && !defined(_CPPUNWIND))
+#elif (LZO_CC_ZORTECHC)
+#else
+# define LZO_CXX_NOTHROW throw()
+#endif
+#if !defined(LZO_CXX_NOTHROW)
+# define LZO_CXX_NOTHROW /*empty*/
+#endif
+#if defined(__LZO_CXX_DO_NEW)
+#elif (LZO_CC_GHS || LZO_CC_NDPC || LZO_CC_PGI)
+# define __LZO_CXX_DO_NEW { return 0; }
+#elif ((LZO_CC_BORLANDC || LZO_CC_TURBOC) && LZO_ARCH_I086)
+# define __LZO_CXX_DO_NEW { return 0; }
+#else
+# define __LZO_CXX_DO_NEW ;
+#endif
+#if defined(__LZO_CXX_DO_DELETE)
+#elif (LZO_CC_BORLANDC || LZO_CC_TURBOC)
+# define __LZO_CXX_DO_DELETE { }
+#else
+# define __LZO_CXX_DO_DELETE LZO_CXX_NOTHROW { }
+#endif
+#if (LZO_CC_BORLANDC && (__BORLANDC__ < 0x0450))
+#elif (LZO_CC_MSC && LZO_MM_HUGE)
+# define LZO_CXX_DISABLE_NEW_DELETE private:
+#elif (LZO_CC_MSC && (_MSC_VER < 1100))
+#elif (LZO_CC_NDPC)
+#elif (LZO_CC_SYMANTECC || LZO_CC_ZORTECHC)
+#elif (LZO_CC_TURBOC)
+#elif (LZO_CC_WATCOMC && (__WATCOMC__ < 1100))
+#else
+# define __LZO_CXX_HAVE_ARRAY_NEW 1
+#endif
+#if (__LZO_CXX_HAVE_ARRAY_NEW)
+# define __LZO_CXX_HAVE_PLACEMENT_NEW 1
+#endif
+#if (__LZO_CXX_HAVE_PLACEMENT_NEW)
+# if (LZO_CC_GNUC >= 0x030000ul)
+# define __LZO_CXX_HAVE_PLACEMENT_DELETE 1
+# elif (LZO_CC_INTELC)
+# define __LZO_CXX_HAVE_PLACEMENT_DELETE 1
+# elif (LZO_CC_MSC && (_MSC_VER >= 1200))
+# define __LZO_CXX_HAVE_PLACEMENT_DELETE 1
+# elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE)
+# define __LZO_CXX_HAVE_PLACEMENT_DELETE 1
+# elif (LZO_CC_PGI)
+# define __LZO_CXX_HAVE_PLACEMENT_DELETE 1
+# endif
+#endif
+#if defined(LZO_CXX_DISABLE_NEW_DELETE)
+#elif defined(new) || defined(delete)
+# define LZO_CXX_DISABLE_NEW_DELETE private:
+#elif (LZO_CC_GNUC && (LZO_CC_GNUC < 0x025b00ul))
+# define LZO_CXX_DISABLE_NEW_DELETE private:
+#elif (LZO_CC_HIGHC)
+# define LZO_CXX_DISABLE_NEW_DELETE private:
+#elif !(__LZO_CXX_HAVE_ARRAY_NEW)
+# define LZO_CXX_DISABLE_NEW_DELETE \
+ protected: static void operator delete(void*) __LZO_CXX_DO_DELETE \
+ protected: static void* operator new(size_t) __LZO_CXX_DO_NEW \
+ private:
+#else
+# define LZO_CXX_DISABLE_NEW_DELETE \
+ protected: static void operator delete(void*) __LZO_CXX_DO_DELETE \
+ static void operator delete[](void*) __LZO_CXX_DO_DELETE \
+ private: static void* operator new(size_t) __LZO_CXX_DO_NEW \
+ static void* operator new[](size_t) __LZO_CXX_DO_NEW
+#endif
+#if defined(LZO_CXX_TRIGGER_FUNCTION)
+#else
+# define LZO_CXX_TRIGGER_FUNCTION \
+ protected: virtual const void* lzo_cxx_trigger_function() const; \
+ private:
+#endif
+#if defined(LZO_CXX_TRIGGER_FUNCTION_IMPL)
+#else
+# define LZO_CXX_TRIGGER_FUNCTION_IMPL(klass) \
+ const void* klass::lzo_cxx_trigger_function() const { return LZO_STATIC_CAST(const void *, 0); }
+#endif
+#endif
+#endif
+#endif
+#if defined(LZO_WANT_ACC_CHK_CH)
+# undef LZO_WANT_ACC_CHK_CH
+#if !defined(LZOCHK_ASSERT)
+# define LZOCHK_ASSERT(expr) LZO_COMPILE_TIME_ASSERT_HEADER(expr)
+#endif
+#if !defined(LZOCHK_ASSERT_SIGN_T)
+# define LZOCHK_ASSERT_SIGN_T(type,relop) \
+ LZOCHK_ASSERT( LZO_STATIC_CAST(type, -1) relop LZO_STATIC_CAST(type, 0)) \
+ LZOCHK_ASSERT( LZO_STATIC_CAST(type, ~LZO_STATIC_CAST(type, 0)) relop LZO_STATIC_CAST(type, 0)) \
+ LZOCHK_ASSERT( LZO_STATIC_CAST(type, ~LZO_STATIC_CAST(type, 0)) == LZO_STATIC_CAST(type, -1))
+#endif
+#if !defined(LZOCHK_ASSERT_IS_SIGNED_T)
+# define LZOCHK_ASSERT_IS_SIGNED_T(type) LZOCHK_ASSERT_SIGN_T(type,<)
+#endif
+#if !defined(LZOCHK_ASSERT_IS_UNSIGNED_T)
+# if (LZO_BROKEN_INTEGRAL_PROMOTION)
+# define LZOCHK_ASSERT_IS_UNSIGNED_T(type) \
+ LZOCHK_ASSERT( LZO_STATIC_CAST(type, -1) > LZO_STATIC_CAST(type, 0) )
+# else
+# define LZOCHK_ASSERT_IS_UNSIGNED_T(type) LZOCHK_ASSERT_SIGN_T(type,>)
+# endif
+#endif
+#if defined(LZOCHK_CFG_PEDANTIC)
+#if (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0550) && (__BORLANDC__ < 0x0560))
+# pragma option push -w-8055
+#elif (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0530) && (__BORLANDC__ < 0x0550))
+# pragma option push -w-osh
+#endif
+#endif
+#if (LZO_0xffffffffL - LZO_UINT32_C(4294967294) != 1)
+# error "preprocessor error"
+#endif
+#if (LZO_0xffffffffL - LZO_UINT32_C(0xfffffffd) != 2)
+# error "preprocessor error"
+#endif
+#if +0
+# error "preprocessor error"
+#endif
+#if -0
+# error "preprocessor error"
+#endif
+#if +0 != 0
+# error "preprocessor error"
+#endif
+#if -0 != 0
+# error "preprocessor error"
+#endif
+#define LZOCHK_VAL 1
+#define LZOCHK_TMP1 LZOCHK_VAL
+#undef LZOCHK_VAL
+#define LZOCHK_VAL 2
+#define LZOCHK_TMP2 LZOCHK_VAL
+#if (LZOCHK_TMP1 != 2)
+# error "preprocessor error 3a"
+#endif
+#if (LZOCHK_TMP2 != 2)
+# error "preprocessor error 3b"
+#endif
+#undef LZOCHK_VAL
+#if (LZOCHK_TMP2)
+# error "preprocessor error 3c"
+#endif
+#if (LZOCHK_TMP2 + 0 != 0)
+# error "preprocessor error 3d"
+#endif
+#undef LZOCHK_TMP1
+#undef LZOCHK_TMP2
+#if 0 || defined(LZOCHK_CFG_PEDANTIC)
+# if (LZO_ARCH_MIPS) && defined(_MIPS_SZINT)
+ LZOCHK_ASSERT((_MIPS_SZINT) == 8 * sizeof(int))
+# endif
+# if (LZO_ARCH_MIPS) && defined(_MIPS_SZLONG)
+ LZOCHK_ASSERT((_MIPS_SZLONG) == 8 * sizeof(long))
+# endif
+# if (LZO_ARCH_MIPS) && defined(_MIPS_SZPTR)
+ LZOCHK_ASSERT((_MIPS_SZPTR) == 8 * sizeof(void *))
+# endif
+#endif
+ LZOCHK_ASSERT(1 == 1)
+ LZOCHK_ASSERT(__LZO_MASK_GEN(1u,1) == 1u)
+ LZOCHK_ASSERT(__LZO_MASK_GEN(1u,2) == 3u)
+ LZOCHK_ASSERT(__LZO_MASK_GEN(1u,3) == 7u)
+ LZOCHK_ASSERT(__LZO_MASK_GEN(1u,8) == 255u)
+#if (LZO_SIZEOF_INT >= 2)
+ LZOCHK_ASSERT(__LZO_MASK_GEN(1,15) == 32767)
+ LZOCHK_ASSERT(__LZO_MASK_GEN(1u,16) == 0xffffU)
+ LZOCHK_ASSERT(__LZO_MASK_GEN(0u,16) == 0u)
+#endif
+ LZOCHK_ASSERT(__LZO_MASK_GEN(1ul,16) == 0xffffUL)
+ LZOCHK_ASSERT(__LZO_MASK_GEN(0ul,16) == 0ul)
+#if (LZO_SIZEOF_INT >= 4)
+ LZOCHK_ASSERT(__LZO_MASK_GEN(1,31) == 2147483647)
+ LZOCHK_ASSERT(__LZO_MASK_GEN(1u,32) == 0xffffffffU)
+ LZOCHK_ASSERT(__LZO_MASK_GEN(0u,32) == 0u)
+#endif
+#if (LZO_SIZEOF_LONG >= 4)
+ LZOCHK_ASSERT(__LZO_MASK_GEN(1ul,32) == 0xffffffffUL)
+ LZOCHK_ASSERT(__LZO_MASK_GEN(0ul,32) == 0ul)
+#endif
+#if (LZO_SIZEOF_LONG >= 8)
+ LZOCHK_ASSERT(__LZO_MASK_GEN(1ul,64) == 0xffffffffffffffffUL)
+ LZOCHK_ASSERT(__LZO_MASK_GEN(0ul,64) == 0ul)
+#endif
+#if !(LZO_BROKEN_INTEGRAL_PROMOTION)
+ LZOCHK_ASSERT(__LZO_MASK_GEN(1u,LZO_SIZEOF_INT*8) == ~0u)
+ LZOCHK_ASSERT(__LZO_MASK_GEN(1ul,LZO_SIZEOF_LONG*8) == ~0ul)
+#endif
+#if 1
+ LZOCHK_ASSERT(__LZO_MASK_GEN(0,0) == 0)
+ LZOCHK_ASSERT(__LZO_MASK_GEN(1,0) == 0)
+ LZOCHK_ASSERT(__LZO_MASK_GEN(2,0) == 0)
+ LZOCHK_ASSERT(__LZO_MASK_GEN(4,0) == 0)
+#endif
+#if 1
+ LZOCHK_ASSERT(__LZO_MASK_GEN(2,1) == 2)
+ LZOCHK_ASSERT(__LZO_MASK_GEN(4,1) == 4)
+ LZOCHK_ASSERT(__LZO_MASK_GEN(8,1) == 8)
+ LZOCHK_ASSERT(__LZO_MASK_GEN(2,2) == 2+4)
+ LZOCHK_ASSERT(__LZO_MASK_GEN(4,2) == 4+8)
+ LZOCHK_ASSERT(__LZO_MASK_GEN(8,2) == 8+16)
+ LZOCHK_ASSERT(__LZO_MASK_GEN(2,3) == 2+4+8)
+ LZOCHK_ASSERT(__LZO_MASK_GEN(4,3) == 4+8+16)
+ LZOCHK_ASSERT(__LZO_MASK_GEN(8,3) == 8+16+32)
+ LZOCHK_ASSERT(__LZO_MASK_GEN(7,1) == 7)
+ LZOCHK_ASSERT(__LZO_MASK_GEN(7,2) == 7+14)
+ LZOCHK_ASSERT(__LZO_MASK_GEN(7,3) == 7+14+28)
+#endif
+#if !(LZO_BROKEN_SIGNED_RIGHT_SHIFT)
+ LZOCHK_ASSERT(((-1) >> 7) == -1)
+#endif
+ LZOCHK_ASSERT(((1) >> 7) == 0)
+#if (LZO_CC_INTELC && (__INTEL_COMPILER >= 900))
+# pragma warning(push)
+# pragma warning(disable: 1025)
+#endif
+ LZOCHK_ASSERT((~0l & ~0) == ~0l)
+ LZOCHK_ASSERT((~0l & ~0u) == ~0u)
+ LZOCHK_ASSERT((~0ul & ~0) == ~0ul)
+ LZOCHK_ASSERT((~0ul & ~0u) == ~0u)
+#if defined(__MSDOS__) && defined(__TURBOC__) && (__TURBOC__ < 0x0150)
+#elif (LZO_SIZEOF_INT == 2)
+ LZOCHK_ASSERT((~0l & ~0u) == 0xffffU)
+ LZOCHK_ASSERT((~0ul & ~0u) == 0xffffU)
+#elif (LZO_SIZEOF_INT == 4)
+ LZOCHK_ASSERT((~0l & ~0u) == 0xffffffffU)
+ LZOCHK_ASSERT((~0ul & ~0u) == 0xffffffffU)
+#endif
+#if (LZO_CC_INTELC && (__INTEL_COMPILER >= 900))
+# pragma warning(pop)
+#endif
+ LZOCHK_ASSERT_IS_SIGNED_T(signed char)
+ LZOCHK_ASSERT_IS_UNSIGNED_T(unsigned char)
+ LZOCHK_ASSERT(sizeof(signed char) == sizeof(char))
+ LZOCHK_ASSERT(sizeof(unsigned char) == sizeof(char))
+ LZOCHK_ASSERT(sizeof(char) == 1)
+#if (LZO_CC_CILLY) && (!defined(__CILLY__) || (__CILLY__ < 0x010302L))
+#else
+ LZOCHK_ASSERT(sizeof(char) == sizeof(LZO_STATIC_CAST(char, 0)))
+#endif
+#if defined(__cplusplus)
+ LZOCHK_ASSERT(sizeof('\0') == sizeof(char))
+#else
+# if (LZO_CC_DMC)
+# else
+ LZOCHK_ASSERT(sizeof('\0') == sizeof(int))
+# endif
+#endif
+#if defined(__lzo_alignof)
+ LZOCHK_ASSERT(__lzo_alignof(char) == 1)
+ LZOCHK_ASSERT(__lzo_alignof(signed char) == 1)
+ LZOCHK_ASSERT(__lzo_alignof(unsigned char) == 1)
+#if defined(lzo_int16e_t)
+ LZOCHK_ASSERT(__lzo_alignof(lzo_int16e_t) >= 1)
+ LZOCHK_ASSERT(__lzo_alignof(lzo_int16e_t) <= 2)
+#endif
+#if defined(lzo_int32e_t)
+ LZOCHK_ASSERT(__lzo_alignof(lzo_int32e_t) >= 1)
+ LZOCHK_ASSERT(__lzo_alignof(lzo_int32e_t) <= 4)
+#endif
+#endif
+ LZOCHK_ASSERT_IS_SIGNED_T(short)
+ LZOCHK_ASSERT_IS_UNSIGNED_T(unsigned short)
+ LZOCHK_ASSERT(sizeof(short) == sizeof(unsigned short))
+#if !(LZO_ABI_I8LP16)
+ LZOCHK_ASSERT(sizeof(short) >= 2)
+#endif
+ LZOCHK_ASSERT(sizeof(short) >= sizeof(char))
+#if (LZO_CC_CILLY) && (!defined(__CILLY__) || (__CILLY__ < 0x010302L))
+#else
+ LZOCHK_ASSERT(sizeof(short) == sizeof(LZO_STATIC_CAST(short, 0)))
+#endif
+#if (LZO_SIZEOF_SHORT > 0)
+ LZOCHK_ASSERT(sizeof(short) == LZO_SIZEOF_SHORT)
+#endif
+ LZOCHK_ASSERT_IS_SIGNED_T(int)
+ LZOCHK_ASSERT_IS_UNSIGNED_T(unsigned int)
+ LZOCHK_ASSERT(sizeof(int) == sizeof(unsigned int))
+#if !(LZO_ABI_I8LP16)
+ LZOCHK_ASSERT(sizeof(int) >= 2)
+#endif
+ LZOCHK_ASSERT(sizeof(int) >= sizeof(short))
+ LZOCHK_ASSERT(sizeof(int) == sizeof(0))
+ LZOCHK_ASSERT(sizeof(int) == sizeof(LZO_STATIC_CAST(int, 0)))
+#if (LZO_SIZEOF_INT > 0)
+ LZOCHK_ASSERT(sizeof(int) == LZO_SIZEOF_INT)
+#endif
+ LZOCHK_ASSERT(sizeof(0) == sizeof(int))
+ LZOCHK_ASSERT_IS_SIGNED_T(long)
+ LZOCHK_ASSERT_IS_UNSIGNED_T(unsigned long)
+ LZOCHK_ASSERT(sizeof(long) == sizeof(unsigned long))
+#if !(LZO_ABI_I8LP16)
+ LZOCHK_ASSERT(sizeof(long) >= 4)
+#endif
+ LZOCHK_ASSERT(sizeof(long) >= sizeof(int))
+ LZOCHK_ASSERT(sizeof(long) == sizeof(0L))
+ LZOCHK_ASSERT(sizeof(long) == sizeof(LZO_STATIC_CAST(long, 0)))
+#if (LZO_SIZEOF_LONG > 0)
+ LZOCHK_ASSERT(sizeof(long) == LZO_SIZEOF_LONG)
+#endif
+ LZOCHK_ASSERT(sizeof(0L) == sizeof(long))
+ LZOCHK_ASSERT_IS_UNSIGNED_T(size_t)
+ LZOCHK_ASSERT(sizeof(size_t) >= sizeof(int))
+ LZOCHK_ASSERT(sizeof(size_t) == sizeof(sizeof(0)))
+#if (LZO_SIZEOF_SIZE_T > 0)
+ LZOCHK_ASSERT(sizeof(size_t) == LZO_SIZEOF_SIZE_T)
+#endif
+ LZOCHK_ASSERT_IS_SIGNED_T(ptrdiff_t)
+ LZOCHK_ASSERT(sizeof(ptrdiff_t) >= sizeof(int))
+ LZOCHK_ASSERT(sizeof(ptrdiff_t) >= sizeof(size_t))
+#if !(LZO_BROKEN_SIZEOF)
+ LZOCHK_ASSERT(sizeof(ptrdiff_t) == sizeof(LZO_STATIC_CAST(char*, 0) - LZO_STATIC_CAST(char*, 0)))
+# if (LZO_HAVE_MM_HUGE_PTR)
+ LZOCHK_ASSERT(4 == sizeof(LZO_STATIC_CAST(char __huge*, 0) - LZO_STATIC_CAST(char __huge*, 0)))
+# endif
+#endif
+#if (LZO_SIZEOF_PTRDIFF_T > 0)
+ LZOCHK_ASSERT(sizeof(ptrdiff_t) == LZO_SIZEOF_PTRDIFF_T)
+#endif
+ LZOCHK_ASSERT(sizeof(void*) >= sizeof(char*))
+#if (LZO_SIZEOF_VOID_P > 0)
+ LZOCHK_ASSERT(sizeof(void*) == LZO_SIZEOF_VOID_P)
+ LZOCHK_ASSERT(sizeof(char*) == LZO_SIZEOF_VOID_P)
+#endif
+#if (LZO_HAVE_MM_HUGE_PTR)
+ LZOCHK_ASSERT(4 == sizeof(void __huge*))
+ LZOCHK_ASSERT(4 == sizeof(char __huge*))
+#endif
+#if (LZO_ABI_I8LP16)
+ LZOCHK_ASSERT((((1u << 7) + 1) >> 7) == 1)
+ LZOCHK_ASSERT((((1ul << 15) + 1) >> 15) == 1)
+#else
+ LZOCHK_ASSERT((((1u << 15) + 1) >> 15) == 1)
+ LZOCHK_ASSERT((((1ul << 31) + 1) >> 31) == 1)
+#endif
+#if defined(LZOCHK_CFG_PEDANTIC)
+#if defined(__MSDOS__) && defined(__TURBOC__) && (__TURBOC__ < 0x0150)
+#else
+ LZOCHK_ASSERT((1 << (8*LZO_SIZEOF_INT-1)) < 0)
+#endif
+#endif
+ LZOCHK_ASSERT((1u << (8*LZO_SIZEOF_INT-1)) > 0)
+#if defined(LZOCHK_CFG_PEDANTIC)
+ LZOCHK_ASSERT((1l << (8*LZO_SIZEOF_LONG-1)) < 0)
+#endif
+ LZOCHK_ASSERT((1ul << (8*LZO_SIZEOF_LONG-1)) > 0)
+#if defined(lzo_int16e_t)
+ LZOCHK_ASSERT(sizeof(lzo_int16e_t) == 2)
+ LZOCHK_ASSERT(sizeof(lzo_int16e_t) == LZO_SIZEOF_LZO_INT16E_T)
+ LZOCHK_ASSERT(sizeof(lzo_uint16e_t) == 2)
+ LZOCHK_ASSERT(sizeof(lzo_int16e_t) == sizeof(lzo_uint16e_t))
+ LZOCHK_ASSERT_IS_SIGNED_T(lzo_int16e_t)
+ LZOCHK_ASSERT_IS_UNSIGNED_T(lzo_uint16e_t)
+#if defined(__MSDOS__) && defined(__TURBOC__) && (__TURBOC__ < 0x0150)
+#else
+ LZOCHK_ASSERT((LZO_STATIC_CAST(lzo_uint16e_t, (~LZO_STATIC_CAST(lzo_uint16e_t,0ul))) >> 15) == 1)
+#endif
+ LZOCHK_ASSERT( LZO_STATIC_CAST(lzo_int16e_t, (1 + ~LZO_STATIC_CAST(lzo_int16e_t, 0))) == 0)
+#if defined(LZOCHK_CFG_PEDANTIC)
+ LZOCHK_ASSERT( LZO_STATIC_CAST(lzo_uint16e_t, (1 + ~LZO_STATIC_CAST(lzo_uint16e_t, 0))) == 0)
+#endif
+#endif
+#if defined(lzo_int32e_t)
+ LZOCHK_ASSERT(sizeof(lzo_int32e_t) == 4)
+ LZOCHK_ASSERT(sizeof(lzo_int32e_t) == LZO_SIZEOF_LZO_INT32E_T)
+ LZOCHK_ASSERT(sizeof(lzo_uint32e_t) == 4)
+ LZOCHK_ASSERT(sizeof(lzo_int32e_t) == sizeof(lzo_uint32e_t))
+ LZOCHK_ASSERT_IS_SIGNED_T(lzo_int32e_t)
+ LZOCHK_ASSERT(((( LZO_STATIC_CAST(lzo_int32e_t, 1) << 30) + 1) >> 30) == 1)
+ LZOCHK_ASSERT_IS_UNSIGNED_T(lzo_uint32e_t)
+ LZOCHK_ASSERT(((( LZO_STATIC_CAST(lzo_uint32e_t, 1) << 31) + 1) >> 31) == 1)
+ LZOCHK_ASSERT((LZO_STATIC_CAST(lzo_uint32e_t, (~LZO_STATIC_CAST(lzo_uint32e_t, 0ul))) >> 31) == 1)
+ LZOCHK_ASSERT( LZO_STATIC_CAST(lzo_int32e_t, (1 + ~LZO_STATIC_CAST(lzo_int32e_t, 0))) == 0)
+#if defined(LZOCHK_CFG_PEDANTIC)
+ LZOCHK_ASSERT( LZO_STATIC_CAST(lzo_uint32e_t, (1 + ~LZO_STATIC_CAST(lzo_uint32e_t, 0))) == 0)
+#endif
+#endif
+#if defined(lzo_int32e_t)
+ LZOCHK_ASSERT(sizeof(lzo_int32l_t) >= sizeof(lzo_int32e_t))
+#endif
+ LZOCHK_ASSERT(sizeof(lzo_int32l_t) >= 4)
+ LZOCHK_ASSERT(sizeof(lzo_int32l_t) == LZO_SIZEOF_LZO_INT32L_T)
+ LZOCHK_ASSERT(sizeof(lzo_uint32l_t) >= 4)
+ LZOCHK_ASSERT(sizeof(lzo_int32l_t) == sizeof(lzo_uint32l_t))
+ LZOCHK_ASSERT_IS_SIGNED_T(lzo_int32l_t)
+ LZOCHK_ASSERT(((( LZO_STATIC_CAST(lzo_int32l_t, 1) << 30) + 1) >> 30) == 1)
+ LZOCHK_ASSERT_IS_UNSIGNED_T(lzo_uint32l_t)
+ LZOCHK_ASSERT(((( LZO_STATIC_CAST(lzo_uint32l_t, 1) << 31) + 1) >> 31) == 1)
+ LZOCHK_ASSERT(sizeof(lzo_int32f_t) >= sizeof(int))
+#if defined(lzo_int32e_t)
+ LZOCHK_ASSERT(sizeof(lzo_int32f_t) >= sizeof(lzo_int32e_t))
+#endif
+ LZOCHK_ASSERT(sizeof(lzo_int32f_t) >= sizeof(lzo_int32l_t))
+ LZOCHK_ASSERT(sizeof(lzo_int32f_t) >= 4)
+ LZOCHK_ASSERT(sizeof(lzo_int32f_t) >= sizeof(lzo_int32l_t))
+ LZOCHK_ASSERT(sizeof(lzo_int32f_t) == LZO_SIZEOF_LZO_INT32F_T)
+ LZOCHK_ASSERT(sizeof(lzo_uint32f_t) >= 4)
+ LZOCHK_ASSERT(sizeof(lzo_uint32f_t) >= sizeof(lzo_uint32l_t))
+ LZOCHK_ASSERT(sizeof(lzo_int32f_t) == sizeof(lzo_uint32f_t))
+ LZOCHK_ASSERT_IS_SIGNED_T(lzo_int32f_t)
+ LZOCHK_ASSERT(((( LZO_STATIC_CAST(lzo_int32f_t, 1) << 30) + 1) >> 30) == 1)
+ LZOCHK_ASSERT_IS_UNSIGNED_T(lzo_uint32f_t)
+ LZOCHK_ASSERT(((( LZO_STATIC_CAST(lzo_uint32f_t, 1) << 31) + 1) >> 31) == 1)
+#if defined(lzo_int64e_t)
+ LZOCHK_ASSERT(sizeof(lzo_int64e_t) == 8)
+ LZOCHK_ASSERT(sizeof(lzo_int64e_t) == LZO_SIZEOF_LZO_INT64E_T)
+ LZOCHK_ASSERT(sizeof(lzo_uint64e_t) == 8)
+ LZOCHK_ASSERT(sizeof(lzo_int64e_t) == sizeof(lzo_uint64e_t))
+ LZOCHK_ASSERT_IS_SIGNED_T(lzo_int64e_t)
+#if (LZO_CC_BORLANDC && (__BORLANDC__ < 0x0530))
+#else
+ LZOCHK_ASSERT_IS_UNSIGNED_T(lzo_uint64e_t)
+#endif
+#endif
+#if defined(lzo_int64l_t)
+#if defined(lzo_int64e_t)
+ LZOCHK_ASSERT(sizeof(lzo_int64l_t) >= sizeof(lzo_int64e_t))
+#endif
+ LZOCHK_ASSERT(sizeof(lzo_int64l_t) >= 8)
+ LZOCHK_ASSERT(sizeof(lzo_int64l_t) == LZO_SIZEOF_LZO_INT64L_T)
+ LZOCHK_ASSERT(sizeof(lzo_uint64l_t) >= 8)
+ LZOCHK_ASSERT(sizeof(lzo_int64l_t) == sizeof(lzo_uint64l_t))
+ LZOCHK_ASSERT_IS_SIGNED_T(lzo_int64l_t)
+ LZOCHK_ASSERT(((( LZO_STATIC_CAST(lzo_int64l_t, 1) << 62) + 1) >> 62) == 1)
+ LZOCHK_ASSERT(((( LZO_INT64_C(1) << 62) + 1) >> 62) == 1)
+#if (LZO_CC_BORLANDC && (__BORLANDC__ < 0x0530))
+#else
+ LZOCHK_ASSERT_IS_UNSIGNED_T(lzo_uint64l_t)
+ LZOCHK_ASSERT(LZO_UINT64_C(18446744073709551615) > 0)
+#endif
+ LZOCHK_ASSERT(((( LZO_STATIC_CAST(lzo_uint64l_t, 1) << 63) + 1) >> 63) == 1)
+ LZOCHK_ASSERT(((( LZO_UINT64_C(1) << 63) + 1) >> 63) == 1)
+#if (LZO_CC_GNUC && (LZO_CC_GNUC < 0x020600ul))
+ LZOCHK_ASSERT(LZO_INT64_C(9223372036854775807) > LZO_INT64_C(0))
+#else
+ LZOCHK_ASSERT(LZO_INT64_C(9223372036854775807) > 0)
+#endif
+ LZOCHK_ASSERT(LZO_INT64_C(-9223372036854775807) - 1 < 0)
+ LZOCHK_ASSERT( LZO_INT64_C(9223372036854775807) % LZO_INT32_C(2147483629) == 721)
+ LZOCHK_ASSERT( LZO_INT64_C(9223372036854775807) % LZO_INT32_C(2147483647) == 1)
+ LZOCHK_ASSERT(LZO_UINT64_C(9223372036854775807) % LZO_UINT32_C(2147483629) == 721)
+ LZOCHK_ASSERT(LZO_UINT64_C(9223372036854775807) % LZO_UINT32_C(2147483647) == 1)
+#endif
+#if defined(lzo_int64f_t)
+#if defined(lzo_int64e_t)
+ LZOCHK_ASSERT(sizeof(lzo_int64f_t) >= sizeof(lzo_int64e_t))
+#endif
+ LZOCHK_ASSERT(sizeof(lzo_int64f_t) >= sizeof(lzo_int64l_t))
+ LZOCHK_ASSERT(sizeof(lzo_int64f_t) >= 8)
+ LZOCHK_ASSERT(sizeof(lzo_int64f_t) >= sizeof(lzo_int64l_t))
+ LZOCHK_ASSERT(sizeof(lzo_int64f_t) == LZO_SIZEOF_LZO_INT64F_T)
+ LZOCHK_ASSERT(sizeof(lzo_uint64f_t) >= 8)
+ LZOCHK_ASSERT(sizeof(lzo_uint64f_t) >= sizeof(lzo_uint64l_t))
+ LZOCHK_ASSERT(sizeof(lzo_int64f_t) == sizeof(lzo_uint64f_t))
+ LZOCHK_ASSERT_IS_SIGNED_T(lzo_int64f_t)
+#if (LZO_CC_BORLANDC && (__BORLANDC__ < 0x0530))
+#else
+ LZOCHK_ASSERT_IS_UNSIGNED_T(lzo_uint64f_t)
+#endif
+#endif
+#if !defined(__LZO_INTPTR_T_IS_POINTER)
+ LZOCHK_ASSERT_IS_SIGNED_T(lzo_intptr_t)
+ LZOCHK_ASSERT_IS_UNSIGNED_T(lzo_uintptr_t)
+#endif
+ LZOCHK_ASSERT(sizeof(lzo_intptr_t) >= sizeof(void *))
+ LZOCHK_ASSERT(sizeof(lzo_intptr_t) == LZO_SIZEOF_LZO_INTPTR_T)
+ LZOCHK_ASSERT(sizeof(lzo_intptr_t) == sizeof(lzo_uintptr_t))
+#if defined(lzo_word_t)
+ LZOCHK_ASSERT(LZO_WORDSIZE == LZO_SIZEOF_LZO_WORD_T)
+ LZOCHK_ASSERT_IS_UNSIGNED_T(lzo_word_t)
+ LZOCHK_ASSERT_IS_SIGNED_T(lzo_sword_t)
+ LZOCHK_ASSERT(sizeof(lzo_word_t) == LZO_SIZEOF_LZO_WORD_T)
+ LZOCHK_ASSERT(sizeof(lzo_word_t) == sizeof(lzo_sword_t))
+#endif
+ LZOCHK_ASSERT(sizeof(lzo_int8_t) == 1)
+ LZOCHK_ASSERT(sizeof(lzo_uint8_t) == 1)
+ LZOCHK_ASSERT(sizeof(lzo_int8_t) == sizeof(lzo_uint8_t))
+ LZOCHK_ASSERT_IS_SIGNED_T(lzo_int8_t)
+ LZOCHK_ASSERT_IS_UNSIGNED_T(lzo_uint8_t)
+#if defined(LZO_INT16_C)
+ LZOCHK_ASSERT(sizeof(LZO_INT16_C(0)) >= 2)
+ LZOCHK_ASSERT(sizeof(LZO_UINT16_C(0)) >= 2)
+ LZOCHK_ASSERT((LZO_UINT16_C(0xffff) >> 15) == 1)
+#endif
+#if defined(LZO_INT32_C)
+ LZOCHK_ASSERT(sizeof(LZO_INT32_C(0)) >= 4)
+ LZOCHK_ASSERT(sizeof(LZO_UINT32_C(0)) >= 4)
+ LZOCHK_ASSERT((LZO_UINT32_C(0xffffffff) >> 31) == 1)
+#endif
+#if defined(LZO_INT64_C)
+#if (LZO_CC_BORLANDC && (__BORLANDC__ < 0x0560))
+#else
+ LZOCHK_ASSERT(sizeof(LZO_INT64_C(0)) >= 8)
+ LZOCHK_ASSERT(sizeof(LZO_UINT64_C(0)) >= 8)
+#endif
+ LZOCHK_ASSERT((LZO_UINT64_C(0xffffffffffffffff) >> 63) == 1)
+ LZOCHK_ASSERT((LZO_UINT64_C(0xffffffffffffffff) & ~0) == LZO_UINT64_C(0xffffffffffffffff))
+ LZOCHK_ASSERT((LZO_UINT64_C(0xffffffffffffffff) & ~0l) == LZO_UINT64_C(0xffffffffffffffff))
+#if (LZO_SIZEOF_INT == 4)
+# if (LZO_CC_GNUC && (LZO_CC_GNUC < 0x020000ul))
+# else
+ LZOCHK_ASSERT((LZO_UINT64_C(0xffffffffffffffff) & (~0u+0u)) == 0xffffffffu)
+# endif
+#endif
+#if (LZO_SIZEOF_LONG == 4)
+# if (LZO_CC_GNUC && (LZO_CC_GNUC < 0x020000ul))
+# else
+ LZOCHK_ASSERT((LZO_UINT64_C(0xffffffffffffffff) & (~0ul+0ul)) == 0xfffffffful)
+# endif
+#endif
+#endif
+#if (LZO_MM_TINY || LZO_MM_SMALL || LZO_MM_MEDIUM)
+ LZOCHK_ASSERT(sizeof(void*) == 2)
+ LZOCHK_ASSERT(sizeof(ptrdiff_t) == 2)
+#elif (LZO_MM_COMPACT || LZO_MM_LARGE || LZO_MM_HUGE)
+ LZOCHK_ASSERT(sizeof(void*) == 4)
+#endif
+#if (LZO_MM_TINY || LZO_MM_SMALL || LZO_MM_COMPACT)
+ LZOCHK_ASSERT(sizeof(void (*)(void)) == 2)
+#elif (LZO_MM_MEDIUM || LZO_MM_LARGE || LZO_MM_HUGE)
+ LZOCHK_ASSERT(sizeof(void (*)(void)) == 4)
+#endif
+#if (LZO_ABI_ILP32)
+ LZOCHK_ASSERT(sizeof(int) == 4)
+ LZOCHK_ASSERT(sizeof(long) == 4)
+ LZOCHK_ASSERT(sizeof(void*) == 4)
+ LZOCHK_ASSERT(sizeof(ptrdiff_t) == sizeof(void*))
+ LZOCHK_ASSERT(sizeof(size_t) == sizeof(void*))
+ LZOCHK_ASSERT(sizeof(lzo_intptr_t) == sizeof(void *))
+#endif
+#if (LZO_ABI_ILP64)
+ LZOCHK_ASSERT(sizeof(int) == 8)
+ LZOCHK_ASSERT(sizeof(long) == 8)
+ LZOCHK_ASSERT(sizeof(void*) == 8)
+ LZOCHK_ASSERT(sizeof(ptrdiff_t) == sizeof(void*))
+ LZOCHK_ASSERT(sizeof(size_t) == sizeof(void*))
+ LZOCHK_ASSERT(sizeof(lzo_intptr_t) == sizeof(void *))
+#endif
+#if (LZO_ABI_IP32L64)
+ LZOCHK_ASSERT(sizeof(int) == 4)
+ LZOCHK_ASSERT(sizeof(long) == 8)
+ LZOCHK_ASSERT(sizeof(void*) == 4)
+ LZOCHK_ASSERT(sizeof(ptrdiff_t) == sizeof(void*))
+ LZOCHK_ASSERT(sizeof(size_t) == sizeof(void*))
+ LZOCHK_ASSERT(sizeof(lzo_intptr_t) == sizeof(void *))
+#endif
+#if (LZO_ABI_LLP64)
+ LZOCHK_ASSERT(sizeof(int) == 4)
+ LZOCHK_ASSERT(sizeof(long) == 4)
+ LZOCHK_ASSERT(sizeof(void*) == 8)
+ LZOCHK_ASSERT(sizeof(ptrdiff_t) == sizeof(void*))
+ LZOCHK_ASSERT(sizeof(size_t) == sizeof(void*))
+ LZOCHK_ASSERT(sizeof(lzo_intptr_t) == sizeof(void *))
+#endif
+#if (LZO_ABI_LP32)
+ LZOCHK_ASSERT(sizeof(int) == 2)
+ LZOCHK_ASSERT(sizeof(long) == 4)
+ LZOCHK_ASSERT(sizeof(void*) == 4)
+ LZOCHK_ASSERT(sizeof(lzo_intptr_t) == sizeof(void *))
+#endif
+#if (LZO_ABI_LP64)
+ LZOCHK_ASSERT(sizeof(int) == 4)
+ LZOCHK_ASSERT(sizeof(long) == 8)
+ LZOCHK_ASSERT(sizeof(void*) == 8)
+ LZOCHK_ASSERT(sizeof(ptrdiff_t) == sizeof(void*))
+ LZOCHK_ASSERT(sizeof(size_t) == sizeof(void*))
+ LZOCHK_ASSERT(sizeof(lzo_intptr_t) == sizeof(void *))
+#endif
+#if (LZO_ABI_IP32W64)
+ LZOCHK_ASSERT(sizeof(int) == 4)
+ LZOCHK_ASSERT(sizeof(void*) == 4)
+ LZOCHK_ASSERT(sizeof(ptrdiff_t) == sizeof(void*))
+ LZOCHK_ASSERT(sizeof(size_t) == sizeof(void*))
+ LZOCHK_ASSERT(sizeof(lzo_intptr_t) == sizeof(void *))
+ LZOCHK_ASSERT(LZO_WORDSIZE == 8)
+#endif
+#if (LZO_ARCH_I086)
+ LZOCHK_ASSERT(sizeof(size_t) == 2)
+ LZOCHK_ASSERT(sizeof(lzo_intptr_t) == sizeof(void *))
+#elif (LZO_ARCH_I386 || LZO_ARCH_M68K)
+ LZOCHK_ASSERT(sizeof(size_t) == 4)
+ LZOCHK_ASSERT(sizeof(ptrdiff_t) == 4)
+ LZOCHK_ASSERT(sizeof(lzo_intptr_t) == sizeof(void *))
+#endif
+#if (LZO_OS_DOS32 || LZO_OS_OS2 || LZO_OS_WIN32)
+ LZOCHK_ASSERT(sizeof(size_t) == 4)
+ LZOCHK_ASSERT(sizeof(ptrdiff_t) == 4)
+ LZOCHK_ASSERT(sizeof(void (*)(void)) == 4)
+#elif (LZO_OS_WIN64)
+ LZOCHK_ASSERT(sizeof(size_t) == 8)
+ LZOCHK_ASSERT(sizeof(ptrdiff_t) == 8)
+ LZOCHK_ASSERT(sizeof(void (*)(void)) == 8)
+#endif
+#if (LZO_CC_NDPC)
+#elif (LZO_SIZEOF_INT > 1)
+ LZOCHK_ASSERT( LZO_STATIC_CAST(int, LZO_STATIC_CAST(unsigned char, LZO_STATIC_CAST(signed char, -1))) == 255)
+#endif
+#if defined(LZOCHK_CFG_PEDANTIC)
+#if (LZO_CC_KEILC)
+#elif (LZO_CC_NDPC)
+#elif !(LZO_BROKEN_INTEGRAL_PROMOTION) && (LZO_SIZEOF_INT > 1)
+ LZOCHK_ASSERT( ((LZO_STATIC_CAST(unsigned char, 128)) << LZO_STATIC_CAST(int, (8*sizeof(int)-8))) < 0)
+#endif
+#endif
+#if defined(LZOCHK_CFG_PEDANTIC)
+#if (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0530) && (__BORLANDC__ < 0x0560))
+# pragma option pop
+#endif
+#endif
+#endif
+#if defined(LZO_WANT_ACCLIB_VGET)
+# undef LZO_WANT_ACCLIB_VGET
+#define __LZOLIB_VGET_CH_INCLUDED 1
+#if !defined(LZOLIB_PUBLIC)
+# define LZOLIB_PUBLIC(r,f) r __LZOLIB_FUNCNAME(f)
+#endif
+#if !defined(LZOLIB_PUBLIC_NOINLINE)
+# if !defined(__lzo_noinline)
+# define LZOLIB_PUBLIC_NOINLINE(r,f) r __LZOLIB_FUNCNAME(f)
+# elif (LZO_CC_CLANG || (LZO_CC_GNUC >= 0x030400ul) || LZO_CC_LLVM)
+# define LZOLIB_PUBLIC_NOINLINE(r,f) __lzo_noinline __attribute__((__used__)) r __LZOLIB_FUNCNAME(f)
+# else
+# define LZOLIB_PUBLIC_NOINLINE(r,f) __lzo_noinline r __LZOLIB_FUNCNAME(f)
+# endif
+#endif
+extern void* volatile lzo_vget_ptr__;
+#if (LZO_CC_CLANG || (LZO_CC_GNUC >= 0x030400ul) || LZO_CC_LLVM)
+void* volatile __attribute__((__used__)) lzo_vget_ptr__ = LZO_STATIC_CAST(void *, 0);
+#else
+void* volatile lzo_vget_ptr__ = LZO_STATIC_CAST(void *, 0);
+#endif
+#ifndef __LZOLIB_VGET_BODY
+#define __LZOLIB_VGET_BODY(T) \
+ if __lzo_unlikely(lzo_vget_ptr__) { \
+ typedef T __lzo_may_alias TT; \
+ unsigned char e; expr &= 255; e = LZO_STATIC_CAST(unsigned char, expr); \
+ * LZO_STATIC_CAST(TT *, lzo_vget_ptr__) = v; \
+ * LZO_STATIC_CAST(unsigned char *, lzo_vget_ptr__) = e; \
+ v = * LZO_STATIC_CAST(TT *, lzo_vget_ptr__); \
+ } \
+ return v;
+#endif
+LZOLIB_PUBLIC_NOINLINE(short, lzo_vget_short) (short v, int expr)
+{
+ __LZOLIB_VGET_BODY(short)
+}
+LZOLIB_PUBLIC_NOINLINE(int, lzo_vget_int) (int v, int expr)
+{
+ __LZOLIB_VGET_BODY(int)
+}
+LZOLIB_PUBLIC_NOINLINE(long, lzo_vget_long) (long v, int expr)
+{
+ __LZOLIB_VGET_BODY(long)
+}
+#if defined(lzo_int64l_t)
+LZOLIB_PUBLIC_NOINLINE(lzo_int64l_t, lzo_vget_lzo_int64l_t) (lzo_int64l_t v, int expr)
+{
+ __LZOLIB_VGET_BODY(lzo_int64l_t)
+}
+#endif
+LZOLIB_PUBLIC_NOINLINE(lzo_hsize_t, lzo_vget_lzo_hsize_t) (lzo_hsize_t v, int expr)
+{
+ __LZOLIB_VGET_BODY(lzo_hsize_t)
+}
+#if !(LZO_CFG_NO_DOUBLE)
+LZOLIB_PUBLIC_NOINLINE(double, lzo_vget_double) (double v, int expr)
+{
+ __LZOLIB_VGET_BODY(double)
+}
+#endif
+LZOLIB_PUBLIC_NOINLINE(lzo_hvoid_p, lzo_vget_lzo_hvoid_p) (lzo_hvoid_p v, int expr)
+{
+ __LZOLIB_VGET_BODY(lzo_hvoid_p)
+}
+#if (LZO_ARCH_I086 && LZO_CC_TURBOC && (__TURBOC__ == 0x0295)) && !defined(__cplusplus)
+LZOLIB_PUBLIC_NOINLINE(lzo_hvoid_p, lzo_vget_lzo_hvoid_cp) (const lzo_hvoid_p vv, int expr)
+{
+ lzo_hvoid_p v = (lzo_hvoid_p) vv;
+ __LZOLIB_VGET_BODY(lzo_hvoid_p)
+}
+#else
+LZOLIB_PUBLIC_NOINLINE(const lzo_hvoid_p, lzo_vget_lzo_hvoid_cp) (const lzo_hvoid_p v, int expr)
+{
+ __LZOLIB_VGET_BODY(const lzo_hvoid_p)
+}
+#endif
+#endif
+#if defined(LZO_WANT_ACCLIB_HMEMCPY)
+# undef LZO_WANT_ACCLIB_HMEMCPY
+#define __LZOLIB_HMEMCPY_CH_INCLUDED 1
+#if !defined(LZOLIB_PUBLIC)
+# define LZOLIB_PUBLIC(r,f) r __LZOLIB_FUNCNAME(f)
+#endif
+LZOLIB_PUBLIC(int, lzo_hmemcmp) (const lzo_hvoid_p s1, const lzo_hvoid_p s2, lzo_hsize_t len)
+{
+#if (LZO_HAVE_MM_HUGE_PTR) || !(HAVE_MEMCMP)
+ const lzo_hbyte_p p1 = LZO_STATIC_CAST(const lzo_hbyte_p, s1);
+ const lzo_hbyte_p p2 = LZO_STATIC_CAST(const lzo_hbyte_p, s2);
+ if __lzo_likely(len > 0) do
+ {
+ int d = *p1 - *p2;
+ if (d != 0)
+ return d;
+ p1++; p2++;
+ } while __lzo_likely(--len > 0);
+ return 0;
+#else
+ return memcmp(s1, s2, len);
+#endif
+}
+LZOLIB_PUBLIC(lzo_hvoid_p, lzo_hmemcpy) (lzo_hvoid_p dest, const lzo_hvoid_p src, lzo_hsize_t len)
+{
+#if (LZO_HAVE_MM_HUGE_PTR) || !(HAVE_MEMCPY)
+ lzo_hbyte_p p1 = LZO_STATIC_CAST(lzo_hbyte_p, dest);
+ const lzo_hbyte_p p2 = LZO_STATIC_CAST(const lzo_hbyte_p, src);
+ if (!(len > 0) || p1 == p2)
+ return dest;
+ do
+ *p1++ = *p2++;
+ while __lzo_likely(--len > 0);
+ return dest;
+#else
+ return memcpy(dest, src, len);
+#endif
+}
+LZOLIB_PUBLIC(lzo_hvoid_p, lzo_hmemmove) (lzo_hvoid_p dest, const lzo_hvoid_p src, lzo_hsize_t len)
+{
+#if (LZO_HAVE_MM_HUGE_PTR) || !(HAVE_MEMMOVE)
+ lzo_hbyte_p p1 = LZO_STATIC_CAST(lzo_hbyte_p, dest);
+ const lzo_hbyte_p p2 = LZO_STATIC_CAST(const lzo_hbyte_p, src);
+ if (!(len > 0) || p1 == p2)
+ return dest;
+ if (p1 < p2)
+ {
+ do
+ *p1++ = *p2++;
+ while __lzo_likely(--len > 0);
+ }
+ else
+ {
+ p1 += len;
+ p2 += len;
+ do
+ *--p1 = *--p2;
+ while __lzo_likely(--len > 0);
+ }
+ return dest;
+#else
+ return memmove(dest, src, len);
+#endif
+}
+LZOLIB_PUBLIC(lzo_hvoid_p, lzo_hmemset) (lzo_hvoid_p s, int cc, lzo_hsize_t len)
+{
+#if (LZO_HAVE_MM_HUGE_PTR) || !(HAVE_MEMSET)
+ lzo_hbyte_p p = LZO_STATIC_CAST(lzo_hbyte_p, s);
+ unsigned char c = LZO_ITRUNC(unsigned char, cc);
+ if __lzo_likely(len > 0) do
+ *p++ = c;
+ while __lzo_likely(--len > 0);
+ return s;
+#else
+ return memset(s, cc, len);
+#endif
+}
+#endif
+#if defined(LZO_WANT_ACCLIB_RAND)
+# undef LZO_WANT_ACCLIB_RAND
+#define __LZOLIB_RAND_CH_INCLUDED 1
+#if !defined(LZOLIB_PUBLIC)
+# define LZOLIB_PUBLIC(r,f) r __LZOLIB_FUNCNAME(f)
+#endif
+LZOLIB_PUBLIC(void, lzo_srand31) (lzo_rand31_p r, lzo_uint32l_t seed)
+{
+ r->seed = seed & LZO_UINT32_C(0xffffffff);
+}
+LZOLIB_PUBLIC(lzo_uint32l_t, lzo_rand31) (lzo_rand31_p r)
+{
+ r->seed = r->seed * LZO_UINT32_C(1103515245) + 12345;
+ r->seed &= LZO_UINT32_C(0x7fffffff);
+ return r->seed;
+}
+#if defined(lzo_int64l_t)
+LZOLIB_PUBLIC(void, lzo_srand48) (lzo_rand48_p r, lzo_uint32l_t seed)
+{
+ r->seed = seed & LZO_UINT32_C(0xffffffff);
+ r->seed <<= 16; r->seed |= 0x330e;
+}
+LZOLIB_PUBLIC(lzo_uint32l_t, lzo_rand48) (lzo_rand48_p r)
+{
+ lzo_uint64l_t a;
+ r->seed = r->seed * LZO_UINT64_C(25214903917) + 11;
+ r->seed &= LZO_UINT64_C(0xffffffffffff);
+ a = r->seed >> 17;
+ return LZO_STATIC_CAST(lzo_uint32l_t, a);
+}
+LZOLIB_PUBLIC(lzo_uint32l_t, lzo_rand48_r32) (lzo_rand48_p r)
+{
+ lzo_uint64l_t a;
+ r->seed = r->seed * LZO_UINT64_C(25214903917) + 11;
+ r->seed &= LZO_UINT64_C(0xffffffffffff);
+ a = r->seed >> 16;
+ return LZO_STATIC_CAST(lzo_uint32l_t, a);
+}
+#endif
+#if defined(lzo_int64l_t)
+LZOLIB_PUBLIC(void, lzo_srand64) (lzo_rand64_p r, lzo_uint64l_t seed)
+{
+ r->seed = seed & LZO_UINT64_C(0xffffffffffffffff);
+}
+LZOLIB_PUBLIC(lzo_uint32l_t, lzo_rand64) (lzo_rand64_p r)
+{
+ lzo_uint64l_t a;
+ r->seed = r->seed * LZO_UINT64_C(6364136223846793005) + 1;
+#if (LZO_SIZEOF_LZO_INT64L_T > 8)
+ r->seed &= LZO_UINT64_C(0xffffffffffffffff);
+#endif
+ a = r->seed >> 33;
+ return LZO_STATIC_CAST(lzo_uint32l_t, a);
+}
+LZOLIB_PUBLIC(lzo_uint32l_t, lzo_rand64_r32) (lzo_rand64_p r)
+{
+ lzo_uint64l_t a;
+ r->seed = r->seed * LZO_UINT64_C(6364136223846793005) + 1;
+#if (LZO_SIZEOF_LZO_INT64L_T > 8)
+ r->seed &= LZO_UINT64_C(0xffffffffffffffff);
+#endif
+ a = r->seed >> 32;
+ return LZO_STATIC_CAST(lzo_uint32l_t, a);
+}
+#endif
+LZOLIB_PUBLIC(void, lzo_srandmt) (lzo_randmt_p r, lzo_uint32l_t seed)
+{
+ unsigned i = 0;
+ do {
+ r->s[i++] = (seed &= LZO_UINT32_C(0xffffffff));
+ seed ^= seed >> 30;
+ seed = seed * LZO_UINT32_C(0x6c078965) + i;
+ } while (i != 624);
+ r->n = i;
+}
+LZOLIB_PUBLIC(lzo_uint32l_t, lzo_randmt) (lzo_randmt_p r)
+{
+ return (__LZOLIB_FUNCNAME(lzo_randmt_r32)(r)) >> 1;
+}
+LZOLIB_PUBLIC(lzo_uint32l_t, lzo_randmt_r32) (lzo_randmt_p r)
+{
+ lzo_uint32l_t v;
+ if __lzo_unlikely(r->n == 624) {
+ unsigned i = 0, j;
+ r->n = 0;
+ do {
+ j = i - 623; if (LZO_STATIC_CAST(int, j) < 0) j += 624;
+ v = (r->s[i] & LZO_UINT32_C(0x80000000)) ^ (r->s[j] & LZO_UINT32_C(0x7fffffff));
+ j = i - 227; if (LZO_STATIC_CAST(int, j) < 0) j += 624;
+ r->s[i] = r->s[j] ^ (v >> 1);
+ if (v & 1) r->s[i] ^= LZO_UINT32_C(0x9908b0df);
+ } while (++i != 624);
+ }
+ { unsigned i = r->n++; v = r->s[i]; }
+ v ^= v >> 11; v ^= (v & LZO_UINT32_C(0x013a58ad)) << 7;
+ v ^= (v & LZO_UINT32_C(0x0001df8c)) << 15; v ^= v >> 18;
+ return v;
+}
+#if defined(lzo_int64l_t)
+LZOLIB_PUBLIC(void, lzo_srandmt64) (lzo_randmt64_p r, lzo_uint64l_t seed)
+{
+ unsigned i = 0;
+ do {
+ r->s[i++] = (seed &= LZO_UINT64_C(0xffffffffffffffff));
+ seed ^= seed >> 62;
+ seed = seed * LZO_UINT64_C(0x5851f42d4c957f2d) + i;
+ } while (i != 312);
+ r->n = i;
+}
+#if 0
+LZOLIB_PUBLIC(lzo_uint32l_t, lzo_randmt64) (lzo_randmt64_p r)
+{
+ lzo_uint64l_t v;
+ v = (__LZOLIB_FUNCNAME(lzo_randmt64_r64)(r)) >> 33;
+ return LZO_STATIC_CAST(lzo_uint32l_t, v);
+}
+#endif
+LZOLIB_PUBLIC(lzo_uint64l_t, lzo_randmt64_r64) (lzo_randmt64_p r)
+{
+ lzo_uint64l_t v;
+ if __lzo_unlikely(r->n == 312) {
+ unsigned i = 0, j;
+ r->n = 0;
+ do {
+ j = i - 311; if (LZO_STATIC_CAST(int, j) < 0) j += 312;
+ v = (r->s[i] & LZO_UINT64_C(0xffffffff80000000)) ^ (r->s[j] & LZO_UINT64_C(0x7fffffff));
+ j = i - 156; if (LZO_STATIC_CAST(int, j) < 0) j += 312;
+ r->s[i] = r->s[j] ^ (v >> 1);
+ if (v & 1) r->s[i] ^= LZO_UINT64_C(0xb5026f5aa96619e9);
+ } while (++i != 312);
+ }
+ { unsigned i = r->n++; v = r->s[i]; }
+ v ^= (v & LZO_UINT64_C(0xaaaaaaaaa0000000)) >> 29;
+ v ^= (v & LZO_UINT64_C(0x38eb3ffff6d3)) << 17;
+ v ^= (v & LZO_UINT64_C(0x7ffbf77)) << 37;
+ return v ^ (v >> 43);
+}
+#endif
+#endif
+#if defined(LZO_WANT_ACCLIB_RDTSC)
+# undef LZO_WANT_ACCLIB_RDTSC
+#define __LZOLIB_RDTSC_CH_INCLUDED 1
+#if !defined(LZOLIB_PUBLIC)
+# define LZOLIB_PUBLIC(r,f) r __LZOLIB_FUNCNAME(f)
+#endif
+#if defined(lzo_int32e_t)
+#if (LZO_OS_WIN32 && LZO_CC_PELLESC && (__POCC__ >= 290))
+# pragma warn(push)
+# pragma warn(disable:2007)
+#endif
+#if (LZO_ARCH_AMD64 || LZO_ARCH_I386) && (LZO_ASM_SYNTAX_GNUC)
+#if (LZO_ARCH_AMD64 && LZO_CC_INTELC)
+# define __LZOLIB_RDTSC_REGS : : "c" (t) : "memory", "rax", "rdx"
+#elif (LZO_ARCH_AMD64)
+# define __LZOLIB_RDTSC_REGS : : "c" (t) : "cc", "memory", "rax", "rdx"
+#elif (LZO_ARCH_I386 && LZO_CC_GNUC && (LZO_CC_GNUC < 0x020000ul))
+# define __LZOLIB_RDTSC_REGS : : "c" (t) : "ax", "dx"
+#elif (LZO_ARCH_I386 && LZO_CC_INTELC)
+# define __LZOLIB_RDTSC_REGS : : "c" (t) : "memory", "eax", "edx"
+#else
+# define __LZOLIB_RDTSC_REGS : : "c" (t) : "cc", "memory", "eax", "edx"
+#endif
+#endif
+LZOLIB_PUBLIC(int, lzo_tsc_read) (lzo_uint32e_t* t)
+{
+#if (LZO_ARCH_AMD64 || LZO_ARCH_I386) && (LZO_ASM_SYNTAX_GNUC)
+ __asm__ __volatile__(
+ "clc \n" ".byte 0x0f,0x31\n"
+ "movl %%eax,(%0)\n" "movl %%edx,4(%0)\n"
+ __LZOLIB_RDTSC_REGS
+ );
+ return 0;
+#elif (LZO_ARCH_I386) && (LZO_ASM_SYNTAX_MSC)
+ LZO_UNUSED(t);
+ __asm {
+ mov ecx, t
+ clc
+# if (LZO_CC_MSC && (_MSC_VER < 1200))
+ _emit 0x0f
+ _emit 0x31
+# else
+ rdtsc
+# endif
+ mov [ecx], eax
+ mov [ecx+4], edx
+ }
+ return 0;
+#else
+ t[0] = t[1] = 0; return -1;
+#endif
+}
+#if (LZO_OS_WIN32 && LZO_CC_PELLESC && (__POCC__ >= 290))
+# pragma warn(pop)
+#endif
+#endif
+#endif
+#if defined(LZO_WANT_ACCLIB_DOSALLOC)
+# undef LZO_WANT_ACCLIB_DOSALLOC
+#define __LZOLIB_DOSALLOC_CH_INCLUDED 1
+#if !defined(LZOLIB_PUBLIC)
+# define LZOLIB_PUBLIC(r,f) r __LZOLIB_FUNCNAME(f)
+#endif
+#if (LZO_OS_OS216)
+LZO_EXTERN_C unsigned short __far __pascal DosAllocHuge(unsigned short, unsigned short, unsigned short __far *, unsigned short, unsigned short);
+LZO_EXTERN_C unsigned short __far __pascal DosFreeSeg(unsigned short);
+#endif
+#if (LZO_OS_DOS16 || LZO_OS_WIN16)
+#if !(LZO_CC_AZTECC)
+LZOLIB_PUBLIC(void __far*, lzo_dos_alloc) (unsigned long size)
+{
+ void __far* p = 0;
+ union REGS ri, ro;
+ if ((long)size <= 0)
+ return p;
+ size = (size + 15) >> 4;
+ if (size > 0xffffu)
+ return p;
+ ri.x.ax = 0x4800;
+ ri.x.bx = (unsigned short) size;
+ int86(0x21, &ri, &ro);
+ if ((ro.x.cflag & 1) == 0)
+ p = (void __far*) LZO_PTR_MK_FP(ro.x.ax, 0);
+ return p;
+}
+LZOLIB_PUBLIC(int, lzo_dos_free) (void __far* p)
+{
+ union REGS ri, ro;
+ struct SREGS rs;
+ if (!p)
+ return 0;
+ if (LZO_PTR_FP_OFF(p) != 0)
+ return -1;
+ segread(&rs);
+ ri.x.ax = 0x4900;
+ rs.es = LZO_PTR_FP_SEG(p);
+ int86x(0x21, &ri, &ro, &rs);
+ if (ro.x.cflag & 1)
+ return -1;
+ return 0;
+}
+#endif
+#endif
+#if (LZO_OS_OS216)
+LZOLIB_PUBLIC(void __far*, lzo_dos_alloc) (unsigned long size)
+{
+ void __far* p = 0;
+ unsigned short sel = 0;
+ if ((long)size <= 0)
+ return p;
+ if (DosAllocHuge((unsigned short)(size >> 16), (unsigned short)size, &sel, 0, 0) == 0)
+ p = (void __far*) LZO_PTR_MK_FP(sel, 0);
+ return p;
+}
+LZOLIB_PUBLIC(int, lzo_dos_free) (void __far* p)
+{
+ if (!p)
+ return 0;
+ if (LZO_PTR_FP_OFF(p) != 0)
+ return -1;
+ if (DosFreeSeg(LZO_PTR_FP_SEG(p)) != 0)
+ return -1;
+ return 0;
+}
+#endif
+#endif
+#if defined(LZO_WANT_ACCLIB_GETOPT)
+# undef LZO_WANT_ACCLIB_GETOPT
+#define __LZOLIB_GETOPT_CH_INCLUDED 1
+#if !defined(LZOLIB_PUBLIC)
+# define LZOLIB_PUBLIC(r,f) r __LZOLIB_FUNCNAME(f)
+#endif
+LZOLIB_PUBLIC(void, lzo_getopt_init) (lzo_getopt_p g,
+ int start_argc, int argc, char** argv)
+{
+ memset(g, 0, sizeof(*g));
+ g->optind = start_argc;
+ g->argc = argc; g->argv = argv;
+ g->optopt = -1;
+}
+static int __LZOLIB_FUNCNAME(lzo_getopt_rotate) (char** p, int first, int middle, int last)
+{
+ int i = middle, n = middle - first;
+ if (first >= middle || middle >= last) return 0;
+ for (;;)
+ {
+ char* t = p[first]; p[first] = p[i]; p[i] = t;
+ if (++first == middle)
+ {
+ if (++i == last) break;
+ middle = i;
+ }
+ else if (++i == last)
+ i = middle;
+ }
+ return n;
+}
+static int __LZOLIB_FUNCNAME(lzo_getopt_perror) (lzo_getopt_p g, int ret, const char* f, ...)
+{
+ if (g->opterr)
+ {
+#if (HAVE_STDARG_H)
+ struct { va_list ap; } s;
+ va_start(s.ap, f);
+ g->opterr(g, f, &s);
+ va_end(s.ap);
+#else
+ g->opterr(g, f, NULL);
+#endif
+ }
+ ++g->errcount;
+ return ret;
+}
+LZOLIB_PUBLIC(int, lzo_getopt) (lzo_getopt_p g,
+ const char* shortopts,
+ const lzo_getopt_longopt_p longopts,
+ int* longind)
+{
+#define pe __LZOLIB_FUNCNAME(lzo_getopt_perror)
+ int ordering = LZO_GETOPT_PERMUTE;
+ int missing_arg_ret = g->bad_option;
+ char* a;
+ if (shortopts)
+ {
+ if (*shortopts == '-' || *shortopts == '+')
+ ordering = *shortopts++ == '-' ? LZO_GETOPT_RETURN_IN_ORDER : LZO_GETOPT_REQUIRE_ORDER;
+ if (*shortopts == ':')
+ missing_arg_ret = *shortopts++;
+ }
+ g->optarg = NULL;
+ if (g->optopt == -1)
+ g->optopt = g->bad_option;
+ if (longind)
+ *longind = -1;
+ if (g->eof)
+ return -1;
+ if (g->shortpos)
+ goto lzo_label_next_shortopt;
+ g->optind -= __LZOLIB_FUNCNAME(lzo_getopt_rotate)(g->argv, g->pending_rotate_first, g->pending_rotate_middle, g->optind);
+ g->pending_rotate_first = g->pending_rotate_middle = g->optind;
+ if (ordering == LZO_GETOPT_PERMUTE)
+ {
+ while (g->optind < g->argc && !(g->argv[g->optind][0] == '-' && g->argv[g->optind][1]))
+ ++g->optind;
+ g->pending_rotate_middle = g->optind;
+ }
+ if (g->optind >= g->argc)
+ {
+ g->optind = g->pending_rotate_first;
+ goto lzo_label_eof;
+ }
+ a = g->argv[g->optind];
+ if (a[0] == '-' && a[1] == '-')
+ {
+ size_t l = 0;
+ const lzo_getopt_longopt_p o;
+ const lzo_getopt_longopt_p o1 = NULL;
+ const lzo_getopt_longopt_p o2 = NULL;
+ int need_exact = 0;
+ ++g->optind;
+ if (!a[2])
+ goto lzo_label_eof;
+ for (a += 2; a[l] && a[l] != '=' && a[l] != '#'; )
+ ++l;
+ for (o = longopts; l && o && o->name; ++o)
+ {
+ if (strncmp(a, o->name, l) != 0)
+ continue;
+ if (!o->name[l])
+ goto lzo_label_found_o;
+ need_exact |= o->has_arg & LZO_GETOPT_EXACT_ARG;
+ if (o1) o2 = o;
+ else o1 = o;
+ }
+ if (!o1 || need_exact)
+ return pe(g, g->bad_option, "unrecognized option '--%s'", a);
+ if (o2)
+ return pe(g, g->bad_option, "option '--%s' is ambiguous (could be '--%s' or '--%s')", a, o1->name, o2->name);
+ o = o1;
+ lzo_label_found_o:
+ a += l;
+ switch (o->has_arg & 0x2f)
+ {
+ case LZO_GETOPT_OPTIONAL_ARG:
+ if (a[0])
+ g->optarg = a + 1;
+ break;
+ case LZO_GETOPT_REQUIRED_ARG:
+ if (a[0])
+ g->optarg = a + 1;
+ else if (g->optind < g->argc)
+ g->optarg = g->argv[g->optind++];
+ if (!g->optarg)
+ return pe(g, missing_arg_ret, "option '--%s' requires an argument", o->name);
+ break;
+ case LZO_GETOPT_REQUIRED_ARG | 0x20:
+ if (a[0] && a[1])
+ g->optarg = a + 1;
+ if (!g->optarg)
+ return pe(g, missing_arg_ret, "option '--%s=' requires an argument", o->name);
+ break;
+ default:
+ if (a[0])
+ return pe(g, g->bad_option, "option '--%s' doesn't allow an argument", o->name);
+ break;
+ }
+ if (longind)
+ *longind = (int) (o - longopts);
+ if (o->flag)
+ {
+ *o->flag = o->val;
+ return 0;
+ }
+ return o->val;
+ }
+ if (a[0] == '-' && a[1])
+ {
+ unsigned char c;
+ const char* s;
+ lzo_label_next_shortopt:
+ a = g->argv[g->optind] + ++g->shortpos;
+ c = (unsigned char) *a++; s = NULL;
+ if (c != ':' && shortopts)
+ s = strchr(shortopts, c);
+ if (!s || s[1] != ':')
+ {
+ if (!a[0])
+ { ++g->optind; g->shortpos = 0; }
+ if (!s)
+ {
+ g->optopt = c;
+ return pe(g, g->bad_option, "invalid option '-%c'", c);
+ }
+ }
+ else
+ {
+ ++g->optind; g->shortpos = 0;
+ if (a[0])
+ g->optarg = a;
+ else if (s[2] != ':')
+ {
+ if (g->optind < g->argc)
+ g->optarg = g->argv[g->optind++];
+ else
+ {
+ g->optopt = c;
+ return pe(g, missing_arg_ret, "option '-%c' requires an argument", c);
+ }
+ }
+ }
+ return c;
+ }
+ if (ordering == LZO_GETOPT_RETURN_IN_ORDER)
+ {
+ ++g->optind;
+ g->optarg = a;
+ return 1;
+ }
+lzo_label_eof:
+ g->optind -= __LZOLIB_FUNCNAME(lzo_getopt_rotate)(g->argv, g->pending_rotate_first, g->pending_rotate_middle, g->optind);
+ g->pending_rotate_first = g->pending_rotate_middle = g->optind;
+ g->eof = 1;
+ return -1;
+#undef pe
+}
+#endif
+#if defined(LZO_WANT_ACCLIB_HALLOC)
+# undef LZO_WANT_ACCLIB_HALLOC
+#define __LZOLIB_HALLOC_CH_INCLUDED 1
+#if !defined(LZOLIB_PUBLIC)
+# define LZOLIB_PUBLIC(r,f) r __LZOLIB_FUNCNAME(f)
+#endif
+#if (LZO_HAVE_MM_HUGE_PTR)
+#if 1 && (LZO_OS_DOS16 && defined(BLX286))
+# define __LZOLIB_HALLOC_USE_DAH 1
+#elif 1 && (LZO_OS_DOS16 && defined(DOSX286))
+# define __LZOLIB_HALLOC_USE_DAH 1
+#elif 1 && (LZO_OS_OS216)
+# define __LZOLIB_HALLOC_USE_DAH 1
+#elif 1 && (LZO_OS_WIN16)
+# define __LZOLIB_HALLOC_USE_GA 1
+#elif 1 && (LZO_OS_DOS16) && (LZO_CC_BORLANDC) && defined(__DPMI16__)
+# define __LZOLIB_HALLOC_USE_GA 1
+#endif
+#endif
+#if (__LZOLIB_HALLOC_USE_DAH)
+#if 0 && (LZO_OS_OS216)
+#include <os2.h>
+#else
+LZO_EXTERN_C unsigned short __far __pascal DosAllocHuge(unsigned short, unsigned short, unsigned short __far *, unsigned short, unsigned short);
+LZO_EXTERN_C unsigned short __far __pascal DosFreeSeg(unsigned short);
+#endif
+#endif
+#if (__LZOLIB_HALLOC_USE_GA)
+#if 0
+#define STRICT 1
+#include <windows.h>
+#else
+LZO_EXTERN_C const void __near* __far __pascal GlobalAlloc(unsigned, unsigned long);
+LZO_EXTERN_C const void __near* __far __pascal GlobalFree(const void __near*);
+LZO_EXTERN_C unsigned long __far __pascal GlobalHandle(unsigned);
+LZO_EXTERN_C void __far* __far __pascal GlobalLock(const void __near*);
+LZO_EXTERN_C int __far __pascal GlobalUnlock(const void __near*);
+#endif
+#endif
+LZOLIB_PUBLIC(lzo_hvoid_p, lzo_halloc) (lzo_hsize_t size)
+{
+ lzo_hvoid_p p = LZO_STATIC_CAST(lzo_hvoid_p, 0);
+ if (!(size > 0))
+ return p;
+#if 0 && defined(__palmos__)
+ p = MemPtrNew(size);
+#elif !(LZO_HAVE_MM_HUGE_PTR)
+ if (size < LZO_STATIC_CAST(size_t, -1))
+ p = malloc(LZO_STATIC_CAST(size_t, size));
+#else
+ if (LZO_STATIC_CAST(long, size) <= 0)
+ return p;
+{
+#if (__LZOLIB_HALLOC_USE_DAH)
+ unsigned short sel = 0;
+ if (DosAllocHuge((unsigned short)(size >> 16), (unsigned short)size, &sel, 0, 0) == 0)
+ p = (lzo_hvoid_p) LZO_PTR_MK_FP(sel, 0);
+#elif (__LZOLIB_HALLOC_USE_GA)
+ const void __near* h = GlobalAlloc(2, size);
+ if (h) {
+ p = GlobalLock(h);
+ if (p && LZO_PTR_FP_OFF(p) != 0) {
+ GlobalUnlock(h);
+ p = 0;
+ }
+ if (!p)
+ GlobalFree(h);
+ }
+#elif (LZO_CC_MSC && (_MSC_VER >= 700))
+ p = _halloc(size, 1);
+#elif (LZO_CC_MSC || LZO_CC_WATCOMC)
+ p = halloc(size, 1);
+#elif (LZO_CC_DMC || LZO_CC_SYMANTECC || LZO_CC_ZORTECHC)
+ p = farmalloc(size);
+#elif (LZO_CC_BORLANDC || LZO_CC_TURBOC)
+ p = farmalloc(size);
+#elif (LZO_CC_AZTECC)
+ p = lmalloc(size);
+#else
+ if (size < LZO_STATIC_CAST(size_t, -1))
+ p = malloc(LZO_STATIC_CAST(size_t, size));
+#endif
+}
+#endif
+ return p;
+}
+LZOLIB_PUBLIC(void, lzo_hfree) (lzo_hvoid_p p)
+{
+ if (!p)
+ return;
+#if 0 && defined(__palmos__)
+ MemPtrFree(p);
+#elif !(LZO_HAVE_MM_HUGE_PTR)
+ free(p);
+#else
+#if (__LZOLIB_HALLOC_USE_DAH)
+ if (LZO_PTR_FP_OFF(p) == 0)
+ DosFreeSeg((unsigned short) LZO_PTR_FP_SEG(p));
+#elif (__LZOLIB_HALLOC_USE_GA)
+ if (LZO_PTR_FP_OFF(p) == 0) {
+ const void __near* h = (const void __near*) (unsigned) GlobalHandle(LZO_PTR_FP_SEG(p));
+ if (h) {
+ GlobalUnlock(h);
+ GlobalFree(h);
+ }
+ }
+#elif (LZO_CC_MSC && (_MSC_VER >= 700))
+ _hfree(p);
+#elif (LZO_CC_MSC || LZO_CC_WATCOMC)
+ hfree(p);
+#elif (LZO_CC_DMC || LZO_CC_SYMANTECC || LZO_CC_ZORTECHC)
+ farfree((void __far*) p);
+#elif (LZO_CC_BORLANDC || LZO_CC_TURBOC)
+ farfree((void __far*) p);
+#elif (LZO_CC_AZTECC)
+ lfree(p);
+#else
+ free(p);
+#endif
+#endif
+}
+#endif
+#if defined(LZO_WANT_ACCLIB_HFREAD)
+# undef LZO_WANT_ACCLIB_HFREAD
+#define __LZOLIB_HFREAD_CH_INCLUDED 1
+#if !defined(LZOLIB_PUBLIC)
+# define LZOLIB_PUBLIC(r,f) r __LZOLIB_FUNCNAME(f)
+#endif
+LZOLIB_PUBLIC(lzo_hsize_t, lzo_hfread) (void* vfp, lzo_hvoid_p buf, lzo_hsize_t size)
+{
+ FILE* fp = LZO_STATIC_CAST(FILE *, vfp);
+#if (LZO_HAVE_MM_HUGE_PTR)
+#if (LZO_MM_TINY || LZO_MM_SMALL || LZO_MM_MEDIUM)
+#define __LZOLIB_REQUIRE_HMEMCPY_CH 1
+ unsigned char tmp[512];
+ lzo_hsize_t l = 0;
+ while (l < size)
+ {
+ size_t n = size - l > sizeof(tmp) ? sizeof(tmp) : (size_t) (size - l);
+ n = fread(tmp, 1, n, fp);
+ if (n == 0)
+ break;
+ __LZOLIB_FUNCNAME(lzo_hmemcpy)((lzo_hbyte_p)buf + l, tmp, (lzo_hsize_t)n);
+ l += n;
+ }
+ return l;
+#elif (LZO_MM_COMPACT || LZO_MM_LARGE || LZO_MM_HUGE)
+ lzo_hbyte_p b = (lzo_hbyte_p) buf;
+ lzo_hsize_t l = 0;
+ while (l < size)
+ {
+ size_t n;
+ n = LZO_PTR_FP_OFF(b); n = (n <= 1) ? 0x8000u : (0u - n);
+ if ((lzo_hsize_t) n > size - l)
+ n = (size_t) (size - l);
+ n = fread((void __far*)b, 1, n, fp);
+ if (n == 0)
+ break;
+ b += n; l += n;
+ }
+ return l;
+#else
+# error "unknown memory model"
+#endif
+#else
+ return fread(buf, 1, size, fp);
+#endif
+}
+LZOLIB_PUBLIC(lzo_hsize_t, lzo_hfwrite) (void* vfp, const lzo_hvoid_p buf, lzo_hsize_t size)
+{
+ FILE* fp = LZO_STATIC_CAST(FILE *, vfp);
+#if (LZO_HAVE_MM_HUGE_PTR)
+#if (LZO_MM_TINY || LZO_MM_SMALL || LZO_MM_MEDIUM)
+#define __LZOLIB_REQUIRE_HMEMCPY_CH 1
+ unsigned char tmp[512];
+ lzo_hsize_t l = 0;
+ while (l < size)
+ {
+ size_t n = size - l > sizeof(tmp) ? sizeof(tmp) : (size_t) (size - l);
+ __LZOLIB_FUNCNAME(lzo_hmemcpy)(tmp, (const lzo_hbyte_p)buf + l, (lzo_hsize_t)n);
+ n = fwrite(tmp, 1, n, fp);
+ if (n == 0)
+ break;
+ l += n;
+ }
+ return l;
+#elif (LZO_MM_COMPACT || LZO_MM_LARGE || LZO_MM_HUGE)
+ const lzo_hbyte_p b = (const lzo_hbyte_p) buf;
+ lzo_hsize_t l = 0;
+ while (l < size)
+ {
+ size_t n;
+ n = LZO_PTR_FP_OFF(b); n = (n <= 1) ? 0x8000u : (0u - n);
+ if ((lzo_hsize_t) n > size - l)
+ n = (size_t) (size - l);
+ n = fwrite((void __far*)b, 1, n, fp);
+ if (n == 0)
+ break;
+ b += n; l += n;
+ }
+ return l;
+#else
+# error "unknown memory model"
+#endif
+#else
+ return fwrite(buf, 1, size, fp);
+#endif
+}
+#endif
+#if defined(LZO_WANT_ACCLIB_HSREAD)
+# undef LZO_WANT_ACCLIB_HSREAD
+#define __LZOLIB_HSREAD_CH_INCLUDED 1
+#if !defined(LZOLIB_PUBLIC)
+# define LZOLIB_PUBLIC(r,f) r __LZOLIB_FUNCNAME(f)
+#endif
+LZOLIB_PUBLIC(long, lzo_safe_hread) (int fd, lzo_hvoid_p buf, long size)
+{
+ lzo_hbyte_p b = (lzo_hbyte_p) buf;
+ long l = 0;
+ int saved_errno;
+ saved_errno = errno;
+ while (l < size)
+ {
+ long n = size - l;
+#if (LZO_HAVE_MM_HUGE_PTR)
+# define __LZOLIB_REQUIRE_HREAD_CH 1
+ errno = 0; n = lzo_hread(fd, b, n);
+#elif (LZO_OS_DOS32) && defined(__DJGPP__)
+ errno = 0; n = _read(fd, b, n);
+#else
+ errno = 0; n = read(fd, b, n);
+#endif
+ if (n == 0)
+ break;
+ if (n < 0) {
+#if defined(EAGAIN)
+ if (errno == (EAGAIN)) continue;
+#endif
+#if defined(EINTR)
+ if (errno == (EINTR)) continue;
+#endif
+ if (errno == 0) errno = 1;
+ return l;
+ }
+ b += n; l += n;
+ }
+ errno = saved_errno;
+ return l;
+}
+LZOLIB_PUBLIC(long, lzo_safe_hwrite) (int fd, const lzo_hvoid_p buf, long size)
+{
+ const lzo_hbyte_p b = (const lzo_hbyte_p) buf;
+ long l = 0;
+ int saved_errno;
+ saved_errno = errno;
+ while (l < size)
+ {
+ long n = size - l;
+#if (LZO_HAVE_MM_HUGE_PTR)
+# define __LZOLIB_REQUIRE_HREAD_CH 1
+ errno = 0; n = lzo_hwrite(fd, b, n);
+#elif (LZO_OS_DOS32) && defined(__DJGPP__)
+ errno = 0; n = _write(fd, b, n);
+#else
+ errno = 0; n = write(fd, b, n);
+#endif
+ if (n == 0)
+ break;
+ if (n < 0) {
+#if defined(EAGAIN)
+ if (errno == (EAGAIN)) continue;
+#endif
+#if defined(EINTR)
+ if (errno == (EINTR)) continue;
+#endif
+ if (errno == 0) errno = 1;
+ return l;
+ }
+ b += n; l += n;
+ }
+ errno = saved_errno;
+ return l;
+}
+#endif
+#if defined(LZO_WANT_ACCLIB_PCLOCK)
+# undef LZO_WANT_ACCLIB_PCLOCK
+#define __LZOLIB_PCLOCK_CH_INCLUDED 1
+#if !defined(LZOLIB_PUBLIC)
+# define LZOLIB_PUBLIC(r,f) r __LZOLIB_FUNCNAME(f)
+#endif
+#if 1 && (LZO_OS_POSIX_LINUX && LZO_ARCH_AMD64 && LZO_ASM_SYNTAX_GNUC && !LZO_CFG_NO_SYSCALL)
+#ifndef lzo_pclock_syscall_clock_gettime
+#define lzo_pclock_syscall_clock_gettime lzo_pclock_syscall_clock_gettime
+#endif
+__lzo_static_noinline long lzo_pclock_syscall_clock_gettime(long clockid, struct timespec *ts)
+{
+ unsigned long r = 228;
+ __asm__ __volatile__("syscall\n" : "=a" (r), "=m" (*ts) : "0" (r), "D" (clockid), "S" (ts) __LZO_ASM_CLOBBER_LIST_CC);
+ return LZO_ICAST(long, r);
+}
+#endif
+#if 1 && (LZO_OS_POSIX_LINUX && LZO_ARCH_I386 && LZO_ASM_SYNTAX_GNUC && !LZO_CFG_NO_SYSCALL) && defined(lzo_int64l_t)
+#ifndef lzo_pclock_syscall_clock_gettime
+#define lzo_pclock_syscall_clock_gettime lzo_pclock_syscall_clock_gettime
+#endif
+__lzo_static_noinline long lzo_pclock_syscall_clock_gettime(long clockid, struct timespec *ts)
+{
+ unsigned long r = 265;
+ __asm__ __volatile__("pushl %%ebx\n pushl %%edx\n popl %%ebx\n int $0x80\n popl %%ebx\n": "=a" (r), "=m" (*ts) : "0" (r), "d" (clockid), "c" (ts) __LZO_ASM_CLOBBER_LIST_CC);
+ return LZO_ICAST(long, r);
+}
+#endif
+#if 0 && defined(lzo_pclock_syscall_clock_gettime)
+#ifndef lzo_pclock_read_clock_gettime_r_syscall
+#define lzo_pclock_read_clock_gettime_r_syscall lzo_pclock_read_clock_gettime_r_syscall
+#endif
+static int lzo_pclock_read_clock_gettime_r_syscall(lzo_pclock_handle_p h, lzo_pclock_p c)
+{
+ struct timespec ts;
+ if (lzo_pclock_syscall_clock_gettime(0, &ts) != 0)
+ return -1;
+ c->tv_sec = ts.tv_sec;
+ c->tv_nsec = LZO_STATIC_CAST(lzo_uint32l_t, ts.tv_nsec);
+ LZO_UNUSED(h); return 0;
+}
+#endif
+#if (HAVE_GETTIMEOFDAY)
+#ifndef lzo_pclock_read_gettimeofday
+#define lzo_pclock_read_gettimeofday lzo_pclock_read_gettimeofday
+#endif
+static int lzo_pclock_read_gettimeofday(lzo_pclock_handle_p h, lzo_pclock_p c)
+{
+ struct timeval tv;
+ if (gettimeofday(&tv, NULL) != 0)
+ return -1;
+#if defined(lzo_int64l_t)
+ c->tv_sec = tv.tv_sec;
+#else
+ c->tv_sec_high = 0;
+ c->tv_sec_low = tv.tv_sec;
+#endif
+ c->tv_nsec = LZO_STATIC_CAST(lzo_uint32l_t, (tv.tv_usec * 1000u));
+ LZO_UNUSED(h); return 0;
+}
+#endif
+#if defined(CLOCKS_PER_SEC) && !(LZO_CFG_NO_DOUBLE)
+#ifndef lzo_pclock_read_clock
+#define lzo_pclock_read_clock lzo_pclock_read_clock
+#endif
+static int lzo_pclock_read_clock(lzo_pclock_handle_p h, lzo_pclock_p c)
+{
+ clock_t ticks;
+ double secs;
+#if defined(lzo_int64l_t)
+ lzo_uint64l_t nsecs;
+ ticks = clock();
+ secs = LZO_STATIC_CAST(double, ticks) / (CLOCKS_PER_SEC);
+ nsecs = LZO_STATIC_CAST(lzo_uint64l_t, (secs * 1000000000.0));
+ c->tv_sec = LZO_STATIC_CAST(lzo_int64l_t, (nsecs / 1000000000ul));
+ nsecs = (nsecs % 1000000000ul);
+ c->tv_nsec = LZO_STATIC_CAST(lzo_uint32l_t, nsecs);
+#else
+ ticks = clock();
+ secs = LZO_STATIC_CAST(double, ticks) / (CLOCKS_PER_SEC);
+ c->tv_sec_high = 0;
+ c->tv_sec_low = LZO_STATIC_CAST(lzo_uint32l_t, (secs + 0.5));
+ c->tv_nsec = 0;
+#endif
+ LZO_UNUSED(h); return 0;
+}
+#endif
+#if 1 && defined(lzo_pclock_syscall_clock_gettime)
+#ifndef lzo_pclock_read_clock_gettime_m_syscall
+#define lzo_pclock_read_clock_gettime_m_syscall lzo_pclock_read_clock_gettime_m_syscall
+#endif
+static int lzo_pclock_read_clock_gettime_m_syscall(lzo_pclock_handle_p h, lzo_pclock_p c)
+{
+ struct timespec ts;
+ if (lzo_pclock_syscall_clock_gettime(1, &ts) != 0)
+ return -1;
+ c->tv_sec = ts.tv_sec;
+ c->tv_nsec = LZO_STATIC_CAST(lzo_uint32l_t, ts.tv_nsec);
+ LZO_UNUSED(h); return 0;
+}
+#endif
+#if (LZO_OS_DOS32 && LZO_CC_GNUC) && defined(__DJGPP__) && defined(UCLOCKS_PER_SEC) && !(LZO_CFG_NO_DOUBLE)
+#ifndef lzo_pclock_read_uclock
+#define lzo_pclock_read_uclock lzo_pclock_read_uclock
+#endif
+static int lzo_pclock_read_uclock(lzo_pclock_handle_p h, lzo_pclock_p c)
+{
+ lzo_uint64l_t ticks;
+ double secs;
+ lzo_uint64l_t nsecs;
+ ticks = uclock();
+ secs = LZO_STATIC_CAST(double, ticks) / (UCLOCKS_PER_SEC);
+ nsecs = LZO_STATIC_CAST(lzo_uint64l_t, (secs * 1000000000.0));
+ c->tv_sec = nsecs / 1000000000ul;
+ c->tv_nsec = LZO_STATIC_CAST(lzo_uint32l_t, (nsecs % 1000000000ul));
+ LZO_UNUSED(h); return 0;
+}
+#endif
+#if 1 && (HAVE_CLOCK_GETTIME) && defined(CLOCK_PROCESS_CPUTIME_ID) && defined(lzo_int64l_t)
+#ifndef lzo_pclock_read_clock_gettime_p_libc
+#define lzo_pclock_read_clock_gettime_p_libc lzo_pclock_read_clock_gettime_p_libc
+#endif
+static int lzo_pclock_read_clock_gettime_p_libc(lzo_pclock_handle_p h, lzo_pclock_p c)
+{
+ struct timespec ts;
+ if (clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &ts) != 0)
+ return -1;
+ c->tv_sec = ts.tv_sec;
+ c->tv_nsec = LZO_STATIC_CAST(lzo_uint32l_t, ts.tv_nsec);
+ LZO_UNUSED(h); return 0;
+}
+#endif
+#if 1 && defined(lzo_pclock_syscall_clock_gettime)
+#ifndef lzo_pclock_read_clock_gettime_p_syscall
+#define lzo_pclock_read_clock_gettime_p_syscall lzo_pclock_read_clock_gettime_p_syscall
+#endif
+static int lzo_pclock_read_clock_gettime_p_syscall(lzo_pclock_handle_p h, lzo_pclock_p c)
+{
+ struct timespec ts;
+ if (lzo_pclock_syscall_clock_gettime(2, &ts) != 0)
+ return -1;
+ c->tv_sec = ts.tv_sec;
+ c->tv_nsec = LZO_STATIC_CAST(lzo_uint32l_t, ts.tv_nsec);
+ LZO_UNUSED(h); return 0;
+}
+#endif
+#if (LZO_OS_CYGWIN || LZO_OS_WIN32 || LZO_OS_WIN64) && (LZO_HAVE_WINDOWS_H) && defined(lzo_int64l_t)
+#ifndef lzo_pclock_read_getprocesstimes
+#define lzo_pclock_read_getprocesstimes lzo_pclock_read_getprocesstimes
+#endif
+static int lzo_pclock_read_getprocesstimes(lzo_pclock_handle_p h, lzo_pclock_p c)
+{
+ FILETIME ct, et, kt, ut;
+ lzo_uint64l_t ticks;
+ if (GetProcessTimes(GetCurrentProcess(), &ct, &et, &kt, &ut) == 0)
+ return -1;
+ ticks = (LZO_STATIC_CAST(lzo_uint64l_t, ut.dwHighDateTime) << 32) | ut.dwLowDateTime;
+ if __lzo_unlikely(h->ticks_base == 0)
+ h->ticks_base = ticks;
+ else
+ ticks -= h->ticks_base;
+ c->tv_sec = LZO_STATIC_CAST(lzo_int64l_t, (ticks / 10000000ul));
+ ticks = (ticks % 10000000ul) * 100u;
+ c->tv_nsec = LZO_STATIC_CAST(lzo_uint32l_t, ticks);
+ LZO_UNUSED(h); return 0;
+}
+#endif
+#if (HAVE_GETRUSAGE) && defined(RUSAGE_SELF)
+#ifndef lzo_pclock_read_getrusage
+#define lzo_pclock_read_getrusage lzo_pclock_read_getrusage
+#endif
+static int lzo_pclock_read_getrusage(lzo_pclock_handle_p h, lzo_pclock_p c)
+{
+ struct rusage ru;
+ if (getrusage(RUSAGE_SELF, &ru) != 0)
+ return -1;
+#if defined(lzo_int64l_t)
+ c->tv_sec = ru.ru_utime.tv_sec;
+#else
+ c->tv_sec_high = 0;
+ c->tv_sec_low = ru.ru_utime.tv_sec;
+#endif
+ c->tv_nsec = LZO_STATIC_CAST(lzo_uint32l_t, (ru.ru_utime.tv_usec * 1000u));
+ LZO_UNUSED(h); return 0;
+}
+#endif
+#if 1 && (HAVE_CLOCK_GETTIME) && defined(CLOCK_THREAD_CPUTIME_ID) && defined(lzo_int64l_t)
+#ifndef lzo_pclock_read_clock_gettime_t_libc
+#define lzo_pclock_read_clock_gettime_t_libc lzo_pclock_read_clock_gettime_t_libc
+#endif
+static int lzo_pclock_read_clock_gettime_t_libc(lzo_pclock_handle_p h, lzo_pclock_p c)
+{
+ struct timespec ts;
+ if (clock_gettime(CLOCK_THREAD_CPUTIME_ID, &ts) != 0)
+ return -1;
+ c->tv_sec = ts.tv_sec;
+ c->tv_nsec = (lzo_uint32l_t) ts.tv_nsec;
+ LZO_UNUSED(h); return 0;
+}
+#endif
+#if 1 && defined(lzo_pclock_syscall_clock_gettime)
+#ifndef lzo_pclock_read_clock_gettime_t_syscall
+#define lzo_pclock_read_clock_gettime_t_syscall lzo_pclock_read_clock_gettime_t_syscall
+#endif
+static int lzo_pclock_read_clock_gettime_t_syscall(lzo_pclock_handle_p h, lzo_pclock_p c)
+{
+ struct timespec ts;
+ if (lzo_pclock_syscall_clock_gettime(3, &ts) != 0)
+ return -1;
+ c->tv_sec = ts.tv_sec;
+ c->tv_nsec = LZO_STATIC_CAST(lzo_uint32l_t, ts.tv_nsec);
+ LZO_UNUSED(h); return 0;
+}
+#endif
+#if (LZO_OS_CYGWIN || LZO_OS_WIN32 || LZO_OS_WIN64) && (LZO_HAVE_WINDOWS_H) && defined(lzo_int64l_t)
+#ifndef lzo_pclock_read_getthreadtimes
+#define lzo_pclock_read_getthreadtimes lzo_pclock_read_getthreadtimes
+#endif
+static int lzo_pclock_read_getthreadtimes(lzo_pclock_handle_p h, lzo_pclock_p c)
+{
+ FILETIME ct, et, kt, ut;
+ lzo_uint64l_t ticks;
+ if (GetThreadTimes(GetCurrentThread(), &ct, &et, &kt, &ut) == 0)
+ return -1;
+ ticks = (LZO_STATIC_CAST(lzo_uint64l_t, ut.dwHighDateTime) << 32) | ut.dwLowDateTime;
+ if __lzo_unlikely(h->ticks_base == 0)
+ h->ticks_base = ticks;
+ else
+ ticks -= h->ticks_base;
+ c->tv_sec = LZO_STATIC_CAST(lzo_int64l_t, (ticks / 10000000ul));
+ ticks = (ticks % 10000000ul) * 100u;
+ c->tv_nsec = LZO_STATIC_CAST(lzo_uint32l_t, ticks);
+ LZO_UNUSED(h); return 0;
+}
+#endif
+LZOLIB_PUBLIC(int, lzo_pclock_open) (lzo_pclock_handle_p h, int mode)
+{
+ lzo_pclock_t c;
+ int i;
+ h->h = LZO_STATIC_CAST(lzolib_handle_t, 0);
+ h->mode = -1;
+ h->read_error = 2;
+ h->name = NULL;
+ h->gettime = LZO_STATIC_CAST(lzo_pclock_gettime_t, 0);
+#if defined(lzo_int64l_t)
+ h->ticks_base = 0;
+#endif
+ switch (mode)
+ {
+ case LZO_PCLOCK_REALTIME:
+# if defined(lzo_pclock_read_clock_gettime_r_syscall)
+ if (lzo_pclock_read_clock_gettime_r_syscall(h, &c) == 0) {
+ h->gettime = lzo_pclock_read_clock_gettime_r_syscall;
+ h->name = "CLOCK_REALTIME/syscall";
+ break;
+ }
+# endif
+# if defined(lzo_pclock_read_gettimeofday)
+ if (lzo_pclock_read_gettimeofday(h, &c) == 0) {
+ h->gettime = lzo_pclock_read_gettimeofday;
+ h->name = "gettimeofday";
+ break;
+ }
+# endif
+ break;
+ case LZO_PCLOCK_MONOTONIC:
+# if defined(lzo_pclock_read_clock_gettime_m_syscall)
+ if (lzo_pclock_read_clock_gettime_m_syscall(h, &c) == 0) {
+ h->gettime = lzo_pclock_read_clock_gettime_m_syscall;
+ h->name = "CLOCK_MONOTONIC/syscall";
+ break;
+ }
+# endif
+# if defined(lzo_pclock_read_uclock)
+ if (lzo_pclock_read_uclock(h, &c) == 0) {
+ h->gettime = lzo_pclock_read_uclock;
+ h->name = "uclock";
+ break;
+ }
+# endif
+# if defined(lzo_pclock_read_clock)
+ if (lzo_pclock_read_clock(h, &c) == 0) {
+ h->gettime = lzo_pclock_read_clock;
+ h->name = "clock";
+ break;
+ }
+# endif
+ break;
+ case LZO_PCLOCK_PROCESS_CPUTIME_ID:
+# if defined(lzo_pclock_read_getprocesstimes)
+ if (lzo_pclock_read_getprocesstimes(h, &c) == 0) {
+ h->gettime = lzo_pclock_read_getprocesstimes;
+ h->name = "GetProcessTimes";
+ break;
+ }
+# endif
+# if defined(lzo_pclock_read_clock_gettime_p_syscall)
+ if (lzo_pclock_read_clock_gettime_p_syscall(h, &c) == 0) {
+ h->gettime = lzo_pclock_read_clock_gettime_p_syscall;
+ h->name = "CLOCK_PROCESS_CPUTIME_ID/syscall";
+ break;
+ }
+# endif
+# if defined(lzo_pclock_read_clock_gettime_p_libc)
+ if (lzo_pclock_read_clock_gettime_p_libc(h, &c) == 0) {
+ h->gettime = lzo_pclock_read_clock_gettime_p_libc;
+ h->name = "CLOCK_PROCESS_CPUTIME_ID/libc";
+ break;
+ }
+# endif
+# if defined(lzo_pclock_read_getrusage)
+ if (lzo_pclock_read_getrusage(h, &c) == 0) {
+ h->gettime = lzo_pclock_read_getrusage;
+ h->name = "getrusage";
+ break;
+ }
+# endif
+ break;
+ case LZO_PCLOCK_THREAD_CPUTIME_ID:
+# if defined(lzo_pclock_read_getthreadtimes)
+ if (lzo_pclock_read_getthreadtimes(h, &c) == 0) {
+ h->gettime = lzo_pclock_read_getthreadtimes;
+ h->name = "GetThreadTimes";
+ }
+# endif
+# if defined(lzo_pclock_read_clock_gettime_t_syscall)
+ if (lzo_pclock_read_clock_gettime_t_syscall(h, &c) == 0) {
+ h->gettime = lzo_pclock_read_clock_gettime_t_syscall;
+ h->name = "CLOCK_THREAD_CPUTIME_ID/syscall";
+ break;
+ }
+# endif
+# if defined(lzo_pclock_read_clock_gettime_t_libc)
+ if (lzo_pclock_read_clock_gettime_t_libc(h, &c) == 0) {
+ h->gettime = lzo_pclock_read_clock_gettime_t_libc;
+ h->name = "CLOCK_THREAD_CPUTIME_ID/libc";
+ break;
+ }
+# endif
+ break;
+ }
+ if (!h->gettime)
+ return -1;
+ if (!h->h)
+ h->h = LZO_STATIC_CAST(lzolib_handle_t, 1);
+ h->mode = mode;
+ h->read_error = 0;
+ if (!h->name)
+ h->name = "unknown";
+ for (i = 0; i < 10; i++) {
+ __LZOLIB_FUNCNAME(lzo_pclock_read)(h, &c);
+ }
+ return 0;
+}
+LZOLIB_PUBLIC(int, lzo_pclock_open_default) (lzo_pclock_handle_p h)
+{
+ if (__LZOLIB_FUNCNAME(lzo_pclock_open)(h, LZO_PCLOCK_PROCESS_CPUTIME_ID) == 0)
+ return 0;
+ if (__LZOLIB_FUNCNAME(lzo_pclock_open)(h, LZO_PCLOCK_MONOTONIC) == 0)
+ return 0;
+ if (__LZOLIB_FUNCNAME(lzo_pclock_open)(h, LZO_PCLOCK_REALTIME) == 0)
+ return 0;
+ if (__LZOLIB_FUNCNAME(lzo_pclock_open)(h, LZO_PCLOCK_THREAD_CPUTIME_ID) == 0)
+ return 0;
+ return -1;
+}
+LZOLIB_PUBLIC(int, lzo_pclock_close) (lzo_pclock_handle_p h)
+{
+ h->h = LZO_STATIC_CAST(lzolib_handle_t, 0);
+ h->mode = -1;
+ h->name = NULL;
+ h->gettime = LZO_STATIC_CAST(lzo_pclock_gettime_t, 0);
+ return 0;
+}
+LZOLIB_PUBLIC(void, lzo_pclock_read) (lzo_pclock_handle_p h, lzo_pclock_p c)
+{
+ if (h->gettime) {
+ if (h->gettime(h, c) == 0)
+ return;
+ }
+ h->read_error = 1;
+#if defined(lzo_int64l_t)
+ c->tv_sec = 0;
+#else
+ c->tv_sec_high = 0;
+ c->tv_sec_low = 0;
+#endif
+ c->tv_nsec = 0;
+}
+#if !(LZO_CFG_NO_DOUBLE)
+LZOLIB_PUBLIC(double, lzo_pclock_get_elapsed) (lzo_pclock_handle_p h, const lzo_pclock_p start, const lzo_pclock_p stop)
+{
+ if (!h->h) { h->mode = -1; return 0.0; }
+ {
+#if 1 && (LZO_ARCH_I386 && LZO_CC_GNUC) && defined(__STRICT_ALIGNMENT__)
+ float tstop, tstart;
+ tstop = LZO_STATIC_CAST(float, (stop->tv_sec + stop->tv_nsec / 1000000000.0));
+ tstart = LZO_STATIC_CAST(float, (start->tv_sec + start->tv_nsec / 1000000000.0));
+#elif defined(lzo_int64l_t)
+ double tstop, tstart;
+#if 1 && (LZO_CC_INTELC)
+ { lzo_int64l_t a = stop->tv_sec; lzo_uint32l_t b = stop->tv_nsec;
+ tstop = a + b / 1000000000.0; }
+ { lzo_int64l_t a = start->tv_sec; lzo_uint32l_t b = start->tv_nsec;
+ tstart = a + b / 1000000000.0; }
+#else
+ tstop = stop->tv_sec + stop->tv_nsec / 1000000000.0;
+ tstart = start->tv_sec + start->tv_nsec / 1000000000.0;
+#endif
+#else
+ double tstop, tstart;
+ tstop = stop->tv_sec_low + stop->tv_nsec / 1000000000.0;
+ tstart = start->tv_sec_low + start->tv_nsec / 1000000000.0;
+#endif
+ return tstop - tstart;
+ }
+}
+#endif
+LZOLIB_PUBLIC(int, lzo_pclock_flush_cpu_cache) (lzo_pclock_handle_p h, unsigned flags)
+{
+ LZO_UNUSED(h); LZO_UNUSED(flags);
+ return -1;
+}
+#endif
+#if defined(LZO_WANT_ACCLIB_MISC)
+# undef LZO_WANT_ACCLIB_MISC
+#define __LZOLIB_MISC_CH_INCLUDED 1
+#if !defined(LZOLIB_PUBLIC)
+# define LZOLIB_PUBLIC(r,f) r __LZOLIB_FUNCNAME(f)
+#endif
+#if !defined(LZOLIB_PUBLIC_NOINLINE)
+# if !defined(__lzo_noinline)
+# define LZOLIB_PUBLIC_NOINLINE(r,f) r __LZOLIB_FUNCNAME(f)
+# elif (LZO_CC_CLANG || (LZO_CC_GNUC >= 0x030400ul) || LZO_CC_LLVM)
+# define LZOLIB_PUBLIC_NOINLINE(r,f) __lzo_noinline __attribute__((__used__)) r __LZOLIB_FUNCNAME(f)
+# else
+# define LZOLIB_PUBLIC_NOINLINE(r,f) __lzo_noinline r __LZOLIB_FUNCNAME(f)
+# endif
+#endif
+#if (LZO_OS_WIN32 && LZO_CC_PELLESC && (__POCC__ >= 290))
+# pragma warn(push)
+# pragma warn(disable:2007)
+#endif
+LZOLIB_PUBLIC(const char *, lzo_getenv) (const char *s)
+{
+#if (HAVE_GETENV)
+ return getenv(s);
+#else
+ LZO_UNUSED(s); return LZO_STATIC_CAST(const char *, 0);
+#endif
+}
+LZOLIB_PUBLIC(lzo_intptr_t, lzo_get_osfhandle) (int fd)
+{
+ if (fd < 0)
+ return -1;
+#if (LZO_OS_CYGWIN)
+ return get_osfhandle(fd);
+#elif (LZO_OS_EMX && defined(__RSXNT__))
+ return -1;
+#elif (LZO_OS_WIN32 && LZO_CC_GNUC) && defined(__PW32__)
+ return -1;
+#elif (LZO_OS_WIN32 || LZO_OS_WIN64)
+# if (LZO_CC_PELLESC && (__POCC__ < 280))
+ return -1;
+# elif (LZO_CC_WATCOMC && (__WATCOMC__ < 1000))
+ return -1;
+# elif (LZO_CC_WATCOMC && (__WATCOMC__ < 1100))
+ return _os_handle(fd);
+# else
+ return _get_osfhandle(fd);
+# endif
+#else
+ return fd;
+#endif
+}
+LZOLIB_PUBLIC(int, lzo_set_binmode) (int fd, int binary)
+{
+#if (LZO_ARCH_M68K && LZO_OS_TOS && LZO_CC_GNUC) && defined(__MINT__)
+ FILE* fp; int old_binary;
+ if (fd == STDIN_FILENO) fp = stdin;
+ else if (fd == STDOUT_FILENO) fp = stdout;
+ else if (fd == STDERR_FILENO) fp = stderr;
+ else return -1;
+ old_binary = fp->__mode.__binary;
+ __set_binmode(fp, binary ? 1 : 0);
+ return old_binary ? 1 : 0;
+#elif (LZO_ARCH_M68K && LZO_OS_TOS)
+ LZO_UNUSED(fd); LZO_UNUSED(binary);
+ return -1;
+#elif (LZO_OS_DOS16 && (LZO_CC_AZTECC || LZO_CC_PACIFICC))
+ LZO_UNUSED(fd); LZO_UNUSED(binary);
+ return -1;
+#elif (LZO_OS_DOS32 && LZO_CC_GNUC) && defined(__DJGPP__)
+ int r; unsigned old_flags = __djgpp_hwint_flags;
+ LZO_COMPILE_TIME_ASSERT(O_BINARY > 0)
+ LZO_COMPILE_TIME_ASSERT(O_TEXT > 0)
+ if (fd < 0) return -1;
+ r = setmode(fd, binary ? O_BINARY : O_TEXT);
+ if ((old_flags & 1u) != (__djgpp_hwint_flags & 1u))
+ __djgpp_set_ctrl_c(!(old_flags & 1));
+ if (r == -1) return -1;
+ return (r & O_TEXT) ? 0 : 1;
+#elif (LZO_OS_WIN32 && LZO_CC_GNUC) && defined(__PW32__)
+ if (fd < 0) return -1;
+ LZO_UNUSED(binary);
+ return 1;
+#elif (LZO_OS_DOS32 && LZO_CC_HIGHC)
+ FILE* fp; int r;
+ if (fd == fileno(stdin)) fp = stdin;
+ else if (fd == fileno(stdout)) fp = stdout;
+ else if (fd == fileno(stderr)) fp = stderr;
+ else return -1;
+ r = _setmode(fp, binary ? _BINARY : _TEXT);
+ if (r == -1) return -1;
+ return (r & _BINARY) ? 1 : 0;
+#elif (LZO_OS_WIN32 && LZO_CC_MWERKS) && defined(__MSL__)
+ LZO_UNUSED(fd); LZO_UNUSED(binary);
+ return -1;
+#elif (LZO_OS_CYGWIN && (LZO_CC_GNUC < 0x025a00ul))
+ LZO_UNUSED(fd); LZO_UNUSED(binary);
+ return -1;
+#elif (LZO_OS_CYGWIN || LZO_OS_DOS16 || LZO_OS_DOS32 || LZO_OS_EMX || LZO_OS_OS2 || LZO_OS_OS216 || LZO_OS_WIN16 || LZO_OS_WIN32 || LZO_OS_WIN64)
+ int r;
+#if !(LZO_CC_ZORTECHC)
+ LZO_COMPILE_TIME_ASSERT(O_BINARY > 0)
+#endif
+ LZO_COMPILE_TIME_ASSERT(O_TEXT > 0)
+ if (fd < 0) return -1;
+ r = setmode(fd, binary ? O_BINARY : O_TEXT);
+ if (r == -1) return -1;
+ return (r & O_TEXT) ? 0 : 1;
+#else
+ if (fd < 0) return -1;
+ LZO_UNUSED(binary);
+ return 1;
+#endif
+}
+LZOLIB_PUBLIC(int, lzo_isatty) (int fd)
+{
+ if (fd < 0)
+ return 0;
+#if (LZO_OS_DOS16 && !(LZO_CC_AZTECC))
+ {
+ union REGS ri, ro;
+ ri.x.ax = 0x4400; ri.x.bx = fd;
+ int86(0x21, &ri, &ro);
+ if ((ro.x.cflag & 1) == 0)
+ if ((ro.x.ax & 0x83) != 0x83)
+ return 0;
+ }
+#elif (LZO_OS_DOS32 && LZO_CC_WATCOMC)
+ {
+ union REGS ri, ro;
+ ri.w.ax = 0x4400; ri.w.bx = LZO_STATIC_CAST(unsigned short, fd);
+ int386(0x21, &ri, &ro);
+ if ((ro.w.cflag & 1) == 0)
+ if ((ro.w.ax & 0x83) != 0x83)
+ return 0;
+ }
+#elif (LZO_HAVE_WINDOWS_H)
+ {
+ lzo_intptr_t h = __LZOLIB_FUNCNAME(lzo_get_osfhandle)(fd);
+ LZO_COMPILE_TIME_ASSERT(sizeof(h) == sizeof(HANDLE))
+ if (h != -1)
+ {
+ DWORD d = 0;
+ if (GetConsoleMode(LZO_REINTERPRET_CAST(HANDLE, h), &d) == 0)
+ return 0;
+ }
+ }
+#endif
+#if (HAVE_ISATTY)
+ return (isatty(fd)) ? 1 : 0;
+#else
+ return 0;
+#endif
+}
+LZOLIB_PUBLIC(int, lzo_mkdir) (const char* name, unsigned mode)
+{
+#if !(HAVE_MKDIR)
+ LZO_UNUSED(name); LZO_UNUSED(mode);
+ return -1;
+#elif (LZO_ARCH_M68K && LZO_OS_TOS && (LZO_CC_PUREC || LZO_CC_TURBOC))
+ LZO_UNUSED(mode);
+ return Dcreate(name);
+#elif (LZO_OS_DOS32 && LZO_CC_GNUC) && defined(__DJGPP__)
+ return mkdir(name, mode);
+#elif (LZO_OS_WIN32 && LZO_CC_GNUC) && defined(__PW32__)
+ return mkdir(name, mode);
+#elif ((LZO_OS_DOS16 || LZO_OS_DOS32) && (LZO_CC_HIGHC || LZO_CC_PACIFICC))
+ LZO_UNUSED(mode);
+ return mkdir(LZO_UNCONST_CAST(char *, name));
+#elif (LZO_OS_DOS16 || LZO_OS_DOS32 || LZO_OS_OS2 || LZO_OS_OS216 || LZO_OS_WIN16 || LZO_OS_WIN32 || LZO_OS_WIN64)
+ LZO_UNUSED(mode);
+ return mkdir(name);
+#elif (LZO_CC_WATCOMC)
+ return mkdir(name, LZO_STATIC_CAST(mode_t, mode));
+#else
+ return mkdir(name, mode);
+#endif
+}
+LZOLIB_PUBLIC(int, lzo_rmdir) (const char* name)
+{
+#if !(HAVE_RMDIR)
+ LZO_UNUSED(name);
+ return -1;
+#elif ((LZO_OS_DOS16 || LZO_OS_DOS32) && (LZO_CC_HIGHC || LZO_CC_PACIFICC))
+ return rmdir(LZO_UNCONST_CAST(char *, name));
+#else
+ return rmdir(name);
+#endif
+}
+#if defined(lzo_int32e_t)
+LZOLIB_PUBLIC(lzo_int32e_t, lzo_muldiv32s) (lzo_int32e_t a, lzo_int32e_t b, lzo_int32e_t x)
+{
+ lzo_int32e_t r = 0;
+ if __lzo_likely(x != 0)
+ {
+#if defined(lzo_int64l_t)
+ lzo_int64l_t rr = (LZO_ICONV(lzo_int64l_t, a) * b) / x;
+ r = LZO_ITRUNC(lzo_int32e_t, rr);
+#else
+ LZO_UNUSED(a); LZO_UNUSED(b);
+#endif
+ }
+ return r;
+}
+LZOLIB_PUBLIC(lzo_uint32e_t, lzo_muldiv32u) (lzo_uint32e_t a, lzo_uint32e_t b, lzo_uint32e_t x)
+{
+ lzo_uint32e_t r = 0;
+ if __lzo_likely(x != 0)
+ {
+#if defined(lzo_int64l_t)
+ lzo_uint64l_t rr = (LZO_ICONV(lzo_uint64l_t, a) * b) / x;
+ r = LZO_ITRUNC(lzo_uint32e_t, rr);
+#else
+ LZO_UNUSED(a); LZO_UNUSED(b);
+#endif
+ }
+ return r;
+}
+#endif
+#if (LZO_OS_WIN16)
+LZO_EXTERN_C void __far __pascal DebugBreak(void);
+#endif
+LZOLIB_PUBLIC_NOINLINE(void, lzo_debug_break) (void)
+{
+#if (LZO_OS_WIN16)
+ DebugBreak();
+#elif (LZO_ARCH_I086)
+#elif (LZO_OS_WIN64) && (LZO_HAVE_WINDOWS_H)
+ DebugBreak();
+#elif (LZO_ARCH_AMD64 || LZO_ARCH_I386) && (LZO_ASM_SYNTAX_GNUC)
+ __asm__ __volatile__("int $3\n" : : __LZO_ASM_CLOBBER_LIST_CC_MEMORY);
+#elif (LZO_ARCH_I386) && (LZO_ASM_SYNTAX_MSC)
+ __asm { int 3 }
+#elif (LZO_OS_WIN32) && (LZO_HAVE_WINDOWS_H)
+ DebugBreak();
+#else
+ volatile lzo_intptr_t a = -1;
+ * LZO_STATIC_CAST(volatile unsigned long *, LZO_REINTERPRET_CAST(volatile void *, a)) = ~0ul;
+#endif
+}
+LZOLIB_PUBLIC_NOINLINE(void, lzo_debug_nop) (void)
+{
+}
+LZOLIB_PUBLIC_NOINLINE(int, lzo_debug_align_check_query) (void)
+{
+#if (LZO_ARCH_AMD64 || LZO_ARCH_I386) && (LZO_ASM_SYNTAX_GNUC)
+# if (LZO_ARCH_AMD64)
+ lzo_uint64e_t r = 0;
+# else
+ size_t r = 0;
+# endif
+ __asm__ __volatile__("pushf\n pop %0\n" : "=a" (r) : __LZO_ASM_CLOBBER_LIST_CC_MEMORY);
+ return LZO_ICONV(int, (r >> 18) & 1);
+#elif (LZO_ARCH_I386) && (LZO_ASM_SYNTAX_MSC)
+ unsigned long r;
+ __asm {
+ pushf
+ pop eax
+ mov r,eax
+ }
+ return LZO_ICONV(int, (r >> 18) & 1);
+#else
+ return -1;
+#endif
+}
+LZOLIB_PUBLIC_NOINLINE(int, lzo_debug_align_check_enable) (int v)
+{
+#if (LZO_ARCH_AMD64) && (LZO_ASM_SYNTAX_GNUC)
+ if (v) {
+ __asm__ __volatile__("pushf\n orl $262144,(%%rsp)\n popf\n" : : __LZO_ASM_CLOBBER_LIST_CC_MEMORY);
+ } else {
+ __asm__ __volatile__("pushf\n andl $-262145,(%%rsp)\n popf\n" : : __LZO_ASM_CLOBBER_LIST_CC_MEMORY);
+ }
+ return 0;
+#elif (LZO_ARCH_I386) && (LZO_ASM_SYNTAX_GNUC)
+ if (v) {
+ __asm__ __volatile__("pushf\n orl $262144,(%%esp)\n popf\n" : : __LZO_ASM_CLOBBER_LIST_CC_MEMORY);
+ } else {
+ __asm__ __volatile__("pushf\n andl $-262145,(%%esp)\n popf\n" : : __LZO_ASM_CLOBBER_LIST_CC_MEMORY);
+ }
+ return 0;
+#elif (LZO_ARCH_I386) && (LZO_ASM_SYNTAX_MSC)
+ if (v) { __asm {
+ pushf
+ or dword ptr [esp],262144
+ popf
+ }} else { __asm {
+ pushf
+ and dword ptr [esp],-262145
+ popf
+ }}
+ return 0;
+#else
+ LZO_UNUSED(v); return -1;
+#endif
+}
+LZOLIB_PUBLIC_NOINLINE(unsigned, lzo_debug_running_on_qemu) (void)
+{
+ unsigned r = 0;
+#if (LZO_OS_POSIX_LINUX || LZO_OS_WIN32 || LZO_OS_WIN64)
+ const char* p;
+ p = __LZOLIB_FUNCNAME(lzo_getenv)(LZO_PP_STRINGIZE(LZO_ENV_RUNNING_ON_QEMU));
+ if (p) {
+ if (p[0] == 0) r = 0;
+ else if ((p[0] >= '0' && p[0] <= '9') && p[1] == 0) r = LZO_ICAST(unsigned, p[0]) - '0';
+ else r = 1;
+ }
+#endif
+ return r;
+}
+LZOLIB_PUBLIC_NOINLINE(unsigned, lzo_debug_running_on_valgrind) (void)
+{
+#if (LZO_ARCH_AMD64 && LZO_ABI_ILP32)
+ return 0;
+#elif (LZO_ARCH_AMD64 || LZO_ARCH_I386) && (LZO_ASM_SYNTAX_GNUC)
+ volatile size_t a[6];
+ size_t r = 0;
+ a[0] = 0x1001; a[1] = 0; a[2] = 0; a[3] = 0; a[4] = 0; a[5] = 0;
+# if (LZO_ARCH_AMD64)
+ __asm__ __volatile__(".byte 0x48,0xc1,0xc7,0x03,0x48,0xc1,0xc7,0x0d,0x48,0xc1,0xc7,0x3d,0x48,0xc1,0xc7,0x33,0x48,0x87,0xdb\n" : "=d" (r) : "a" (&a[0]), "d" (r) __LZO_ASM_CLOBBER_LIST_CC_MEMORY);
+# elif (LZO_ARCH_I386)
+ __asm__ __volatile__(".byte 0xc1,0xc7,0x03,0xc1,0xc7,0x0d,0xc1,0xc7,0x1d,0xc1,0xc7,0x13,0x87,0xdb\n" : "=d" (r) : "a" (&a[0]), "d" (r) __LZO_ASM_CLOBBER_LIST_CC_MEMORY);
+# endif
+ return LZO_ITRUNC(unsigned, r);
+#else
+ return 0;
+#endif
+}
+#if (LZO_OS_WIN32 && LZO_CC_PELLESC && (__POCC__ >= 290))
+# pragma warn(pop)
+#endif
+#endif
+#if defined(LZO_WANT_ACCLIB_WILDARGV)
+# undef LZO_WANT_ACCLIB_WILDARGV
+#define __LZOLIB_WILDARGV_CH_INCLUDED 1
+#if !defined(LZOLIB_PUBLIC)
+# define LZOLIB_PUBLIC(r,f) r __LZOLIB_FUNCNAME(f)
+#endif
+#if (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16)
+#if 0 && (LZO_CC_MSC)
+LZO_EXTERN_C int __lzo_cdecl __setargv(void);
+LZO_EXTERN_C int __lzo_cdecl _setargv(void);
+LZO_EXTERN_C int __lzo_cdecl _setargv(void) { return __setargv(); }
+#endif
+#endif
+#if (LZO_OS_WIN32 || LZO_OS_WIN64)
+#if (LZO_CC_MSC && (_MSC_VER >= 1900))
+#elif (LZO_CC_INTELC || LZO_CC_MSC)
+LZO_EXTERN_C int __lzo_cdecl __setargv(void);
+LZO_EXTERN_C int __lzo_cdecl _setargv(void);
+LZO_EXTERN_C int __lzo_cdecl _setargv(void) { return __setargv(); }
+#endif
+#endif
+#if (LZO_OS_EMX)
+#define __LZOLIB_HAVE_LZO_WILDARGV 1
+LZOLIB_PUBLIC(void, lzo_wildargv) (int* argc, char*** argv)
+{
+ if (argc && argv) {
+ _response(argc, argv);
+ _wildcard(argc, argv);
+ }
+}
+#endif
+#if (LZO_OS_CONSOLE_PSP) && defined(__PSPSDK_DEBUG__)
+#define __LZOLIB_HAVE_LZO_WILDARGV 1
+LZO_EXTERN_C int lzo_psp_init_module(int*, char***, int);
+LZOLIB_PUBLIC(void, lzo_wildargv) (int* argc, char*** argv)
+{
+ lzo_psp_init_module(argc, argv, -1);
+}
+#endif
+#if !(__LZOLIB_HAVE_LZO_WILDARGV)
+#define __LZOLIB_HAVE_LZO_WILDARGV 1
+LZOLIB_PUBLIC(void, lzo_wildargv) (int* argc, char*** argv)
+{
+#if 1 && (LZO_ARCH_I086PM)
+ if (LZO_MM_AHSHIFT != 3) { exit(1); }
+#elif 1 && (LZO_ARCH_M68K && LZO_OS_TOS && LZO_CC_GNUC) && defined(__MINT__)
+ __binmode(1);
+ if (isatty(1)) __set_binmode(stdout, 0);
+ if (isatty(2)) __set_binmode(stderr, 0);
+#endif
+ LZO_UNUSED(argc); LZO_UNUSED(argv);
+}
+#endif
+#endif
+
+/* vim:set ts=4 sw=4 et: */
diff --git a/tools/z64compress/src/enc/lzo/lzo_swd.ch b/tools/z64compress/src/enc/lzo/lzo_swd.ch
new file mode 100644
index 0000000..20bc461
--- /dev/null
+++ b/tools/z64compress/src/enc/lzo/lzo_swd.ch
@@ -0,0 +1,700 @@
+/* lzo_swd.ch -- sliding window dictionary
+
+ This file is part of the LZO real-time data compression library.
+
+ Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer
+ All Rights Reserved.
+
+ The LZO library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of
+ the License, or (at your option) any later version.
+
+ The LZO library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with the LZO library; see the file COPYING.
+ If not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ Markus F.X.J. Oberhumer
+ <markus@oberhumer.com>
+ http://www.oberhumer.com/opensource/lzo/
+ */
+
+
+#if (LZO_UINT_MAX < LZO_0xffffffffL)
+# error "LZO_UINT_MAX"
+#endif
+#if defined(LZO_DEBUG)
+# include <stdio.h>
+#endif
+#if defined(__LZO_CHECKER)
+# include <stdlib.h>
+#endif
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+/* unsigned type for dictionary access - don't waste memory here */
+#if (0UL + SWD_N + SWD_F + SWD_F < 65535UL)
+ typedef lzo_uint16_t swd_uint;
+# define SWD_UINT_MAX 0xffffu
+#else
+ typedef lzo_uint32_t swd_uint;
+# define SWD_UINT_MAX 0xffffffffu
+#endif
+#define swd_uintp swd_uint *
+#define SWD_UINT(x) ((swd_uint)(x))
+
+
+#ifndef SWD_HSIZE
+# define SWD_HSIZE 16384
+#endif
+#ifndef SWD_MAX_CHAIN
+# define SWD_MAX_CHAIN 2048
+#endif
+
+#if !defined(HEAD3)
+#if 1
+# define HEAD3(b,p) \
+ ((DMUL(0x9f5f,(((((lzo_xint)b[p]<<5)^b[p+1])<<5)^b[p+2]))>>5) & (SWD_HSIZE-1))
+#else
+# define HEAD3(b,p) \
+ ((DMUL(0x9f5f,(((((lzo_xint)b[p+2]<<5)^b[p+1])<<5)^b[p]))>>5) & (SWD_HSIZE-1))
+#endif
+#endif
+
+#if !(SWD_NO_HEAD2) && (SWD_THRESHOLD == 1) && !defined(HEAD2)
+# if 1 && (LZO_OPT_UNALIGNED16)
+# define HEAD2(b,p) UA_GET_NE16((b)+(p))
+# else
+# define HEAD2(b,p) (b[p] ^ ((unsigned)b[(p)+1]<<8))
+# endif
+# define NIL2 SWD_UINT_MAX
+#endif
+#ifndef IF_HEAD2
+#define IF_HEAD2(s) /*empty*/
+#endif
+
+
+typedef struct
+{
+/* public - "built-in" */
+ lzo_uint swd_n;
+ lzo_uint swd_f;
+ lzo_uint swd_threshold;
+
+/* public - configuration */
+ lzo_uint max_chain;
+ lzo_uint nice_length;
+ lzo_bool use_best_off;
+ lzo_uint lazy_insert;
+
+/* public - output */
+ lzo_uint m_len;
+ lzo_uint m_off;
+ lzo_uint look;
+ int b_char;
+#if defined(SWD_BEST_OFF)
+ lzo_uint best_off[ SWD_BEST_OFF ];
+#endif
+
+/* semi public */
+ LZO_COMPRESS_T *c;
+ lzo_uint m_pos;
+#if defined(SWD_BEST_OFF)
+ lzo_uint best_pos[ SWD_BEST_OFF ];
+#endif
+
+/* private */
+ const lzo_bytep dict;
+ const lzo_bytep dict_end;
+ lzo_uint dict_len;
+
+/* private */
+ lzo_uint ip; /* input pointer (lookahead) */
+ lzo_uint bp; /* buffer pointer */
+ lzo_uint rp; /* remove pointer */
+ lzo_uint b_size;
+
+ lzo_bytep b_wrap;
+
+ lzo_uint node_count;
+ lzo_uint first_rp;
+
+#if defined(__LZO_CHECKER)
+ /* malloc arrays of the exact size to detect any overrun */
+ unsigned char *b;
+ swd_uint *head3;
+ swd_uint *succ3;
+ swd_uint *best3;
+ swd_uint *llen3;
+# ifdef HEAD2
+ swd_uint *head2;
+# endif
+
+#else
+ unsigned char b [ SWD_N + SWD_F + SWD_F ];
+ swd_uint head3 [ SWD_HSIZE ];
+ swd_uint succ3 [ SWD_N + SWD_F ];
+ swd_uint best3 [ SWD_N + SWD_F ];
+ swd_uint llen3 [ SWD_HSIZE ];
+# ifdef HEAD2
+ swd_uint head2 [ 65536L ];
+# endif
+#endif
+}
+lzo_swd_t;
+#define lzo_swd_p lzo_swd_t *
+
+
+#define s_b(s) s->b
+#define s_head3(s) s->head3
+#define s_succ3(s) s->succ3
+#define s_best3(s) s->best3
+#define s_llen3(s) s->llen3
+#ifdef HEAD2
+#define s_head2(s) s->head2
+#endif
+#define SIZEOF_LZO_SWD_T (sizeof(lzo_swd_t))
+
+
+/* Access macro for head3.
+ * head3[key] may be uninitialized if the list is emtpy,
+ * but then its value will never be used.
+ */
+#if 1 || defined(__LZO_CHECKER)
+# define s_get_head3(s,key) \
+ ((swd_uint)((s_llen3(s)[key] == 0) ? SWD_UINT_MAX : s_head3(s)[key]))
+#else
+# define s_get_head3(s,key) (s_head3(s)[key])
+#endif
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+static
+void swd_initdict(lzo_swd_p s, const lzo_bytep dict, lzo_uint dict_len)
+{
+ s->dict = s->dict_end = NULL;
+ s->dict_len = 0;
+
+ if (!dict || dict_len == 0)
+ return;
+ if (dict_len > s->swd_n)
+ {
+ dict += dict_len - s->swd_n;
+ dict_len = s->swd_n;
+ }
+
+ s->dict = dict;
+ s->dict_len = dict_len;
+ s->dict_end = dict + dict_len;
+ lzo_memcpy(s_b(s),dict,dict_len);
+ s->ip = dict_len;
+}
+
+
+static
+void swd_insertdict(lzo_swd_p s, lzo_uint node, lzo_uint len)
+{
+ lzo_uint key;
+
+ s->node_count = s->swd_n - len;
+ s->first_rp = node;
+
+ if (len) do
+ {
+ key = HEAD3(s_b(s),node);
+ s_succ3(s)[node] = s_get_head3(s,key);
+ s_head3(s)[key] = SWD_UINT(node);
+ s_best3(s)[node] = SWD_UINT(s->swd_f + 1);
+ s_llen3(s)[key]++;
+ assert(s_llen3(s)[key] <= s->swd_n);
+
+#ifdef HEAD2
+ IF_HEAD2(s) {
+ key = HEAD2(s_b(s),node);
+ s_head2(s)[key] = SWD_UINT(node);
+ }
+#endif
+
+ node++;
+ }
+ while (--len != 0);
+}
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+static void swd_exit(lzo_swd_p s);
+
+static
+int swd_init(lzo_swd_p s, const lzo_bytep dict, lzo_uint dict_len)
+{
+#if defined(__LZO_CHECKER)
+ unsigned r = 1;
+ s->b = (lzo_bytep) malloc(SWD_N + SWD_F + SWD_F);
+ s->head3 = (swd_uintp) malloc(sizeof(swd_uint) * SWD_HSIZE);
+ s->succ3 = (swd_uintp) malloc(sizeof(swd_uint) * (SWD_N + SWD_F));
+ s->best3 = (swd_uintp) malloc(sizeof(swd_uint) * (SWD_N + SWD_F));
+ s->llen3 = (swd_uintp) malloc(sizeof(swd_uint) * SWD_HSIZE);
+ r &= s->b != NULL;
+ r &= s->head3 != NULL;
+ r &= s->succ3 != NULL;
+ r &= s->best3 != NULL;
+ r &= s->llen3 != NULL;
+#ifdef HEAD2
+ IF_HEAD2(s) {
+ s->head2 = (swd_uintp) malloc(sizeof(swd_uint) * 65536L);
+ r &= s->head2 != NULL;
+ }
+#endif
+ if (r != 1) {
+ swd_exit(s);
+ return LZO_E_OUT_OF_MEMORY;
+ }
+#endif
+
+ s->m_len = 0;
+ s->m_off = 0;
+#if defined(SWD_BEST_OFF)
+ {
+ unsigned i;
+ for (i = 0; i < SWD_BEST_OFF; i++)
+ s->best_off[i] = s->best_pos[i] = 0;
+ }
+#endif
+
+ s->swd_n = SWD_N;
+ s->swd_f = SWD_F;
+ s->swd_threshold = SWD_THRESHOLD;
+
+ /* defaults */
+ s->max_chain = SWD_MAX_CHAIN;
+ s->nice_length = s->swd_f;
+ s->use_best_off = 0;
+ s->lazy_insert = 0;
+
+ s->b_size = s->swd_n + s->swd_f;
+#if 0
+ if (2 * s->swd_f >= s->swd_n || s->b_size + s->swd_f >= SWD_UINT_MAX)
+ return LZO_E_ERROR;
+#else
+ LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N))
+ LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX))
+#endif
+ s->b_wrap = s_b(s) + s->b_size;
+ s->node_count = s->swd_n;
+
+ lzo_memset(s_llen3(s), 0, (lzo_uint)sizeof(s_llen3(s)[0]) * (lzo_uint)SWD_HSIZE);
+#ifdef HEAD2
+ IF_HEAD2(s) {
+#if 1
+ lzo_memset(s_head2(s), 0xff, (lzo_uint)sizeof(s_head2(s)[0]) * 65536L);
+ assert(s_head2(s)[0] == NIL2);
+#else
+ lzo_xint i;
+ for (i = 0; i < 65536L; i++)
+ s_head2(s)[i] = NIL2;
+#endif
+ }
+#endif
+
+ s->ip = 0;
+ swd_initdict(s,dict,dict_len);
+ s->bp = s->ip;
+ s->first_rp = s->ip;
+
+ assert(s->ip + s->swd_f <= s->b_size);
+#if 1
+ s->look = (lzo_uint) (s->c->in_end - s->c->ip);
+ if (s->look > 0)
+ {
+ if (s->look > s->swd_f)
+ s->look = s->swd_f;
+ lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look);
+ s->c->ip += s->look;
+ s->ip += s->look;
+ }
+#else
+ s->look = 0;
+ while (s->look < s->swd_f)
+ {
+ int c;
+ if ((c = getbyte(*(s->c))) < 0)
+ break;
+ s_b(s)[s->ip] = LZO_BYTE(c);
+ s->ip++;
+ s->look++;
+ }
+#endif
+ if (s->ip == s->b_size)
+ s->ip = 0;
+
+ if (s->look >= 2 && s->dict_len > 0)
+ swd_insertdict(s,0,s->dict_len);
+
+ s->rp = s->first_rp;
+ if (s->rp >= s->node_count)
+ s->rp -= s->node_count;
+ else
+ s->rp += s->b_size - s->node_count;
+
+#if 1 || defined(__LZO_CHECKER)
+ /* initialize memory for the first few HEAD3 (if s->ip is not far
+ * enough ahead to do this job for us). The value doesn't matter. */
+ if (s->look < 3) {
+ lzo_bytep p = &s_b(s)[s->bp+s->look];
+ p[0] = p[1] = p[2] = 0;
+ }
+#endif
+
+ return LZO_E_OK;
+}
+
+
+static
+void swd_exit(lzo_swd_p s)
+{
+#if defined(__LZO_CHECKER)
+ /* free in reverse order of allocations */
+#ifdef HEAD2
+ free(s->head2); s->head2 = NULL;
+#endif
+ free(s->llen3); s->llen3 = NULL;
+ free(s->best3); s->best3 = NULL;
+ free(s->succ3); s->succ3 = NULL;
+ free(s->head3); s->head3 = NULL;
+ free(s->b); s->b = NULL;
+#else
+ LZO_UNUSED(s);
+#endif
+}
+
+
+#define swd_pos2off(s,pos) \
+ (s->bp > (pos) ? s->bp - (pos) : s->b_size - ((pos) - s->bp))
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+static __lzo_inline
+void swd_getbyte(lzo_swd_p s)
+{
+ int c;
+
+ if ((c = getbyte(*(s->c))) < 0)
+ {
+ if (s->look > 0)
+ --s->look;
+#if 1 || defined(__LZO_CHECKER)
+ /* initialize memory - value doesn't matter */
+ s_b(s)[s->ip] = 0;
+ if (s->ip < s->swd_f)
+ s->b_wrap[s->ip] = 0;
+#endif
+ }
+ else
+ {
+ s_b(s)[s->ip] = LZO_BYTE(c);
+ if (s->ip < s->swd_f)
+ s->b_wrap[s->ip] = LZO_BYTE(c);
+ }
+ if (++s->ip == s->b_size)
+ s->ip = 0;
+ if (++s->bp == s->b_size)
+ s->bp = 0;
+ if (++s->rp == s->b_size)
+ s->rp = 0;
+}
+
+
+/***********************************************************************
+// remove node from lists
+************************************************************************/
+
+static __lzo_inline
+void swd_remove_node(lzo_swd_p s, lzo_uint node)
+{
+ if (s->node_count == 0)
+ {
+ lzo_uint key;
+
+#ifdef LZO_DEBUG
+ if (s->first_rp != LZO_UINT_MAX)
+ {
+ if (node != s->first_rp)
+ printf("Remove %5ld: %5ld %5ld %5ld %5ld %6ld %6ld\n",
+ (long)node, (long)s->rp, (long)s->ip, (long)s->bp,
+ (long)s->first_rp, (long)(s->ip - node),
+ (long)(s->ip - s->bp));
+ assert(node == s->first_rp);
+ s->first_rp = LZO_UINT_MAX;
+ }
+#endif
+
+ key = HEAD3(s_b(s),node);
+ assert(s_llen3(s)[key] > 0);
+ --s_llen3(s)[key];
+
+#ifdef HEAD2
+ IF_HEAD2(s) {
+ key = HEAD2(s_b(s),node);
+ assert(s_head2(s)[key] != NIL2);
+ if ((lzo_uint) s_head2(s)[key] == node)
+ s_head2(s)[key] = NIL2;
+ }
+#endif
+ }
+ else
+ --s->node_count;
+}
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+static
+void swd_accept(lzo_swd_p s, lzo_uint n)
+{
+ assert(n <= s->look);
+
+ if (n) do
+ {
+ lzo_uint key;
+
+ swd_remove_node(s,s->rp);
+
+ /* add bp into HEAD3 */
+ key = HEAD3(s_b(s),s->bp);
+ s_succ3(s)[s->bp] = s_get_head3(s,key);
+ s_head3(s)[key] = SWD_UINT(s->bp);
+ s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
+ s_llen3(s)[key]++;
+ assert(s_llen3(s)[key] <= s->swd_n);
+
+#ifdef HEAD2
+ /* add bp into HEAD2 */
+ IF_HEAD2(s) {
+ key = HEAD2(s_b(s),s->bp);
+ s_head2(s)[key] = SWD_UINT(s->bp);
+ }
+#endif
+
+ swd_getbyte(s);
+ } while (--n != 0);
+}
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+static
+void swd_search(lzo_swd_p s, lzo_uint node, lzo_uint cnt)
+{
+ const lzo_bytep p1;
+ const lzo_bytep p2;
+ const lzo_bytep px;
+ lzo_uint m_len = s->m_len;
+ const lzo_bytep b = s_b(s);
+ const lzo_bytep bp = s_b(s) + s->bp;
+ const lzo_bytep bx = s_b(s) + s->bp + s->look;
+ swd_uintp succ3 = s_succ3(s);
+ unsigned char scan_end1;
+
+ assert(s->m_len > 0);
+
+ scan_end1 = bp[m_len - 1];
+ for ( ; cnt-- > 0; node = succ3[node])
+ {
+ p1 = bp;
+ p2 = b + node;
+ px = bx;
+
+ assert(m_len < s->look);
+
+ if (
+#if 1
+ p2[m_len - 1] == scan_end1 &&
+ p2[m_len] == p1[m_len] &&
+#endif
+ p2[0] == p1[0] &&
+ p2[1] == p1[1])
+ {
+ lzo_uint i;
+ assert(lzo_memcmp(bp,&b[node],3) == 0);
+
+#if 0 && (LZO_OPT_UNALIGNED32)
+ p1 += 3; p2 += 3;
+ while (p1 + 4 <= px && UA_GET_NE32(p1) == UA_GET_NE32(p2))
+ p1 += 4, p2 += 4;
+ while (p1 < px && *p1 == *p2)
+ p1 += 1, p2 += 1;
+#else
+ p1 += 2; p2 += 2;
+ do {} while (++p1 < px && *p1 == *++p2);
+#endif
+ i = pd(p1, bp);
+
+#ifdef LZO_DEBUG
+ if (lzo_memcmp(bp,&b[node],i) != 0)
+ printf("%5ld %5ld %5ld %02x/%02x %02x/%02x\n",
+ (long)s->bp, (long) node, (long) i,
+ bp[0], bp[1], b[node], b[node+1]);
+#endif
+ assert(lzo_memcmp(bp,&b[node],i) == 0);
+
+#if defined(SWD_BEST_OFF)
+ if (i < SWD_BEST_OFF)
+ {
+ if (s->best_pos[i] == 0)
+ s->best_pos[i] = node + 1;
+ }
+#endif
+ if (i > m_len)
+ {
+ s->m_len = m_len = i;
+ s->m_pos = node;
+ if (m_len == s->look)
+ return;
+ if (m_len >= s->nice_length)
+ return;
+ if (m_len > (lzo_uint) s_best3(s)[node])
+ return;
+ scan_end1 = bp[m_len - 1];
+ }
+ }
+ }
+}
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+#ifdef HEAD2
+
+static
+lzo_bool swd_search2(lzo_swd_p s)
+{
+ lzo_uint key;
+
+ assert(s->look >= 2);
+ assert(s->m_len > 0);
+
+ key = s_head2(s)[ HEAD2(s_b(s),s->bp) ];
+ if (key == NIL2)
+ return 0;
+#ifdef LZO_DEBUG
+ if (lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) != 0)
+ printf("%5ld %5ld %02x/%02x %02x/%02x\n", (long)s->bp, (long)key,
+ s_b(s)[s->bp], s_b(s)[s->bp+1], s_b(s)[key], s_b(s)[key+1]);
+#endif
+ assert(lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) == 0);
+#if defined(SWD_BEST_OFF)
+ if (s->best_pos[2] == 0)
+ s->best_pos[2] = key + 1;
+#endif
+
+ if (s->m_len < 2)
+ {
+ s->m_len = 2;
+ s->m_pos = key;
+ }
+ return 1;
+}
+
+#endif
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+static
+void swd_findbest(lzo_swd_p s)
+{
+ lzo_uint key;
+ lzo_uint cnt, node;
+ lzo_uint len;
+
+ assert(s->m_len > 0);
+
+ /* get current head, add bp into HEAD3 */
+ key = HEAD3(s_b(s),s->bp);
+ node = s_succ3(s)[s->bp] = s_get_head3(s,key);
+ cnt = s_llen3(s)[key]++;
+ assert(s_llen3(s)[key] <= s->swd_n + s->swd_f);
+ if (cnt > s->max_chain && s->max_chain > 0)
+ cnt = s->max_chain;
+ s_head3(s)[key] = SWD_UINT(s->bp);
+
+ s->b_char = s_b(s)[s->bp];
+ len = s->m_len;
+ if (s->m_len >= s->look)
+ {
+ if (s->look == 0)
+ s->b_char = -1;
+ s->m_off = 0;
+ s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
+ }
+ else
+ {
+#if defined(HEAD2)
+ if (swd_search2(s) && s->look >= 3)
+ swd_search(s,node,cnt);
+#else
+ if (s->look >= 3)
+ swd_search(s,node,cnt);
+#endif
+ if (s->m_len > len)
+ s->m_off = swd_pos2off(s,s->m_pos);
+ s_best3(s)[s->bp] = SWD_UINT(s->m_len);
+
+#if defined(SWD_BEST_OFF)
+ if (s->use_best_off)
+ {
+ unsigned i;
+ for (i = 2; i < SWD_BEST_OFF; i++)
+ if (s->best_pos[i] > 0)
+ s->best_off[i] = swd_pos2off(s,s->best_pos[i]-1);
+ else
+ s->best_off[i] = 0;
+ }
+#endif
+ }
+
+ swd_remove_node(s,s->rp);
+
+#ifdef HEAD2
+ /* add bp into HEAD2 */
+ IF_HEAD2(s) {
+ key = HEAD2(s_b(s),s->bp);
+ s_head2(s)[key] = SWD_UINT(s->bp);
+ }
+#endif
+}
+
+
+#undef HEAD3
+#undef HEAD2
+#undef IF_HEAD2
+#undef s_get_head3
+
+
+/* vim:set ts=4 sw=4 et: */
diff --git a/tools/z64compress/src/enc/lzo/lzoconf.h b/tools/z64compress/src/enc/lzo/lzoconf.h
new file mode 100644
index 0000000..1a1dd98
--- /dev/null
+++ b/tools/z64compress/src/enc/lzo/lzoconf.h
@@ -0,0 +1,453 @@
+/* lzoconf.h -- configuration of the LZO data compression library
+
+ This file is part of the LZO real-time data compression library.
+
+ Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer
+ All Rights Reserved.
+
+ The LZO library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of
+ the License, or (at your option) any later version.
+
+ The LZO library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with the LZO library; see the file COPYING.
+ If not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ Markus F.X.J. Oberhumer
+ <markus@oberhumer.com>
+ http://www.oberhumer.com/opensource/lzo/
+ */
+
+
+#ifndef __LZOCONF_H_INCLUDED
+#define __LZOCONF_H_INCLUDED 1
+
+#define LZO_VERSION 0x20a0 /* 2.10 */
+#define LZO_VERSION_STRING "2.10"
+#define LZO_VERSION_DATE "Mar 01 2017"
+
+/* internal Autoconf configuration file - only used when building LZO */
+#if defined(LZO_HAVE_CONFIG_H)
+# include <config.h>
+#endif
+#include <limits.h>
+#include <stddef.h>
+
+
+/***********************************************************************
+// LZO requires a conforming <limits.h>
+************************************************************************/
+
+#if !defined(CHAR_BIT) || (CHAR_BIT != 8)
+# error "invalid CHAR_BIT"
+#endif
+#if !defined(UCHAR_MAX) || !defined(USHRT_MAX) || !defined(UINT_MAX) || !defined(ULONG_MAX)
+# error "check your compiler installation"
+#endif
+#if (USHRT_MAX < 1) || (UINT_MAX < 1) || (ULONG_MAX < 1)
+# error "your limits.h macros are broken"
+#endif
+
+/* get OS and architecture defines */
+#ifndef __LZODEFS_H_INCLUDED
+#include "lzodefs.h"
+#endif
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/***********************************************************************
+// some core defines
+************************************************************************/
+
+/* memory checkers */
+#if !defined(__LZO_CHECKER)
+# if defined(__BOUNDS_CHECKING_ON)
+# define __LZO_CHECKER 1
+# elif defined(__CHECKER__)
+# define __LZO_CHECKER 1
+# elif defined(__INSURE__)
+# define __LZO_CHECKER 1
+# elif defined(__PURIFY__)
+# define __LZO_CHECKER 1
+# endif
+#endif
+
+
+/***********************************************************************
+// integral and pointer types
+************************************************************************/
+
+/* lzo_uint must match size_t */
+#if !defined(LZO_UINT_MAX)
+# if (LZO_ABI_LLP64)
+# if (LZO_OS_WIN64)
+ typedef unsigned __int64 lzo_uint;
+ typedef __int64 lzo_int;
+# define LZO_TYPEOF_LZO_INT LZO_TYPEOF___INT64
+# else
+ typedef lzo_ullong_t lzo_uint;
+ typedef lzo_llong_t lzo_int;
+# define LZO_TYPEOF_LZO_INT LZO_TYPEOF_LONG_LONG
+# endif
+# define LZO_SIZEOF_LZO_INT 8
+# define LZO_UINT_MAX 0xffffffffffffffffull
+# define LZO_INT_MAX 9223372036854775807LL
+# define LZO_INT_MIN (-1LL - LZO_INT_MAX)
+# elif (LZO_ABI_IP32L64) /* MIPS R5900 */
+ typedef unsigned int lzo_uint;
+ typedef int lzo_int;
+# define LZO_SIZEOF_LZO_INT LZO_SIZEOF_INT
+# define LZO_TYPEOF_LZO_INT LZO_TYPEOF_INT
+# define LZO_UINT_MAX UINT_MAX
+# define LZO_INT_MAX INT_MAX
+# define LZO_INT_MIN INT_MIN
+# elif (ULONG_MAX >= LZO_0xffffffffL)
+ typedef unsigned long lzo_uint;
+ typedef long lzo_int;
+# define LZO_SIZEOF_LZO_INT LZO_SIZEOF_LONG
+# define LZO_TYPEOF_LZO_INT LZO_TYPEOF_LONG
+# define LZO_UINT_MAX ULONG_MAX
+# define LZO_INT_MAX LONG_MAX
+# define LZO_INT_MIN LONG_MIN
+# else
+# error "lzo_uint"
+# endif
+#endif
+
+/* The larger type of lzo_uint and lzo_uint32_t. */
+#if (LZO_SIZEOF_LZO_INT >= 4)
+# define lzo_xint lzo_uint
+#else
+# define lzo_xint lzo_uint32_t
+#endif
+
+typedef int lzo_bool;
+
+/* sanity checks */
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int) == LZO_SIZEOF_LZO_INT)
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uint) == LZO_SIZEOF_LZO_INT)
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_xint) >= sizeof(lzo_uint))
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_xint) >= sizeof(lzo_uint32_t))
+
+#ifndef __LZO_MMODEL
+#define __LZO_MMODEL /*empty*/
+#endif
+
+/* no typedef here because of const-pointer issues */
+#define lzo_bytep unsigned char __LZO_MMODEL *
+#define lzo_charp char __LZO_MMODEL *
+#define lzo_voidp void __LZO_MMODEL *
+#define lzo_shortp short __LZO_MMODEL *
+#define lzo_ushortp unsigned short __LZO_MMODEL *
+#define lzo_intp lzo_int __LZO_MMODEL *
+#define lzo_uintp lzo_uint __LZO_MMODEL *
+#define lzo_xintp lzo_xint __LZO_MMODEL *
+#define lzo_voidpp lzo_voidp __LZO_MMODEL *
+#define lzo_bytepp lzo_bytep __LZO_MMODEL *
+
+#define lzo_int8_tp lzo_int8_t __LZO_MMODEL *
+#define lzo_uint8_tp lzo_uint8_t __LZO_MMODEL *
+#define lzo_int16_tp lzo_int16_t __LZO_MMODEL *
+#define lzo_uint16_tp lzo_uint16_t __LZO_MMODEL *
+#define lzo_int32_tp lzo_int32_t __LZO_MMODEL *
+#define lzo_uint32_tp lzo_uint32_t __LZO_MMODEL *
+#if defined(lzo_int64_t)
+#define lzo_int64_tp lzo_int64_t __LZO_MMODEL *
+#define lzo_uint64_tp lzo_uint64_t __LZO_MMODEL *
+#endif
+
+/* Older LZO versions used to support ancient systems and memory models
+ * such as 16-bit MSDOS with __huge pointers or Cray PVP, but these
+ * obsolete configurations are not supported any longer.
+ */
+#if defined(__LZO_MMODEL_HUGE)
+#error "__LZO_MMODEL_HUGE memory model is unsupported"
+#endif
+#if (LZO_MM_PVP)
+#error "LZO_MM_PVP memory model is unsupported"
+#endif
+#if (LZO_SIZEOF_INT < 4)
+#error "LZO_SIZEOF_INT < 4 is unsupported"
+#endif
+#if (__LZO_UINTPTR_T_IS_POINTER)
+#error "__LZO_UINTPTR_T_IS_POINTER is unsupported"
+#endif
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(int) >= 4)
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uint) >= 4)
+/* Strange configurations where sizeof(lzo_uint) != sizeof(size_t) should
+ * work but have not received much testing lately, so be strict here.
+ */
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uint) == sizeof(size_t))
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uint) == sizeof(ptrdiff_t))
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uint) == sizeof(lzo_uintptr_t))
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(void *) == sizeof(lzo_uintptr_t))
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(char *) == sizeof(lzo_uintptr_t))
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(long *) == sizeof(lzo_uintptr_t))
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(void *) == sizeof(lzo_voidp))
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(char *) == sizeof(lzo_bytep))
+
+
+/***********************************************************************
+// function types
+************************************************************************/
+
+/* name mangling */
+#if !defined(__LZO_EXTERN_C)
+# ifdef __cplusplus
+# define __LZO_EXTERN_C extern "C"
+# else
+# define __LZO_EXTERN_C extern
+# endif
+#endif
+
+/* calling convention */
+#if !defined(__LZO_CDECL)
+# define __LZO_CDECL __lzo_cdecl
+#endif
+
+/* DLL export information */
+#if !defined(__LZO_EXPORT1)
+# define __LZO_EXPORT1 /*empty*/
+#endif
+#if !defined(__LZO_EXPORT2)
+# define __LZO_EXPORT2 /*empty*/
+#endif
+
+/* __cdecl calling convention for public C and assembly functions */
+#if !defined(LZO_PUBLIC)
+# define LZO_PUBLIC(r) __LZO_EXPORT1 r __LZO_EXPORT2 __LZO_CDECL
+#endif
+#if !defined(LZO_EXTERN)
+# define LZO_EXTERN(r) __LZO_EXTERN_C LZO_PUBLIC(r)
+#endif
+#if !defined(LZO_PRIVATE)
+# define LZO_PRIVATE(r) static r __LZO_CDECL
+#endif
+
+/* function types */
+typedef int
+(__LZO_CDECL *lzo_compress_t) ( const lzo_bytep src, lzo_uint src_len,
+ lzo_bytep dst, lzo_uintp dst_len,
+ lzo_voidp wrkmem );
+
+typedef int
+(__LZO_CDECL *lzo_decompress_t) ( const lzo_bytep src, lzo_uint src_len,
+ lzo_bytep dst, lzo_uintp dst_len,
+ lzo_voidp wrkmem );
+
+typedef int
+(__LZO_CDECL *lzo_optimize_t) ( lzo_bytep src, lzo_uint src_len,
+ lzo_bytep dst, lzo_uintp dst_len,
+ lzo_voidp wrkmem );
+
+typedef int
+(__LZO_CDECL *lzo_compress_dict_t)(const lzo_bytep src, lzo_uint src_len,
+ lzo_bytep dst, lzo_uintp dst_len,
+ lzo_voidp wrkmem,
+ const lzo_bytep dict, lzo_uint dict_len );
+
+typedef int
+(__LZO_CDECL *lzo_decompress_dict_t)(const lzo_bytep src, lzo_uint src_len,
+ lzo_bytep dst, lzo_uintp dst_len,
+ lzo_voidp wrkmem,
+ const lzo_bytep dict, lzo_uint dict_len );
+
+
+/* Callback interface. Currently only the progress indicator ("nprogress")
+ * is used, but this may change in a future release. */
+
+struct lzo_callback_t;
+typedef struct lzo_callback_t lzo_callback_t;
+#define lzo_callback_p lzo_callback_t __LZO_MMODEL *
+
+/* malloc & free function types */
+typedef lzo_voidp (__LZO_CDECL *lzo_alloc_func_t)
+ (lzo_callback_p self, lzo_uint items, lzo_uint size);
+typedef void (__LZO_CDECL *lzo_free_func_t)
+ (lzo_callback_p self, lzo_voidp ptr);
+
+/* a progress indicator callback function */
+typedef void (__LZO_CDECL *lzo_progress_func_t)
+ (lzo_callback_p, lzo_uint, lzo_uint, int);
+
+struct lzo_callback_t
+{
+ /* custom allocators (set to 0 to disable) */
+ lzo_alloc_func_t nalloc; /* [not used right now] */
+ lzo_free_func_t nfree; /* [not used right now] */
+
+ /* a progress indicator callback function (set to 0 to disable) */
+ lzo_progress_func_t nprogress;
+
+ /* INFO: the first parameter "self" of the nalloc/nfree/nprogress
+ * callbacks points back to this struct, so you are free to store
+ * some extra info in the following variables. */
+ lzo_voidp user1;
+ lzo_xint user2;
+ lzo_xint user3;
+};
+
+
+/***********************************************************************
+// error codes and prototypes
+************************************************************************/
+
+/* Error codes for the compression/decompression functions. Negative
+ * values are errors, positive values will be used for special but
+ * normal events.
+ */
+#define LZO_E_OK 0
+#define LZO_E_ERROR (-1)
+#define LZO_E_OUT_OF_MEMORY (-2) /* [lzo_alloc_func_t failure] */
+#define LZO_E_NOT_COMPRESSIBLE (-3) /* [not used right now] */
+#define LZO_E_INPUT_OVERRUN (-4)
+#define LZO_E_OUTPUT_OVERRUN (-5)
+#define LZO_E_LOOKBEHIND_OVERRUN (-6)
+#define LZO_E_EOF_NOT_FOUND (-7)
+#define LZO_E_INPUT_NOT_CONSUMED (-8)
+#define LZO_E_NOT_YET_IMPLEMENTED (-9) /* [not used right now] */
+#define LZO_E_INVALID_ARGUMENT (-10)
+#define LZO_E_INVALID_ALIGNMENT (-11) /* pointer argument is not properly aligned */
+#define LZO_E_OUTPUT_NOT_CONSUMED (-12)
+#define LZO_E_INTERNAL_ERROR (-99)
+
+
+#ifndef lzo_sizeof_dict_t
+# define lzo_sizeof_dict_t ((unsigned)sizeof(lzo_bytep))
+#endif
+
+/* lzo_init() should be the first function you call.
+ * Check the return code !
+ *
+ * lzo_init() is a macro to allow checking that the library and the
+ * compiler's view of various types are consistent.
+ */
+#define lzo_init() __lzo_init_v2(LZO_VERSION,(int)sizeof(short),(int)sizeof(int),\
+ (int)sizeof(long),(int)sizeof(lzo_uint32_t),(int)sizeof(lzo_uint),\
+ (int)lzo_sizeof_dict_t,(int)sizeof(char *),(int)sizeof(lzo_voidp),\
+ (int)sizeof(lzo_callback_t))
+LZO_EXTERN(int) __lzo_init_v2(unsigned,int,int,int,int,int,int,int,int,int);
+
+/* version functions (useful for shared libraries) */
+LZO_EXTERN(unsigned) lzo_version(void);
+LZO_EXTERN(const char *) lzo_version_string(void);
+LZO_EXTERN(const char *) lzo_version_date(void);
+LZO_EXTERN(const lzo_charp) _lzo_version_string(void);
+LZO_EXTERN(const lzo_charp) _lzo_version_date(void);
+
+/* string functions */
+LZO_EXTERN(int)
+ lzo_memcmp(const lzo_voidp a, const lzo_voidp b, lzo_uint len);
+LZO_EXTERN(lzo_voidp)
+ lzo_memcpy(lzo_voidp dst, const lzo_voidp src, lzo_uint len);
+LZO_EXTERN(lzo_voidp)
+ lzo_memmove(lzo_voidp dst, const lzo_voidp src, lzo_uint len);
+LZO_EXTERN(lzo_voidp)
+ lzo_memset(lzo_voidp buf, int c, lzo_uint len);
+
+/* checksum functions */
+LZO_EXTERN(lzo_uint32_t)
+ lzo_adler32(lzo_uint32_t c, const lzo_bytep buf, lzo_uint len);
+LZO_EXTERN(lzo_uint32_t)
+ lzo_crc32(lzo_uint32_t c, const lzo_bytep buf, lzo_uint len);
+LZO_EXTERN(const lzo_uint32_tp)
+ lzo_get_crc32_table(void);
+
+/* misc. */
+LZO_EXTERN(int) _lzo_config_check(void);
+typedef union {
+ lzo_voidp a00; lzo_bytep a01; lzo_uint a02; lzo_xint a03; lzo_uintptr_t a04;
+ void *a05; unsigned char *a06; unsigned long a07; size_t a08; ptrdiff_t a09;
+#if defined(lzo_int64_t)
+ lzo_uint64_t a10;
+#endif
+} lzo_align_t;
+
+/* align a char pointer on a boundary that is a multiple of 'size' */
+LZO_EXTERN(unsigned) __lzo_align_gap(const lzo_voidp p, lzo_uint size);
+#define LZO_PTR_ALIGN_UP(p,size) \
+ ((p) + (lzo_uint) __lzo_align_gap((const lzo_voidp)(p),(lzo_uint)(size)))
+
+
+/***********************************************************************
+// deprecated macros - only for backward compatibility
+************************************************************************/
+
+/* deprecated - use 'lzo_bytep' instead of 'lzo_byte *' */
+#define lzo_byte unsigned char
+/* deprecated type names */
+#define lzo_int32 lzo_int32_t
+#define lzo_uint32 lzo_uint32_t
+#define lzo_int32p lzo_int32_t __LZO_MMODEL *
+#define lzo_uint32p lzo_uint32_t __LZO_MMODEL *
+#define LZO_INT32_MAX LZO_INT32_C(2147483647)
+#define LZO_UINT32_MAX LZO_UINT32_C(4294967295)
+#if defined(lzo_int64_t)
+#define lzo_int64 lzo_int64_t
+#define lzo_uint64 lzo_uint64_t
+#define lzo_int64p lzo_int64_t __LZO_MMODEL *
+#define lzo_uint64p lzo_uint64_t __LZO_MMODEL *
+#define LZO_INT64_MAX LZO_INT64_C(9223372036854775807)
+#define LZO_UINT64_MAX LZO_UINT64_C(18446744073709551615)
+#endif
+/* deprecated types */
+typedef union { lzo_bytep a; lzo_uint b; } __lzo_pu_u;
+typedef union { lzo_bytep a; lzo_uint32_t b; } __lzo_pu32_u;
+/* deprecated defines */
+#if !defined(LZO_SIZEOF_LZO_UINT)
+# define LZO_SIZEOF_LZO_UINT LZO_SIZEOF_LZO_INT
+#endif
+
+#if defined(LZO_CFG_COMPAT)
+
+#define __LZOCONF_H 1
+
+#if defined(LZO_ARCH_I086)
+# define __LZO_i386 1
+#elif defined(LZO_ARCH_I386)
+# define __LZO_i386 1
+#endif
+
+#if defined(LZO_OS_DOS16)
+# define __LZO_DOS 1
+# define __LZO_DOS16 1
+#elif defined(LZO_OS_DOS32)
+# define __LZO_DOS 1
+#elif defined(LZO_OS_WIN16)
+# define __LZO_WIN 1
+# define __LZO_WIN16 1
+#elif defined(LZO_OS_WIN32)
+# define __LZO_WIN 1
+#endif
+
+#define __LZO_CMODEL /*empty*/
+#define __LZO_DMODEL /*empty*/
+#define __LZO_ENTRY __LZO_CDECL
+#define LZO_EXTERN_CDECL LZO_EXTERN
+#define LZO_ALIGN LZO_PTR_ALIGN_UP
+
+#define lzo_compress_asm_t lzo_compress_t
+#define lzo_decompress_asm_t lzo_decompress_t
+
+#endif /* LZO_CFG_COMPAT */
+
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* already included */
+
+
+/* vim:set ts=4 sw=4 et: */
diff --git a/tools/z64compress/src/enc/lzo/lzodefs.h b/tools/z64compress/src/enc/lzo/lzodefs.h
new file mode 100644
index 0000000..c3e2bcf
--- /dev/null
+++ b/tools/z64compress/src/enc/lzo/lzodefs.h
@@ -0,0 +1,3268 @@
+/* lzodefs.h -- architecture, OS and compiler specific defines
+
+ This file is part of the LZO real-time data compression library.
+
+ Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer
+ All Rights Reserved.
+
+ The LZO library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of
+ the License, or (at your option) any later version.
+
+ The LZO library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with the LZO library; see the file COPYING.
+ If not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ Markus F.X.J. Oberhumer
+ <markus@oberhumer.com>
+ http://www.oberhumer.com/opensource/lzo/
+ */
+
+
+#ifndef __LZODEFS_H_INCLUDED
+#define __LZODEFS_H_INCLUDED 1
+
+#if defined(__CYGWIN32__) && !defined(__CYGWIN__)
+# define __CYGWIN__ __CYGWIN32__
+#endif
+#if 1 && defined(__INTERIX) && defined(__GNUC__) && !defined(_ALL_SOURCE)
+# define _ALL_SOURCE 1
+#endif
+#if defined(__mips__) && defined(__R5900__)
+# if !defined(__LONG_MAX__)
+# define __LONG_MAX__ 9223372036854775807L
+# endif
+#endif
+#if 0
+#elif !defined(__LZO_LANG_OVERRIDE)
+#if (defined(__clang__) || defined(__GNUC__)) && defined(__ASSEMBLER__)
+# if (__ASSEMBLER__+0) <= 0
+# error "__ASSEMBLER__"
+# else
+# define LZO_LANG_ASSEMBLER 1
+# endif
+#elif defined(__cplusplus)
+# if (__cplusplus+0) <= 0
+# error "__cplusplus"
+# elif (__cplusplus < 199711L)
+# define LZO_LANG_CXX 1
+# elif defined(_MSC_VER) && defined(_MSVC_LANG) && (_MSVC_LANG+0 >= 201402L) && 1
+# define LZO_LANG_CXX _MSVC_LANG
+# else
+# define LZO_LANG_CXX __cplusplus
+# endif
+# define LZO_LANG_CPLUSPLUS LZO_LANG_CXX
+#else
+# if defined(__STDC_VERSION__) && (__STDC_VERSION__+0 >= 199409L)
+# define LZO_LANG_C __STDC_VERSION__
+# else
+# define LZO_LANG_C 1
+# endif
+#endif
+#endif
+#if !defined(LZO_CFG_NO_DISABLE_WUNDEF)
+#if defined(__ARMCC_VERSION)
+# pragma diag_suppress 193
+#elif defined(__clang__) && defined(__clang_minor__)
+# pragma clang diagnostic ignored "-Wundef"
+#elif defined(__INTEL_COMPILER)
+# pragma warning(disable: 193)
+#elif defined(__KEIL__) && defined(__C166__)
+# pragma warning disable = 322
+#elif defined(__GNUC__) && defined(__GNUC_MINOR__) && !defined(__PATHSCALE__)
+# if ((__GNUC__-0) >= 5 || ((__GNUC__-0) == 4 && (__GNUC_MINOR__-0) >= 2))
+# pragma GCC diagnostic ignored "-Wundef"
+# endif
+#elif defined(_MSC_VER) && !defined(__clang__) && !defined(__INTEL_COMPILER) && !defined(__MWERKS__)
+# if ((_MSC_VER-0) >= 1300)
+# pragma warning(disable: 4668)
+# endif
+#endif
+#endif
+#if 0 && defined(__POCC__) && defined(_WIN32)
+# if (__POCC__ >= 400)
+# pragma warn(disable: 2216)
+# endif
+#endif
+#if 0 && defined(__WATCOMC__)
+# if (__WATCOMC__ >= 1050) && (__WATCOMC__ < 1060)
+# pragma warning 203 9
+# endif
+#endif
+#if defined(__BORLANDC__) && defined(__MSDOS__) && !defined(__FLAT__)
+# pragma option -h
+#endif
+#if !(LZO_CFG_NO_DISABLE_WCRTNONSTDC)
+#ifndef _CRT_NONSTDC_NO_DEPRECATE
+#define _CRT_NONSTDC_NO_DEPRECATE 1
+#endif
+#ifndef _CRT_NONSTDC_NO_WARNINGS
+#define _CRT_NONSTDC_NO_WARNINGS 1
+#endif
+#ifndef _CRT_SECURE_NO_DEPRECATE
+#define _CRT_SECURE_NO_DEPRECATE 1
+#endif
+#ifndef _CRT_SECURE_NO_WARNINGS
+#define _CRT_SECURE_NO_WARNINGS 1
+#endif
+#endif
+#if 0
+#define LZO_0xffffUL 0xfffful
+#define LZO_0xffffffffUL 0xfffffffful
+#else
+#define LZO_0xffffUL 65535ul
+#define LZO_0xffffffffUL 4294967295ul
+#endif
+#define LZO_0xffffL LZO_0xffffUL
+#define LZO_0xffffffffL LZO_0xffffffffUL
+#if (LZO_0xffffL == LZO_0xffffffffL)
+# error "your preprocessor is broken 1"
+#endif
+#if (16ul * 16384ul != 262144ul)
+# error "your preprocessor is broken 2"
+#endif
+#if 0
+#if (32767 >= 4294967295ul)
+# error "your preprocessor is broken 3"
+#endif
+#if (65535u >= 4294967295ul)
+# error "your preprocessor is broken 4"
+#endif
+#endif
+#if defined(__COUNTER__)
+# ifndef LZO_CFG_USE_COUNTER
+# define LZO_CFG_USE_COUNTER 1
+# endif
+#else
+# undef LZO_CFG_USE_COUNTER
+#endif
+#if (UINT_MAX == LZO_0xffffL)
+#if defined(__ZTC__) && defined(__I86__) && !defined(__OS2__)
+# if !defined(MSDOS)
+# define MSDOS 1
+# endif
+# if !defined(_MSDOS)
+# define _MSDOS 1
+# endif
+#elif 0 && defined(__VERSION) && defined(MB_LEN_MAX)
+# if (__VERSION == 520) && (MB_LEN_MAX == 1)
+# if !defined(__AZTEC_C__)
+# define __AZTEC_C__ __VERSION
+# endif
+# if !defined(__DOS__)
+# define __DOS__ 1
+# endif
+# endif
+#endif
+#endif
+#if (UINT_MAX == LZO_0xffffL)
+#if defined(_MSC_VER) && defined(M_I86HM)
+# define ptrdiff_t long
+# define _PTRDIFF_T_DEFINED 1
+#endif
+#endif
+#if (UINT_MAX == LZO_0xffffL)
+# undef __LZO_RENAME_A
+# undef __LZO_RENAME_B
+# if defined(__AZTEC_C__) && defined(__DOS__)
+# define __LZO_RENAME_A 1
+# elif defined(_MSC_VER) && defined(MSDOS)
+# if (_MSC_VER < 600)
+# define __LZO_RENAME_A 1
+# elif (_MSC_VER < 700)
+# define __LZO_RENAME_B 1
+# endif
+# elif defined(__TSC__) && defined(__OS2__)
+# define __LZO_RENAME_A 1
+# elif defined(__MSDOS__) && defined(__TURBOC__) && (__TURBOC__ < 0x0410)
+# define __LZO_RENAME_A 1
+# elif defined(__PACIFIC__) && defined(DOS)
+# if !defined(__far)
+# define __far far
+# endif
+# if !defined(__near)
+# define __near near
+# endif
+# endif
+# if defined(__LZO_RENAME_A)
+# if !defined(__cdecl)
+# define __cdecl cdecl
+# endif
+# if !defined(__far)
+# define __far far
+# endif
+# if !defined(__huge)
+# define __huge huge
+# endif
+# if !defined(__near)
+# define __near near
+# endif
+# if !defined(__pascal)
+# define __pascal pascal
+# endif
+# if !defined(__huge)
+# define __huge huge
+# endif
+# elif defined(__LZO_RENAME_B)
+# if !defined(__cdecl)
+# define __cdecl _cdecl
+# endif
+# if !defined(__far)
+# define __far _far
+# endif
+# if !defined(__huge)
+# define __huge _huge
+# endif
+# if !defined(__near)
+# define __near _near
+# endif
+# if !defined(__pascal)
+# define __pascal _pascal
+# endif
+# elif (defined(__PUREC__) || defined(__TURBOC__)) && defined(__TOS__)
+# if !defined(__cdecl)
+# define __cdecl cdecl
+# endif
+# if !defined(__pascal)
+# define __pascal pascal
+# endif
+# endif
+# undef __LZO_RENAME_A
+# undef __LZO_RENAME_B
+#endif
+#if (UINT_MAX == LZO_0xffffL)
+#if defined(__AZTEC_C__) && defined(__DOS__)
+# define LZO_BROKEN_CDECL_ALT_SYNTAX 1
+#elif defined(_MSC_VER) && defined(MSDOS)
+# if (_MSC_VER < 600)
+# define LZO_BROKEN_INTEGRAL_CONSTANTS 1
+# endif
+# if (_MSC_VER < 700)
+# define LZO_BROKEN_INTEGRAL_PROMOTION 1
+# define LZO_BROKEN_SIZEOF 1
+# endif
+#elif defined(__PACIFIC__) && defined(DOS)
+# define LZO_BROKEN_INTEGRAL_CONSTANTS 1
+#elif defined(__TURBOC__) && defined(__MSDOS__)
+# if (__TURBOC__ < 0x0150)
+# define LZO_BROKEN_CDECL_ALT_SYNTAX 1
+# define LZO_BROKEN_INTEGRAL_CONSTANTS 1
+# define LZO_BROKEN_INTEGRAL_PROMOTION 1
+# endif
+# if (__TURBOC__ < 0x0200)
+# define LZO_BROKEN_SIZEOF 1
+# endif
+# if (__TURBOC__ < 0x0400) && defined(__cplusplus)
+# define LZO_BROKEN_CDECL_ALT_SYNTAX 1
+# endif
+#elif (defined(__PUREC__) || defined(__TURBOC__)) && defined(__TOS__)
+# define LZO_BROKEN_CDECL_ALT_SYNTAX 1
+# define LZO_BROKEN_SIZEOF 1
+#endif
+#endif
+#if defined(__WATCOMC__) && (__WATCOMC__ < 900)
+# define LZO_BROKEN_INTEGRAL_CONSTANTS 1
+#endif
+#if defined(_CRAY) && defined(_CRAY1)
+# define LZO_BROKEN_SIGNED_RIGHT_SHIFT 1
+#endif
+#define LZO_PP_STRINGIZE(x) #x
+#define LZO_PP_MACRO_EXPAND(x) LZO_PP_STRINGIZE(x)
+#define LZO_PP_CONCAT0() /*empty*/
+#define LZO_PP_CONCAT1(a) a
+#define LZO_PP_CONCAT2(a,b) a ## b
+#define LZO_PP_CONCAT3(a,b,c) a ## b ## c
+#define LZO_PP_CONCAT4(a,b,c,d) a ## b ## c ## d
+#define LZO_PP_CONCAT5(a,b,c,d,e) a ## b ## c ## d ## e
+#define LZO_PP_CONCAT6(a,b,c,d,e,f) a ## b ## c ## d ## e ## f
+#define LZO_PP_CONCAT7(a,b,c,d,e,f,g) a ## b ## c ## d ## e ## f ## g
+#define LZO_PP_ECONCAT0() LZO_PP_CONCAT0()
+#define LZO_PP_ECONCAT1(a) LZO_PP_CONCAT1(a)
+#define LZO_PP_ECONCAT2(a,b) LZO_PP_CONCAT2(a,b)
+#define LZO_PP_ECONCAT3(a,b,c) LZO_PP_CONCAT3(a,b,c)
+#define LZO_PP_ECONCAT4(a,b,c,d) LZO_PP_CONCAT4(a,b,c,d)
+#define LZO_PP_ECONCAT5(a,b,c,d,e) LZO_PP_CONCAT5(a,b,c,d,e)
+#define LZO_PP_ECONCAT6(a,b,c,d,e,f) LZO_PP_CONCAT6(a,b,c,d,e,f)
+#define LZO_PP_ECONCAT7(a,b,c,d,e,f,g) LZO_PP_CONCAT7(a,b,c,d,e,f,g)
+#define LZO_PP_EMPTY /*empty*/
+#define LZO_PP_EMPTY0() /*empty*/
+#define LZO_PP_EMPTY1(a) /*empty*/
+#define LZO_PP_EMPTY2(a,b) /*empty*/
+#define LZO_PP_EMPTY3(a,b,c) /*empty*/
+#define LZO_PP_EMPTY4(a,b,c,d) /*empty*/
+#define LZO_PP_EMPTY5(a,b,c,d,e) /*empty*/
+#define LZO_PP_EMPTY6(a,b,c,d,e,f) /*empty*/
+#define LZO_PP_EMPTY7(a,b,c,d,e,f,g) /*empty*/
+#if 1
+#define LZO_CPP_STRINGIZE(x) #x
+#define LZO_CPP_MACRO_EXPAND(x) LZO_CPP_STRINGIZE(x)
+#define LZO_CPP_CONCAT2(a,b) a ## b
+#define LZO_CPP_CONCAT3(a,b,c) a ## b ## c
+#define LZO_CPP_CONCAT4(a,b,c,d) a ## b ## c ## d
+#define LZO_CPP_CONCAT5(a,b,c,d,e) a ## b ## c ## d ## e
+#define LZO_CPP_CONCAT6(a,b,c,d,e,f) a ## b ## c ## d ## e ## f
+#define LZO_CPP_CONCAT7(a,b,c,d,e,f,g) a ## b ## c ## d ## e ## f ## g
+#define LZO_CPP_ECONCAT2(a,b) LZO_CPP_CONCAT2(a,b)
+#define LZO_CPP_ECONCAT3(a,b,c) LZO_CPP_CONCAT3(a,b,c)
+#define LZO_CPP_ECONCAT4(a,b,c,d) LZO_CPP_CONCAT4(a,b,c,d)
+#define LZO_CPP_ECONCAT5(a,b,c,d,e) LZO_CPP_CONCAT5(a,b,c,d,e)
+#define LZO_CPP_ECONCAT6(a,b,c,d,e,f) LZO_CPP_CONCAT6(a,b,c,d,e,f)
+#define LZO_CPP_ECONCAT7(a,b,c,d,e,f,g) LZO_CPP_CONCAT7(a,b,c,d,e,f,g)
+#endif
+#define __LZO_MASK_GEN(o,b) (((((o) << ((b)-((b)!=0))) - (o)) << 1) + (o)*((b)!=0))
+#if 1 && defined(__cplusplus)
+# if !defined(__STDC_CONSTANT_MACROS)
+# define __STDC_CONSTANT_MACROS 1
+# endif
+# if !defined(__STDC_LIMIT_MACROS)
+# define __STDC_LIMIT_MACROS 1
+# endif
+#endif
+#if defined(__cplusplus)
+# define LZO_EXTERN_C extern "C"
+# define LZO_EXTERN_C_BEGIN extern "C" {
+# define LZO_EXTERN_C_END }
+#else
+# define LZO_EXTERN_C extern
+# define LZO_EXTERN_C_BEGIN /*empty*/
+# define LZO_EXTERN_C_END /*empty*/
+#endif
+#if !defined(__LZO_OS_OVERRIDE)
+#if (LZO_OS_FREESTANDING)
+# define LZO_INFO_OS "freestanding"
+#elif (LZO_OS_EMBEDDED)
+# define LZO_INFO_OS "embedded"
+#elif 1 && defined(__IAR_SYSTEMS_ICC__)
+# define LZO_OS_EMBEDDED 1
+# define LZO_INFO_OS "embedded"
+#elif defined(__CYGWIN__) && defined(__GNUC__)
+# define LZO_OS_CYGWIN 1
+# define LZO_INFO_OS "cygwin"
+#elif defined(__EMX__) && defined(__GNUC__)
+# define LZO_OS_EMX 1
+# define LZO_INFO_OS "emx"
+#elif defined(__BEOS__)
+# define LZO_OS_BEOS 1
+# define LZO_INFO_OS "beos"
+#elif defined(__Lynx__)
+# define LZO_OS_LYNXOS 1
+# define LZO_INFO_OS "lynxos"
+#elif defined(__OS400__)
+# define LZO_OS_OS400 1
+# define LZO_INFO_OS "os400"
+#elif defined(__QNX__)
+# define LZO_OS_QNX 1
+# define LZO_INFO_OS "qnx"
+#elif defined(__BORLANDC__) && defined(__DPMI32__) && (__BORLANDC__ >= 0x0460)
+# define LZO_OS_DOS32 1
+# define LZO_INFO_OS "dos32"
+#elif defined(__BORLANDC__) && defined(__DPMI16__)
+# define LZO_OS_DOS16 1
+# define LZO_INFO_OS "dos16"
+#elif defined(__ZTC__) && defined(DOS386)
+# define LZO_OS_DOS32 1
+# define LZO_INFO_OS "dos32"
+#elif defined(__OS2__) || defined(__OS2V2__)
+# if (UINT_MAX == LZO_0xffffL)
+# define LZO_OS_OS216 1
+# define LZO_INFO_OS "os216"
+# elif (UINT_MAX == LZO_0xffffffffL)
+# define LZO_OS_OS2 1
+# define LZO_INFO_OS "os2"
+# else
+# error "check your limits.h header"
+# endif
+#elif defined(__WIN64__) || defined(_WIN64) || defined(WIN64)
+# define LZO_OS_WIN64 1
+# define LZO_INFO_OS "win64"
+#elif defined(__WIN32__) || defined(_WIN32) || defined(WIN32) || defined(__WINDOWS_386__)
+# define LZO_OS_WIN32 1
+# define LZO_INFO_OS "win32"
+#elif defined(__MWERKS__) && defined(__INTEL__)
+# define LZO_OS_WIN32 1
+# define LZO_INFO_OS "win32"
+#elif defined(__WINDOWS__) || defined(_WINDOWS) || defined(_Windows)
+# if (UINT_MAX == LZO_0xffffL)
+# define LZO_OS_WIN16 1
+# define LZO_INFO_OS "win16"
+# elif (UINT_MAX == LZO_0xffffffffL)
+# define LZO_OS_WIN32 1
+# define LZO_INFO_OS "win32"
+# else
+# error "check your limits.h header"
+# endif
+#elif defined(__DOS__) || defined(__MSDOS__) || defined(_MSDOS) || defined(MSDOS) || (defined(__PACIFIC__) && defined(DOS))
+# if (UINT_MAX == LZO_0xffffL)
+# define LZO_OS_DOS16 1
+# define LZO_INFO_OS "dos16"
+# elif (UINT_MAX == LZO_0xffffffffL)
+# define LZO_OS_DOS32 1
+# define LZO_INFO_OS "dos32"
+# else
+# error "check your limits.h header"
+# endif
+#elif defined(__WATCOMC__)
+# if defined(__NT__) && (UINT_MAX == LZO_0xffffL)
+# define LZO_OS_DOS16 1
+# define LZO_INFO_OS "dos16"
+# elif defined(__NT__) && (__WATCOMC__ < 1100)
+# define LZO_OS_WIN32 1
+# define LZO_INFO_OS "win32"
+# elif defined(__linux__) || defined(__LINUX__)
+# define LZO_OS_POSIX 1
+# define LZO_INFO_OS "posix"
+# else
+# error "please specify a target using the -bt compiler option"
+# endif
+#elif defined(__palmos__)
+# define LZO_OS_PALMOS 1
+# define LZO_INFO_OS "palmos"
+#elif defined(__TOS__) || defined(__atarist__)
+# define LZO_OS_TOS 1
+# define LZO_INFO_OS "tos"
+#elif defined(macintosh) && !defined(__arm__) && !defined(__i386__) && !defined(__ppc__) && !defined(__x64_64__)
+# define LZO_OS_MACCLASSIC 1
+# define LZO_INFO_OS "macclassic"
+#elif defined(__VMS)
+# define LZO_OS_VMS 1
+# define LZO_INFO_OS "vms"
+#elif (defined(__mips__) && defined(__R5900__)) || defined(__MIPS_PSX2__)
+# define LZO_OS_CONSOLE 1
+# define LZO_OS_CONSOLE_PS2 1
+# define LZO_INFO_OS "console"
+# define LZO_INFO_OS_CONSOLE "ps2"
+#elif defined(__mips__) && defined(__psp__)
+# define LZO_OS_CONSOLE 1
+# define LZO_OS_CONSOLE_PSP 1
+# define LZO_INFO_OS "console"
+# define LZO_INFO_OS_CONSOLE "psp"
+#else
+# define LZO_OS_POSIX 1
+# define LZO_INFO_OS "posix"
+#endif
+#if (LZO_OS_POSIX)
+# if defined(_AIX) || defined(__AIX__) || defined(__aix__)
+# define LZO_OS_POSIX_AIX 1
+# define LZO_INFO_OS_POSIX "aix"
+# elif defined(__FreeBSD__)
+# define LZO_OS_POSIX_FREEBSD 1
+# define LZO_INFO_OS_POSIX "freebsd"
+# elif defined(__hpux__) || defined(__hpux)
+# define LZO_OS_POSIX_HPUX 1
+# define LZO_INFO_OS_POSIX "hpux"
+# elif defined(__INTERIX)
+# define LZO_OS_POSIX_INTERIX 1
+# define LZO_INFO_OS_POSIX "interix"
+# elif defined(__IRIX__) || defined(__irix__)
+# define LZO_OS_POSIX_IRIX 1
+# define LZO_INFO_OS_POSIX "irix"
+# elif defined(__linux__) || defined(__linux) || defined(__LINUX__)
+# define LZO_OS_POSIX_LINUX 1
+# define LZO_INFO_OS_POSIX "linux"
+# elif defined(__APPLE__) && defined(__MACH__)
+# if ((__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__-0) >= 20000)
+# define LZO_OS_POSIX_DARWIN 1040
+# define LZO_INFO_OS_POSIX "darwin_iphone"
+# elif ((__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__-0) >= 1040)
+# define LZO_OS_POSIX_DARWIN __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__
+# define LZO_INFO_OS_POSIX "darwin"
+# else
+# define LZO_OS_POSIX_DARWIN 1
+# define LZO_INFO_OS_POSIX "darwin"
+# endif
+# define LZO_OS_POSIX_MACOSX LZO_OS_POSIX_DARWIN
+# elif defined(__minix__) || defined(__minix)
+# define LZO_OS_POSIX_MINIX 1
+# define LZO_INFO_OS_POSIX "minix"
+# elif defined(__NetBSD__)
+# define LZO_OS_POSIX_NETBSD 1
+# define LZO_INFO_OS_POSIX "netbsd"
+# elif defined(__OpenBSD__)
+# define LZO_OS_POSIX_OPENBSD 1
+# define LZO_INFO_OS_POSIX "openbsd"
+# elif defined(__osf__)
+# define LZO_OS_POSIX_OSF 1
+# define LZO_INFO_OS_POSIX "osf"
+# elif defined(__solaris__) || defined(__sun)
+# if defined(__SVR4) || defined(__svr4__)
+# define LZO_OS_POSIX_SOLARIS 1
+# define LZO_INFO_OS_POSIX "solaris"
+# else
+# define LZO_OS_POSIX_SUNOS 1
+# define LZO_INFO_OS_POSIX "sunos"
+# endif
+# elif defined(__ultrix__) || defined(__ultrix)
+# define LZO_OS_POSIX_ULTRIX 1
+# define LZO_INFO_OS_POSIX "ultrix"
+# elif defined(_UNICOS)
+# define LZO_OS_POSIX_UNICOS 1
+# define LZO_INFO_OS_POSIX "unicos"
+# else
+# define LZO_OS_POSIX_UNKNOWN 1
+# define LZO_INFO_OS_POSIX "unknown"
+# endif
+#endif
+#endif
+#if (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16)
+# if (UINT_MAX != LZO_0xffffL)
+# error "unexpected configuration - check your compiler defines"
+# endif
+# if (ULONG_MAX != LZO_0xffffffffL)
+# error "unexpected configuration - check your compiler defines"
+# endif
+#endif
+#if (LZO_OS_DOS32 || LZO_OS_OS2 || LZO_OS_WIN32 || LZO_OS_WIN64)
+# if (UINT_MAX != LZO_0xffffffffL)
+# error "unexpected configuration - check your compiler defines"
+# endif
+# if (ULONG_MAX != LZO_0xffffffffL)
+# error "unexpected configuration - check your compiler defines"
+# endif
+#endif
+#if defined(CIL) && defined(_GNUCC) && defined(__GNUC__)
+# define LZO_CC_CILLY 1
+# define LZO_INFO_CC "Cilly"
+# if defined(__CILLY__)
+# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__CILLY__)
+# else
+# define LZO_INFO_CCVER "unknown"
+# endif
+#elif 0 && defined(SDCC) && defined(__VERSION__) && !defined(__GNUC__)
+# define LZO_CC_SDCC 1
+# define LZO_INFO_CC "sdcc"
+# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(SDCC)
+#elif defined(__PATHSCALE__) && defined(__PATHCC_PATCHLEVEL__)
+# define LZO_CC_PATHSCALE (__PATHCC__ * 0x10000L + (__PATHCC_MINOR__-0) * 0x100 + (__PATHCC_PATCHLEVEL__-0))
+# define LZO_INFO_CC "Pathscale C"
+# define LZO_INFO_CCVER __PATHSCALE__
+# if defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__VERSION__)
+# define LZO_CC_PATHSCALE_GNUC (__GNUC__ * 0x10000L + (__GNUC_MINOR__-0) * 0x100 + (__GNUC_PATCHLEVEL__-0))
+# endif
+#elif defined(__INTEL_COMPILER) && ((__INTEL_COMPILER-0) > 0)
+# define LZO_CC_INTELC __INTEL_COMPILER
+# define LZO_INFO_CC "Intel C"
+# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__INTEL_COMPILER)
+# if defined(_MSC_VER) && ((_MSC_VER-0) > 0)
+# define LZO_CC_INTELC_MSC _MSC_VER
+# elif defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__VERSION__)
+# define LZO_CC_INTELC_GNUC (__GNUC__ * 0x10000L + (__GNUC_MINOR__-0) * 0x100 + (__GNUC_PATCHLEVEL__-0))
+# endif
+#elif defined(__POCC__) && defined(_WIN32)
+# define LZO_CC_PELLESC 1
+# define LZO_INFO_CC "Pelles C"
+# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__POCC__)
+#elif defined(__ARMCC_VERSION) && defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__VERSION__)
+# if defined(__GNUC_PATCHLEVEL__)
+# define LZO_CC_ARMCC_GNUC (__GNUC__ * 0x10000L + (__GNUC_MINOR__-0) * 0x100 + (__GNUC_PATCHLEVEL__-0))
+# else
+# define LZO_CC_ARMCC_GNUC (__GNUC__ * 0x10000L + (__GNUC_MINOR__-0) * 0x100)
+# endif
+# define LZO_CC_ARMCC __ARMCC_VERSION
+# define LZO_INFO_CC "ARM C Compiler"
+# define LZO_INFO_CCVER __VERSION__
+#elif defined(__clang__) && defined(__c2__) && defined(__c2_version__) && defined(_MSC_VER)
+# define LZO_CC_CLANG (__clang_major__ * 0x10000L + (__clang_minor__-0) * 0x100 + (__clang_patchlevel__-0))
+# define LZO_CC_CLANG_C2 _MSC_VER
+# define LZO_CC_CLANG_VENDOR_MICROSOFT 1
+# define LZO_INFO_CC "clang/c2"
+# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__c2_version__)
+#elif defined(__clang__) && defined(__llvm__) && defined(__VERSION__)
+# if defined(__clang_major__) && defined(__clang_minor__) && defined(__clang_patchlevel__)
+# define LZO_CC_CLANG (__clang_major__ * 0x10000L + (__clang_minor__-0) * 0x100 + (__clang_patchlevel__-0))
+# else
+# define LZO_CC_CLANG 0x010000L
+# endif
+# if defined(_MSC_VER) && ((_MSC_VER-0) > 0)
+# define LZO_CC_CLANG_MSC _MSC_VER
+# elif defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__VERSION__)
+# define LZO_CC_CLANG_GNUC (__GNUC__ * 0x10000L + (__GNUC_MINOR__-0) * 0x100 + (__GNUC_PATCHLEVEL__-0))
+# endif
+# if defined(__APPLE_CC__)
+# define LZO_CC_CLANG_VENDOR_APPLE 1
+# define LZO_INFO_CC "clang/apple"
+# else
+# define LZO_CC_CLANG_VENDOR_LLVM 1
+# define LZO_INFO_CC "clang"
+# endif
+# if defined(__clang_version__)
+# define LZO_INFO_CCVER __clang_version__
+# else
+# define LZO_INFO_CCVER __VERSION__
+# endif
+#elif defined(__llvm__) && defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__VERSION__)
+# if defined(__GNUC_PATCHLEVEL__)
+# define LZO_CC_LLVM_GNUC (__GNUC__ * 0x10000L + (__GNUC_MINOR__-0) * 0x100 + (__GNUC_PATCHLEVEL__-0))
+# else
+# define LZO_CC_LLVM_GNUC (__GNUC__ * 0x10000L + (__GNUC_MINOR__-0) * 0x100)
+# endif
+# define LZO_CC_LLVM LZO_CC_LLVM_GNUC
+# define LZO_INFO_CC "llvm-gcc"
+# define LZO_INFO_CCVER __VERSION__
+#elif defined(__ACK__) && defined(_ACK)
+# define LZO_CC_ACK 1
+# define LZO_INFO_CC "Amsterdam Compiler Kit C"
+# define LZO_INFO_CCVER "unknown"
+#elif defined(__ARMCC_VERSION) && !defined(__GNUC__)
+# define LZO_CC_ARMCC __ARMCC_VERSION
+# define LZO_CC_ARMCC_ARMCC __ARMCC_VERSION
+# define LZO_INFO_CC "ARM C Compiler"
+# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__ARMCC_VERSION)
+#elif defined(__AZTEC_C__)
+# define LZO_CC_AZTECC 1
+# define LZO_INFO_CC "Aztec C"
+# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__AZTEC_C__)
+#elif defined(__CODEGEARC__)
+# define LZO_CC_CODEGEARC 1
+# define LZO_INFO_CC "CodeGear C"
+# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__CODEGEARC__)
+#elif defined(__BORLANDC__)
+# define LZO_CC_BORLANDC 1
+# define LZO_INFO_CC "Borland C"
+# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__BORLANDC__)
+#elif defined(_CRAYC) && defined(_RELEASE)
+# define LZO_CC_CRAYC 1
+# define LZO_INFO_CC "Cray C"
+# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(_RELEASE)
+#elif defined(__DMC__) && defined(__SC__)
+# define LZO_CC_DMC 1
+# define LZO_INFO_CC "Digital Mars C"
+# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__DMC__)
+#elif defined(__DECC)
+# define LZO_CC_DECC 1
+# define LZO_INFO_CC "DEC C"
+# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__DECC)
+#elif (defined(__ghs) || defined(__ghs__)) && defined(__GHS_VERSION_NUMBER) && ((__GHS_VERSION_NUMBER-0) > 0)
+# define LZO_CC_GHS 1
+# define LZO_INFO_CC "Green Hills C"
+# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__GHS_VERSION_NUMBER)
+# if defined(_MSC_VER) && ((_MSC_VER-0) > 0)
+# define LZO_CC_GHS_MSC _MSC_VER
+# elif defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__VERSION__)
+# define LZO_CC_GHS_GNUC (__GNUC__ * 0x10000L + (__GNUC_MINOR__-0) * 0x100 + (__GNUC_PATCHLEVEL__-0))
+# endif
+#elif defined(__HIGHC__)
+# define LZO_CC_HIGHC 1
+# define LZO_INFO_CC "MetaWare High C"
+# define LZO_INFO_CCVER "unknown"
+#elif defined(__HP_aCC) && ((__HP_aCC-0) > 0)
+# define LZO_CC_HPACC __HP_aCC
+# define LZO_INFO_CC "HP aCC"
+# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__HP_aCC)
+#elif defined(__IAR_SYSTEMS_ICC__)
+# define LZO_CC_IARC 1
+# define LZO_INFO_CC "IAR C"
+# if defined(__VER__)
+# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__VER__)
+# else
+# define LZO_INFO_CCVER "unknown"
+# endif
+#elif defined(__IBMC__) && ((__IBMC__-0) > 0)
+# define LZO_CC_IBMC __IBMC__
+# define LZO_INFO_CC "IBM C"
+# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__IBMC__)
+#elif defined(__IBMCPP__) && ((__IBMCPP__-0) > 0)
+# define LZO_CC_IBMC __IBMCPP__
+# define LZO_INFO_CC "IBM C"
+# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__IBMCPP__)
+#elif defined(__KEIL__) && defined(__C166__)
+# define LZO_CC_KEILC 1
+# define LZO_INFO_CC "Keil C"
+# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__C166__)
+#elif defined(__LCC__) && defined(_WIN32) && defined(__LCCOPTIMLEVEL)
+# define LZO_CC_LCCWIN32 1
+# define LZO_INFO_CC "lcc-win32"
+# define LZO_INFO_CCVER "unknown"
+#elif defined(__LCC__)
+# define LZO_CC_LCC 1
+# define LZO_INFO_CC "lcc"
+# if defined(__LCC_VERSION__)
+# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__LCC_VERSION__)
+# else
+# define LZO_INFO_CCVER "unknown"
+# endif
+#elif defined(__MWERKS__) && ((__MWERKS__-0) > 0)
+# define LZO_CC_MWERKS __MWERKS__
+# define LZO_INFO_CC "Metrowerks C"
+# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__MWERKS__)
+#elif (defined(__NDPC__) || defined(__NDPX__)) && defined(__i386)
+# define LZO_CC_NDPC 1
+# define LZO_INFO_CC "Microway NDP C"
+# define LZO_INFO_CCVER "unknown"
+#elif defined(__PACIFIC__)
+# define LZO_CC_PACIFICC 1
+# define LZO_INFO_CC "Pacific C"
+# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__PACIFIC__)
+#elif defined(__PGI) && defined(__PGIC__) && defined(__PGIC_MINOR__)
+# if defined(__PGIC_PATCHLEVEL__)
+# define LZO_CC_PGI (__PGIC__ * 0x10000L + (__PGIC_MINOR__-0) * 0x100 + (__PGIC_PATCHLEVEL__-0))
+# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__PGIC__) "." LZO_PP_MACRO_EXPAND(__PGIC_MINOR__) "." LZO_PP_MACRO_EXPAND(__PGIC_PATCHLEVEL__)
+# else
+# define LZO_CC_PGI (__PGIC__ * 0x10000L + (__PGIC_MINOR__-0) * 0x100)
+# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__PGIC__) "." LZO_PP_MACRO_EXPAND(__PGIC_MINOR__) ".0"
+# endif
+# define LZO_INFO_CC "Portland Group PGI C"
+#elif defined(__PGI) && (defined(__linux__) || defined(__WIN32__))
+# define LZO_CC_PGI 1
+# define LZO_INFO_CC "Portland Group PGI C"
+# define LZO_INFO_CCVER "unknown"
+#elif defined(__PUREC__) && defined(__TOS__)
+# define LZO_CC_PUREC 1
+# define LZO_INFO_CC "Pure C"
+# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__PUREC__)
+#elif defined(__SC__) && defined(__ZTC__)
+# define LZO_CC_SYMANTECC 1
+# define LZO_INFO_CC "Symantec C"
+# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__SC__)
+#elif defined(__SUNPRO_C)
+# define LZO_INFO_CC "SunPro C"
+# if ((__SUNPRO_C-0) > 0)
+# define LZO_CC_SUNPROC __SUNPRO_C
+# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__SUNPRO_C)
+# else
+# define LZO_CC_SUNPROC 1
+# define LZO_INFO_CCVER "unknown"
+# endif
+#elif defined(__SUNPRO_CC)
+# define LZO_INFO_CC "SunPro C"
+# if ((__SUNPRO_CC-0) > 0)
+# define LZO_CC_SUNPROC __SUNPRO_CC
+# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__SUNPRO_CC)
+# else
+# define LZO_CC_SUNPROC 1
+# define LZO_INFO_CCVER "unknown"
+# endif
+#elif defined(__TINYC__)
+# define LZO_CC_TINYC 1
+# define LZO_INFO_CC "Tiny C"
+# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__TINYC__)
+#elif defined(__TSC__)
+# define LZO_CC_TOPSPEEDC 1
+# define LZO_INFO_CC "TopSpeed C"
+# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__TSC__)
+#elif defined(__WATCOMC__)
+# define LZO_CC_WATCOMC 1
+# define LZO_INFO_CC "Watcom C"
+# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__WATCOMC__)
+#elif defined(__TURBOC__)
+# define LZO_CC_TURBOC 1
+# define LZO_INFO_CC "Turbo C"
+# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__TURBOC__)
+#elif defined(__ZTC__)
+# define LZO_CC_ZORTECHC 1
+# define LZO_INFO_CC "Zortech C"
+# if ((__ZTC__-0) == 0x310)
+# define LZO_INFO_CCVER "0x310"
+# else
+# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__ZTC__)
+# endif
+#elif defined(__GNUC__) && defined(__VERSION__)
+# if defined(__GNUC_MINOR__) && defined(__GNUC_PATCHLEVEL__)
+# define LZO_CC_GNUC (__GNUC__ * 0x10000L + (__GNUC_MINOR__-0) * 0x100 + (__GNUC_PATCHLEVEL__-0))
+# elif defined(__GNUC_MINOR__)
+# define LZO_CC_GNUC (__GNUC__ * 0x10000L + (__GNUC_MINOR__-0) * 0x100)
+# else
+# define LZO_CC_GNUC (__GNUC__ * 0x10000L)
+# endif
+# define LZO_INFO_CC "gcc"
+# define LZO_INFO_CCVER __VERSION__
+#elif defined(_MSC_VER) && ((_MSC_VER-0) > 0)
+# define LZO_CC_MSC _MSC_VER
+# define LZO_INFO_CC "Microsoft C"
+# if defined(_MSC_FULL_VER)
+# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(_MSC_VER) "." LZO_PP_MACRO_EXPAND(_MSC_FULL_VER)
+# else
+# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(_MSC_VER)
+# endif
+#else
+# define LZO_CC_UNKNOWN 1
+# define LZO_INFO_CC "unknown"
+# define LZO_INFO_CCVER "unknown"
+#endif
+#if (LZO_CC_GNUC) && defined(__OPEN64__)
+# if defined(__OPENCC__) && defined(__OPENCC_MINOR__) && defined(__OPENCC_PATCHLEVEL__)
+# define LZO_CC_OPEN64 (__OPENCC__ * 0x10000L + (__OPENCC_MINOR__-0) * 0x100 + (__OPENCC_PATCHLEVEL__-0))
+# define LZO_CC_OPEN64_GNUC LZO_CC_GNUC
+# endif
+#endif
+#if (LZO_CC_GNUC) && defined(__PCC__)
+# if defined(__PCC__) && defined(__PCC_MINOR__) && defined(__PCC_MINORMINOR__)
+# define LZO_CC_PCC (__PCC__ * 0x10000L + (__PCC_MINOR__-0) * 0x100 + (__PCC_MINORMINOR__-0))
+# define LZO_CC_PCC_GNUC LZO_CC_GNUC
+# endif
+#endif
+#if 0 && (LZO_CC_MSC && (_MSC_VER >= 1200)) && !defined(_MSC_FULL_VER)
+# error "LZO_CC_MSC: _MSC_FULL_VER is not defined"
+#endif
+#if !defined(__LZO_ARCH_OVERRIDE) && !(LZO_ARCH_GENERIC) && defined(_CRAY)
+# if (UINT_MAX > LZO_0xffffffffL) && defined(_CRAY)
+# if defined(_CRAYMPP) || defined(_CRAYT3D) || defined(_CRAYT3E)
+# define LZO_ARCH_CRAY_MPP 1
+# elif defined(_CRAY1)
+# define LZO_ARCH_CRAY_PVP 1
+# endif
+# endif
+#endif
+#if !defined(__LZO_ARCH_OVERRIDE)
+#if (LZO_ARCH_GENERIC)
+# define LZO_INFO_ARCH "generic"
+#elif (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16)
+# define LZO_ARCH_I086 1
+# define LZO_INFO_ARCH "i086"
+#elif defined(__aarch64__) || defined(_M_ARM64)
+# define LZO_ARCH_ARM64 1
+# define LZO_INFO_ARCH "arm64"
+#elif defined(__alpha__) || defined(__alpha) || defined(_M_ALPHA)
+# define LZO_ARCH_ALPHA 1
+# define LZO_INFO_ARCH "alpha"
+#elif (LZO_ARCH_CRAY_MPP) && (defined(_CRAYT3D) || defined(_CRAYT3E))
+# define LZO_ARCH_ALPHA 1
+# define LZO_INFO_ARCH "alpha"
+#elif defined(__amd64__) || defined(__x86_64__) || defined(_M_AMD64)
+# define LZO_ARCH_AMD64 1
+# define LZO_INFO_ARCH "amd64"
+#elif defined(__arm__) || defined(_M_ARM)
+# define LZO_ARCH_ARM 1
+# define LZO_INFO_ARCH "arm"
+#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICCARM__)
+# define LZO_ARCH_ARM 1
+# define LZO_INFO_ARCH "arm"
+#elif (UINT_MAX <= LZO_0xffffL) && defined(__AVR__)
+# define LZO_ARCH_AVR 1
+# define LZO_INFO_ARCH "avr"
+#elif defined(__avr32__) || defined(__AVR32__)
+# define LZO_ARCH_AVR32 1
+# define LZO_INFO_ARCH "avr32"
+#elif defined(__bfin__)
+# define LZO_ARCH_BLACKFIN 1
+# define LZO_INFO_ARCH "blackfin"
+#elif (UINT_MAX == LZO_0xffffL) && defined(__C166__)
+# define LZO_ARCH_C166 1
+# define LZO_INFO_ARCH "c166"
+#elif defined(__cris__)
+# define LZO_ARCH_CRIS 1
+# define LZO_INFO_ARCH "cris"
+#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICCEZ80__)
+# define LZO_ARCH_EZ80 1
+# define LZO_INFO_ARCH "ez80"
+#elif defined(__H8300__) || defined(__H8300H__) || defined(__H8300S__) || defined(__H8300SX__)
+# define LZO_ARCH_H8300 1
+# define LZO_INFO_ARCH "h8300"
+#elif defined(__hppa__) || defined(__hppa)
+# define LZO_ARCH_HPPA 1
+# define LZO_INFO_ARCH "hppa"
+#elif defined(__386__) || defined(__i386__) || defined(__i386) || defined(_M_IX86) || defined(_M_I386)
+# define LZO_ARCH_I386 1
+# define LZO_ARCH_IA32 1
+# define LZO_INFO_ARCH "i386"
+#elif (LZO_CC_ZORTECHC && defined(__I86__))
+# define LZO_ARCH_I386 1
+# define LZO_ARCH_IA32 1
+# define LZO_INFO_ARCH "i386"
+#elif (LZO_OS_DOS32 && LZO_CC_HIGHC) && defined(_I386)
+# define LZO_ARCH_I386 1
+# define LZO_ARCH_IA32 1
+# define LZO_INFO_ARCH "i386"
+#elif defined(__ia64__) || defined(__ia64) || defined(_M_IA64)
+# define LZO_ARCH_IA64 1
+# define LZO_INFO_ARCH "ia64"
+#elif (UINT_MAX == LZO_0xffffL) && defined(__m32c__)
+# define LZO_ARCH_M16C 1
+# define LZO_INFO_ARCH "m16c"
+#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICCM16C__)
+# define LZO_ARCH_M16C 1
+# define LZO_INFO_ARCH "m16c"
+#elif defined(__m32r__)
+# define LZO_ARCH_M32R 1
+# define LZO_INFO_ARCH "m32r"
+#elif (LZO_OS_TOS) || defined(__m68k__) || defined(__m68000__) || defined(__mc68000__) || defined(__mc68020__) || defined(_M_M68K)
+# define LZO_ARCH_M68K 1
+# define LZO_INFO_ARCH "m68k"
+#elif (UINT_MAX == LZO_0xffffL) && defined(__C251__)
+# define LZO_ARCH_MCS251 1
+# define LZO_INFO_ARCH "mcs251"
+#elif (UINT_MAX == LZO_0xffffL) && defined(__C51__)
+# define LZO_ARCH_MCS51 1
+# define LZO_INFO_ARCH "mcs51"
+#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICC8051__)
+# define LZO_ARCH_MCS51 1
+# define LZO_INFO_ARCH "mcs51"
+#elif defined(__mips__) || defined(__mips) || defined(_MIPS_ARCH) || defined(_M_MRX000)
+# define LZO_ARCH_MIPS 1
+# define LZO_INFO_ARCH "mips"
+#elif (UINT_MAX == LZO_0xffffL) && defined(__MSP430__)
+# define LZO_ARCH_MSP430 1
+# define LZO_INFO_ARCH "msp430"
+#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICC430__)
+# define LZO_ARCH_MSP430 1
+# define LZO_INFO_ARCH "msp430"
+#elif defined(__powerpc__) || defined(__powerpc) || defined(__ppc__) || defined(__PPC__) || defined(_M_PPC) || defined(_ARCH_PPC) || defined(_ARCH_PWR)
+# define LZO_ARCH_POWERPC 1
+# define LZO_INFO_ARCH "powerpc"
+#elif defined(__powerpc64__) || defined(__powerpc64) || defined(__ppc64__) || defined(__PPC64__)
+# define LZO_ARCH_POWERPC 1
+# define LZO_INFO_ARCH "powerpc"
+#elif defined(__powerpc64le__) || defined(__powerpc64le) || defined(__ppc64le__) || defined(__PPC64LE__)
+# define LZO_ARCH_POWERPC 1
+# define LZO_INFO_ARCH "powerpc"
+#elif defined(__riscv)
+# define LZO_ARCH_RISCV 1
+# define LZO_INFO_ARCH "riscv"
+#elif defined(__s390__) || defined(__s390) || defined(__s390x__) || defined(__s390x)
+# define LZO_ARCH_S390 1
+# define LZO_INFO_ARCH "s390"
+#elif defined(__sh__) || defined(_M_SH)
+# define LZO_ARCH_SH 1
+# define LZO_INFO_ARCH "sh"
+#elif defined(__sparc__) || defined(__sparc) || defined(__sparcv8)
+# define LZO_ARCH_SPARC 1
+# define LZO_INFO_ARCH "sparc"
+#elif defined(__SPU__)
+# define LZO_ARCH_SPU 1
+# define LZO_INFO_ARCH "spu"
+#elif (UINT_MAX == LZO_0xffffL) && defined(__z80)
+# define LZO_ARCH_Z80 1
+# define LZO_INFO_ARCH "z80"
+#elif (LZO_ARCH_CRAY_PVP)
+# if defined(_CRAYSV1)
+# define LZO_ARCH_CRAY_SV1 1
+# define LZO_INFO_ARCH "cray_sv1"
+# elif (_ADDR64)
+# define LZO_ARCH_CRAY_T90 1
+# define LZO_INFO_ARCH "cray_t90"
+# elif (_ADDR32)
+# define LZO_ARCH_CRAY_YMP 1
+# define LZO_INFO_ARCH "cray_ymp"
+# else
+# define LZO_ARCH_CRAY_XMP 1
+# define LZO_INFO_ARCH "cray_xmp"
+# endif
+#else
+# define LZO_ARCH_UNKNOWN 1
+# define LZO_INFO_ARCH "unknown"
+#endif
+#endif
+#if !defined(LZO_ARCH_ARM_THUMB2)
+#if (LZO_ARCH_ARM)
+# if defined(__thumb__) || defined(__thumb) || defined(_M_THUMB)
+# if defined(__thumb2__)
+# define LZO_ARCH_ARM_THUMB2 1
+# elif 1 && defined(__TARGET_ARCH_THUMB) && ((__TARGET_ARCH_THUMB)+0 >= 4)
+# define LZO_ARCH_ARM_THUMB2 1
+# elif 1 && defined(_MSC_VER) && defined(_M_THUMB) && ((_M_THUMB)+0 >= 7)
+# define LZO_ARCH_ARM_THUMB2 1
+# endif
+# endif
+#endif
+#endif
+#if (LZO_ARCH_ARM_THUMB2)
+# undef LZO_INFO_ARCH
+# define LZO_INFO_ARCH "arm_thumb2"
+#endif
+#if 1 && (LZO_ARCH_UNKNOWN) && (LZO_OS_DOS32 || LZO_OS_OS2)
+# error "FIXME - missing define for CPU architecture"
+#endif
+#if 1 && (LZO_ARCH_UNKNOWN) && (LZO_OS_WIN32)
+# error "FIXME - missing LZO_OS_WIN32 define for CPU architecture"
+#endif
+#if 1 && (LZO_ARCH_UNKNOWN) && (LZO_OS_WIN64)
+# error "FIXME - missing LZO_OS_WIN64 define for CPU architecture"
+#endif
+#if (LZO_OS_OS216 || LZO_OS_WIN16)
+# define LZO_ARCH_I086PM 1
+#elif 1 && (LZO_OS_DOS16 && defined(BLX286))
+# define LZO_ARCH_I086PM 1
+#elif 1 && (LZO_OS_DOS16 && defined(DOSX286))
+# define LZO_ARCH_I086PM 1
+#elif 1 && (LZO_OS_DOS16 && LZO_CC_BORLANDC && defined(__DPMI16__))
+# define LZO_ARCH_I086PM 1
+#endif
+#if (LZO_ARCH_AMD64 && !LZO_ARCH_X64)
+# define LZO_ARCH_X64 1
+#elif (!LZO_ARCH_AMD64 && LZO_ARCH_X64) && defined(__LZO_ARCH_OVERRIDE)
+# define LZO_ARCH_AMD64 1
+#endif
+#if (LZO_ARCH_ARM64 && !LZO_ARCH_AARCH64)
+# define LZO_ARCH_AARCH64 1
+#elif (!LZO_ARCH_ARM64 && LZO_ARCH_AARCH64) && defined(__LZO_ARCH_OVERRIDE)
+# define LZO_ARCH_ARM64 1
+#endif
+#if (LZO_ARCH_I386 && !LZO_ARCH_X86)
+# define LZO_ARCH_X86 1
+#elif (!LZO_ARCH_I386 && LZO_ARCH_X86) && defined(__LZO_ARCH_OVERRIDE)
+# define LZO_ARCH_I386 1
+#endif
+#if (LZO_ARCH_AMD64 && !LZO_ARCH_X64) || (!LZO_ARCH_AMD64 && LZO_ARCH_X64)
+# error "unexpected configuration - check your compiler defines"
+#endif
+#if (LZO_ARCH_ARM64 && !LZO_ARCH_AARCH64) || (!LZO_ARCH_ARM64 && LZO_ARCH_AARCH64)
+# error "unexpected configuration - check your compiler defines"
+#endif
+#if (LZO_ARCH_I386 && !LZO_ARCH_X86) || (!LZO_ARCH_I386 && LZO_ARCH_X86)
+# error "unexpected configuration - check your compiler defines"
+#endif
+#if (LZO_ARCH_ARM_THUMB1 && !LZO_ARCH_ARM)
+# error "unexpected configuration - check your compiler defines"
+#endif
+#if (LZO_ARCH_ARM_THUMB2 && !LZO_ARCH_ARM)
+# error "unexpected configuration - check your compiler defines"
+#endif
+#if (LZO_ARCH_ARM_THUMB1 && LZO_ARCH_ARM_THUMB2)
+# error "unexpected configuration - check your compiler defines"
+#endif
+#if (LZO_ARCH_I086PM && !LZO_ARCH_I086)
+# error "unexpected configuration - check your compiler defines"
+#endif
+#if (LZO_ARCH_I086)
+# if (UINT_MAX != LZO_0xffffL)
+# error "unexpected configuration - check your compiler defines"
+# endif
+# if (ULONG_MAX != LZO_0xffffffffL)
+# error "unexpected configuration - check your compiler defines"
+# endif
+#endif
+#if (LZO_ARCH_I386)
+# if (UINT_MAX != LZO_0xffffL) && defined(__i386_int16__)
+# error "unexpected configuration - check your compiler defines"
+# endif
+# if (UINT_MAX != LZO_0xffffffffL) && !defined(__i386_int16__)
+# error "unexpected configuration - check your compiler defines"
+# endif
+# if (ULONG_MAX != LZO_0xffffffffL)
+# error "unexpected configuration - check your compiler defines"
+# endif
+#endif
+#if (LZO_ARCH_AMD64 || LZO_ARCH_I386)
+# if !defined(LZO_TARGET_FEATURE_SSE2)
+# if defined(__SSE2__)
+# define LZO_TARGET_FEATURE_SSE2 1
+# elif defined(_MSC_VER) && (defined(_M_IX86_FP) && ((_M_IX86_FP)+0 >= 2))
+# define LZO_TARGET_FEATURE_SSE2 1
+# elif (LZO_CC_INTELC_MSC || LZO_CC_MSC) && defined(_M_AMD64)
+# define LZO_TARGET_FEATURE_SSE2 1
+# endif
+# endif
+# if !defined(LZO_TARGET_FEATURE_SSSE3)
+# if (LZO_TARGET_FEATURE_SSE2)
+# if defined(__SSSE3__)
+# define LZO_TARGET_FEATURE_SSSE3 1
+# elif defined(_MSC_VER) && defined(__AVX__)
+# define LZO_TARGET_FEATURE_SSSE3 1
+# endif
+# endif
+# endif
+# if !defined(LZO_TARGET_FEATURE_SSE4_2)
+# if (LZO_TARGET_FEATURE_SSSE3)
+# if defined(__SSE4_2__)
+# define LZO_TARGET_FEATURE_SSE4_2 1
+# endif
+# endif
+# endif
+# if !defined(LZO_TARGET_FEATURE_AVX)
+# if (LZO_TARGET_FEATURE_SSSE3)
+# if defined(__AVX__)
+# define LZO_TARGET_FEATURE_AVX 1
+# endif
+# endif
+# endif
+# if !defined(LZO_TARGET_FEATURE_AVX2)
+# if (LZO_TARGET_FEATURE_AVX)
+# if defined(__AVX2__)
+# define LZO_TARGET_FEATURE_AVX2 1
+# endif
+# endif
+# endif
+#endif
+#if (LZO_TARGET_FEATURE_SSSE3 && !(LZO_TARGET_FEATURE_SSE2))
+# error "unexpected configuration - check your compiler defines"
+#endif
+#if (LZO_TARGET_FEATURE_SSE4_2 && !(LZO_TARGET_FEATURE_SSSE3))
+# error "unexpected configuration - check your compiler defines"
+#endif
+#if (LZO_TARGET_FEATURE_AVX && !(LZO_TARGET_FEATURE_SSSE3))
+# error "unexpected configuration - check your compiler defines"
+#endif
+#if (LZO_TARGET_FEATURE_AVX2 && !(LZO_TARGET_FEATURE_AVX))
+# error "unexpected configuration - check your compiler defines"
+#endif
+#if (LZO_ARCH_ARM)
+# if !defined(LZO_TARGET_FEATURE_NEON)
+# if defined(__ARM_NEON) && ((__ARM_NEON)+0)
+# define LZO_TARGET_FEATURE_NEON 1
+# elif 1 && defined(__ARM_NEON__) && ((__ARM_NEON__)+0)
+# define LZO_TARGET_FEATURE_NEON 1
+# elif 1 && defined(__TARGET_FEATURE_NEON) && ((__TARGET_FEATURE_NEON)+0)
+# define LZO_TARGET_FEATURE_NEON 1
+# endif
+# endif
+#elif (LZO_ARCH_ARM64)
+# if !defined(LZO_TARGET_FEATURE_NEON)
+# if 1
+# define LZO_TARGET_FEATURE_NEON 1
+# endif
+# endif
+#endif
+#if 0
+#elif !defined(__LZO_MM_OVERRIDE)
+#if (LZO_ARCH_I086)
+#if (UINT_MAX != LZO_0xffffL)
+# error "unexpected configuration - check your compiler defines"
+#endif
+#if defined(__TINY__) || defined(M_I86TM) || defined(_M_I86TM)
+# define LZO_MM_TINY 1
+#elif defined(__HUGE__) || defined(_HUGE_) || defined(M_I86HM) || defined(_M_I86HM)
+# define LZO_MM_HUGE 1
+#elif defined(__SMALL__) || defined(M_I86SM) || defined(_M_I86SM) || defined(SMALL_MODEL)
+# define LZO_MM_SMALL 1
+#elif defined(__MEDIUM__) || defined(M_I86MM) || defined(_M_I86MM)
+# define LZO_MM_MEDIUM 1
+#elif defined(__COMPACT__) || defined(M_I86CM) || defined(_M_I86CM)
+# define LZO_MM_COMPACT 1
+#elif defined(__LARGE__) || defined(M_I86LM) || defined(_M_I86LM) || defined(LARGE_MODEL)
+# define LZO_MM_LARGE 1
+#elif (LZO_CC_AZTECC)
+# if defined(_LARGE_CODE) && defined(_LARGE_DATA)
+# define LZO_MM_LARGE 1
+# elif defined(_LARGE_CODE)
+# define LZO_MM_MEDIUM 1
+# elif defined(_LARGE_DATA)
+# define LZO_MM_COMPACT 1
+# else
+# define LZO_MM_SMALL 1
+# endif
+#elif (LZO_CC_ZORTECHC && defined(__VCM__))
+# define LZO_MM_LARGE 1
+#else
+# error "unknown LZO_ARCH_I086 memory model"
+#endif
+#if (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16)
+#define LZO_HAVE_MM_HUGE_PTR 1
+#define LZO_HAVE_MM_HUGE_ARRAY 1
+#if (LZO_MM_TINY)
+# undef LZO_HAVE_MM_HUGE_ARRAY
+#endif
+#if (LZO_CC_AZTECC || LZO_CC_PACIFICC || LZO_CC_ZORTECHC)
+# undef LZO_HAVE_MM_HUGE_PTR
+# undef LZO_HAVE_MM_HUGE_ARRAY
+#elif (LZO_CC_DMC || LZO_CC_SYMANTECC)
+# undef LZO_HAVE_MM_HUGE_ARRAY
+#elif (LZO_CC_MSC && defined(_QC))
+# undef LZO_HAVE_MM_HUGE_ARRAY
+# if (_MSC_VER < 600)
+# undef LZO_HAVE_MM_HUGE_PTR
+# endif
+#elif (LZO_CC_TURBOC && (__TURBOC__ < 0x0295))
+# undef LZO_HAVE_MM_HUGE_ARRAY
+#endif
+#if (LZO_ARCH_I086PM) && !(LZO_HAVE_MM_HUGE_PTR)
+# if (LZO_OS_DOS16)
+# error "unexpected configuration - check your compiler defines"
+# elif (LZO_CC_ZORTECHC)
+# else
+# error "unexpected configuration - check your compiler defines"
+# endif
+#endif
+#if defined(__cplusplus)
+extern "C" {
+#endif
+#if (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0200))
+ extern void __near __cdecl _AHSHIFT(void);
+# define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT)
+#elif (LZO_CC_DMC || LZO_CC_SYMANTECC || LZO_CC_ZORTECHC)
+ extern void __near __cdecl _AHSHIFT(void);
+# define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT)
+#elif (LZO_CC_MSC || LZO_CC_TOPSPEEDC)
+ extern void __near __cdecl _AHSHIFT(void);
+# define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT)
+#elif (LZO_CC_TURBOC && (__TURBOC__ >= 0x0295))
+ extern void __near __cdecl _AHSHIFT(void);
+# define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT)
+#elif ((LZO_CC_AZTECC || LZO_CC_PACIFICC || LZO_CC_TURBOC) && LZO_OS_DOS16)
+# define LZO_MM_AHSHIFT 12
+#elif (LZO_CC_WATCOMC)
+ extern unsigned char _HShift;
+# define LZO_MM_AHSHIFT ((unsigned) _HShift)
+#else
+# error "FIXME - implement LZO_MM_AHSHIFT"
+#endif
+#if defined(__cplusplus)
+}
+#endif
+#endif
+#elif (LZO_ARCH_C166)
+#if !defined(__MODEL__)
+# error "FIXME - LZO_ARCH_C166 __MODEL__"
+#elif ((__MODEL__) == 0)
+# define LZO_MM_SMALL 1
+#elif ((__MODEL__) == 1)
+# define LZO_MM_SMALL 1
+#elif ((__MODEL__) == 2)
+# define LZO_MM_LARGE 1
+#elif ((__MODEL__) == 3)
+# define LZO_MM_TINY 1
+#elif ((__MODEL__) == 4)
+# define LZO_MM_XTINY 1
+#elif ((__MODEL__) == 5)
+# define LZO_MM_XSMALL 1
+#else
+# error "FIXME - LZO_ARCH_C166 __MODEL__"
+#endif
+#elif (LZO_ARCH_MCS251)
+#if !defined(__MODEL__)
+# error "FIXME - LZO_ARCH_MCS251 __MODEL__"
+#elif ((__MODEL__) == 0)
+# define LZO_MM_SMALL 1
+#elif ((__MODEL__) == 2)
+# define LZO_MM_LARGE 1
+#elif ((__MODEL__) == 3)
+# define LZO_MM_TINY 1
+#elif ((__MODEL__) == 4)
+# define LZO_MM_XTINY 1
+#elif ((__MODEL__) == 5)
+# define LZO_MM_XSMALL 1
+#else
+# error "FIXME - LZO_ARCH_MCS251 __MODEL__"
+#endif
+#elif (LZO_ARCH_MCS51)
+#if !defined(__MODEL__)
+# error "FIXME - LZO_ARCH_MCS51 __MODEL__"
+#elif ((__MODEL__) == 1)
+# define LZO_MM_SMALL 1
+#elif ((__MODEL__) == 2)
+# define LZO_MM_LARGE 1
+#elif ((__MODEL__) == 3)
+# define LZO_MM_TINY 1
+#elif ((__MODEL__) == 4)
+# define LZO_MM_XTINY 1
+#elif ((__MODEL__) == 5)
+# define LZO_MM_XSMALL 1
+#else
+# error "FIXME - LZO_ARCH_MCS51 __MODEL__"
+#endif
+#elif (LZO_ARCH_CRAY_PVP)
+# define LZO_MM_PVP 1
+#else
+# define LZO_MM_FLAT 1
+#endif
+#if (LZO_MM_COMPACT)
+# define LZO_INFO_MM "compact"
+#elif (LZO_MM_FLAT)
+# define LZO_INFO_MM "flat"
+#elif (LZO_MM_HUGE)
+# define LZO_INFO_MM "huge"
+#elif (LZO_MM_LARGE)
+# define LZO_INFO_MM "large"
+#elif (LZO_MM_MEDIUM)
+# define LZO_INFO_MM "medium"
+#elif (LZO_MM_PVP)
+# define LZO_INFO_MM "pvp"
+#elif (LZO_MM_SMALL)
+# define LZO_INFO_MM "small"
+#elif (LZO_MM_TINY)
+# define LZO_INFO_MM "tiny"
+#else
+# error "unknown memory model"
+#endif
+#endif
+#if !defined(__lzo_gnuc_extension__)
+#if (LZO_CC_GNUC >= 0x020800ul)
+# define __lzo_gnuc_extension__ __extension__
+#elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE)
+# define __lzo_gnuc_extension__ __extension__
+#elif (LZO_CC_IBMC >= 600)
+# define __lzo_gnuc_extension__ __extension__
+#endif
+#endif
+#if !defined(__lzo_gnuc_extension__)
+# define __lzo_gnuc_extension__ /*empty*/
+#endif
+#if !defined(lzo_has_builtin)
+#if (LZO_CC_CLANG) && defined(__has_builtin)
+# define lzo_has_builtin __has_builtin
+#endif
+#endif
+#if !defined(lzo_has_builtin)
+# define lzo_has_builtin(x) 0
+#endif
+#if !defined(lzo_has_attribute)
+#if (LZO_CC_CLANG) && defined(__has_attribute)
+# define lzo_has_attribute __has_attribute
+#endif
+#endif
+#if !defined(lzo_has_attribute)
+# define lzo_has_attribute(x) 0
+#endif
+#if !defined(lzo_has_declspec_attribute)
+#if (LZO_CC_CLANG) && defined(__has_declspec_attribute)
+# define lzo_has_declspec_attribute __has_declspec_attribute
+#endif
+#endif
+#if !defined(lzo_has_declspec_attribute)
+# define lzo_has_declspec_attribute(x) 0
+#endif
+#if !defined(lzo_has_feature)
+#if (LZO_CC_CLANG) && defined(__has_feature)
+# define lzo_has_feature __has_feature
+#endif
+#endif
+#if !defined(lzo_has_feature)
+# define lzo_has_feature(x) 0
+#endif
+#if !defined(lzo_has_extension)
+#if (LZO_CC_CLANG) && defined(__has_extension)
+# define lzo_has_extension __has_extension
+#elif (LZO_CC_CLANG) && defined(__has_feature)
+# define lzo_has_extension __has_feature
+#endif
+#endif
+#if !defined(lzo_has_extension)
+# define lzo_has_extension(x) 0
+#endif
+#if !defined(LZO_CFG_USE_NEW_STYLE_CASTS) && defined(__cplusplus) && 0
+# if (LZO_CC_GNUC && (LZO_CC_GNUC < 0x020800ul))
+# define LZO_CFG_USE_NEW_STYLE_CASTS 0
+# elif (LZO_CC_INTELC && (__INTEL_COMPILER < 1200))
+# define LZO_CFG_USE_NEW_STYLE_CASTS 0
+# else
+# define LZO_CFG_USE_NEW_STYLE_CASTS 1
+# endif
+#endif
+#if !defined(LZO_CFG_USE_NEW_STYLE_CASTS)
+# define LZO_CFG_USE_NEW_STYLE_CASTS 0
+#endif
+#if !defined(__cplusplus)
+# if defined(LZO_CFG_USE_NEW_STYLE_CASTS)
+# undef LZO_CFG_USE_NEW_STYLE_CASTS
+# endif
+# define LZO_CFG_USE_NEW_STYLE_CASTS 0
+#endif
+#if !defined(LZO_REINTERPRET_CAST)
+# if (LZO_CFG_USE_NEW_STYLE_CASTS)
+# define LZO_REINTERPRET_CAST(t,e) (reinterpret_cast<t> (e))
+# endif
+#endif
+#if !defined(LZO_REINTERPRET_CAST)
+# define LZO_REINTERPRET_CAST(t,e) ((t) (e))
+#endif
+#if !defined(LZO_STATIC_CAST)
+# if (LZO_CFG_USE_NEW_STYLE_CASTS)
+# define LZO_STATIC_CAST(t,e) (static_cast<t> (e))
+# endif
+#endif
+#if !defined(LZO_STATIC_CAST)
+# define LZO_STATIC_CAST(t,e) ((t) (e))
+#endif
+#if !defined(LZO_STATIC_CAST2)
+# define LZO_STATIC_CAST2(t1,t2,e) LZO_STATIC_CAST(t1, LZO_STATIC_CAST(t2, e))
+#endif
+#if !defined(LZO_UNCONST_CAST)
+# if (LZO_CFG_USE_NEW_STYLE_CASTS)
+# define LZO_UNCONST_CAST(t,e) (const_cast<t> (e))
+# elif (LZO_HAVE_MM_HUGE_PTR)
+# define LZO_UNCONST_CAST(t,e) ((t) (e))
+# elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE)
+# define LZO_UNCONST_CAST(t,e) ((t) ((void *) ((lzo_uintptr_t) ((const void *) (e)))))
+# endif
+#endif
+#if !defined(LZO_UNCONST_CAST)
+# define LZO_UNCONST_CAST(t,e) ((t) ((void *) ((const void *) (e))))
+#endif
+#if !defined(LZO_UNCONST_VOLATILE_CAST)
+# if (LZO_CFG_USE_NEW_STYLE_CASTS)
+# define LZO_UNCONST_VOLATILE_CAST(t,e) (const_cast<t> (e))
+# elif (LZO_HAVE_MM_HUGE_PTR)
+# define LZO_UNCONST_VOLATILE_CAST(t,e) ((t) (e))
+# elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE)
+# define LZO_UNCONST_VOLATILE_CAST(t,e) ((t) ((volatile void *) ((lzo_uintptr_t) ((volatile const void *) (e)))))
+# endif
+#endif
+#if !defined(LZO_UNCONST_VOLATILE_CAST)
+# define LZO_UNCONST_VOLATILE_CAST(t,e) ((t) ((volatile void *) ((volatile const void *) (e))))
+#endif
+#if !defined(LZO_UNVOLATILE_CAST)
+# if (LZO_CFG_USE_NEW_STYLE_CASTS)
+# define LZO_UNVOLATILE_CAST(t,e) (const_cast<t> (e))
+# elif (LZO_HAVE_MM_HUGE_PTR)
+# define LZO_UNVOLATILE_CAST(t,e) ((t) (e))
+# elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE)
+# define LZO_UNVOLATILE_CAST(t,e) ((t) ((void *) ((lzo_uintptr_t) ((volatile void *) (e)))))
+# endif
+#endif
+#if !defined(LZO_UNVOLATILE_CAST)
+# define LZO_UNVOLATILE_CAST(t,e) ((t) ((void *) ((volatile void *) (e))))
+#endif
+#if !defined(LZO_UNVOLATILE_CONST_CAST)
+# if (LZO_CFG_USE_NEW_STYLE_CASTS)
+# define LZO_UNVOLATILE_CONST_CAST(t,e) (const_cast<t> (e))
+# elif (LZO_HAVE_MM_HUGE_PTR)
+# define LZO_UNVOLATILE_CONST_CAST(t,e) ((t) (e))
+# elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE)
+# define LZO_UNVOLATILE_CONST_CAST(t,e) ((t) ((const void *) ((lzo_uintptr_t) ((volatile const void *) (e)))))
+# endif
+#endif
+#if !defined(LZO_UNVOLATILE_CONST_CAST)
+# define LZO_UNVOLATILE_CONST_CAST(t,e) ((t) ((const void *) ((volatile const void *) (e))))
+#endif
+#if !defined(LZO_PCAST)
+# if (LZO_HAVE_MM_HUGE_PTR)
+# define LZO_PCAST(t,e) ((t) (e))
+# endif
+#endif
+#if !defined(LZO_PCAST)
+# define LZO_PCAST(t,e) LZO_STATIC_CAST(t, LZO_STATIC_CAST(void *, e))
+#endif
+#if !defined(LZO_CCAST)
+# if (LZO_HAVE_MM_HUGE_PTR)
+# define LZO_CCAST(t,e) ((t) (e))
+# endif
+#endif
+#if !defined(LZO_CCAST)
+# define LZO_CCAST(t,e) LZO_STATIC_CAST(t, LZO_STATIC_CAST(const void *, e))
+#endif
+#if !defined(LZO_ICONV)
+# define LZO_ICONV(t,e) LZO_STATIC_CAST(t, e)
+#endif
+#if !defined(LZO_ICAST)
+# define LZO_ICAST(t,e) LZO_STATIC_CAST(t, e)
+#endif
+#if !defined(LZO_ITRUNC)
+# define LZO_ITRUNC(t,e) LZO_STATIC_CAST(t, e)
+#endif
+#if !defined(__lzo_cte)
+# if (LZO_CC_MSC || LZO_CC_WATCOMC)
+# define __lzo_cte(e) ((void)0,(e))
+# elif 1
+# define __lzo_cte(e) ((void)0,(e))
+# endif
+#endif
+#if !defined(__lzo_cte)
+# define __lzo_cte(e) (e)
+#endif
+#if !defined(LZO_BLOCK_BEGIN)
+# define LZO_BLOCK_BEGIN do {
+# define LZO_BLOCK_END } while __lzo_cte(0)
+#endif
+#if !defined(LZO_UNUSED)
+# if (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0600))
+# define LZO_UNUSED(var) ((void) &var)
+# elif (LZO_CC_BORLANDC || LZO_CC_HIGHC || LZO_CC_NDPC || LZO_CC_PELLESC || LZO_CC_TURBOC)
+# define LZO_UNUSED(var) if (&var) ; else
+# elif (LZO_CC_CLANG && (LZO_CC_CLANG >= 0x030200ul))
+# define LZO_UNUSED(var) ((void) &var)
+# elif (LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE)
+# define LZO_UNUSED(var) ((void) var)
+# elif (LZO_CC_MSC && (_MSC_VER < 900))
+# define LZO_UNUSED(var) if (&var) ; else
+# elif (LZO_CC_KEILC)
+# define LZO_UNUSED(var) {extern int lzo_unused__[1-2*!(sizeof(var)>0)]; (void)lzo_unused__;}
+# elif (LZO_CC_PACIFICC)
+# define LZO_UNUSED(var) ((void) sizeof(var))
+# elif (LZO_CC_WATCOMC) && defined(__cplusplus)
+# define LZO_UNUSED(var) ((void) var)
+# else
+# define LZO_UNUSED(var) ((void) &var)
+# endif
+#endif
+#if !defined(LZO_UNUSED_RESULT)
+# define LZO_UNUSED_RESULT(var) LZO_UNUSED(var)
+#endif
+#if !defined(LZO_UNUSED_FUNC)
+# if (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0600))
+# define LZO_UNUSED_FUNC(func) ((void) func)
+# elif (LZO_CC_BORLANDC || LZO_CC_NDPC || LZO_CC_TURBOC)
+# define LZO_UNUSED_FUNC(func) if (func) ; else
+# elif (LZO_CC_CLANG || LZO_CC_LLVM)
+# define LZO_UNUSED_FUNC(func) ((void) &func)
+# elif (LZO_CC_MSC && (_MSC_VER < 900))
+# define LZO_UNUSED_FUNC(func) if (func) ; else
+# elif (LZO_CC_MSC)
+# define LZO_UNUSED_FUNC(func) ((void) &func)
+# elif (LZO_CC_KEILC || LZO_CC_PELLESC)
+# define LZO_UNUSED_FUNC(func) {extern int lzo_unused__[1-2*!(sizeof((int)func)>0)]; (void)lzo_unused__;}
+# else
+# define LZO_UNUSED_FUNC(func) ((void) func)
+# endif
+#endif
+#if !defined(LZO_UNUSED_LABEL)
+# if (LZO_CC_CLANG >= 0x020800ul)
+# define LZO_UNUSED_LABEL(l) (__lzo_gnuc_extension__ ((void) ((const void *) &&l)))
+# elif (LZO_CC_ARMCC || LZO_CC_CLANG || LZO_CC_INTELC || LZO_CC_WATCOMC)
+# define LZO_UNUSED_LABEL(l) if __lzo_cte(0) goto l
+# else
+# define LZO_UNUSED_LABEL(l) switch (0) case 1:goto l
+# endif
+#endif
+#if !defined(LZO_DEFINE_UNINITIALIZED_VAR)
+# if 0
+# define LZO_DEFINE_UNINITIALIZED_VAR(type,var,init) type var
+# elif 0 && (LZO_CC_GNUC)
+# define LZO_DEFINE_UNINITIALIZED_VAR(type,var,init) type var = var
+# else
+# define LZO_DEFINE_UNINITIALIZED_VAR(type,var,init) type var = init
+# endif
+#endif
+#if !defined(__lzo_inline)
+#if (LZO_CC_TURBOC && (__TURBOC__ <= 0x0295))
+#elif defined(__cplusplus)
+# define __lzo_inline inline
+#elif defined(__STDC_VERSION__) && (__STDC_VERSION__-0 >= 199901L)
+# define __lzo_inline inline
+#elif (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0550))
+# define __lzo_inline __inline
+#elif (LZO_CC_ARMCC_GNUC || LZO_CC_CILLY || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE || LZO_CC_PGI)
+# define __lzo_inline __inline__
+#elif (LZO_CC_DMC)
+# define __lzo_inline __inline
+#elif (LZO_CC_GHS)
+# define __lzo_inline __inline__
+#elif (LZO_CC_IBMC >= 600)
+# define __lzo_inline __inline__
+#elif (LZO_CC_INTELC)
+# define __lzo_inline __inline
+#elif (LZO_CC_MWERKS && (__MWERKS__ >= 0x2405))
+# define __lzo_inline __inline
+#elif (LZO_CC_MSC && (_MSC_VER >= 900))
+# define __lzo_inline __inline
+#elif (LZO_CC_SUNPROC >= 0x5100)
+# define __lzo_inline __inline__
+#endif
+#endif
+#if defined(__lzo_inline)
+# ifndef __lzo_HAVE_inline
+# define __lzo_HAVE_inline 1
+# endif
+#else
+# define __lzo_inline /*empty*/
+#endif
+#if !defined(__lzo_forceinline)
+#if (LZO_CC_GNUC >= 0x030200ul)
+# define __lzo_forceinline __inline__ __attribute__((__always_inline__))
+#elif (LZO_CC_IBMC >= 700)
+# define __lzo_forceinline __inline__ __attribute__((__always_inline__))
+#elif (LZO_CC_INTELC_MSC && (__INTEL_COMPILER >= 450))
+# define __lzo_forceinline __forceinline
+#elif (LZO_CC_INTELC_GNUC && (__INTEL_COMPILER >= 800))
+# define __lzo_forceinline __inline__ __attribute__((__always_inline__))
+#elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE)
+# define __lzo_forceinline __inline__ __attribute__((__always_inline__))
+#elif (LZO_CC_MSC && (_MSC_VER >= 1200))
+# define __lzo_forceinline __forceinline
+#elif (LZO_CC_PGI >= 0x0d0a00ul)
+# define __lzo_forceinline __inline__ __attribute__((__always_inline__))
+#elif (LZO_CC_SUNPROC >= 0x5100)
+# define __lzo_forceinline __inline__ __attribute__((__always_inline__))
+#endif
+#endif
+#if defined(__lzo_forceinline)
+# ifndef __lzo_HAVE_forceinline
+# define __lzo_HAVE_forceinline 1
+# endif
+#else
+# define __lzo_forceinline __lzo_inline
+#endif
+#if !defined(__lzo_noinline)
+#if 1 && (LZO_ARCH_I386) && (LZO_CC_GNUC >= 0x040000ul) && (LZO_CC_GNUC < 0x040003ul)
+# define __lzo_noinline __attribute__((__noinline__,__used__))
+#elif (LZO_CC_GNUC >= 0x030200ul)
+# define __lzo_noinline __attribute__((__noinline__))
+#elif (LZO_CC_IBMC >= 700)
+# define __lzo_noinline __attribute__((__noinline__))
+#elif (LZO_CC_INTELC_MSC && (__INTEL_COMPILER >= 600))
+# define __lzo_noinline __declspec(noinline)
+#elif (LZO_CC_INTELC_GNUC && (__INTEL_COMPILER >= 800))
+# define __lzo_noinline __attribute__((__noinline__))
+#elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE)
+# define __lzo_noinline __attribute__((__noinline__))
+#elif (LZO_CC_MSC && (_MSC_VER >= 1300))
+# define __lzo_noinline __declspec(noinline)
+#elif (LZO_CC_MWERKS && (__MWERKS__ >= 0x3200) && (LZO_OS_WIN32 || LZO_OS_WIN64))
+# if defined(__cplusplus)
+# else
+# define __lzo_noinline __declspec(noinline)
+# endif
+#elif (LZO_CC_PGI >= 0x0d0a00ul)
+# define __lzo_noinline __attribute__((__noinline__))
+#elif (LZO_CC_SUNPROC >= 0x5100)
+# define __lzo_noinline __attribute__((__noinline__))
+#endif
+#endif
+#if defined(__lzo_noinline)
+# ifndef __lzo_HAVE_noinline
+# define __lzo_HAVE_noinline 1
+# endif
+#else
+# define __lzo_noinline /*empty*/
+#endif
+#if (__lzo_HAVE_forceinline || __lzo_HAVE_noinline) && !(__lzo_HAVE_inline)
+# error "unexpected configuration - check your compiler defines"
+#endif
+#if !defined(__lzo_static_inline)
+#if (LZO_CC_IBMC)
+# define __lzo_static_inline __lzo_gnuc_extension__ static __lzo_inline
+#endif
+#endif
+#if !defined(__lzo_static_inline)
+# define __lzo_static_inline static __lzo_inline
+#endif
+#if !defined(__lzo_static_forceinline)
+#if (LZO_CC_IBMC)
+# define __lzo_static_forceinline __lzo_gnuc_extension__ static __lzo_forceinline
+#endif
+#endif
+#if !defined(__lzo_static_forceinline)
+# define __lzo_static_forceinline static __lzo_forceinline
+#endif
+#if !defined(__lzo_static_noinline)
+#if (LZO_CC_IBMC)
+# define __lzo_static_noinline __lzo_gnuc_extension__ static __lzo_noinline
+#endif
+#endif
+#if !defined(__lzo_static_noinline)
+# define __lzo_static_noinline static __lzo_noinline
+#endif
+#if !defined(__lzo_c99_extern_inline)
+#if defined(__GNUC_GNU_INLINE__)
+# define __lzo_c99_extern_inline __lzo_inline
+#elif defined(__GNUC_STDC_INLINE__)
+# define __lzo_c99_extern_inline extern __lzo_inline
+#elif defined(__STDC_VERSION__) && (__STDC_VERSION__-0 >= 199901L)
+# define __lzo_c99_extern_inline extern __lzo_inline
+#endif
+#if !defined(__lzo_c99_extern_inline) && (__lzo_HAVE_inline)
+# define __lzo_c99_extern_inline __lzo_inline
+#endif
+#endif
+#if defined(__lzo_c99_extern_inline)
+# ifndef __lzo_HAVE_c99_extern_inline
+# define __lzo_HAVE_c99_extern_inline 1
+# endif
+#else
+# define __lzo_c99_extern_inline /*empty*/
+#endif
+#if !defined(__lzo_may_alias)
+#if (LZO_CC_GNUC >= 0x030400ul)
+# define __lzo_may_alias __attribute__((__may_alias__))
+#elif (LZO_CC_CLANG >= 0x020900ul)
+# define __lzo_may_alias __attribute__((__may_alias__))
+#elif (LZO_CC_INTELC_GNUC && (__INTEL_COMPILER >= 1210)) && 0
+# define __lzo_may_alias __attribute__((__may_alias__))
+#elif (LZO_CC_PGI >= 0x0d0a00ul) && 0
+# define __lzo_may_alias __attribute__((__may_alias__))
+#endif
+#endif
+#if defined(__lzo_may_alias)
+# ifndef __lzo_HAVE_may_alias
+# define __lzo_HAVE_may_alias 1
+# endif
+#else
+# define __lzo_may_alias /*empty*/
+#endif
+#if !defined(__lzo_noreturn)
+#if (LZO_CC_GNUC >= 0x020700ul)
+# define __lzo_noreturn __attribute__((__noreturn__))
+#elif (LZO_CC_IBMC >= 700)
+# define __lzo_noreturn __attribute__((__noreturn__))
+#elif (LZO_CC_INTELC_MSC && (__INTEL_COMPILER >= 450))
+# define __lzo_noreturn __declspec(noreturn)
+#elif (LZO_CC_INTELC_GNUC && (__INTEL_COMPILER >= 600))
+# define __lzo_noreturn __attribute__((__noreturn__))
+#elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE)
+# define __lzo_noreturn __attribute__((__noreturn__))
+#elif (LZO_CC_MSC && (_MSC_VER >= 1200))
+# define __lzo_noreturn __declspec(noreturn)
+#elif (LZO_CC_PGI >= 0x0d0a00ul)
+# define __lzo_noreturn __attribute__((__noreturn__))
+#endif
+#endif
+#if defined(__lzo_noreturn)
+# ifndef __lzo_HAVE_noreturn
+# define __lzo_HAVE_noreturn 1
+# endif
+#else
+# define __lzo_noreturn /*empty*/
+#endif
+#if !defined(__lzo_nothrow)
+#if (LZO_CC_GNUC >= 0x030300ul)
+# define __lzo_nothrow __attribute__((__nothrow__))
+#elif (LZO_CC_INTELC_MSC && (__INTEL_COMPILER >= 450)) && defined(__cplusplus)
+# define __lzo_nothrow __declspec(nothrow)
+#elif (LZO_CC_INTELC_GNUC && (__INTEL_COMPILER >= 900))
+# define __lzo_nothrow __attribute__((__nothrow__))
+#elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE)
+# define __lzo_nothrow __attribute__((__nothrow__))
+#elif (LZO_CC_MSC && (_MSC_VER >= 1200)) && defined(__cplusplus)
+# define __lzo_nothrow __declspec(nothrow)
+#endif
+#endif
+#if defined(__lzo_nothrow)
+# ifndef __lzo_HAVE_nothrow
+# define __lzo_HAVE_nothrow 1
+# endif
+#else
+# define __lzo_nothrow /*empty*/
+#endif
+#if !defined(__lzo_restrict)
+#if (LZO_CC_GNUC >= 0x030400ul)
+# define __lzo_restrict __restrict__
+#elif (LZO_CC_IBMC >= 800) && !defined(__cplusplus)
+# define __lzo_restrict __restrict__
+#elif (LZO_CC_IBMC >= 1210)
+# define __lzo_restrict __restrict__
+#elif (LZO_CC_INTELC_MSC && (__INTEL_COMPILER >= 600))
+#elif (LZO_CC_INTELC_GNUC && (__INTEL_COMPILER >= 600))
+# define __lzo_restrict __restrict__
+#elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_LLVM)
+# define __lzo_restrict __restrict__
+#elif (LZO_CC_MSC && (_MSC_VER >= 1400))
+# define __lzo_restrict __restrict
+#elif (LZO_CC_PGI >= 0x0d0a00ul)
+# define __lzo_restrict __restrict__
+#endif
+#endif
+#if defined(__lzo_restrict)
+# ifndef __lzo_HAVE_restrict
+# define __lzo_HAVE_restrict 1
+# endif
+#else
+# define __lzo_restrict /*empty*/
+#endif
+#if !defined(__lzo_alignof)
+#if (LZO_CC_ARMCC || LZO_CC_CILLY || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE || LZO_CC_PGI)
+# define __lzo_alignof(e) __alignof__(e)
+#elif (LZO_CC_GHS) && !defined(__cplusplus)
+# define __lzo_alignof(e) __alignof__(e)
+#elif (LZO_CC_IBMC >= 600)
+# define __lzo_alignof(e) (__lzo_gnuc_extension__ __alignof__(e))
+#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 700))
+# define __lzo_alignof(e) __alignof__(e)
+#elif (LZO_CC_MSC && (_MSC_VER >= 1300))
+# define __lzo_alignof(e) __alignof(e)
+#elif (LZO_CC_SUNPROC >= 0x5100)
+# define __lzo_alignof(e) __alignof__(e)
+#endif
+#endif
+#if defined(__lzo_alignof)
+# ifndef __lzo_HAVE_alignof
+# define __lzo_HAVE_alignof 1
+# endif
+#endif
+#if !defined(__lzo_struct_packed)
+#if (LZO_CC_CLANG && (LZO_CC_CLANG < 0x020800ul)) && defined(__cplusplus)
+#elif (LZO_CC_GNUC && (LZO_CC_GNUC < 0x020700ul))
+#elif (LZO_CC_GNUC && (LZO_CC_GNUC < 0x020800ul)) && defined(__cplusplus)
+#elif (LZO_CC_PCC && (LZO_CC_PCC < 0x010100ul))
+#elif (LZO_CC_SUNPROC && (LZO_CC_SUNPROC < 0x5110)) && !defined(__cplusplus)
+#elif (LZO_CC_GNUC >= 0x030400ul) && !(LZO_CC_PCC_GNUC) && (LZO_ARCH_AMD64 || LZO_ARCH_I386)
+# define __lzo_struct_packed(s) struct s {
+# define __lzo_struct_packed_end() } __attribute__((__gcc_struct__,__packed__));
+# define __lzo_struct_packed_ma_end() } __lzo_may_alias __attribute__((__gcc_struct__,__packed__));
+#elif (LZO_CC_ARMCC || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_INTELC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE || (LZO_CC_PGI >= 0x0d0a00ul) || (LZO_CC_SUNPROC >= 0x5100))
+# define __lzo_struct_packed(s) struct s {
+# define __lzo_struct_packed_end() } __attribute__((__packed__));
+# define __lzo_struct_packed_ma_end() } __lzo_may_alias __attribute__((__packed__));
+#elif (LZO_CC_IBMC >= 700)
+# define __lzo_struct_packed(s) __lzo_gnuc_extension__ struct s {
+# define __lzo_struct_packed_end() } __attribute__((__packed__));
+# define __lzo_struct_packed_ma_end() } __lzo_may_alias __attribute__((__packed__));
+#elif (LZO_CC_INTELC_MSC) || (LZO_CC_MSC && (_MSC_VER >= 1300))
+# define __lzo_struct_packed(s) __pragma(pack(push,1)) struct s {
+# define __lzo_struct_packed_end() } __pragma(pack(pop));
+#elif (LZO_CC_WATCOMC && (__WATCOMC__ >= 900))
+# define __lzo_struct_packed(s) _Packed struct s {
+# define __lzo_struct_packed_end() };
+#endif
+#endif
+#if defined(__lzo_struct_packed) && !defined(__lzo_struct_packed_ma)
+# define __lzo_struct_packed_ma(s) __lzo_struct_packed(s)
+#endif
+#if defined(__lzo_struct_packed_end) && !defined(__lzo_struct_packed_ma_end)
+# define __lzo_struct_packed_ma_end() __lzo_struct_packed_end()
+#endif
+#if !defined(__lzo_byte_struct)
+#if defined(__lzo_struct_packed)
+# define __lzo_byte_struct(s,n) __lzo_struct_packed(s) unsigned char a[n]; __lzo_struct_packed_end()
+# define __lzo_byte_struct_ma(s,n) __lzo_struct_packed_ma(s) unsigned char a[n]; __lzo_struct_packed_ma_end()
+#elif (LZO_CC_CILLY || LZO_CC_CLANG || LZO_CC_PGI || (LZO_CC_SUNPROC >= 0x5100))
+# define __lzo_byte_struct(s,n) struct s { unsigned char a[n]; } __attribute__((__packed__));
+# define __lzo_byte_struct_ma(s,n) struct s { unsigned char a[n]; } __lzo_may_alias __attribute__((__packed__));
+#endif
+#endif
+#if defined(__lzo_byte_struct) && !defined(__lzo_byte_struct_ma)
+# define __lzo_byte_struct_ma(s,n) __lzo_byte_struct(s,n)
+#endif
+#if !defined(__lzo_struct_align16) && (__lzo_HAVE_alignof)
+#if (LZO_CC_GNUC && (LZO_CC_GNUC < 0x030000ul))
+#elif (LZO_CC_CLANG && (LZO_CC_CLANG < 0x020800ul)) && defined(__cplusplus)
+#elif (LZO_CC_CILLY || LZO_CC_PCC)
+#elif (LZO_CC_INTELC_MSC) || (LZO_CC_MSC && (_MSC_VER >= 1300))
+# define __lzo_struct_align16(s) struct __declspec(align(16)) s {
+# define __lzo_struct_align16_end() };
+# define __lzo_struct_align32(s) struct __declspec(align(32)) s {
+# define __lzo_struct_align32_end() };
+# define __lzo_struct_align64(s) struct __declspec(align(64)) s {
+# define __lzo_struct_align64_end() };
+#elif (LZO_CC_ARMCC || LZO_CC_CLANG || LZO_CC_GNUC || (LZO_CC_IBMC >= 700) || LZO_CC_INTELC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE)
+# define __lzo_struct_align16(s) struct s {
+# define __lzo_struct_align16_end() } __attribute__((__aligned__(16)));
+# define __lzo_struct_align32(s) struct s {
+# define __lzo_struct_align32_end() } __attribute__((__aligned__(32)));
+# define __lzo_struct_align64(s) struct s {
+# define __lzo_struct_align64_end() } __attribute__((__aligned__(64)));
+#endif
+#endif
+#if !defined(__lzo_union_um)
+#if (LZO_CC_CLANG && (LZO_CC_CLANG < 0x020800ul)) && defined(__cplusplus)
+#elif (LZO_CC_GNUC && (LZO_CC_GNUC < 0x020700ul))
+#elif (LZO_CC_GNUC && (LZO_CC_GNUC < 0x020800ul)) && defined(__cplusplus)
+#elif (LZO_CC_INTELC_GNUC && (__INTEL_COMPILER < 810))
+#elif (LZO_CC_PCC && (LZO_CC_PCC < 0x010100ul))
+#elif (LZO_CC_SUNPROC && (LZO_CC_SUNPROC < 0x5110)) && !defined(__cplusplus)
+#elif (LZO_CC_ARMCC || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_INTELC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE || (LZO_CC_PGI >= 0x0d0a00ul) || (LZO_CC_SUNPROC >= 0x5100))
+# define __lzo_union_am(s) union s {
+# define __lzo_union_am_end() } __lzo_may_alias;
+# define __lzo_union_um(s) union s {
+# define __lzo_union_um_end() } __lzo_may_alias __attribute__((__packed__));
+#elif (LZO_CC_IBMC >= 700)
+# define __lzo_union_am(s) __lzo_gnuc_extension__ union s {
+# define __lzo_union_am_end() } __lzo_may_alias;
+# define __lzo_union_um(s) __lzo_gnuc_extension__ union s {
+# define __lzo_union_um_end() } __lzo_may_alias __attribute__((__packed__));
+#elif (LZO_CC_INTELC_MSC) || (LZO_CC_MSC && (_MSC_VER >= 1300))
+# define __lzo_union_um(s) __pragma(pack(push,1)) union s {
+# define __lzo_union_um_end() } __pragma(pack(pop));
+#elif (LZO_CC_WATCOMC && (__WATCOMC__ >= 900))
+# define __lzo_union_um(s) _Packed union s {
+# define __lzo_union_um_end() };
+#endif
+#endif
+#if !defined(__lzo_union_am)
+# define __lzo_union_am(s) union s {
+# define __lzo_union_am_end() };
+#endif
+#if !defined(__lzo_constructor)
+#if (LZO_CC_GNUC >= 0x030400ul)
+# define __lzo_constructor __attribute__((__constructor__,__used__))
+#elif (LZO_CC_GNUC >= 0x020700ul)
+# define __lzo_constructor __attribute__((__constructor__))
+#elif (LZO_CC_INTELC_GNUC && (__INTEL_COMPILER >= 800))
+# define __lzo_constructor __attribute__((__constructor__,__used__))
+#elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE)
+# define __lzo_constructor __attribute__((__constructor__))
+#endif
+#endif
+#if defined(__lzo_constructor)
+# ifndef __lzo_HAVE_constructor
+# define __lzo_HAVE_constructor 1
+# endif
+#endif
+#if !defined(__lzo_destructor)
+#if (LZO_CC_GNUC >= 0x030400ul)
+# define __lzo_destructor __attribute__((__destructor__,__used__))
+#elif (LZO_CC_GNUC >= 0x020700ul)
+# define __lzo_destructor __attribute__((__destructor__))
+#elif (LZO_CC_INTELC_GNUC && (__INTEL_COMPILER >= 800))
+# define __lzo_destructor __attribute__((__destructor__,__used__))
+#elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE)
+# define __lzo_destructor __attribute__((__destructor__))
+#endif
+#endif
+#if defined(__lzo_destructor)
+# ifndef __lzo_HAVE_destructor
+# define __lzo_HAVE_destructor 1
+# endif
+#endif
+#if (__lzo_HAVE_destructor) && !(__lzo_HAVE_constructor)
+# error "unexpected configuration - check your compiler defines"
+#endif
+#if !defined(__lzo_likely) && !defined(__lzo_unlikely)
+#if (LZO_CC_GNUC >= 0x030200ul)
+# define __lzo_likely(e) (__builtin_expect(!!(e),1))
+# define __lzo_unlikely(e) (__builtin_expect(!!(e),0))
+#elif (LZO_CC_IBMC >= 1010)
+# define __lzo_likely(e) (__builtin_expect(!!(e),1))
+# define __lzo_unlikely(e) (__builtin_expect(!!(e),0))
+#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 800))
+# define __lzo_likely(e) (__builtin_expect(!!(e),1))
+# define __lzo_unlikely(e) (__builtin_expect(!!(e),0))
+#elif (LZO_CC_CLANG && LZO_CC_CLANG_C2)
+#elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE)
+# define __lzo_likely(e) (__builtin_expect(!!(e),1))
+# define __lzo_unlikely(e) (__builtin_expect(!!(e),0))
+#endif
+#endif
+#if defined(__lzo_likely)
+# ifndef __lzo_HAVE_likely
+# define __lzo_HAVE_likely 1
+# endif
+#else
+# define __lzo_likely(e) (e)
+#endif
+#if defined(__lzo_very_likely)
+# ifndef __lzo_HAVE_very_likely
+# define __lzo_HAVE_very_likely 1
+# endif
+#else
+# define __lzo_very_likely(e) __lzo_likely(e)
+#endif
+#if defined(__lzo_unlikely)
+# ifndef __lzo_HAVE_unlikely
+# define __lzo_HAVE_unlikely 1
+# endif
+#else
+# define __lzo_unlikely(e) (e)
+#endif
+#if defined(__lzo_very_unlikely)
+# ifndef __lzo_HAVE_very_unlikely
+# define __lzo_HAVE_very_unlikely 1
+# endif
+#else
+# define __lzo_very_unlikely(e) __lzo_unlikely(e)
+#endif
+#if !defined(__lzo_loop_forever)
+# if (LZO_CC_IBMC)
+# define __lzo_loop_forever() LZO_BLOCK_BEGIN for (;;) { ; } LZO_BLOCK_END
+# else
+# define __lzo_loop_forever() do { ; } while __lzo_cte(1)
+# endif
+#endif
+#if !defined(__lzo_unreachable)
+#if (LZO_CC_CLANG && (LZO_CC_CLANG >= 0x020800ul)) && lzo_has_builtin(__builtin_unreachable)
+# define __lzo_unreachable() __builtin_unreachable();
+#elif (LZO_CC_GNUC >= 0x040500ul)
+# define __lzo_unreachable() __builtin_unreachable();
+#elif (LZO_CC_INTELC_GNUC && (__INTEL_COMPILER >= 1300)) && 1
+# define __lzo_unreachable() __builtin_unreachable();
+#endif
+#endif
+#if defined(__lzo_unreachable)
+# ifndef __lzo_HAVE_unreachable
+# define __lzo_HAVE_unreachable 1
+# endif
+#else
+# if 0
+# define __lzo_unreachable() ((void)0);
+# else
+# define __lzo_unreachable() __lzo_loop_forever();
+# endif
+#endif
+#if !defined(lzo_unused_funcs_impl)
+# if 1 && (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || (LZO_CC_GNUC >= 0x020700ul) || LZO_CC_INTELC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE || LZO_CC_PGI)
+# define lzo_unused_funcs_impl(r,f) static r __attribute__((__unused__)) f
+# elif 1 && (LZO_CC_BORLANDC || LZO_CC_GNUC)
+# define lzo_unused_funcs_impl(r,f) static r f
+# else
+# define lzo_unused_funcs_impl(r,f) __lzo_static_forceinline r f
+# endif
+#endif
+#ifndef __LZO_CTA_NAME
+#if (LZO_CFG_USE_COUNTER)
+# define __LZO_CTA_NAME(a) LZO_PP_ECONCAT2(a,__COUNTER__)
+#else
+# define __LZO_CTA_NAME(a) LZO_PP_ECONCAT2(a,__LINE__)
+#endif
+#endif
+#if !defined(LZO_COMPILE_TIME_ASSERT_HEADER)
+# if (LZO_CC_AZTECC || LZO_CC_ZORTECHC)
+# define LZO_COMPILE_TIME_ASSERT_HEADER(e) LZO_EXTERN_C_BEGIN extern int __LZO_CTA_NAME(lzo_cta__)[1-!(e)]; LZO_EXTERN_C_END
+# elif (LZO_CC_DMC || LZO_CC_SYMANTECC)
+# define LZO_COMPILE_TIME_ASSERT_HEADER(e) LZO_EXTERN_C_BEGIN extern int __LZO_CTA_NAME(lzo_cta__)[1u-2*!(e)]; LZO_EXTERN_C_END
+# elif (LZO_CC_TURBOC && (__TURBOC__ == 0x0295))
+# define LZO_COMPILE_TIME_ASSERT_HEADER(e) LZO_EXTERN_C_BEGIN extern int __LZO_CTA_NAME(lzo_cta__)[1-!(e)]; LZO_EXTERN_C_END
+# elif (LZO_CC_CLANG && (LZO_CC_CLANG < 0x020900ul)) && defined(__cplusplus)
+# define LZO_COMPILE_TIME_ASSERT_HEADER(e) LZO_EXTERN_C_BEGIN int __LZO_CTA_NAME(lzo_cta_f__)(int [1-2*!(e)]); LZO_EXTERN_C_END
+# elif (LZO_CC_GNUC) && defined(__CHECKER__) && defined(__SPARSE_CHECKER__)
+# define LZO_COMPILE_TIME_ASSERT_HEADER(e) LZO_EXTERN_C_BEGIN enum {__LZO_CTA_NAME(lzo_cta_e__)=1/!!(e)} __attribute__((__unused__)); LZO_EXTERN_C_END
+# else
+# define LZO_COMPILE_TIME_ASSERT_HEADER(e) LZO_EXTERN_C_BEGIN extern int __LZO_CTA_NAME(lzo_cta__)[1-2*!(e)]; LZO_EXTERN_C_END
+# endif
+#endif
+#if !defined(LZO_COMPILE_TIME_ASSERT)
+# if (LZO_CC_AZTECC)
+# define LZO_COMPILE_TIME_ASSERT(e) {typedef int __LZO_CTA_NAME(lzo_cta_t__)[1-!(e)];}
+# elif (LZO_CC_CLANG && (LZO_CC_CLANG >= 0x030000ul))
+# define LZO_COMPILE_TIME_ASSERT(e) {typedef int __LZO_CTA_NAME(lzo_cta_t__)[1-2*!(e)] __attribute__((__unused__));}
+# elif (LZO_CC_DMC || LZO_CC_PACIFICC || LZO_CC_SYMANTECC || LZO_CC_ZORTECHC)
+# define LZO_COMPILE_TIME_ASSERT(e) switch(0) case 1:case !(e):break;
+# elif (LZO_CC_GNUC) && defined(__CHECKER__) && defined(__SPARSE_CHECKER__)
+# define LZO_COMPILE_TIME_ASSERT(e) {(void) (0/!!(e));}
+# elif (LZO_CC_GNUC >= 0x040700ul) && (LZO_CFG_USE_COUNTER) && defined(__cplusplus)
+# define LZO_COMPILE_TIME_ASSERT(e) {enum {__LZO_CTA_NAME(lzo_cta_e__)=1/!!(e)} __attribute__((__unused__));}
+# elif (LZO_CC_GNUC >= 0x040700ul)
+# define LZO_COMPILE_TIME_ASSERT(e) {typedef int __LZO_CTA_NAME(lzo_cta_t__)[1-2*!(e)] __attribute__((__unused__));}
+# elif (LZO_CC_MSC && (_MSC_VER < 900))
+# define LZO_COMPILE_TIME_ASSERT(e) switch(0) case 1:case !(e):break;
+# elif (LZO_CC_TURBOC && (__TURBOC__ == 0x0295))
+# define LZO_COMPILE_TIME_ASSERT(e) switch(0) case 1:case !(e):break;
+# else
+# define LZO_COMPILE_TIME_ASSERT(e) {typedef int __LZO_CTA_NAME(lzo_cta_t__)[1-2*!(e)];}
+# endif
+#endif
+#if (LZO_LANG_ASSEMBLER)
+# undef LZO_COMPILE_TIME_ASSERT_HEADER
+# define LZO_COMPILE_TIME_ASSERT_HEADER(e) /*empty*/
+#else
+LZO_COMPILE_TIME_ASSERT_HEADER(1 == 1)
+#if defined(__cplusplus)
+extern "C" { LZO_COMPILE_TIME_ASSERT_HEADER(2 == 2) }
+#endif
+LZO_COMPILE_TIME_ASSERT_HEADER(3 == 3)
+#endif
+#if (LZO_ARCH_I086 || LZO_ARCH_I386) && (LZO_OS_DOS16 || LZO_OS_DOS32 || LZO_OS_OS2 || LZO_OS_OS216 || LZO_OS_WIN16 || LZO_OS_WIN32 || LZO_OS_WIN64)
+# if (LZO_CC_GNUC || LZO_CC_HIGHC || LZO_CC_NDPC || LZO_CC_PACIFICC)
+# elif (LZO_CC_DMC || LZO_CC_SYMANTECC || LZO_CC_ZORTECHC)
+# define __lzo_cdecl __cdecl
+# define __lzo_cdecl_atexit /*empty*/
+# define __lzo_cdecl_main __cdecl
+# if (LZO_OS_OS2 && (LZO_CC_DMC || LZO_CC_SYMANTECC))
+# define __lzo_cdecl_qsort __pascal
+# elif (LZO_OS_OS2 && (LZO_CC_ZORTECHC))
+# define __lzo_cdecl_qsort _stdcall
+# else
+# define __lzo_cdecl_qsort __cdecl
+# endif
+# elif (LZO_CC_WATCOMC)
+# define __lzo_cdecl __cdecl
+# else
+# define __lzo_cdecl __cdecl
+# define __lzo_cdecl_atexit __cdecl
+# define __lzo_cdecl_main __cdecl
+# define __lzo_cdecl_qsort __cdecl
+# endif
+# if (LZO_CC_GNUC || LZO_CC_HIGHC || LZO_CC_NDPC || LZO_CC_PACIFICC || LZO_CC_WATCOMC)
+# elif (LZO_OS_OS2 && (LZO_CC_DMC || LZO_CC_SYMANTECC))
+# define __lzo_cdecl_sighandler __pascal
+# elif (LZO_OS_OS2 && (LZO_CC_ZORTECHC))
+# define __lzo_cdecl_sighandler _stdcall
+# elif (LZO_CC_MSC && (_MSC_VER >= 1400)) && defined(_M_CEE_PURE)
+# define __lzo_cdecl_sighandler __clrcall
+# elif (LZO_CC_MSC && (_MSC_VER >= 600 && _MSC_VER < 700))
+# if defined(_DLL)
+# define __lzo_cdecl_sighandler _far _cdecl _loadds
+# elif defined(_MT)
+# define __lzo_cdecl_sighandler _far _cdecl
+# else
+# define __lzo_cdecl_sighandler _cdecl
+# endif
+# else
+# define __lzo_cdecl_sighandler __cdecl
+# endif
+#elif (LZO_ARCH_I386) && (LZO_CC_WATCOMC)
+# define __lzo_cdecl __cdecl
+#elif (LZO_ARCH_M68K && LZO_OS_TOS && (LZO_CC_PUREC || LZO_CC_TURBOC))
+# define __lzo_cdecl cdecl
+#endif
+#if !defined(__lzo_cdecl)
+# define __lzo_cdecl /*empty*/
+#endif
+#if !defined(__lzo_cdecl_atexit)
+# define __lzo_cdecl_atexit /*empty*/
+#endif
+#if !defined(__lzo_cdecl_main)
+# define __lzo_cdecl_main /*empty*/
+#endif
+#if !defined(__lzo_cdecl_qsort)
+# define __lzo_cdecl_qsort /*empty*/
+#endif
+#if !defined(__lzo_cdecl_sighandler)
+# define __lzo_cdecl_sighandler /*empty*/
+#endif
+#if !defined(__lzo_cdecl_va)
+# define __lzo_cdecl_va __lzo_cdecl
+#endif
+#if !(LZO_CFG_NO_WINDOWS_H)
+#if !defined(LZO_HAVE_WINDOWS_H)
+#if (LZO_OS_CYGWIN || (LZO_OS_EMX && defined(__RSXNT__)) || LZO_OS_WIN32 || LZO_OS_WIN64)
+# if (LZO_CC_WATCOMC && (__WATCOMC__ < 1000))
+# elif ((LZO_OS_WIN32 && defined(__PW32__)) && (LZO_CC_GNUC && (LZO_CC_GNUC < 0x030000ul)))
+# elif ((LZO_OS_CYGWIN || defined(__MINGW32__)) && (LZO_CC_GNUC && (LZO_CC_GNUC < 0x025f00ul)))
+# else
+# define LZO_HAVE_WINDOWS_H 1
+# endif
+#endif
+#endif
+#endif
+#define LZO_SIZEOF_CHAR 1
+#ifndef LZO_SIZEOF_SHORT
+#if defined(SIZEOF_SHORT)
+# define LZO_SIZEOF_SHORT (SIZEOF_SHORT)
+#elif defined(__SIZEOF_SHORT__)
+# define LZO_SIZEOF_SHORT (__SIZEOF_SHORT__)
+#endif
+#endif
+#ifndef LZO_SIZEOF_INT
+#if defined(SIZEOF_INT)
+# define LZO_SIZEOF_INT (SIZEOF_INT)
+#elif defined(__SIZEOF_INT__)
+# define LZO_SIZEOF_INT (__SIZEOF_INT__)
+#endif
+#endif
+#ifndef LZO_SIZEOF_LONG
+#if defined(SIZEOF_LONG)
+# define LZO_SIZEOF_LONG (SIZEOF_LONG)
+#elif defined(__SIZEOF_LONG__)
+# define LZO_SIZEOF_LONG (__SIZEOF_LONG__)
+#endif
+#endif
+#ifndef LZO_SIZEOF_LONG_LONG
+#if defined(SIZEOF_LONG_LONG)
+# define LZO_SIZEOF_LONG_LONG (SIZEOF_LONG_LONG)
+#elif defined(__SIZEOF_LONG_LONG__)
+# define LZO_SIZEOF_LONG_LONG (__SIZEOF_LONG_LONG__)
+#endif
+#endif
+#ifndef LZO_SIZEOF___INT16
+#if defined(SIZEOF___INT16)
+# define LZO_SIZEOF___INT16 (SIZEOF___INT16)
+#endif
+#endif
+#ifndef LZO_SIZEOF___INT32
+#if defined(SIZEOF___INT32)
+# define LZO_SIZEOF___INT32 (SIZEOF___INT32)
+#endif
+#endif
+#ifndef LZO_SIZEOF___INT64
+#if defined(SIZEOF___INT64)
+# define LZO_SIZEOF___INT64 (SIZEOF___INT64)
+#endif
+#endif
+#ifndef LZO_SIZEOF_VOID_P
+#if defined(SIZEOF_VOID_P)
+# define LZO_SIZEOF_VOID_P (SIZEOF_VOID_P)
+#elif defined(__SIZEOF_POINTER__)
+# define LZO_SIZEOF_VOID_P (__SIZEOF_POINTER__)
+#endif
+#endif
+#ifndef LZO_SIZEOF_SIZE_T
+#if defined(SIZEOF_SIZE_T)
+# define LZO_SIZEOF_SIZE_T (SIZEOF_SIZE_T)
+#elif defined(__SIZEOF_SIZE_T__)
+# define LZO_SIZEOF_SIZE_T (__SIZEOF_SIZE_T__)
+#endif
+#endif
+#ifndef LZO_SIZEOF_PTRDIFF_T
+#if defined(SIZEOF_PTRDIFF_T)
+# define LZO_SIZEOF_PTRDIFF_T (SIZEOF_PTRDIFF_T)
+#elif defined(__SIZEOF_PTRDIFF_T__)
+# define LZO_SIZEOF_PTRDIFF_T (__SIZEOF_PTRDIFF_T__)
+#endif
+#endif
+#define __LZO_LSR(x,b) (((x)+0ul) >> (b))
+#if !defined(LZO_SIZEOF_SHORT)
+# if (LZO_ARCH_CRAY_PVP)
+# define LZO_SIZEOF_SHORT 8
+# elif (USHRT_MAX == LZO_0xffffL)
+# define LZO_SIZEOF_SHORT 2
+# elif (__LZO_LSR(USHRT_MAX,7) == 1)
+# define LZO_SIZEOF_SHORT 1
+# elif (__LZO_LSR(USHRT_MAX,15) == 1)
+# define LZO_SIZEOF_SHORT 2
+# elif (__LZO_LSR(USHRT_MAX,31) == 1)
+# define LZO_SIZEOF_SHORT 4
+# elif (__LZO_LSR(USHRT_MAX,63) == 1)
+# define LZO_SIZEOF_SHORT 8
+# elif (__LZO_LSR(USHRT_MAX,127) == 1)
+# define LZO_SIZEOF_SHORT 16
+# else
+# error "LZO_SIZEOF_SHORT"
+# endif
+#endif
+LZO_COMPILE_TIME_ASSERT_HEADER(LZO_SIZEOF_SHORT == sizeof(short))
+#if !defined(LZO_SIZEOF_INT)
+# if (LZO_ARCH_CRAY_PVP)
+# define LZO_SIZEOF_INT 8
+# elif (UINT_MAX == LZO_0xffffL)
+# define LZO_SIZEOF_INT 2
+# elif (UINT_MAX == LZO_0xffffffffL)
+# define LZO_SIZEOF_INT 4
+# elif (__LZO_LSR(UINT_MAX,7) == 1)
+# define LZO_SIZEOF_INT 1
+# elif (__LZO_LSR(UINT_MAX,15) == 1)
+# define LZO_SIZEOF_INT 2
+# elif (__LZO_LSR(UINT_MAX,31) == 1)
+# define LZO_SIZEOF_INT 4
+# elif (__LZO_LSR(UINT_MAX,63) == 1)
+# define LZO_SIZEOF_INT 8
+# elif (__LZO_LSR(UINT_MAX,127) == 1)
+# define LZO_SIZEOF_INT 16
+# else
+# error "LZO_SIZEOF_INT"
+# endif
+#endif
+LZO_COMPILE_TIME_ASSERT_HEADER(LZO_SIZEOF_INT == sizeof(int))
+#if !defined(LZO_SIZEOF_LONG)
+# if (ULONG_MAX == LZO_0xffffffffL)
+# define LZO_SIZEOF_LONG 4
+# elif (__LZO_LSR(ULONG_MAX,7) == 1)
+# define LZO_SIZEOF_LONG 1
+# elif (__LZO_LSR(ULONG_MAX,15) == 1)
+# define LZO_SIZEOF_LONG 2
+# elif (__LZO_LSR(ULONG_MAX,31) == 1)
+# define LZO_SIZEOF_LONG 4
+# elif (__LZO_LSR(ULONG_MAX,39) == 1)
+# define LZO_SIZEOF_LONG 5
+# elif (__LZO_LSR(ULONG_MAX,63) == 1)
+# define LZO_SIZEOF_LONG 8
+# elif (__LZO_LSR(ULONG_MAX,127) == 1)
+# define LZO_SIZEOF_LONG 16
+# else
+# error "LZO_SIZEOF_LONG"
+# endif
+#endif
+LZO_COMPILE_TIME_ASSERT_HEADER(LZO_SIZEOF_LONG == sizeof(long))
+#if !defined(LZO_SIZEOF_LONG_LONG) && !defined(LZO_SIZEOF___INT64)
+#if (LZO_SIZEOF_LONG > 0 && LZO_SIZEOF_LONG < 8)
+# if defined(__LONG_MAX__) && defined(__LONG_LONG_MAX__)
+# if (LZO_CC_GNUC >= 0x030300ul)
+# if ((__LONG_MAX__-0) == (__LONG_LONG_MAX__-0))
+# define LZO_SIZEOF_LONG_LONG LZO_SIZEOF_LONG
+# elif (__LZO_LSR(__LONG_LONG_MAX__,30) == 1)
+# define LZO_SIZEOF_LONG_LONG 4
+# endif
+# endif
+# endif
+#endif
+#endif
+#if !defined(LZO_SIZEOF_LONG_LONG) && !defined(LZO_SIZEOF___INT64)
+#if (LZO_SIZEOF_LONG > 0 && LZO_SIZEOF_LONG < 8)
+#if (LZO_ARCH_I086 && LZO_CC_DMC)
+#elif (LZO_CC_CILLY) && defined(__GNUC__)
+# define LZO_SIZEOF_LONG_LONG 8
+#elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE)
+# define LZO_SIZEOF_LONG_LONG 8
+#elif ((LZO_OS_WIN32 || LZO_OS_WIN64 || defined(_WIN32)) && LZO_CC_MSC && (_MSC_VER >= 1400))
+# define LZO_SIZEOF_LONG_LONG 8
+#elif (LZO_OS_WIN64 || defined(_WIN64))
+# define LZO_SIZEOF___INT64 8
+#elif (LZO_ARCH_I386 && (LZO_CC_DMC))
+# define LZO_SIZEOF_LONG_LONG 8
+#elif (LZO_ARCH_I386 && (LZO_CC_SYMANTECC && (__SC__ >= 0x700)))
+# define LZO_SIZEOF_LONG_LONG 8
+#elif (LZO_ARCH_I386 && (LZO_CC_INTELC && defined(__linux__)))
+# define LZO_SIZEOF_LONG_LONG 8
+#elif (LZO_ARCH_I386 && (LZO_CC_MWERKS || LZO_CC_PELLESC || LZO_CC_PGI || LZO_CC_SUNPROC))
+# define LZO_SIZEOF_LONG_LONG 8
+#elif (LZO_ARCH_I386 && (LZO_CC_INTELC || LZO_CC_MSC))
+# define LZO_SIZEOF___INT64 8
+#elif ((LZO_OS_WIN32 || defined(_WIN32)) && (LZO_CC_MSC))
+# define LZO_SIZEOF___INT64 8
+#elif (LZO_ARCH_I386 && (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0520)))
+# define LZO_SIZEOF___INT64 8
+#elif (LZO_ARCH_I386 && (LZO_CC_WATCOMC && (__WATCOMC__ >= 1100)))
+# define LZO_SIZEOF___INT64 8
+#elif (LZO_CC_GHS && defined(__LLONG_BIT) && ((__LLONG_BIT-0) == 64))
+# define LZO_SIZEOF_LONG_LONG 8
+#elif (LZO_CC_WATCOMC && defined(_INTEGRAL_MAX_BITS) && ((_INTEGRAL_MAX_BITS-0) == 64))
+# define LZO_SIZEOF___INT64 8
+#elif (LZO_OS_OS400 || defined(__OS400__)) && defined(__LLP64_IFC__)
+# define LZO_SIZEOF_LONG_LONG 8
+#elif (defined(__vms) || defined(__VMS)) && ((__INITIAL_POINTER_SIZE-0) == 64)
+# define LZO_SIZEOF_LONG_LONG 8
+#elif (LZO_CC_SDCC) && (LZO_SIZEOF_INT == 2)
+#elif 1 && defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)
+# define LZO_SIZEOF_LONG_LONG 8
+#endif
+#endif
+#endif
+#if defined(__cplusplus) && (LZO_CC_GNUC)
+# if (LZO_CC_GNUC < 0x020800ul)
+# undef LZO_SIZEOF_LONG_LONG
+# endif
+#endif
+#if (LZO_CFG_NO_LONG_LONG)
+# undef LZO_SIZEOF_LONG_LONG
+#elif defined(__NO_LONG_LONG)
+# undef LZO_SIZEOF_LONG_LONG
+#elif defined(_NO_LONGLONG)
+# undef LZO_SIZEOF_LONG_LONG
+#endif
+#if !defined(LZO_WORDSIZE)
+#if (LZO_ARCH_ALPHA)
+# define LZO_WORDSIZE 8
+#elif (LZO_ARCH_AMD64)
+# define LZO_WORDSIZE 8
+#elif (LZO_ARCH_ARM64)
+# define LZO_WORDSIZE 8
+#elif (LZO_ARCH_AVR)
+# define LZO_WORDSIZE 1
+#elif (LZO_ARCH_H8300)
+# if defined(__H8300H__) || defined(__H8300S__) || defined(__H8300SX__)
+# define LZO_WORDSIZE 4
+# else
+# define LZO_WORDSIZE 2
+# endif
+#elif (LZO_ARCH_I086)
+# define LZO_WORDSIZE 2
+#elif (LZO_ARCH_IA64)
+# define LZO_WORDSIZE 8
+#elif (LZO_ARCH_M16C)
+# define LZO_WORDSIZE 2
+#elif (LZO_ARCH_SPU)
+# define LZO_WORDSIZE 4
+#elif (LZO_ARCH_Z80)
+# define LZO_WORDSIZE 1
+#elif (LZO_SIZEOF_LONG == 8) && ((defined(__mips__) && defined(__R5900__)) || defined(__MIPS_PSX2__))
+# define LZO_WORDSIZE 8
+#elif (LZO_OS_OS400 || defined(__OS400__))
+# define LZO_WORDSIZE 8
+#elif (defined(__vms) || defined(__VMS)) && (__INITIAL_POINTER_SIZE+0 == 64)
+# define LZO_WORDSIZE 8
+#endif
+#endif
+#if !defined(LZO_SIZEOF_VOID_P)
+#if defined(__ILP32__) || defined(__ILP32) || defined(_ILP32)
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(int) == 4)
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(long) == 4)
+# define LZO_SIZEOF_VOID_P 4
+#elif defined(__ILP64__) || defined(__ILP64) || defined(_ILP64)
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(int) == 8)
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(long) == 8)
+# define LZO_SIZEOF_VOID_P 8
+#elif defined(__LLP64__) || defined(__LLP64) || defined(_LLP64) || defined(_WIN64)
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(long) == 4)
+# define LZO_SIZEOF_VOID_P 8
+#elif defined(__LP64__) || defined(__LP64) || defined(_LP64)
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(long) == 8)
+# define LZO_SIZEOF_VOID_P 8
+#elif (LZO_ARCH_AVR)
+# define LZO_SIZEOF_VOID_P 2
+#elif (LZO_ARCH_C166 || LZO_ARCH_MCS51 || LZO_ARCH_MCS251 || LZO_ARCH_MSP430)
+# define LZO_SIZEOF_VOID_P 2
+#elif (LZO_ARCH_H8300)
+# if defined(__H8300H__) || defined(__H8300S__) || defined(__H8300SX__)
+ LZO_COMPILE_TIME_ASSERT_HEADER(LZO_WORDSIZE == 4)
+# if defined(__NORMAL_MODE__)
+# define LZO_SIZEOF_VOID_P 2
+# else
+# define LZO_SIZEOF_VOID_P 4
+# endif
+# else
+ LZO_COMPILE_TIME_ASSERT_HEADER(LZO_WORDSIZE == 2)
+# define LZO_SIZEOF_VOID_P 2
+# endif
+# if (LZO_CC_GNUC && (LZO_CC_GNUC < 0x040000ul)) && (LZO_SIZEOF_INT == 4)
+# define LZO_SIZEOF_SIZE_T LZO_SIZEOF_INT
+# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_INT
+# endif
+#elif (LZO_ARCH_I086)
+# if (LZO_MM_TINY || LZO_MM_SMALL || LZO_MM_MEDIUM)
+# define LZO_SIZEOF_VOID_P 2
+# elif (LZO_MM_COMPACT || LZO_MM_LARGE || LZO_MM_HUGE)
+# define LZO_SIZEOF_VOID_P 4
+# else
+# error "invalid LZO_ARCH_I086 memory model"
+# endif
+#elif (LZO_ARCH_M16C)
+# if defined(__m32c_cpu__) || defined(__m32cm_cpu__)
+# define LZO_SIZEOF_VOID_P 4
+# else
+# define LZO_SIZEOF_VOID_P 2
+# endif
+#elif (LZO_ARCH_SPU)
+# define LZO_SIZEOF_VOID_P 4
+#elif (LZO_ARCH_Z80)
+# define LZO_SIZEOF_VOID_P 2
+#elif (LZO_SIZEOF_LONG == 8) && ((defined(__mips__) && defined(__R5900__)) || defined(__MIPS_PSX2__))
+# define LZO_SIZEOF_VOID_P 4
+#elif (LZO_OS_OS400 || defined(__OS400__))
+# if defined(__LLP64_IFC__)
+# define LZO_SIZEOF_VOID_P 8
+# define LZO_SIZEOF_SIZE_T LZO_SIZEOF_LONG
+# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_LONG
+# else
+# define LZO_SIZEOF_VOID_P 16
+# define LZO_SIZEOF_SIZE_T LZO_SIZEOF_LONG
+# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_LONG
+# endif
+#elif (defined(__vms) || defined(__VMS)) && (__INITIAL_POINTER_SIZE+0 == 64)
+# define LZO_SIZEOF_VOID_P 8
+# define LZO_SIZEOF_SIZE_T LZO_SIZEOF_LONG
+# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_LONG
+#endif
+#endif
+#if !defined(LZO_SIZEOF_VOID_P)
+# define LZO_SIZEOF_VOID_P LZO_SIZEOF_LONG
+#endif
+LZO_COMPILE_TIME_ASSERT_HEADER(LZO_SIZEOF_VOID_P == sizeof(void *))
+#if !defined(LZO_SIZEOF_SIZE_T)
+#if (LZO_ARCH_I086 || LZO_ARCH_M16C)
+# define LZO_SIZEOF_SIZE_T 2
+#endif
+#endif
+#if !defined(LZO_SIZEOF_SIZE_T)
+# define LZO_SIZEOF_SIZE_T LZO_SIZEOF_VOID_P
+#endif
+#if defined(offsetof)
+LZO_COMPILE_TIME_ASSERT_HEADER(LZO_SIZEOF_SIZE_T == sizeof(size_t))
+#endif
+#if !defined(LZO_SIZEOF_PTRDIFF_T)
+#if (LZO_ARCH_I086)
+# if (LZO_MM_TINY || LZO_MM_SMALL || LZO_MM_MEDIUM || LZO_MM_HUGE)
+# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_VOID_P
+# elif (LZO_MM_COMPACT || LZO_MM_LARGE)
+# if (LZO_CC_BORLANDC || LZO_CC_TURBOC)
+# define LZO_SIZEOF_PTRDIFF_T 4
+# else
+# define LZO_SIZEOF_PTRDIFF_T 2
+# endif
+# else
+# error "invalid LZO_ARCH_I086 memory model"
+# endif
+#endif
+#endif
+#if !defined(LZO_SIZEOF_PTRDIFF_T)
+# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_SIZE_T
+#endif
+#if defined(offsetof)
+LZO_COMPILE_TIME_ASSERT_HEADER(LZO_SIZEOF_PTRDIFF_T == sizeof(ptrdiff_t))
+#endif
+#if !defined(LZO_WORDSIZE)
+# define LZO_WORDSIZE LZO_SIZEOF_VOID_P
+#endif
+#if (LZO_ABI_NEUTRAL_ENDIAN)
+# undef LZO_ABI_BIG_ENDIAN
+# undef LZO_ABI_LITTLE_ENDIAN
+#elif !(LZO_ABI_BIG_ENDIAN) && !(LZO_ABI_LITTLE_ENDIAN)
+#if (LZO_ARCH_ALPHA) && (LZO_ARCH_CRAY_MPP)
+# define LZO_ABI_BIG_ENDIAN 1
+#elif (LZO_ARCH_IA64) && (LZO_OS_POSIX_LINUX || LZO_OS_WIN64)
+# define LZO_ABI_LITTLE_ENDIAN 1
+#elif (LZO_ARCH_ALPHA || LZO_ARCH_AMD64 || LZO_ARCH_BLACKFIN || LZO_ARCH_CRIS || LZO_ARCH_I086 || LZO_ARCH_I386 || LZO_ARCH_MSP430 || LZO_ARCH_RISCV)
+# define LZO_ABI_LITTLE_ENDIAN 1
+#elif (LZO_ARCH_AVR32 || LZO_ARCH_M68K || LZO_ARCH_S390 || LZO_ARCH_SPU)
+# define LZO_ABI_BIG_ENDIAN 1
+#elif 1 && defined(__IAR_SYSTEMS_ICC__) && defined(__LITTLE_ENDIAN__)
+# if (__LITTLE_ENDIAN__ == 1)
+# define LZO_ABI_LITTLE_ENDIAN 1
+# else
+# define LZO_ABI_BIG_ENDIAN 1
+# endif
+#elif 1 && defined(__BIG_ENDIAN__) && !defined(__LITTLE_ENDIAN__)
+# define LZO_ABI_BIG_ENDIAN 1
+#elif 1 && defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__)
+# define LZO_ABI_LITTLE_ENDIAN 1
+#elif 1 && (LZO_ARCH_ARM) && defined(__ARM_BIG_ENDIAN) && ((__ARM_BIG_ENDIAN)+0)
+# define LZO_ABI_BIG_ENDIAN 1
+#elif 1 && (LZO_ARCH_ARM) && defined(__ARMEB__) && !defined(__ARMEL__)
+# define LZO_ABI_BIG_ENDIAN 1
+#elif 1 && (LZO_ARCH_ARM) && defined(__ARMEL__) && !defined(__ARMEB__)
+# define LZO_ABI_LITTLE_ENDIAN 1
+#elif 1 && (LZO_ARCH_ARM) && defined(_MSC_VER) && defined(_WIN32)
+# define LZO_ABI_LITTLE_ENDIAN 1
+#elif 1 && (LZO_ARCH_ARM && LZO_CC_ARMCC_ARMCC)
+# if defined(__BIG_ENDIAN) && defined(__LITTLE_ENDIAN)
+# error "unexpected configuration - check your compiler defines"
+# elif defined(__BIG_ENDIAN)
+# define LZO_ABI_BIG_ENDIAN 1
+# else
+# define LZO_ABI_LITTLE_ENDIAN 1
+# endif
+# define LZO_ABI_LITTLE_ENDIAN 1
+#elif 1 && (LZO_ARCH_ARM64) && defined(__ARM_BIG_ENDIAN) && ((__ARM_BIG_ENDIAN)+0)
+# define LZO_ABI_BIG_ENDIAN 1
+#elif 1 && (LZO_ARCH_ARM64) && defined(__AARCH64EB__) && !defined(__AARCH64EL__)
+# define LZO_ABI_BIG_ENDIAN 1
+#elif 1 && (LZO_ARCH_ARM64) && defined(__AARCH64EL__) && !defined(__AARCH64EB__)
+# define LZO_ABI_LITTLE_ENDIAN 1
+#elif 1 && (LZO_ARCH_ARM64) && defined(_MSC_VER) && defined(_WIN32)
+# define LZO_ABI_LITTLE_ENDIAN 1
+#elif 1 && (LZO_ARCH_MIPS) && defined(__MIPSEB__) && !defined(__MIPSEL__)
+# define LZO_ABI_BIG_ENDIAN 1
+#elif 1 && (LZO_ARCH_MIPS) && defined(__MIPSEL__) && !defined(__MIPSEB__)
+# define LZO_ABI_LITTLE_ENDIAN 1
+#endif
+#endif
+#if (LZO_ABI_BIG_ENDIAN) && (LZO_ABI_LITTLE_ENDIAN)
+# error "unexpected configuration - check your compiler defines"
+#endif
+#if (LZO_ABI_BIG_ENDIAN)
+# define LZO_INFO_ABI_ENDIAN "be"
+#elif (LZO_ABI_LITTLE_ENDIAN)
+# define LZO_INFO_ABI_ENDIAN "le"
+#elif (LZO_ABI_NEUTRAL_ENDIAN)
+# define LZO_INFO_ABI_ENDIAN "neutral"
+#endif
+#if (LZO_SIZEOF_INT == 1 && LZO_SIZEOF_LONG == 2 && LZO_SIZEOF_VOID_P == 2)
+# define LZO_ABI_I8LP16 1
+# define LZO_INFO_ABI_PM "i8lp16"
+#elif (LZO_SIZEOF_INT == 2 && LZO_SIZEOF_LONG == 2 && LZO_SIZEOF_VOID_P == 2)
+# define LZO_ABI_ILP16 1
+# define LZO_INFO_ABI_PM "ilp16"
+#elif (LZO_SIZEOF_INT == 2 && LZO_SIZEOF_LONG == 4 && LZO_SIZEOF_VOID_P == 4)
+# define LZO_ABI_LP32 1
+# define LZO_INFO_ABI_PM "lp32"
+#elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 4 && LZO_SIZEOF_VOID_P == 4)
+# define LZO_ABI_ILP32 1
+# define LZO_INFO_ABI_PM "ilp32"
+#elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 4 && LZO_SIZEOF_VOID_P == 8 && LZO_SIZEOF_SIZE_T == 8)
+# define LZO_ABI_LLP64 1
+# define LZO_INFO_ABI_PM "llp64"
+#elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 8 && LZO_SIZEOF_VOID_P == 8)
+# define LZO_ABI_LP64 1
+# define LZO_INFO_ABI_PM "lp64"
+#elif (LZO_SIZEOF_INT == 8 && LZO_SIZEOF_LONG == 8 && LZO_SIZEOF_VOID_P == 8)
+# define LZO_ABI_ILP64 1
+# define LZO_INFO_ABI_PM "ilp64"
+#elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 8 && LZO_SIZEOF_VOID_P == 4)
+# define LZO_ABI_IP32L64 1
+# define LZO_INFO_ABI_PM "ip32l64"
+#endif
+#if (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_VOID_P == 4 && LZO_WORDSIZE == 8)
+# define LZO_ABI_IP32W64 1
+# ifndef LZO_INFO_ABI_PM
+# define LZO_INFO_ABI_PM "ip32w64"
+# endif
+#endif
+#if 0
+#elif !defined(__LZO_LIBC_OVERRIDE)
+#if (LZO_LIBC_NAKED)
+# define LZO_INFO_LIBC "naked"
+#elif (LZO_LIBC_FREESTANDING)
+# define LZO_INFO_LIBC "freestanding"
+#elif (LZO_LIBC_MOSTLY_FREESTANDING)
+# define LZO_INFO_LIBC "mfreestanding"
+#elif (LZO_LIBC_ISOC90)
+# define LZO_INFO_LIBC "isoc90"
+#elif (LZO_LIBC_ISOC99)
+# define LZO_INFO_LIBC "isoc99"
+#elif (LZO_CC_ARMCC_ARMCC) && defined(__ARMCLIB_VERSION)
+# define LZO_LIBC_ISOC90 1
+# define LZO_INFO_LIBC "isoc90"
+#elif defined(__dietlibc__)
+# define LZO_LIBC_DIETLIBC 1
+# define LZO_INFO_LIBC "dietlibc"
+#elif defined(_NEWLIB_VERSION)
+# define LZO_LIBC_NEWLIB 1
+# define LZO_INFO_LIBC "newlib"
+#elif defined(__UCLIBC__) && defined(__UCLIBC_MAJOR__) && defined(__UCLIBC_MINOR__)
+# if defined(__UCLIBC_SUBLEVEL__)
+# define LZO_LIBC_UCLIBC (__UCLIBC_MAJOR__ * 0x10000L + (__UCLIBC_MINOR__-0) * 0x100 + (__UCLIBC_SUBLEVEL__-0))
+# else
+# define LZO_LIBC_UCLIBC 0x00090bL
+# endif
+# define LZO_INFO_LIBC "uc" "libc"
+#elif defined(__GLIBC__) && defined(__GLIBC_MINOR__)
+# define LZO_LIBC_GLIBC (__GLIBC__ * 0x10000L + (__GLIBC_MINOR__-0) * 0x100)
+# define LZO_INFO_LIBC "glibc"
+#elif (LZO_CC_MWERKS) && defined(__MSL__)
+# define LZO_LIBC_MSL __MSL__
+# define LZO_INFO_LIBC "msl"
+#elif 1 && defined(__IAR_SYSTEMS_ICC__)
+# define LZO_LIBC_ISOC90 1
+# define LZO_INFO_LIBC "isoc90"
+#else
+# define LZO_LIBC_DEFAULT 1
+# define LZO_INFO_LIBC "default"
+#endif
+#endif
+#if (LZO_ARCH_I386 && (LZO_OS_DOS32 || LZO_OS_WIN32) && (LZO_CC_DMC || LZO_CC_INTELC || LZO_CC_MSC || LZO_CC_PELLESC))
+# define LZO_ASM_SYNTAX_MSC 1
+#elif (LZO_OS_WIN64 && (LZO_CC_DMC || LZO_CC_INTELC || LZO_CC_MSC || LZO_CC_PELLESC))
+#elif (LZO_ARCH_I386 && LZO_CC_GNUC && (LZO_CC_GNUC == 0x011f00ul))
+#elif (LZO_ARCH_I386 && (LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_INTELC || LZO_CC_PATHSCALE))
+# define LZO_ASM_SYNTAX_GNUC 1
+#elif (LZO_ARCH_AMD64 && (LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_INTELC || LZO_CC_PATHSCALE))
+# define LZO_ASM_SYNTAX_GNUC 1
+#elif (LZO_CC_GNUC)
+# define LZO_ASM_SYNTAX_GNUC 1
+#endif
+#if (LZO_ASM_SYNTAX_GNUC)
+#if (LZO_ARCH_I386 && LZO_CC_GNUC && (LZO_CC_GNUC < 0x020000ul))
+# define __LZO_ASM_CLOBBER "ax"
+# define __LZO_ASM_CLOBBER_LIST_CC /*empty*/
+# define __LZO_ASM_CLOBBER_LIST_CC_MEMORY /*empty*/
+# define __LZO_ASM_CLOBBER_LIST_EMPTY /*empty*/
+#elif (LZO_CC_INTELC && (__INTEL_COMPILER < 1000))
+# define __LZO_ASM_CLOBBER "memory"
+# define __LZO_ASM_CLOBBER_LIST_CC /*empty*/
+# define __LZO_ASM_CLOBBER_LIST_CC_MEMORY : "memory"
+# define __LZO_ASM_CLOBBER_LIST_EMPTY /*empty*/
+#else
+# define __LZO_ASM_CLOBBER "cc", "memory"
+# define __LZO_ASM_CLOBBER_LIST_CC : "cc"
+# define __LZO_ASM_CLOBBER_LIST_CC_MEMORY : "cc", "memory"
+# define __LZO_ASM_CLOBBER_LIST_EMPTY /*empty*/
+#endif
+#endif
+#if (LZO_ARCH_ALPHA)
+# define LZO_OPT_AVOID_UINT_INDEX 1
+#elif (LZO_ARCH_AMD64)
+# define LZO_OPT_AVOID_INT_INDEX 1
+# define LZO_OPT_AVOID_UINT_INDEX 1
+# ifndef LZO_OPT_UNALIGNED16
+# define LZO_OPT_UNALIGNED16 1
+# endif
+# ifndef LZO_OPT_UNALIGNED32
+# define LZO_OPT_UNALIGNED32 1
+# endif
+# ifndef LZO_OPT_UNALIGNED64
+# define LZO_OPT_UNALIGNED64 1
+# endif
+#elif (LZO_ARCH_ARM)
+# if defined(__ARM_FEATURE_UNALIGNED)
+# if ((__ARM_FEATURE_UNALIGNED)+0)
+# ifndef LZO_OPT_UNALIGNED16
+# define LZO_OPT_UNALIGNED16 1
+# endif
+# ifndef LZO_OPT_UNALIGNED32
+# define LZO_OPT_UNALIGNED32 1
+# endif
+# endif
+# elif 1 && (LZO_ARCH_ARM_THUMB2)
+# ifndef LZO_OPT_UNALIGNED16
+# define LZO_OPT_UNALIGNED16 1
+# endif
+# ifndef LZO_OPT_UNALIGNED32
+# define LZO_OPT_UNALIGNED32 1
+# endif
+# elif 1 && defined(__ARM_ARCH) && ((__ARM_ARCH)+0 >= 7)
+# ifndef LZO_OPT_UNALIGNED16
+# define LZO_OPT_UNALIGNED16 1
+# endif
+# ifndef LZO_OPT_UNALIGNED32
+# define LZO_OPT_UNALIGNED32 1
+# endif
+# elif 1 && defined(__TARGET_ARCH_ARM) && ((__TARGET_ARCH_ARM)+0 >= 7)
+# ifndef LZO_OPT_UNALIGNED16
+# define LZO_OPT_UNALIGNED16 1
+# endif
+# ifndef LZO_OPT_UNALIGNED32
+# define LZO_OPT_UNALIGNED32 1
+# endif
+# elif 1 && defined(__TARGET_ARCH_ARM) && ((__TARGET_ARCH_ARM)+0 >= 6) && (defined(__TARGET_PROFILE_A) || defined(__TARGET_PROFILE_R))
+# ifndef LZO_OPT_UNALIGNED16
+# define LZO_OPT_UNALIGNED16 1
+# endif
+# ifndef LZO_OPT_UNALIGNED32
+# define LZO_OPT_UNALIGNED32 1
+# endif
+# elif 1 && defined(_MSC_VER) && defined(_M_ARM) && ((_M_ARM)+0 >= 7)
+# ifndef LZO_OPT_UNALIGNED16
+# define LZO_OPT_UNALIGNED16 1
+# endif
+# ifndef LZO_OPT_UNALIGNED32
+# define LZO_OPT_UNALIGNED32 1
+# endif
+# endif
+#elif (LZO_ARCH_ARM64)
+# ifndef LZO_OPT_UNALIGNED16
+# define LZO_OPT_UNALIGNED16 1
+# endif
+# ifndef LZO_OPT_UNALIGNED32
+# define LZO_OPT_UNALIGNED32 1
+# endif
+# ifndef LZO_OPT_UNALIGNED64
+# define LZO_OPT_UNALIGNED64 1
+# endif
+#elif (LZO_ARCH_CRIS)
+# ifndef LZO_OPT_UNALIGNED16
+# define LZO_OPT_UNALIGNED16 1
+# endif
+# ifndef LZO_OPT_UNALIGNED32
+# define LZO_OPT_UNALIGNED32 1
+# endif
+#elif (LZO_ARCH_I386)
+# ifndef LZO_OPT_UNALIGNED16
+# define LZO_OPT_UNALIGNED16 1
+# endif
+# ifndef LZO_OPT_UNALIGNED32
+# define LZO_OPT_UNALIGNED32 1
+# endif
+#elif (LZO_ARCH_IA64)
+# define LZO_OPT_AVOID_INT_INDEX 1
+# define LZO_OPT_AVOID_UINT_INDEX 1
+# define LZO_OPT_PREFER_POSTINC 1
+#elif (LZO_ARCH_M68K)
+# define LZO_OPT_PREFER_POSTINC 1
+# define LZO_OPT_PREFER_PREDEC 1
+# if defined(__mc68020__) && !defined(__mcoldfire__)
+# ifndef LZO_OPT_UNALIGNED16
+# define LZO_OPT_UNALIGNED16 1
+# endif
+# ifndef LZO_OPT_UNALIGNED32
+# define LZO_OPT_UNALIGNED32 1
+# endif
+# endif
+#elif (LZO_ARCH_MIPS)
+# define LZO_OPT_AVOID_UINT_INDEX 1
+#elif (LZO_ARCH_POWERPC)
+# define LZO_OPT_PREFER_PREINC 1
+# define LZO_OPT_PREFER_PREDEC 1
+# if (LZO_ABI_BIG_ENDIAN) || (LZO_WORDSIZE == 8)
+# ifndef LZO_OPT_UNALIGNED16
+# define LZO_OPT_UNALIGNED16 1
+# endif
+# ifndef LZO_OPT_UNALIGNED32
+# define LZO_OPT_UNALIGNED32 1
+# endif
+# if (LZO_WORDSIZE == 8)
+# ifndef LZO_OPT_UNALIGNED64
+# define LZO_OPT_UNALIGNED64 1
+# endif
+# endif
+# endif
+#elif (LZO_ARCH_RISCV)
+# define LZO_OPT_AVOID_UINT_INDEX 1
+# ifndef LZO_OPT_UNALIGNED16
+# define LZO_OPT_UNALIGNED16 1
+# endif
+# ifndef LZO_OPT_UNALIGNED32
+# define LZO_OPT_UNALIGNED32 1
+# endif
+# if (LZO_WORDSIZE == 8)
+# ifndef LZO_OPT_UNALIGNED64
+# define LZO_OPT_UNALIGNED64 1
+# endif
+# endif
+#elif (LZO_ARCH_S390)
+# ifndef LZO_OPT_UNALIGNED16
+# define LZO_OPT_UNALIGNED16 1
+# endif
+# ifndef LZO_OPT_UNALIGNED32
+# define LZO_OPT_UNALIGNED32 1
+# endif
+# if (LZO_WORDSIZE == 8)
+# ifndef LZO_OPT_UNALIGNED64
+# define LZO_OPT_UNALIGNED64 1
+# endif
+# endif
+#elif (LZO_ARCH_SH)
+# define LZO_OPT_PREFER_POSTINC 1
+# define LZO_OPT_PREFER_PREDEC 1
+#endif
+#ifndef LZO_CFG_NO_INLINE_ASM
+#if (LZO_ABI_NEUTRAL_ENDIAN) || (LZO_ARCH_GENERIC)
+# define LZO_CFG_NO_INLINE_ASM 1
+#elif (LZO_CC_LLVM)
+# define LZO_CFG_NO_INLINE_ASM 1
+#endif
+#endif
+#if (LZO_CFG_NO_INLINE_ASM)
+# undef LZO_ASM_SYNTAX_MSC
+# undef LZO_ASM_SYNTAX_GNUC
+# undef __LZO_ASM_CLOBBER
+# undef __LZO_ASM_CLOBBER_LIST_CC
+# undef __LZO_ASM_CLOBBER_LIST_CC_MEMORY
+# undef __LZO_ASM_CLOBBER_LIST_EMPTY
+#endif
+#ifndef LZO_CFG_NO_UNALIGNED
+#if (LZO_ABI_NEUTRAL_ENDIAN) || (LZO_ARCH_GENERIC)
+# define LZO_CFG_NO_UNALIGNED 1
+#endif
+#endif
+#if (LZO_CFG_NO_UNALIGNED)
+# undef LZO_OPT_UNALIGNED16
+# undef LZO_OPT_UNALIGNED32
+# undef LZO_OPT_UNALIGNED64
+#endif
+#if defined(__LZO_INFOSTR_MM)
+#elif (LZO_MM_FLAT) && (defined(__LZO_INFOSTR_PM) || defined(LZO_INFO_ABI_PM))
+# define __LZO_INFOSTR_MM ""
+#elif defined(LZO_INFO_MM)
+# define __LZO_INFOSTR_MM "." LZO_INFO_MM
+#else
+# define __LZO_INFOSTR_MM ""
+#endif
+#if defined(__LZO_INFOSTR_PM)
+#elif defined(LZO_INFO_ABI_PM)
+# define __LZO_INFOSTR_PM "." LZO_INFO_ABI_PM
+#else
+# define __LZO_INFOSTR_PM ""
+#endif
+#if defined(__LZO_INFOSTR_ENDIAN)
+#elif defined(LZO_INFO_ABI_ENDIAN)
+# define __LZO_INFOSTR_ENDIAN "." LZO_INFO_ABI_ENDIAN
+#else
+# define __LZO_INFOSTR_ENDIAN ""
+#endif
+#if defined(__LZO_INFOSTR_OSNAME)
+#elif defined(LZO_INFO_OS_CONSOLE)
+# define __LZO_INFOSTR_OSNAME LZO_INFO_OS "." LZO_INFO_OS_CONSOLE
+#elif defined(LZO_INFO_OS_POSIX)
+# define __LZO_INFOSTR_OSNAME LZO_INFO_OS "." LZO_INFO_OS_POSIX
+#else
+# define __LZO_INFOSTR_OSNAME LZO_INFO_OS
+#endif
+#if defined(__LZO_INFOSTR_LIBC)
+#elif defined(LZO_INFO_LIBC)
+# define __LZO_INFOSTR_LIBC "." LZO_INFO_LIBC
+#else
+# define __LZO_INFOSTR_LIBC ""
+#endif
+#if defined(__LZO_INFOSTR_CCVER)
+#elif defined(LZO_INFO_CCVER)
+# define __LZO_INFOSTR_CCVER " " LZO_INFO_CCVER
+#else
+# define __LZO_INFOSTR_CCVER ""
+#endif
+#define LZO_INFO_STRING \
+ LZO_INFO_ARCH __LZO_INFOSTR_MM __LZO_INFOSTR_PM __LZO_INFOSTR_ENDIAN \
+ " " __LZO_INFOSTR_OSNAME __LZO_INFOSTR_LIBC " " LZO_INFO_CC __LZO_INFOSTR_CCVER
+#if !(LZO_CFG_SKIP_LZO_TYPES)
+#if (!(LZO_SIZEOF_SHORT+0 > 0 && LZO_SIZEOF_INT+0 > 0 && LZO_SIZEOF_LONG+0 > 0))
+# error "missing defines for sizes"
+#endif
+#if (!(LZO_SIZEOF_PTRDIFF_T+0 > 0 && LZO_SIZEOF_SIZE_T+0 > 0 && LZO_SIZEOF_VOID_P+0 > 0))
+# error "missing defines for sizes"
+#endif
+#define LZO_TYPEOF_CHAR 1u
+#define LZO_TYPEOF_SHORT 2u
+#define LZO_TYPEOF_INT 3u
+#define LZO_TYPEOF_LONG 4u
+#define LZO_TYPEOF_LONG_LONG 5u
+#define LZO_TYPEOF___INT8 17u
+#define LZO_TYPEOF___INT16 18u
+#define LZO_TYPEOF___INT32 19u
+#define LZO_TYPEOF___INT64 20u
+#define LZO_TYPEOF___INT128 21u
+#define LZO_TYPEOF___INT256 22u
+#define LZO_TYPEOF___MODE_QI 33u
+#define LZO_TYPEOF___MODE_HI 34u
+#define LZO_TYPEOF___MODE_SI 35u
+#define LZO_TYPEOF___MODE_DI 36u
+#define LZO_TYPEOF___MODE_TI 37u
+#define LZO_TYPEOF_CHAR_P 129u
+#if !defined(lzo_llong_t)
+#if (LZO_SIZEOF_LONG_LONG+0 > 0)
+# if !(LZO_LANG_ASSEMBLER)
+ __lzo_gnuc_extension__ typedef long long lzo_llong_t__;
+ __lzo_gnuc_extension__ typedef unsigned long long lzo_ullong_t__;
+# endif
+# define lzo_llong_t lzo_llong_t__
+# define lzo_ullong_t lzo_ullong_t__
+#endif
+#endif
+#if !defined(lzo_int16e_t)
+#if (LZO_CFG_PREFER_TYPEOF_ACC_INT16E_T == LZO_TYPEOF_SHORT) && (LZO_SIZEOF_SHORT != 2)
+# undef LZO_CFG_PREFER_TYPEOF_ACC_INT16E_T
+#endif
+#if (LZO_SIZEOF_LONG == 2) && !(LZO_CFG_PREFER_TYPEOF_ACC_INT16E_T == LZO_TYPEOF_SHORT)
+# define lzo_int16e_t long
+# define lzo_uint16e_t unsigned long
+# define LZO_TYPEOF_LZO_INT16E_T LZO_TYPEOF_LONG
+#elif (LZO_SIZEOF_INT == 2) && !(LZO_CFG_PREFER_TYPEOF_ACC_INT16E_T == LZO_TYPEOF_SHORT)
+# define lzo_int16e_t int
+# define lzo_uint16e_t unsigned int
+# define LZO_TYPEOF_LZO_INT16E_T LZO_TYPEOF_INT
+#elif (LZO_SIZEOF_SHORT == 2)
+# define lzo_int16e_t short int
+# define lzo_uint16e_t unsigned short int
+# define LZO_TYPEOF_LZO_INT16E_T LZO_TYPEOF_SHORT
+#elif 1 && !(LZO_CFG_TYPE_NO_MODE_HI) && (LZO_CC_CLANG || (LZO_CC_GNUC >= 0x025f00ul) || LZO_CC_LLVM)
+# if !(LZO_LANG_ASSEMBLER)
+ typedef int lzo_int16e_hi_t__ __attribute__((__mode__(__HI__)));
+ typedef unsigned int lzo_uint16e_hi_t__ __attribute__((__mode__(__HI__)));
+# endif
+# define lzo_int16e_t lzo_int16e_hi_t__
+# define lzo_uint16e_t lzo_uint16e_hi_t__
+# define LZO_TYPEOF_LZO_INT16E_T LZO_TYPEOF___MODE_HI
+#elif (LZO_SIZEOF___INT16 == 2)
+# define lzo_int16e_t __int16
+# define lzo_uint16e_t unsigned __int16
+# define LZO_TYPEOF_LZO_INT16E_T LZO_TYPEOF___INT16
+#else
+#endif
+#endif
+#if defined(lzo_int16e_t)
+# define LZO_SIZEOF_LZO_INT16E_T 2
+ LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int16e_t) == 2)
+ LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int16e_t) == LZO_SIZEOF_LZO_INT16E_T)
+#endif
+#if !defined(lzo_int32e_t)
+#if (LZO_CFG_PREFER_TYPEOF_ACC_INT32E_T == LZO_TYPEOF_INT) && (LZO_SIZEOF_INT != 4)
+# undef LZO_CFG_PREFER_TYPEOF_ACC_INT32E_T
+#endif
+#if (LZO_SIZEOF_LONG == 4) && !(LZO_CFG_PREFER_TYPEOF_ACC_INT32E_T == LZO_TYPEOF_INT)
+# define lzo_int32e_t long int
+# define lzo_uint32e_t unsigned long int
+# define LZO_TYPEOF_LZO_INT32E_T LZO_TYPEOF_LONG
+#elif (LZO_SIZEOF_INT == 4)
+# define lzo_int32e_t int
+# define lzo_uint32e_t unsigned int
+# define LZO_TYPEOF_LZO_INT32E_T LZO_TYPEOF_INT
+#elif (LZO_SIZEOF_SHORT == 4)
+# define lzo_int32e_t short int
+# define lzo_uint32e_t unsigned short int
+# define LZO_TYPEOF_LZO_INT32E_T LZO_TYPEOF_SHORT
+#elif (LZO_SIZEOF_LONG_LONG == 4)
+# define lzo_int32e_t lzo_llong_t
+# define lzo_uint32e_t lzo_ullong_t
+# define LZO_TYPEOF_LZO_INT32E_T LZO_TYPEOF_LONG_LONG
+#elif 1 && !(LZO_CFG_TYPE_NO_MODE_SI) && (LZO_CC_CLANG || (LZO_CC_GNUC >= 0x025f00ul) || LZO_CC_LLVM) && (__INT_MAX__+0 > 2147483647L)
+# if !(LZO_LANG_ASSEMBLER)
+ typedef int lzo_int32e_si_t__ __attribute__((__mode__(__SI__)));
+ typedef unsigned int lzo_uint32e_si_t__ __attribute__((__mode__(__SI__)));
+# endif
+# define lzo_int32e_t lzo_int32e_si_t__
+# define lzo_uint32e_t lzo_uint32e_si_t__
+# define LZO_TYPEOF_LZO_INT32E_T LZO_TYPEOF___MODE_SI
+#elif 1 && !(LZO_CFG_TYPE_NO_MODE_SI) && (LZO_CC_GNUC >= 0x025f00ul) && defined(__AVR__) && (__LONG_MAX__+0 == 32767L)
+# if !(LZO_LANG_ASSEMBLER)
+ typedef int lzo_int32e_si_t__ __attribute__((__mode__(__SI__)));
+ typedef unsigned int lzo_uint32e_si_t__ __attribute__((__mode__(__SI__)));
+# endif
+# define lzo_int32e_t lzo_int32e_si_t__
+# define lzo_uint32e_t lzo_uint32e_si_t__
+# define LZO_INT32_C(c) (c##LL)
+# define LZO_UINT32_C(c) (c##ULL)
+# define LZO_TYPEOF_LZO_INT32E_T LZO_TYPEOF___MODE_SI
+#elif (LZO_SIZEOF___INT32 == 4)
+# define lzo_int32e_t __int32
+# define lzo_uint32e_t unsigned __int32
+# define LZO_TYPEOF_LZO_INT32E_T LZO_TYPEOF___INT32
+#else
+#endif
+#endif
+#if defined(lzo_int32e_t)
+# define LZO_SIZEOF_LZO_INT32E_T 4
+ LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int32e_t) == 4)
+ LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int32e_t) == LZO_SIZEOF_LZO_INT32E_T)
+#endif
+#if !defined(lzo_int64e_t)
+#if (LZO_SIZEOF___INT64 == 8)
+# if (LZO_CC_BORLANDC) && !defined(LZO_CFG_PREFER_TYPEOF_ACC_INT64E_T)
+# define LZO_CFG_PREFER_TYPEOF_ACC_INT64E_T LZO_TYPEOF___INT64
+# endif
+#endif
+#if (LZO_CFG_PREFER_TYPEOF_ACC_INT64E_T == LZO_TYPEOF_LONG_LONG) && (LZO_SIZEOF_LONG_LONG != 8)
+# undef LZO_CFG_PREFER_TYPEOF_ACC_INT64E_T
+#endif
+#if (LZO_CFG_PREFER_TYPEOF_ACC_INT64E_T == LZO_TYPEOF___INT64) && (LZO_SIZEOF___INT64 != 8)
+# undef LZO_CFG_PREFER_TYPEOF_ACC_INT64E_T
+#endif
+#if (LZO_SIZEOF_INT == 8) && (LZO_SIZEOF_INT < LZO_SIZEOF_LONG)
+# define lzo_int64e_t int
+# define lzo_uint64e_t unsigned int
+# define LZO_TYPEOF_LZO_INT64E_T LZO_TYPEOF_INT
+#elif (LZO_SIZEOF_LONG == 8) && !(LZO_CFG_PREFER_TYPEOF_ACC_INT64E_T == LZO_TYPEOF_LONG_LONG) && !(LZO_CFG_PREFER_TYPEOF_ACC_INT64E_T == LZO_TYPEOF___INT64)
+# define lzo_int64e_t long int
+# define lzo_uint64e_t unsigned long int
+# define LZO_TYPEOF_LZO_INT64E_T LZO_TYPEOF_LONG
+#elif (LZO_SIZEOF_LONG_LONG == 8) && !(LZO_CFG_PREFER_TYPEOF_ACC_INT64E_T == LZO_TYPEOF___INT64)
+# define lzo_int64e_t lzo_llong_t
+# define lzo_uint64e_t lzo_ullong_t
+# define LZO_TYPEOF_LZO_INT64E_T LZO_TYPEOF_LONG_LONG
+# if (LZO_CC_BORLANDC)
+# define LZO_INT64_C(c) ((c) + 0ll)
+# define LZO_UINT64_C(c) ((c) + 0ull)
+# elif 0
+# define LZO_INT64_C(c) (__lzo_gnuc_extension__ (c##LL))
+# define LZO_UINT64_C(c) (__lzo_gnuc_extension__ (c##ULL))
+# else
+# define LZO_INT64_C(c) (c##LL)
+# define LZO_UINT64_C(c) (c##ULL)
+# endif
+#elif (LZO_SIZEOF___INT64 == 8)
+# define lzo_int64e_t __int64
+# define lzo_uint64e_t unsigned __int64
+# define LZO_TYPEOF_LZO_INT64E_T LZO_TYPEOF___INT64
+# if (LZO_CC_BORLANDC)
+# define LZO_INT64_C(c) ((c) + 0i64)
+# define LZO_UINT64_C(c) ((c) + 0ui64)
+# else
+# define LZO_INT64_C(c) (c##i64)
+# define LZO_UINT64_C(c) (c##ui64)
+# endif
+#else
+#endif
+#endif
+#if defined(lzo_int64e_t)
+# define LZO_SIZEOF_LZO_INT64E_T 8
+ LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int64e_t) == 8)
+ LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int64e_t) == LZO_SIZEOF_LZO_INT64E_T)
+#endif
+#if !defined(lzo_int32l_t)
+#if defined(lzo_int32e_t)
+# define lzo_int32l_t lzo_int32e_t
+# define lzo_uint32l_t lzo_uint32e_t
+# define LZO_SIZEOF_LZO_INT32L_T LZO_SIZEOF_LZO_INT32E_T
+# define LZO_TYPEOF_LZO_INT32L_T LZO_TYPEOF_LZO_INT32E_T
+#elif (LZO_SIZEOF_INT >= 4) && (LZO_SIZEOF_INT < LZO_SIZEOF_LONG)
+# define lzo_int32l_t int
+# define lzo_uint32l_t unsigned int
+# define LZO_SIZEOF_LZO_INT32L_T LZO_SIZEOF_INT
+# define LZO_TYPEOF_LZO_INT32L_T LZO_SIZEOF_INT
+#elif (LZO_SIZEOF_LONG >= 4)
+# define lzo_int32l_t long int
+# define lzo_uint32l_t unsigned long int
+# define LZO_SIZEOF_LZO_INT32L_T LZO_SIZEOF_LONG
+# define LZO_TYPEOF_LZO_INT32L_T LZO_SIZEOF_LONG
+#else
+# error "lzo_int32l_t"
+#endif
+#endif
+#if 1
+ LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int32l_t) >= 4)
+ LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int32l_t) == LZO_SIZEOF_LZO_INT32L_T)
+#endif
+#if !defined(lzo_int64l_t)
+#if defined(lzo_int64e_t)
+# define lzo_int64l_t lzo_int64e_t
+# define lzo_uint64l_t lzo_uint64e_t
+# define LZO_SIZEOF_LZO_INT64L_T LZO_SIZEOF_LZO_INT64E_T
+# define LZO_TYPEOF_LZO_INT64L_T LZO_TYPEOF_LZO_INT64E_T
+#else
+#endif
+#endif
+#if defined(lzo_int64l_t)
+ LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int64l_t) >= 8)
+ LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int64l_t) == LZO_SIZEOF_LZO_INT64L_T)
+#endif
+#if !defined(lzo_int32f_t)
+#if (LZO_SIZEOF_SIZE_T >= 8)
+# define lzo_int32f_t lzo_int64l_t
+# define lzo_uint32f_t lzo_uint64l_t
+# define LZO_SIZEOF_LZO_INT32F_T LZO_SIZEOF_LZO_INT64L_T
+# define LZO_TYPEOF_LZO_INT32F_T LZO_TYPEOF_LZO_INT64L_T
+#else
+# define lzo_int32f_t lzo_int32l_t
+# define lzo_uint32f_t lzo_uint32l_t
+# define LZO_SIZEOF_LZO_INT32F_T LZO_SIZEOF_LZO_INT32L_T
+# define LZO_TYPEOF_LZO_INT32F_T LZO_TYPEOF_LZO_INT32L_T
+#endif
+#endif
+#if 1
+ LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int32f_t) >= 4)
+ LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int32f_t) == LZO_SIZEOF_LZO_INT32F_T)
+#endif
+#if !defined(lzo_int64f_t)
+#if defined(lzo_int64l_t)
+# define lzo_int64f_t lzo_int64l_t
+# define lzo_uint64f_t lzo_uint64l_t
+# define LZO_SIZEOF_LZO_INT64F_T LZO_SIZEOF_LZO_INT64L_T
+# define LZO_TYPEOF_LZO_INT64F_T LZO_TYPEOF_LZO_INT64L_T
+#else
+#endif
+#endif
+#if defined(lzo_int64f_t)
+ LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int64f_t) >= 8)
+ LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int64f_t) == LZO_SIZEOF_LZO_INT64F_T)
+#endif
+#if !defined(lzo_intptr_t)
+#if 1 && (LZO_OS_OS400 && (LZO_SIZEOF_VOID_P == 16))
+# define __LZO_INTPTR_T_IS_POINTER 1
+# if !(LZO_LANG_ASSEMBLER)
+ typedef char * lzo_intptr_t;
+ typedef char * lzo_uintptr_t;
+# endif
+# define lzo_intptr_t lzo_intptr_t
+# define lzo_uintptr_t lzo_uintptr_t
+# define LZO_SIZEOF_LZO_INTPTR_T LZO_SIZEOF_VOID_P
+# define LZO_TYPEOF_LZO_INTPTR_T LZO_TYPEOF_CHAR_P
+#elif (LZO_CC_MSC && (_MSC_VER >= 1300) && (LZO_SIZEOF_VOID_P == 4) && (LZO_SIZEOF_INT == 4))
+# if !(LZO_LANG_ASSEMBLER)
+ typedef __w64 int lzo_intptr_t;
+ typedef __w64 unsigned int lzo_uintptr_t;
+# endif
+# define lzo_intptr_t lzo_intptr_t
+# define lzo_uintptr_t lzo_uintptr_t
+# define LZO_SIZEOF_LZO_INTPTR_T LZO_SIZEOF_INT
+# define LZO_TYPEOF_LZO_INTPTR_T LZO_TYPEOF_INT
+#elif (LZO_SIZEOF_SHORT == LZO_SIZEOF_VOID_P) && (LZO_SIZEOF_INT > LZO_SIZEOF_VOID_P)
+# define lzo_intptr_t short
+# define lzo_uintptr_t unsigned short
+# define LZO_SIZEOF_LZO_INTPTR_T LZO_SIZEOF_SHORT
+# define LZO_TYPEOF_LZO_INTPTR_T LZO_TYPEOF_SHORT
+#elif (LZO_SIZEOF_INT >= LZO_SIZEOF_VOID_P) && (LZO_SIZEOF_INT < LZO_SIZEOF_LONG)
+# define lzo_intptr_t int
+# define lzo_uintptr_t unsigned int
+# define LZO_SIZEOF_LZO_INTPTR_T LZO_SIZEOF_INT
+# define LZO_TYPEOF_LZO_INTPTR_T LZO_TYPEOF_INT
+#elif (LZO_SIZEOF_LONG >= LZO_SIZEOF_VOID_P)
+# define lzo_intptr_t long
+# define lzo_uintptr_t unsigned long
+# define LZO_SIZEOF_LZO_INTPTR_T LZO_SIZEOF_LONG
+# define LZO_TYPEOF_LZO_INTPTR_T LZO_TYPEOF_LONG
+#elif (LZO_SIZEOF_LZO_INT64L_T >= LZO_SIZEOF_VOID_P)
+# define lzo_intptr_t lzo_int64l_t
+# define lzo_uintptr_t lzo_uint64l_t
+# define LZO_SIZEOF_LZO_INTPTR_T LZO_SIZEOF_LZO_INT64L_T
+# define LZO_TYPEOF_LZO_INTPTR_T LZO_TYPEOF_LZO_INT64L_T
+#else
+# error "lzo_intptr_t"
+#endif
+#endif
+#if 1
+ LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_intptr_t) >= sizeof(void *))
+ LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_intptr_t) == sizeof(lzo_uintptr_t))
+#endif
+#if !defined(lzo_word_t)
+#if defined(LZO_WORDSIZE) && (LZO_WORDSIZE+0 > 0)
+#if (LZO_WORDSIZE == LZO_SIZEOF_LZO_INTPTR_T) && !(__LZO_INTPTR_T_IS_POINTER)
+# define lzo_word_t lzo_uintptr_t
+# define lzo_sword_t lzo_intptr_t
+# define LZO_SIZEOF_LZO_WORD_T LZO_SIZEOF_LZO_INTPTR_T
+# define LZO_TYPEOF_LZO_WORD_T LZO_TYPEOF_LZO_INTPTR_T
+#elif (LZO_WORDSIZE == LZO_SIZEOF_LONG)
+# define lzo_word_t unsigned long
+# define lzo_sword_t long
+# define LZO_SIZEOF_LZO_WORD_T LZO_SIZEOF_LONG
+# define LZO_TYPEOF_LZO_WORD_T LZO_TYPEOF_LONG
+#elif (LZO_WORDSIZE == LZO_SIZEOF_INT)
+# define lzo_word_t unsigned int
+# define lzo_sword_t int
+# define LZO_SIZEOF_LZO_WORD_T LZO_SIZEOF_INT
+# define LZO_TYPEOF_LZO_WORD_T LZO_TYPEOF_INT
+#elif (LZO_WORDSIZE == LZO_SIZEOF_SHORT)
+# define lzo_word_t unsigned short
+# define lzo_sword_t short
+# define LZO_SIZEOF_LZO_WORD_T LZO_SIZEOF_SHORT
+# define LZO_TYPEOF_LZO_WORD_T LZO_TYPEOF_SHORT
+#elif (LZO_WORDSIZE == 1)
+# define lzo_word_t unsigned char
+# define lzo_sword_t signed char
+# define LZO_SIZEOF_LZO_WORD_T 1
+# define LZO_TYPEOF_LZO_WORD_T LZO_TYPEOF_CHAR
+#elif (LZO_WORDSIZE == LZO_SIZEOF_LZO_INT64L_T)
+# define lzo_word_t lzo_uint64l_t
+# define lzo_sword_t lzo_int64l_t
+# define LZO_SIZEOF_LZO_WORD_T LZO_SIZEOF_LZO_INT64L_T
+# define LZO_TYPEOF_LZO_WORD_T LZO_SIZEOF_LZO_INT64L_T
+#elif (LZO_ARCH_SPU) && (LZO_CC_GNUC)
+#if 0
+# if !(LZO_LANG_ASSEMBLER)
+ typedef unsigned lzo_word_t __attribute__((__mode__(__V16QI__)));
+ typedef int lzo_sword_t __attribute__((__mode__(__V16QI__)));
+# endif
+# define lzo_word_t lzo_word_t
+# define lzo_sword_t lzo_sword_t
+# define LZO_SIZEOF_LZO_WORD_T 16
+# define LZO_TYPEOF_LZO_WORD_T LZO_TYPEOF___MODE_V16QI
+#endif
+#else
+# error "lzo_word_t"
+#endif
+#endif
+#endif
+#if 1 && defined(lzo_word_t)
+ LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_word_t) == LZO_WORDSIZE)
+ LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_sword_t) == LZO_WORDSIZE)
+#endif
+#if 1
+#define lzo_int8_t signed char
+#define lzo_uint8_t unsigned char
+#define LZO_SIZEOF_LZO_INT8_T 1
+#define LZO_TYPEOF_LZO_INT8_T LZO_TYPEOF_CHAR
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int8_t) == 1)
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int8_t) == sizeof(lzo_uint8_t))
+#endif
+#if defined(lzo_int16e_t)
+#define lzo_int16_t lzo_int16e_t
+#define lzo_uint16_t lzo_uint16e_t
+#define LZO_SIZEOF_LZO_INT16_T LZO_SIZEOF_LZO_INT16E_T
+#define LZO_TYPEOF_LZO_INT16_T LZO_TYPEOF_LZO_INT16E_T
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int16_t) == 2)
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int16_t) == sizeof(lzo_uint16_t))
+#endif
+#if defined(lzo_int32e_t)
+#define lzo_int32_t lzo_int32e_t
+#define lzo_uint32_t lzo_uint32e_t
+#define LZO_SIZEOF_LZO_INT32_T LZO_SIZEOF_LZO_INT32E_T
+#define LZO_TYPEOF_LZO_INT32_T LZO_TYPEOF_LZO_INT32E_T
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int32_t) == 4)
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int32_t) == sizeof(lzo_uint32_t))
+#endif
+#if defined(lzo_int64e_t)
+#define lzo_int64_t lzo_int64e_t
+#define lzo_uint64_t lzo_uint64e_t
+#define LZO_SIZEOF_LZO_INT64_T LZO_SIZEOF_LZO_INT64E_T
+#define LZO_TYPEOF_LZO_INT64_T LZO_TYPEOF_LZO_INT64E_T
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int64_t) == 8)
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int64_t) == sizeof(lzo_uint64_t))
+#endif
+#if 1
+#define lzo_int_least32_t lzo_int32l_t
+#define lzo_uint_least32_t lzo_uint32l_t
+#define LZO_SIZEOF_LZO_INT_LEAST32_T LZO_SIZEOF_LZO_INT32L_T
+#define LZO_TYPEOF_LZO_INT_LEAST32_T LZO_TYPEOF_LZO_INT32L_T
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int_least32_t) >= 4)
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int_least32_t) == sizeof(lzo_uint_least32_t))
+#endif
+#if defined(lzo_int64l_t)
+#define lzo_int_least64_t lzo_int64l_t
+#define lzo_uint_least64_t lzo_uint64l_t
+#define LZO_SIZEOF_LZO_INT_LEAST64_T LZO_SIZEOF_LZO_INT64L_T
+#define LZO_TYPEOF_LZO_INT_LEAST64_T LZO_TYPEOF_LZO_INT64L_T
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int_least64_t) >= 8)
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int_least64_t) == sizeof(lzo_uint_least64_t))
+#endif
+#if 1
+#define lzo_int_fast32_t lzo_int32f_t
+#define lzo_uint_fast32_t lzo_uint32f_t
+#define LZO_SIZEOF_LZO_INT_FAST32_T LZO_SIZEOF_LZO_INT32F_T
+#define LZO_TYPEOF_LZO_INT_FAST32_T LZO_TYPEOF_LZO_INT32F_T
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int_fast32_t) >= 4)
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int_fast32_t) == sizeof(lzo_uint_fast32_t))
+#endif
+#if defined(lzo_int64f_t)
+#define lzo_int_fast64_t lzo_int64f_t
+#define lzo_uint_fast64_t lzo_uint64f_t
+#define LZO_SIZEOF_LZO_INT_FAST64_T LZO_SIZEOF_LZO_INT64F_T
+#define LZO_TYPEOF_LZO_INT_FAST64_T LZO_TYPEOF_LZO_INT64F_T
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int_fast64_t) >= 8)
+LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int_fast64_t) == sizeof(lzo_uint_fast64_t))
+#endif
+#if !defined(LZO_INT16_C)
+# if (LZO_BROKEN_INTEGRAL_CONSTANTS) && (LZO_SIZEOF_INT >= 2)
+# define LZO_INT16_C(c) ((c) + 0)
+# define LZO_UINT16_C(c) ((c) + 0U)
+# elif (LZO_BROKEN_INTEGRAL_CONSTANTS) && (LZO_SIZEOF_LONG >= 2)
+# define LZO_INT16_C(c) ((c) + 0L)
+# define LZO_UINT16_C(c) ((c) + 0UL)
+# elif (LZO_SIZEOF_INT >= 2)
+# define LZO_INT16_C(c) (c)
+# define LZO_UINT16_C(c) (c##U)
+# elif (LZO_SIZEOF_LONG >= 2)
+# define LZO_INT16_C(c) (c##L)
+# define LZO_UINT16_C(c) (c##UL)
+# else
+# error "LZO_INT16_C"
+# endif
+#endif
+#if !defined(LZO_INT32_C)
+# if (LZO_BROKEN_INTEGRAL_CONSTANTS) && (LZO_SIZEOF_INT >= 4)
+# define LZO_INT32_C(c) ((c) + 0)
+# define LZO_UINT32_C(c) ((c) + 0U)
+# elif (LZO_BROKEN_INTEGRAL_CONSTANTS) && (LZO_SIZEOF_LONG >= 4)
+# define LZO_INT32_C(c) ((c) + 0L)
+# define LZO_UINT32_C(c) ((c) + 0UL)
+# elif (LZO_SIZEOF_INT >= 4)
+# define LZO_INT32_C(c) (c)
+# define LZO_UINT32_C(c) (c##U)
+# elif (LZO_SIZEOF_LONG >= 4)
+# define LZO_INT32_C(c) (c##L)
+# define LZO_UINT32_C(c) (c##UL)
+# elif (LZO_SIZEOF_LONG_LONG >= 4)
+# define LZO_INT32_C(c) (c##LL)
+# define LZO_UINT32_C(c) (c##ULL)
+# else
+# error "LZO_INT32_C"
+# endif
+#endif
+#if !defined(LZO_INT64_C) && defined(lzo_int64l_t)
+# if (LZO_BROKEN_INTEGRAL_CONSTANTS) && (LZO_SIZEOF_INT >= 8)
+# define LZO_INT64_C(c) ((c) + 0)
+# define LZO_UINT64_C(c) ((c) + 0U)
+# elif (LZO_BROKEN_INTEGRAL_CONSTANTS) && (LZO_SIZEOF_LONG >= 8)
+# define LZO_INT64_C(c) ((c) + 0L)
+# define LZO_UINT64_C(c) ((c) + 0UL)
+# elif (LZO_SIZEOF_INT >= 8)
+# define LZO_INT64_C(c) (c)
+# define LZO_UINT64_C(c) (c##U)
+# elif (LZO_SIZEOF_LONG >= 8)
+# define LZO_INT64_C(c) (c##L)
+# define LZO_UINT64_C(c) (c##UL)
+# else
+# error "LZO_INT64_C"
+# endif
+#endif
+#endif
+
+#endif /* already included */
+
+/* vim:set ts=4 sw=4 et: */
diff --git a/tools/z64compress/src/enc/stretchy_buffer.h b/tools/z64compress/src/enc/stretchy_buffer.h
new file mode 100644
index 0000000..cbd48a3
--- /dev/null
+++ b/tools/z64compress/src/enc/stretchy_buffer.h
@@ -0,0 +1,262 @@
+// stretchy_buffer.h - v1.03 - public domain - nothings.org/stb
+// a vector<>-like dynamic array for C
+//
+// version history:
+// 1.03 - compile as C++ maybe
+// 1.02 - tweaks to syntax for no good reason
+// 1.01 - added a "common uses" documentation section
+// 1.0 - fixed bug in the version I posted prematurely
+// 0.9 - rewrite to try to avoid strict-aliasing optimization
+// issues, but won't compile as C++
+//
+// Will probably not work correctly with strict-aliasing optimizations.
+//
+// The idea:
+//
+// This implements an approximation to C++ vector<> for C, in that it
+// provides a generic definition for dynamic arrays which you can
+// still access in a typesafe way using arr[i] or *(arr+i). However,
+// it is simply a convenience wrapper around the common idiom of
+// of keeping a set of variables (in a struct or globals) which store
+// - pointer to array
+// - the length of the "in-use" part of the array
+// - the current size of the allocated array
+//
+// I find it to be the single most useful non-built-in-structure when
+// programming in C (hash tables a close second), but to be clear
+// it lacks many of the capabilities of C++ vector<>: there is no
+// range checking, the object address isn't stable (see next section
+// for details), the set of methods available is small (although
+// the file stb.h has another implementation of stretchy buffers
+// called 'stb_arr' which provides more methods, e.g. for insertion
+// and deletion).
+//
+// How to use:
+//
+// Unlike other stb header file libraries, there is no need to
+// define an _IMPLEMENTATION symbol. Every #include creates as
+// much implementation is needed.
+//
+// stretchy_buffer.h does not define any types, so you do not
+// need to #include it to before defining data types that are
+// stretchy buffers, only in files that *manipulate* stretchy
+// buffers.
+//
+// If you want a stretchy buffer aka dynamic array containing
+// objects of TYPE, declare such an array as:
+//
+// TYPE *myarray = NULL;
+//
+// (There is no typesafe way to distinguish between stretchy
+// buffers and regular arrays/pointers; this is necessary to
+// make ordinary array indexing work on these objects.)
+//
+// Unlike C++ vector<>, the stretchy_buffer has the same
+// semantics as an object that you manually malloc and realloc.
+// The pointer may relocate every time you add a new object
+// to it, so you:
+//
+// 1. can't take long-term pointers to elements of the array
+// 2. have to return the pointer from functions which might expand it
+// (either as a return value or by storing it to a ptr-to-ptr)
+//
+// Now you can do the following things with this array:
+//
+// sb_free(TYPE *a) free the array
+// sb_count(TYPE *a) the number of elements in the array
+// sb_push(TYPE *a, TYPE v) adds v on the end of the array, a la push_back
+// sb_add(TYPE *a, int n) adds n uninitialized elements at end of array & returns pointer to first added
+// sb_last(TYPE *a) returns an lvalue of the last item in the array
+// a[n] access the nth (counting from 0) element of the array
+//
+// #define STRETCHY_BUFFER_NO_SHORT_NAMES to only export
+// names of the form 'stb_sb_' if you have a name that would
+// otherwise collide.
+//
+// Note that these are all macros and many of them evaluate
+// their arguments more than once, so the arguments should
+// be side-effect-free.
+//
+// Note that 'TYPE *a' in sb_push and sb_add must be lvalues
+// so that the library can overwrite the existing pointer if
+// the object has to be reallocated.
+//
+// In an out-of-memory condition, the code will try to
+// set up a null-pointer or otherwise-invalid-pointer
+// exception to happen later. It's possible optimizing
+// compilers could detect this write-to-null statically
+// and optimize away some of the code, but it should only
+// be along the failure path. Nevertheless, for more security
+// in the face of such compilers, #define STRETCHY_BUFFER_OUT_OF_MEMORY
+// to a statement such as assert(0) or exit(1) or something
+// to force a failure when out-of-memory occurs.
+//
+// Common use:
+//
+// The main application for this is when building a list of
+// things with an unknown quantity, either due to loading from
+// a file or through a process which produces an unpredictable
+// number.
+//
+// My most common idiom is something like:
+//
+// SomeStruct *arr = NULL;
+// while (something)
+// {
+// SomeStruct new_one;
+// new_one.whatever = whatever;
+// new_one.whatup = whatup;
+// new_one.foobar = barfoo;
+// sb_push(arr, new_one);
+// }
+//
+// and various closely-related factorings of that. For example,
+// you might have several functions to create/init new SomeStructs,
+// and if you use the above idiom, you might prefer to make them
+// return structs rather than take non-const-pointers-to-structs,
+// so you can do things like:
+//
+// SomeStruct *arr = NULL;
+// while (something)
+// {
+// if (case_A) {
+// sb_push(arr, some_func1());
+// } else if (case_B) {
+// sb_push(arr, some_func2());
+// } else {
+// sb_push(arr, some_func3());
+// }
+// }
+//
+// Note that the above relies on the fact that sb_push doesn't
+// evaluate its second argument more than once. The macros do
+// evaluate the *array* argument multiple times, and numeric
+// arguments may be evaluated multiple times, but you can rely
+// on the second argument of sb_push being evaluated only once.
+//
+// Of course, you don't have to store bare objects in the array;
+// if you need the objects to have stable pointers, store an array
+// of pointers instead:
+//
+// SomeStruct **arr = NULL;
+// while (something)
+// {
+// SomeStruct *new_one = malloc(sizeof(*new_one));
+// new_one->whatever = whatever;
+// new_one->whatup = whatup;
+// new_one->foobar = barfoo;
+// sb_push(arr, new_one);
+// }
+//
+// How it works:
+//
+// A long-standing tradition in things like malloc implementations
+// is to store extra data before the beginning of the block returned
+// to the user. The stretchy buffer implementation here uses the
+// same trick; the current-count and current-allocation-size are
+// stored before the beginning of the array returned to the user.
+// (This means you can't directly free() the pointer, because the
+// allocated pointer is different from the type-safe pointer provided
+// to the user.)
+//
+// The details are trivial and implementation is straightforward;
+// the main trick is in realizing in the first place that it's
+// possible to do this in a generic, type-safe way in C.
+//
+// Contributors:
+//
+// Timothy Wright (github:ZenToad)
+//
+// LICENSE
+//
+// See end of file for license information.
+
+#ifndef STB_STRETCHY_BUFFER_H_INCLUDED
+#define STB_STRETCHY_BUFFER_H_INCLUDED
+
+#ifndef NO_STRETCHY_BUFFER_SHORT_NAMES
+#define sb_free stb_sb_free
+#define sb_push stb_sb_push
+#define sb_count stb_sb_count
+#define sb_add stb_sb_add
+#define sb_last stb_sb_last
+#endif
+
+#define stb_sb_free(a) ((a) ? free(stb__sbraw(a)),0 : 0)
+#define stb_sb_push(a,v) (stb__sbmaybegrow(a,1), (a)[stb__sbn(a)++] = (v))
+#define stb_sb_count(a) ((a) ? stb__sbn(a) : 0)
+#define stb_sb_add(a,n) (stb__sbmaybegrow(a,n), stb__sbn(a)+=(n), &(a)[stb__sbn(a)-(n)])
+#define stb_sb_last(a) ((a)[stb__sbn(a)-1])
+
+#define stb__sbraw(a) ((int *) (a) - 2)
+#define stb__sbm(a) stb__sbraw(a)[0]
+#define stb__sbn(a) stb__sbraw(a)[1]
+
+#define stb__sbneedgrow(a,n) ((a)==0 || stb__sbn(a)+(n) >= stb__sbm(a))
+#define stb__sbmaybegrow(a,n) (stb__sbneedgrow(a,(n)) ? stb__sbgrow(a,n) : 0)
+#define stb__sbgrow(a,n) (*((void **)&(a)) = stb__sbgrowf((a), (n), sizeof(*(a))))
+
+#include <stdlib.h>
+
+static void * stb__sbgrowf(void *arr, int increment, int itemsize)
+{
+ int dbl_cur = arr ? 2*stb__sbm(arr) : 0;
+ int min_needed = stb_sb_count(arr) + increment;
+ int m = dbl_cur > min_needed ? dbl_cur : min_needed;
+ int *p = (int *) realloc(arr ? stb__sbraw(arr) : 0, itemsize * m + sizeof(int)*2);
+ if (p) {
+ if (!arr)
+ p[1] = 0;
+ p[0] = m;
+ return p+2;
+ } else {
+ #ifdef STRETCHY_BUFFER_OUT_OF_MEMORY
+ STRETCHY_BUFFER_OUT_OF_MEMORY ;
+ #endif
+ return (void *) (2*sizeof(int)); // try to force a NULL pointer exception later
+ }
+}
+#endif // STB_STRETCHY_BUFFER_H_INCLUDED
+
+
+/*
+------------------------------------------------------------------------------
+This software is available under 2 licenses -- choose whichever you prefer.
+------------------------------------------------------------------------------
+ALTERNATIVE A - MIT License
+Copyright (c) 2017 Sean Barrett
+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.
+------------------------------------------------------------------------------
+ALTERNATIVE B - Public Domain (www.unlicense.org)
+This is free and unencumbered software released into the public domain.
+Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
+software, either in source code form or as a compiled binary, for any purpose,
+commercial or non-commercial, and by any means.
+In jurisdictions that recognize copyright laws, the author or authors of this
+software dedicate any and all copyright interest in the software to the public
+domain. We make this dedication for the benefit of the public at large and to
+the detriment of our heirs and successors. We intend this dedication to be an
+overt act of relinquishment in perpetuity of all present and future rights to
+this software under copyright law.
+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 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/tools/z64compress/src/enc/ucl.c b/tools/z64compress/src/enc/ucl.c
new file mode 100644
index 0000000..59b6936
--- /dev/null
+++ b/tools/z64compress/src/enc/ucl.c
@@ -0,0 +1,50 @@
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include "ucl/ucl.h"
+
+int
+uclenc(
+ void *_src
+ , unsigned src_sz
+ , void *_dst
+ , unsigned *dst_sz
+ , void *_ctx
+)
+{
+ unsigned char *src = _src;
+ unsigned char *dst = _dst;
+ int r;
+ int level = 10;
+ ucl_uint result_sz;
+
+ int hlen = 8; /* header length; required due to MM's archives */
+ memset(dst, 0, hlen);
+ memcpy(dst, "UCL0", 4);
+ dst[4] = (src_sz >> 24);
+ dst[5] = (src_sz >> 16);
+ dst[6] = (src_sz >> 8);
+ dst[7] = (src_sz >> 0);
+
+ r = ucl_nrv2b_99_compress(
+ src /* in */
+ , src_sz /* in size */
+ , dst + hlen /* out */
+ , &result_sz /* out size */
+ , NULL /* callback */
+ , level /* level */
+ , NULL /* conf */
+ , NULL /* result */
+ );
+
+ if (r != UCL_E_OK)
+ {
+ fprintf(stderr, "[!] fatal compression error %d\n", r);
+ exit(EXIT_FAILURE);
+ }
+
+ *dst_sz = result_sz + hlen;
+
+ return 0;
+}
+
diff --git a/tools/z64compress/src/enc/ucl/comp/n2_99.ch b/tools/z64compress/src/enc/ucl/comp/n2_99.ch
new file mode 100644
index 0000000..06c5c64
--- /dev/null
+++ b/tools/z64compress/src/enc/ucl/comp/n2_99.ch
@@ -0,0 +1,651 @@
+/* n2_99.ch -- implementation of the NRV2[BDE]-99 compression algorithms
+
+ This file is part of the UCL data compression library.
+
+ Copyright (C) 1996-2004 Markus Franz Xaver Johannes Oberhumer
+ All Rights Reserved.
+
+ The UCL library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of
+ the License, or (at your option) any later version.
+
+ The UCL library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with the UCL library; see the file COPYING.
+ If not, write to the Free Software Foundation, Inc.,
+ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ Markus F.X.J. Oberhumer
+ <markus@oberhumer.com>
+ http://www.oberhumer.com/opensource/ucl/
+ */
+
+
+
+#define HAVE_MEMCMP 1
+#define HAVE_MEMCPY 1
+#define HAVE_MEMMOVE 1
+#define HAVE_MEMSET 1
+
+
+#include "../ucl_conf.h"
+#include "../ucl.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <stddef.h>
+#include <assert.h>
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+#define SWD_USE_MALLOC 1
+#if (ACC_OS_DOS16)
+#define SWD_HMASK (s->hmask)
+#define HEAD2_VAR
+#define IF_HEAD2(s) if (s->use_head2)
+#else
+#define SWD_HMASK (UCL_UINT32_C(65535))
+#define IF_HEAD2(s)
+#endif
+#define SWD_N (8*1024*1024ul) /* max. size of ring buffer */
+#define SWD_F 2048 /* upper limit for match length */
+#define SWD_THRESHOLD 1 /* lower limit for match length */
+
+#if defined(NRV2B)
+# define UCL_COMPRESS_T ucl_nrv2b_t
+# define ucl_swd_t ucl_nrv2b_swd_t
+# define ucl_nrv_99_compress ucl_nrv2b_99_compress
+# define M2_MAX_OFFSET 0xd00
+#elif defined(NRV2D)
+# define UCL_COMPRESS_T ucl_nrv2d_t
+# define ucl_swd_t ucl_nrv2d_swd_t
+# define ucl_nrv_99_compress ucl_nrv2d_99_compress
+# define M2_MAX_OFFSET 0x500
+#elif defined(NRV2E)
+# define UCL_COMPRESS_T ucl_nrv2e_t
+# define ucl_swd_t ucl_nrv2e_swd_t
+# define ucl_nrv_99_compress ucl_nrv2e_99_compress
+# define M2_MAX_OFFSET 0x500
+#else
+# error
+#endif
+#define ucl_swd_p ucl_swd_t * __UCL_MMODEL
+
+#include "ucl_mchw.ch"
+
+
+/***********************************************************************
+// start-step-stop prefix coding
+************************************************************************/
+
+static void code_prefix_ss11(UCL_COMPRESS_T *c, ucl_uint32 i)
+{
+ if (i >= 2)
+ {
+ ucl_uint32 t = 4;
+ i += 2;
+ do {
+ t <<= 1;
+ } while (i >= t);
+ t >>= 1;
+ do {
+ t >>= 1;
+ bbPutBit(c, (i & t) ? 1 : 0);
+ bbPutBit(c, 0);
+ } while (t > 2);
+ }
+ bbPutBit(c, (unsigned)i & 1);
+ bbPutBit(c, 1);
+}
+
+
+#if defined(NRV2D) || defined(NRV2E)
+static void code_prefix_ss12(UCL_COMPRESS_T *c, ucl_uint32 i)
+{
+ if (i >= 2)
+ {
+ ucl_uint32 t = 2;
+ do {
+ i -= t;
+ t <<= 2;
+ } while (i >= t);
+ do {
+ t >>= 1;
+ bbPutBit(c, (i & t) ? 1 : 0);
+ bbPutBit(c, 0);
+ t >>= 1;
+ bbPutBit(c, (i & t) ? 1 : 0);
+ } while (t > 2);
+ }
+ bbPutBit(c, (unsigned)i & 1);
+ bbPutBit(c, 1);
+}
+#endif
+
+
+static void
+code_match(UCL_COMPRESS_T *c, ucl_uint m_len, const ucl_uint m_off)
+{
+ unsigned m_low = 0;
+
+ while (m_len > c->conf.max_match)
+ {
+ code_match(c, c->conf.max_match - 3, m_off);
+ m_len -= c->conf.max_match - 3;
+ }
+
+ c->match_bytes += m_len;
+ if (m_len > c->result[3])
+ c->result[3] = m_len;
+ if (m_off > c->result[1])
+ c->result[1] = m_off;
+
+ bbPutBit(c, 0);
+
+#if defined(NRV2B)
+ if (m_off == c->last_m_off)
+ {
+ bbPutBit(c, 0);
+ bbPutBit(c, 1);
+ }
+ else
+ {
+ code_prefix_ss11(c, 1 + ((m_off - 1) >> 8));
+ bbPutByte(c, (unsigned)m_off - 1);
+ }
+ m_len = m_len - 1 - (m_off > M2_MAX_OFFSET);
+ if (m_len >= 4)
+ {
+ bbPutBit(c,0);
+ bbPutBit(c,0);
+ code_prefix_ss11(c, m_len - 4);
+ }
+ else
+ {
+ bbPutBit(c, m_len > 1);
+ bbPutBit(c, (unsigned)m_len & 1);
+ }
+#elif defined(NRV2D)
+ m_len = m_len - 1 - (m_off > M2_MAX_OFFSET);
+ assert(m_len > 0);
+ m_low = (m_len >= 4) ? 0u : (unsigned) m_len;
+ if (m_off == c->last_m_off)
+ {
+ bbPutBit(c, 0);
+ bbPutBit(c, 1);
+ bbPutBit(c, m_low > 1);
+ bbPutBit(c, m_low & 1);
+ }
+ else
+ {
+ code_prefix_ss12(c, 1 + ((m_off - 1) >> 7));
+ bbPutByte(c, ((((unsigned)m_off - 1) & 0x7f) << 1) | ((m_low > 1) ? 0 : 1));
+ bbPutBit(c, m_low & 1);
+ }
+ if (m_len >= 4)
+ code_prefix_ss11(c, m_len - 4);
+#elif defined(NRV2E)
+ m_len = m_len - 1 - (m_off > M2_MAX_OFFSET);
+ assert(m_len > 0);
+ m_low = (m_len <= 2);
+ if (m_off == c->last_m_off)
+ {
+ bbPutBit(c, 0);
+ bbPutBit(c, 1);
+ bbPutBit(c, m_low);
+ }
+ else
+ {
+ code_prefix_ss12(c, 1 + ((m_off - 1) >> 7));
+ bbPutByte(c, ((((unsigned)m_off - 1) & 0x7f) << 1) | (m_low ^ 1));
+ }
+ if (m_low)
+ bbPutBit(c, (unsigned)m_len - 1);
+ else if (m_len <= 4)
+ {
+ bbPutBit(c, 1);
+ bbPutBit(c, (unsigned)m_len - 3);
+ }
+ else
+ {
+ bbPutBit(c, 0);
+ code_prefix_ss11(c, m_len - 5);
+ }
+#else
+# error
+#endif
+
+ c->last_m_off = m_off;
+ (void)m_low;
+}
+
+
+static void
+code_run(UCL_COMPRESS_T *c, const ucl_bytep ii, ucl_uint lit)
+{
+ if (lit == 0)
+ return;
+ c->lit_bytes += lit;
+ if (lit > c->result[5])
+ c->result[5] = lit;
+ do {
+ bbPutBit(c, 1);
+ bbPutByte(c, *ii++);
+ } while (--lit > 0);
+}
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+static int
+len_of_coded_match(UCL_COMPRESS_T *c, ucl_uint m_len, ucl_uint m_off)
+{
+ int b;
+ if (m_len < 2 || (m_len == 2 && (m_off > M2_MAX_OFFSET))
+ || m_off > c->conf.max_offset)
+ return -1;
+ assert(m_off > 0);
+
+ m_len = m_len - 2 - (m_off > M2_MAX_OFFSET);
+
+ if (m_off == c->last_m_off)
+ b = 1 + 2;
+ else
+ {
+#if defined(NRV2B)
+ b = 1 + 10;
+ m_off = (m_off - 1) >> 8;
+ while (m_off > 0)
+ {
+ b += 2;
+ m_off >>= 1;
+ }
+#elif defined(NRV2D) || defined(NRV2E)
+ b = 1 + 9;
+ m_off = (m_off - 1) >> 7;
+ while (m_off > 0)
+ {
+ b += 3;
+ m_off >>= 2;
+ }
+#else
+# error
+#endif
+ }
+
+#if defined(NRV2B) || defined(NRV2D)
+ b += 2;
+ if (m_len < 3)
+ return b;
+ m_len -= 3;
+#elif defined(NRV2E)
+ b += 2;
+ if (m_len < 2)
+ return b;
+ if (m_len < 4)
+ return b + 1;
+ m_len -= 4;
+#else
+# error
+#endif
+ do {
+ b += 2;
+ m_len >>= 1;
+ } while (m_len > 0);
+
+ return b;
+}
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+#if !defined(NDEBUG)
+static
+void assert_match( const ucl_swd_p swd, ucl_uint m_len, ucl_uint m_off )
+{
+ const UCL_COMPRESS_T *c = swd->c;
+ ucl_uint d_off;
+
+ assert(m_len >= 2);
+ if (m_off <= (ucl_uint) (c->bp - c->in))
+ {
+ assert(c->bp - m_off + m_len < c->ip);
+ assert(ucl_memcmp(c->bp, c->bp - m_off, m_len) == 0);
+ }
+ else
+ {
+ assert(swd->dict != NULL);
+ d_off = m_off - (ucl_uint) (c->bp - c->in);
+ assert(d_off <= swd->dict_len);
+ if (m_len > d_off)
+ {
+ assert(ucl_memcmp(c->bp, swd->dict_end - d_off, d_off) == 0);
+ assert(c->in + m_len - d_off < c->ip);
+ assert(ucl_memcmp(c->bp + d_off, c->in, m_len - d_off) == 0);
+ }
+ else
+ {
+ assert(ucl_memcmp(c->bp, swd->dict_end - d_off, m_len) == 0);
+ }
+ }
+}
+#else
+# define assert_match(a,b,c) ((void)0)
+#endif
+
+
+#if defined(SWD_BEST_OFF)
+
+static void
+better_match ( const ucl_swd_p swd, ucl_uint *m_len, ucl_uint *m_off )
+{
+}
+
+#endif
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+UCL_PUBLIC(int)
+ucl_nrv_99_compress ( const ucl_bytep in, ucl_uint in_len,
+ ucl_bytep out, ucl_uintp out_len,
+ ucl_progress_callback_p cb,
+ int level,
+ const struct ucl_compress_config_p conf,
+ ucl_uintp result)
+{
+ const ucl_bytep ii;
+ ucl_uint lit;
+ ucl_uint m_len, m_off;
+ UCL_COMPRESS_T c_buffer;
+ UCL_COMPRESS_T * const c = &c_buffer;
+#undef s
+#if defined(SWD_USE_MALLOC)
+ ucl_swd_t the_swd = {0};
+# define s (&the_swd)
+#else
+// static ucl_swd_p s = 0;
+#endif
+ ucl_uint result_buffer[16];
+ int r;
+
+ struct swd_config_t
+ {
+ unsigned try_lazy;
+ ucl_uint good_length;
+ ucl_uint max_lazy;
+ ucl_uint nice_length;
+ ucl_uint max_chain;
+ ucl_uint32 flags;
+ ucl_uint32 max_offset;
+ };
+ const struct swd_config_t *sc;
+ static const struct swd_config_t swd_config[10] = {
+#define F SWD_F
+ /* faster compression */
+ { 0, 0, 0, 8, 4, 0, 48*1024L },
+ { 0, 0, 0, 16, 8, 0, 48*1024L },
+ { 0, 0, 0, 32, 16, 0, 48*1024L },
+ { 1, 4, 4, 16, 16, 0, 48*1024L },
+ { 1, 8, 16, 32, 32, 0, 48*1024L },
+ { 1, 8, 16, 128, 128, 0, 48*1024L },
+ { 2, 8, 32, 128, 256, 0, 128*1024L },
+ { 2, 32, 128, F, 2048, 1, 128*1024L },
+ { 2, 32, 128, F, 2048, 1, 256*1024L },
+ { 2, F, F, F, 4096, 1, SWD_N }
+ /* max. compression */
+#undef F
+ };
+
+ if (level < 1 || level > 10)
+ return UCL_E_INVALID_ARGUMENT;
+ sc = &swd_config[level - 1];
+
+ memset(c, 0, sizeof(*c));
+ memset(&c->conf, 0xff, sizeof(c->conf));
+ c->ip = c->in = in;
+ c->in_end = in + in_len;
+ c->out = out;
+ if (cb && cb->callback)
+ c->cb = cb;
+ cb = NULL;
+ c->result = result ? result : (ucl_uintp) result_buffer;
+ result = NULL;
+ ucl_memset(c->result, 0, 16*sizeof(*c->result));
+ c->result[0] = c->result[2] = c->result[4] = UCL_UINT_MAX;
+ if (conf)
+ ucl_memcpy(&c->conf, conf, sizeof(c->conf));
+ conf = NULL;
+ r = bbConfig(c, 0, 8);
+ if (r == 0)
+ r = bbConfig(c, c->conf.bb_endian, c->conf.bb_size);
+ if (r != 0)
+ return UCL_E_INVALID_ARGUMENT;
+ c->bb_op = out;
+
+ ii = c->ip; /* point to start of literal run */
+ lit = 0;
+
+#if !defined(s)
+ if (!s)
+ s = (ucl_swd_p) ucl_malloc(ucl_sizeof(*s));
+ if (!s)
+ return UCL_E_OUT_OF_MEMORY;
+ memset(s, 0, ucl_sizeof(*s));
+#endif
+ s->f = UCL_MIN((ucl_uint)SWD_F, c->conf.max_match);
+ s->n = UCL_MIN((ucl_uint)SWD_N, sc->max_offset);
+ s->hmask = UCL_UINT32_C(65535);
+#ifdef HEAD2_VAR
+ s->use_head2 = 1;
+#if defined(ACC_MM_AHSHIFT)
+ if (ACC_MM_AHSHIFT != 3) {
+ s->hmask = 16 * 1024 - 1;
+ s->use_head2 = 0;
+ }
+#endif
+#endif
+ if (c->conf.max_offset != UCL_UINT_MAX)
+ s->n = UCL_MIN(SWD_N, c->conf.max_offset);
+ if (in_len < s->n)
+ s->n = UCL_MAX(in_len, 256);
+ if (s->f < 8 || s->n < 256)
+ return UCL_E_INVALID_ARGUMENT;
+ r = init_match(c,s,NULL,0,sc->flags);
+ if (r == UCL_E_OK && (SWD_HSIZE - 1 != s->hmask))
+ r = UCL_E_ERROR;
+ if (r != UCL_E_OK)
+ {
+#if !defined(s)
+ ucl_free(s);
+#endif
+ return r;
+ }
+ if (sc->max_chain > 0)
+ s->max_chain = sc->max_chain;
+ if (sc->nice_length > 0)
+ s->nice_length = sc->nice_length;
+ if (c->conf.max_match < s->nice_length)
+ s->nice_length = c->conf.max_match;
+
+ if (c->cb)
+ (*c->cb->callback)(0,0,-1,c->cb->user);
+
+ c->last_m_off = 1;
+ r = find_match(c,s,0,0);
+ if (r != UCL_E_OK)
+ return r;
+ while (c->look > 0)
+ {
+ ucl_uint ahead;
+ ucl_uint max_ahead;
+ int l1, l2;
+
+ c->codesize = (ucl_uint) (c->bb_op - out);
+
+ m_len = c->m_len;
+ m_off = c->m_off;
+
+ assert(c->bp == c->ip - c->look);
+ assert(c->bp >= in);
+ if (lit == 0)
+ ii = c->bp;
+ assert(ii + lit == c->bp);
+ assert(s->b_char == *(c->bp));
+
+ if (m_len < 2 || (m_len == 2 && (m_off > M2_MAX_OFFSET))
+ || m_off > c->conf.max_offset)
+ {
+ /* a literal */
+ lit++;
+ s->max_chain = sc->max_chain;
+ r = find_match(c,s,1,0);
+ assert(r == 0);
+ continue;
+ }
+
+ /* a match */
+#if defined(SWD_BEST_OFF)
+ if (s->use_best_off)
+ better_match(s,&m_len,&m_off);
+#endif
+ assert_match(s,m_len,m_off);
+
+ /* shall we try a lazy match ? */
+ ahead = 0;
+ if (sc->try_lazy <= 0 || m_len >= sc->max_lazy || m_off == c->last_m_off)
+ {
+ /* no */
+ l1 = 0;
+ max_ahead = 0;
+ }
+ else
+ {
+ /* yes, try a lazy match */
+ l1 = len_of_coded_match(c,m_len,m_off);
+ assert(l1 > 0);
+ max_ahead = UCL_MIN((ucl_uint)sc->try_lazy, m_len - 1);
+ }
+
+ while (ahead < max_ahead && c->look > m_len)
+ {
+ if (m_len >= sc->good_length)
+ s->max_chain = sc->max_chain >> 2;
+ else
+ s->max_chain = sc->max_chain;
+ r = find_match(c,s,1,0);
+ ahead++;
+
+ assert(r == 0);
+ assert(c->look > 0);
+ assert(ii + lit + ahead == c->bp);
+
+ if (c->m_len < 2)
+ continue;
+#if defined(SWD_BEST_OFF)
+ if (s->use_best_off)
+ better_match(s,&c->m_len,&c->m_off);
+#endif
+ l2 = len_of_coded_match(c,c->m_len,c->m_off);
+ if (l2 < 0)
+ continue;
+#if 1
+ if (l1 + (int)(ahead + c->m_len - m_len) * 5 > l2 + (int)(ahead) * 9)
+#else
+ if (l1 > l2)
+#endif
+ {
+ c->lazy++;
+ assert_match(s,c->m_len,c->m_off);
+
+#if 0
+ if (l3 > 0)
+ {
+ /* code previous run */
+ code_run(c,ii,lit);
+ lit = 0;
+ /* code shortened match */
+ code_match(c,ahead,m_off);
+ }
+ else
+#endif
+ {
+ lit += ahead;
+ assert(ii + lit == c->bp);
+ }
+ goto lazy_match_done;
+ }
+ }
+
+ assert(ii + lit + ahead == c->bp);
+
+ /* 1 - code run */
+ code_run(c,ii,lit);
+ lit = 0;
+
+ /* 2 - code match */
+ code_match(c,m_len,m_off);
+ s->max_chain = sc->max_chain;
+ r = find_match(c,s,m_len,1+ahead);
+ assert(r == 0);
+
+lazy_match_done: ;
+ }
+
+ /* store final run */
+ code_run(c,ii,lit);
+
+ /* EOF */
+ bbPutBit(c, 0);
+#if defined(NRV2B)
+ code_prefix_ss11(c, UCL_UINT32_C(0x1000000));
+ bbPutByte(c, 0xff);
+#elif defined(NRV2D) || defined(NRV2E)
+ code_prefix_ss12(c, UCL_UINT32_C(0x1000000));
+ bbPutByte(c, 0xff);
+#else
+# error
+#endif
+ bbFlushBits(c, 0);
+
+ assert(c->textsize == in_len);
+ c->codesize = (ucl_uint) (c->bb_op - out);
+ *out_len = (ucl_uint) (c->bb_op - out);
+ if (c->cb)
+ (*c->cb->callback)(c->textsize,c->codesize,4,c->cb->user);
+
+#if 0
+ printf("%7ld %7ld -> %7ld %7ld %7ld %ld (max: %d %d %d)\n",
+ (long) c->textsize, (long) in_len, (long) c->codesize,
+ c->match_bytes, c->lit_bytes, c->lazy,
+ c->result[1], c->result[3], c->result[5]);
+#endif
+ assert(c->lit_bytes + c->match_bytes == in_len);
+
+ swd_exit(s);
+#if !defined(s)
+ ucl_free(s);
+#endif
+ return UCL_E_OK;
+#undef s
+}
+
+
+/*
+vi:ts=4:et
+*/
+
diff --git a/tools/z64compress/src/enc/ucl/comp/n2b_99.c b/tools/z64compress/src/enc/ucl/comp/n2b_99.c
new file mode 100644
index 0000000..e3b11cc
--- /dev/null
+++ b/tools/z64compress/src/enc/ucl/comp/n2b_99.c
@@ -0,0 +1,38 @@
+/* n2b_99.c -- implementation of the NRV2B-99 compression algorithm
+
+ This file is part of the UCL data compression library.
+
+ Copyright (C) 1996-2004 Markus Franz Xaver Johannes Oberhumer
+ All Rights Reserved.
+
+ The UCL library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of
+ the License, or (at your option) any later version.
+
+ The UCL library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with the UCL library; see the file COPYING.
+ If not, write to the Free Software Foundation, Inc.,
+ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ Markus F.X.J. Oberhumer
+ <markus@oberhumer.com>
+ http://www.oberhumer.com/opensource/ucl/
+ */
+
+
+
+#define NRV2B
+#include "n2_99.ch"
+#undef NRV2B
+
+
+/*
+vi:ts=4:et
+*/
+
diff --git a/tools/z64compress/src/enc/ucl/comp/ucl_mchw.ch b/tools/z64compress/src/enc/ucl/comp/ucl_mchw.ch
new file mode 100644
index 0000000..c462576
--- /dev/null
+++ b/tools/z64compress/src/enc/ucl/comp/ucl_mchw.ch
@@ -0,0 +1,312 @@
+/* ucl_mchw.ch -- matching functions using a window
+
+ This file is part of the UCL data compression library.
+
+ Copyright (C) 1996-2004 Markus Franz Xaver Johannes Oberhumer
+ All Rights Reserved.
+
+ The UCL library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of
+ the License, or (at your option) any later version.
+
+ The UCL library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with the UCL library; see the file COPYING.
+ If not, write to the Free Software Foundation, Inc.,
+ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ Markus F.X.J. Oberhumer
+ <markus@oberhumer.com>
+ http://www.oberhumer.com/opensource/ucl/
+ */
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+typedef struct
+{
+ int init;
+
+ ucl_uint look; /* bytes in lookahead buffer */
+
+ ucl_uint m_len;
+ ucl_uint m_off;
+
+ ucl_uint last_m_len;
+ ucl_uint last_m_off;
+
+ const ucl_bytep bp;
+ const ucl_bytep ip;
+ const ucl_bytep in;
+ const ucl_bytep in_end;
+ ucl_bytep out;
+
+ ucl_uint32 bb_b;
+ unsigned bb_k;
+ unsigned bb_c_endian;
+ unsigned bb_c_s;
+ unsigned bb_c_s8;
+ ucl_bytep bb_p;
+ ucl_bytep bb_op;
+
+ struct ucl_compress_config_t conf;
+ ucl_uintp result;
+
+ ucl_progress_callback_p cb;
+
+ ucl_uint textsize; /* text size counter */
+ ucl_uint codesize; /* code size counter */
+ ucl_uint printcount; /* counter for reporting progress every 1K bytes */
+
+ /* some stats */
+ unsigned long lit_bytes;
+ unsigned long match_bytes;
+ unsigned long rep_bytes;
+ unsigned long lazy;
+}
+UCL_COMPRESS_T;
+
+
+
+#if (ACC_OS_TOS && (ACC_CC_PUREC || ACC_CC_TURBOC))
+/* the cast is needed to work around a code generation bug */
+#define getbyte(c) ((c).ip < (c).in_end ? (int) (unsigned) *((c).ip)++ : (-1))
+#else
+#define getbyte(c) ((c).ip < (c).in_end ? *((c).ip)++ : (-1))
+#endif
+
+#include "ucl_swd.ch"
+
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+static int
+init_match ( UCL_COMPRESS_T *c, ucl_swd_t *s,
+ const ucl_bytep dict, ucl_uint dict_len,
+ ucl_uint32 flags )
+{
+ int r;
+
+ assert(!c->init);
+ c->init = 1;
+
+ s->c = c;
+
+ c->last_m_len = c->last_m_off = 0;
+
+ c->textsize = c->codesize = c->printcount = 0;
+ c->lit_bytes = c->match_bytes = c->rep_bytes = 0;
+ c->lazy = 0;
+
+ r = swd_init(s,dict,dict_len);
+ if (r != UCL_E_OK)
+ {
+ swd_exit(s);
+ return r;
+ }
+
+ s->use_best_off = (flags & 1) ? 1 : 0;
+ return UCL_E_OK;
+}
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+static int
+find_match ( UCL_COMPRESS_T *c, ucl_swd_t *s,
+ ucl_uint this_len, ucl_uint skip )
+{
+ assert(c->init);
+
+ if (skip > 0)
+ {
+ assert(this_len >= skip);
+ swd_accept(s, this_len - skip);
+ c->textsize += this_len - skip + 1;
+ }
+ else
+ {
+ assert(this_len <= 1);
+ c->textsize += this_len - skip;
+ }
+
+ s->m_len = SWD_THRESHOLD;
+#ifdef SWD_BEST_OFF
+ if (s->use_best_off)
+ memset(s->best_pos,0,sizeof(s->best_pos));
+#endif
+ swd_findbest(s);
+ c->m_len = s->m_len;
+#if defined(__UCL_CHECKER)
+ /* s->m_off may be uninitialized if we didn't find a match,
+ * but then its value will never be used.
+ */
+ c->m_off = (s->m_len == SWD_THRESHOLD) ? 0 : s->m_off;
+#else
+ c->m_off = s->m_off;
+#endif
+
+ swd_getbyte(s);
+
+ if (s->b_char < 0)
+ {
+ c->look = 0;
+ c->m_len = 0;
+ swd_exit(s);
+ }
+ else
+ {
+ c->look = s->look + 1;
+ }
+ c->bp = c->ip - c->look;
+
+#if 0
+ /* brute force match search */
+ if (c->m_len > SWD_THRESHOLD && c->m_len + 1 <= c->look)
+ {
+ const ucl_bytep ip = c->bp;
+ const ucl_bytep m = c->bp - c->m_off;
+ const ucl_bytep in = c->in;
+
+ if (ip - in > s->n)
+ in = ip - s->n;
+ for (;;)
+ {
+ while (*in != *ip)
+ in++;
+ if (in == ip)
+ break;
+ if (in != m)
+ if (memcmp(in,ip,c->m_len+1) == 0)
+ printf("%p %p %p %5d\n",in,ip,m,c->m_len);
+ in++;
+ }
+ }
+#endif
+
+ if (c->cb && c->textsize > c->printcount)
+ {
+ (*c->cb->callback)(c->textsize,c->codesize,3,c->cb->user);
+ c->printcount += 1024;
+ }
+
+ return UCL_E_OK;
+}
+
+
+/***********************************************************************
+// bit buffer
+************************************************************************/
+
+static int bbConfig(UCL_COMPRESS_T *c, int endian, int bitsize)
+{
+ if (endian != -1)
+ {
+ if (endian != 0)
+ return UCL_E_ERROR;
+ c->bb_c_endian = endian;
+ }
+ if (bitsize != -1)
+ {
+ if (bitsize != 8 && bitsize != 16 && bitsize != 32)
+ return UCL_E_ERROR;
+ c->bb_c_s = bitsize;
+ c->bb_c_s8 = bitsize / 8;
+ }
+ c->bb_b = 0; c->bb_k = 0;
+ c->bb_p = NULL;
+ c->bb_op = NULL;
+ return UCL_E_OK;
+}
+
+
+static void bbWriteBits(UCL_COMPRESS_T *c)
+{
+ ucl_bytep p = c->bb_p;
+ ucl_uint32 b = c->bb_b;
+
+ p[0] = UCL_BYTE(b >> 0);
+ if (c->bb_c_s >= 16)
+ {
+ p[1] = UCL_BYTE(b >> 8);
+ if (c->bb_c_s == 32)
+ {
+ p[2] = UCL_BYTE(b >> 16);
+ p[3] = UCL_BYTE(b >> 24);
+ }
+ }
+}
+
+
+static void bbPutBit(UCL_COMPRESS_T *c, unsigned bit)
+{
+ assert(bit == 0 || bit == 1);
+ assert(c->bb_k <= c->bb_c_s);
+
+ if (c->bb_k < c->bb_c_s)
+ {
+ if (c->bb_k == 0)
+ {
+ assert(c->bb_p == NULL);
+ c->bb_p = c->bb_op;
+ c->bb_op += c->bb_c_s8;
+ }
+ assert(c->bb_p != NULL);
+ assert(c->bb_p + c->bb_c_s8 <= c->bb_op);
+
+ c->bb_b = (c->bb_b << 1) + bit;
+ c->bb_k++;
+ }
+ else
+ {
+ assert(c->bb_p != NULL);
+ assert(c->bb_p + c->bb_c_s8 <= c->bb_op);
+
+ bbWriteBits(c);
+ c->bb_p = c->bb_op;
+ c->bb_op += c->bb_c_s8;
+ c->bb_b = bit;
+ c->bb_k = 1;
+ }
+}
+
+
+static void bbPutByte(UCL_COMPRESS_T *c, unsigned b)
+{
+ /**printf("putbyte %p %p %x (%d)\n", op, bb_p, x, bb_k);*/
+ assert(c->bb_p == NULL || c->bb_p + c->bb_c_s8 <= c->bb_op);
+ *c->bb_op++ = UCL_BYTE(b);
+}
+
+
+static void bbFlushBits(UCL_COMPRESS_T *c, unsigned filler_bit)
+{
+ if (c->bb_k > 0)
+ {
+ assert(c->bb_k <= c->bb_c_s);
+ while (c->bb_k != c->bb_c_s)
+ bbPutBit(c, filler_bit);
+ bbWriteBits(c);
+ c->bb_k = 0;
+ }
+ c->bb_p = NULL;
+}
+
+
+
+/*
+vi:ts=4:et
+*/
+
diff --git a/tools/z64compress/src/enc/ucl/comp/ucl_swd.ch b/tools/z64compress/src/enc/ucl/comp/ucl_swd.ch
new file mode 100644
index 0000000..8b82941
--- /dev/null
+++ b/tools/z64compress/src/enc/ucl/comp/ucl_swd.ch
@@ -0,0 +1,686 @@
+/* ucl_swd.c -- sliding window dictionary
+
+ This file is part of the UCL data compression library.
+
+ Copyright (C) 1996-2004 Markus Franz Xaver Johannes Oberhumer
+ All Rights Reserved.
+
+ The UCL library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of
+ the License, or (at your option) any later version.
+
+ The UCL library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with the UCL library; see the file COPYING.
+ If not, write to the Free Software Foundation, Inc.,
+ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ Markus F.X.J. Oberhumer
+ <markus@oberhumer.com>
+ http://www.oberhumer.com/opensource/ucl/
+ */
+
+
+#if (UCL_UINT_MAX < UCL_0xffffffffL)
+# error "UCL_UINT_MAX"
+#endif
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+/* unsigned type for dictionary access - don't waste memory here */
+#if (0UL + SWD_N + SWD_F + SWD_F < 0UL + USHRT_MAX)
+ typedef unsigned short swd_uint;
+# define SWD_UINT_MAX USHRT_MAX
+#else
+ typedef ucl_uint swd_uint;
+# define SWD_UINT_MAX UCL_UINT_MAX
+#endif
+#define swd_uintp swd_uint __UCL_MMODEL *
+#define SWD_UINT(x) ((swd_uint)(x))
+
+
+#ifndef SWD_MAX_CHAIN
+# define SWD_MAX_CHAIN 2048
+#endif
+#define SWD_HSIZE (SWD_HMASK + 1)
+
+#if !defined(HEAD3)
+#if 1
+# define HEAD3(b,p) \
+ (((0x9f5f*(((((ucl_uint32)b[p]<<5)^b[p+1])<<5)^b[p+2]))>>5) & SWD_HMASK)
+#else
+# define HEAD3(b,p) \
+ (((0x9f5f*(((((ucl_uint32)b[p+2]<<5)^b[p+1])<<5)^b[p]))>>5) & SWD_HMASK)
+#endif
+#endif
+
+#if !defined(HEAD2)
+#if (SWD_THRESHOLD == 1)
+# if 1 && defined(UA_GET2)
+# define HEAD2(b,p) UA_GET2(&(b[p]))
+# else
+# define HEAD2(b,p) (b[p] ^ ((unsigned)b[p+1]<<8))
+# endif
+# define NIL2 SWD_UINT_MAX
+#endif
+#endif
+
+
+#if defined(__UCL_CHECKER)
+ /* malloc arrays of the exact size to detect any overrun */
+# ifndef SWD_USE_MALLOC
+# define SWD_USE_MALLOC
+# endif
+#endif
+
+
+typedef struct
+{
+/* public - "built-in" */
+ ucl_uint n;
+ ucl_uint f;
+ ucl_uint threshold;
+ ucl_uint hmask;
+
+/* public - configuration */
+ ucl_uint max_chain;
+ ucl_uint nice_length;
+ ucl_bool use_best_off;
+ ucl_uint lazy_insert;
+
+/* public - output */
+ ucl_uint m_len;
+ ucl_uint m_off;
+ ucl_uint look;
+ int b_char;
+#if defined(SWD_BEST_OFF)
+ ucl_uint best_off[ SWD_BEST_OFF ];
+#endif
+
+/* semi public */
+ UCL_COMPRESS_T *c;
+ ucl_uint m_pos;
+#if defined(SWD_BEST_OFF)
+ ucl_uint best_pos[ SWD_BEST_OFF ];
+#endif
+
+/* private */
+ const ucl_bytep dict;
+ const ucl_bytep dict_end;
+ ucl_uint dict_len;
+
+/* private */
+ ucl_uint ip; /* input pointer (lookahead) */
+ ucl_uint bp; /* buffer pointer */
+ ucl_uint rp; /* remove pointer */
+ ucl_uint b_size;
+
+ ucl_bytep b_wrap;
+
+ ucl_uint node_count;
+ ucl_uint first_rp;
+
+#if defined(SWD_USE_MALLOC)
+ ucl_bytep b;
+ swd_uintp head3;
+ swd_uintp succ3;
+ swd_uintp best3;
+ swd_uintp llen3;
+#ifdef HEAD2
+ swd_uintp head2;
+#ifdef HEAD2_VAR
+ int use_head2;
+#endif
+#endif
+#else
+ unsigned char b [ SWD_N + SWD_F + SWD_F ];
+ swd_uint head3 [ SWD_HSIZE ];
+ swd_uint succ3 [ SWD_N + SWD_F ];
+ swd_uint best3 [ SWD_N + SWD_F ];
+ swd_uint llen3 [ SWD_HSIZE ];
+#ifdef HEAD2
+ swd_uint head2 [ UCL_UINT32_C(65536) ];
+#endif
+#endif
+}
+ucl_swd_t;
+
+
+/* Access macro for head3.
+ * head3[key] may be uninitialized if the list is emtpy,
+ * but then its value will never be used.
+ */
+#if defined(__UCL_CHECKER)
+# define s_get_head3(s,key) \
+ ((s->llen3[key] == 0) ? SWD_UINT_MAX : s->head3[key])
+#else
+# define s_get_head3(s,key) s->head3[key]
+#endif
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+static
+void swd_initdict(ucl_swd_t *s, const ucl_bytep dict, ucl_uint dict_len)
+{
+ s->dict = s->dict_end = NULL;
+ s->dict_len = 0;
+
+ if (!dict || dict_len <= 0)
+ return;
+ if (dict_len > s->n)
+ {
+ dict += dict_len - s->n;
+ dict_len = s->n;
+ }
+
+ s->dict = dict;
+ s->dict_len = dict_len;
+ s->dict_end = dict + dict_len;
+ ucl_memcpy(s->b,dict,dict_len);
+ s->ip = dict_len;
+}
+
+
+static
+void swd_insertdict(ucl_swd_t *s, ucl_uint node, ucl_uint len)
+{
+ ucl_uint key;
+
+ s->node_count = s->n - len;
+ s->first_rp = node;
+
+ while (len-- > 0)
+ {
+ key = HEAD3(s->b,node);
+ s->succ3[node] = s_get_head3(s,key);
+ s->head3[key] = SWD_UINT(node);
+ s->best3[node] = SWD_UINT(s->f + 1);
+ s->llen3[key]++;
+ assert(s->llen3[key] <= s->n);
+
+#ifdef HEAD2
+ IF_HEAD2(s) {
+ key = HEAD2(s->b,node);
+ s->head2[key] = SWD_UINT(node);
+ }
+#endif
+
+ node++;
+ }
+}
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+static
+int swd_init(ucl_swd_t *s, const ucl_bytep dict, ucl_uint dict_len)
+{
+#if defined(SWD_USE_MALLOC)
+ s->b = NULL;
+ s->head3 = NULL;
+ s->succ3 = NULL;
+ s->best3 = NULL;
+ s->llen3 = NULL;
+#ifdef HEAD2
+ s->head2 = NULL;
+#endif
+#endif
+
+ if (s->n == 0)
+ s->n = SWD_N;
+ if (s->f == 0)
+ s->f = SWD_F;
+ s->threshold = SWD_THRESHOLD;
+ if (s->n > SWD_N || s->f > SWD_F)
+ return UCL_E_INVALID_ARGUMENT;
+
+#if defined(SWD_USE_MALLOC)
+ s->b = (ucl_bytep) ucl_alloc(1, s->n + s->f + s->f);
+ s->head3 = (swd_uintp) ucl_alloc(SWD_HSIZE, sizeof(*s->head3));
+ s->succ3 = (swd_uintp) ucl_alloc(s->n + s->f, sizeof(*s->succ3));
+ s->best3 = (swd_uintp) ucl_alloc(s->n + s->f, sizeof(*s->best3));
+ s->llen3 = (swd_uintp) ucl_alloc(SWD_HSIZE, sizeof(*s->llen3));
+ if (!s->b || !s->head3 || !s->succ3 || !s->best3 || !s->llen3)
+ return UCL_E_OUT_OF_MEMORY;
+#ifdef HEAD2
+ IF_HEAD2(s) {
+ s->head2 = (swd_uintp) ucl_alloc(UCL_UINT32_C(65536), sizeof(*s->head2));
+ if (!s->head2)
+ return UCL_E_OUT_OF_MEMORY;
+ }
+#endif
+#endif
+
+ /* defaults */
+ s->max_chain = SWD_MAX_CHAIN;
+ s->nice_length = s->f;
+ s->use_best_off = 0;
+ s->lazy_insert = 0;
+
+ s->b_size = s->n + s->f;
+ if (s->b_size + s->f >= SWD_UINT_MAX)
+ return UCL_E_ERROR;
+ s->b_wrap = s->b + s->b_size;
+ s->node_count = s->n;
+
+ ucl_memset(s->llen3, 0, (ucl_uint)sizeof(s->llen3[0]) * SWD_HSIZE);
+#ifdef HEAD2
+ IF_HEAD2(s) {
+#if 1
+ ucl_memset(s->head2, 0xff, (ucl_uint)sizeof(s->head2[0]) * UCL_UINT32_C(65536));
+ assert(s->head2[0] == NIL2);
+#else
+ ucl_uint32 i;
+ for (i = 0; i < UCL_UINT32_C(65536); i++)
+ s->head2[i] = NIL2;
+#endif
+ }
+#endif
+
+ s->ip = 0;
+ swd_initdict(s,dict,dict_len);
+ s->bp = s->ip;
+ s->first_rp = s->ip;
+
+ assert(s->ip + s->f <= s->b_size);
+#if 1
+ s->look = (ucl_uint) (s->c->in_end - s->c->ip);
+ if (s->look > 0)
+ {
+ if (s->look > s->f)
+ s->look = s->f;
+ ucl_memcpy(&s->b[s->ip],s->c->ip,s->look);
+ s->c->ip += s->look;
+ s->ip += s->look;
+ }
+#else
+ s->look = 0;
+ while (s->look < s->f)
+ {
+ int c;
+ if ((c = getbyte(*(s->c))) < 0)
+ break;
+ s->b[s->ip] = UCL_BYTE(c);
+ s->ip++;
+ s->look++;
+ }
+#endif
+ if (s->ip == s->b_size)
+ s->ip = 0;
+
+ if (s->look >= 2 && s->dict_len > 0)
+ swd_insertdict(s,0,s->dict_len);
+
+ s->rp = s->first_rp;
+ if (s->rp >= s->node_count)
+ s->rp -= s->node_count;
+ else
+ s->rp += s->b_size - s->node_count;
+
+#if defined(__UCL_CHECKER)
+ /* initialize memory for the first few HEAD3 (if s->ip is not far
+ * enough ahead to do this job for us). The value doesn't matter. */
+ if (s->look < 3)
+ ucl_memset(&s->b[s->bp+s->look],0,3);
+#endif
+
+ return UCL_E_OK;
+}
+
+
+static
+void swd_exit(ucl_swd_t *s)
+{
+#if defined(SWD_USE_MALLOC)
+ /* free in reverse order of allocations */
+# ifdef HEAD2
+ ucl_free(s->head2); s->head2 = NULL;
+#endif
+ ucl_free(s->llen3); s->llen3 = NULL;
+ ucl_free(s->best3); s->best3 = NULL;
+ ucl_free(s->succ3); s->succ3 = NULL;
+ ucl_free(s->head3); s->head3 = NULL;
+ ucl_free(s->b); s->b = NULL;
+#else
+ //ACC_UNUSED(s);
+#endif
+}
+
+
+#define swd_pos2off(s,pos) \
+ (s->bp > (pos) ? s->bp - (pos) : s->b_size - ((pos) - s->bp))
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+static
+void swd_getbyte(ucl_swd_t *s)
+{
+ int c;
+
+ if ((c = getbyte(*(s->c))) < 0)
+ {
+ if (s->look > 0)
+ --s->look;
+#if defined(__UCL_CHECKER)
+ /* initialize memory - value doesn't matter */
+ s->b[s->ip] = 0;
+ if (s->ip < s->f)
+ s->b_wrap[s->ip] = 0;
+#endif
+ }
+ else
+ {
+ s->b[s->ip] = UCL_BYTE(c);
+ if (s->ip < s->f)
+ s->b_wrap[s->ip] = UCL_BYTE(c);
+ }
+ if (++s->ip == s->b_size)
+ s->ip = 0;
+ if (++s->bp == s->b_size)
+ s->bp = 0;
+ if (++s->rp == s->b_size)
+ s->rp = 0;
+}
+
+
+/***********************************************************************
+// remove node from lists
+************************************************************************/
+
+static
+void swd_remove_node(ucl_swd_t *s, ucl_uint node)
+{
+ if (s->node_count == 0)
+ {
+ ucl_uint key;
+
+#ifdef UCL_DEBUG
+ if (s->first_rp != UCL_UINT_MAX)
+ {
+ if (node != s->first_rp)
+ printf("Remove %5u: %5u %5u %5u %5u %6u %6u\n",
+ node, s->rp, s->ip, s->bp, s->first_rp,
+ s->ip - node, s->ip - s->bp);
+ assert(node == s->first_rp);
+ s->first_rp = UCL_UINT_MAX;
+ }
+#endif
+
+ key = HEAD3(s->b,node);
+ assert(s->llen3[key] > 0);
+ --s->llen3[key];
+
+#ifdef HEAD2
+ IF_HEAD2(s) {
+ key = HEAD2(s->b,node);
+ assert(s->head2[key] != NIL2);
+ if ((ucl_uint) s->head2[key] == node)
+ s->head2[key] = NIL2;
+ }
+#endif
+ }
+ else
+ --s->node_count;
+}
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+static
+void swd_accept(ucl_swd_t *s, ucl_uint n)
+{
+ assert(n <= s->look);
+
+ if (n > 0) do
+ {
+ ucl_uint key;
+
+ swd_remove_node(s,s->rp);
+
+ /* add bp into HEAD3 */
+ key = HEAD3(s->b,s->bp);
+ s->succ3[s->bp] = s_get_head3(s,key);
+ s->head3[key] = SWD_UINT(s->bp);
+ s->best3[s->bp] = SWD_UINT(s->f + 1);
+ s->llen3[key]++;
+ assert(s->llen3[key] <= s->n);
+
+#ifdef HEAD2
+ IF_HEAD2(s) {
+ /* add bp into HEAD2 */
+ key = HEAD2(s->b,s->bp);
+ s->head2[key] = SWD_UINT(s->bp);
+ }
+#endif
+
+ swd_getbyte(s);
+ } while (--n > 0);
+}
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+static
+void swd_search(ucl_swd_t *s, ucl_uint node, ucl_uint cnt)
+{
+ const ucl_bytep p1;
+ const ucl_bytep p2;
+ const ucl_bytep px;
+ ucl_uint m_len = s->m_len;
+ const ucl_bytep b = s->b;
+ const ucl_bytep bp = s->b + s->bp;
+ const ucl_bytep bx = s->b + s->bp + s->look;
+ unsigned char scan_end1;
+
+ assert(s->m_len > 0);
+
+ scan_end1 = bp[m_len - 1];
+ for ( ; cnt-- > 0; node = s->succ3[node])
+ {
+ p1 = bp;
+ p2 = b + node;
+ px = bx;
+
+ assert(m_len < s->look);
+
+ if (
+#if 1
+ p2[m_len - 1] == scan_end1 &&
+ p2[m_len] == p1[m_len] &&
+#endif
+ p2[0] == p1[0] &&
+ p2[1] == p1[1])
+ {
+ ucl_uint i;
+ assert(ucl_memcmp(bp,&b[node],3) == 0);
+
+#if 0 && defined(UA_GET4)
+ p1 += 3; p2 += 3;
+ while (p1 < px && UA_GET4(p1) == UA_GET4(p2))
+ p1 += 4, p2 += 4;
+ while (p1 < px && *p1 == *p2)
+ p1 += 1, p2 += 1;
+#else
+ p1 += 2; p2 += 2;
+ do {} while (++p1 < px && *p1 == *++p2);
+#endif
+ i = (ucl_uint) (p1 - bp);
+
+#ifdef UCL_DEBUG
+ if (ucl_memcmp(bp,&b[node],i) != 0)
+ printf("%5ld %5ld %02x%02x %02x%02x\n",
+ (long)s->bp, (long) node,
+ bp[0], bp[1], b[node], b[node+1]);
+#endif
+ assert(ucl_memcmp(bp,&b[node],i) == 0);
+
+#if defined(SWD_BEST_OFF)
+ if (i < SWD_BEST_OFF)
+ {
+ if (s->best_pos[i] == 0)
+ s->best_pos[i] = node + 1;
+ }
+#endif
+ if (i > m_len)
+ {
+ s->m_len = m_len = i;
+ s->m_pos = node;
+ if (m_len == s->look)
+ return;
+ if (m_len >= s->nice_length)
+ return;
+ if (m_len > (ucl_uint) s->best3[node])
+ return;
+ scan_end1 = bp[m_len - 1];
+ }
+ }
+ }
+}
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+#ifdef HEAD2
+
+static
+ucl_bool swd_search2(ucl_swd_t *s)
+{
+ ucl_uint key;
+
+ assert(s->look >= 2);
+ assert(s->m_len > 0);
+
+ key = s->head2[ HEAD2(s->b,s->bp) ];
+ if (key == NIL2)
+ return 0;
+#ifdef UCL_DEBUG
+ if (ucl_memcmp(&s->b[s->bp],&s->b[key],2) != 0)
+ printf("%5ld %5ld %02x%02x %02x%02x\n", (long)s->bp, (long)key,
+ s->b[s->bp], s->b[s->bp+1], s->b[key], s->b[key+1]);
+#endif
+ assert(ucl_memcmp(&s->b[s->bp],&s->b[key],2) == 0);
+#if defined(SWD_BEST_OFF)
+ if (s->best_pos[2] == 0)
+ s->best_pos[2] = key + 1;
+#endif
+
+ if (s->m_len < 2)
+ {
+ s->m_len = 2;
+ s->m_pos = key;
+ }
+ return 1;
+}
+
+#endif
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+static
+void swd_findbest(ucl_swd_t *s)
+{
+ ucl_uint key;
+ ucl_uint cnt, node;
+ ucl_uint len;
+
+ assert(s->m_len > 0);
+
+ /* get current head, add bp into HEAD3 */
+ key = HEAD3(s->b,s->bp);
+ node = s->succ3[s->bp] = s_get_head3(s,key);
+ cnt = s->llen3[key]++;
+ assert(s->llen3[key] <= s->n + s->f);
+ if (cnt > s->max_chain && s->max_chain > 0)
+ cnt = s->max_chain;
+ s->head3[key] = SWD_UINT(s->bp);
+
+ s->b_char = s->b[s->bp];
+ len = s->m_len;
+ if (s->m_len >= s->look)
+ {
+ if (s->look == 0)
+ s->b_char = -1;
+ s->m_off = 0;
+ s->best3[s->bp] = SWD_UINT(s->f + 1);
+ }
+ else
+ {
+#if defined(HEAD2_VAR)
+ if (s->use_head2) {
+ if (swd_search2(s) && s->look >= 3)
+ swd_search(s,node,cnt);
+ } else {
+ if (s->look >= 3)
+ swd_search(s,node,cnt);
+ }
+#elif defined(HEAD2)
+ if (swd_search2(s) && s->look >= 3)
+ swd_search(s,node,cnt);
+#else
+ if (s->look >= 3)
+ swd_search(s,node,cnt);
+#endif
+ if (s->m_len > len)
+ s->m_off = swd_pos2off(s,s->m_pos);
+ s->best3[s->bp] = SWD_UINT(s->m_len);
+
+#if defined(SWD_BEST_OFF)
+ if (s->use_best_off)
+ {
+ int i;
+ for (i = 2; i < SWD_BEST_OFF; i++)
+ if (s->best_pos[i] > 0)
+ s->best_off[i] = swd_pos2off(s,s->best_pos[i]-1);
+ else
+ s->best_off[i] = 0;
+ }
+#endif
+ }
+
+ swd_remove_node(s,s->rp);
+
+#ifdef HEAD2
+ /* add bp into HEAD2 */
+ IF_HEAD2(s) {
+ key = HEAD2(s->b,s->bp);
+ s->head2[key] = SWD_UINT(s->bp);
+ }
+#endif
+}
+
+
+#undef HEAD3
+#undef HEAD2
+#undef IF_HEAD2
+#undef s_get_head3
+
+
+/*
+vi:ts=4:et
+*/
+
diff --git a/tools/z64compress/src/enc/ucl/getbit.h b/tools/z64compress/src/enc/ucl/getbit.h
new file mode 100644
index 0000000..36ef48c
--- /dev/null
+++ b/tools/z64compress/src/enc/ucl/getbit.h
@@ -0,0 +1,64 @@
+/* getbit.h -- bit-buffer access
+
+ This file is part of the UCL data compression library.
+
+ Copyright (C) 1996-2004 Markus Franz Xaver Johannes Oberhumer
+ All Rights Reserved.
+
+ The UCL library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of
+ the License, or (at your option) any later version.
+
+ The UCL library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with the UCL library; see the file COPYING.
+ If not, write to the Free Software Foundation, Inc.,
+ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ Markus F.X.J. Oberhumer
+ <markus@oberhumer.com>
+ http://www.oberhumer.com/opensource/ucl/
+ */
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+#if 1
+#define getbit_8(bb, src, ilen) \
+ (((bb = bb & 0x7f ? bb*2 : ((unsigned)src[ilen++]*2+1)) >> 8) & 1)
+#elif 1
+#define getbit_8(bb, src, ilen) \
+ (bb*=2,bb&0xff ? (bb>>8)&1 : ((bb=src[ilen++]*2+1)>>8)&1)
+#else
+#define getbit_8(bb, src, ilen) \
+ (((bb*=2, (bb&0xff ? bb : (bb=src[ilen++]*2+1,bb))) >> 8) & 1)
+#endif
+
+
+#define getbit_le16(bb, src, ilen) \
+ (bb*=2,bb&0xffff ? (bb>>16)&1 : (ilen+=2,((bb=(src[ilen-2]+src[ilen-1]*256u)*2+1)>>16)&1))
+
+
+#if 1 && (ACC_ENDIAN_LITTLE_ENDIAN) && defined(UA_GET4)
+#define getbit_le32(bb, bc, src, ilen) \
+ (bc > 0 ? ((bb>>--bc)&1) : (bc=31,\
+ bb=UA_GET4((src)+ilen),ilen+=4,(bb>>31)&1))
+#else
+#define getbit_le32(bb, bc, src, ilen) \
+ (bc > 0 ? ((bb>>--bc)&1) : (bc=31,\
+ bb=src[ilen]+src[ilen+1]*0x100+src[ilen+2]*UCL_UINT32_C(0x10000)+src[ilen+3]*UCL_UINT32_C(0x1000000),\
+ ilen+=4,(bb>>31)&1))
+#endif
+
+
+/*
+vi:ts=4:et
+*/
+
diff --git a/tools/z64compress/src/enc/ucl/n2b_d.c b/tools/z64compress/src/enc/ucl/n2b_d.c
new file mode 100644
index 0000000..0dc3590
--- /dev/null
+++ b/tools/z64compress/src/enc/ucl/n2b_d.c
@@ -0,0 +1,179 @@
+/* n2b_d.c -- implementation of the NRV2B decompression algorithm
+
+ This file is part of the UCL data compression library.
+
+ Copyright (C) 1996-2004 Markus Franz Xaver Johannes Oberhumer
+ All Rights Reserved.
+
+ The UCL library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of
+ the License, or (at your option) any later version.
+
+ The UCL library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with the UCL library; see the file COPYING.
+ If not, write to the Free Software Foundation, Inc.,
+ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ Markus F.X.J. Oberhumer
+ <markus@oberhumer.com>
+ http://www.oberhumer.com/opensource/ucl/
+ */
+
+
+/***********************************************************************
+// actual implementation used by a recursive #include
+************************************************************************/
+
+#ifdef getbit
+
+#ifdef SAFE
+#define fail(x,r) if (x) { *dst_len = olen; return r; }
+#else
+#define fail(x,r)
+#endif
+
+{
+ ucl_uint32 bb = 0;
+#ifdef TEST_OVERLAP
+ ucl_uint ilen = src_off, olen = 0, last_m_off = 1;
+#else
+ ucl_uint ilen = 0, olen = 0, last_m_off = 1;
+#endif
+#ifdef SAFE
+ const ucl_uint oend = *dst_len;
+#endif
+ //ACC_UNUSED(wrkmem);
+
+#ifdef TEST_OVERLAP
+ src_len += src_off;
+ fail(oend >= src_len, UCL_E_OVERLAP_OVERRUN);
+#endif
+
+ for (;;)
+ {
+ ucl_uint m_off, m_len;
+
+ while (getbit(bb))
+ {
+ fail(ilen >= src_len, UCL_E_INPUT_OVERRUN);
+ fail(olen >= oend, UCL_E_OUTPUT_OVERRUN);
+#ifdef TEST_OVERLAP
+ fail(olen > ilen, UCL_E_OVERLAP_OVERRUN);
+ olen++; ilen++;
+#else
+ dst[olen++] = src[ilen++];
+#endif
+ }
+ m_off = 1;
+ do {
+ m_off = m_off*2 + getbit(bb);
+ fail(ilen >= src_len, UCL_E_INPUT_OVERRUN);
+ fail(m_off > UCL_UINT32_C(0xffffff) + 3, UCL_E_LOOKBEHIND_OVERRUN);
+ } while (!getbit(bb));
+ if (m_off == 2)
+ {
+ m_off = last_m_off;
+ }
+ else
+ {
+ fail(ilen >= src_len, UCL_E_INPUT_OVERRUN);
+ m_off = (m_off-3)*256 + src[ilen++];
+ if (m_off == UCL_UINT32_C(0xffffffff))
+ break;
+ last_m_off = ++m_off;
+ }
+ m_len = getbit(bb);
+ m_len = m_len*2 + getbit(bb);
+ if (m_len == 0)
+ {
+ m_len++;
+ do {
+ m_len = m_len*2 + getbit(bb);
+ fail(ilen >= src_len, UCL_E_INPUT_OVERRUN);
+ fail(m_len >= oend, UCL_E_OUTPUT_OVERRUN);
+ } while (!getbit(bb));
+ m_len += 2;
+ }
+ m_len += (m_off > 0xd00);
+ fail(olen + m_len > oend, UCL_E_OUTPUT_OVERRUN);
+ fail(m_off > olen, UCL_E_LOOKBEHIND_OVERRUN);
+#ifdef TEST_OVERLAP
+ olen += m_len + 1;
+ fail(olen > ilen, UCL_E_OVERLAP_OVERRUN);
+#else
+ {
+ const ucl_bytep m_pos;
+ m_pos = dst + olen - m_off;
+ dst[olen++] = *m_pos++;
+ do dst[olen++] = *m_pos++; while (--m_len > 0);
+ }
+#endif
+ }
+ *dst_len = olen;
+ return ilen == src_len ? UCL_E_OK : (ilen < src_len ? UCL_E_INPUT_NOT_CONSUMED : UCL_E_INPUT_OVERRUN);
+}
+
+#undef fail
+
+#endif /* getbit */
+
+
+/***********************************************************************
+// decompressor entries for the different bit-buffer sizes
+************************************************************************/
+
+#ifndef getbit
+
+#include "ucl_conf.h"
+#include "ucl.h"
+#include "getbit.h"
+
+
+UCL_PUBLIC(int)
+ucl_nrv2b_decompress_8 ( const ucl_bytep src, ucl_uint src_len,
+ ucl_bytep dst, ucl_uintp dst_len,
+ ucl_voidp wrkmem )
+{
+#define getbit(bb) getbit_8(bb,src,ilen)
+#include "n2b_d.c"
+#undef getbit
+}
+
+#if 0
+UCL_PUBLIC(int)
+ucl_nrv2b_decompress_le16 ( const ucl_bytep src, ucl_uint src_len,
+ ucl_bytep dst, ucl_uintp dst_len,
+ ucl_voidp wrkmem )
+{
+#define getbit(bb) getbit_le16(bb,src,ilen)
+#include "n2b_d.c"
+#undef getbit
+}
+
+
+UCL_PUBLIC(int)
+ucl_nrv2b_decompress_le32 ( const ucl_bytep src, ucl_uint src_len,
+ ucl_bytep dst, ucl_uintp dst_len,
+ ucl_voidp wrkmem )
+{
+ unsigned bc = 0;
+#define getbit(bb) getbit_le32(bb,bc,src,ilen)
+#include "n2b_d.c"
+#undef getbit
+}
+#endif /* 0 */
+
+
+#endif /* !getbit */
+
+
+/*
+vi:ts=4:et
+*/
+
diff --git a/tools/z64compress/src/enc/ucl/ucl.h b/tools/z64compress/src/enc/ucl/ucl.h
new file mode 100644
index 0000000..f136d4a
--- /dev/null
+++ b/tools/z64compress/src/enc/ucl/ucl.h
@@ -0,0 +1,249 @@
+/* ucl.h -- prototypes for the UCL data compression library
+
+ This file is part of the UCL data compression library.
+
+ Copyright (C) 2004 Markus Franz Xaver Johannes Oberhumer
+ Copyright (C) 2003 Markus Franz Xaver Johannes Oberhumer
+ Copyright (C) 2002 Markus Franz Xaver Johannes Oberhumer
+ Copyright (C) 2001 Markus Franz Xaver Johannes Oberhumer
+ Copyright (C) 2000 Markus Franz Xaver Johannes Oberhumer
+ Copyright (C) 1999 Markus Franz Xaver Johannes Oberhumer
+ Copyright (C) 1998 Markus Franz Xaver Johannes Oberhumer
+ Copyright (C) 1997 Markus Franz Xaver Johannes Oberhumer
+ Copyright (C) 1996 Markus Franz Xaver Johannes Oberhumer
+ All Rights Reserved.
+
+ The UCL library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of
+ the License, or (at your option) any later version.
+
+ The UCL library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with the UCL library; see the file COPYING.
+ If not, write to the Free Software Foundation, Inc.,
+ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ Markus F.X.J. Oberhumer
+ <markus@oberhumer.com>
+ http://www.oberhumer.com/opensource/ucl/
+ */
+
+
+#ifndef __UCL_H_INCLUDED
+#define __UCL_H_INCLUDED
+
+#ifndef __UCLCONF_H_INCLUDED
+#include "uclconf.h"
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/***********************************************************************
+// Compression fine-tuning configuration.
+//
+// Pass a NULL pointer to the compression functions for default values.
+// Otherwise set all values to -1 [i.e. initialize the struct by a
+// `memset(x,0xff,sizeof(x))'] and then set the required values.
+************************************************************************/
+
+struct ucl_compress_config_t
+{
+ int bb_endian;
+ int bb_size;
+ ucl_uint max_offset;
+ ucl_uint max_match;
+ int s_level;
+ int h_level;
+ int p_level;
+ int c_flags;
+ ucl_uint m_size;
+};
+
+#define ucl_compress_config_p ucl_compress_config_t __UCL_MMODEL *
+
+
+/***********************************************************************
+// compressors
+//
+// Pass NULL for `cb' (no progress callback), `conf' (default compression
+// configuration) and `result' (no statistical result).
+************************************************************************/
+
+UCL_EXTERN(int)
+ucl_nrv2b_99_compress ( const ucl_bytep src, ucl_uint src_len,
+ ucl_bytep dst, ucl_uintp dst_len,
+ ucl_progress_callback_p cb,
+ int level,
+ const struct ucl_compress_config_p conf,
+ ucl_uintp result );
+
+UCL_EXTERN(int)
+ucl_nrv2d_99_compress ( const ucl_bytep src, ucl_uint src_len,
+ ucl_bytep dst, ucl_uintp dst_len,
+ ucl_progress_callback_p cb,
+ int level,
+ const struct ucl_compress_config_p conf,
+ ucl_uintp result );
+
+UCL_EXTERN(int)
+ucl_nrv2e_99_compress ( const ucl_bytep src, ucl_uint src_len,
+ ucl_bytep dst, ucl_uintp dst_len,
+ ucl_progress_callback_p cb,
+ int level,
+ const struct ucl_compress_config_p conf,
+ ucl_uintp result );
+
+
+/***********************************************************************
+// decompressors
+//
+// Always pass NULL for `wrkmem'. This parameter is for symetry
+// with my other compression libaries and is not used in UCL -
+// UCL does not need any additional memory (or even local stack space)
+// for decompression.
+************************************************************************/
+
+UCL_EXTERN(int)
+ucl_nrv2b_decompress_8 ( const ucl_bytep src, ucl_uint src_len,
+ ucl_bytep dst, ucl_uintp dst_len,
+ ucl_voidp wrkmem );
+UCL_EXTERN(int)
+ucl_nrv2b_decompress_le16 ( const ucl_bytep src, ucl_uint src_len,
+ ucl_bytep dst, ucl_uintp dst_len,
+ ucl_voidp wrkmem );
+UCL_EXTERN(int)
+ucl_nrv2b_decompress_le32 ( const ucl_bytep src, ucl_uint src_len,
+ ucl_bytep dst, ucl_uintp dst_len,
+ ucl_voidp wrkmem );
+UCL_EXTERN(int)
+ucl_nrv2b_decompress_safe_8 ( const ucl_bytep src, ucl_uint src_len,
+ ucl_bytep dst, ucl_uintp dst_len,
+ ucl_voidp wrkmem );
+UCL_EXTERN(int)
+ucl_nrv2b_decompress_safe_le16 ( const ucl_bytep src, ucl_uint src_len,
+ ucl_bytep dst, ucl_uintp dst_len,
+ ucl_voidp wrkmem );
+UCL_EXTERN(int)
+ucl_nrv2b_decompress_safe_le32 ( const ucl_bytep src, ucl_uint src_len,
+ ucl_bytep dst, ucl_uintp dst_len,
+ ucl_voidp wrkmem );
+
+UCL_EXTERN(int)
+ucl_nrv2d_decompress_8 ( const ucl_bytep src, ucl_uint src_len,
+ ucl_bytep dst, ucl_uintp dst_len,
+ ucl_voidp wrkmem );
+UCL_EXTERN(int)
+ucl_nrv2d_decompress_le16 ( const ucl_bytep src, ucl_uint src_len,
+ ucl_bytep dst, ucl_uintp dst_len,
+ ucl_voidp wrkmem );
+UCL_EXTERN(int)
+ucl_nrv2d_decompress_le32 ( const ucl_bytep src, ucl_uint src_len,
+ ucl_bytep dst, ucl_uintp dst_len,
+ ucl_voidp wrkmem );
+UCL_EXTERN(int)
+ucl_nrv2d_decompress_safe_8 ( const ucl_bytep src, ucl_uint src_len,
+ ucl_bytep dst, ucl_uintp dst_len,
+ ucl_voidp wrkmem );
+UCL_EXTERN(int)
+ucl_nrv2d_decompress_safe_le16 ( const ucl_bytep src, ucl_uint src_len,
+ ucl_bytep dst, ucl_uintp dst_len,
+ ucl_voidp wrkmem );
+UCL_EXTERN(int)
+ucl_nrv2d_decompress_safe_le32 ( const ucl_bytep src, ucl_uint src_len,
+ ucl_bytep dst, ucl_uintp dst_len,
+ ucl_voidp wrkmem );
+
+UCL_EXTERN(int)
+ucl_nrv2e_decompress_8 ( const ucl_bytep src, ucl_uint src_len,
+ ucl_bytep dst, ucl_uintp dst_len,
+ ucl_voidp wrkmem );
+UCL_EXTERN(int)
+ucl_nrv2e_decompress_le16 ( const ucl_bytep src, ucl_uint src_len,
+ ucl_bytep dst, ucl_uintp dst_len,
+ ucl_voidp wrkmem );
+UCL_EXTERN(int)
+ucl_nrv2e_decompress_le32 ( const ucl_bytep src, ucl_uint src_len,
+ ucl_bytep dst, ucl_uintp dst_len,
+ ucl_voidp wrkmem );
+UCL_EXTERN(int)
+ucl_nrv2e_decompress_safe_8 ( const ucl_bytep src, ucl_uint src_len,
+ ucl_bytep dst, ucl_uintp dst_len,
+ ucl_voidp wrkmem );
+UCL_EXTERN(int)
+ucl_nrv2e_decompress_safe_le16 ( const ucl_bytep src, ucl_uint src_len,
+ ucl_bytep dst, ucl_uintp dst_len,
+ ucl_voidp wrkmem );
+UCL_EXTERN(int)
+ucl_nrv2e_decompress_safe_le32 ( const ucl_bytep src, ucl_uint src_len,
+ ucl_bytep dst, ucl_uintp dst_len,
+ ucl_voidp wrkmem );
+
+
+/***********************************************************************
+// assembler decompressors [TO BE ADDED]
+************************************************************************/
+
+
+/***********************************************************************
+// test an overlapping in-place decompression within a buffer:
+// - try a virtual decompression from &buf[src_off] -> &buf[0]
+// - no data is actually written
+// - only the bytes at buf[src_off..src_off+src_len-1] will get accessed
+//
+// NOTE: always pass NULL for `wrkmem' - see above.
+************************************************************************/
+
+UCL_EXTERN(int)
+ucl_nrv2b_test_overlap_8 ( const ucl_bytep buf, ucl_uint src_off,
+ ucl_uint src_len, ucl_uintp dst_len,
+ ucl_voidp wrkmem );
+UCL_EXTERN(int)
+ucl_nrv2b_test_overlap_le16 ( const ucl_bytep buf, ucl_uint src_off,
+ ucl_uint src_len, ucl_uintp dst_len,
+ ucl_voidp wrkmem );
+UCL_EXTERN(int)
+ucl_nrv2b_test_overlap_le32 ( const ucl_bytep buf, ucl_uint src_off,
+ ucl_uint src_len, ucl_uintp dst_len,
+ ucl_voidp wrkmem );
+
+UCL_EXTERN(int)
+ucl_nrv2d_test_overlap_8 ( const ucl_bytep buf, ucl_uint src_off,
+ ucl_uint src_len, ucl_uintp dst_len,
+ ucl_voidp wrkmem );
+UCL_EXTERN(int)
+ucl_nrv2d_test_overlap_le16 ( const ucl_bytep buf, ucl_uint src_off,
+ ucl_uint src_len, ucl_uintp dst_len,
+ ucl_voidp wrkmem );
+UCL_EXTERN(int)
+ucl_nrv2d_test_overlap_le32 ( const ucl_bytep buf, ucl_uint src_off,
+ ucl_uint src_len, ucl_uintp dst_len,
+ ucl_voidp wrkmem );
+
+UCL_EXTERN(int)
+ucl_nrv2e_test_overlap_8 ( const ucl_bytep buf, ucl_uint src_off,
+ ucl_uint src_len, ucl_uintp dst_len,
+ ucl_voidp wrkmem );
+UCL_EXTERN(int)
+ucl_nrv2e_test_overlap_le16 ( const ucl_bytep buf, ucl_uint src_off,
+ ucl_uint src_len, ucl_uintp dst_len,
+ ucl_voidp wrkmem );
+UCL_EXTERN(int)
+ucl_nrv2e_test_overlap_le32 ( const ucl_bytep buf, ucl_uint src_off,
+ ucl_uint src_len, ucl_uintp dst_len,
+ ucl_voidp wrkmem );
+
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* already included */
+
diff --git a/tools/z64compress/src/enc/ucl/ucl_conf.h b/tools/z64compress/src/enc/ucl/ucl_conf.h
new file mode 100644
index 0000000..79f5c6b
--- /dev/null
+++ b/tools/z64compress/src/enc/ucl/ucl_conf.h
@@ -0,0 +1,220 @@
+/* ucl_conf.h -- main internal configuration file for the the UCL library
+
+ This file is part of the UCL data compression library.
+
+ Copyright (C) 1996-2004 Markus Franz Xaver Johannes Oberhumer
+ All Rights Reserved.
+
+ The UCL library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of
+ the License, or (at your option) any later version.
+
+ The UCL library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with the UCL library; see the file COPYING.
+ If not, write to the Free Software Foundation, Inc.,
+ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ Markus F.X.J. Oberhumer
+ <markus@oberhumer.com>
+ http://www.oberhumer.com/opensource/ucl/
+ */
+
+
+/* WARNING: this file should *not* be used by applications. It is
+ part of the implementation of the library and is subject
+ to change.
+ */
+
+
+#ifndef __UCL_CONF_H
+#define __UCL_CONF_H
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+#if defined(__UCLCONF_H_INCLUDED)
+# error "include this file first"
+#endif
+#include "uclconf.h"
+
+#if !defined(__UCL_MMODEL_HUGE) && defined(HAVE_MEMCMP)
+# define ucl_memcmp(a,b,c) memcmp(a,b,c)
+#endif
+#if !defined(__UCL_MMODEL_HUGE) && defined(HAVE_MEMCPY)
+# define ucl_memcpy(a,b,c) memcpy(a,b,c)
+#endif
+#if !defined(__UCL_MMODEL_HUGE) && defined(HAVE_MEMMOVE)
+# define ucl_memmove(a,b,c) memmove(a,b,c)
+#endif
+#if !defined(__UCL_MMODEL_HUGE) && defined(HAVE_MEMSET)
+# define ucl_memset(a,b,c) memset(a,b,c)
+#endif
+#if 0 /* WANT_ACC */
+#if defined(UCL_HAVE_CONFIG_H)
+# define ACC_CONFIG_NO_HEADER 1
+#endif
+#define __ACCLIB_FUNCNAME(f) error_do_not_use_acclib
+#include "acc/acc.h"
+
+#if (ACC_CC_MSC && (_MSC_VER >= 1300))
+ /* avoid `-Wall' warnings in system header files */
+# pragma warning(disable: 4820)
+ /* avoid warnings about inlining */
+# pragma warning(disable: 4710 4711)
+#endif
+
+#if defined(__UCL_MMODEL_HUGE) && (!ACC_HAVE_MM_HUGE_PTR)
+# error "this should not happen - check defines for __huge"
+#endif
+
+#if (ACC_OS_DOS16 + 0 != UCL_OS_DOS16 + 0)
+# error "DOS16"
+#endif
+#if (ACC_OS_OS216 + 0 != UCL_OS_OS216 + 0)
+# error "OS216"
+#endif
+#if (ACC_OS_WIN16 + 0 != UCL_OS_WIN16 + 0)
+# error "WIN16"
+#endif
+#if (ACC_OS_DOS32 + 0 != UCL_OS_DOS32 + 0)
+# error "DOS32"
+#endif
+#if (ACC_OS_OS2 + 0 != UCL_OS_OS2 + 0)
+# error "DOS32"
+#endif
+#if (ACC_OS_WIN32 + 0 != UCL_OS_WIN32 + 0)
+# error "WIN32"
+#endif
+#if (ACC_OS_WIN64 + 0 != UCL_OS_WIN64 + 0)
+# error "WIN64"
+#endif
+
+
+#include "acc/acc_incd.h"
+#if (ACC_OS_DOS16 || ACC_OS_OS216 || ACC_OS_WIN16)
+# include "acc/acc_ince.h"
+# include "acc/acc_inci.h"
+#endif
+
+#undef NDEBUG
+#if !defined(UCL_DEBUG)
+# define NDEBUG 1
+#endif
+#include <assert.h>
+
+
+#if (ACC_OS_DOS16 || ACC_OS_OS216 || ACC_OS_WIN16) && (ACC_CC_BORLANDC)
+# if (__BORLANDC__ >= 0x0450) /* v4.00 */
+# pragma option -h /* enable fast huge pointers */
+# else
+# pragma option -h- /* disable fast huge pointers - compiler bug */
+# endif
+#endif
+#endif /* WANT_ACC */
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+#if 1
+# define UCL_BYTE(x) ((unsigned char) (x))
+#else
+# define UCL_BYTE(x) ((unsigned char) ((x) & 0xff))
+#endif
+#if 0
+# define UCL_USHORT(x) ((unsigned short) (x))
+#else
+# define UCL_USHORT(x) ((unsigned short) ((x) & 0xffff))
+#endif
+
+#define UCL_MAX(a,b) ((a) >= (b) ? (a) : (b))
+#define UCL_MIN(a,b) ((a) <= (b) ? (a) : (b))
+#define UCL_MAX3(a,b,c) ((a) >= (b) ? UCL_MAX(a,c) : UCL_MAX(b,c))
+#define UCL_MIN3(a,b,c) ((a) <= (b) ? UCL_MIN(a,c) : UCL_MIN(b,c))
+
+#define ucl_sizeof(type) ((ucl_uint) (sizeof(type)))
+
+#define UCL_HIGH(array) ((ucl_uint) (sizeof(array)/sizeof(*(array))))
+
+/* this always fits into 16 bits */
+#define UCL_SIZE(bits) (1u << (bits))
+#define UCL_MASK(bits) (UCL_SIZE(bits) - 1)
+
+#define UCL_LSIZE(bits) (1ul << (bits))
+#define UCL_LMASK(bits) (UCL_LSIZE(bits) - 1)
+
+#define UCL_USIZE(bits) ((ucl_uint) 1 << (bits))
+#define UCL_UMASK(bits) (UCL_USIZE(bits) - 1)
+
+/* Maximum value of a signed/unsigned type.
+ Do not use casts, avoid overflows ! */
+#define UCL_STYPE_MAX(b) (((1l << (8*(b)-2)) - 1l) + (1l << (8*(b)-2)))
+#define UCL_UTYPE_MAX(b) (((1ul << (8*(b)-1)) - 1ul) + (1ul << (8*(b)-1)))
+
+
+/***********************************************************************
+// compiler and architecture specific stuff
+************************************************************************/
+
+/* Some defines that indicate if memory can be accessed at unaligned
+ * memory addresses. You should also test that this is actually faster
+ * even if it is allowed by your system.
+ */
+
+#undef UA_GET2
+#undef UA_SET2
+#undef UA_GET4
+#undef UA_SET4
+#if 1 && (ACC_ARCH_AMD64 || ACC_ARCH_IA32)
+# define UA_GET2(p) (* (const ucl_ushortp) (p))
+# define UA_SET2(p) (* (ucl_ushortp) (p))
+# define UA_GET4(p) (* (const acc_uint32e_t *) (p))
+# define UA_SET4(p) (* (acc_uint32e_t *) (p))
+#elif 0 && (ACC_ARCH_M68K) && (ACC_CC_GNUC >= 0x020900ul)
+ typedef struct { unsigned short v; } __ucl_ua2_t __attribute__((__aligned__(1)));
+ typedef struct { unsigned long v; } __ucl_ua4_t __attribute__((__aligned__(1)));
+# define UA_GET2(p) (((const __ucl_ua2_t *)(p))->v)
+# define UA_SET2(p) (((__ucl_ua2_t *)(p))->v)
+# define UA_GET4(p) (((const __ucl_ua4_t *)(p))->v)
+# define UA_SET4(p) (((__ucl_ua4_t *)(p))->v)
+#endif
+
+
+/***********************************************************************
+// some globals
+************************************************************************/
+
+__UCL_EXTERN_C int __ucl_init_done;
+UCL_EXTERN(const ucl_bytep) ucl_copyright(void);
+
+
+/***********************************************************************
+// ANSI C preprocessor macros
+************************************************************************/
+
+#define _UCL_STRINGIZE(x) #x
+#define _UCL_MEXPAND(x) _UCL_STRINGIZE(x)
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+//#include "ucl_ptr.h"
+
+
+#endif /* already included */
+
+/*
+vi:ts=4:et
+*/
+
diff --git a/tools/z64compress/src/enc/ucl/uclconf.h b/tools/z64compress/src/enc/ucl/uclconf.h
new file mode 100644
index 0000000..ab18ca1
--- /dev/null
+++ b/tools/z64compress/src/enc/ucl/uclconf.h
@@ -0,0 +1,490 @@
+/* uclconf.h -- configuration for the UCL data compression library
+
+ This file is part of the UCL data compression library.
+
+ Copyright (C) 2004 Markus Franz Xaver Johannes Oberhumer
+ Copyright (C) 2003 Markus Franz Xaver Johannes Oberhumer
+ Copyright (C) 2002 Markus Franz Xaver Johannes Oberhumer
+ Copyright (C) 2001 Markus Franz Xaver Johannes Oberhumer
+ Copyright (C) 2000 Markus Franz Xaver Johannes Oberhumer
+ Copyright (C) 1999 Markus Franz Xaver Johannes Oberhumer
+ Copyright (C) 1998 Markus Franz Xaver Johannes Oberhumer
+ Copyright (C) 1997 Markus Franz Xaver Johannes Oberhumer
+ Copyright (C) 1996 Markus Franz Xaver Johannes Oberhumer
+ All Rights Reserved.
+
+ The UCL library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of
+ the License, or (at your option) any later version.
+
+ The UCL library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with the UCL library; see the file COPYING.
+ If not, write to the Free Software Foundation, Inc.,
+ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ Markus F.X.J. Oberhumer
+ <markus@oberhumer.com>
+ http://www.oberhumer.com/opensource/ucl/
+ */
+
+
+#ifndef __UCLCONF_H_INCLUDED
+#define __UCLCONF_H_INCLUDED
+
+#define UCL_VERSION 0x010300L
+#define UCL_VERSION_STRING "1.03"
+#define UCL_VERSION_DATE "Jul 20 2004"
+
+/* internal Autoconf configuration file - only used when building UCL */
+#if defined(UCL_HAVE_CONFIG_H)
+# include <config.h>
+#endif
+#include <limits.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+
+/***********************************************************************
+// UCL requires a conforming <limits.h>
+************************************************************************/
+
+#if !defined(CHAR_BIT) || (CHAR_BIT != 8)
+# error "invalid CHAR_BIT"
+#endif
+#if !defined(UCHAR_MAX) || !defined(UINT_MAX) || !defined(ULONG_MAX)
+# error "check your compiler installation"
+#endif
+#if (USHRT_MAX < 1) || (UINT_MAX < 1) || (ULONG_MAX < 1)
+# error "your limits.h macros are broken"
+#endif
+
+/* workaround a compiler bug under hpux 10.20 */
+#define UCL_0xffffL 65535ul
+#define UCL_0xffffffffL 4294967295ul
+
+#if !defined(UCL_UINT32_C)
+# if (UINT_MAX < UCL_0xffffffffL)
+# define UCL_UINT32_C(c) c ## UL
+# else
+# define UCL_UINT32_C(c) ((c) + 0U)
+# endif
+#endif
+
+
+/***********************************************************************
+// architecture defines
+************************************************************************/
+
+#if (defined(__CYGWIN__) || defined(__CYGWIN32__)) && defined(__GNUC__)
+# define UCL_OS_CYGWIN 1
+#elif defined(__EMX__) && defined(__GNUC__)
+# define UCL_OS_EMX 1
+#elif defined(__BORLANDC__) && defined(__DPMI32__) && (__BORLANDC__ >= 0x0460)
+# define UCL_OS_DOS32 1
+#elif defined(__BORLANDC__) && defined(__DPMI16__)
+# define UCL_OS_DOS16 1
+#elif defined(__ZTC__) && defined(DOS386)
+# define UCL_OS_DOS32 1
+#elif defined(__OS2__) || defined(__OS2V2__)
+# if (UINT_MAX == UCL_0xffffL)
+# define UCL_OS_OS216 1
+# elif (UINT_MAX == UCL_0xffffffffL)
+# define UCL_OS_OS2 1
+# else
+# error "check your limits.h header"
+# endif
+#elif defined(__WIN64__) || defined(_WIN64) || defined(WIN64)
+# define UCL_OS_WIN64 1
+#elif defined(__WIN32__) || defined(_WIN32) || defined(WIN32) || defined(__WINDOWS_386__)
+# define UCL_OS_WIN32 1
+#elif defined(__MWERKS__) && defined(__INTEL__)
+# define UCL_OS_WIN32 1
+#elif defined(__WINDOWS__) || defined(_WINDOWS) || defined(_Windows)
+# if (UINT_MAX == UCL_0xffffL)
+# define UCL_OS_WIN16 1
+# elif (UINT_MAX == UCL_0xffffffffL)
+# define UCL_OS_WIN32 1
+# else
+# error "check your limits.h header"
+# endif
+#elif defined(__DOS__) || defined(__MSDOS__) || defined(_MSDOS) || defined(MSDOS) || (defined(__PACIFIC__) && defined(DOS))
+# if (UINT_MAX == UCL_0xffffL)
+# define UCL_OS_DOS16 1
+# elif (UINT_MAX == UCL_0xffffffffL)
+# define UCL_OS_DOS32 1
+# else
+# error "check your limits.h header"
+# endif
+#elif defined(__WATCOMC__)
+# if defined(__NT__) && (UINT_MAX == UCL_0xffffL)
+ /* wcl: NT host defaults to DOS target */
+# define UCL_OS_DOS16 1
+# elif defined(__NT__) && (__WATCOMC__ < 1100)
+ /* wcl386: Watcom C 11 defines _WIN32 */
+# define UCL_OS_WIN32 1
+# else
+# error "please specify a target using the -bt compiler option"
+# endif
+#elif defined(__palmos__)
+# if (UINT_MAX == UCL_0xffffL)
+# define UCL_OS_PALMOS 1
+# else
+# error "check your limits.h header"
+# endif
+#elif defined(__TOS__) || defined(__atarist__)
+# define UCL_OS_TOS 1
+#elif defined(macintosh)
+# define UCL_OS_MACCLASSIC 1
+#elif defined(__VMS)
+# define UCL_OS_VMS 1
+#else
+# define UCL_OS_POSIX 1
+#endif
+
+/* memory checkers */
+#if !defined(__UCL_CHECKER)
+# if defined(__BOUNDS_CHECKING_ON)
+# define __UCL_CHECKER 1
+# elif defined(__CHECKER__)
+# define __UCL_CHECKER 1
+# elif defined(__INSURE__)
+# define __UCL_CHECKER 1
+# elif defined(__PURIFY__)
+# define __UCL_CHECKER 1
+# endif
+#endif
+
+/* fix ancient compiler versions */
+#if (UINT_MAX == UCL_0xffffL)
+#if (defined(__MSDOS__) && defined(__TURBOC__) && (__TURBOC__ < 0x0410)) || (defined(MSDOS) && defined(_MSC_VER) && (_MSC_VER < 700))
+# if !defined(__cdecl)
+# define __cdecl cdecl
+# endif
+# if !defined(__far)
+# define __far far
+# endif
+# if !defined(__huge)
+# define __huge huge
+# endif
+# if !defined(__near)
+# define __near near
+# endif
+#endif
+#endif
+
+
+/***********************************************************************
+// integral and pointer types
+************************************************************************/
+
+/* Integral types with 32 bits or more */
+#if !defined(UCL_UINT32_MAX)
+# if (UINT_MAX >= UCL_0xffffffffL)
+ typedef unsigned int ucl_uint32;
+ typedef int ucl_int32;
+# define UCL_UINT32_MAX UINT_MAX
+# define UCL_INT32_MAX INT_MAX
+# define UCL_INT32_MIN INT_MIN
+# elif (ULONG_MAX >= UCL_0xffffffffL)
+ typedef unsigned long ucl_uint32;
+ typedef long ucl_int32;
+# define UCL_UINT32_MAX ULONG_MAX
+# define UCL_INT32_MAX LONG_MAX
+# define UCL_INT32_MIN LONG_MIN
+# else
+# error "ucl_uint32"
+# endif
+#endif
+
+/* ucl_uint is used like size_t */
+#if !defined(UCL_UINT_MAX)
+# if (UINT_MAX >= UCL_0xffffffffL)
+ typedef unsigned int ucl_uint;
+ typedef int ucl_int;
+# define UCL_UINT_MAX UINT_MAX
+# define UCL_INT_MAX INT_MAX
+# define UCL_INT_MIN INT_MIN
+# elif (ULONG_MAX >= UCL_0xffffffffL)
+ typedef unsigned long ucl_uint;
+ typedef long ucl_int;
+# define UCL_UINT_MAX ULONG_MAX
+# define UCL_INT_MAX LONG_MAX
+# define UCL_INT_MIN LONG_MIN
+# else
+# error "ucl_uint"
+# endif
+#endif
+
+/* Memory model that allows to access memory at offsets of ucl_uint. */
+#if !defined(__UCL_MMODEL)
+# if (UCL_UINT_MAX <= UINT_MAX)
+# define __UCL_MMODEL
+# elif defined(UCL_OS_DOS16) || defined(UCL_OS_OS216) || defined(UCL_OS_WIN16)
+# define __UCL_MMODEL_HUGE 1
+# define __UCL_MMODEL __huge
+# define ucl_uintptr_t unsigned long
+# else
+# define __UCL_MMODEL
+# endif
+#endif
+
+/* no typedef here because of const-pointer issues */
+#define ucl_bytep unsigned char __UCL_MMODEL *
+#define ucl_charp char __UCL_MMODEL *
+#define ucl_voidp void __UCL_MMODEL *
+#define ucl_shortp short __UCL_MMODEL *
+#define ucl_ushortp unsigned short __UCL_MMODEL *
+#define ucl_uint32p ucl_uint32 __UCL_MMODEL *
+#define ucl_int32p ucl_int32 __UCL_MMODEL *
+#define ucl_uintp ucl_uint __UCL_MMODEL *
+#define ucl_intp ucl_int __UCL_MMODEL *
+#define ucl_voidpp ucl_voidp __UCL_MMODEL *
+#define ucl_bytepp ucl_bytep __UCL_MMODEL *
+/* deprecated - use `ucl_bytep' instead of `ucl_byte *' */
+#define ucl_byte unsigned char __UCL_MMODEL
+
+typedef int ucl_bool;
+
+
+/***********************************************************************
+// function types
+************************************************************************/
+
+/* name mangling */
+#if !defined(__UCL_EXTERN_C)
+# ifdef __cplusplus
+# define __UCL_EXTERN_C extern "C"
+# else
+# define __UCL_EXTERN_C extern
+# endif
+#endif
+
+/* calling convention */
+#if !defined(__UCL_CDECL)
+# if defined(__GNUC__) || defined(__HIGHC__) || defined(__NDPC__)
+# define __UCL_CDECL
+# elif defined(UCL_OS_DOS16) || defined(UCL_OS_OS216) || defined(UCL_OS_WIN16)
+# define __UCL_CDECL __far __cdecl
+# elif defined(UCL_OS_DOS32) || defined(UCL_OS_OS2) || defined(UCL_OS_WIN32) || defined(UCL_OS_WIN64)
+# define __UCL_CDECL __cdecl
+# else
+# define __UCL_CDECL
+# endif
+#endif
+
+/* DLL export information */
+#if !defined(__UCL_EXPORT1)
+# define __UCL_EXPORT1
+#endif
+#if !defined(__UCL_EXPORT2)
+# define __UCL_EXPORT2
+#endif
+
+/* __cdecl calling convention for public C and assembly functions */
+#if !defined(UCL_PUBLIC)
+# define UCL_PUBLIC(_rettype) __UCL_EXPORT1 _rettype __UCL_EXPORT2 __UCL_CDECL
+#endif
+#if !defined(UCL_EXTERN)
+# define UCL_EXTERN(_rettype) __UCL_EXTERN_C UCL_PUBLIC(_rettype)
+#endif
+#if !defined(UCL_PRIVATE)
+# define UCL_PRIVATE(_rettype) static _rettype __UCL_CDECL
+#endif
+
+/* C++ exception specification for extern "C" function types */
+#if !defined(__cplusplus)
+# undef UCL_NOTHROW
+# define UCL_NOTHROW
+#elif !defined(UCL_NOTHROW)
+# define UCL_NOTHROW
+#endif
+
+/* function types */
+typedef int
+(__UCL_CDECL *ucl_compress_t) ( const ucl_bytep src, ucl_uint src_len,
+ ucl_bytep dst, ucl_uintp dst_len,
+ ucl_voidp wrkmem );
+
+typedef int
+(__UCL_CDECL *ucl_decompress_t) ( const ucl_bytep src, ucl_uint src_len,
+ ucl_bytep dst, ucl_uintp dst_len,
+ ucl_voidp wrkmem );
+
+typedef int
+(__UCL_CDECL *ucl_optimize_t) ( ucl_bytep src, ucl_uint src_len,
+ ucl_bytep dst, ucl_uintp dst_len,
+ ucl_voidp wrkmem );
+
+typedef int
+(__UCL_CDECL *ucl_compress_dict_t)(const ucl_bytep src, ucl_uint src_len,
+ ucl_bytep dst, ucl_uintp dst_len,
+ ucl_voidp wrkmem,
+ const ucl_bytep dict, ucl_uint dict_len );
+
+typedef int
+(__UCL_CDECL *ucl_decompress_dict_t)(const ucl_bytep src, ucl_uint src_len,
+ ucl_bytep dst, ucl_uintp dst_len,
+ ucl_voidp wrkmem,
+ const ucl_bytep dict, ucl_uint dict_len );
+
+/* a progress indicator callback function */
+typedef struct
+{
+ void (__UCL_CDECL *callback) (ucl_uint, ucl_uint, int, ucl_voidp);
+ ucl_voidp user;
+}
+ucl_progress_callback_t;
+#define ucl_progress_callback_p ucl_progress_callback_t __UCL_MMODEL *
+
+
+/***********************************************************************
+// error codes and prototypes
+************************************************************************/
+
+/* Error codes for the compression/decompression functions. Negative
+ * values are errors, positive values will be used for special but
+ * normal events.
+ */
+#define UCL_E_OK 0
+#define UCL_E_ERROR (-1)
+#define UCL_E_INVALID_ARGUMENT (-2)
+#define UCL_E_OUT_OF_MEMORY (-3)
+/* compression errors */
+#define UCL_E_NOT_COMPRESSIBLE (-101)
+/* decompression errors */
+#define UCL_E_INPUT_OVERRUN (-201)
+#define UCL_E_OUTPUT_OVERRUN (-202)
+#define UCL_E_LOOKBEHIND_OVERRUN (-203)
+#define UCL_E_EOF_NOT_FOUND (-204)
+#define UCL_E_INPUT_NOT_CONSUMED (-205)
+#define UCL_E_OVERLAP_OVERRUN (-206)
+
+
+/* ucl_init() should be the first function you call.
+ * Check the return code !
+ *
+ * ucl_init() is a macro to allow checking that the library and the
+ * compiler's view of various types are consistent.
+ */
+#define ucl_init() __ucl_init2(UCL_VERSION,(int)sizeof(short),(int)sizeof(int),\
+ (int)sizeof(long),(int)sizeof(ucl_uint32),(int)sizeof(ucl_uint),\
+ (int)-1,(int)sizeof(char *),(int)sizeof(ucl_voidp),\
+ (int)sizeof(ucl_compress_t))
+UCL_EXTERN(int) __ucl_init2(ucl_uint32,int,int,int,int,int,int,int,int,int);
+
+/* version functions (useful for shared libraries) */
+UCL_EXTERN(ucl_uint32) ucl_version(void);
+UCL_EXTERN(const char *) ucl_version_string(void);
+UCL_EXTERN(const char *) ucl_version_date(void);
+UCL_EXTERN(const ucl_charp) _ucl_version_string(void);
+UCL_EXTERN(const ucl_charp) _ucl_version_date(void);
+
+/* string functions */
+UCL_EXTERN(int)
+ucl_memcmp(const ucl_voidp _s1, const ucl_voidp _s2, ucl_uint _len);
+UCL_EXTERN(ucl_voidp)
+ucl_memcpy(ucl_voidp _dest, const ucl_voidp _src, ucl_uint _len);
+UCL_EXTERN(ucl_voidp)
+ucl_memmove(ucl_voidp _dest, const ucl_voidp _src, ucl_uint _len);
+UCL_EXTERN(ucl_voidp)
+ucl_memset(ucl_voidp _s, int _c, ucl_uint _len);
+
+/* checksum functions */
+UCL_EXTERN(ucl_uint32)
+ucl_adler32(ucl_uint32 _adler, const ucl_bytep _buf, ucl_uint _len);
+UCL_EXTERN(ucl_uint32)
+ucl_crc32(ucl_uint32 _c, const ucl_bytep _buf, ucl_uint _len);
+UCL_EXTERN(const ucl_uint32p)
+ucl_get_crc32_table(void);
+
+/* memory allocation hooks */
+typedef ucl_voidp (__UCL_CDECL *ucl_malloc_hook_t) (ucl_uint);
+typedef void (__UCL_CDECL *ucl_free_hook_t) (ucl_voidp);
+UCL_EXTERN(void)
+ucl_set_malloc_hooks(ucl_malloc_hook_t, ucl_free_hook_t);
+UCL_EXTERN(void)
+ucl_get_malloc_hooks(ucl_malloc_hook_t*, ucl_free_hook_t*);
+
+#ifndef UCL_SAFE_ALLOC
+#define UCL_SAFE_ALLOC 1
+#include <stdio.h>
+#include <stdlib.h>
+
+/* safe calloc */
+static
+inline
+void *
+calloc_safe(size_t nmemb, size_t size)
+{
+ void *result;
+
+ result = calloc(nmemb, size);
+
+ if (!result)
+ {
+ fprintf(stderr, "[!] memory error\n");
+ exit(EXIT_FAILURE);
+ }
+
+ return result;
+}
+
+/* safe malloc */
+static
+inline
+void *
+malloc_safe(size_t size)
+{
+ void *result;
+
+ result = malloc(size);
+
+ if (!result)
+ {
+ fprintf(stderr, "[!] memory error\n");
+ exit(EXIT_FAILURE);
+ }
+
+ return result;
+}
+#endif /* UCL_SAFE_ALLOC */
+
+/* memory allocation functions */
+#if 0
+UCL_EXTERN(ucl_voidp) ucl_malloc(ucl_uint);
+UCL_EXTERN(ucl_voidp) ucl_alloc(ucl_uint, ucl_uint);
+UCL_EXTERN(void) ucl_free(ucl_voidp);
+#else
+# define ucl_malloc(a) (malloc_safe(a))
+# define ucl_alloc(a, b) (calloc_safe(a, b))
+# define ucl_free(a) (free(a))
+#endif
+
+
+/* misc. */
+UCL_EXTERN(ucl_bool) ucl_assert(int _expr);
+UCL_EXTERN(int) _ucl_config_check(void);
+typedef union { ucl_bytep p; ucl_uint u; } __ucl_pu_u;
+typedef union { ucl_bytep p; ucl_uint32 u32; } __ucl_pu32_u;
+
+/* align a char pointer on a boundary that is a multiple of `size' */
+UCL_EXTERN(unsigned) __ucl_align_gap(const ucl_voidp _ptr, ucl_uint _size);
+#define UCL_PTR_ALIGN_UP(_ptr,_size) \
+ ((_ptr) + (ucl_uint) __ucl_align_gap((const ucl_voidp)(_ptr),(ucl_uint)(_size)))
+
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* already included */
+
diff --git a/tools/z64compress/src/enc/yar.c b/tools/z64compress/src/enc/yar.c
new file mode 100644
index 0000000..823b342
--- /dev/null
+++ b/tools/z64compress/src/enc/yar.c
@@ -0,0 +1,450 @@
+/* <z64.me> yar.c: decode and encode MM yaz archives */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+#define FERR(x) { \
+ fprintf(stderr, x); \
+ fprintf(stderr, "\n"); \
+ exit(EXIT_FAILURE); \
+}
+
+/* surely an archive won't exceed 64 MB */
+#define YAR_MAX (1024 * 1024 * 64)
+
+/* align out address before writing compressed file */
+#define FILE_ALIGN \
+ while ((outSz % align)) \
+ { \
+ out[outSz] = 0; \
+ outSz += 1; \
+ }
+
+struct yarFile
+{
+ int idx; /* original index in list */
+ int ofs; /* global offset of file */
+};
+
+static
+unsigned int
+u32b(void *src)
+{
+ unsigned char *arr = src;
+
+ return (arr[0] << 24) | (arr[1] << 16) | (arr[2] << 8) | arr[3];
+}
+
+static
+void
+u32wr(void *dst, unsigned int src)
+{
+ unsigned char *arr = dst;
+
+ arr[0] = src >> 24;
+ arr[1] = src >> 16;
+ arr[2] = src >> 8;
+ arr[3] = src;
+}
+
+static
+void
+progress(const char *name, int progress, int end)
+{
+ fprintf(
+ stderr
+ , "\r""repacking '%s' %d/%d: "
+ , name
+ , progress
+ , end
+ );
+}
+
+/* reencode yar archive */
+/* returns 0 on success, pointer to error message otherwise */
+char *
+yar_reencode(
+ unsigned char *src /* source archive */
+ , unsigned int sz /* source archive size */
+ , unsigned char *dst /* destination archive */
+ , unsigned int *dst_sz /* destination archive size */
+ , int align /* compressed file alignment */
+
+ , const char *name /* name of archive (0 = hide progress) */
+ , const char *codec /* the expected encoding header "Yaz0" */
+ , void *imm /* intermediate buffer for conversion */
+ , void *ctx /* compression context (if applicable) */
+
+ /* decompresses file; return non-zero on fail; optional
+ * if files are already decompressed (up to user to know)
+ */
+ , int decode(void *src, void *dst, unsigned dstSz, unsigned *srcSz)
+
+ /* compress file; returns non-zero on fail; optional if
+ * files are desired to be left decompressed
+ */
+ , int encode(void *src, unsigned srcSz, void *dst, unsigned *dstSz, void *ctx)
+
+ /* test if file has been previously encoded; optional */
+ , int exist(void *src, unsigned srcSz, void *dst, unsigned *dstSz)
+)
+{
+ unsigned char *ss;
+ unsigned char *out;
+ unsigned int end;
+ unsigned int end_out;
+ unsigned int outSz = 0;
+ int progress_end;
+ struct yarFile *list = 0;
+ struct yarFile *item;
+ int list_num;
+
+ assert(src);
+ assert(sz);
+ assert(dst_sz);
+ assert(dst);
+ assert(align >= 0);
+ assert((align & 3) == 0); /* cannot have alignment smaller than 4 */
+
+ out = dst;
+
+ end = 0;
+
+ ss = src;
+ item = list;
+ do
+ {
+ unsigned ofs;
+ unsigned uncompSz;
+ unsigned OG_encSz;
+ unsigned char *b;
+
+ ofs = u32b(ss) + end;
+
+ /* first entry points to end of list, and first file */
+ if (!end)
+ {
+ end = ofs;
+ outSz = end;
+
+ /* allocate file list */
+ list_num = (end / 4) + 1;
+ list = calloc(list_num, sizeof(*list));
+ if (!list)
+ return "memory error";
+ item = list;
+
+ FILE_ALIGN
+
+ /* output file may be aligned differently */
+ end_out = outSz;
+
+ progress_end = end / 4;
+ }
+
+ /* b now points to compressed file */
+ b = src + ofs;
+
+ /* update progress display */
+ if (name)
+ progress(name, (ss - src) / 4, progress_end);
+
+ /* there should be room for 4-byte codec and 4-byte size */
+ if (b + 4 >= src + sz)
+ break;
+
+ /* decompressed file size is second word */
+ uncompSz = u32b(b + 4);
+
+ /* yaz-encoded file */
+ if (!memcmp(b, codec, 4))
+ {
+ unsigned char *fout = out + outSz;
+ unsigned encSz;
+
+ /* user doesn't want encoded data */
+ if (!encode)
+ {
+ imm = fout;
+ encSz = uncompSz;
+ }
+
+ /* decode 'b' only if user provided decoder */
+ if (decode)
+ {
+ if (decode(b, imm, uncompSz, &OG_encSz))
+ return "decoder error";
+ }
+ /* if no decoder is provided, direct copy */
+ else
+ memcpy(imm, b + 0x10, uncompSz);
+
+ /* encode only if user wants that */
+ if (encode)
+ {
+ /* if no exist function has been provided, or
+ * if it hasn't been encoded yet, encode it
+ */
+ if (!exist || !exist(imm, uncompSz, fout, &encSz))
+ {
+ if (encode(imm, uncompSz, fout, &encSz, ctx))
+ return "encoder error";
+ }
+ }
+
+ /* point current entry to new file location */
+ if (ss > src)
+ u32wr(out + (ss - src), outSz - end_out);
+
+ /* first entry follows different rules */
+ else
+ u32wr(out + (ss - src), end_out);
+
+ /* advance out_sz to immediately after current file */
+ outSz += encSz;
+
+ /* align output */
+ FILE_ALIGN
+ }
+
+ /* end of list */
+ else if (u32b(b) == 0)
+ break;
+
+ /* unknown codec */
+ else
+ {
+ char *errmsg = (char*)out;
+ char srep[16];
+ sprintf(srep, "%08x", u32b(b));
+ sprintf(
+ errmsg
+ , "unknown codec 0x%s encountered at %08X!\n"
+ , srep
+ , ofs
+ );
+ return errmsg;
+ }
+
+ ss += 4;
+ item += 1;
+
+ } while (ss - src < end);
+
+ /* update progress display */
+ if (name)
+ progress(name, progress_end, progress_end);
+
+ /* point final entry to end (four 00 bytes) */
+ u32wr(out + (ss - src), outSz - end_out);
+ memset(out + outSz, 0, 16);
+ outSz += 4;
+
+ /* in case list end changed due to padding, make multiple *
+ * end-of-list markers throughout the alignment space */
+ if (end_out > end)
+ {
+ unsigned i;
+ unsigned last = u32b(out + (end - 4));
+ for (i = 0; i < (end_out - end) / 4; ++i)
+ {
+ u32wr(out + end + i * 4, last);
+ }
+ }
+
+ /* align final output size to 16 */
+ if (outSz & 15)
+ outSz += 16 - (outSz & 15);
+
+ /* if new file was constructed, note its size */
+ *dst_sz = outSz;
+
+ /* cleanup */
+ free(list);
+
+ /* success */
+ return 0;
+}
+
+#ifdef YAR_MAIN_TEST
+/*
+ *
+ * usage example (writes decompressed archive)
+ *
+ */
+
+/* yaz decoder, courtesy of spinout182 */
+static
+int spinout_yaz_dec(void *_src, void *_dst, int dstSz)
+{
+ unsigned char *src = _src;
+ unsigned char *dst = _dst;
+
+ int srcPlace = 0, dstPlace = 0; /*current read/write positions*/
+
+ unsigned int validBitCount = 0; /*number of valid bits left in "code" byte*/
+ unsigned char currCodeByte = 0;
+
+ int uncompressedSize = dstSz;
+
+ src += 0x10;
+
+ while(dstPlace < uncompressedSize)
+ {
+ /*read new "code" byte if the current one is used up*/
+ if(!validBitCount)
+ {
+ currCodeByte = src[srcPlace];
+ ++srcPlace;
+ validBitCount = 8;
+ }
+
+ if(currCodeByte & 0x80)
+ {
+ /*direct copy*/
+ dst[dstPlace] = src[srcPlace];
+ dstPlace++;
+ srcPlace++;
+ }
+ else
+ {
+ /*RLE part*/
+ unsigned char byte1 = src[srcPlace];
+ unsigned char byte2 = src[srcPlace + 1];
+ srcPlace += 2;
+
+ unsigned int dist = ((byte1 & 0xF) << 8) | byte2;
+ unsigned int copySource = dstPlace - (dist + 1);
+
+ unsigned int numBytes = byte1 >> 4;
+ if(numBytes)
+ numBytes += 2;
+ else
+ {
+ numBytes = src[srcPlace] + 0x12;
+ srcPlace++;
+ }
+
+ /*copy run*/
+ int i;
+ for(i = 0; i < numBytes; ++i)
+ {
+ dst[dstPlace] = dst[copySource];
+ copySource++;
+ dstPlace++;
+ }
+ }
+
+ /*use next bit from "code" byte*/
+ currCodeByte <<= 1;
+ validBitCount-=1;
+ }
+
+ return 0;
+}
+
+
+/* encodes decompressed data, storing result in dst */
+static
+int encode(void *src, int srcSz, void *_dst, int *dstSz, void *ctx)
+{
+ unsigned char *dst = _dst;
+
+/* header */
+ /* codec */
+ memcpy(dst, "raw0", 4);
+
+ /* decompressed size */
+ u32wr(dst + 4, srcSz);
+
+ /* 8 more bytes of padding */
+ memset(dst + 8, 0, 8);
+
+/* contents */
+ /* direct copy (data left unencoded; you could encode here though) */
+ memcpy(dst + 0x10, src, srcSz);
+ *dstSz = srcSz + 0x10;
+
+ return 0;
+}
+
+/* checks if data has already been encoded */
+/* if it does, dst is filled with that data and 1 is returned */
+/* 0 is returned otherwise */
+static
+int exist(void *src, int srcSz, void *dst, int *dstSz)
+{
+ return 0;
+}
+
+/* unsafe but it's a test program so it's fine */
+static
+unsigned char *
+file_read(char *fn, unsigned *sz)
+{
+ FILE *fp;
+ unsigned char *raw;
+
+ assert(fn);
+ assert(sz);
+
+ fp = fopen(fn, "rb");
+ if (!fp)
+ FERR("failed to open file for reading");
+
+ fseek(fp, 0, SEEK_END);
+ *sz = ftell(fp);
+
+ if (!sz)
+ FERR("read file size == 0");
+
+ fseek(fp, 0, SEEK_SET);
+ raw = malloc(*sz);
+ if (!raw)
+ FERR("memory error");
+
+ if (fread(raw, 1, *sz, fp) != *sz)
+ FERR("file read error");
+
+ fclose(fp);
+ return raw;
+}
+
+int main(int argc, char *argv[])
+{
+ unsigned char *raw;
+ unsigned int raw_sz;
+
+ unsigned char *out;
+ unsigned char *imm;
+ unsigned int out_sz = 0;
+
+ if (argc != 2)
+ FERR("args: unyar in.yar > out.yar");
+
+ raw = file_read(argv[1], &raw_sz);
+ fprintf(stderr, "input file %s:\n", argv[1]);
+
+ /* surely an archive won't exceed 64 MB */
+ out = malloc(1024 * 1024 * 64);
+ imm = malloc(1024 * 1024 * 64);
+
+ yar_reencode(
+ raw, raw_sz, out, &out_sz, 12, "Yaz0", imm
+ , spinout_yaz_dec
+ , encode
+ , exist
+ );
+
+ /* write output to stdout */
+ fwrite(out, 1, out_sz, stdout);
+
+ free(raw);
+ free(out);
+ free(imm);
+}
+
+#endif /* YAR_MAIN_TEST */
+
diff --git a/tools/z64compress/src/enc/yar.h b/tools/z64compress/src/enc/yar.h
new file mode 100644
index 0000000..0889094
--- /dev/null
+++ b/tools/z64compress/src/enc/yar.h
@@ -0,0 +1,36 @@
+/* <z64.me> yar.c: decode and encode MM yaz archives */
+
+#ifndef Z64YAR_H_INCLUDED
+#define Z64YAR_H_INCLUDED
+
+/* reencode yar archive */
+/* returns 0 on success, pointer to error message otherwise */
+char *
+yar_reencode(
+ unsigned char *src /* source archive */
+ , unsigned int sz /* source archive size */
+ , unsigned char *dst /* destination archive */
+ , unsigned int *dst_sz /* destination archive size */
+ , int align /* compressed file alignment */
+
+ , const char *name /* name of archive (0 = hide progress) */
+ , const char *codec /* the expected encoding header "Yaz0" */
+ , void *imm /* intermediate buffer for conversion */
+ , void *ctx /* compression context (if applicable) */
+
+ /* decompresses file; return non-zero on fail; optional
+ * if files are already decompressed (up to user to know)
+ */
+ , int decode(void *src, void *dst, unsigned dstSz, unsigned *srcSz)
+
+ /* compress file; returns non-zero on fail; optional if
+ * files are desired to be left decompressed
+ */
+ , int encode(void *src, unsigned srcSz, void *dst, unsigned *dstSz, void *ctx)
+
+ /* test if file has been previously encoded; optional */
+ , int exist(void *src, unsigned srcSz, void *dst, unsigned *dstSz)
+);
+
+#endif /* Z64YAR_H_INCLUDED */
+
diff --git a/tools/z64compress/src/enc/yaz.c b/tools/z64compress/src/enc/yaz.c
new file mode 100644
index 0000000..a6897a7
--- /dev/null
+++ b/tools/z64compress/src/enc/yaz.c
@@ -0,0 +1,464 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include "stretchy_buffer.h"
+
+struct yazCtx
+{
+ uint16_t *c;
+ uint32_t *cmds;
+ uint16_t *ctrl;
+ uint8_t *raws;
+ uint8_t *ctl;
+ uint8_t *back;
+ int *return_data;
+};
+
+void yazCtx_free(void *_ctx)
+{
+ struct yazCtx *ctx = _ctx;
+
+ if (!ctx)
+ return;
+
+ free(ctx->return_data);
+ sb_free(ctx->c);
+ sb_free(ctx->raws);
+ sb_free(ctx->ctrl);
+ sb_free(ctx->cmds);
+ sb_free(ctx->ctl);
+ sb_free(ctx->back);
+}
+
+void *yazCtx_new(void)
+{
+ struct yazCtx *ctx = calloc(1, sizeof(*ctx));
+
+ if (!ctx)
+ return 0;
+
+ /* allocate everything */
+ ctx->c = sb_add(ctx->c, 32);
+ ctx->return_data = malloc(2 * sizeof(*ctx->return_data));
+ ctx->raws = sb_add(ctx->raws, 32);
+ ctx->ctrl = sb_add(ctx->ctrl, 32);
+ ctx->cmds = sb_add(ctx->cmds, 32);
+ ctx->ctl = sb_add(ctx->ctl , 32);
+ ctx->back = sb_add(ctx->back, 32);
+
+ return ctx;
+}
+
+// MIO0 encoding
+#define MIx 0
+
+#define min(MINA, MINB) ( ( (MINA)<(MINB) ) ? (MINA) : (MINB) )
+#define max(MAXA, MAXB) ( ( (MAXA)>(MAXB) ) ? (MAXA) : (MAXB) )
+
+#define U32b(u32X) ((u32X)[0]<<24|(u32X)[1]<<16|(u32X)[2]<<8|(u32X)[3])
+#define U16b(u32X) ((u32X)[0]<<8|(u32X)[1])
+#define U32wr(u32DST,u32SRC) (*(u32DST+0))=((u32SRC)>>24)&0xFF,\
+ (*(u32DST+1))=((u32SRC)>>16)&0xFF,\
+ (*(u32DST+2))=((u32SRC)>>8)&0xFF,\
+ (*(u32DST+3))=((u32SRC)>>0)&0xFF
+#define U16wr(u16DST,u16SRC) (*(u16DST+0))=((u16SRC)>>8)&0xFF,\
+ (*(u16DST+1))=((u16SRC)>>0)&0xFF
+
+static uint16_t *_enc_next_cpy(struct yazCtx *ctx, uint8_t *back) {
+ stb__sbn(ctx->c)=0; // initialize count to 0
+ int x;
+ for (x=0; x < (sb_count(back) & (0xFFFFFFFE)); x += 2) {
+ sb_push(ctx->c, (back[x]<<8) | back[x+1]);
+ }
+ return ctx->c;
+}
+
+static uint32_t _enc_z_from_tables(struct yazCtx *ctx, uint8_t *ctl, uint8_t *back, uint8_t *values, uint8_t *output, int dec_s, const char *mode) {
+ //_enc_next_cpy(NULL);
+ uint8_t *b=ctl, *v=values;
+ uint16_t *c = _enc_next_cpy(ctx, back);
+ uint32_t bit=0x10000, output_position=0;
+ // if dec_s declared, will keep accurate track
+ while (dec_s > 0) {
+ // get next bit
+ if (bit > 0xFFFF) {
+ bit = b[0];
+ b++;
+ output[output_position++] = bit & 0xFF;
+ bit |= 0x100;
+ }
+ // catch end of control commands
+ if (bit & 0x80) {
+ output[output_position++] = v[0];
+ v++;
+ dec_s--;
+ } else {
+ uint16_t val=c[0];
+ c++;
+ output[output_position++] = ((val>>8)&0xFF);
+ output[output_position++] = ((val)&0xFF);
+
+ // decrement dec_s accurately with length
+ val>>=12;
+ val&=0xF;
+ if(MIx)
+ dec_s--;
+ else if(val==0) {
+ val = v[0];
+ v++;
+ output[output_position++]=val;
+ val+=16;
+ }
+ dec_s -= val+2;
+ }
+ bit <<= 1;
+ }
+ return output_position;
+}
+
+static int _enc_find(struct yazCtx *ctx, uint8_t *array, uint8_t *needle, int needle_len, int start_index, int source_length) {
+ while(start_index < (source_length - needle_len + 1)) {
+ int r, index = -1;
+ for(r=start_index; r < (source_length - needle_len + 1); r++) {
+ if(array[r]==needle[0]) {
+ index=r;
+ break;
+ }
+ }
+
+ // if we did not find even the first element, the search has failed
+ if (index == -1)
+ return -1;
+
+ int i, p;
+ // check for needle
+ for (i = 0, p = index; i < needle_len; i++, p++) {
+ if (array[p] != needle[i])
+ break;
+ }
+ if(i==needle_len) {
+ // needle was found
+ return index;
+ }
+ // continue to search for needle
+ start_index = index + 1;
+ }
+ return -1;
+}
+
+static int *_enc_search(struct yazCtx *ctx, uint8_t *data, uint32_t pos, uint32_t sz, uint32_t cap/*=0x111*/) {
+ int *return_data = ctx->return_data;
+ // this is necessary unless pos is signed, so let's play it safe
+ int mp = (pos>0x1000)?(pos-0x1000):0;
+ int ml = min(cap, sz - pos);
+ if(ml<3) {
+ return_data[0]=return_data[1]=0;
+ return return_data;
+ }
+ int
+ hitp = 0,
+ hitl = 3,
+ hl = -1
+ ;
+
+ if (mp < pos) {
+ hl = _enc_find(ctx, data+mp, data+pos, hitl, 0, pos + hitl - mp);
+ while (hl < (pos - mp)) {
+ while ((hitl < ml) && (data[pos + hitl] == data[mp + hl + hitl]) ) {
+ hitl += 1;
+ }
+ mp += hl;
+ hitp = mp;
+ if (hitl == ml) {
+ return_data[0] = hitp;
+ return_data[1] = hitl;
+ return return_data;
+ }
+ mp += 1;
+ hitl += 1;
+ if (mp >= pos)
+ break;
+ hl = _enc_find(ctx, data+mp, data+pos, hitl, 0, pos + hitl - mp);
+ }
+ }
+
+ // if length < 4, return miss
+ if (hitl < 4)
+ hitl = 1;
+
+ return_data[0] = hitp;
+ return_data[1] = hitl-1;
+ return return_data;
+}
+
+static
+uint32_t encode(struct yazCtx *ctx, uint8_t *data, uint32_t data_size, uint8_t *output, const char *mode) {
+ uint32_t
+ cap=0x111,
+ sz=data_size,
+ pos=0,
+ flag=0x80000000
+ ;
+ // initialize count of each to 0
+ stb__sbn(ctx->raws)=0;
+ stb__sbn(ctx->ctrl)=0;
+ stb__sbn(ctx->cmds)=0;
+
+ sb_push(ctx->cmds, 0);
+
+ if(data_size==0) {
+ memcpy(output, mode, 4);
+ int i;
+ for(i=4; i<16; i++)
+ output[i]=0x00;
+ return 16;
+ }
+ while(pos<sz) {
+ int *search_return = _enc_search(ctx, data, pos, sz, cap);
+
+ int hitp = search_return[0];
+ int hitl = search_return[1];
+
+ if (hitl < 3) {
+ // push a raw if copying isn't possible
+ sb_push(ctx->raws, data[pos]);
+ ctx->cmds[sb_count(ctx->cmds)-1] |= flag;
+ pos += 1;
+ } else {
+ search_return = _enc_search(ctx, data, pos+1, sz, cap);
+ int tstp = search_return[0];
+ int tstl = search_return[1];
+
+ if ((hitl + 1) < tstl) {
+ sb_push(ctx->raws, data[pos]);
+ ctx->cmds[sb_count(ctx->cmds)-1] |= flag;
+ pos += 1;
+ flag >>= 1;
+ if (flag == 0) {
+ flag = 0x80000000;
+ sb_push(ctx->cmds, 0);
+ }
+ hitl = tstl;
+ hitp = tstp;
+ }
+ int e = pos - hitp - 1;
+ pos += hitl;
+ // handle MIx first, then Yax conditions
+ if (cap == 0x12) {
+ hitl -= 3;
+ sb_push(ctx->ctrl, (hitl<<12) | e);
+ } else if (hitl < 0x12) {
+ hitl -= 2;
+ sb_push(ctx->ctrl, (hitl<<12)|e);
+ } else {
+ sb_push(ctx->ctrl, e);
+ sb_push(ctx->raws, hitl - 0x12);
+ }
+ }
+ // advance the flag and refill if required
+ flag >>= 1;
+ if (flag == 0) {
+ flag = 0x80000000;
+ sb_push(ctx->cmds, 0);//cmds.push_back(0);
+ }
+ }
+
+ // if no cmds in final word, delete it
+ if (flag == 0x80000000) {
+ stb__sbn(ctx->cmds) -= 1;//cmds.erase(cmds.end()-1);
+ }
+
+ // block and stream differentiation
+ // Yay is block, Yaz is stream
+ int mode_block=1, mode_stream=1; // temporary, for testing
+ mode_block=!strcmp(mode,"Yay0");
+ if (mode_block ) {
+ uint32_t l = (sb_count(ctx->cmds) << 2) + 16;
+ uint32_t o = (sb_count(ctx->ctrl) << 1) + l;
+ memcpy(output, mode, 4);
+ U32wr(output+4, sz);
+ U32wr(output+8, l);
+ U32wr(output+12, o);
+
+ uint32_t output_position = 16;
+ uint32_t x;
+ for (x=0; x<sb_count(ctx->cmds); x++) {
+ U32wr(output+output_position, ctx->cmds[x]);
+ output_position+=4;
+ }
+ for (x=0; x<sb_count(ctx->ctrl); x++) {
+ U16wr(output+output_position, ctx->ctrl[x]);
+ output_position+=2;
+ }
+ for (x=0; x<sb_count(ctx->raws); x++) {
+ output[output_position++] = ctx->raws[x];
+ }
+ return output_position;
+ } else if(mode_stream) {
+ memcpy(output, mode, 4);
+ U32wr(output+4, sz);
+ U32wr(output+8, 0);
+ U32wr(output+12, 0);
+
+ uint32_t output_position = 0;
+ stb__sbn(ctx->ctl)=0; // initialize count to 0
+ stb__sbn(ctx->back)=0; // initialize count to 0
+ uint32_t x;
+ for (x=0; x < sb_count(ctx->cmds); x++) {
+ sb_push(ctx->ctl, (ctx->cmds[x]>>24)&0xFF);
+ sb_push(ctx->ctl, (ctx->cmds[x]>>16)&0xFF);
+ sb_push(ctx->ctl, (ctx->cmds[x]>>8)&0xFF);
+ sb_push(ctx->ctl, (ctx->cmds[x])&0xFF);
+ }
+ for (x=0; x < sb_count(ctx->ctrl); x++) {
+ sb_push(ctx->back, (ctx->ctrl[x]>>8)&0xFF);
+ sb_push(ctx->back, (ctx->ctrl[x])&0xFF);
+ }
+ output_position = _enc_z_from_tables(ctx, ctx->ctl, ctx->back, ctx->raws, output+16, data_size, mode);
+ return 16 + output_position;
+ }
+ return 0;
+}
+
+
+int
+yazenc(
+ void *_src
+ , unsigned src_sz
+ , void *_dst
+ , unsigned *dst_sz
+ , void *_ctx
+)
+{
+ unsigned char *src = _src;
+ unsigned char *dst = _dst;
+ if (!_ctx)
+ return 1;
+ *dst_sz = encode(_ctx, src, src_sz, dst, "Yaz0");
+ return 0;
+}
+
+/* yaz decoder, courtesy of spinout182 */
+int
+yazdec(void *_src, void *_dst, unsigned dstSz, unsigned *srcSz)
+{
+ unsigned char *src = _src;
+ unsigned char *dst = _dst;
+
+ int srcPlace = 0, dstPlace = 0; /*current read/write positions*/
+
+ unsigned int validBitCount = 0; /*number of valid bits left in "code" byte*/
+ unsigned char currCodeByte = 0;
+
+ int uncompressedSize = dstSz;
+
+ src += 0x10;
+
+ while(dstPlace < uncompressedSize)
+ {
+ /*read new "code" byte if the current one is used up*/
+ if(!validBitCount)
+ {
+ currCodeByte = src[srcPlace];
+ ++srcPlace;
+ validBitCount = 8;
+ }
+
+ if(currCodeByte & 0x80)
+ {
+ /*direct copy*/
+ dst[dstPlace] = src[srcPlace];
+ dstPlace++;
+ srcPlace++;
+ }
+ else
+ {
+ /*RLE part*/
+ unsigned char byte1 = src[srcPlace];
+ unsigned char byte2 = src[srcPlace + 1];
+ srcPlace += 2;
+
+ unsigned int dist = ((byte1 & 0xF) << 8) | byte2;
+ unsigned int copySource = dstPlace - (dist + 1);
+
+ unsigned int numBytes = byte1 >> 4;
+ if(numBytes)
+ numBytes += 2;
+ else
+ {
+ numBytes = src[srcPlace] + 0x12;
+ srcPlace++;
+ }
+
+ /*copy run*/
+ int i;
+ for(i = 0; i < numBytes; ++i)
+ {
+ dst[dstPlace] = dst[copySource];
+ copySource++;
+ dstPlace++;
+ }
+ }
+
+ /*use next bit from "code" byte*/
+ currCodeByte <<= 1;
+ validBitCount-=1;
+ }
+
+ if (srcSz)
+ *srcSz = srcPlace;
+
+ return 0;
+}
+
+#ifdef YAZ_MAIN_TEST
+
+#define FERR(x) { \
+ fprintf(stderr, x); \
+ fprintf(stderr, "\n"); \
+ exit(EXIT_FAILURE); \
+}
+
+int main(int argc, char* argv[])
+{
+ FILE *fp;
+ struct yazCtx *ctx;
+ unsigned size;
+
+ if(argc < 2)
+ FERR("args: yazenc in.raw > out.yaz");
+
+ fp = fopen(argv[1], "rb");
+ if(fp == NULL)
+ FERR("failed to open file");
+
+ fseek(fp, 0, SEEK_END);
+ size = ftell(fp);
+ fseek(fp, 0, SEEK_SET);
+
+ fprintf(stderr, "input file size: %d\n", size);
+
+ void *buf = malloc(size);
+ void *outbuf = malloc( (size + 64) * 2);
+
+ if (fread(buf, 1, size, fp) != size)
+ FERR("failed to read file");
+
+ fclose(fp);
+
+ ctx = yazCtx_new();
+ if (yazenc(buf, size, outbuf, &size, ctx))
+ FERR("encoding error");
+
+ if (fwrite(outbuf, 1, size, stdout) != size)
+ FERR("failed to write stdout");
+
+ yazCtx_free(ctx);
+ free(buf);
+ free(outbuf);
+ return EXIT_SUCCESS;
+}
+#endif /* YAZ_MAIN_TEST */
+
+
diff --git a/tools/z64compress/src/enc/zx7.c b/tools/z64compress/src/enc/zx7.c
new file mode 100644
index 0000000..4b4fdb0
--- /dev/null
+++ b/tools/z64compress/src/enc/zx7.c
@@ -0,0 +1,37 @@
+#if 0
+#include "zx7/zx7.h"
+#include "zx7/optimize.c"
+#include "zx7/compress.c"
+#include "zx7/zx7.c"
+
+int
+zx7enc(
+ void *_src
+ , unsigned src_sz
+ , void *_dst
+ , unsigned *dst_sz
+ , void *_ctx
+)
+{
+ unsigned char *src = _src;
+ unsigned char *dst = _dst;
+
+ int hlen = 8; /* header length; required due to MM's archives */
+ memset(dst, 0, hlen);
+ memcpy(dst, "ZX70", 4);
+ dst[4] = (src_sz >> 24);
+ dst[5] = (src_sz >> 16);
+ dst[6] = (src_sz >> 8);
+ dst[7] = (src_sz >> 0);
+
+ *dst_sz = ZX7Compress(src, src_sz, dst + hlen);
+
+ if (!*dst_sz)
+ return 1;
+
+ *dst_sz += hlen;
+
+ return 0;
+}
+#endif
+
diff --git a/tools/z64compress/src/enc/zx7/compress.c b/tools/z64compress/src/enc/zx7/compress.c
new file mode 100644
index 0000000..1df625e
--- /dev/null
+++ b/tools/z64compress/src/enc/zx7/compress.c
@@ -0,0 +1,160 @@
+/*
+ * (c) Copyright 2012-2016 by Einar Saukas. 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.
+ * * The name of its author may not 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 <COPYRIGHT HOLDER> 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 "zx7.h"
+
+#if !TARGET_PRIZM
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdlib.h>
+
+static unsigned char* c_output_data;
+static unsigned int c_output_index;
+static unsigned int c_bit_index;
+static int c_bit_mask;
+
+static inline void c_write_byte(int value) {
+ c_output_data[c_output_index++] = value;
+}
+
+static void c_write_bit(int value) {
+ if (c_bit_mask == 0) {
+ c_bit_mask = 128;
+ c_bit_index = c_output_index;
+ c_write_byte(0);
+ }
+ if (value > 0) {
+ c_output_data[c_bit_index] |= c_bit_mask;
+ }
+ c_bit_mask >>= 1;
+}
+
+static void write_elias_gamma(int value) {
+ int i;
+
+ for (i = 2; i <= value; i <<= 1) {
+ c_write_bit(0);
+ }
+ while ((i >>= 1) > 0) {
+ c_write_bit(value & i);
+ }
+}
+
+unsigned char *compress(
+ Optimal *optimal
+ , unsigned char *input_data
+ , unsigned int input_size
+ , long skip
+ , unsigned int *output_size
+ , unsigned char *dst
+)
+{
+ unsigned int input_index;
+ unsigned int input_prev;
+ int offset1;
+ int mask;
+ int i;
+
+ /* calculate and allocate output buffer */
+ input_index = input_size-1;
+ *output_size = (optimal[input_index].bits+18+7)/8 + 3;
+ unsigned char *ret = dst;
+ if (!ret) {
+ return 0;
+ }
+
+ c_output_data = ret + 3;
+
+ /* un-reverse optimal sequence */
+ optimal[input_index].bits = 0;
+ while (input_index != skip) {
+ input_prev = input_index - (optimal[input_index].len > 0 ? optimal[input_index].len : 1);
+ optimal[input_prev].bits = input_index;
+ input_index = input_prev;
+ }
+
+ c_output_index = 0;
+ c_bit_mask = 0;
+
+ /* first byte is always literal */
+ c_write_byte(input_data[input_index]);
+
+ /* process remaining bytes */
+ while ((input_index = optimal[input_index].bits) > 0) {
+ if (optimal[input_index].len == 0) {
+
+ /* literal indicator */
+ c_write_bit(0);
+
+ /* literal value */
+ c_write_byte(input_data[input_index]);
+
+ } else {
+
+ /* sequence indicator */
+ c_write_bit(1);
+
+ /* sequence length */
+ write_elias_gamma(optimal[input_index].len-1);
+
+ /* sequence offset */
+ offset1 = optimal[input_index].offset-1;
+ if (offset1 < 128) {
+ c_write_byte(offset1);
+ } else {
+ offset1 -= 128;
+ c_write_byte((offset1 & 127) | 128);
+ for (mask = 1024; mask > 127; mask >>= 1) {
+ c_write_bit(offset1 & mask);
+ }
+ }
+ }
+ }
+
+ /* sequence indicator */
+ c_write_bit(1);
+
+ /* end marker > MAX_LEN */
+ for (i = 0; i < 16; i++) {
+ c_write_bit(0);
+ }
+ c_write_bit(1);
+
+ // decompressed size is first three bytes
+ ret[0] = (input_size & 0xFF0000) >> 16;
+ ret[1] = (input_size & 0x00FF00) >> 8;
+ ret[2] = (input_size & 0x0000FF);
+
+ return ret;
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/z64compress/src/enc/zx7/dzx7.c b/tools/z64compress/src/enc/zx7/dzx7.c
new file mode 100644
index 0000000..5909f31
--- /dev/null
+++ b/tools/z64compress/src/enc/zx7/dzx7.c
@@ -0,0 +1,138 @@
+/*
+ * (c) Copyright 2015 by Einar Saukas. 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.
+ * * The name of its author may not 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 <COPYRIGHT HOLDER> 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 "zx7.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+static unsigned char *d_input_data;
+static unsigned char *d_output_data;
+static unsigned int d_input_index;
+static unsigned int d_output_index;
+static unsigned int d_input_size;
+static int bit_mask;
+static int bit_value;
+
+static
+int d_read_byte(void) {
+ return d_input_data[d_input_index++];
+}
+
+static
+int d_read_bit(void) {
+ bit_mask >>= 1;
+ if (bit_mask == 0) {
+ bit_mask = 128;
+ bit_value = d_read_byte();
+ }
+ return bit_value & bit_mask ? 1 : 0;
+}
+
+static
+int read_elias_gamma(void) {
+ int i;
+ int value;
+
+ i = 0;
+ while (!d_read_bit()) {
+ i++;
+ }
+ if (i > 15) {
+ return -1;
+ }
+ value = 1;
+ while (i--) {
+ value = value << 1 | d_read_bit();
+ }
+ return value;
+}
+
+int read_offset(void) {
+ int value;
+ int i;
+
+ value = d_read_byte();
+ if (value < 128) {
+ return value;
+ } else {
+ i = d_read_bit();
+ i = i << 1 | d_read_bit();
+ i = i << 1 | d_read_bit();
+ i = i << 1 | d_read_bit();
+ return ((value & 127) | (i << 7)) + 128;
+ }
+}
+
+static
+void d_write_byte(int value) {
+ d_output_data[d_output_index++] = value;
+}
+
+void d_write_bytes(int offset, int length) {
+ int i;
+ while (length-- > 0) {
+ i = d_output_index-offset;
+ d_write_byte(d_output_data[i]);
+ }
+}
+
+unsigned int ZX7GetDecompressedSize(unsigned char* compressedData) {
+ return compressedData[0] * 65536 + compressedData[1] * 256 + compressedData[2];
+}
+
+int ZX7Decompress(unsigned char* srcData, unsigned char* destData, unsigned int destLength) {
+ if (destLength < ZX7GetDecompressedSize(srcData) || !srcData || !destData) {
+ return -1;
+ }
+
+ int length;
+
+ d_input_data = srcData + 3;
+ d_output_data = destData;
+
+ d_input_size = 0;
+ d_input_index = 0;
+ d_output_index = 0;
+ bit_mask = 0;
+
+ d_write_byte(d_read_byte());
+ while (1) {
+ if (!d_read_bit()) {
+ d_write_byte(d_read_byte());
+ } else {
+ length = read_elias_gamma()+1;
+ if (length == 0) {
+ return 0;
+ }
+ d_write_bytes(read_offset()+1, length);
+ }
+ }
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/tools/z64compress/src/enc/zx7/optimize.c b/tools/z64compress/src/enc/zx7/optimize.c
new file mode 100644
index 0000000..e0d5939
--- /dev/null
+++ b/tools/z64compress/src/enc/zx7/optimize.c
@@ -0,0 +1,167 @@
+/*
+ * (c) Copyright 2012-2016 by Einar Saukas. 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.
+ * * The name of its author may not 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 <COPYRIGHT HOLDER> 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 "zx7.h"
+
+#if !TARGET_PRIZM
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#include <stdlib.h>
+#include <string.h> /* memset */
+
+/* reusable memory (free using zx7_shutdown()) */
+static unsigned int *min = 0;
+static unsigned int *max = 0;
+static unsigned int *matches = 0;
+static unsigned int *match_slots = 0;
+static Optimal *optimal = 0;
+
+void
+zx7_shutdown(void)
+{
+ if (min)
+ free(min);
+ if (max)
+ free(max);
+ if (matches)
+ free(matches);
+ if (match_slots)
+ free(match_slots);
+ if (optimal)
+ free(optimal);
+}
+
+static int elias_gamma_bits(int value) {
+ int bits;
+
+ bits = 1;
+ while (value > 1) {
+ bits += 2;
+ value >>= 1;
+ }
+ return bits;
+}
+
+static int count_bits(int offset, int len) {
+ return 1 + (offset > 128 ? 12 : 8) + elias_gamma_bits(len-1);
+}
+
+Optimal *optimize(
+ unsigned char *input_data
+ , unsigned int input_size
+ , unsigned long skip
+) {
+
+ unsigned int *match;
+ int match_index;
+ int offset;
+ unsigned int len;
+ unsigned int best_len;
+ unsigned int bits;
+ unsigned int i;
+
+ /* allocate all data structures at once */
+ if (!min)
+ min = malloc((MAX_OFFSET+1) * sizeof(*min));
+ if (!max)
+ max = malloc((MAX_OFFSET+1) * sizeof(*max));
+ if (!matches)
+ matches = malloc(256 * 256 * sizeof(*matches));
+ if (!match_slots)
+ match_slots = malloc(input_size * sizeof(*match_slots));
+ if (!optimal)
+ optimal = malloc(input_size * sizeof(*optimal));
+
+ if (!min || !max || !matches || !match_slots || !optimal)
+ return 0;
+
+ memset(min, 0, (MAX_OFFSET+1) * sizeof(*min));
+ memset(max, 0, (MAX_OFFSET+1) * sizeof(*max));
+ memset(matches, 0, 256 * 256 * sizeof(*matches));
+ memset(match_slots, 0, input_size * sizeof(*match_slots));
+ memset(optimal, 0, input_size * sizeof(*optimal));
+
+ /* index skipped bytes */
+ for (i = 1; i <= skip; i++) {
+ match_index = input_data[i-1] << 8 | input_data[i];
+ match_slots[i] = matches[match_index];
+ matches[match_index] = i;
+ }
+
+ /* first byte is always literal */
+ optimal[skip].bits = 8;
+
+ /* process remaining bytes */
+ for (; i < input_size; i++) {
+
+ optimal[i].bits = optimal[i-1].bits + 9;
+ match_index = input_data[i-1] << 8 | input_data[i];
+ best_len = 1;
+ for (match = &matches[match_index]; *match != 0 && best_len < MAX_LEN; match = &match_slots[*match]) {
+ offset = i - *match;
+ if (offset > MAX_OFFSET) {
+ *match = 0;
+ break;
+ }
+
+ for (len = 2; len <= MAX_LEN && i >= skip+len; len++) {
+ if (len > best_len) {
+ best_len = len;
+ bits = optimal[i-len].bits + count_bits(offset, len);
+ if (optimal[i].bits > bits) {
+ optimal[i].bits = bits;
+ optimal[i].offset = offset;
+ optimal[i].len = len;
+ }
+ } else if (max[offset] != 0 && i+1 == max[offset]+len) {
+ len = i-min[offset];
+ if (len > best_len) {
+ len = best_len;
+ }
+ }
+ if (i < offset+len || input_data[i-len] != input_data[i-len-offset]) {
+ break;
+ }
+ }
+ min[offset] = i+1-len;
+ max[offset] = i;
+ }
+ match_slots[i] = matches[match_index];
+ matches[match_index] = i;
+ }
+
+ return optimal;
+}
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/z64compress/src/enc/zx7/zx7.c b/tools/z64compress/src/enc/zx7/zx7.c
new file mode 100644
index 0000000..06f65d3
--- /dev/null
+++ b/tools/z64compress/src/enc/zx7/zx7.c
@@ -0,0 +1,46 @@
+/*
+ * (c) Copyright 2012-2016 by Einar Saukas. 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.
+ * * The name of its author may not 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 <COPYRIGHT HOLDER> 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 "zx7.h"
+
+#if !TARGET_PRIZM
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// ZX7 Compress the given data, outData is malloc'd and the return value is the length (first 3 bytes of data will be 24-bit size result for convenience)
+unsigned int ZX7Compress(unsigned char *srcData, unsigned int inLength, unsigned char *outData) {
+ unsigned int output_size;
+ compress(optimize(srcData, inLength, 0), srcData, inLength, 0, &output_size, outData);
+
+ return output_size;
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/z64compress/src/enc/zx7/zx7.h b/tools/z64compress/src/enc/zx7/zx7.h
new file mode 100644
index 0000000..a3a4e6c
--- /dev/null
+++ b/tools/z64compress/src/enc/zx7/zx7.h
@@ -0,0 +1,66 @@
+/*
+ * (c) Copyright 2012-2016 by Einar Saukas. 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.
+ * * The name of its author may not 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 <COPYRIGHT HOLDER> 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.
+ */
+
+#pragma once
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if !TARGET_PRIZM
+
+typedef struct optimal_t {
+ unsigned int bits;
+ int offset;
+ int len;
+} Optimal;
+
+#define MAX_OFFSET 2176 /* range 1..2176 */
+#define MAX_LEN 65536 /* range 2..65536 */
+
+Optimal *optimize(unsigned char *input_data, unsigned int input_size, unsigned long skip);
+
+unsigned char *compress(Optimal *optimal, unsigned char *input_data, unsigned int input_size, long skip, unsigned int *output_size, unsigned char *dst);
+
+// THOMAS : added these for my use:
+
+// ZX7 Compress the given data, outData is malloc'd and the return value is the length (first 3 bytes of data will be 24-bit size result for convenience)
+unsigned int ZX7Compress(unsigned char *srcData, unsigned int inLength, unsigned char *outData);
+
+#endif
+
+// Get decompressed size of ZX7Compress'd data
+unsigned int ZX7GetDecompressedSize(unsigned char* compressedData);
+
+// Decompress the given data. Returns 0 with no errors
+int ZX7Decompress(unsigned char* srcData, unsigned char* destData, unsigned int destLength);
+
+/* free reusable buffers */
+void
+zx7_shutdown(void);
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/tools/z64compress/src/main.c b/tools/z64compress/src/main.c
new file mode 100644
index 0000000..bd04405
--- /dev/null
+++ b/tools/z64compress/src/main.c
@@ -0,0 +1,379 @@
+#include <ctype.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "wow.h"
+#include "rom.h"
+
+FILE* printer;
+
+static void compress(struct rom *rom, int start, int end)
+{
+ rom_dma_compress(rom, start, end, 1);
+}
+
+static void skip(struct rom *rom, int start, int end)
+{
+ rom_dma_compress(rom, start, end, 0);
+}
+
+static void repack(struct rom *rom, int start, int end)
+{
+ rom_dma_repack(
+ rom
+ , start
+ , end
+ , "yaz" /* old codec */
+ , 0 /* new codec */
+ );
+}
+
+static void do_pattern(
+ struct rom *rom
+ , const char *str
+ , void func(struct rom *rom, int start, int end)
+)
+{
+ const char *Ostr = str;
+ int last_int = -1;
+ int last_op = 0;
+ int cur;
+ int len;
+
+ while (*str)
+ {
+ if (*str == '\'' || *str == '"')
+ {
+ ++str;
+ continue;
+ }
+
+ /* calculate length of current token */
+ len = strspn(str, "0123456789xXaAbBcCdDeEfF"); /* allow hex */
+ if (!len) /* no len, assume it's an operator */
+ len = 1;
+
+ /* is a number or variable */
+ if (isdigit(*str) || !strncmp(str, "END", 3))
+ {
+ /* 'END' is shorthand for last entry */
+ if (!strncmp(str, "END", 3))
+ {
+ cur = rom_dma_num(rom);
+ str += 2;
+ }
+
+ /* otherwise, it's a number */
+ else
+ sscanf(str, "%i", &cur);
+
+ if (cur < last_int)
+ die(
+ "invalid pattern '%s'; "
+ "values are not in ascending order"
+ , Ostr
+ );
+
+ /* apply operations on item(s) */
+ if (last_op == '-')
+ func(rom, last_int, cur);
+ else
+ func(rom, cur, cur);
+
+ /* prevents processing this item
+ * again when 'through' is used
+ */
+ cur += 1;
+ }
+
+ /* 'through' or 'single item', respectively */
+ else if (*str == '-' || *str == ',')
+ {
+ if (last_int < 0)
+ die(
+ "invalid pattern '%s'; "
+ "pattern does not begin with number"
+ , Ostr
+ );
+ last_op = *str;
+ }
+
+ /* unknown character encountered */
+ else
+ {
+ die(
+ "invalid pattern '%s'; "
+ "encountered unknown operator '%c'"
+ , Ostr
+ , *str
+ );
+ }
+
+ /* advance */
+ str += len;
+ last_int = cur;
+ }
+}
+
+static void usage(void)
+{
+ /* compression examples for users to adapt to their needs */
+ fprintf(printer, "\n");
+ fprintf(printer, " compressing oot debug\n");
+ fprintf(printer, " --in \"path/to/in.z64\"\n");
+ fprintf(printer, " --out \"path/to/out.z64\"\n");
+ fprintf(printer, " --mb 32\n");
+ fprintf(printer, " --codec yaz\n");
+ fprintf(printer, " --cache \"path/to/cache\"\n");
+ fprintf(printer, " --dma \"0x12F70,1548\"\n");
+ fprintf(printer, " --compress \"9-14,28-END\"\n");
+ fprintf(printer, " --threads 4\n");
+ fprintf(printer, "\n");
+ fprintf(printer, " compressing oot ntsc 1.0\n");
+ fprintf(printer, " --in \"path/to/in.z64\"\n");
+ fprintf(printer, " --out \"path/to/out.z64\"\n");
+ fprintf(printer, " --mb 32\n");
+ fprintf(printer, " --codec yaz\n");
+ fprintf(printer, " --cache \"path/to/cache\"\n");
+ fprintf(printer, " --dma \"0x7430,1526\"\n");
+ fprintf(printer, " --compress \"10-14,27-END\"\n");
+ fprintf(printer, " --threads 4\n");
+ fprintf(printer, "\n");
+ fprintf(printer, " compressing mm usa\n");
+ fprintf(printer, " --in \"path/to/in.z64\"\n");
+ fprintf(printer, " --out \"path/to/out.z64\"\n");
+ fprintf(printer, " --mb 32\n");
+ fprintf(printer, " --codec yaz\n");
+ fprintf(printer, " --cache \"path/to/cache\"\n");
+ fprintf(printer, " --dma \"0x1A500,1568\"\n");
+ fprintf(printer, " --compress \"10-14,23,24,31-END\"\n");
+ fprintf(printer, " --skip \"1127\"\n");
+ fprintf(printer, " --repack \"15-20,22\"\n");
+ fprintf(printer, " --threads 4\n");
+ fprintf(printer, "\n");
+ fprintf(printer, " arguments\n");
+ fprintf(printer, " --in uncompressed input rom\n");
+ fprintf(printer, "\n");
+ fprintf(printer, " --out compressed output rom\n");
+ fprintf(printer, "\n");
+ fprintf(printer, " --matching attempt matching compression at the cost of\n");
+ fprintf(printer, " some optimizations and reduced performance\n");
+ fprintf(printer, "\n");
+ fprintf(printer, " --mb how many mb the compressed rom should be\n");
+ fprintf(printer, "\n");
+ fprintf(printer, " --codec currently supported codecs\n");
+ fprintf(printer, " yaz\n");
+ fprintf(printer, " ucl\n");
+ fprintf(printer, " lzo\n");
+ fprintf(printer, " aplib\n");
+ fprintf(printer, " * to use non-yaz codecs, find patches\n");
+ fprintf(printer, " and code on my z64enc repo\n");
+ fprintf(printer, "\n");
+ fprintf(printer, " --cache is optional and won't be created if\n");
+ fprintf(printer, " no path is specified (having a cache\n");
+ fprintf(printer, " makes subsequent compressions faster)\n");
+ fprintf(printer, " * pro-tip: linux users who don't want a\n");
+ fprintf(printer, " cache to persist across power cycles\n");
+ fprintf(printer, " can use the path \"/tmp/z64compress\"\n");
+ fprintf(printer, "\n");
+ fprintf(printer, " --dma specify dmadata address and count\n");
+ fprintf(printer, "\n");
+ fprintf(printer, " --compress enable compression on specified files\n");
+ fprintf(printer, "\n");
+ fprintf(printer, " --skip disable compression on specified files\n");
+ fprintf(printer, "\n");
+ fprintf(printer, " --repack handles Majora's Mask archives\n");
+ fprintf(printer, "\n");
+ fprintf(printer, " --threads optional multithreading;\n");
+ fprintf(printer, " exclude this argument to disable it\n");
+ fprintf(printer, "\n");
+ fprintf(printer, " --only-stdout reserve stderr for errors and print\n");
+ fprintf(printer, " everything else to stdout\n");
+ fprintf(printer, "\n");
+ fprintf(printer, " arguments are executed as they\n");
+ fprintf(printer, " are parsed, so order matters!\n");
+ fprintf(printer, "\n");
+}
+
+wow_main
+{
+ struct rom *rom = 0;
+ const char *Ain = 0;
+ const char *Aout = 0;
+ const char *Adma = 0;
+ const char *Acodec = 0;
+ const char *Acache = 0;
+ int Amb = 0;
+ int Athreads = 0;
+ bool Amatching = false;
+ bool Aonly_stdout = false;
+ wow_main_argv;
+
+ printer = stderr;
+ for (int i = 1; i < argc; ++i)
+ {
+ if (!strcmp(argv[i], "--only-stdout"))
+ {
+ setvbuf(stdout, NULL, _IONBF, 0);
+ printer = stdout;
+ }
+ }
+
+ fprintf(printer, "welcome to z64compress 1.0.2 <z64.me>\n");
+
+ if (argc <= 1)
+ {
+ usage();
+ return EXIT_FAILURE;
+ }
+
+ /* hacky argument handling */
+ for (int i = 1; i < argc; i += 2)
+ {
+ const char *arg = argv[i];
+
+ /* arguments that do not require additional parameters */
+
+ if(!strcmp(arg, "--only-stdout"))
+ {
+ if (Aonly_stdout)
+ die("--only-stdout arg provided more than once");
+ // handled above
+ Aonly_stdout = true;
+ i--;
+ continue;
+ }
+ else if (!strcmp(arg, "--matching"))
+ {
+ if (Amatching)
+ die("--matching arg provided more than once");
+ Amatching = true;
+ i--;
+ continue;
+ }
+
+ /* arguments with additional parameters */
+
+ const char *next = argv[i + 1];
+
+ if (!next)
+ die("%s missing parameter", arg);
+
+ if (!strcmp(arg, "--in"))
+ {
+ if (Ain)
+ die("--in arg provided more than once");
+ Ain = next;
+ rom = rom_new(Ain);
+ }
+ else if (!strcmp(arg, "--out"))
+ {
+ if (Aout)
+ die("--out arg provided more than once");
+ Aout = next;
+ }
+ else if (!strcmp(arg, "--cache"))
+ {
+ if (Acache)
+ die("--cache arg provided more than once");
+ Acache = next;
+ rom_set_cache(rom, Acache);
+ }
+ else if (!strcmp(arg, "--codec"))
+ {
+ if (Acodec)
+ die("--codec arg provided more than once");
+ if (!Ain)
+ die("--dma arg provided before --in arg");
+ Acodec = next;
+ rom_set_codec(rom, Acodec);
+ }
+ else if (!strcmp(arg, "--dma"))
+ {
+ int num;
+ int start = 0;
+
+ if (!Acodec)
+ die("--dma arg provided before --codec arg");
+ if (!Ain)
+ die("--dma arg provided before --in arg");
+ if (Adma)
+ die("--dma arg provided more than once");
+ Adma = next;
+ if (sscanf(Adma, "%i,%i", &start, &num) != 2)
+ die("--dma bad formatting '%s'", Adma);
+ rom_dma(rom, start, num, Amatching);
+ }
+ else if (!strcmp(arg, "--mb"))
+ {
+ if (Amb)
+ die("--mb arg provided more than once");
+ if (sscanf(next, "%i", &Amb) != 1)
+ die("--mb could not get value from string '%s'", next);
+ if (Amb <= 0)
+ die("--mb invalid value %d", Amb);
+ }
+ else if (!strcmp(arg, "--compress"))
+ {
+ if (!Adma)
+ die("--compress arg provided before --dma arg");
+ do_pattern(rom, next, compress);
+ }
+ else if (!strcmp(arg, "--skip"))
+ {
+ if (!Adma)
+ die("--skip arg provided before --dma arg");
+ do_pattern(rom, next, skip);
+ }
+ else if (!strcmp(arg, "--repack"))
+ {
+ if (!Adma)
+ die("--repack arg provided before --dma arg");
+ if (!Acodec)
+ die("--repack arg provided before --codec arg");
+ do_pattern(rom, next, repack);
+ }
+ else if(!strcmp(arg, "--threads"))
+ {
+ if (Athreads)
+ die("--threads arg provided more than once");
+ if (sscanf(next, "%i", &Athreads) != 1)
+ die("--threads could not get value from string '%s'", next);
+ if (Athreads < 0)
+ die("--threads invalid value %d", Athreads);
+ }
+ else
+ {
+ die("unknown argument '%s'", arg);
+ }
+ }
+
+ #define ARG_ZERO_TEST(TEST, NAME) \
+ if (!(TEST)) \
+ die("no " NAME " arg provided")
+
+ ARG_ZERO_TEST(Ain , "--in" );
+ ARG_ZERO_TEST(Aout , "--out" );
+ ARG_ZERO_TEST(Acodec, "--codec");
+
+ #undef ARG_ZERO_TEST
+
+ /* finished initializing dma settings */
+ rom_dma_ready(rom, Amatching);
+
+ /* compress rom */
+ rom_compress(rom, Amb, Athreads, Amatching);
+ fprintf(printer, "rom compressed successfully!\n");
+
+ /* write compressed rom */
+ rom_save(rom, Aout);
+ fprintf(printer, "compressed rom written successfully!\n");
+
+ /* cleanup */
+ rom_free(rom);
+
+ return EXIT_SUCCESS;
+}
+
diff --git a/tools/z64compress/src/n64crc.c b/tools/z64compress/src/n64crc.c
new file mode 100644
index 0000000..a34d646
--- /dev/null
+++ b/tools/z64compress/src/n64crc.c
@@ -0,0 +1,197 @@
+/* snesrc - SNES Recompiler
+ *
+ * Mar 23, 2010: addition by spinout to actually fix CRC if it is incorrect
+ *
+ * Copyright notice for this file:
+ * Copyright (C) 2005 Parasyte
+ *
+ * Based on uCON64's N64 checksum algorithm by Andreas Sterbenz
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <assert.h>
+
+#define ROL(i, b) (((i) << (b)) | ((i) >> (32 - (b))))
+#define BYTES2LONG(b) ( (b)[0] << 24 | \
+ (b)[1] << 16 | \
+ (b)[2] << 8 | \
+ (b)[3] )
+
+#define N64_HEADER_SIZE 0x40
+#define N64_BC_SIZE (0x1000 - N64_HEADER_SIZE)
+
+#define N64_CRC1 0x10
+#define N64_CRC2 0x14
+
+#define CHECKSUM_START 0x00001000
+#define CHECKSUM_LENGTH 0x00100000
+#define CHECKSUM_CIC6102 0xF8CA4DDC
+#define CHECKSUM_CIC6103 0xA3886759
+#define CHECKSUM_CIC6105 0xDF26F436
+#define CHECKSUM_CIC6106 0x1FEA617A
+
+
+static void gen_table(unsigned int crc_table[256])
+{
+ unsigned int crc, poly;
+ int i, j;
+
+ poly = 0xEDB88320;
+ for (i = 0; i < 256; i++) {
+ crc = i;
+ for (j = 8; j > 0; j--) {
+ if (crc & 1) crc = (crc >> 1) ^ poly;
+ else crc >>= 1;
+ }
+ crc_table[i] = crc;
+ }
+}
+
+
+static unsigned int crc32(
+ unsigned int crc_table[256]
+ , unsigned char *data
+ , int len
+)
+{
+ unsigned int crc = ~0;
+ int i;
+
+ for (i = 0; i < len; i++) {
+ crc = (crc >> 8) ^ crc_table[(crc ^ data[i]) & 0xFF];
+ }
+
+ return ~crc;
+}
+
+
+static int N64GetCIC(unsigned int crc_table[256], unsigned char *data)
+{
+ switch (crc32(crc_table, &data[N64_HEADER_SIZE], N64_BC_SIZE)) {
+ case 0x6170A4A1: return 6101;
+ case 0x90BB6CB5: return 6102;
+ case 0x0B050EE0: return 6103;
+ case 0x98BC2C86: return 6105;
+ case 0xACC8580A: return 6106;
+ }
+
+ return 0;
+}
+
+
+static int N64CalcCRC(
+ unsigned int crc_table[256]
+ , unsigned int *crc
+ , unsigned char *data
+)
+{
+ int bootcode, i;
+ unsigned int seed;
+ unsigned int t1, t2, t3;
+ unsigned int t4, t5, t6;
+ unsigned int r, d;
+
+ switch ((bootcode = N64GetCIC(crc_table, data))) {
+ case 6101:
+ case 6102:
+ seed = CHECKSUM_CIC6102;
+ break;
+ case 6103:
+ seed = CHECKSUM_CIC6103;
+ break;
+ case 6105:
+ seed = CHECKSUM_CIC6105;
+ break;
+ case 6106:
+ seed = CHECKSUM_CIC6106;
+ break;
+ default:
+ return 1;
+ }
+
+ t1 = t2 = t3 = t4 = t5 = t6 = seed;
+
+ i = CHECKSUM_START;
+ while (i < (CHECKSUM_START + CHECKSUM_LENGTH)) {
+ d = BYTES2LONG(&data[i]);
+ if ((t6 + d) < t6)
+ t4++;
+ t6 += d;
+ t3 ^= d;
+ r = ROL(d, (d & 0x1F));
+ t5 += r;
+ if (t2 > d)
+ t2 ^= r;
+ else
+ t2 ^= t6 ^ d;
+
+ if (bootcode == 6105)
+ t1 += BYTES2LONG(&data[N64_HEADER_SIZE + 0x0710 + (i & 0xFF)]) ^ d;
+ else
+ t1 += t5 ^ d;
+
+ i += 4;
+ }
+ if (bootcode == 6103) {
+ crc[0] = (t6 ^ t4) + t3;
+ crc[1] = (t5 ^ t2) + t1;
+ }
+ else if (bootcode == 6106) {
+ crc[0] = (t6 * t4) + t3;
+ crc[1] = (t5 * t2) + t1;
+ }
+ else {
+ crc[0] = t6 ^ t4 ^ t3;
+ crc[1] = t5 ^ t2 ^ t1;
+ }
+
+ return 0;
+}
+
+
+/* recalculate rom crc */
+void n64crc(void *rom)
+{
+ unsigned int crc_table[256];
+ unsigned char CRC1[4];
+ unsigned char CRC2[4];
+ unsigned int crc[2];
+ unsigned char *rom8 = rom;
+
+ assert(rom);
+
+ gen_table(crc_table);
+
+ if (!N64CalcCRC(crc_table, crc, rom))
+ {
+ unsigned int kk1 = crc[0];
+ unsigned int kk2 = crc[1];
+ int i;
+
+ for (i = 0; i < 4; ++i)
+ {
+ CRC1[i] = (kk1 >> (24-8*i))&0xFF;
+ CRC2[i] = (kk2 >> (24-8*i))&0xFF;
+ }
+
+ for (i = 0; i < 4; ++i)
+ *(rom8 + N64_CRC1 + i) = CRC1[i];
+
+ for (i = 0; i < 4; ++i)
+ *(rom8 + N64_CRC2 + i) = CRC2[i];
+ }
+}
+
diff --git a/tools/z64compress/src/n64crc.h b/tools/z64compress/src/n64crc.h
new file mode 100644
index 0000000..b5342da
--- /dev/null
+++ b/tools/z64compress/src/n64crc.h
@@ -0,0 +1,32 @@
+/* snesrc - SNES Recompiler
+ *
+ * Mar 23, 2010: addition by spinout to actually fix CRC if it is incorrect
+ *
+ * Copyright notice for this file:
+ * Copyright (C) 2005 Parasyte
+ *
+ * Based on uCON64's N64 checksum algorithm by Andreas Sterbenz
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef N64CRC_H_INCLUDED
+#define N64CRC_H_INCLUDED
+
+/* recalculate rom crc */
+void n64crc(void *rom);
+
+#endif /* N64CRC_H_INCLUDED */
+
diff --git a/tools/z64compress/src/rom.c b/tools/z64compress/src/rom.c
new file mode 100644
index 0000000..008597b
--- /dev/null
+++ b/tools/z64compress/src/rom.c
@@ -0,0 +1,1698 @@
+/*
+ * rom.c
+ *
+ * functions for compression magic reside herein
+ *
+ * z64me <z64.me>
+ *
+ */
+
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+#include <stdarg.h>
+#include <ctype.h>
+
+/* POSIX dependencies */
+#include <dirent.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+/* threading */
+#include <pthread.h>
+
+#include "enc/enc.h" /* file compression */
+#include "enc/yar.h" /* MM archive tools */
+
+#include "sha1.h" /* sha1 helpers */
+#include "n64crc.h" /* n64crc() */
+
+#include "wow.h"
+#include "wow_dirent.h" /* XXX always #include after dirent.h */
+#undef fopen
+#undef fread
+#undef fwrite
+#undef remove
+#define fopen wow_fopen
+#define fread wow_fread
+#define fwrite wow_fwrite
+#define remove wow_remove
+
+extern FILE* printer;
+
+#define SIZE_16MB (1024 * 1024 * 16)
+#define SIZE_4MB (1024 * 1024 * 4)
+
+#define DMA_DELETED 0xffffffff /* aka UINT32_MAX */
+
+#define DMASORT(ROM, FUNC) \
+ qsort( \
+ ROM->dma \
+ , ROM->dma_num \
+ , sizeof(*(ROM->dma)) \
+ , FUNC \
+ )
+
+#define DMASORT_N(ROM, FUNC, NUM) \
+ qsort( \
+ ROM->dma \
+ , NUM \
+ , sizeof(*(ROM->dma)) \
+ , FUNC \
+ )
+
+#define DMA_FOR_EACH \
+for (dma = rom->dma; (unsigned)(dma - rom->dma) < rom->dma_num; ++dma)
+
+#define PROGRESS_A_B (int)(dma - rom->dma), rom->dma_num
+
+#define ALIGN(x, n) (((x) + ((n)-1)) & ~((n)-1))
+#define ALIGN16(x) ALIGN(x, 16)
+#define ALIGN8MB(x) ALIGN(x, 8 * 0x100000)
+
+/*
+ *
+ * private types
+ *
+ */
+
+
+struct encoder
+{
+ int (*encfunc)(
+ void *src
+ , unsigned src_sz
+ , void *dst
+ , unsigned *dst_sz
+ , void *_ctx
+ );
+ void *(*ctx_new)(void);
+ void (*ctx_free)(void *);
+};
+
+
+struct dma
+{
+ char *compname; /* name of compressed file */
+ void *compbuf; /* cache-less compressed data */
+ unsigned int index; /* original index location */
+ int compress; /* entry can be compressed */
+ int deleted; /* points to deleted file */
+ unsigned compSz; /* cache-less compressed size */
+ unsigned int start; /* start offset */
+ unsigned int end; /* end offset */
+ unsigned int Pstart; /* start of physical (P) data */
+ unsigned int Pend; /* end of physical (P) data */
+ unsigned int Ostart; /* original (O) start */
+ unsigned int Oend; /* original (O) end */
+};
+
+
+struct rom
+{
+ char *fn; /* filename of loaded rom */
+ char *codec; /* compression codec */
+ char *cache; /* compression cache */
+ unsigned char *data; /* raw rom data */
+ unsigned int data_sz; /* size of rom data */
+ unsigned int ofs; /* offset where rom_write() writes */
+ int is_comp; /* non-0 if rom has been compressed */
+ struct dma *dma; /* dma array */
+ unsigned int dma_num; /* number of entries in dma array */
+ unsigned char *dma_raw; /* pointer to raw dmadata */
+ int dma_ready; /* non-zero after dma_ready() */
+
+ /* memory pools for things like compression */
+ struct
+ {
+ void *mb16; /* 16 mb */
+ void *mb4; /* 4 mb */
+ } mem;
+};
+
+
+struct fldr_item
+{
+ char *name; /* name */
+ void *udata; /* udata */
+};
+
+
+struct folder
+{
+ struct fldr_item *item; /* item array */
+ int num; /* number of items in array */
+ struct fldr_item *active; /* active item */
+};
+
+
+struct compThread
+{
+ struct rom *rom;
+ void *data;
+ int (*encfunc)(
+ void *src
+ , unsigned src_sz
+ , void *dst
+ , unsigned *dst_sz
+ , void *_ctx
+ );
+ const char *codec;
+ char *dot_codec;
+ struct folder *list;
+ int stride; /* number of entries to advance each time */
+ int ofs; /* starting entry in list */
+ int report; /* report progress to stderr (last thread only) */
+ void *ctx; /* compression context */
+ bool matching;
+ pthread_t pt; /* pthread */
+};
+
+/*
+ *
+ * private functions
+ *
+ */
+
+
+/* get 32-bit value from raw data */
+static int get32(void *_data)
+{
+ unsigned char *data = _data;
+
+ return (data[0] << 24) | (data[1] << 16) | (data[2] << 8) | data[3];
+}
+
+
+/* get size of a file; returns 0 if fopen fails */
+static unsigned int file_size(const char *fn)
+{
+ FILE *fp;
+ unsigned int sz;
+
+ fp = fopen(fn, "rb");
+ if (!fp)
+ return 0;
+
+ fseek(fp, 0, SEEK_END);
+ sz = ftell(fp);
+ fclose(fp);
+
+ return sz;
+}
+
+/* load a file into an existing buffer */
+static void *file_load_into(
+ const char *dir
+ , const char *fn
+ , unsigned int *sz
+ , void *dst
+)
+{
+ FILE *fp;
+
+ assert(fn);
+ assert(sz);
+ assert(dst);
+
+ if (!dir)
+ dir = "";
+
+ *sz = 0;
+
+ fp = fopen(fn, "rb");
+ if (!fp)
+ die("failed to open '%s%s' for reading", dir, fn);
+
+ fseek(fp, 0, SEEK_END);
+ *sz = ftell(fp);
+
+ if (!*sz)
+ die("size of file '%s%s' is zero", dir, fn);
+
+ fseek(fp, 0, SEEK_SET);
+
+ if (fread(dst, 1, *sz, fp) != *sz)
+ die("failed to read contents of '%s%s'", dir, fn);
+
+ fclose(fp);
+
+ return dst;
+}
+
+/* load a file */
+static void *file_load(const char *fn, unsigned int *sz)
+{
+ unsigned char *dst;
+
+ assert(fn);
+ assert(sz);
+
+ *sz = file_size(fn);
+ if (!*sz)
+ die("failed to get size of file '%s'", fn);
+
+ dst = malloc_safe(*sz);
+
+ return file_load_into(0, fn, sz, dst);
+}
+
+/* write file */
+static unsigned int file_write(
+ const char *fn
+ , void *data
+ , unsigned int data_sz
+)
+{
+ FILE *fp;
+
+ assert(fn);
+ assert(data);
+ assert(data_sz);
+
+ fp = fopen(fn, "wb");
+ if (!fp)
+ return 0;
+
+ data_sz = fwrite(data, 1, data_sz, fp);
+
+ fclose(fp);
+
+ return data_sz;
+}
+
+
+/* allocate a folder structure and parse current working directory */
+static struct folder *folder_new(void)
+{
+ wow_DIR *dir;
+ struct wow_dirent *ep;
+ struct fldr_item *item;
+ struct folder *folder;
+ char cwd[4096];
+ int count = 0;
+ int recount = 0;
+
+ /* allocate a folder */
+ folder = calloc_safe(1, sizeof(*folder));
+
+ /* get current working directory for error reporting */
+ wow_getcwd_safe(cwd, sizeof(cwd));
+
+ /* first pass: count the contents */
+ dir = wow_opendir(".");
+ if (!dir)
+ die("failed to parse directory '%s'", cwd);
+ while ((ep = wow_readdir(dir)))
+ count += 1;
+ wow_closedir(dir);
+
+ /* folder is empty */
+ if (!count)
+ die("folder '%s' is empty", cwd);
+
+ /* allocate item array */
+ item = calloc_safe(count, sizeof(*item));
+ folder->item = item;
+ folder->num = count;
+
+ /* second pass: retrieve requested contents */
+ dir = wow_opendir(".");
+ if (!dir)
+ die("failed to parse directory '%s'", cwd);
+ for (
+ recount = 0
+ ; (ep = wow_readdir(dir)) && recount < count
+ ; ++recount, ++item
+ )
+ {
+ const char *dn;
+
+ dn = (const char*)ep->d_name;
+
+ /* skip names starting with '.' (covers both "." and "..") */
+ if (*dn == '.')
+ continue;
+
+ /* skip directories */
+ if (wow_is_dir(dn))
+ continue;
+
+ /* make a copy of the string */
+ item->name = strdup_safe(dn);
+ }
+
+ if (recount != count)
+ die("contents of '%s' changed during read, try again", cwd);
+ wow_closedir(dir);
+
+ return folder;
+}
+
+
+/* free a folder structure */
+static void folder_free(struct folder *folder)
+{
+ if (!folder)
+ return;
+
+ /* folder contains items */
+ if (folder->item)
+ {
+ struct fldr_item *item;
+
+ /* walk item list, freeing resources owned by each */
+ for (
+ item = folder->item
+ ; item - folder->item < folder->num
+ ; ++item
+ )
+ {
+ if (item->name)
+ free(item->name);
+ }
+
+ /* free item list */
+ free(folder->item);
+ }
+
+ /* free folder */
+ free(folder);
+}
+
+
+/* locate folder item by name, ignoring extension (such as '.raw') */
+static struct fldr_item *folder_findNameNoExt(
+ struct folder *folder
+ , char *name
+)
+{
+ struct fldr_item *item;
+
+ assert(folder);
+ assert(name);
+
+ for (
+ item = folder->item
+ ; item - folder->item < folder->num
+ ; ++item
+ )
+ {
+ char *period;
+ int nchar;
+
+ /* item has no name */
+ if (!item->name)
+ continue;
+
+ /* doesn't contain a period */
+ if (!(period = strrchr(item->name, '.')))
+ continue;
+
+ /* number of bytes to compare */
+ nchar = period - item->name;
+
+ /* names match */
+ if (!memcmp(item->name, name, nchar))
+ return item;
+ }
+
+ return 0;
+}
+
+
+/* retrieve encoder from name */
+static const struct encoder *encoder(const char *name)
+{
+ if (!strcmp(name, "yaz"))
+ {
+ static const struct encoder yaz = {
+ .encfunc = yazenc
+ , .ctx_new = yazCtx_new
+ , .ctx_free = yazCtx_free
+ };
+
+ return &yaz;
+ }
+ else if (!strcmp(name, "lzo"))
+ {
+ static const struct encoder lzo = {
+ .encfunc = lzoenc
+ , .ctx_new = lzoCtx_new
+ , .ctx_free = lzoCtx_free
+ };
+
+ return &lzo;
+ }
+ else if (!strcmp(name, "ucl"))
+ {
+ static const struct encoder ucl = {
+ .encfunc = uclenc
+ };
+
+ return &ucl;
+ }
+ /*else if (!strcmp(name, "zx7"))
+ {
+ static const struct encoder zx7 = {
+ .encfunc = zx7enc
+ };
+
+ return &zx7;
+ }*/
+ else if (!strcmp(name, "aplib"))
+ {
+ static const struct encoder aplib = {
+ .encfunc = aplenc
+ };
+
+ return &aplib;
+ }
+ else
+ die("unknown compression codec '%s'", name);
+
+ return 0;
+}
+
+
+/* sort dma array by start, ascending */
+static int sortfunc_dma_start_ascend(const void *_a, const void *_b)
+{
+ const struct dma *a = _a;
+ const struct dma *b = _b;
+
+ if (a->start < b->start)
+ return -1;
+
+ else if (a->start > b->start)
+ return 1;
+
+ return 0;
+}
+
+
+/* sort dma array by size, descending */
+static int sortfunc_dma_size_descend(const void *_a, const void *_b)
+{
+ const struct dma *a = _a;
+ const struct dma *b = _b;
+
+ unsigned int a_len = a->end - a->start;
+ unsigned int b_len = b->end - b->start;
+
+ if (a_len < b_len)
+ return 1;
+
+ else if (a_len > b_len)
+ return -1;
+
+ return 0;
+}
+
+
+/* enter a directory (will be created if it doesn't exist) */
+static void dir_enter(const char *dir)
+{
+ /* unable to enter directory */
+ if (wow_chdir(dir))
+ {
+ /* attempt to create directory */
+ if (wow_mkdir(dir))
+ die("failed to create directory '%s'", dir);
+
+ if (wow_chdir(dir))
+ die("failed to enter directory '%s'", dir);
+ }
+}
+
+
+static void report_progress(
+ struct rom *rom
+ , const char *codec
+ , int v
+ , int total
+)
+{
+ /* caching enabled */
+ if (rom->cache)
+ fprintf(
+ printer
+ , "\r""updating '%s/%s' %d/%d: "
+ , rom->cache
+ , codec
+ , v
+ , total
+ );
+
+ else
+ fprintf(
+ printer
+ , "\r""compressing file %d/%d: "
+ , v
+ , total
+ );
+}
+
+/* compress a list of files */
+static void dma_compress(
+ struct rom *rom
+ , void *compbuf
+ , int encfunc(
+ void *src
+ , unsigned src_sz
+ , void *dst
+ , unsigned *dst_sz
+ , void *_ctx
+ )
+ , const char *codec
+ , char *dot_codec
+ , struct folder *list
+ , int stride /* number of entries to advance each time */
+ , int ofs /* starting entry in list */
+ , int report /* report progress to stderr (last thread only) */
+ , void *ctx /* compression context */
+ , bool matching
+)
+{
+ struct dma *dma;
+ struct fldr_item *item;
+
+ for (dma = rom->dma + ofs
+ ; (unsigned)(dma - rom->dma) < rom->dma_num
+ ; dma += stride
+ )
+ {
+ char *iname = 0;
+ unsigned char *data = rom->data + dma->start;
+ unsigned char checksum[64];
+ char readable[64];
+ int len = dma->end - dma->start;
+
+ /* report the progress */
+ if (report)
+ report_progress(rom, codec, PROGRESS_A_B);
+
+ /* skip files that have a size of 0 */
+ if (dma->start == dma->end)
+ continue;
+
+ /* caching is disabled, just compress */
+ if (!rom->cache)
+ {
+ int err;
+ dma->compbuf = compbuf;
+
+ /* don't compress this file */
+ if (!dma->compress)
+ {
+ dma->compSz = dma->end - dma->start;
+ dma->compbuf = memdup_safe(
+ rom->data + dma->start
+ , dma->compSz
+ );
+ continue;
+ }
+
+ err =
+ encfunc(
+ rom->data + dma->start
+ , dma->end - dma->start
+ , dma->compbuf
+ , &dma->compSz
+ , ctx
+ );
+
+ /* file doesn't benefit from compression */
+ if (!matching && dma->compSz >= dma->end - dma->start)
+ {
+ dma->compSz = dma->end - dma->start;
+ dma->compbuf = memdup_safe(
+ rom->data + dma->start
+ , dma->compSz
+ );
+ dma->compress = 0;
+ }
+ else
+ dma->compbuf = memdup_safe(dma->compbuf, dma->compSz);
+
+ if (err)
+ die("compression error");
+
+ /* the rest of the loop applies only to caches */
+ continue;
+ }
+
+ /* get readable checksum name */
+ stb_sha1(checksum, data, len);
+ stb_sha1_readable(readable, checksum);
+
+ /* see if item already exists in folder */
+ item = folder_findNameNoExt(list, readable);
+ if (item)
+ {
+ /* use full file name, including extension */
+ iname = item->name;
+
+ /* it exists, so use udata to mark the file as used */
+ item->udata = dot_codec;
+ dma->compSz = file_size(iname);
+
+ /* uncompressed file */
+ if (strstr(iname, ".raw"))
+ dma->compress = 0;
+ }
+ /* item doesn't exist, so create it */
+ else
+ {
+ void *out = compbuf;
+ unsigned out_sz;
+ int err;
+
+ /* file not marked for compression */
+ if (!dma->compress)
+ {
+ out = rom->data + dma->start;
+ out_sz = dma->end - dma->start;
+ dma->compress = 0;
+ strcat(readable, ".raw");
+
+ /* write file */
+ if (file_write(readable, out, out_sz) != out_sz)
+ die("error writing file 'cache/%s/%s'", codec, readable);
+
+ dma->compSz = out_sz;
+ dma->compname = strdup_safe(readable);
+
+ /* the remaining block applies only to compressed files */
+ continue;
+ }
+
+ err =
+ encfunc(
+ rom->data + dma->start
+ , dma->end - dma->start
+ , out
+ , &out_sz
+ , ctx
+ );
+
+ if (err)
+ die("compression error");
+
+ /* file doesn't benefit from compression */
+ if (!matching && out_sz >= dma->end - dma->start)
+ {
+ out = rom->data + dma->start;
+ out_sz = dma->end - dma->start;
+ dma->compress = 0;
+ strcat(readable, ".raw");
+ }
+ /* file benefits from compression */
+ else
+ /* add encoding as extension, ex '.yaz' */
+ strcat(readable, dot_codec);
+
+ /* write file */
+ if (file_write(readable, out, out_sz) != out_sz)
+ die("error writing file 'cache/%s/%s'", codec, readable);
+
+ dma->compSz = out_sz;
+ iname = readable;
+ }
+
+ /* back up compressed filename to
+ * avoid having to re-checksum later
+ */
+ dma->compname = strdup_safe(iname);
+ }
+}
+
+
+static void *dma_compress_threadfunc(void *_CT)
+{
+ struct compThread *CT = _CT;
+
+ dma_compress(
+ CT->rom
+ , CT->data
+ , CT->encfunc
+ , CT->codec
+ , CT->dot_codec
+ , CT->list
+ , CT->stride
+ , CT->ofs
+ , CT->report
+ , CT->ctx
+ , CT->matching
+ );
+
+ return 0;
+}
+
+
+static void dma_compress_thread(
+ struct compThread *CT
+ , struct rom *rom
+ , void *compbuf
+ , int encfunc(
+ void *src
+ , unsigned src_sz
+ , void *dst
+ , unsigned *dst_sz
+ , void *_ctx
+ )
+ , const char *codec
+ , char *dot_codec
+ , struct folder *list
+ , int stride /* number of entries to advance each time */
+ , int ofs /* starting entry in list */
+ , int report /* report progress to stderr (last thread only) */
+ , void *ctx /* compression context */
+ , bool matching
+)
+{
+ CT->rom = rom;
+ CT->data = compbuf;
+ CT->encfunc = encfunc;
+ CT->codec = codec;
+ CT->dot_codec = dot_codec;
+ CT->list = list;
+ CT->stride = stride;
+ CT->ofs = ofs;
+ CT->report = report;
+ CT->ctx = ctx;
+ CT->matching = matching;
+
+ if (pthread_create(&CT->pt, 0, dma_compress_threadfunc, CT))
+ die("threading error");
+}
+
+
+/* get dma entry by original index (useful after reordering) */
+static struct dma *dma_get_idx(struct rom *rom, unsigned idx)
+{
+ struct dma *dma;
+
+ assert(idx < rom->dma_num && "dma index too high");
+
+ /* walk dma list for matching index */
+ DMA_FOR_EACH
+ {
+ if (dma->index == idx)
+ break;
+ }
+
+ return dma;
+}
+
+
+/* write 'num' bytes to rom and advance */
+static void rom_write(struct rom *rom, void *data, int sz)
+{
+ unsigned char *raw;
+
+ assert(rom);
+ assert(rom->data);
+ assert(data);
+ assert(sz);
+
+ if (rom->ofs + sz > rom->data_sz)
+ die(
+ "can't write %d bytes at 0x%X b/c it exceeds rom size"
+ , sz, rom->ofs
+ );
+
+ raw = rom->data + rom->ofs;
+
+ memcpy(raw, data, sz);
+
+ rom->ofs += sz;
+}
+
+
+/* write 32 bit value to rom and advance */
+static void rom_write32(struct rom *rom, unsigned int value)
+{
+ unsigned char raw[4];
+
+ raw[0] = value >> 24;
+ raw[1] = value >> 16;
+ raw[2] = value >> 8;
+ raw[3] = value;
+
+ rom_write(rom, raw, 4);
+}
+
+
+/* write dma table into rom */
+static void rom_write_dmadata(struct rom *rom)
+{
+ struct dma *dma;
+ int num;
+ int numUsed;
+
+ assert(rom);
+ assert(rom->dma);
+ assert(rom->dma_raw);
+
+ dma = rom->dma;
+ num = rom->dma_num;
+
+ /* sort all entries by size, descending */
+ DMASORT(rom, sortfunc_dma_size_descend);
+
+ /* find first entry where size == 0 (aka first unused entry) */
+ for (dma = rom->dma; dma - rom->dma < num; ++dma)
+ if (dma->start == dma->end)
+ break;
+ numUsed = dma - rom->dma;
+
+ /* sort all used entries by start address, ascending */
+ DMASORT_N(rom, sortfunc_dma_start_ascend, numUsed);
+
+ /*
+ * at this point, unused entries have been moved to the end
+ */
+
+ /* zero the table */
+ memset(rom->dma_raw, 0, num * 16);
+
+ /* write every entry */
+ rom->ofs = rom->dma_raw - rom->data;
+ for (dma = rom->dma; dma - rom->dma < num; ++dma)
+ {
+ rom_write32(rom, dma->start);
+ rom_write32(rom, dma->end);
+ rom_write32(rom, dma->Pstart);
+ rom_write32(rom, dma->Pend);
+
+ /* early end condition: all entries have been written */
+ if (!dma->end)
+ break;
+ }
+}
+
+
+/*
+ *
+ * public functions
+ *
+ */
+
+/* compress rom using specified algorithm */
+void rom_compress(struct rom *rom, int mb, int numThreads, bool matching)
+{
+ struct dma *dma;
+ struct folder *list = 0;
+ struct fldr_item *item;
+ char *dot_codec = 0;
+ const char *codec;
+ char cwd[4096] = {0};
+ char cache_codec[4096] = {0};
+ const char *cache;
+ const struct encoder *enc = 0;
+ unsigned int compsz = mb * 0x100000;
+ unsigned int comp_total = 0;
+ unsigned int largest_compress = 1024;
+ float total_compressed = 0;
+ float total_decompressed = 0;
+ struct compThread *compThread = 0;
+ int dma_num = rom->dma_num;
+ int i;
+
+ assert(rom);
+ assert(rom->dma);
+ assert(rom->dma_ready);
+ assert(rom->is_comp == 0 && "rom_compressed called more than once");
+
+ rom->is_comp = 1;
+
+ if (numThreads <= 0)
+ numThreads = 1;
+
+ /* default codec = yaz */
+ if (!(codec = rom->codec))
+ codec = "yaz";
+
+ cache = rom->cache;
+
+ if (compsz > rom->data_sz || mb < 0)
+ die("invalid mb argument %d", mb);
+
+ /* get encoding functions */
+ enc = encoder(codec);
+
+ /* restore original start/end for nonexistent files */
+ DMA_FOR_EACH
+ {
+ if (dma->deleted)
+ {
+ dma->start = dma->Ostart;
+ dma->end = dma->Oend;
+ dma->compress = 0; /* deleted files don't compress */
+ }
+ }
+
+ /* sort dma entries by size, descending */
+ DMASORT(rom, sortfunc_dma_size_descend);
+
+ /* locate largest file that will be compressed */
+ DMA_FOR_EACH
+ {
+ if (dma->compress && dma->end - dma->start > largest_compress)
+ largest_compress = dma->end - dma->start;
+ }
+
+ /* no file should compress to over 2x its uncompressed size */
+ largest_compress *= 2;
+
+ /* allocate compression buffer for each thread */
+ compThread = calloc_safe(numThreads, sizeof(*compThread));
+ for (i = 0; i < numThreads; ++i)
+ {
+ compThread[i].data = malloc_safe(largest_compress);
+
+ /* allocate compression contexts (if applicable) */
+ if (enc->ctx_new)
+ {
+ compThread[i].ctx = enc->ctx_new();
+ if (!compThread[i].ctx)
+ die("memory error");
+ }
+ }
+
+ /* if using compression cache */
+ if (cache)
+ {
+ sprintf(cache_codec, "%s/%s/", cache, codec);
+
+ /* store current working directory for later */
+ wow_getcwd_safe(cwd, sizeof(cwd));
+
+ /* create and enter cache folder */
+ dir_enter(cache);
+
+ /* create and enter directory for the encoding algorithm */
+ dir_enter(codec);
+
+ /* make a '.yaz' string from 'yaz' */
+ dot_codec = malloc_safe(strlen(codec) + 1/*'.'*/ + 1/*'\0'*/);
+ strcpy(dot_codec, ".");
+ strcat(dot_codec, codec);
+
+ /* get list of all files in current working directory */
+ list = folder_new();
+ }
+
+ /* now compress every compressible file */
+ if (numThreads <= 1)
+ {
+ dma_compress(
+ rom
+ , compThread[0].data
+ , enc->encfunc
+ , codec
+ , dot_codec
+ , list
+ , 1 /* stride */
+ , 0 /* ofs */
+ , 1 /* report */
+ , compThread[0].ctx
+ , matching
+ );
+ }
+ else
+ {
+ /* spawn threads */
+ for (i = 0; i < numThreads; ++i)
+ {
+ dma_compress_thread(
+ &compThread[i]
+ , rom
+ , compThread[i].data
+ , enc->encfunc
+ , codec
+ , dot_codec
+ , list
+ , numThreads /* stride */
+ , i /* ofs */
+ , (i+1)==numThreads /* report */
+ , compThread[i].ctx
+ , matching
+ );
+ }
+
+ /* wait for all threads to complete */
+ for (i = 0; i < numThreads; ++i)
+ {
+ if (pthread_join(compThread[i].pt, NULL))
+ die("threading error");
+ }
+ }
+
+ /* all files now compressed */
+ report_progress(rom, codec, PROGRESS_A_B);
+ fprintf(printer, "success!\n");
+
+ /* sort by original start, ascending */
+ DMASORT(rom, sortfunc_dma_start_ascend);
+
+ /* determine physical addresses for each segment */
+ comp_total = 0;
+ DMA_FOR_EACH
+ {
+ char *fn = dma->compname;
+ unsigned int sz;
+ unsigned int sz16;
+
+ if (dma->deleted)
+ continue;
+
+ /* cached file logic */
+ if (cache)
+ {
+ /* skip entries that don't reference compressed files */
+ if (!fn)
+ continue;
+
+ sz = dma->compSz;
+
+ /* sz == 0 */
+ if (!sz)
+ die("'%s/%s/%s' file size == 0", cache, codec, fn);
+ }
+
+ /* in-memory file logic */
+ else
+ {
+ /* skip entries that don't reference compressed data */
+ sz = dma->compSz;
+ if (!sz)
+ continue;
+ }
+
+ /* ensure we remain 16-byte-aligned after advancing */
+ sz16 = sz;
+ if (sz16 & 15)
+ sz16 += 16 - (sz16 & 15);
+
+ dma->Pstart = comp_total;
+ if (dma->compress)
+ {
+ dma->Pend = dma->Pstart + sz16;
+
+ /* compressed file ratio variables */
+ total_compressed += sz16;
+ total_decompressed += dma->end - dma->start;
+ }
+ else
+ dma->Pend = 0;
+ comp_total += sz16;
+
+ if (mb != 0 && dma->Pend > compsz)
+ die("ran out of compressed rom space");
+ }
+
+ /* adaptive final size */
+ if (mb == 0)
+ compsz = ALIGN8MB(comp_total);
+
+ if (matching)
+ {
+ /* fill the entire (compressed) rom space with 00010203...FF...
+ in order to match retail rom padding */
+ unsigned char n = 0; /* will intentionally overflow */
+ for (unsigned int j = 0; j < compsz; j++, n++)
+ {
+ rom->data[j] = n;
+ }
+ }
+ else
+ {
+ /* zero the entire (compressed) rom space */
+ memset(rom->data, 0, compsz);
+ }
+
+ /* inject compressed files */
+ comp_total = 0;
+ DMA_FOR_EACH
+ {
+ unsigned char *dst;
+ char *fn = dma->compname;
+ unsigned int sz;
+ fprintf(printer, "\r""injecting file %d/%d: ", PROGRESS_A_B);
+
+ if (dma->deleted)
+ continue;
+
+ dst = rom->data + dma->Pstart;
+
+ /* external cached file logic */
+ if (cache)
+ {
+ /* skip entries that don't reference compressed files */
+ if (!fn)
+ continue;
+
+ /* load file into rom at offset */
+ dst = file_load_into(cache_codec, fn, &sz, dst);
+ }
+ /* otherwise, a simple memcpy */
+ else
+ {
+ memcpy(dst, dma->compbuf, dma->compSz);
+ sz = dma->compSz;
+ }
+
+ if (matching)
+ {
+ /* since matching rom padding is not zero but file padding is zero,
+ fill file padding space with zeros */
+ memset(dst + sz, 0, ALIGN16(sz) - sz);
+ }
+ }
+ fprintf(printer, "\r""injecting file %d/%d: ", dma_num, dma_num);
+ fprintf(printer, "success!\n");
+
+ fprintf(
+ printer
+ , "compression ratio: %.02f%%\n"
+ , (total_compressed / total_decompressed) * 100.0f
+ );
+
+ /* now free compressed file names */
+ DMA_FOR_EACH
+ {
+ if (dma->compname)
+ free(dma->compname);
+ }
+
+ /* remove unused cache files */
+ if (list)
+ {
+ for (item = list->item; item - list->item < list->num; ++item)
+ {
+ /* udata hasn't been marked, so file is unused */
+ if (item->name && !item->udata)
+ {
+ if (remove(item->name))
+ die("failed to remove '%s/%s/%s'"
+ , cache, codec, item->name
+ );
+ }
+ }
+ }
+
+ /* update rom size for when rom_save() is used */
+ rom->data_sz = compsz;
+
+ /* cleanup */
+ DMA_FOR_EACH
+ {
+ /* zero starts/ends of deleted files */
+ if (!matching && dma->deleted)
+ {
+ dma->start = 0;
+ dma->end = 0;
+ dma->Pstart = 0;
+ dma->Pend = 0;
+ }
+
+ /* free any compbufs */
+ if (dma->compbuf)
+ free(dma->compbuf);
+ dma->compSz = 0;
+ dma->compbuf = 0;
+ }
+ if (list)
+ folder_free(list);
+ if (dot_codec)
+ free(dot_codec);
+ for (i = 0; i < numThreads; ++i)
+ {
+ free(compThread[i].data);
+
+ /* free compression contexts (if applicable) */
+ if (enc->ctx_free)
+ {
+ assert(compThread[i].ctx);
+ enc->ctx_free(compThread[i].ctx);
+ }
+ }
+ free(compThread);
+
+ /* return to prior working directory */
+ if (*cwd)
+ wow_chdir(cwd);
+}
+
+
+/* specify start of dmadata and number of entries */
+void rom_dma(struct rom *rom, unsigned int offset, int num_entries, bool matching)
+{
+ struct dma *dma;
+ unsigned char *raw;
+
+ assert(rom);
+ assert(rom->data);
+ assert(rom->dma == 0 && "called rom_dma() more than once");
+
+ if (num_entries <= 0)
+ die("invalid number of dma entries %d", num_entries);
+
+ dma = calloc_safe(num_entries, sizeof(*dma));
+ rom->dma = dma;
+ rom->dma_num = num_entries;
+
+ raw = rom->data + offset;
+ rom->dma_raw = raw;
+
+ /* initialize every entry */
+ while (dma - rom->dma < num_entries)
+ {
+ /* propagate defaults */
+ dma->index = dma - rom->dma;
+ dma->start = get32(raw);
+ dma->end = get32(raw + 4);
+ dma->Pstart = get32(raw + 8);
+ dma->Pend = get32(raw + 12);
+ dma->Ostart = dma->start;
+ dma->Oend = dma->end;
+ dma->compress = 0; /* compression off by default */
+
+ /* nonexistent file */
+ if (dma->Pstart == DMA_DELETED && dma->Pend == DMA_DELETED)
+ {
+ dma->deleted = 1;
+
+ if (!matching)
+ {
+ dma->start = 0;
+ dma->end = 0;
+ dma->Ostart = 0;
+ dma->Oend = 0;
+ dma->Pstart = 0;
+ dma->Pend = 0;
+ }
+ }
+
+ /* invalid dma conditions */
+ else if (
+ (dma->Pend & 3) /* not 4-byte aligned */
+ || (dma->Pstart & 3)
+ || (dma->start & 3)
+ || (dma->end & 3)
+ || dma->start > dma->end
+ || (dma->Pstart > dma->Pend && dma->Pend)
+ || dma->Pend > rom->data_sz
+ )
+ {
+ die(
+ "invalid dma entry encountered: %08X %08X %08X %08X"
+ , dma->start, dma->end, dma->Pstart, dma->Pend
+ );
+ }
+
+ /* rom is compressed */
+ if (dma->Pend && dma->Pend != DMA_DELETED)
+ {
+ die(
+ "encountered dma entry %08X %08X %08X %08X"
+ ", which suggests the rom is already compressed...\n"
+ "now exiting..."
+ , dma->start, dma->end, dma->Pstart, dma->Pend
+ );
+ }
+
+ /* advance to next entry */
+ raw += 16;
+ dma += 1;
+ }
+}
+
+/* call this once dma settings are finalized */
+void rom_dma_ready(struct rom *rom, bool matching)
+{
+ struct dma *dma;
+ int num;
+ unsigned int lowest = 0;
+ unsigned int highest_end = 0; /* highest end dma offset */
+
+ assert(rom);
+ assert(rom->data);
+ assert(rom->dma);
+ assert(rom->dma_ready == 0 && "dma_ready called more than once");
+
+ dma = rom->dma;
+ num = rom->dma_num;
+
+ /* sort by start offset, ascending */
+ DMASORT(rom, sortfunc_dma_start_ascend);
+
+ /* confirm no entries overlap */
+ for (dma = rom->dma ; dma - rom->dma < num; ++dma)
+ {
+ /* skip blank entries */
+ if (!dma->start && !dma->end)
+ continue;
+
+ /* warn on empty files */
+ if (dma->end == dma->start)
+ {
+ fprintf(
+ printer
+ , "warning: dma entry %d is empty file (%08X == %08X)\n"
+ , dma->index, dma->start, dma->end
+ );
+ dma->Pstart = dma->Pend = DMA_DELETED;
+ }
+
+ /* nonexistent file */
+ if (dma->Pstart == DMA_DELETED && dma->Pend == DMA_DELETED)
+ {
+ dma->deleted = 1;
+
+ if (!matching)
+ {
+ dma->Ostart = 0;
+ dma->Oend = 0;
+ dma->start = 0;
+ dma->end = 0;
+ dma->compress = 0;
+ }
+ continue;
+ }
+
+ /* fatal error on entries where end < start */
+ if (dma->end < dma->start)
+ die(
+ "dma invalid entry %d (%08X < %08X)"
+ , dma->index, dma->end, dma->start
+ );
+
+ /* fatal error on unaligned entries */
+ if ((dma->start & 3) || (dma->end & 3))
+ die(
+ "dma unaligned pointer (%08X %08X)"
+ , dma->start
+ , dma->end
+ );
+
+ /* fatal error on entries exceeding rom size */
+ if (dma->end > rom->data_sz)
+ die(
+ "dma entry %d (%08X - %08X) exceeds rom size (%08X)"
+ , dma->index, dma->start, dma->end, rom->data_sz
+ );
+
+ /* if at least one entry has been processed, and its
+ * start is lower than any of the previous ends
+ */
+ if (dma > rom->dma && dma->start < lowest)
+ die(
+ "dma table entry %d (%08X - %08X) "
+ "overlaps entry %d (%08X - %08X)"
+ , dma->index, dma->start, dma->end
+ , (dma-1)->index, (dma-1)->start, (dma-1)->end
+ );
+
+ /* store highest dma end offset */
+ if (dma->end > highest_end)
+ highest_end = dma->end;
+
+ /* lowest acceptable start for next entry is end of current */
+ lowest = dma->end;
+ }
+
+ /* note dma_ready() has been called */
+ rom->dma_ready = 1;
+}
+
+/* reencode existing archives within rom
+ * NOTE: must be used before dma_ready()
+ */
+/* TODO optimization opportunities: threading, caching */
+void rom_dma_repack(
+ struct rom *rom
+ , unsigned start
+ , unsigned end
+ , const char *from /* old codec */
+ , const char *to /* new codec */
+)
+{
+ const struct encoder *enc = 0;
+ int (*decfunc)(
+ void *src, void *dst, unsigned dstSz, unsigned *srcSz
+ ) = 0;
+ void *ctx = 0;
+
+ assert(rom);
+ assert(rom->data);
+ assert(rom->dma);
+ assert(rom->dma_ready == 0 && "dma_repack must precede dma_ready");
+
+ /* default codec = yaz */
+ if (!from)
+ from = "yaz";
+ if (!(to = rom->codec))
+ to = "yaz";
+
+ /* swap start and end if they are not in ascending order */
+ if (end < start)
+ {
+ int t = end;
+ end = start;
+ start = t;
+ }
+
+ /* allocate compression buffers, 16 mb */
+ if (!rom->mem.mb16)
+ rom->mem.mb16 = malloc_safe(SIZE_16MB);
+ if (!rom->mem.mb4)
+ rom->mem.mb4 = malloc_safe(SIZE_4MB);
+
+ /* no need to reencode when the codec is the same */
+ if (!strcmp(from, to))
+ return;
+
+ /* get decoding function */
+ if (!strcmp(from, "yaz"))
+ {
+ from = "Yaz0";
+ decfunc = yazdec;
+ }
+ else if (!strcmp(from, "raw"))
+ {
+ from = "raw0";
+ }
+ else
+ die("dma_repack from='%s' unsupported", from);
+
+ /* get encoding function */
+ enc = encoder(to);
+
+ /* allocate compression context (if applicable) */
+ if (enc->ctx_new)
+ {
+ ctx = enc->ctx_new();
+ if (!ctx)
+ die("memory error");
+ }
+
+ /* start <= idx <= end */
+ while (start <= end && start < rom->dma_num)
+ {
+ struct dma *dma = dma_get_idx(rom, start);
+
+ unsigned char *dst = rom->data + dma->start;
+ const char *errstr;
+ unsigned int Osz = dma->end - dma->start;
+ unsigned int Nsz;
+ char name[32];
+
+ dma->compress = 0;
+
+ sprintf(name, "%08X", dma->start);
+
+ errstr =
+ yar_reencode(
+ dst
+ , Osz
+ , rom->mem.mb16
+ , &Nsz
+ , 4
+
+ , name
+ , from
+ , rom->mem.mb4
+ , ctx
+
+ , decfunc
+ , enc->encfunc
+ , 0
+ );
+
+ /* fatal error */
+ if (errstr)
+ die("%s", errstr);
+
+ /* repacked archive won't fit in place of original archive */
+ if (Nsz > Osz)
+ die("repacking failed, new archive 0x%X bytes too big"
+ , Nsz - Osz
+ );
+
+ /* copy encoded file into rom */
+ memcpy(dst, rom->mem.mb16, Nsz);
+
+ /* file sizes changed */
+ fprintf(printer, "%.2f kb saved!\n", ((float)(Osz-Nsz))/1000.0f);
+
+ dma->end = dma->start + Nsz;
+
+ start += 1;
+ }
+
+ /* free compression context (if applicable) */
+ if (enc->ctx_free)
+ {
+ assert(ctx);
+ enc->ctx_free(ctx);
+ }
+}
+
+
+/* set compression flag on indices start <= idx <= end */
+void rom_dma_compress(
+ struct rom *rom
+ , unsigned start
+ , unsigned end
+ , int comp
+)
+{
+ assert(rom);
+ assert(rom->data);
+ assert(rom->dma);
+ assert(rom->dma_ready == 0 && "dma_compress must precede dma_ready");
+
+ /* swap start and end if they are not in ascending order */
+ if (end < start)
+ {
+ int t = end;
+ end = start;
+ start = t;
+ }
+
+ /* start <= idx <= end */
+ while (start <= end && start < rom->dma_num)
+ {
+ struct dma *dma = rom->dma + start;
+
+ dma->compress = comp;
+ start += 1;
+ }
+}
+
+
+/* set rom compressed file cache directory */
+void rom_set_cache(struct rom *rom, const char *cache)
+{
+ assert(rom);
+ assert(cache);
+
+ if (rom->cache)
+ free(rom->cache);
+
+ rom->cache = strdup_safe(cache);
+}
+
+/* get number of dma entries */
+int rom_dma_num(struct rom *rom)
+{
+ assert(rom);
+
+ return rom->dma_num;
+}
+
+/* set rom compression codec
+ * valid options: "yaz", "lzo", "ucl", "aplib"
+ * NOTE: to use codecs besides yaz, get patches from the z64enc repo
+ */
+void rom_set_codec(struct rom *rom, const char *codec)
+{
+ assert(rom);
+ assert(codec);
+
+ if (rom->codec)
+ free(rom->codec);
+
+ rom->codec = strdup_safe(codec);
+}
+
+/* save rom to disk using specified filename */
+void rom_save(struct rom *rom, const char *fn)
+{
+ assert(rom);
+ assert(rom->data);
+
+ /* updates dmadata */
+ rom_write_dmadata(rom);
+
+ /* recalculate crc */
+ n64crc(rom->data);
+
+ if (file_write(fn, rom->data, rom->data_sz) != rom->data_sz)
+ die("failed to write file '%s'", fn);
+}
+
+/* allocate a rom structure */
+struct rom *rom_new(const char *fn)
+{
+ struct rom *dst;
+
+ assert(fn);
+
+ /* allocate destination rom structure */
+ dst = calloc_safe(1, sizeof(*dst));
+
+ /* propagate rom file */
+ dst->data = file_load(fn, &dst->data_sz);
+
+ /* back up load file name */
+ dst->fn = strdup_safe(fn);
+
+ return dst;
+}
+
+/* free a rom structure */
+void rom_free(struct rom *rom)
+{
+ if (!rom)
+ return;
+
+ if (rom->codec)
+ free(rom->codec);
+
+ if (rom->data)
+ free(rom->data);
+
+ if (rom->dma)
+ free(rom->dma);
+
+ if (rom->cache)
+ free(rom->cache);
+
+ if (rom->fn)
+ free(rom->fn);
+
+ /* free any memory pools that were allocated */
+ if (rom->mem.mb16)
+ free(rom->mem.mb16);
+ if (rom->mem.mb4)
+ free(rom->mem.mb4);
+
+ free(rom);
+}
+
diff --git a/tools/z64compress/src/rom.h b/tools/z64compress/src/rom.h
new file mode 100644
index 0000000..dbc6eaa
--- /dev/null
+++ b/tools/z64compress/src/rom.h
@@ -0,0 +1,62 @@
+/*
+ * rom.h
+ *
+ * functions for compression magic reside herein
+ *
+ * z64me <z64.me>
+ *
+ */
+
+#ifndef Z64COMPRESS_ROM_H_INCLUDED
+#define Z64COMPRESS_ROM_H_INCLUDED
+
+/* opaque definition */
+struct rom;
+
+/* allocate a rom structure and load rom file */
+struct rom *rom_new(const char *fn);
+
+/* free a rom structure */
+void rom_free(struct rom *rom);
+
+/* save rom to disk using specified filename */
+void rom_save(struct rom *rom, const char *fn);
+
+/* compress rom using specified algorithm */
+void rom_compress(struct rom *rom, int mb, int numThreads, bool matching);
+
+/* specify start of dmadata and number of entries */
+void rom_dma(struct rom *rom, unsigned int offset, int num_entries, bool matching);
+
+/* call this once dma settings are finalized */
+void rom_dma_ready(struct rom *rom, bool matching);
+
+/* set compression flag on indices start <= idx <= end */
+void
+rom_dma_compress(struct rom *rom, unsigned start, unsigned end, int comp);
+
+/* reencode existing archives within rom
+ * NOTE: must be used before dma_ready()
+ */
+void rom_dma_repack(
+ struct rom *rom
+ , unsigned start
+ , unsigned end
+ , const char *from /* old codec */
+ , const char *to /* new codec */
+);
+
+/* get number of dma entries */
+int rom_dma_num(struct rom *rom);
+
+/* set rom compression codec
+ * valid options: "yaz", "lzo", "ucl", "aplib"
+ * NOTE: to use codecs besides yaz, get patches from the z64enc repo
+ */
+void rom_set_codec(struct rom *rom, const char *codec);
+
+/* set rom compressed file cache directory */
+void rom_set_cache(struct rom *rom, const char *cache);
+
+#endif /* Z64COMPRESS_ROM_H_INCLUDED */
+
diff --git a/tools/z64compress/src/sha1.c b/tools/z64compress/src/sha1.c
new file mode 100644
index 0000000..07b068d
--- /dev/null
+++ b/tools/z64compress/src/sha1.c
@@ -0,0 +1,141 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+
+#define stb_big32(c) (((c)[0]<<24) + (c)[1]*65536 + (c)[2]*256 + (c)[3])
+
+static void stb__sha1(unsigned char *chunk, unsigned h[5])
+{
+ int i;
+ unsigned a,b,c,d,e;
+ unsigned w[80];
+
+ for (i=0; i < 16; ++i)
+ w[i] = stb_big32(&chunk[i*4]);
+ for (i=16; i < 80; ++i) {
+ unsigned t;
+ t = w[i-3] ^ w[i-8] ^ w[i-14] ^ w[i-16];
+ w[i] = (t + t) | (t >> 31);
+ }
+
+ a = h[0];
+ b = h[1];
+ c = h[2];
+ d = h[3];
+ e = h[4];
+
+ #define STB__SHA1(k,f) \
+ { \
+ unsigned temp = (a << 5) + (a >> 27) + (f) + e + (k) + w[i]; \
+ e = d; \
+ d = c; \
+ c = (b << 30) + (b >> 2); \
+ b = a; \
+ a = temp; \
+ }
+
+ i=0;
+ for (; i < 20; ++i) STB__SHA1(0x5a827999, d ^ (b & (c ^ d)) );
+ for (; i < 40; ++i) STB__SHA1(0x6ed9eba1, b ^ c ^ d );
+ for (; i < 60; ++i) STB__SHA1(0x8f1bbcdc, (b & c) + (d & (b ^ c)) );
+ for (; i < 80; ++i) STB__SHA1(0xca62c1d6, b ^ c ^ d );
+
+ #undef STB__SHA1
+
+ h[0] += a;
+ h[1] += b;
+ h[2] += c;
+ h[3] += d;
+ h[4] += e;
+}
+
+void stb_sha1(unsigned char output[20], unsigned char *buffer, unsigned len)
+{
+ unsigned char final_block[128];
+ unsigned end_start, final_len, j;
+ int i;
+
+ unsigned h[5];
+
+ h[0] = 0x67452301;
+ h[1] = 0xefcdab89;
+ h[2] = 0x98badcfe;
+ h[3] = 0x10325476;
+ h[4] = 0xc3d2e1f0;
+
+ // we need to write padding to the last one or two
+ // blocks, so build those first into 'final_block'
+
+ // we have to write one special byte, plus the 8-byte length
+
+ // compute the block where the data runs out
+ end_start = len & ~63;
+
+ // compute the earliest we can encode the length
+ if (((len+9) & ~63) == end_start) {
+ // it all fits in one block, so fill a second-to-last block
+ end_start -= 64;
+ }
+
+ final_len = end_start + 128;
+
+ // now we need to copy the data in
+ assert(end_start + 128 >= len+9);
+ assert(end_start < len || len < 64-9);
+
+ j = 0;
+ if (end_start > len)
+ j = (unsigned) - (int) end_start;
+
+ for (; end_start + j < len; ++j)
+ final_block[j] = buffer[end_start + j];
+ final_block[j++] = 0x80;
+ while (j < 128-5) // 5 byte length, so write 4 extra padding bytes
+ final_block[j++] = 0;
+ // big-endian size
+ final_block[j++] = len >> 29;
+ final_block[j++] = len >> 21;
+ final_block[j++] = len >> 13;
+ final_block[j++] = len >> 5;
+ final_block[j++] = len << 3;
+ assert(j == 128 && end_start + j == final_len);
+
+ for (j=0; j < final_len; j += 64) { // 512-bit chunks
+ if (j+64 >= end_start+64)
+ stb__sha1(&final_block[j - end_start], h);
+ else
+ stb__sha1(&buffer[j], h);
+ }
+
+ for (i=0; i < 5; ++i) {
+ output[i*4 + 0] = h[i] >> 24;
+ output[i*4 + 1] = h[i] >> 16;
+ output[i*4 + 2] = h[i] >> 8;
+ output[i*4 + 3] = h[i] >> 0;
+ }
+}
+
+// client can truncate this wherever they like
+void stb_sha1_readable(char display[30], unsigned char sha[20])
+{
+ char encoding[65] = "0123456789abcdefghijklmnopqrstuv"
+ "wxyzABCDEFGHIJKLMNOPQRSTUVWXYZ#$";
+ int num_bits = 0, acc=0;
+ int i=0,o=0;
+ while (o < 26) {
+ int v;
+ // expand the accumulator
+ if (num_bits < 6) {
+ assert(i != 20);
+ acc += sha[i++] << num_bits;
+ num_bits += 8;
+ }
+ v = acc & ((1 << 6) - 1);
+ display[o++] = encoding[v];
+ acc >>= 6;
+ num_bits -= 6;
+ }
+ assert(num_bits == 20*8 - 26*6);
+ display[o++] = '\0';
+}
+
diff --git a/tools/z64compress/src/sha1.h b/tools/z64compress/src/sha1.h
new file mode 100644
index 0000000..3c7e0dc
--- /dev/null
+++ b/tools/z64compress/src/sha1.h
@@ -0,0 +1,8 @@
+#ifndef STB_SHA1_H_INCLUDED
+#define STB_SHA1_H_INCLUDED
+
+void stb_sha1(unsigned char output[20], unsigned char *buffer, unsigned len);
+void stb_sha1_readable(char display[30], unsigned char sha[20]);
+
+#endif /* STB_SHA1_H_INCLUDED */
+
diff --git a/tools/z64compress/src/wow.c b/tools/z64compress/src/wow.c
new file mode 100644
index 0000000..21b2c67
--- /dev/null
+++ b/tools/z64compress/src/wow.c
@@ -0,0 +1,3 @@
+#define WOW_IMPLEMENTATION
+#include "wow.h"
+
diff --git a/tools/z64compress/src/wow.h b/tools/z64compress/src/wow.h
new file mode 100644
index 0000000..cc2d88c
--- /dev/null
+++ b/tools/z64compress/src/wow.h
@@ -0,0 +1,769 @@
+/*
+ * wow.h
+ *
+ * a small collection of functions
+ * to make writing software easier
+ *
+ * z64me <z64.me>
+ *
+ */
+
+#ifndef WOW_H_INCLUDED
+#define WOW_H_INCLUDED
+
+#include <stddef.h> /* size_t */
+#include <stdio.h> /* file ops */
+#include <stdlib.h> /* alloc */
+#include <sys/stat.h> /* stat */
+#include <string.h> /* strdup */
+#include <unistd.h> /* chdir, getcwd */
+#include <stdarg.h>
+#include <locale.h>
+
+#ifdef _WIN32
+ #include <windows.h>
+ #undef near
+ #undef far
+#endif
+
+
+#if (_WIN32 && UNICODE)
+ #define wow_main int wmain(int argc, wchar_t *Wargv[])
+ #define wow_main_argv char **argv = wow_conv_args(argc, (void*)Wargv)
+#else
+ #define wow_main int main(int argc, char *argv[])
+ #define wow_main_argv do{}while(0)
+#endif
+
+
+#ifndef WOW_API_PREFIX
+ #define WOW_API_PREFIX
+#endif
+
+WOW_API_PREFIX
+void *
+wow_utf8_to_wchar(const char *str);
+
+WOW_API_PREFIX
+char *
+wow_wchar_to_utf8(void *wstr);
+
+
+/* converts argv[] from wchar to char win32, in place */
+WOW_API_PREFIX
+void *
+wow_conv_args(int argc, void *argv[]);
+
+
+/* returns non-zero if path is a directory */
+WOW_API_PREFIX
+int
+wow_is_dir_w(void const *path);
+
+
+/* returns non-zero if path is a directory */
+WOW_API_PREFIX
+int
+wow_is_dir(char const *path);
+
+
+/* fread abstraction that falls back to buffer-based fread *
+ * if a big fread fails; if that still fails, returns 0 */
+WOW_API_PREFIX
+size_t
+wow_fread_bytes(void *ptr, size_t bytes, FILE *stream);
+
+
+/* fwrite abstraction that falls back to buffer-based fwrite *
+ * if a big fwrite fails; if that still fails, returns 0 */
+WOW_API_PREFIX
+size_t
+wow_fwrite_bytes(const void *ptr, size_t bytes, FILE *stream);
+
+
+/* fread abstraction that falls back to buffer-based fread *
+ * if a big fread fails; if that still fails, returns 0 */
+WOW_API_PREFIX
+size_t
+wow_fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
+
+
+/* fwrite abstraction that falls back to buffer-based fwrite *
+ * if a big fwrite fails; if that still fails, returns 0 */
+WOW_API_PREFIX
+size_t
+wow_fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
+
+
+/* fopen abstraction for utf8 support on windows win32 */
+WOW_API_PREFIX
+FILE *
+wow_fopen(char const *name, char const *mode);
+
+
+/* remove abstraction for utf8 support on windows win32 */
+WOW_API_PREFIX
+int
+wow_remove(char const *path);
+
+
+/* mkdir */
+WOW_API_PREFIX
+int
+wow_mkdir(char const *path);
+
+
+/* chdir */
+WOW_API_PREFIX
+int
+wow_chdir(char const *path);
+
+
+/* getcwd */
+WOW_API_PREFIX
+char *
+wow_getcwd(char *buf, size_t size);
+
+
+/* getcwd_safe */
+WOW_API_PREFIX
+char *
+wow_getcwd_safe(char *buf, size_t size);
+
+
+/* system */
+WOW_API_PREFIX
+int
+wow_system(char const *path);
+
+WOW_API_PREFIX void die(const char *fmt, ...)
+ __attribute__ ((format (printf, 1, 2)))
+;
+WOW_API_PREFIX void *calloc_safe(size_t nmemb, size_t size);
+WOW_API_PREFIX void *malloc_safe(size_t size);
+WOW_API_PREFIX void *realloc_safe(void *ptr, size_t size);
+WOW_API_PREFIX char *strdup_safe(const char *s);
+WOW_API_PREFIX void *memdup_safe(void *ptr, size_t size);
+
+#ifdef WOW_IMPLEMENTATION
+
+WOW_API_PREFIX void die(const char *fmt, ...)
+{
+ va_list args;
+ va_start(args, fmt);
+#ifdef UNICODE
+ char buf[4096];
+ vsprintf(buf, fmt, args);
+ wchar_t *wc = wow_utf8_to_wchar(buf);
+ setlocale(LC_ALL, "");
+ fwprintf(stderr, L"%ls", wc);
+ free(wc);
+#else
+ vfprintf(stderr, fmt, args);
+#endif
+ va_end(args);
+ fprintf(stderr, "\n");
+ exit(EXIT_FAILURE);
+}
+
+WOW_API_PREFIX void *calloc_safe(size_t nmemb, size_t size)
+{
+ void *result = calloc(nmemb, size);
+
+ if (!result)
+ die("memory error");
+
+ return result;
+}
+
+WOW_API_PREFIX void *malloc_safe(size_t size)
+{
+ void *result = malloc(size);
+
+ if (!result)
+ die("memory error");
+
+ return result;
+}
+
+WOW_API_PREFIX void *realloc_safe(void *ptr, size_t size)
+{
+ void *result = realloc(ptr, size);
+
+ if (!result)
+ die("memory error");
+
+ return result;
+}
+
+WOW_API_PREFIX char *strdup_safe(const char *s)
+{
+ char *result;
+ int n;
+
+ if (!s)
+ return 0;
+
+ n = strlen(s) + 1;
+
+ result = malloc_safe(n);
+
+ strcpy(result, s);
+
+ return result;
+}
+
+WOW_API_PREFIX void *memdup_safe(void *ptr, size_t size)
+{
+ void *result;
+
+ if (!ptr || !size)
+ return 0;
+
+ result = malloc_safe(size);
+
+ memcpy(result, ptr, size);
+
+ return result;
+}
+
+
+WOW_API_PREFIX
+void *
+wow_utf8_to_wchar(const char *str)
+{
+#ifdef UNICODE
+extern __declspec(dllimport) int __stdcall MultiByteToWideChar(unsigned int cp, unsigned long flags, const char *str, int cbmb, wchar_t *widestr, int cchwide);
+ wchar_t *wstr;
+ int wstr_sz = (strlen(str) + 1) * 16;//sizeof(*wstr);
+ wstr = calloc_safe(1, wstr_sz);
+ MultiByteToWideChar(65001/*utf8*/, 0, str, -1, wstr, wstr_sz);
+ return wstr;
+#else
+ return strdup(str);
+#endif
+}
+
+WOW_API_PREFIX
+char *
+wow_wchar_to_utf8_buf(void *wstr, void *dst, int dst_max)
+{
+#ifdef UNICODE
+extern __declspec(dllimport) int __stdcall WideCharToMultiByte(unsigned int cp, unsigned long flags, const wchar_t *widestr, int cchwide, char *str, int cbmb, const char *defchar, int *used_default);
+ WideCharToMultiByte(65001/*utf8*/, 0, wstr, -1, dst, dst_max, NULL, NULL);
+ return dst;
+#else
+ (void)dst_max; /* unused parameter */
+ return strcpy(dst, wstr);
+#endif
+}
+
+WOW_API_PREFIX
+char *
+wow_wchar_to_utf8(void *wstr)
+{
+#ifdef UNICODE
+extern __declspec(dllimport) int __stdcall WideCharToMultiByte(unsigned int cp, unsigned long flags, const wchar_t *widestr, int cchwide, char *str, int cbmb, const char *defchar, int *used_default);
+ char *str;
+ int str_sz = (wcslen(wstr) + 1) * sizeof(*str);
+ str = calloc_safe(1, str_sz);
+ WideCharToMultiByte(65001/*utf8*/, 0, wstr, -1, str, str_sz, NULL, NULL);
+ return str;
+#else
+ return strdup(wstr);
+#endif
+}
+
+WOW_API_PREFIX
+char *
+wow_wchar_to_utf8_inplace(void *wstr)
+{
+#ifdef UNICODE
+extern __declspec(dllimport) int __stdcall WideCharToMultiByte(unsigned int cp, unsigned long flags, const wchar_t *widestr, int cchwide, char *str, int cbmb, const char *defchar, int *used_default);
+ char buf[4096];
+ char *str;
+ int wstr_len = wcslen(wstr);
+ unsigned str_sz = (wstr_len + 1) * sizeof(*str);
+ if (str_sz >= sizeof(buf))
+ str = malloc_safe(str_sz);
+ else
+ str = buf;
+ WideCharToMultiByte(65001/*utf8*/, 0, wstr, -1, str, str_sz, NULL, NULL);
+ memcpy(wstr, str, wstr_len + 1);
+ ((char*)wstr)[wstr_len+1] = '\0';
+ if (str != buf)
+ free(str);
+ return wstr;
+#else
+ return wstr;
+#endif
+}
+
+
+/* argument abstraction: converts argv[] from wchar to char win32 */
+WOW_API_PREFIX
+void *
+wow_conv_args(int argc, void *argv[])
+{
+#ifdef UNICODE
+ int i;
+ for (i=0; i < argc; ++i)
+ {
+ //fprintf(stderr, "[%d]: %s\n", i, argv[i]);
+ //fwprintf(stderr, L"[%d]: %s\n", i, (wchar_t*)argv[i]);
+ argv[i] = wow_wchar_to_utf8_inplace(argv[i]);
+ //fwprintf(stderr, L"[%d]: %s\n", i, wow_utf8_to_wchar(argv[i]));
+ }
+#else
+ (void)argc; /* unused parameter */
+#endif
+ return argv;
+}
+
+/* returns non-zero if path is a directory */
+WOW_API_PREFIX
+int
+wow_is_dir_w(void const *path)
+{
+ struct stat s;
+#if (_WIN32 && UNICODE)
+ if (wstat(path, &s) == 0)
+#else
+ if (stat(path, &s) == 0)
+#endif
+ {
+ if (s.st_mode & S_IFDIR)
+ return 1;
+ }
+
+ return 0;
+}
+
+
+/* returns non-zero if path is a directory */
+WOW_API_PREFIX
+int
+wow_is_dir(char const *path)
+{
+ int rv;
+ void *wpath = 0;
+
+#if (_WIN32 && UNICODE)
+ wpath = wow_utf8_to_wchar(path);
+ rv = wow_is_dir_w(wpath);
+#else
+ rv = wow_is_dir_w(path);
+#endif
+ if (wpath)
+ free(wpath);
+
+ return rv;
+}
+
+
+/* fread abstraction that falls back to buffer-based fread *
+ * if a big fread fails; if that still fails, returns 0 */
+WOW_API_PREFIX
+size_t
+wow_fread_bytes(void *ptr, size_t bytes, FILE *stream)
+{
+ if (!stream || !ptr || !bytes)
+ return 0;
+
+ unsigned char *ptr8 = ptr;
+ size_t Oofs = ftell(stream);
+ size_t bufsz = 1024 * 1024; /* 1 mb at a time */
+ size_t Obytes = bytes;
+ size_t rem;
+
+ fseek(stream, 0, SEEK_END);
+ rem = ftell(stream) - Oofs;
+ fseek(stream, Oofs, SEEK_SET);
+
+ if (bytes > rem)
+ bytes = rem;
+
+ /* everything worked */
+ if (fread(ptr, 1, bytes, stream) == bytes)
+ return Obytes;
+
+ /* failed: try falling back to slower buffered read */
+ fseek(stream, Oofs, SEEK_SET);
+ while (bytes)
+ {
+ /* don't read past end */
+ if (bytes < bufsz)
+ bufsz = bytes;
+ if (bufsz > rem)
+ {
+ bytes = rem;
+ bufsz = rem;
+ }
+
+ /* still failed */
+ if (fread(ptr8, 1, bufsz, stream) != bufsz)
+ return 0;
+
+ /* advance */
+ ptr8 += bufsz;
+ bytes -= bufsz;
+ rem -= bufsz;
+ }
+
+ /* success */
+ return Obytes;
+}
+
+
+/* fwrite abstraction that falls back to buffer-based fwrite *
+ * if a big fwrite fails; if that still fails, returns 0 */
+WOW_API_PREFIX
+size_t
+wow_fwrite_bytes(const void *ptr, size_t bytes, FILE *stream)
+{
+ if (!stream || !ptr || !bytes)
+ return 0;
+
+ const unsigned char *ptr8 = ptr;
+ size_t bufsz = 1024 * 1024; /* 1 mb at a time */
+ size_t Obytes = bytes;
+
+ /* everything worked */
+ if (fwrite(ptr, 1, bytes, stream) == bytes)
+ return bytes;
+
+ /* failed: try falling back to slower buffered read */
+ while (bytes)
+ {
+ /* don't read past end */
+ if (bytes < bufsz)
+ bufsz = bytes;
+
+ /* still failed */
+ if (fwrite(ptr8, 1, bufsz, stream) != bufsz)
+ return 0;
+
+ /* advance */
+ ptr8 += bufsz;
+ bytes -= bufsz;
+ }
+
+ /* success */
+ return Obytes;
+}
+
+
+/* fread abstraction that falls back to buffer-based fread *
+ * if a big fread fails; if that still fails, returns 0 */
+WOW_API_PREFIX
+size_t
+wow_fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
+{
+ if (!stream || !ptr || !size || !nmemb)
+ return 0;
+
+ if (wow_fread_bytes(ptr, size * nmemb, stream) == size * nmemb)
+ return nmemb;
+
+ return 0;
+}
+
+
+/* fwrite abstraction that falls back to buffer-based fwrite *
+ * if a big fwrite fails; if that still fails, returns 0 */
+WOW_API_PREFIX
+size_t
+wow_fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
+{
+ if (!stream || !ptr || !size || !nmemb)
+ return 0;
+
+ if (wow_fwrite_bytes(ptr, size * nmemb, stream) == size * nmemb)
+ return nmemb;
+
+ return 0;
+}
+
+
+/* fopen abstraction for utf8 support on windows win32 */
+WOW_API_PREFIX
+FILE *
+wow_fopen(char const *name, char const *mode)
+{
+#ifdef UNICODE
+ void *wname = 0;
+ void *wmode = 0;
+ FILE *fp = 0;
+
+ wname = wow_utf8_to_wchar(name);
+ if (!wname)
+ goto L_cleanup;
+
+ /* TODO eventually, an error message would be cool */
+ if (wow_is_dir_w(wname))
+ goto L_cleanup;
+
+ wmode = wow_utf8_to_wchar(mode);
+ if (!wmode)
+ goto L_cleanup;
+
+ fp = _wfopen(wname, wmode);
+
+L_cleanup:
+ if (wname) free(wname);
+ if (wmode) free(wmode);
+ if (fp)
+ return fp;
+ return 0;
+#else
+ /* TODO eventually, an error message would be cool */
+ if (wow_is_dir_w(name))
+ return 0;
+ return fopen(name, mode);
+#endif
+}
+
+
+/* remove abstraction for utf8 support on windows win32 */
+WOW_API_PREFIX
+int
+wow_remove(char const *path)
+{
+#ifdef UNICODE
+ void *wpath = 0;
+ int rval;
+
+ wpath = wow_utf8_to_wchar(path);
+ if (!wpath)
+ return -1;
+
+ rval = _wremove(wpath);
+ free(wpath);
+ return rval;
+#else
+ return remove(path);
+#endif
+}
+
+
+/* mkdir */
+WOW_API_PREFIX
+int
+wow_mkdir(char const *path)
+{
+#if defined(_WIN32) && defined(UNICODE)
+extern int _wmkdir(const wchar_t *);
+ void *wname = 0;
+ int rval;
+
+ wname = wow_utf8_to_wchar(path);
+ if (!wname)
+ return -1;
+
+ rval = _wmkdir(wname);
+
+ if (wname)
+ free(wname);
+
+ return rval;
+#elif defined(_WIN32) /* win32 no unicode */
+extern int _mkdir(const char *);
+ return _mkdir(path);
+#else /* ! _WIN32 */
+ return mkdir(path, 0777);
+#endif
+}
+
+
+/* chdir */
+WOW_API_PREFIX
+int
+wow_chdir(char const *path)
+{
+#if defined(_WIN32) && defined(UNICODE)
+extern int _wchdir(const wchar_t *);
+ void *wname = 0;
+ int rval;
+
+ wname = wow_utf8_to_wchar(path);
+ if (!wname)
+ return -1;
+
+ rval = _wchdir(wname);
+
+ if (wname)
+ free(wname);
+
+ return rval;
+#elif defined(_WIN32) /* win32 no unicode */
+extern int _chdir(const char *);
+ return _chdir(path);
+#else /* ! _WIN32 */
+ return chdir(path);
+#endif
+}
+
+
+/* getcwd */
+WOW_API_PREFIX
+char *
+wow_getcwd(char *buf, size_t size)
+{
+#if defined(_WIN32) && defined(UNICODE)
+//extern int _wgetcwd(const wchar_t *, int);
+extern _CRTIMP wchar_t *__cdecl _wgetcwd(wchar_t *_DstBuf,int _SizeInWords);
+ wchar_t wname[4096];
+
+ if (!buf || !size)
+ return 0;
+
+ if (!_wgetcwd(wname, sizeof(wname) / sizeof(wname[0])))
+ return 0;
+
+ return wow_wchar_to_utf8_buf(wname, buf, size);
+#elif defined(_WIN32) /* win32 no unicode */
+//extern char *_getcwd(char *, int);
+ return _getcwd(buf, size);
+#else /* ! _WIN32 */
+ return getcwd(buf, size);
+#endif
+}
+
+
+/* getcwd_safe */
+WOW_API_PREFIX
+char *
+wow_getcwd_safe(char *buf, size_t size)
+{
+ char *result = wow_getcwd(buf, size);
+
+ if (!result)
+ die("failed to get current working directory");
+
+ return result;
+}
+
+
+/* system */
+WOW_API_PREFIX
+int
+wow_system(char const *path)
+{
+#if defined(_WIN32) && defined(UNICODE)
+ void *wname = 0;
+ int rval;
+
+ wname = wow_utf8_to_wchar(path);
+ if (!wname)
+ return -1;
+
+ rval = _wsystem(wname);
+
+ if (wname)
+ free(wname);
+
+ return rval;
+#else /* not win32 unicode */
+ return system(path);
+#endif
+}
+
+
+/* system_gui */
+WOW_API_PREFIX
+int
+wow_system_gui(char const *name, const char *param)
+{
+#if defined(_WIN32)
+ STARTUPINFOW si;
+ PROCESS_INFORMATION pi;
+
+ ZeroMemory(&si, sizeof(si));
+ si.cb = sizeof(si);
+ ZeroMemory(&pi, sizeof(pi));
+ int rval = 0 /*success */;
+//extern int ShellExecuteA(void *hwnd, void *op, void *file, void *param, void *dir, int cmd);
+//extern int ShellExecuteW(void *hwnd, void *op, void *file, void *param, void *dir, int cmd);
+//const int SW_SHOWNORMAL = 1;
+ #if defined(UNICODE)
+ void *wname = 0;
+ void *wparam = 0;
+
+ wname = wow_utf8_to_wchar(name);
+ if (!wname)
+ {
+ return -1;
+ }
+ wparam = wow_utf8_to_wchar(param);
+ if (!wparam)
+ {
+ free(wname);
+ return -1;
+ }
+
+#if 0
+ if (CreateProcessW(
+ wname, wparam
+ , NULL, NULL
+ , FALSE
+ , CREATE_NO_WINDOW
+ , NULL
+ , NULL
+ , &si, &pi)
+ )
+ {
+ //WaitForSingleObject(pi.hProcess, INFINITE);
+ //CloseHandle(pi.hProcess);
+ //CloseHandle(pi.hThread);
+ }
+ else
+ rval = 1;
+#else
+ rval = (int)ShellExecuteW(NULL, L"open", wname, wparam, L".", SW_SHOWNORMAL);
+ rval = rval <= 32;
+#endif
+
+ free(wname);
+ free(wparam);
+ #else /* win32 non-unicode */
+#if 0
+ if (CreateProcessA(
+ name, x
+ , NULL, NULL
+ , FALSE
+ , CREATE_NO_WINDOW
+ , NULL
+ , NULL
+ , &si, &pi)
+ )
+ {
+ //WaitForSingleObject(pi.hProcess, INFINITE);
+ //CloseHandle(pi.hProcess);
+ //CloseHandle(pi.hThread);
+ }
+ else
+ rval = 1;
+#else
+ rval = (int)ShellExecuteA(NULL, "open", name, param, ".", SW_SHOWNORMAL);
+ rval = rval <= 32;
+#endif
+ #endif
+ return rval;//rval <= 32;
+#else /* not win32 unicode */
+ char *x = malloc_safe(strlen(name) + strlen(param) + 128);
+ if (!x)
+ return -1;
+ strcpy(x, "\"");
+ strcat(x, name);
+ strcat(x, "\" ");
+ strcat(x, param);
+ int rval = system(x);
+ free(x);
+ return rval;
+#endif
+}
+
+#endif /* WOW_IMPLEMENTATION */
+
+#endif /* WOW_H_INCLUDED */
+
diff --git a/tools/z64compress/src/wow_dirent.h b/tools/z64compress/src/wow_dirent.h
new file mode 100644
index 0000000..e9db5ca
--- /dev/null
+++ b/tools/z64compress/src/wow_dirent.h
@@ -0,0 +1,61 @@
+/*
+ * wow_dirent.h
+ *
+ * dirent wrapper that abstracts unicode/utf8 platforms
+ *
+ * must be #include'd after dirent.h
+ *
+ * z64me <z64.me>
+ *
+ */
+
+#ifndef WOW_DIRENT_INCLUDED
+#define WOW_DIRENT_INCLUDED
+#include "wow.h"
+
+#if defined(_WIN32) && defined(UNICODE)
+# define wow_DIR _WDIR
+# define wow_dirent _wdirent
+static
+wow_DIR *
+wow_opendir(const char *path)
+{
+ void *wpath = wow_utf8_to_wchar(path);
+ if (!wpath)
+ return NULL;
+
+ wow_DIR *rv = _wopendir(wpath);
+
+ free(wpath);
+
+ return rv;
+}
+static
+struct wow_dirent *
+wow_readdir(wow_DIR *dir)
+{
+ struct wow_dirent *ep = _wreaddir(dir);
+ if (!ep)
+ return 0;
+
+ /* convert d_name to utf8 for working on them directly */
+ char *str = wow_wchar_to_utf8(ep->d_name);
+ memcpy(ep->d_name, str, strlen(str) + 1);
+ free(str);
+
+ return ep;
+}
+# define wow_closedir _wclosedir
+# define wow_dirent_char wchar_t
+
+#else /* not win32 unicode */
+# define wow_DIR DIR
+# define wow_dirent dirent
+# define wow_opendir opendir
+# define wow_readdir readdir
+# define wow_closedir closedir
+# define wow_dirent_char char
+#endif
+
+#endif /* WOW_DIRENT_INCLUDED */
+
diff --git a/tools/z64compress_wrapper.py b/tools/z64compress_wrapper.py
new file mode 100755
index 0000000..df3a647
--- /dev/null
+++ b/tools/z64compress_wrapper.py
@@ -0,0 +1,133 @@
+#!/usr/bin/env python3
+
+# SPDX-FileCopyrightText: © 2023 ZeldaRET
+# SPDX-License-Identifier: MIT
+
+from __future__ import annotations
+
+import argparse
+import itertools
+from pathlib import Path
+import spimdisasm
+import subprocess
+import yaml
+
+
+QUIET = False
+
+def printVerbose(*args, **kwargs):
+ if QUIET:
+ return
+ print(*args, **kwargs)
+
+
+def ranges(i):
+ for _, b in itertools.groupby(enumerate(i), lambda pair: pair[1] - pair[0]):
+ b = list(b)
+ yield b[0][1], b[-1][1]
+
+
+def getCompressedSegmentIndices(yamlPath: Path):
+ printVerbose("Finding compressed segments...")
+ with yamlPath.open() as f:
+ yamlObj = yaml.load(f, Loader=yaml.SafeLoader)
+
+ indices = []
+ currentIndex = 0
+ for segment in yamlObj["segments"]:
+ if not isinstance(segment, dict):
+ continue
+
+ notInDma = segment.get("notdma", False)
+ if notInDma:
+ continue
+
+ shouldCompress = segment.get("compress", False)
+ if shouldCompress:
+ indices.append(currentIndex)
+ currentIndex += 1
+ return list(ranges(indices))
+
+
+def getDmaStartLen(elfPath: Path) -> tuple[int, int]:
+ printVerbose("Retrieving dmadata address...")
+
+ start = -1
+ end = -1
+
+ elfFile = spimdisasm.elf32.Elf32File(spimdisasm.common.Utils.readFileAsBytearray(elfPath))
+
+ assert elfFile.symtab is not None, f"Invalid Elf file, it is missing the symtab"
+ assert elfFile.strtab is not None, f"Invalid Elf file, it is missing the strtab"
+
+ for entry in elfFile.symtab:
+ symName = elfFile.strtab[entry.name]
+
+ if "dmadata_ROM_START" == symName:
+ start = entry.value
+ elif "dmadata_ROM_END" == symName:
+ end = entry.value
+
+ assert start > 0, f"Could not find 'dmadata_ROM_START' in Elf file"
+ assert end > 0, f"Could not find 'dmadata_ROM_END' in Elf file"
+
+ return start, (end - start) // 0x10
+
+
+def main():
+ # Args from command line
+ parser = argparse.ArgumentParser(description="Compress ROM")
+
+ parser.add_argument("in_rom", help="Uncompressed input ROM filename", type=Path)
+ parser.add_argument("out_rom", help="Compressed output ROM filename", type=Path)
+ parser.add_argument("elf", help="Path to the uncompressed ROM elf file", type=Path)
+ parser.add_argument("yaml", help="Path to the yaml file", type=Path)
+ parser.add_argument("--cache", help="Cache directory")
+ parser.add_argument("--threads", help="Number of threads to run compression on, 0 disables multithreading", type=int, default=0)
+ parser.add_argument("--mb", help="compressed ROM size in MB, default is the smallest multiple of 8mb fitting the whole ROM")
+ parser.add_argument("--matching", help="matching compression, forfeits some useful optimizations", action="store_true")
+ parser.add_argument("--stderr", help="z64compress will write its output messages to stderr instead of stdout", action="store_true")
+
+ args = parser.parse_args()
+
+ dmaAddr, dmaLen = getDmaStartLen(args.elf)
+
+ compressed_ranges = getCompressedSegmentIndices(args.yaml)
+ indicesList = []
+ for start, end in compressed_ranges:
+ if start != end:
+ indicesList.append(f"{start}-{end}")
+ else:
+ indicesList.append(f"{start}")
+
+ command = f"./tools/z64compress/z64compress "
+ command += f"--in {args.in_rom} "
+ command += f"--out {args.out_rom} "
+ command += f"--codec yaz "
+ command += f"--dma 0x{dmaAddr:06X},{dmaLen} "
+ command += f"--compress {','.join(indicesList)} "
+
+ if args.matching:
+ command += f"--matching "
+ if args.mb is not None:
+ command += f"--mb {args.mb} "
+ if args.cache:
+ command += f"--cache {args.cache} "
+ if args.threads > 0:
+ command += f"--threads {args.threads} "
+ if not args.stderr:
+ command += f"--only-stdout "
+
+
+ print(command)
+ try:
+ subprocess.check_call(command, shell=True)
+ except subprocess.CalledProcessError as e:
+ # Return the same error code for the wrapper if z64compress fails
+ return e.returncode
+
+ return 0
+
+
+if __name__ == "__main__":
+ exit(main())
diff --git a/yamls/jp/assets.yaml b/yamls/jp/assets.yaml
index d7cea3f..de14c54 100644
--- a/yamls/jp/assets.yaml
+++ b/yamls/jp/assets.yaml
@@ -2,7670 +2,12271 @@
type: bin
start: 0x9757E0
# vram:
+ compress: True
+ align: 0x1000
+ - [0x9D33E0]
- name: segment_009D4000
type: bin
start: 0x9D4000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x9DE010]
- name: segment_009DF000
type: bin
start: 0x9DF000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x9E9010]
- name: segment_009EA000
type: bin
start: 0x9EA000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x9F4010]
- name: segment_009F5000
type: bin
start: 0x9F5000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x9FF010]
- name: segment_00A00000
type: bin
start: 0xA00000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xA0A010]
- name: segment_00A0B000
type: bin
start: 0xA0B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xA15010]
- name: segment_00A16000
type: bin
start: 0xA16000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xA20010]
- name: segment_00A21000
type: bin
start: 0xA21000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xA21680]
- name: segment_00A22000
type: bin
start: 0xA22000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xA2FF30]
- name: segment_00A30000
type: bin
start: 0xA30000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xA3FC20]
- name: segment_00A40000
type: bin
start: 0xA40000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xA57140]
- name: segment_00A58000
type: bin
start: 0xA58000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xA6AEA0]
- name: segment_00A6B000
type: bin
start: 0xA6B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xA75B90]
- name: segment_00A76000
type: bin
start: 0xA76000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xA79560]
- name: segment_00A7A000
type: bin
start: 0xA7A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xA7A2C0]
- name: segment_00A7B000
type: bin
start: 0xA7B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xA7B7E0]
- name: segment_00A7C000
type: bin
start: 0xA7C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xA81130]
- name: segment_00A82000
type: bin
start: 0xA82000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xA89210]
- name: segment_00A8A000
type: bin
start: 0xA8A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xA8DBE0]
- name: segment_00A8E000
type: bin
start: 0xA8E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xA93EF0]
- name: segment_00A94000
type: bin
start: 0xA94000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xAAC5E0]
- name: segment_00AAD000
type: bin
start: 0xAAD000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xAB9A90]
- name: segment_00ABA000
type: bin
start: 0xABA000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xAC6EA0]
- name: segment_00AC7000
type: bin
start: 0xAC7000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xAC9850]
- name: segment_00ACA000
type: bin
start: 0xACA000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xACBA20]
- name: segment_00ACC000
type: bin
start: 0xACC000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xAD0290]
- name: segment_00AD1000
type: bin
start: 0xAD1000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xADCCD0]
- name: segment_00ADD000
type: bin
start: 0xADD000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xAE26C0]
- name: segment_00AE3000
type: bin
start: 0xAE3000
# vram:
+ compress: False
+ align: 0x1000
+ - [0xB0CE80]
- name: segment_00B0D000
type: bin
start: 0xB0D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xB166F0]
- name: segment_00B17000
type: bin
start: 0xB17000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xB19350]
- name: segment_00B1A000
type: bin
start: 0xB1A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xB29FA0]
- name: segment_00B2A000
type: bin
start: 0xB2A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xB35930]
- name: segment_00B36000
type: bin
start: 0xB36000
# vram:
+ compress: False
+ align: 0x1000
+ - [0xB67E20]
- name: segment_00B68000
type: bin
start: 0xB68000
# vram:
+ compress: False
+ align: 0x1000
+ - [0xB88000]
- name: segment_00B88000
type: bin
start: 0xB88000
# vram:
+ compress: False
+ align: 0x1000
+ - [0xB8A000]
- name: segment_00B8A000
type: bin
start: 0xB8A000
# vram:
+ compress: False
+ align: 0x1000
+ - [0xB8A070]
- name: segment_00B8B000
type: bin
start: 0xB8B000
# vram:
+ compress: False
+ align: 0x1000
+ - [0xB8ECE0]
- name: segment_00B8F000
type: bin
start: 0xB8F000
# vram:
+ compress: False
+ align: 0x1000
+ - [0xBC7800]
- name: segment_00BC8000
type: bin
start: 0xBC8000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xBCC830]
- name: segment_00BCD000
type: bin
start: 0xBCD000
# vram:
+ compress: False
+ align: 0x1000
+ - [0xBD32E0]
- name: segment_00BD4000
type: bin
start: 0xBD4000
# vram:
+ compress: False
+ align: 0x1000
+ - [0xCF8A10]
- name: segment_00CF9000
type: bin
start: 0xCF9000
# vram:
+ compress: False
+ align: 0x1000
+ - [0xD047B0]
- name: segment_00D05000
type: bin
start: 0xD05000
# vram:
+ compress: False
+ align: 0x1000
+ - [0xD05AE0]
- name: segment_00D06000
type: bin
start: 0xD06000
# vram:
+ compress: False
+ align: 0x1000
+ - [0xD06740]
- name: segment_00D07000
type: bin
start: 0xD07000
# vram:
+ compress: False
+ align: 0x1000
+ - [0xD0F5D0]
- name: segment_00D10000
type: bin
start: 0xD10000
# vram:
+ compress: False
+ align: 0x1000
+ - [0xD10890]
- name: segment_00D11000
type: bin
start: 0xD11000
# vram:
+ compress: False
+ align: 0x1000
+ - [0xD11BF0]
- name: segment_00D12000
type: bin
start: 0xD12000
# vram:
+ compress: False
+ align: 0x1000
+ - [0xD12890]
- name: segment_00D13000
type: bin
start: 0xD13000
# vram:
+ compress: False
+ align: 0x1000
+ - [0xD143E0]
- name: segment_00D15000
type: bin
start: 0xD15000
# vram:
+ compress: False
+ align: 0x1000
+ - [0xD15890]
- name: segment_00D16000
type: bin
start: 0xD16000
# vram:
+ compress: False
+ align: 0x1000
+ - [0xD17E00]
- name: segment_00D18000
type: bin
start: 0xD18000
# vram:
+ compress: False
+ align: 0x1000
+ - [0xD19870]
- name: segment_00D1A000
type: bin
start: 0xD1A000
# vram:
+ compress: False
+ align: 0x1000
+ - [0xD24970]
- name: segment_00D25000
type: bin
start: 0xD25000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xD28540]
- name: segment_00D29000
type: bin
start: 0xD29000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xD2C0A0]
- name: segment_00D2D000
type: bin
start: 0xD2D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xD37440]
- name: segment_00D38000
type: bin
start: 0xD38000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xD42440]
- name: segment_00D43000
type: bin
start: 0xD43000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xD4CE90]
- name: segment_00D4D000
type: bin
start: 0xD4D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xD572D0]
- name: segment_00D58000
type: bin
start: 0xD58000
# vram:
+ compress: False
+ align: 0x1000
+ - [0xD58370]
- name: segment_00D59000
type: bin
start: 0xD59000
# vram:
+ compress: False
+ align: 0x1000
+ - [0xD59130]
- name: segment_00D5A000
type: bin
start: 0xD5A000
# vram:
+ compress: False
+ align: 0x1000
+ - [0xD5A1D0]
- name: segment_00D5B000
type: bin
start: 0xD5B000
# vram:
+ compress: False
+ align: 0x1000
+ - [0xD5C3F0]
- name: segment_00D5D000
type: bin
start: 0xD5D000
# vram:
+ compress: False
+ align: 0x1000
+ - [0xD5D2E0]
- name: segment_00D5E000
type: bin
start: 0xD5E000
# vram:
+ compress: False
+ align: 0x1000
+ - [0xDF3480]
- name: segment_00DF4000
type: bin
start: 0xDF4000
# vram:
+ compress: False
+ align: 0x1000
+ - [0xDF42F0]
- name: segment_00DF5000
type: bin
start: 0xDF5000
# vram:
+ compress: False
+ align: 0x1000
+ - [0xDFF0D0]
- name: segment_00E00000
type: bin
start: 0xE00000
# vram:
+ compress: False
+ align: 0x1000
+ - [0xE00180]
- name: segment_00E01000
type: bin
start: 0xE01000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xE01750]
- name: segment_00E02000
type: bin
start: 0xE02000
# vram:
+ compress: False
+ align: 0x1000
+ - [0xE026D0]
- name: segment_00E03000
type: bin
start: 0xE03000
# vram:
+ compress: False
+ align: 0x1000
+ - [0xE03520]
- name: segment_00E04000
type: bin
start: 0xE04000
# vram:
+ compress: False
+ align: 0x1000
+ - [0xE04530]
- name: segment_00E05000
type: bin
start: 0xE05000
# vram:
+ compress: False
+ align: 0x1000
+ - [0xE0CFD0]
- name: segment_00E0D000
type: bin
start: 0xE0D000
# vram:
+ compress: False
+ align: 0x1000
+ - [0xE0D0E0]
- name: segment_00E0E000
type: bin
start: 0xE0E000
# vram:
+ compress: False
+ align: 0x1000
+ - [0xE60390]
- name: segment_00E61000
type: bin
start: 0xE61000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xE63350]
- name: segment_00E64000
type: bin
start: 0xE64000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xE65020]
- name: segment_00E66000
type: bin
start: 0xE66000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xE68140]
- name: segment_00E69000
type: bin
start: 0xE69000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xE6A020]
- name: segment_00E6B000
type: bin
start: 0xE6B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xE6C020]
- name: segment_00E6D000
type: bin
start: 0xE6D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xE6E020]
- name: segment_00E6F000
type: bin
start: 0xE6F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xE70020]
- name: segment_00E71000
type: bin
start: 0xE71000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xE72020]
- name: segment_00E73000
type: bin
start: 0xE73000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xE755D0]
- name: segment_00E76000
type: bin
start: 0xE76000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xE77020]
- name: segment_00E78000
type: bin
start: 0xE78000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xE79FE0]
- name: segment_00E7A000
type: bin
start: 0xE7A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xE7B620]
- name: segment_00E7C000
type: bin
start: 0xE7C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xE7D620]
- name: segment_00E7E000
type: bin
start: 0xE7E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xE7F620]
- name: segment_00E80000
type: bin
start: 0xE80000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xE81620]
- name: segment_00E82000
type: bin
start: 0xE82000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xE83620]
- name: segment_00E84000
type: bin
start: 0xE84000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xE85620]
- name: segment_00E86000
type: bin
start: 0xE86000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xE87620]
- name: segment_00E88000
type: bin
start: 0xE88000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xE89620]
- name: segment_00E8A000
type: bin
start: 0xE8A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xE8B620]
- name: segment_00E8C000
type: bin
start: 0xE8C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xE8E1F0]
- name: segment_00E8F000
type: bin
start: 0xE8F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xE90020]
- name: segment_00E91000
type: bin
start: 0xE91000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xE92020]
- name: segment_00E93000
type: bin
start: 0xE93000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xE94020]
- name: segment_00E95000
type: bin
start: 0xE95000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xE96020]
- name: segment_00E97000
type: bin
start: 0xE97000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xE98020]
- name: segment_00E99000
type: bin
start: 0xE99000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xE9B020]
- name: segment_00E9C000
type: bin
start: 0xE9C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xE9D020]
- name: segment_00E9E000
type: bin
start: 0xE9E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xE9F020]
- name: segment_00EA0000
type: bin
start: 0xEA0000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xEA1020]
- name: segment_00EA2000
type: bin
start: 0xEA2000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xEA3020]
- name: segment_00EA4000
type: bin
start: 0xEA4000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xEA5020]
- name: segment_00EA6000
type: bin
start: 0xEA6000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xEA7020]
- name: segment_00EA8000
type: bin
start: 0xEA8000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xEA9020]
- name: segment_00EAA000
type: bin
start: 0xEAA000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xEAB020]
- name: segment_00EAC000
type: bin
start: 0xEAC000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xEAD020]
- name: segment_00EAE000
type: bin
start: 0xEAE000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xEAF020]
- name: segment_00EB0000
type: bin
start: 0xEB0000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xEB2100]
- name: segment_00EB3000
type: bin
start: 0xEB3000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xEB4020]
- name: segment_00EB5000
type: bin
start: 0xEB5000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xEB7060]
- name: segment_00EB8000
type: bin
start: 0xEB8000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xEB9620]
- name: segment_00EBA000
type: bin
start: 0xEBA000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xEBB620]
- name: segment_00EBC000
type: bin
start: 0xEBC000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xEBD620]
- name: segment_00EBE000
type: bin
start: 0xEBE000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xEBF620]
- name: segment_00EC0000
type: bin
start: 0xEC0000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xEC27D0]
- name: segment_00EC3000
type: bin
start: 0xEC3000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xEC4020]
- name: segment_00EC5000
type: bin
start: 0xEC5000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xEC6CF0]
- name: segment_00EC7000
type: bin
start: 0xEC7000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xEC8620]
- name: segment_00EC9000
type: bin
start: 0xEC9000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xECA620]
- name: segment_00ECB000
type: bin
start: 0xECB000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xECC620]
- name: segment_00ECD000
type: bin
start: 0xECD000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xECE620]
- name: segment_00ECF000
type: bin
start: 0xECF000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xED0620]
- name: segment_00ED1000
type: bin
start: 0xED1000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xED2620]
- name: segment_00ED3000
type: bin
start: 0xED3000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xED4620]
- name: segment_00ED5000
type: bin
start: 0xED5000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xED6620]
- name: segment_00ED7000
type: bin
start: 0xED7000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xED8620]
- name: segment_00ED9000
type: bin
start: 0xED9000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xEDA620]
- name: segment_00EDB000
type: bin
start: 0xEDB000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xEDC620]
- name: segment_00EDD000
type: bin
start: 0xEDD000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xEDE620]
- name: segment_00EDF000
type: bin
start: 0xEDF000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xEE0620]
- name: segment_00EE1000
type: bin
start: 0xEE1000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xEE2620]
- name: segment_00EE3000
type: bin
start: 0xEE3000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xEE57F0]
- name: segment_00EE6000
type: bin
start: 0xEE6000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xEE7020]
- name: segment_00EE8000
type: bin
start: 0xEE8000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xEE9020]
- name: segment_00EEA000
type: bin
start: 0xEEA000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xEEB020]
- name: segment_00EEC000
type: bin
start: 0xEEC000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xEED020]
- name: segment_00EEE000
type: bin
start: 0xEEE000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xEEF020]
- name: segment_00EF0000
type: bin
start: 0xEF0000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xEF1020]
- name: segment_00EF2000
type: bin
start: 0xEF2000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xEF3020]
- name: segment_00EF4000
type: bin
start: 0xEF4000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xEF5020]
- name: segment_00EF6000
type: bin
start: 0xEF6000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xEF7EF0]
- name: segment_00EF8000
type: bin
start: 0xEF8000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xEF9620]
- name: segment_00EFA000
type: bin
start: 0xEFA000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xEFB620]
- name: segment_00EFC000
type: bin
start: 0xEFC000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xEFD620]
- name: segment_00EFE000
type: bin
start: 0xEFE000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xEFF620]
- name: segment_00F00000
type: bin
start: 0xF00000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF01620]
- name: segment_00F02000
type: bin
start: 0xF02000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF03620]
- name: segment_00F04000
type: bin
start: 0xF04000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF05620]
- name: segment_00F06000
type: bin
start: 0xF06000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF07620]
- name: segment_00F08000
type: bin
start: 0xF08000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF09620]
- name: segment_00F0A000
type: bin
start: 0xF0A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF0C150]
- name: segment_00F0D000
type: bin
start: 0xF0D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF0E020]
- name: segment_00F0F000
type: bin
start: 0xF0F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF11020]
- name: segment_00F12000
type: bin
start: 0xF12000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF13620]
- name: segment_00F14000
type: bin
start: 0xF14000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF15620]
- name: segment_00F16000
type: bin
start: 0xF16000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF17620]
- name: segment_00F18000
type: bin
start: 0xF18000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF19620]
- name: segment_00F1A000
type: bin
start: 0xF1A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF1C1D0]
- name: segment_00F1D000
type: bin
start: 0xF1D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF1E020]
- name: segment_00F1F000
type: bin
start: 0xF1F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF20020]
- name: segment_00F21000
type: bin
start: 0xF21000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF22020]
- name: segment_00F23000
type: bin
start: 0xF23000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF24020]
- name: segment_00F25000
type: bin
start: 0xF25000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF26FB0]
- name: segment_00F27000
type: bin
start: 0xF27000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF28020]
- name: segment_00F29000
type: bin
start: 0xF29000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF2B630]
- name: segment_00F2C000
type: bin
start: 0xF2C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF2D020]
- name: segment_00F2E000
type: bin
start: 0xF2E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF30030]
- name: segment_00F31000
type: bin
start: 0xF31000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF32620]
- name: segment_00F33000
type: bin
start: 0xF33000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF34620]
- name: segment_00F35000
type: bin
start: 0xF35000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF36620]
- name: segment_00F37000
type: bin
start: 0xF37000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF38620]
- name: segment_00F39000
type: bin
start: 0xF39000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF3A620]
- name: segment_00F3B000
type: bin
start: 0xF3B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF3C620]
- name: segment_00F3D000
type: bin
start: 0xF3D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF3E620]
- name: segment_00F3F000
type: bin
start: 0xF3F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF40620]
- name: segment_00F41000
type: bin
start: 0xF41000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF42620]
- name: segment_00F43000
type: bin
start: 0xF43000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF44620]
- name: segment_00F45000
type: bin
start: 0xF45000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF473D0]
- name: segment_00F48000
type: bin
start: 0xF48000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF49020]
- name: segment_00F4A000
type: bin
start: 0xF4A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF4BEE0]
- name: segment_00F4C000
type: bin
start: 0xF4C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF4D620]
- name: segment_00F4E000
type: bin
start: 0xF4E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF4F620]
- name: segment_00F50000
type: bin
start: 0xF50000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF51620]
- name: segment_00F52000
type: bin
start: 0xF52000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF53620]
- name: segment_00F54000
type: bin
start: 0xF54000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF55620]
- name: segment_00F56000
type: bin
start: 0xF56000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF57620]
- name: segment_00F58000
type: bin
start: 0xF58000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF59620]
- name: segment_00F5A000
type: bin
start: 0xF5A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF5B620]
- name: segment_00F5C000
type: bin
start: 0xF5C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF5D620]
- name: segment_00F5E000
type: bin
start: 0xF5E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF5F620]
- name: segment_00F60000
type: bin
start: 0xF60000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF62140]
- name: segment_00F63000
type: bin
start: 0xF63000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF64620]
- name: segment_00F65000
type: bin
start: 0xF65000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF66620]
- name: segment_00F67000
type: bin
start: 0xF67000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF68620]
- name: segment_00F69000
type: bin
start: 0xF69000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF6A620]
- name: segment_00F6B000
type: bin
start: 0xF6B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF6C620]
- name: segment_00F6D000
type: bin
start: 0xF6D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF6E620]
- name: segment_00F6F000
type: bin
start: 0xF6F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF70A80]
- name: segment_00F71000
type: bin
start: 0xF71000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF72620]
- name: segment_00F73000
type: bin
start: 0xF73000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF74620]
- name: segment_00F75000
type: bin
start: 0xF75000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF76620]
- name: segment_00F77000
type: bin
start: 0xF77000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF78620]
- name: segment_00F79000
type: bin
start: 0xF79000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF7A620]
- name: segment_00F7B000
type: bin
start: 0xF7B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF7C620]
- name: segment_00F7D000
type: bin
start: 0xF7D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF7E620]
- name: segment_00F7F000
type: bin
start: 0xF7F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF80620]
- name: segment_00F81000
type: bin
start: 0xF81000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF82620]
- name: segment_00F83000
type: bin
start: 0xF83000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF84620]
- name: segment_00F85000
type: bin
start: 0xF85000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF86620]
- name: segment_00F87000
type: bin
start: 0xF87000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF88620]
- name: segment_00F89000
type: bin
start: 0xF89000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF8B760]
- name: segment_00F8C000
type: bin
start: 0xF8C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF8D020]
- name: segment_00F8E000
type: bin
start: 0xF8E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF90020]
- name: segment_00F91000
type: bin
start: 0xF91000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF92620]
- name: segment_00F93000
type: bin
start: 0xF93000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF94620]
- name: segment_00F95000
type: bin
start: 0xF95000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF96620]
- name: segment_00F97000
type: bin
start: 0xF97000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF98620]
- name: segment_00F99000
type: bin
start: 0xF99000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF9A620]
- name: segment_00F9B000
type: bin
start: 0xF9B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF9C620]
- name: segment_00F9D000
type: bin
start: 0xF9D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xF9F620]
- name: segment_00FA0000
type: bin
start: 0xFA0000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xFA1620]
- name: segment_00FA2000
type: bin
start: 0xFA2000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xFA3620]
- name: segment_00FA4000
type: bin
start: 0xFA4000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xFA5620]
- name: segment_00FA6000
type: bin
start: 0xFA6000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xFA7620]
- name: segment_00FA8000
type: bin
start: 0xFA8000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xFA9BF0]
- name: segment_00FAA000
type: bin
start: 0xFAA000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xFAB620]
- name: segment_00FAC000
type: bin
start: 0xFAC000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xFAE200]
- name: segment_00FAF000
type: bin
start: 0xFAF000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xFB0020]
- name: segment_00FB1000
type: bin
start: 0xFB1000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xFB2A90]
- name: segment_00FB3000
type: bin
start: 0xFB3000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xFB3820]
- name: segment_00FB4000
type: bin
start: 0xFB4000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xFB6780]
- name: segment_00FB7000
type: bin
start: 0xFB7000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xFB8020]
- name: segment_00FB9000
type: bin
start: 0xFB9000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xFBA020]
- name: segment_00FBB000
type: bin
start: 0xFBB000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xFBC020]
- name: segment_00FBD000
type: bin
start: 0xFBD000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xFBE020]
- name: segment_00FBF000
type: bin
start: 0xFBF000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xFC0020]
- name: segment_00FC1000
type: bin
start: 0xFC1000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xFC2020]
- name: segment_00FC3000
type: bin
start: 0xFC3000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xFC4020]
- name: segment_00FC5000
type: bin
start: 0xFC5000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xFC73F0]
- name: segment_00FC8000
type: bin
start: 0xFC8000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xFC9020]
- name: segment_00FCA000
type: bin
start: 0xFCA000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xFCB020]
- name: segment_00FCC000
type: bin
start: 0xFCC000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xFCD020]
- name: segment_00FCE000
type: bin
start: 0xFCE000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xFCF020]
- name: segment_00FD0000
type: bin
start: 0xFD0000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xFD1020]
- name: segment_00FD2000
type: bin
start: 0xFD2000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xFD3020]
- name: segment_00FD4000
type: bin
start: 0xFD4000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xFD5020]
- name: segment_00FD6000
type: bin
start: 0xFD6000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xFD8030]
- name: segment_00FD9000
type: bin
start: 0xFD9000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xFDA620]
- name: segment_00FDB000
type: bin
start: 0xFDB000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xFDD7F0]
- name: segment_00FDE000
type: bin
start: 0xFDE000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xFDF020]
- name: segment_00FE0000
type: bin
start: 0xFE0000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xFE26C0]
- name: segment_00FE3000
type: bin
start: 0xFE3000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xFE4020]
- name: segment_00FE5000
type: bin
start: 0xFE5000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xFE6020]
- name: segment_00FE7000
type: bin
start: 0xFE7000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xFE8020]
- name: segment_00FE9000
type: bin
start: 0xFE9000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xFEA020]
- name: segment_00FEB000
type: bin
start: 0xFEB000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xFEC020]
- name: segment_00FED000
type: bin
start: 0xFED000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xFEE020]
- name: segment_00FEF000
type: bin
start: 0xFEF000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xFF1670]
- name: segment_00FF2000
type: bin
start: 0xFF2000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xFF3020]
- name: segment_00FF4000
type: bin
start: 0xFF4000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xFF5F80]
- name: segment_00FF6000
type: bin
start: 0xFF6000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xFF7620]
- name: segment_00FF8000
type: bin
start: 0xFF8000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xFF9620]
- name: segment_00FFA000
type: bin
start: 0xFFA000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xFFB620]
- name: segment_00FFC000
type: bin
start: 0xFFC000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xFFD620]
- name: segment_00FFE000
type: bin
start: 0xFFE000
# vram:
+ compress: True
+ align: 0x1000
+ - [0xFFF620]
- name: segment_01000000
type: bin
start: 0x1000000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1002620]
- name: segment_01003000
type: bin
start: 0x1003000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1004620]
- name: segment_01005000
type: bin
start: 0x1005000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1006620]
- name: segment_01007000
type: bin
start: 0x1007000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1008620]
- name: segment_01009000
type: bin
start: 0x1009000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x100ACB0]
- name: segment_0100B000
type: bin
start: 0x100B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x100C620]
- name: segment_0100D000
type: bin
start: 0x100D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x100EF80]
- name: segment_0100F000
type: bin
start: 0x100F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1010020]
- name: segment_01011000
type: bin
start: 0x1011000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1013270]
- name: segment_01014000
type: bin
start: 0x1014000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1015020]
- name: segment_01016000
type: bin
start: 0x1016000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1018220]
- name: segment_01019000
type: bin
start: 0x1019000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x101A620]
- name: segment_0101B000
type: bin
start: 0x101B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x101C620]
- name: segment_0101D000
type: bin
start: 0x101D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x101E620]
- name: segment_0101F000
type: bin
start: 0x101F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1020620]
- name: segment_01021000
type: bin
start: 0x1021000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1022620]
- name: segment_01023000
type: bin
start: 0x1023000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1024620]
- name: segment_01025000
type: bin
start: 0x1025000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1026620]
- name: segment_01027000
type: bin
start: 0x1027000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1028620]
- name: segment_01029000
type: bin
start: 0x1029000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x102A620]
- name: segment_0102B000
type: bin
start: 0x102B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x102D800]
- name: segment_0102E000
type: bin
start: 0x102E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x102F020]
- name: segment_01030000
type: bin
start: 0x1030000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1032280]
- name: segment_01033000
type: bin
start: 0x1033000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1034020]
- name: segment_01035000
type: bin
start: 0x1035000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1036020]
- name: segment_01037000
type: bin
start: 0x1037000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1038020]
- name: segment_01039000
type: bin
start: 0x1039000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x103A020]
- name: segment_0103B000
type: bin
start: 0x103B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x103D210]
- name: segment_0103E000
type: bin
start: 0x103E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x103F020]
- name: segment_01040000
type: bin
start: 0x1040000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1041020]
- name: segment_01042000
type: bin
start: 0x1042000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1043020]
- name: segment_01044000
type: bin
start: 0x1044000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1045020]
- name: segment_01046000
type: bin
start: 0x1046000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1047020]
- name: segment_01048000
type: bin
start: 0x1048000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1049020]
- name: segment_0104A000
type: bin
start: 0x104A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x104B020]
- name: segment_0104C000
type: bin
start: 0x104C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x104DCC0]
- name: segment_0104E000
type: bin
start: 0x104E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x104F620]
- name: segment_01050000
type: bin
start: 0x1050000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1051620]
- name: segment_01052000
type: bin
start: 0x1052000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1053620]
- name: segment_01054000
type: bin
start: 0x1054000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1055620]
- name: segment_01056000
type: bin
start: 0x1056000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1057620]
- name: segment_01058000
type: bin
start: 0x1058000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1059620]
- name: segment_0105A000
type: bin
start: 0x105A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x105B620]
- name: segment_0105C000
type: bin
start: 0x105C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x105D620]
- name: segment_0105E000
type: bin
start: 0x105E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x105F620]
- name: segment_01060000
type: bin
start: 0x1060000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1061620]
- name: segment_01062000
type: bin
start: 0x1062000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1064170]
- name: segment_01065000
type: bin
start: 0x1065000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1066620]
- name: segment_01067000
type: bin
start: 0x1067000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1069770]
- name: segment_0106A000
type: bin
start: 0x106A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x106B620]
- name: segment_0106C000
type: bin
start: 0x106C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x106E590]
- name: segment_0106F000
type: bin
start: 0x106F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1070020]
- name: segment_01071000
type: bin
start: 0x1071000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x10734D0]
- name: segment_01074000
type: bin
start: 0x1074000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1075020]
- name: segment_01076000
type: bin
start: 0x1076000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1078680]
- name: segment_01079000
type: bin
start: 0x1079000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x107A020]
- name: segment_0107B000
type: bin
start: 0x107B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x107CEF0]
- name: segment_0107D000
type: bin
start: 0x107D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x107E620]
- name: segment_0107F000
type: bin
start: 0x107F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1080620]
- name: segment_01081000
type: bin
start: 0x1081000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1082620]
- name: segment_01083000
type: bin
start: 0x1083000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1084620]
- name: segment_01085000
type: bin
start: 0x1085000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1086620]
- name: segment_01087000
type: bin
start: 0x1087000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1088620]
- name: segment_01089000
type: bin
start: 0x1089000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x108A620]
- name: segment_0108B000
type: bin
start: 0x108B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x108C620]
- name: segment_0108D000
type: bin
start: 0x108D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x108E620]
- name: segment_0108F000
type: bin
start: 0x108F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1090620]
- name: segment_01091000
type: bin
start: 0x1091000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1093800]
- name: segment_01094000
type: bin
start: 0x1094000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1095620]
- name: segment_01096000
type: bin
start: 0x1096000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1097620]
- name: segment_01098000
type: bin
start: 0x1098000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1099620]
- name: segment_0109A000
type: bin
start: 0x109A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x109B620]
- name: segment_0109C000
type: bin
start: 0x109C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x109DD60]
- name: segment_0109E000
type: bin
start: 0x109E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x109F620]
- name: segment_010A0000
type: bin
start: 0x10A0000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x10A1C70]
- name: segment_010A2000
type: bin
start: 0x10A2000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x10A3620]
- name: segment_010A4000
type: bin
start: 0x10A4000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x10A5620]
- name: segment_010A6000
type: bin
start: 0x10A6000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x10A7620]
- name: segment_010A8000
type: bin
start: 0x10A8000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x10A9620]
- name: segment_010AA000
type: bin
start: 0x10AA000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x10AB620]
- name: segment_010AC000
type: bin
start: 0x10AC000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x10AD620]
- name: segment_010AE000
type: bin
start: 0x10AE000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x10B0060]
- name: segment_010B1000
type: bin
start: 0x10B1000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x10B2020]
- name: segment_010B3000
type: bin
start: 0x10B3000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x10B5270]
- name: segment_010B6000
type: bin
start: 0x10B6000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x10B7020]
- name: segment_010B8000
type: bin
start: 0x10B8000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x10BA100]
- name: segment_010BB000
type: bin
start: 0x10BB000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x10BC620]
- name: segment_010BD000
type: bin
start: 0x10BD000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x10BE620]
- name: segment_010BF000
type: bin
start: 0x10BF000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x10C0620]
- name: segment_010C1000
type: bin
start: 0x10C1000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x10C2620]
- name: segment_010C3000
type: bin
start: 0x10C3000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x10C4620]
- name: segment_010C5000
type: bin
start: 0x10C5000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x10C6620]
- name: segment_010C7000
type: bin
start: 0x10C7000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x10C8620]
- name: segment_010C9000
type: bin
start: 0x10C9000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x10CA620]
- name: segment_010CB000
type: bin
start: 0x10CB000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x10CC620]
- name: segment_010CD000
type: bin
start: 0x10CD000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x10CE620]
- name: segment_010CF000
type: bin
start: 0x10CF000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x10D1300]
- name: segment_010D2000
type: bin
start: 0x10D2000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x10D3620]
- name: segment_010D4000
type: bin
start: 0x10D4000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x10D60B0]
- name: segment_010D7000
type: bin
start: 0x10D7000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x10D8020]
- name: segment_010D9000
type: bin
start: 0x10D9000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x10DB500]
- name: segment_010DC000
type: bin
start: 0x10DC000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x10DD020]
- name: segment_010DE000
type: bin
start: 0x10DE000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x10DF020]
- name: segment_010E0000
type: bin
start: 0x10E0000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x10E1020]
- name: segment_010E2000
type: bin
start: 0x10E2000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x10E4710]
- name: segment_010E5000
type: bin
start: 0x10E5000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x10E6620]
- name: segment_010E7000
type: bin
start: 0x10E7000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x10E90D0]
- name: segment_010EA000
type: bin
start: 0x10EA000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x10EB020]
- name: segment_010EC000
type: bin
start: 0x10EC000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x10ED020]
- name: segment_010EE000
type: bin
start: 0x10EE000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x10EF020]
- name: segment_010F0000
type: bin
start: 0x10F0000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x10F1020]
- name: segment_010F2000
type: bin
start: 0x10F2000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x10F3020]
- name: segment_010F4000
type: bin
start: 0x10F4000
# vram:
+ compress: False
+ align: 0x1000
+ - [0x10FF1A0]
- name: segment_01100000
type: bin
start: 0x1100000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x11003C0]
- name: segment_01101000
type: bin
start: 0x1101000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1101770]
- name: segment_01102000
type: bin
start: 0x1102000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x11029E0]
- name: segment_01103000
type: bin
start: 0x1103000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x11054F0]
- name: segment_01106000
type: bin
start: 0x1106000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1106A60]
- name: segment_01107000
type: bin
start: 0x1107000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1107930]
- name: segment_01108000
type: bin
start: 0x1108000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1108BF0]
- name: segment_01109000
type: bin
start: 0x1109000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1109B30]
- name: segment_0110A000
type: bin
start: 0x110A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x110A9A0]
- name: segment_0110B000
type: bin
start: 0x110B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x110B930]
- name: segment_0110C000
type: bin
start: 0x110C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x110CBB0]
- name: segment_0110D000
type: bin
start: 0x110D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x110DB60]
- name: segment_0110E000
type: bin
start: 0x110E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x110E9D0]
- name: segment_0110F000
type: bin
start: 0x110F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x110F9D0]
- name: segment_01110000
type: bin
start: 0x1110000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x11109D0]
- name: segment_01111000
type: bin
start: 0x1111000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x11119D0]
- name: segment_01112000
type: bin
start: 0x1112000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1112BD0]
- name: segment_01113000
type: bin
start: 0x1113000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x11139D0]
- name: segment_01114000
type: bin
start: 0x1114000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1114930]
- name: segment_01115000
type: bin
start: 0x1115000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1115AC0]
- name: segment_01116000
type: bin
start: 0x1116000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1116930]
- name: segment_01117000
type: bin
start: 0x1117000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1117AA0]
- name: segment_01118000
type: bin
start: 0x1118000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1118800]
- name: segment_01119000
type: bin
start: 0x1119000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1119AB0]
- name: segment_0111A000
type: bin
start: 0x111A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x111A8B0]
- name: segment_0111B000
type: bin
start: 0x111B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x111BB40]
- name: segment_0111C000
type: bin
start: 0x111C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x111C940]
- name: segment_0111D000
type: bin
start: 0x111D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x111DBD0]
- name: segment_0111E000
type: bin
start: 0x111E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x111E9C0]
- name: segment_0111F000
type: bin
start: 0x111F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x111F930]
- name: segment_01120000
type: bin
start: 0x1120000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x11209B0]
- name: segment_01121000
type: bin
start: 0x1121000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1121B40]
- name: segment_01122000
type: bin
start: 0x1122000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1122900]
- name: segment_01123000
type: bin
start: 0x1123000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1123930]
- name: segment_01124000
type: bin
start: 0x1124000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1124930]
- name: segment_01125000
type: bin
start: 0x1125000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x11259D0]
- name: segment_01126000
type: bin
start: 0x1126000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1126930]
- name: segment_01127000
type: bin
start: 0x1127000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1127A40]
- name: segment_01128000
type: bin
start: 0x1128000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x11285B0]
- name: segment_01129000
type: bin
start: 0x1129000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1129A80]
- name: segment_0112A000
type: bin
start: 0x112A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x112A800]
- name: segment_0112B000
type: bin
start: 0x112B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x112B670]
- name: segment_0112C000
type: bin
start: 0x112C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x112C750]
- name: segment_0112D000
type: bin
start: 0x112D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x112E1E0]
- name: segment_0112F000
type: bin
start: 0x112F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x112F4A0]
- name: segment_01130000
type: bin
start: 0x1130000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1130400]
- name: segment_01131000
type: bin
start: 0x1131000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x11331F0]
- name: segment_01134000
type: bin
start: 0x1134000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1134AD0]
- name: segment_01135000
type: bin
start: 0x1135000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x11353C0]
- name: segment_01136000
type: bin
start: 0x1136000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x113BCD0]
- name: segment_0113C000
type: bin
start: 0x113C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x113C100]
- name: segment_0113D000
type: bin
start: 0x113D000
# vram:
+ compress: False
+ align: 0x1000
+ - [0x1146950]
- name: segment_01147000
type: bin
start: 0x1147000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1147470]
- name: segment_01148000
type: bin
start: 0x1148000
# vram:
+ compress: False
+ align: 0x1000
+ - [0x11492A0]
- name: segment_0114A000
type: bin
start: 0x114A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1187360]
- name: segment_01188000
type: bin
start: 0x1188000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x11AAC80]
- name: segment_011AB000
type: bin
start: 0x11AB000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x11E1A20]
- name: segment_011E2000
type: bin
start: 0x11E2000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x11E2690]
- name: segment_011E3000
type: bin
start: 0x11E3000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x11E30C0]
- name: segment_011E4000
type: bin
start: 0x11E4000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x11E40C0]
- name: segment_011E5000
type: bin
start: 0x11E5000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x11E5230]
- name: segment_011E6000
type: bin
start: 0x11E6000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x11E63C0]
- name: segment_011E7000
type: bin
start: 0x11E7000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x11E70C0]
- name: segment_011E8000
type: bin
start: 0x11E8000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x11E8770]
- name: segment_011E9000
type: bin
start: 0x11E9000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x11E9090]
- name: segment_011EA000
type: bin
start: 0x11EA000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x11EA200]
- name: segment_011EB000
type: bin
start: 0x11EB000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x11EB090]
- name: segment_011EC000
type: bin
start: 0x11EC000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x11EC090]
- name: segment_011ED000
type: bin
start: 0x11ED000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x11ED050]
- name: segment_011EE000
type: bin
start: 0x11EE000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x11EE020]
- name: segment_011EF000
type: bin
start: 0x11EF000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x11EF010]
- name: segment_011F0000
type: bin
start: 0x11F0000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x11F0050]
- name: segment_011F1000
type: bin
start: 0x11F1000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x11F1070]
- name: segment_011F2000
type: bin
start: 0x11F2000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x11F2010]
- name: segment_011F3000
type: bin
start: 0x11F3000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x11F3050]
- name: segment_011F4000
type: bin
start: 0x11F4000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x11F4930]
- name: segment_011F5000
type: bin
start: 0x11F5000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x11F5F90]
- name: segment_011F6000
type: bin
start: 0x11F6000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x11F79C0]
- name: segment_011F8000
type: bin
start: 0x11F8000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x11F91A0]
- name: segment_011FA000
type: bin
start: 0x11FA000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x11FB7E0]
- name: segment_011FC000
type: bin
start: 0x11FC000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x11FD610]
- name: segment_011FE000
type: bin
start: 0x11FE000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x11FFA00]
- name: segment_01200000
type: bin
start: 0x1200000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1201660]
- name: segment_01202000
type: bin
start: 0x1202000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1202F80]
- name: segment_01203000
type: bin
start: 0x1203000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12041D0]
- name: segment_01205000
type: bin
start: 0x1205000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1206370]
- name: segment_01207000
type: bin
start: 0x1207000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12087A0]
- name: segment_01209000
type: bin
start: 0x1209000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x120A480]
- name: segment_0120B000
type: bin
start: 0x120B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x120C340]
- name: segment_0120D000
type: bin
start: 0x120D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x120E470]
- name: segment_0120F000
type: bin
start: 0x120F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1210460]
- name: segment_01211000
type: bin
start: 0x1211000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12120D0]
- name: segment_01213000
type: bin
start: 0x1213000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1214700]
- name: segment_01215000
type: bin
start: 0x1215000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1216750]
- name: segment_01217000
type: bin
start: 0x1217000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1217FB0]
- name: segment_01218000
type: bin
start: 0x1218000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1219B10]
- name: segment_0121A000
type: bin
start: 0x121A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x121B730]
- name: segment_0121C000
type: bin
start: 0x121C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x121D460]
- name: segment_0121E000
type: bin
start: 0x121E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x121F6D0]
- name: segment_01220000
type: bin
start: 0x1220000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1221340]
- name: segment_01222000
type: bin
start: 0x1222000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1223200]
- name: segment_01224000
type: bin
start: 0x1224000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1225150]
- name: segment_01226000
type: bin
start: 0x1226000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12273E0]
- name: segment_01228000
type: bin
start: 0x1228000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1229260]
- name: segment_0122A000
type: bin
start: 0x122A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x122B350]
- name: segment_0122C000
type: bin
start: 0x122C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x122D010]
- name: segment_0122E000
type: bin
start: 0x122E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x122F230]
- name: segment_01230000
type: bin
start: 0x1230000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1231AB0]
- name: segment_01232000
type: bin
start: 0x1232000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1233B90]
- name: segment_01234000
type: bin
start: 0x1234000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1235950]
- name: segment_01236000
type: bin
start: 0x1236000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12373F0]
- name: segment_01238000
type: bin
start: 0x1238000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1239A60]
- name: segment_0123A000
type: bin
start: 0x123A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x123B5B0]
- name: segment_0123C000
type: bin
start: 0x123C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x123D080]
- name: segment_0123E000
type: bin
start: 0x123E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x123F600]
- name: segment_01240000
type: bin
start: 0x1240000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1241220]
- name: segment_01242000
type: bin
start: 0x1242000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1243360]
- name: segment_01244000
type: bin
start: 0x1244000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1244F10]
- name: segment_01245000
type: bin
start: 0x1245000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1246420]
- name: segment_01247000
type: bin
start: 0x1247000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12486B0]
- name: segment_01249000
type: bin
start: 0x1249000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x124AB20]
- name: segment_0124B000
type: bin
start: 0x124B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x124C2A0]
- name: segment_0124D000
type: bin
start: 0x124D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x124E210]
- name: segment_0124F000
type: bin
start: 0x124F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12503E0]
- name: segment_01251000
type: bin
start: 0x1251000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1252900]
- name: segment_01253000
type: bin
start: 0x1253000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1254540]
- name: segment_01255000
type: bin
start: 0x1255000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1256440]
- name: segment_01257000
type: bin
start: 0x1257000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1258210]
- name: segment_01259000
type: bin
start: 0x1259000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x125A530]
- name: segment_0125B000
type: bin
start: 0x125B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x125C290]
- name: segment_0125D000
type: bin
start: 0x125D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x125E450]
- name: segment_0125F000
type: bin
start: 0x125F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12603B0]
- name: segment_01261000
type: bin
start: 0x1261000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12625F0]
- name: segment_01263000
type: bin
start: 0x1263000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1264100]
- name: segment_01265000
type: bin
start: 0x1265000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1266290]
- name: segment_01267000
type: bin
start: 0x1267000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1268260]
- name: segment_01269000
type: bin
start: 0x1269000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x126A350]
- name: segment_0126B000
type: bin
start: 0x126B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x126C200]
- name: segment_0126D000
type: bin
start: 0x126D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x126E3B0]
- name: segment_0126F000
type: bin
start: 0x126F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12700A0]
- name: segment_01271000
type: bin
start: 0x1271000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1272020]
- name: segment_01273000
type: bin
start: 0x1273000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12743D0]
- name: segment_01275000
type: bin
start: 0x1275000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12764A0]
- name: segment_01277000
type: bin
start: 0x1277000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12785A0]
- name: segment_01279000
type: bin
start: 0x1279000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x127A1E0]
- name: segment_0127B000
type: bin
start: 0x127B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x127C750]
- name: segment_0127D000
type: bin
start: 0x127D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x127E6E0]
- name: segment_0127F000
type: bin
start: 0x127F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12804E0]
- name: segment_01281000
type: bin
start: 0x1281000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12827C0]
- name: segment_01283000
type: bin
start: 0x1283000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12847A0]
- name: segment_01285000
type: bin
start: 0x1285000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1286700]
- name: segment_01287000
type: bin
start: 0x1287000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1288470]
- name: segment_01289000
type: bin
start: 0x1289000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x128A520]
- name: segment_0128B000
type: bin
start: 0x128B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x128C500]
- name: segment_0128D000
type: bin
start: 0x128D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x128E0F0]
- name: segment_0128F000
type: bin
start: 0x128F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1290230]
- name: segment_01291000
type: bin
start: 0x1291000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12926C0]
- name: segment_01293000
type: bin
start: 0x1293000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12943C0]
- name: segment_01295000
type: bin
start: 0x1295000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1296480]
- name: segment_01297000
type: bin
start: 0x1297000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1297F70]
- name: segment_01298000
type: bin
start: 0x1298000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1299870]
- name: segment_0129A000
type: bin
start: 0x129A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x129B2D0]
- name: segment_0129C000
type: bin
start: 0x129C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x129D3D0]
- name: segment_0129E000
type: bin
start: 0x129E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x129F280]
- name: segment_012A0000
type: bin
start: 0x12A0000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12A1560]
- name: segment_012A2000
type: bin
start: 0x12A2000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12A3040]
- name: segment_012A4000
type: bin
start: 0x12A4000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12A52D0]
- name: segment_012A6000
type: bin
start: 0x12A6000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12A7270]
- name: segment_012A8000
type: bin
start: 0x12A8000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12A9780]
- name: segment_012AA000
type: bin
start: 0x12AA000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12AB5C0]
- name: segment_012AC000
type: bin
start: 0x12AC000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12B1CF0]
- name: segment_012B2000
type: bin
start: 0x12B2000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12B8290]
- name: segment_012B9000
type: bin
start: 0x12B9000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12BA980]
- name: segment_012BB000
type: bin
start: 0x12BB000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12C18E0]
- name: segment_012C2000
type: bin
start: 0x12C2000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12C5FF0]
- name: segment_012C6000
type: bin
start: 0x12C6000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12C7780]
- name: segment_012C8000
type: bin
start: 0x12C8000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12C9770]
- name: segment_012CA000
type: bin
start: 0x12CA000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12CBA80]
- name: segment_012CC000
type: bin
start: 0x12CC000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12CD820]
- name: segment_012CE000
type: bin
start: 0x12CE000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12CF8C0]
- name: segment_012D0000
type: bin
start: 0x12D0000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12D19A0]
- name: segment_012D2000
type: bin
start: 0x12D2000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12D3290]
- name: segment_012D4000
type: bin
start: 0x12D4000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12D56E0]
- name: segment_012D6000
type: bin
start: 0x12D6000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12D7170]
- name: segment_012D8000
type: bin
start: 0x12D8000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12D9360]
- name: segment_012DA000
type: bin
start: 0x12DA000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12DB170]
- name: segment_012DC000
type: bin
start: 0x12DC000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12DD140]
- name: segment_012DE000
type: bin
start: 0x12DE000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12DF400]
- name: segment_012E0000
type: bin
start: 0x12E0000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12E1060]
- name: segment_012E2000
type: bin
start: 0x12E2000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12E3870]
- name: segment_012E4000
type: bin
start: 0x12E4000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12E5A90]
- name: segment_012E6000
type: bin
start: 0x12E6000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12E7810]
- name: segment_012E8000
type: bin
start: 0x12E8000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12E9730]
- name: segment_012EA000
type: bin
start: 0x12EA000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12EB590]
- name: segment_012EC000
type: bin
start: 0x12EC000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12ED910]
- name: segment_012EE000
type: bin
start: 0x12EE000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12EF6E0]
- name: segment_012F0000
type: bin
start: 0x12F0000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12F18A0]
- name: segment_012F2000
type: bin
start: 0x12F2000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12F3940]
- name: segment_012F4000
type: bin
start: 0x12F4000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12F56D0]
- name: segment_012F6000
type: bin
start: 0x12F6000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12F78F0]
- name: segment_012F8000
type: bin
start: 0x12F8000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12F9820]
- name: segment_012FA000
type: bin
start: 0x12FA000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12FAB60]
- name: segment_012FB000
type: bin
start: 0x12FB000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12FC0E0]
- name: segment_012FD000
type: bin
start: 0x12FD000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x12FE520]
- name: segment_012FF000
type: bin
start: 0x12FF000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1300580]
- name: segment_01301000
type: bin
start: 0x1301000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1302A70]
- name: segment_01303000
type: bin
start: 0x1303000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1304190]
- name: segment_01305000
type: bin
start: 0x1305000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1306430]
- name: segment_01307000
type: bin
start: 0x1307000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1308020]
- name: segment_01309000
type: bin
start: 0x1309000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x130A1E0]
- name: segment_0130B000
type: bin
start: 0x130B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x130BDF0]
- name: segment_0130C000
type: bin
start: 0x130C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x130D520]
- name: segment_0130E000
type: bin
start: 0x130E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x130F610]
- name: segment_01310000
type: bin
start: 0x1310000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1311700]
- name: segment_01312000
type: bin
start: 0x1312000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x13136D0]
- name: segment_01314000
type: bin
start: 0x1314000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1315120]
- name: segment_01316000
type: bin
start: 0x1316000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x13171C0]
- name: segment_01318000
type: bin
start: 0x1318000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x13193A0]
- name: segment_0131A000
type: bin
start: 0x131A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x131B8D0]
- name: segment_0131C000
type: bin
start: 0x131C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x131D8F0]
- name: segment_0131E000
type: bin
start: 0x131E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x131F780]
- name: segment_01320000
type: bin
start: 0x1320000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1321A10]
- name: segment_01322000
type: bin
start: 0x1322000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1323B90]
- name: segment_01324000
type: bin
start: 0x1324000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1325A30]
- name: segment_01326000
type: bin
start: 0x1326000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1327A40]
- name: segment_01328000
type: bin
start: 0x1328000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1329770]
- name: segment_0132A000
type: bin
start: 0x132A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x132B8E0]
- name: segment_0132C000
type: bin
start: 0x132C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x132D7E0]
- name: segment_0132E000
type: bin
start: 0x132E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x132F600]
- name: segment_01330000
type: bin
start: 0x1330000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1330840]
- name: segment_01331000
type: bin
start: 0x1331000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1332B40]
- name: segment_01333000
type: bin
start: 0x1333000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1333920]
- name: segment_01334000
type: bin
start: 0x1334000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1334960]
- name: segment_01335000
type: bin
start: 0x1335000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1335DE0]
- name: segment_01336000
type: bin
start: 0x1336000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1336970]
- name: segment_01337000
type: bin
start: 0x1337000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1337970]
- name: segment_01338000
type: bin
start: 0x1338000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1338D10]
- name: segment_01339000
type: bin
start: 0x1339000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1339300]
- name: segment_0133A000
type: bin
start: 0x133A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x133A320]
- name: segment_0133B000
type: bin
start: 0x133B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x133C3E0]
- name: segment_0133D000
type: bin
start: 0x133D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x133DF50]
- name: segment_0133E000
type: bin
start: 0x133E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x133F620]
- name: segment_01340000
type: bin
start: 0x1340000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1341080]
- name: segment_01342000
type: bin
start: 0x1342000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1343160]
- name: segment_01344000
type: bin
start: 0x1344000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1344EA0]
- name: segment_01345000
type: bin
start: 0x1345000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x13463F0]
- name: segment_01347000
type: bin
start: 0x1347000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x13482A0]
- name: segment_01349000
type: bin
start: 0x1349000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x134A5A0]
- name: segment_0134B000
type: bin
start: 0x134B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x134BFA0]
- name: segment_0134C000
type: bin
start: 0x134C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x134CF50]
- name: segment_0134D000
type: bin
start: 0x134D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x134E550]
- name: segment_0134F000
type: bin
start: 0x134F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x134FF50]
- name: segment_01350000
type: bin
start: 0x1350000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x13513A0]
- name: segment_01352000
type: bin
start: 0x1352000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1352F90]
- name: segment_01353000
type: bin
start: 0x1353000
# vram:
+ compress: False
+ align: 0x1000
+ - [0x13544A0]
- name: segment_01355000
type: bin
start: 0x1355000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x13564C0]
- name: segment_01357000
type: bin
start: 0x1357000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1358760]
- name: segment_01359000
type: bin
start: 0x1359000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x135A590]
- name: segment_0135B000
type: bin
start: 0x135B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x135C420]
- name: segment_0135D000
type: bin
start: 0x135D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x135E850]
- name: segment_0135F000
type: bin
start: 0x135F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x13606F0]
- name: segment_01361000
type: bin
start: 0x1361000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1362420]
- name: segment_01363000
type: bin
start: 0x1363000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1364730]
- name: segment_01365000
type: bin
start: 0x1365000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x13663C0]
- name: segment_01367000
type: bin
start: 0x1367000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x13685E0]
- name: segment_01369000
type: bin
start: 0x1369000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x136A310]
- name: segment_0136B000
type: bin
start: 0x136B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x136C1B0]
- name: segment_0136D000
type: bin
start: 0x136D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x136E440]
- name: segment_0136F000
type: bin
start: 0x136F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1370AE0]
- name: segment_01371000
type: bin
start: 0x1371000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1372830]
- name: segment_01373000
type: bin
start: 0x1373000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x13747F0]
- name: segment_01375000
type: bin
start: 0x1375000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1376690]
- name: segment_01377000
type: bin
start: 0x1377000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1378A00]
- name: segment_01379000
type: bin
start: 0x1379000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x137A9E0]
- name: segment_0137B000
type: bin
start: 0x137B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x137BBC0]
- name: segment_0137C000
type: bin
start: 0x137C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x137CC50]
- name: segment_0137D000
type: bin
start: 0x137D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x137E7B0]
- name: segment_0137F000
type: bin
start: 0x137F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1380B40]
- name: segment_01381000
type: bin
start: 0x1381000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1382960]
- name: segment_01383000
type: bin
start: 0x1383000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x13895F0]
- name: segment_0138A000
type: bin
start: 0x138A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x138E480]
- name: segment_0138F000
type: bin
start: 0x138F000
# vram:
+ compress: False
+ align: 0x1000
+ - [0x138F2C0]
- name: segment_01390000
type: bin
start: 0x1390000
# vram:
+ compress: False
+ align: 0x1000
+ - [0x13925A0]
- name: segment_01393000
type: bin
start: 0x1393000
# vram:
+ compress: False
+ align: 0x1000
+ - [0x1396B40]
- name: segment_01397000
type: bin
start: 0x1397000
# vram:
+ compress: False
+ align: 0x1000
+ - [0x1397E60]
- name: segment_01398000
type: bin
start: 0x1398000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x13995B0]
- name: segment_0139A000
type: bin
start: 0x139A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x139BB60]
- name: segment_0139C000
type: bin
start: 0x139C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x139D2C0]
- name: segment_0139E000
type: bin
start: 0x139E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x139FC00]
- name: segment_013A0000
type: bin
start: 0x13A0000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x13A1C90]
- name: segment_013A2000
type: bin
start: 0x13A2000
# vram:
+ compress: False
+ align: 0x1000
+ - [0x13A35D0]
- name: segment_013A4000
type: bin
start: 0x13A4000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x13A42C0]
- name: segment_013A5000
type: bin
start: 0x13A5000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x13A5470]
- name: segment_013A6000
type: bin
start: 0x13A6000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x13A6450]
- name: segment_013A7000
type: bin
start: 0x13A7000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x13A7F90]
- name: segment_013A8000
type: bin
start: 0x13A8000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x13A8F90]
- name: segment_013A9000
type: bin
start: 0x13A9000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x13AAC90]
- name: segment_013AB000
type: bin
start: 0x13AB000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x13AB580]
- name: segment_013AC000
type: bin
start: 0x13AC000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x13AEBB0]
- name: segment_013AF000
type: bin
start: 0x13AF000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x13B5390]
- name: segment_013B6000
type: bin
start: 0x13B6000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x13BA520]
- name: segment_013BB000
type: bin
start: 0x13BB000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x13BE810]
- name: segment_013BF000
type: bin
start: 0x13BF000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x13C6E40]
- name: segment_013C7000
type: bin
start: 0x13C7000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x13CC990]
- name: segment_013CD000
type: bin
start: 0x13CD000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x13D3DE0]
- name: segment_013D4000
type: bin
start: 0x13D4000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x13DB330]
- name: segment_013DC000
type: bin
start: 0x13DC000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x13E1CB0]
- name: segment_013E2000
type: bin
start: 0x13E2000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x13E2B40]
- name: segment_013E3000
type: bin
start: 0x13E3000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x13E4CD0]
- name: segment_013E5000
type: bin
start: 0x13E5000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x13E6770]
- name: segment_013E7000
type: bin
start: 0x13E7000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x13E8850]
- name: segment_013E9000
type: bin
start: 0x13E9000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x13EA760]
- name: segment_013EB000
type: bin
start: 0x13EB000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x13EBE00]
- name: segment_013EC000
type: bin
start: 0x13EC000
# vram:
+ compress: False
+ align: 0x1000
+ - [0x13F0330]
- name: segment_013F1000
type: bin
start: 0x13F1000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x13F2250]
- name: segment_013F3000
type: bin
start: 0x13F3000
# vram:
+ compress: False
+ align: 0x1000
+ - [0x1407F80]
- name: segment_01408000
type: bin
start: 0x1408000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1408440]
- name: segment_01409000
type: bin
start: 0x1409000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1409170]
- name: segment_0140A000
type: bin
start: 0x140A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x140A200]
- name: segment_0140B000
type: bin
start: 0x140B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x140B430]
- name: segment_0140C000
type: bin
start: 0x140C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x140FF10]
- name: segment_01410000
type: bin
start: 0x1410000
# vram:
+ compress: False
+ align: 0x1000
+ - [0x1426C90]
- name: segment_01427000
type: bin
start: 0x1427000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1427A00]
- name: segment_01428000
type: bin
start: 0x1428000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1428A50]
- name: segment_01429000
type: bin
start: 0x1429000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1429B00]
- name: segment_0142A000
type: bin
start: 0x142A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x142AEE0]
- name: segment_0142B000
type: bin
start: 0x142B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x142BF30]
- name: segment_0142C000
type: bin
start: 0x142C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x142CEB0]
- name: segment_0142D000
type: bin
start: 0x142D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x142DC60]
- name: segment_0142E000
type: bin
start: 0x142E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x142EEA0]
- name: segment_0142F000
type: bin
start: 0x142F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x142FC60]
- name: segment_01430000
type: bin
start: 0x1430000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1430C70]
- name: segment_01431000
type: bin
start: 0x1431000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1431D70]
- name: segment_01432000
type: bin
start: 0x1432000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14330A0]
- name: segment_01434000
type: bin
start: 0x1434000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1434DB0]
- name: segment_01435000
type: bin
start: 0x1435000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1435D20]
- name: segment_01436000
type: bin
start: 0x1436000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1436DD0]
- name: segment_01437000
type: bin
start: 0x1437000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1437E60]
- name: segment_01438000
type: bin
start: 0x1438000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1438B10]
- name: segment_01439000
type: bin
start: 0x1439000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1439CB0]
- name: segment_0143A000
type: bin
start: 0x143A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x143ADF0]
- name: segment_0143B000
type: bin
start: 0x143B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x143C0D0]
- name: segment_0143D000
type: bin
start: 0x143D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x143DBA0]
- name: segment_0143E000
type: bin
start: 0x143E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x143ED90]
- name: segment_0143F000
type: bin
start: 0x143F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x143FB60]
- name: segment_01440000
type: bin
start: 0x1440000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1440F80]
- name: segment_01441000
type: bin
start: 0x1441000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1441BB0]
- name: segment_01442000
type: bin
start: 0x1442000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1442DE0]
- name: segment_01443000
type: bin
start: 0x1443000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1443DE0]
- name: segment_01444000
type: bin
start: 0x1444000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1444E30]
- name: segment_01445000
type: bin
start: 0x1445000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1445F30]
- name: segment_01446000
type: bin
start: 0x1446000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1446C80]
- name: segment_01447000
type: bin
start: 0x1447000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1447DB0]
- name: segment_01448000
type: bin
start: 0x1448000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1448D80]
- name: segment_01449000
type: bin
start: 0x1449000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1449CD0]
- name: segment_0144A000
type: bin
start: 0x144A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x144ACC0]
- name: segment_0144B000
type: bin
start: 0x144B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x144BE00]
- name: segment_0144C000
type: bin
start: 0x144C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x144CE20]
- name: segment_0144D000
type: bin
start: 0x144D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x144DEA0]
- name: segment_0144E000
type: bin
start: 0x144E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x144F020]
- name: segment_01450000
type: bin
start: 0x1450000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1450F40]
- name: segment_01451000
type: bin
start: 0x1451000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1451F40]
- name: segment_01452000
type: bin
start: 0x1452000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1452F40]
- name: segment_01453000
type: bin
start: 0x1453000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1453DE0]
- name: segment_01454000
type: bin
start: 0x1454000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1454E90]
- name: segment_01455000
type: bin
start: 0x1455000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1455E70]
- name: segment_01456000
type: bin
start: 0x1456000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14570E0]
- name: segment_01458000
type: bin
start: 0x1458000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1458D80]
- name: segment_01459000
type: bin
start: 0x1459000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1459D10]
- name: segment_0145A000
type: bin
start: 0x145A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x145B060]
- name: segment_0145C000
type: bin
start: 0x145C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x145CDB0]
- name: segment_0145D000
type: bin
start: 0x145D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x145DCB0]
- name: segment_0145E000
type: bin
start: 0x145E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x145EF50]
- name: segment_0145F000
type: bin
start: 0x145F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x145FB60]
- name: segment_01460000
type: bin
start: 0x1460000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1460B60]
- name: segment_01461000
type: bin
start: 0x1461000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1461B60]
- name: segment_01462000
type: bin
start: 0x1462000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1462B60]
- name: segment_01463000
type: bin
start: 0x1463000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1463B60]
- name: segment_01464000
type: bin
start: 0x1464000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1464B60]
- name: segment_01465000
type: bin
start: 0x1465000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1465C50]
- name: segment_01466000
type: bin
start: 0x1466000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1466E90]
- name: segment_01467000
type: bin
start: 0x1467000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1467CB0]
- name: segment_01468000
type: bin
start: 0x1468000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1468EC0]
- name: segment_01469000
type: bin
start: 0x1469000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1469C50]
- name: segment_0146A000
type: bin
start: 0x146A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x146AC50]
- name: segment_0146B000
type: bin
start: 0x146B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x146BCA0]
- name: segment_0146C000
type: bin
start: 0x146C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x146CBE0]
- name: segment_0146D000
type: bin
start: 0x146D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x146DD30]
- name: segment_0146E000
type: bin
start: 0x146E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x146EEE0]
- name: segment_0146F000
type: bin
start: 0x146F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x146FF40]
- name: segment_01470000
type: bin
start: 0x1470000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1470E90]
- name: segment_01471000
type: bin
start: 0x1471000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1471E00]
- name: segment_01472000
type: bin
start: 0x1472000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1472B80]
- name: segment_01473000
type: bin
start: 0x1473000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1473D20]
- name: segment_01474000
type: bin
start: 0x1474000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1474EC0]
- name: segment_01475000
type: bin
start: 0x1475000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1475E40]
- name: segment_01476000
type: bin
start: 0x1476000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1476DD0]
- name: segment_01477000
type: bin
start: 0x1477000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1477DA0]
- name: segment_01478000
type: bin
start: 0x1478000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1478D40]
- name: segment_01479000
type: bin
start: 0x1479000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1479FE0]
- name: segment_0147A000
type: bin
start: 0x147A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x147AD80]
- name: segment_0147B000
type: bin
start: 0x147B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x147BC70]
- name: segment_0147C000
type: bin
start: 0x147C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x147CDA0]
- name: segment_0147D000
type: bin
start: 0x147D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x147E120]
- name: segment_0147F000
type: bin
start: 0x147F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x147FDF0]
- name: segment_01480000
type: bin
start: 0x1480000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1480DE0]
- name: segment_01481000
type: bin
start: 0x1481000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1481E90]
- name: segment_01482000
type: bin
start: 0x1482000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1483040]
- name: segment_01484000
type: bin
start: 0x1484000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1485040]
- name: segment_01486000
type: bin
start: 0x1486000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1487040]
- name: segment_01488000
type: bin
start: 0x1488000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1488C70]
- name: segment_01489000
type: bin
start: 0x1489000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1489E10]
- name: segment_0148A000
type: bin
start: 0x148A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x148AEA0]
- name: segment_0148B000
type: bin
start: 0x148B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x148BEA0]
- name: segment_0148C000
type: bin
start: 0x148C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x148CC10]
- name: segment_0148D000
type: bin
start: 0x148D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x148DED0]
- name: segment_0148E000
type: bin
start: 0x148E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x148EE90]
- name: segment_0148F000
type: bin
start: 0x148F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x148FF30]
- name: segment_01490000
type: bin
start: 0x1490000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1490E10]
- name: segment_01491000
type: bin
start: 0x1491000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1491DA0]
- name: segment_01492000
type: bin
start: 0x1492000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1492D10]
- name: segment_01493000
type: bin
start: 0x1493000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1494080]
- name: segment_01495000
type: bin
start: 0x1495000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1495E80]
- name: segment_01496000
type: bin
start: 0x1496000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1496E80]
- name: segment_01497000
type: bin
start: 0x1497000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1497D70]
- name: segment_01498000
type: bin
start: 0x1498000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1498C00]
- name: segment_01499000
type: bin
start: 0x1499000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1499F30]
- name: segment_0149A000
type: bin
start: 0x149A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x149AE90]
- name: segment_0149B000
type: bin
start: 0x149B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x149BFB0]
- name: segment_0149C000
type: bin
start: 0x149C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x149CE80]
- name: segment_0149D000
type: bin
start: 0x149D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x149DC60]
- name: segment_0149E000
type: bin
start: 0x149E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x149EE50]
- name: segment_0149F000
type: bin
start: 0x149F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x149FD80]
- name: segment_014A0000
type: bin
start: 0x14A0000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14A0D80]
- name: segment_014A1000
type: bin
start: 0x14A1000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14A1D80]
- name: segment_014A2000
type: bin
start: 0x14A2000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14A2D30]
- name: segment_014A3000
type: bin
start: 0x14A3000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14A4050]
- name: segment_014A5000
type: bin
start: 0x14A5000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14A59C0]
- name: segment_014A6000
type: bin
start: 0x14A6000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14A6D10]
- name: segment_014A7000
type: bin
start: 0x14A7000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14A7C70]
- name: segment_014A8000
type: bin
start: 0x14A8000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14A9090]
- name: segment_014AA000
type: bin
start: 0x14AA000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14AAEF0]
- name: segment_014AB000
type: bin
start: 0x14AB000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14ABB50]
- name: segment_014AC000
type: bin
start: 0x14AC000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14AD0F0]
- name: segment_014AE000
type: bin
start: 0x14AE000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14AEDD0]
- name: segment_014AF000
type: bin
start: 0x14AF000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14AFCF0]
- name: segment_014B0000
type: bin
start: 0x14B0000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14B0D50]
- name: segment_014B1000
type: bin
start: 0x14B1000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14B1B50]
- name: segment_014B2000
type: bin
start: 0x14B2000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14B2BB0]
- name: segment_014B3000
type: bin
start: 0x14B3000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14B3C70]
- name: segment_014B4000
type: bin
start: 0x14B4000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14B5130]
- name: segment_014B6000
type: bin
start: 0x14B6000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14B6CD0]
- name: segment_014B7000
type: bin
start: 0x14B7000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14B7ED0]
- name: segment_014B8000
type: bin
start: 0x14B8000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14B8EF0]
- name: segment_014B9000
type: bin
start: 0x14B9000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14B9EB0]
- name: segment_014BA000
type: bin
start: 0x14BA000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14BAFE0]
- name: segment_014BB000
type: bin
start: 0x14BB000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14BC000]
- name: segment_014BC000
type: bin
start: 0x14BC000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14BCE20]
- name: segment_014BD000
type: bin
start: 0x14BD000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14BDF40]
- name: segment_014BE000
type: bin
start: 0x14BE000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14BEF60]
- name: segment_014BF000
type: bin
start: 0x14BF000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14BFF30]
- name: segment_014C0000
type: bin
start: 0x14C0000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14C0CE0]
- name: segment_014C1000
type: bin
start: 0x14C1000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14C1E40]
- name: segment_014C2000
type: bin
start: 0x14C2000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14C2F70]
- name: segment_014C3000
type: bin
start: 0x14C3000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14C3DD0]
- name: segment_014C4000
type: bin
start: 0x14C4000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14C4FC0]
- name: segment_014C5000
type: bin
start: 0x14C5000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14C5CC0]
- name: segment_014C6000
type: bin
start: 0x14C6000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14C6B30]
- name: segment_014C7000
type: bin
start: 0x14C7000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14C7D30]
- name: segment_014C8000
type: bin
start: 0x14C8000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14C8D30]
- name: segment_014C9000
type: bin
start: 0x14C9000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14C9AF0]
- name: segment_014CA000
type: bin
start: 0x14CA000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14CAC80]
- name: segment_014CB000
type: bin
start: 0x14CB000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14CBC10]
- name: segment_014CC000
type: bin
start: 0x14CC000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14CCB00]
- name: segment_014CD000
type: bin
start: 0x14CD000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14CE290]
- name: segment_014CF000
type: bin
start: 0x14CF000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14CFCE0]
- name: segment_014D0000
type: bin
start: 0x14D0000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14D0B20]
- name: segment_014D1000
type: bin
start: 0x14D1000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14D1B20]
- name: segment_014D2000
type: bin
start: 0x14D2000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14D2B20]
- name: segment_014D3000
type: bin
start: 0x14D3000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14D3D80]
- name: segment_014D4000
type: bin
start: 0x14D4000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14D4A90]
- name: segment_014D5000
type: bin
start: 0x14D5000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14D5CE0]
- name: segment_014D6000
type: bin
start: 0x14D6000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14D6C70]
- name: segment_014D7000
type: bin
start: 0x14D7000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14D7DD0]
- name: segment_014D8000
type: bin
start: 0x14D8000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14D8CB0]
- name: segment_014D9000
type: bin
start: 0x14D9000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14D9CB0]
- name: segment_014DA000
type: bin
start: 0x14DA000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14DACB0]
- name: segment_014DB000
type: bin
start: 0x14DB000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14DBE30]
- name: segment_014DC000
type: bin
start: 0x14DC000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14DD040]
- name: segment_014DE000
type: bin
start: 0x14DE000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14DF120]
- name: segment_014E0000
type: bin
start: 0x14E0000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14E0AD0]
- name: segment_014E1000
type: bin
start: 0x14E1000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14E1C10]
- name: segment_014E2000
type: bin
start: 0x14E2000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14E2DF0]
- name: segment_014E3000
type: bin
start: 0x14E3000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14E3DD0]
- name: segment_014E4000
type: bin
start: 0x14E4000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14E5050]
- name: segment_014E6000
type: bin
start: 0x14E6000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14E6E50]
- name: segment_014E7000
type: bin
start: 0x14E7000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14E7CF0]
- name: segment_014E8000
type: bin
start: 0x14E8000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14E8CF0]
- name: segment_014E9000
type: bin
start: 0x14E9000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14E9CF0]
- name: segment_014EA000
type: bin
start: 0x14EA000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14EACF0]
- name: segment_014EB000
type: bin
start: 0x14EB000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14EBCF0]
- name: segment_014EC000
type: bin
start: 0x14EC000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14ECCF0]
- name: segment_014ED000
type: bin
start: 0x14ED000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14EDCF0]
- name: segment_014EE000
type: bin
start: 0x14EE000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14EECF0]
- name: segment_014EF000
type: bin
start: 0x14EF000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14EFCF0]
- name: segment_014F0000
type: bin
start: 0x14F0000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14F0CF0]
- name: segment_014F1000
type: bin
start: 0x14F1000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14F1CF0]
- name: segment_014F2000
type: bin
start: 0x14F2000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14F2CF0]
- name: segment_014F3000
type: bin
start: 0x14F3000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14F3CF0]
- name: segment_014F4000
type: bin
start: 0x14F4000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14F4CF0]
- name: segment_014F5000
type: bin
start: 0x14F5000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14F5CF0]
- name: segment_014F6000
type: bin
start: 0x14F6000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14F6BA0]
- name: segment_014F7000
type: bin
start: 0x14F7000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14F7C50]
- name: segment_014F8000
type: bin
start: 0x14F8000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14F8E50]
- name: segment_014F9000
type: bin
start: 0x14F9000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14F9C60]
- name: segment_014FA000
type: bin
start: 0x14FA000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14FB170]
- name: segment_014FC000
type: bin
start: 0x14FC000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14FCE50]
- name: segment_014FD000
type: bin
start: 0x14FD000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14FDE60]
- name: segment_014FE000
type: bin
start: 0x14FE000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x14FF290]
- name: segment_01500000
type: bin
start: 0x1500000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1501170]
- name: segment_01502000
type: bin
start: 0x1502000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1502F00]
- name: segment_01503000
type: bin
start: 0x1503000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1503DE0]
- name: segment_01504000
type: bin
start: 0x1504000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1505550]
- name: segment_01506000
type: bin
start: 0x1506000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1507250]
- name: segment_01508000
type: bin
start: 0x1508000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1508E90]
- name: segment_01509000
type: bin
start: 0x1509000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1509C40]
- name: segment_0150A000
type: bin
start: 0x150A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x150ACB0]
- name: segment_0150B000
type: bin
start: 0x150B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x150BAA0]
- name: segment_0150C000
type: bin
start: 0x150C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x150CD00]
- name: segment_0150D000
type: bin
start: 0x150D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x150DE50]
- name: segment_0150E000
type: bin
start: 0x150E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x150E960]
- name: segment_0150F000
type: bin
start: 0x150F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x150FCB0]
- name: segment_01510000
type: bin
start: 0x1510000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1510C80]
- name: segment_01511000
type: bin
start: 0x1511000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1511CA0]
- name: segment_01512000
type: bin
start: 0x1512000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1512CE0]
- name: segment_01513000
type: bin
start: 0x1513000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1513D50]
- name: segment_01514000
type: bin
start: 0x1514000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1514E90]
- name: segment_01515000
type: bin
start: 0x1515000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1515A70]
- name: segment_01516000
type: bin
start: 0x1516000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1516D50]
- name: segment_01517000
type: bin
start: 0x1517000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1517D40]
- name: segment_01518000
type: bin
start: 0x1518000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1518BF0]
- name: segment_01519000
type: bin
start: 0x1519000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1519DB0]
- name: segment_0151A000
type: bin
start: 0x151A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x151AC10]
- name: segment_0151B000
type: bin
start: 0x151B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x151BDC0]
- name: segment_0151C000
type: bin
start: 0x151C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x151CC10]
- name: segment_0151D000
type: bin
start: 0x151D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x151DCC0]
- name: segment_0151E000
type: bin
start: 0x151E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x151EC20]
- name: segment_0151F000
type: bin
start: 0x151F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x151FDD0]
- name: segment_01520000
type: bin
start: 0x1520000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1520CC0]
- name: segment_01521000
type: bin
start: 0x1521000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1521D90]
- name: segment_01522000
type: bin
start: 0x1522000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1522E00]
- name: segment_01523000
type: bin
start: 0x1523000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1523DB0]
- name: segment_01524000
type: bin
start: 0x1524000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1524E00]
- name: segment_01525000
type: bin
start: 0x1525000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1525F20]
- name: segment_01526000
type: bin
start: 0x1526000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1526E90]
- name: segment_01527000
type: bin
start: 0x1527000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1527D70]
- name: segment_01528000
type: bin
start: 0x1528000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1528DB0]
- name: segment_01529000
type: bin
start: 0x1529000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1529D70]
- name: segment_0152A000
type: bin
start: 0x152A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x152AC80]
- name: segment_0152B000
type: bin
start: 0x152B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x152BDF0]
- name: segment_0152C000
type: bin
start: 0x152C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x152CC90]
- name: segment_0152D000
type: bin
start: 0x152D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x152DF40]
- name: segment_0152E000
type: bin
start: 0x152E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x152ECA0]
- name: segment_0152F000
type: bin
start: 0x152F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x152FE60]
- name: segment_01530000
type: bin
start: 0x1530000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1530EB0]
- name: segment_01531000
type: bin
start: 0x1531000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1531CB0]
- name: segment_01532000
type: bin
start: 0x1532000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1532D60]
- name: segment_01533000
type: bin
start: 0x1533000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1533D50]
- name: segment_01534000
type: bin
start: 0x1534000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1534EB0]
- name: segment_01535000
type: bin
start: 0x1535000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1535CA0]
- name: segment_01536000
type: bin
start: 0x1536000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1536F10]
- name: segment_01537000
type: bin
start: 0x1537000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1537C10]
- name: segment_01538000
type: bin
start: 0x1538000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1538EC0]
- name: segment_01539000
type: bin
start: 0x1539000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1539C50]
- name: segment_0153A000
type: bin
start: 0x153A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x153ACB0]
- name: segment_0153B000
type: bin
start: 0x153B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x153C040]
- name: segment_0153D000
type: bin
start: 0x153D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x153DF90]
- name: segment_0153E000
type: bin
start: 0x153E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x153ED50]
- name: segment_0153F000
type: bin
start: 0x153F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x153FCC0]
- name: segment_01540000
type: bin
start: 0x1540000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1540E20]
- name: segment_01541000
type: bin
start: 0x1541000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1541F80]
- name: segment_01542000
type: bin
start: 0x1542000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1542F50]
- name: segment_01543000
type: bin
start: 0x1543000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1543FA0]
- name: segment_01544000
type: bin
start: 0x1544000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1544EB0]
- name: segment_01545000
type: bin
start: 0x1545000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1545EE0]
- name: segment_01546000
type: bin
start: 0x1546000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1546E40]
- name: segment_01547000
type: bin
start: 0x1547000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1547FA0]
- name: segment_01548000
type: bin
start: 0x1548000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1548F90]
- name: segment_01549000
type: bin
start: 0x1549000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1549FB0]
- name: segment_0154A000
type: bin
start: 0x154A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x154AAE0]
- name: segment_0154B000
type: bin
start: 0x154B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x154BAE0]
- name: segment_0154C000
type: bin
start: 0x154C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x154CAE0]
- name: segment_0154D000
type: bin
start: 0x154D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x154DD80]
- name: segment_0154E000
type: bin
start: 0x154E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x154EEF0]
- name: segment_0154F000
type: bin
start: 0x154F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x154FFF0]
- name: segment_01550000
type: bin
start: 0x1550000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1551100]
- name: segment_01552000
type: bin
start: 0x1552000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1552B40]
- name: segment_01553000
type: bin
start: 0x1553000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1553B40]
- name: segment_01554000
type: bin
start: 0x1554000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1554B40]
- name: segment_01555000
type: bin
start: 0x1555000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1555E90]
- name: segment_01556000
type: bin
start: 0x1556000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1556FD0]
- name: segment_01557000
type: bin
start: 0x1557000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1558100]
- name: segment_01559000
type: bin
start: 0x1559000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1559F10]
- name: segment_0155A000
type: bin
start: 0x155A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x155AB80]
- name: segment_0155B000
type: bin
start: 0x155B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x155BD10]
- name: segment_0155C000
type: bin
start: 0x155C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x155CD40]
- name: segment_0155D000
type: bin
start: 0x155D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x155DDF0]
- name: segment_0155E000
type: bin
start: 0x155E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x155EDA0]
- name: segment_0155F000
type: bin
start: 0x155F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x155FFA0]
- name: segment_01560000
type: bin
start: 0x1560000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1560D80]
- name: segment_01561000
type: bin
start: 0x1561000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1561E60]
- name: segment_01562000
type: bin
start: 0x1562000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15628E0]
- name: segment_01563000
type: bin
start: 0x1563000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1563BC0]
- name: segment_01564000
type: bin
start: 0x1564000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1564B30]
- name: segment_01565000
type: bin
start: 0x1565000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1565B30]
- name: segment_01566000
type: bin
start: 0x1566000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1566B30]
- name: segment_01567000
type: bin
start: 0x1567000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1567E90]
- name: segment_01568000
type: bin
start: 0x1568000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1568E20]
- name: segment_01569000
type: bin
start: 0x1569000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1569CD0]
- name: segment_0156A000
type: bin
start: 0x156A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x156AC50]
- name: segment_0156B000
type: bin
start: 0x156B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x156BFF0]
- name: segment_0156C000
type: bin
start: 0x156C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x156CC30]
- name: segment_0156D000
type: bin
start: 0x156D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x156DC30]
- name: segment_0156E000
type: bin
start: 0x156E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x156EB60]
- name: segment_0156F000
type: bin
start: 0x156F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x156FF60]
- name: segment_01570000
type: bin
start: 0x1570000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1570CA0]
- name: segment_01571000
type: bin
start: 0x1571000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1571DE0]
- name: segment_01572000
type: bin
start: 0x1572000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1572D90]
- name: segment_01573000
type: bin
start: 0x1573000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1573DD0]
- name: segment_01574000
type: bin
start: 0x1574000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1574DD0]
- name: segment_01575000
type: bin
start: 0x1575000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1575EC0]
- name: segment_01576000
type: bin
start: 0x1576000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1576DE0]
- name: segment_01577000
type: bin
start: 0x1577000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1577F00]
- name: segment_01578000
type: bin
start: 0x1578000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1578ED0]
- name: segment_01579000
type: bin
start: 0x1579000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1579C80]
- name: segment_0157A000
type: bin
start: 0x157A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x157B180]
- name: segment_0157C000
type: bin
start: 0x157C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x157CAC0]
- name: segment_0157D000
type: bin
start: 0x157D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x157DAF0]
- name: segment_0157E000
type: bin
start: 0x157E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x157EC70]
- name: segment_0157F000
type: bin
start: 0x157F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x157FA50]
- name: segment_01580000
type: bin
start: 0x1580000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1580A50]
- name: segment_01581000
type: bin
start: 0x1581000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1581A50]
- name: segment_01582000
type: bin
start: 0x1582000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1582FA0]
- name: segment_01583000
type: bin
start: 0x1583000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1583BD0]
- name: segment_01584000
type: bin
start: 0x1584000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1584EA0]
- name: segment_01585000
type: bin
start: 0x1585000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15860A0]
- name: segment_01587000
type: bin
start: 0x1587000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1587E90]
- name: segment_01588000
type: bin
start: 0x1588000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1588D40]
- name: segment_01589000
type: bin
start: 0x1589000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1589E90]
- name: segment_0158A000
type: bin
start: 0x158A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x158AE10]
- name: segment_0158B000
type: bin
start: 0x158B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x158BE10]
- name: segment_0158C000
type: bin
start: 0x158C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x158D0B0]
- name: segment_0158E000
type: bin
start: 0x158E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x158F030]
- name: segment_01590000
type: bin
start: 0x1590000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1590B90]
- name: segment_01591000
type: bin
start: 0x1591000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1591D00]
- name: segment_01592000
type: bin
start: 0x1592000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1592A70]
- name: segment_01593000
type: bin
start: 0x1593000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1594020]
- name: segment_01595000
type: bin
start: 0x1595000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1595CD0]
- name: segment_01596000
type: bin
start: 0x1596000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1596E90]
- name: segment_01597000
type: bin
start: 0x1597000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1597E40]
- name: segment_01598000
type: bin
start: 0x1598000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1598E80]
- name: segment_01599000
type: bin
start: 0x1599000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1599FC0]
- name: segment_0159A000
type: bin
start: 0x159A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x159AD40]
- name: segment_0159B000
type: bin
start: 0x159B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x159BD70]
- name: segment_0159C000
type: bin
start: 0x159C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x159CE20]
- name: segment_0159D000
type: bin
start: 0x159D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x159E0B0]
- name: segment_0159F000
type: bin
start: 0x159F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x159FC40]
- name: segment_015A0000
type: bin
start: 0x15A0000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15A0B40]
- name: segment_015A1000
type: bin
start: 0x15A1000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15A1B40]
- name: segment_015A2000
type: bin
start: 0x15A2000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15A2DE0]
- name: segment_015A3000
type: bin
start: 0x15A3000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15A40C0]
- name: segment_015A5000
type: bin
start: 0x15A5000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15A5DD0]
- name: segment_015A6000
type: bin
start: 0x15A6000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15A69C0]
- name: segment_015A7000
type: bin
start: 0x15A7000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15A7E20]
- name: segment_015A8000
type: bin
start: 0x15A8000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15A8E50]
- name: segment_015A9000
type: bin
start: 0x15A9000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15A9DB0]
- name: segment_015AA000
type: bin
start: 0x15AA000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15AB1A0]
- name: segment_015AC000
type: bin
start: 0x15AC000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15ACFD0]
- name: segment_015AD000
type: bin
start: 0x15AD000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15AE000]
- name: segment_015AE000
type: bin
start: 0x15AE000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15AE8C0]
- name: segment_015AF000
type: bin
start: 0x15AF000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15B0010]
- name: segment_015B1000
type: bin
start: 0x15B1000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15B1ED0]
- name: segment_015B2000
type: bin
start: 0x15B2000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15B2E70]
- name: segment_015B3000
type: bin
start: 0x15B3000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15B3EC0]
- name: segment_015B4000
type: bin
start: 0x15B4000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15B4CF0]
- name: segment_015B5000
type: bin
start: 0x15B5000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15B5F60]
- name: segment_015B6000
type: bin
start: 0x15B6000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15B6C40]
- name: segment_015B7000
type: bin
start: 0x15B7000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15B7CA0]
- name: segment_015B8000
type: bin
start: 0x15B8000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15B8E80]
- name: segment_015B9000
type: bin
start: 0x15B9000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15B9DA0]
- name: segment_015BA000
type: bin
start: 0x15BA000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15BADF0]
- name: segment_015BB000
type: bin
start: 0x15BB000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15BBC80]
- name: segment_015BC000
type: bin
start: 0x15BC000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15BCEC0]
- name: segment_015BD000
type: bin
start: 0x15BD000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15BDEB0]
- name: segment_015BE000
type: bin
start: 0x15BE000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15BEDB0]
- name: segment_015BF000
type: bin
start: 0x15BF000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15BFE60]
- name: segment_015C0000
type: bin
start: 0x15C0000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15C0D20]
- name: segment_015C1000
type: bin
start: 0x15C1000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15C1D80]
- name: segment_015C2000
type: bin
start: 0x15C2000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15C2D50]
- name: segment_015C3000
type: bin
start: 0x15C3000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15C3E30]
- name: segment_015C4000
type: bin
start: 0x15C4000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15C4F20]
- name: segment_015C5000
type: bin
start: 0x15C5000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15C5F80]
- name: segment_015C6000
type: bin
start: 0x15C6000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15C71E0]
- name: segment_015C8000
type: bin
start: 0x15C8000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15C9020]
- name: segment_015CA000
type: bin
start: 0x15CA000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15CAFC0]
- name: segment_015CB000
type: bin
start: 0x15CB000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15CC1A0]
- name: segment_015CD000
type: bin
start: 0x15CD000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15CDEB0]
- name: segment_015CE000
type: bin
start: 0x15CE000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15CEF50]
- name: segment_015CF000
type: bin
start: 0x15CF000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15CFF50]
- name: segment_015D0000
type: bin
start: 0x15D0000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15D0F70]
- name: segment_015D1000
type: bin
start: 0x15D1000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15D1F70]
- name: segment_015D2000
type: bin
start: 0x15D2000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15D2CF0]
- name: segment_015D3000
type: bin
start: 0x15D3000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15D3F00]
- name: segment_015D4000
type: bin
start: 0x15D4000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15D5130]
- name: segment_015D6000
type: bin
start: 0x15D6000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15D7140]
- name: segment_015D8000
type: bin
start: 0x15D8000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15D9130]
- name: segment_015DA000
type: bin
start: 0x15DA000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15DB170]
- name: segment_015DC000
type: bin
start: 0x15DC000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15DD1E0]
- name: segment_015DE000
type: bin
start: 0x15DE000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15DF150]
- name: segment_015E0000
type: bin
start: 0x15E0000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15E11F0]
- name: segment_015E2000
type: bin
start: 0x15E2000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15E31F0]
- name: segment_015E4000
type: bin
start: 0x15E4000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15E5190]
- name: segment_015E6000
type: bin
start: 0x15E6000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15E7170]
- name: segment_015E8000
type: bin
start: 0x15E8000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15E91D0]
- name: segment_015EA000
type: bin
start: 0x15EA000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15EB1D0]
- name: segment_015EC000
type: bin
start: 0x15EC000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15ED1E0]
- name: segment_015EE000
type: bin
start: 0x15EE000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15EF1E0]
- name: segment_015F0000
type: bin
start: 0x15F0000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15F1250]
- name: segment_015F2000
type: bin
start: 0x15F2000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15F3170]
- name: segment_015F4000
type: bin
start: 0x15F4000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15F5180]
- name: segment_015F6000
type: bin
start: 0x15F6000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15F7170]
- name: segment_015F8000
type: bin
start: 0x15F8000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15F9370]
- name: segment_015FA000
type: bin
start: 0x15FA000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15FB0D0]
- name: segment_015FC000
type: bin
start: 0x15FC000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15FD0D0]
- name: segment_015FE000
type: bin
start: 0x15FE000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x15FF130]
- name: segment_01600000
type: bin
start: 0x1600000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1601190]
- name: segment_01602000
type: bin
start: 0x1602000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1603160]
- name: segment_01604000
type: bin
start: 0x1604000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1605140]
- name: segment_01606000
type: bin
start: 0x1606000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1607140]
- name: segment_01608000
type: bin
start: 0x1608000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1609110]
- name: segment_0160A000
type: bin
start: 0x160A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x160B1E0]
- name: segment_0160C000
type: bin
start: 0x160C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x160D130]
- name: segment_0160E000
type: bin
start: 0x160E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x160F110]
- name: segment_01610000
type: bin
start: 0x1610000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1611140]
- name: segment_01612000
type: bin
start: 0x1612000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1613140]
- name: segment_01614000
type: bin
start: 0x1614000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1615160]
- name: segment_01616000
type: bin
start: 0x1616000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1617190]
- name: segment_01618000
type: bin
start: 0x1618000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1619120]
- name: segment_0161A000
type: bin
start: 0x161A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x161B130]
- name: segment_0161C000
type: bin
start: 0x161C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x161D1D0]
- name: segment_0161E000
type: bin
start: 0x161E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x161F1D0]
- name: segment_01620000
type: bin
start: 0x1620000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16211E0]
- name: segment_01622000
type: bin
start: 0x1622000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16231E0]
- name: segment_01624000
type: bin
start: 0x1624000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16251D0]
- name: segment_01626000
type: bin
start: 0x1626000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1627180]
- name: segment_01628000
type: bin
start: 0x1628000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1629140]
- name: segment_0162A000
type: bin
start: 0x162A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x162B160]
- name: segment_0162C000
type: bin
start: 0x162C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x162D140]
- name: segment_0162E000
type: bin
start: 0x162E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x162F140]
- name: segment_01630000
type: bin
start: 0x1630000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1631210]
- name: segment_01632000
type: bin
start: 0x1632000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16332A0]
- name: segment_01634000
type: bin
start: 0x1634000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1635290]
- name: segment_01636000
type: bin
start: 0x1636000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1637240]
- name: segment_01638000
type: bin
start: 0x1638000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1639270]
- name: segment_0163A000
type: bin
start: 0x163A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x163B160]
- name: segment_0163C000
type: bin
start: 0x163C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x163D160]
- name: segment_0163E000
type: bin
start: 0x163E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x163F140]
- name: segment_01640000
type: bin
start: 0x1640000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16411B0]
- name: segment_01642000
type: bin
start: 0x1642000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16431B0]
- name: segment_01644000
type: bin
start: 0x1644000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16451C0]
- name: segment_01646000
type: bin
start: 0x1646000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1647160]
- name: segment_01648000
type: bin
start: 0x1648000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16491E0]
- name: segment_0164A000
type: bin
start: 0x164A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x164B240]
- name: segment_0164C000
type: bin
start: 0x164C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x164D270]
- name: segment_0164E000
type: bin
start: 0x164E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x164F1C0]
- name: segment_01650000
type: bin
start: 0x1650000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16511C0]
- name: segment_01652000
type: bin
start: 0x1652000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16531C0]
- name: segment_01654000
type: bin
start: 0x1654000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16551B0]
- name: segment_01656000
type: bin
start: 0x1656000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16571C0]
- name: segment_01658000
type: bin
start: 0x1658000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16591E0]
- name: segment_0165A000
type: bin
start: 0x165A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x165B190]
- name: segment_0165C000
type: bin
start: 0x165C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x165D1B0]
- name: segment_0165E000
type: bin
start: 0x165E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x165F190]
- name: segment_01660000
type: bin
start: 0x1660000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1661190]
- name: segment_01662000
type: bin
start: 0x1662000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1663350]
- name: segment_01664000
type: bin
start: 0x1664000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1665230]
- name: segment_01666000
type: bin
start: 0x1666000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1667230]
- name: segment_01668000
type: bin
start: 0x1668000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1669230]
- name: segment_0166A000
type: bin
start: 0x166A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x166B1C0]
- name: segment_0166C000
type: bin
start: 0x166C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x166D2E0]
- name: segment_0166E000
type: bin
start: 0x166E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x166F1A0]
- name: segment_01670000
type: bin
start: 0x1670000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1671340]
- name: segment_01672000
type: bin
start: 0x1672000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1673140]
- name: segment_01674000
type: bin
start: 0x1674000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1675140]
- name: segment_01676000
type: bin
start: 0x1676000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1677140]
- name: segment_01678000
type: bin
start: 0x1678000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16791C0]
- name: segment_0167A000
type: bin
start: 0x167A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x167B190]
- name: segment_0167C000
type: bin
start: 0x167C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x167D170]
- name: segment_0167E000
type: bin
start: 0x167E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x167F140]
- name: segment_01680000
type: bin
start: 0x1680000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1681120]
- name: segment_01682000
type: bin
start: 0x1682000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1683170]
- name: segment_01684000
type: bin
start: 0x1684000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1685170]
- name: segment_01686000
type: bin
start: 0x1686000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16871B0]
- name: segment_01688000
type: bin
start: 0x1688000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16891E0]
- name: segment_0168A000
type: bin
start: 0x168A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x168B220]
- name: segment_0168C000
type: bin
start: 0x168C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x168D220]
- name: segment_0168E000
type: bin
start: 0x168E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x168F1C0]
- name: segment_01690000
type: bin
start: 0x1690000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16911B0]
- name: segment_01692000
type: bin
start: 0x1692000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16931C0]
- name: segment_01694000
type: bin
start: 0x1694000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16951A0]
- name: segment_01696000
type: bin
start: 0x1696000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1697160]
- name: segment_01698000
type: bin
start: 0x1698000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1699150]
- name: segment_0169A000
type: bin
start: 0x169A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x169B160]
- name: segment_0169C000
type: bin
start: 0x169C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x169D190]
- name: segment_0169E000
type: bin
start: 0x169E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x169F1B0]
- name: segment_016A0000
type: bin
start: 0x16A0000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16A11B0]
- name: segment_016A2000
type: bin
start: 0x16A2000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16A31B0]
- name: segment_016A4000
type: bin
start: 0x16A4000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16A5130]
- name: segment_016A6000
type: bin
start: 0x16A6000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16A7120]
- name: segment_016A8000
type: bin
start: 0x16A8000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16A9170]
- name: segment_016AA000
type: bin
start: 0x16AA000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16AB160]
- name: segment_016AC000
type: bin
start: 0x16AC000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16AD0D0]
- name: segment_016AE000
type: bin
start: 0x16AE000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16AF140]
- name: segment_016B0000
type: bin
start: 0x16B0000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16B10E0]
- name: segment_016B2000
type: bin
start: 0x16B2000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16B30D0]
- name: segment_016B4000
type: bin
start: 0x16B4000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16B5210]
- name: segment_016B6000
type: bin
start: 0x16B6000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16B7230]
- name: segment_016B8000
type: bin
start: 0x16B8000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16B9230]
- name: segment_016BA000
type: bin
start: 0x16BA000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16BB1E0]
- name: segment_016BC000
type: bin
start: 0x16BC000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16BD210]
- name: segment_016BE000
type: bin
start: 0x16BE000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16BF220]
- name: segment_016C0000
type: bin
start: 0x16C0000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16C11C0]
- name: segment_016C2000
type: bin
start: 0x16C2000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16C31D0]
- name: segment_016C4000
type: bin
start: 0x16C4000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16C5210]
- name: segment_016C6000
type: bin
start: 0x16C6000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16C7150]
- name: segment_016C8000
type: bin
start: 0x16C8000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16C9170]
- name: segment_016CA000
type: bin
start: 0x16CA000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16CB170]
- name: segment_016CC000
type: bin
start: 0x16CC000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16CD1E0]
- name: segment_016CE000
type: bin
start: 0x16CE000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16CF200]
- name: segment_016D0000
type: bin
start: 0x16D0000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16D1280]
- name: segment_016D2000
type: bin
start: 0x16D2000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16D2E90]
- name: segment_016D3000
type: bin
start: 0x16D3000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16D3B30]
- name: segment_016D4000
type: bin
start: 0x16D4000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16D4D20]
- name: segment_016D5000
type: bin
start: 0x16D5000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16D5E80]
- name: segment_016D6000
type: bin
start: 0x16D6000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16D6E80]
- name: segment_016D7000
type: bin
start: 0x16D7000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16D7E80]
- name: segment_016D8000
type: bin
start: 0x16D8000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16D8E80]
- name: segment_016D9000
type: bin
start: 0x16D9000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16D9E80]
- name: segment_016DA000
type: bin
start: 0x16DA000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16DAE80]
- name: segment_016DB000
type: bin
start: 0x16DB000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16DBE60]
- name: segment_016DC000
type: bin
start: 0x16DC000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16DCE70]
- name: segment_016DD000
type: bin
start: 0x16DD000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16DDD30]
- name: segment_016DE000
type: bin
start: 0x16DE000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16DF070]
- name: segment_016E0000
type: bin
start: 0x16E0000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16E10D0]
- name: segment_016E2000
type: bin
start: 0x16E2000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16E30D0]
- name: segment_016E4000
type: bin
start: 0x16E4000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16E50D0]
- name: segment_016E6000
type: bin
start: 0x16E6000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16E7270]
- name: segment_016E8000
type: bin
start: 0x16E8000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16E9370]
- name: segment_016EA000
type: bin
start: 0x16EA000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16EB250]
- name: segment_016EC000
type: bin
start: 0x16EC000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16ED1B0]
- name: segment_016EE000
type: bin
start: 0x16EE000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16EF100]
- name: segment_016F0000
type: bin
start: 0x16F0000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16F1100]
- name: segment_016F2000
type: bin
start: 0x16F2000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16F3100]
- name: segment_016F4000
type: bin
start: 0x16F4000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16F50F0]
- name: segment_016F6000
type: bin
start: 0x16F6000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16F71C0]
- name: segment_016F8000
type: bin
start: 0x16F8000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16F91D0]
- name: segment_016FA000
type: bin
start: 0x16FA000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16FB190]
- name: segment_016FC000
type: bin
start: 0x16FC000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16FD150]
- name: segment_016FE000
type: bin
start: 0x16FE000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x16FF1E0]
- name: segment_01700000
type: bin
start: 0x1700000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1701160]
- name: segment_01702000
type: bin
start: 0x1702000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1702FA0]
- name: segment_01703000
type: bin
start: 0x1703000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1703F10]
- name: segment_01704000
type: bin
start: 0x1704000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1704FB0]
- name: segment_01705000
type: bin
start: 0x1705000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1705FC0]
- name: segment_01706000
type: bin
start: 0x1706000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1707050]
- name: segment_01708000
type: bin
start: 0x1708000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1709000]
- name: segment_01709000
type: bin
start: 0x1709000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x170A000]
- name: segment_0170A000
type: bin
start: 0x170A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x170AFA0]
- name: segment_0170B000
type: bin
start: 0x170B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x170C050]
- name: segment_0170D000
type: bin
start: 0x170D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x170E140]
- name: segment_0170F000
type: bin
start: 0x170F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x170FFE0]
- name: segment_01710000
type: bin
start: 0x1710000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1710FC0]
- name: segment_01711000
type: bin
start: 0x1711000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1711FF0]
- name: segment_01712000
type: bin
start: 0x1712000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1712F10]
- name: segment_01713000
type: bin
start: 0x1713000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1713E70]
- name: segment_01714000
type: bin
start: 0x1714000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1714EB0]
- name: segment_01715000
type: bin
start: 0x1715000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1715E00]
- name: segment_01716000
type: bin
start: 0x1716000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1716ED0]
- name: segment_01717000
type: bin
start: 0x1717000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1717EE0]
- name: segment_01718000
type: bin
start: 0x1718000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1718F50]
- name: segment_01719000
type: bin
start: 0x1719000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1719F30]
- name: segment_0171A000
type: bin
start: 0x171A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x171AE70]
- name: segment_0171B000
type: bin
start: 0x171B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x171BE50]
- name: segment_0171C000
type: bin
start: 0x171C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x171CF20]
- name: segment_0171D000
type: bin
start: 0x171D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x171DF30]
- name: segment_0171E000
type: bin
start: 0x171E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x171EE70]
- name: segment_0171F000
type: bin
start: 0x171F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x171FFA0]
- name: segment_01720000
type: bin
start: 0x1720000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1720F30]
- name: segment_01721000
type: bin
start: 0x1721000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1721E70]
- name: segment_01722000
type: bin
start: 0x1722000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1722F30]
- name: segment_01723000
type: bin
start: 0x1723000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1723F30]
- name: segment_01724000
type: bin
start: 0x1724000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1724E70]
- name: segment_01725000
type: bin
start: 0x1725000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1725E50]
- name: segment_01726000
type: bin
start: 0x1726000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1726F40]
- name: segment_01727000
type: bin
start: 0x1727000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1727E60]
- name: segment_01728000
type: bin
start: 0x1728000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1728E50]
- name: segment_01729000
type: bin
start: 0x1729000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1729F00]
- name: segment_0172A000
type: bin
start: 0x172A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x172AF60]
- name: segment_0172B000
type: bin
start: 0x172B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x172BE50]
- name: segment_0172C000
type: bin
start: 0x172C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x172CE60]
- name: segment_0172D000
type: bin
start: 0x172D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x172DEE0]
- name: segment_0172E000
type: bin
start: 0x172E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x172EF40]
- name: segment_0172F000
type: bin
start: 0x172F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x172FF40]
- name: segment_01730000
type: bin
start: 0x1730000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1730E60]
- name: segment_01731000
type: bin
start: 0x1731000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1731F40]
- name: segment_01732000
type: bin
start: 0x1732000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1732D60]
- name: segment_01733000
type: bin
start: 0x1733000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1733E70]
- name: segment_01734000
type: bin
start: 0x1734000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1734CC0]
- name: segment_01735000
type: bin
start: 0x1735000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1735C20]
- name: segment_01736000
type: bin
start: 0x1736000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1736C00]
- name: segment_01737000
type: bin
start: 0x1737000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x17380F0]
- name: segment_01739000
type: bin
start: 0x1739000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1739F30]
- name: segment_0173A000
type: bin
start: 0x173A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x173AD10]
- name: segment_0173B000
type: bin
start: 0x173B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x173BDF0]
- name: segment_0173C000
type: bin
start: 0x173C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x173CDD0]
- name: segment_0173D000
type: bin
start: 0x173D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x173DDF0]
- name: segment_0173E000
type: bin
start: 0x173E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x173F0B0]
- name: segment_01740000
type: bin
start: 0x1740000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1740F20]
- name: segment_01741000
type: bin
start: 0x1741000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1741F70]
- name: segment_01742000
type: bin
start: 0x1742000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1742E90]
- name: segment_01743000
type: bin
start: 0x1743000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1743E20]
- name: segment_01744000
type: bin
start: 0x1744000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1745010]
- name: segment_01746000
type: bin
start: 0x1746000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1746D00]
- name: segment_01747000
type: bin
start: 0x1747000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1747FA0]
- name: segment_01748000
type: bin
start: 0x1748000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1748CA0]
- name: segment_01749000
type: bin
start: 0x1749000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1749B50]
- name: segment_0174A000
type: bin
start: 0x174A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x174AD90]
- name: segment_0174B000
type: bin
start: 0x174B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x174BE80]
- name: segment_0174C000
type: bin
start: 0x174C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x174CDB0]
- name: segment_0174D000
type: bin
start: 0x174D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x174DDA0]
- name: segment_0174E000
type: bin
start: 0x174E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x174EE30]
- name: segment_0174F000
type: bin
start: 0x174F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1750070]
- name: segment_01751000
type: bin
start: 0x1751000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1751F40]
- name: segment_01752000
type: bin
start: 0x1752000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x17530A0]
- name: segment_01754000
type: bin
start: 0x1754000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1754BD0]
- name: segment_01755000
type: bin
start: 0x1755000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1755BD0]
- name: segment_01756000
type: bin
start: 0x1756000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1756B50]
- name: segment_01757000
type: bin
start: 0x1757000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1757CF0]
- name: segment_01758000
type: bin
start: 0x1758000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1758CA0]
- name: segment_01759000
type: bin
start: 0x1759000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1759D20]
- name: segment_0175A000
type: bin
start: 0x175A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x175AC30]
- name: segment_0175B000
type: bin
start: 0x175B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x175BC30]
- name: segment_0175C000
type: bin
start: 0x175C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x175CC60]
- name: segment_0175D000
type: bin
start: 0x175D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x175DC60]
- name: segment_0175E000
type: bin
start: 0x175E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x175EC10]
- name: segment_0175F000
type: bin
start: 0x175F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x175FC10]
- name: segment_01760000
type: bin
start: 0x1760000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1760D90]
- name: segment_01761000
type: bin
start: 0x1761000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1761D90]
- name: segment_01762000
type: bin
start: 0x1762000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1762D60]
- name: segment_01763000
type: bin
start: 0x1763000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1763D70]
- name: segment_01764000
type: bin
start: 0x1764000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1764BC0]
- name: segment_01765000
type: bin
start: 0x1765000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1765BC0]
- name: segment_01766000
type: bin
start: 0x1766000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1766E40]
- name: segment_01767000
type: bin
start: 0x1767000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x17680D0]
- name: segment_01769000
type: bin
start: 0x1769000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1769D20]
- name: segment_0176A000
type: bin
start: 0x176A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x176B2D0]
- name: segment_0176C000
type: bin
start: 0x176C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x176CED0]
- name: segment_0176D000
type: bin
start: 0x176D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x176DB70]
- name: segment_0176E000
type: bin
start: 0x176E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x176EF80]
- name: segment_0176F000
type: bin
start: 0x176F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x176FC50]
- name: segment_01770000
type: bin
start: 0x1770000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1770B50]
- name: segment_01771000
type: bin
start: 0x1771000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1771CE0]
- name: segment_01772000
type: bin
start: 0x1772000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x17729E0]
- name: segment_01773000
type: bin
start: 0x1773000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1773D00]
- name: segment_01774000
type: bin
start: 0x1774000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1774D00]
- name: segment_01775000
type: bin
start: 0x1775000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1775FF0]
- name: segment_01776000
type: bin
start: 0x1776000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1776F70]
- name: segment_01777000
type: bin
start: 0x1777000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x17781B0]
- name: segment_01779000
type: bin
start: 0x1779000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1779D00]
- name: segment_0177A000
type: bin
start: 0x177A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x177AC00]
- name: segment_0177B000
type: bin
start: 0x177B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x177BE50]
- name: segment_0177C000
type: bin
start: 0x177C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x177CCB0]
- name: segment_0177D000
type: bin
start: 0x177D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x177DBA0]
- name: segment_0177E000
type: bin
start: 0x177E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x177EEF0]
- name: segment_0177F000
type: bin
start: 0x177F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x177FC80]
- name: segment_01780000
type: bin
start: 0x1780000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1780CD0]
- name: segment_01781000
type: bin
start: 0x1781000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1781E70]
- name: segment_01782000
type: bin
start: 0x1782000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1782C30]
- name: segment_01783000
type: bin
start: 0x1783000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1783D70]
- name: segment_01784000
type: bin
start: 0x1784000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1784F30]
- name: segment_01785000
type: bin
start: 0x1785000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1785EC0]
- name: segment_01786000
type: bin
start: 0x1786000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1786BD0]
- name: segment_01787000
type: bin
start: 0x1787000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1787BC0]
- name: segment_01788000
type: bin
start: 0x1788000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1788D60]
- name: segment_01789000
type: bin
start: 0x1789000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1789CE0]
- name: segment_0178A000
type: bin
start: 0x178A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x178AD50]
- name: segment_0178B000
type: bin
start: 0x178B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x178BD60]
- name: segment_0178C000
type: bin
start: 0x178C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x178CF00]
- name: segment_0178D000
type: bin
start: 0x178D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x178DF40]
- name: segment_0178E000
type: bin
start: 0x178E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x178EC10]
- name: segment_0178F000
type: bin
start: 0x178F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x178FB90]
- name: segment_01790000
type: bin
start: 0x1790000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1790C70]
- name: segment_01791000
type: bin
start: 0x1791000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1791B90]
- name: segment_01792000
type: bin
start: 0x1792000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1792D60]
- name: segment_01793000
type: bin
start: 0x1793000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1793E50]
- name: segment_01794000
type: bin
start: 0x1794000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1794C80]
- name: segment_01795000
type: bin
start: 0x1795000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1795D10]
- name: segment_01796000
type: bin
start: 0x1796000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1796D80]
- name: segment_01797000
type: bin
start: 0x1797000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1797CD0]
- name: segment_01798000
type: bin
start: 0x1798000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x17990B0]
- name: segment_0179A000
type: bin
start: 0x179A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x179AF10]
- name: segment_0179B000
type: bin
start: 0x179B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x179BE80]
- name: segment_0179C000
type: bin
start: 0x179C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x179D040]
- name: segment_0179E000
type: bin
start: 0x179E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x179E2C0]
- name: segment_0179F000
type: bin
start: 0x179F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x17A0590]
- name: segment_017A1000
type: bin
start: 0x17A1000
# vram:
+ compress: False
+ align: 0x1000
+ - [0x1829880]
- name: segment_0182A000
type: bin
start: 0x182A000
# vram:
+ compress: False
+ align: 0x1000
+ - [0x186E880]
- name: segment_0186F000
type: bin
start: 0x186F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1870860]
- name: segment_01871000
type: bin
start: 0x1871000
# vram:
+ compress: False
+ align: 0x1000
+ - [0x187FFA0]
- name: segment_01880000
type: bin
start: 0x1880000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18830A0]
- name: segment_01884000
type: bin
start: 0x1884000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18876C0]
- name: segment_01888000
type: bin
start: 0x1888000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x188B0A0]
- name: segment_0188C000
type: bin
start: 0x188C000
# vram:
+ compress: False
+ align: 0x1000
+ - [0x188C180]
- name: segment_0188D000
type: bin
start: 0x188D000
# vram:
+ compress: False
+ align: 0x1000
+ - [0x188D180]
- name: segment_0188E000
type: bin
start: 0x188E000
# vram:
+ compress: False
+ align: 0x1000
+ - [0x188E180]
- name: segment_0188F000
type: bin
start: 0x188F000
# vram:
+ compress: False
+ align: 0x1000
+ - [0x188F180]
- name: segment_01890000
type: bin
start: 0x1890000
# vram:
+ compress: False
+ align: 0x1000
+ - [0x1890180]
- name: segment_01891000
type: bin
start: 0x1891000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1891800]
- name: segment_01892000
type: bin
start: 0x1892000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1892800]
- name: segment_01893000
type: bin
start: 0x1893000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1893800]
- name: segment_01894000
type: bin
start: 0x1894000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1894800]
- name: segment_01895000
type: bin
start: 0x1895000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1895800]
- name: segment_01896000
type: bin
start: 0x1896000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1896800]
- name: segment_01897000
type: bin
start: 0x1897000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1897400]
- name: segment_01898000
type: bin
start: 0x1898000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1898400]
- name: segment_01899000
type: bin
start: 0x1899000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1899200]
- name: segment_0189A000
type: bin
start: 0x189A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x189A200]
- name: segment_0189B000
type: bin
start: 0x189B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x189B800]
- name: segment_0189C000
type: bin
start: 0x189C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x189C800]
- name: segment_0189D000
type: bin
start: 0x189D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x189D800]
- name: segment_0189E000
type: bin
start: 0x189E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x189E800]
- name: segment_0189F000
type: bin
start: 0x189F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x189F800]
- name: segment_018A0000
type: bin
start: 0x18A0000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18A0800]
- name: segment_018A1000
type: bin
start: 0x18A1000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18A1400]
- name: segment_018A2000
type: bin
start: 0x18A2000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18A2400]
- name: segment_018A3000
type: bin
start: 0x18A3000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18A3200]
- name: segment_018A4000
type: bin
start: 0x18A4000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18A4200]
- name: segment_018A5000
type: bin
start: 0x18A5000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18A5800]
- name: segment_018A6000
type: bin
start: 0x18A6000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18A6800]
- name: segment_018A7000
type: bin
start: 0x18A7000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18A7800]
- name: segment_018A8000
type: bin
start: 0x18A8000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18A8800]
- name: segment_018A9000
type: bin
start: 0x18A9000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18A9800]
- name: segment_018AA000
type: bin
start: 0x18AA000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18AA800]
- name: segment_018AB000
type: bin
start: 0x18AB000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18AB020]
- name: segment_018AC000
type: bin
start: 0x18AC000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18AC020]
- name: segment_018AD000
type: bin
start: 0x18AD000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18AD020]
- name: segment_018AE000
type: bin
start: 0x18AE000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18AE020]
- name: segment_018AF000
type: bin
start: 0x18AF000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18AF800]
- name: segment_018B0000
type: bin
start: 0x18B0000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18B0800]
- name: segment_018B1000
type: bin
start: 0x18B1000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18B1800]
- name: segment_018B2000
type: bin
start: 0x18B2000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18B2800]
- name: segment_018B3000
type: bin
start: 0x18B3000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18B3400]
- name: segment_018B4000
type: bin
start: 0x18B4000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18B4100]
- name: segment_018B5000
type: bin
start: 0x18B5000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18B5400]
- name: segment_018B6000
type: bin
start: 0x18B6000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18B6400]
- name: segment_018B7000
type: bin
start: 0x18B7000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18B7400]
- name: segment_018B8000
type: bin
start: 0x18B8000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18B8800]
- name: segment_018B9000
type: bin
start: 0x18B9000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18B9400]
- name: segment_018BA000
type: bin
start: 0x18BA000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18BA200]
- name: segment_018BB000
type: bin
start: 0x18BB000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18BB200]
- name: segment_018BC000
type: bin
start: 0x18BC000
# vram:
+ compress: False
+ align: 0x1000
+ - [0x18C3410]
- name: segment_018C4000
type: bin
start: 0x18C4000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18C6200]
- name: segment_018C7000
type: bin
start: 0x18C7000
# vram:
+ compress: False
+ align: 0x1000
+ - [0x18C7090]
- name: segment_018C8000
type: bin
start: 0x18C8000
# vram:
+ compress: False
+ align: 0x1000
+ - [0x18C8050]
- name: segment_018C9000
type: bin
start: 0x18C9000
# vram:
+ compress: False
+ align: 0x1000
+ - [0x18C9080]
- name: segment_018CA000
type: bin
start: 0x18CA000
# vram:
+ compress: False
+ align: 0x1000
+ - [0x18CA050]
- name: segment_018CB000
type: bin
start: 0x18CB000
# vram:
+ compress: False
+ align: 0x1000
+ - [0x18CB050]
- name: segment_018CC000
type: bin
start: 0x18CC000
# vram:
+ compress: False
+ align: 0x1000
+ - [0x18CC080]
- name: segment_018CD000
type: bin
start: 0x18CD000
# vram:
+ compress: False
+ align: 0x1000
+ - [0x18CD030]
- name: segment_018CE000
type: bin
start: 0x18CE000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18CE0B0]
- name: segment_018CF000
type: bin
start: 0x18CF000
# vram:
+ compress: False
+ align: 0x1000
+ - [0x18CF080]
- name: segment_018D0000
type: bin
start: 0x18D0000
# vram:
+ compress: False
+ align: 0x1000
+ - [0x18D0050]
- name: segment_018D1000
type: bin
start: 0x18D1000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18D1090]
- name: segment_018D2000
type: bin
start: 0x18D2000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18D2090]
- name: segment_018D3000
type: bin
start: 0x18D3000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18D3080]
- name: segment_018D4000
type: bin
start: 0x18D4000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18D4090]
- name: segment_018D5000
type: bin
start: 0x18D5000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18D5090]
- name: segment_018D6000
type: bin
start: 0x18D6000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18D6080]
- name: segment_018D7000
type: bin
start: 0x18D7000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18D70B0]
- name: segment_018D8000
type: bin
start: 0x18D8000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18D80B0]
- name: segment_018D9000
type: bin
start: 0x18D9000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18D90B0]
- name: segment_018DA000
type: bin
start: 0x18DA000
# vram:
+ compress: False
+ align: 0x1000
+ - [0x18DA050]
- name: segment_018DB000
type: bin
start: 0x18DB000
# vram:
+ compress: False
+ align: 0x1000
+ - [0x18DB050]
- name: segment_018DC000
type: bin
start: 0x18DC000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18DC0C0]
- name: segment_018DD000
type: bin
start: 0x18DD000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18DD0B0]
- name: segment_018DE000
type: bin
start: 0x18DE000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18DE070]
- name: segment_018DF000
type: bin
start: 0x18DF000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18DF070]
- name: segment_018E0000
type: bin
start: 0x18E0000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18E00A0]
- name: segment_018E1000
type: bin
start: 0x18E1000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18E1070]
- name: segment_018E2000
type: bin
start: 0x18E2000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18E2050]
- name: segment_018E3000
type: bin
start: 0x18E3000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18E3050]
- name: segment_018E4000
type: bin
start: 0x18E4000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18E4050]
- name: segment_018E5000
type: bin
start: 0x18E5000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18E5050]
- name: segment_018E6000
type: bin
start: 0x18E6000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18E6050]
- name: segment_018E7000
type: bin
start: 0x18E7000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18E7080]
- name: segment_018E8000
type: bin
start: 0x18E8000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18E8070]
- name: segment_018E9000
type: bin
start: 0x18E9000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18E9070]
- name: segment_018EA000
type: bin
start: 0x18EA000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18EA0B0]
- name: segment_018EB000
type: bin
start: 0x18EB000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18EB110]
- name: segment_018EC000
type: bin
start: 0x18EC000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18EC0C0]
- name: segment_018ED000
type: bin
start: 0x18ED000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18ED030]
- name: segment_018EE000
type: bin
start: 0x18EE000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18EE030]
- name: segment_018EF000
type: bin
start: 0x18EF000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18EF030]
- name: segment_018F0000
type: bin
start: 0x18F0000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18F0060]
- name: segment_018F1000
type: bin
start: 0x18F1000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18F1020]
- name: segment_018F2000
type: bin
start: 0x18F2000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18F2050]
- name: segment_018F3000
type: bin
start: 0x18F3000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18F3050]
- name: segment_018F4000
type: bin
start: 0x18F4000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18F4050]
- name: segment_018F5000
type: bin
start: 0x18F5000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18F5050]
- name: segment_018F6000
type: bin
start: 0x18F6000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18F6050]
- name: segment_018F7000
type: bin
start: 0x18F7000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18F7060]
- name: segment_018F8000
type: bin
start: 0x18F8000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18F8050]
- name: segment_018F9000
type: bin
start: 0x18F9000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18F9020]
- name: segment_018FA000
type: bin
start: 0x18FA000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18FA030]
- name: segment_018FB000
type: bin
start: 0x18FB000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18FB060]
- name: segment_018FC000
type: bin
start: 0x18FC000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18FC060]
- name: segment_018FD000
type: bin
start: 0x18FD000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18FD020]
- name: segment_018FE000
type: bin
start: 0x18FE000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18FE030]
- name: segment_018FF000
type: bin
start: 0x18FF000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x18FF030]
- name: segment_01900000
type: bin
start: 0x1900000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1900030]
- name: segment_01901000
type: bin
start: 0x1901000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1901030]
- name: segment_01902000
type: bin
start: 0x1902000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1902030]
- name: segment_01903000
type: bin
start: 0x1903000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1903030]
- name: segment_01904000
type: bin
start: 0x1904000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1904020]
- name: segment_01905000
type: bin
start: 0x1905000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1905030]
- name: segment_01906000
type: bin
start: 0x1906000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1906180]
- name: anime_model_1_static
type: bin
start: 0x1907000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1907010]
- name: anime_model_2_static
type: bin
start: 0x1908000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1908010]
- name: anime_model_3_static
type: bin
start: 0x1909000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1909010]
- name: anime_model_4_static
type: bin
start: 0x190A000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x190A010]
- name: anime_model_5_static
type: bin
start: 0x190B000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x190B010]
- name: anime_model_6_static
type: bin
start: 0x190C000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x190C010]
- name: anime_texture_1_static
type: bin
start: 0x190D000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x190D010]
- name: anime_texture_2_static
type: bin
start: 0x190E000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x190E010]
- name: anime_texture_3_static
type: bin
start: 0x190F000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x190F010]
- name: anime_texture_4_static
type: bin
start: 0x1910000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1910010]
- name: anime_texture_5_static
type: bin
start: 0x1911000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1911010]
- name: anime_texture_6_static
type: bin
start: 0x1912000
# vram:
+ compress: True
+ align: 0x1000
+ - [0x1912010]
- name: softsprite_matrix_static
type: bin
start: 0x1913000
# vram:
+ compress: True
+ align: 0x1000
- - [0x1914000]
+ - [0x1913040]
diff --git a/yamls/jp/boot.yaml b/yamls/jp/boot.yaml
index 7f7f9cf..863e3c2 100644
--- a/yamls/jp/boot.yaml
+++ b/yamls/jp/boot.yaml
@@ -2,7 +2,7 @@
type: code
start: 0x001060
vram: 0x80025C60
- follows_vram: entry
+ follows_vram: makerom
bss_size: 0x5D50
subsegments:
- [0x001060, c, boot/boot_main]
@@ -239,7 +239,7 @@
vram: 0x80044690
follows_vram: boot
subsegments:
- - [0x019D40, data, dmadata/dmadata]
+ - [0x019D40, .data, dmadata/dmadata]
- name: segment_027130
type: bin
diff --git a/yamls/jp/code.yaml b/yamls/jp/code.yaml
index acc629c..0a69518 100644
--- a/yamls/jp/code.yaml
+++ b/yamls/jp/code.yaml
@@ -3,6 +3,7 @@
start: 0x675720
vram: 0x80051A80
follows_vram: dmadata
+ compress: True
bss_size: 0x36C90
subsegments:
- [0x675720, asm, code/c_keyframe]
diff --git a/yamls/jp/header.yaml b/yamls/jp/header.yaml
index 196ac90..76f2fdd 100644
--- a/yamls/jp/header.yaml
+++ b/yamls/jp/header.yaml
@@ -50,5 +50,6 @@ options:
libultra_symbols: True
hardware_regs: True
asm_emit_size_directive: False
+ segment_end_before_align: True
segments:
diff --git a/yamls/jp/makerom.yaml b/yamls/jp/makerom.yaml
index c7d94c4..9c8d417 100644
--- a/yamls/jp/makerom.yaml
+++ b/yamls/jp/makerom.yaml
@@ -1,14 +1,8 @@
- - name: header
- type: header
- start: 0x0
-
- - name: ipl3
- type: bin
- start: 0x40
-
- - name: entry
+ - name: makerom
type: code
- start: 0x001000
- vram: 0x80025C00
+ start: 0x000000
+ vram: 0x80024C00
subsegments:
- - [0x1000, hasm, entry/entry]
+ - [0x000000, header, makerom/header]
+ - [0x000040, bin, makerom/ipl3]
+ - [0x001000, hasm, makerom/entry]
diff --git a/yamls/jp/overlays.yaml b/yamls/jp/overlays.yaml
index 2d58b53..47e4c4a 100644
--- a/yamls/jp/overlays.yaml
+++ b/yamls/jp/overlays.yaml
@@ -2,6 +2,7 @@
type: code
start: 0x73F4D0
vram: 0x80800000
+ compress: True
bss_size: 0x0
subsegments:
- [0x73F4D0, asm, overlays/ovl_0073F4D0]
@@ -12,6 +13,7 @@
start: 0x741A40
vram: 0x80802570
follows_vram: ovl_0073F4D0
+ compress: True
subsegments:
- [0x741A40, data, overlays/ovl_0073F4D0_reloc]
@@ -20,6 +22,7 @@
start: 0x741EA0
vram: 0x808029D0
follows_vram: ovl_0073F4D0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x741EA0, asm, overlays/ovl_00741EA0]
@@ -28,6 +31,7 @@
start: 0x741F80
vram: 0x80802AB0
follows_vram: ovl_00741EA0
+ compress: True
subsegments:
- [0x741F80, data, overlays/ovl_00741EA0_reloc]
@@ -36,6 +40,7 @@
start: 0x741FB0
vram: 0x80802AE0
follows_vram: ovl_00741EA0_reloc
+ compress: True
bss_size: 0xF0
subsegments:
- [0x741FB0, asm, overlays/ovl_00741FB0]
@@ -47,6 +52,7 @@
start: 0x743950
vram: 0x80804570
follows_vram: ovl_00741FB0
+ compress: True
subsegments:
- [0x743950, data, overlays/ovl_00741FB0_reloc]
@@ -55,6 +61,7 @@
start: 0x743B70
vram: 0x80804790
follows_vram: ovl_00741FB0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x743B70, asm, overlays/ovl_00743B70]
@@ -63,6 +70,7 @@
start: 0x743CA0
vram: 0x808048C0
follows_vram: ovl_00743B70
+ compress: True
subsegments:
- [0x743CA0, data, overlays/ovl_00743B70_reloc]
@@ -71,6 +79,7 @@
start: 0x743CD0
vram: 0x808048F0
follows_vram: ovl_00743B70_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x743CD0, asm, overlays/ovl_00743CD0]
@@ -79,6 +88,7 @@
start: 0x743FE0
vram: 0x80804C00
follows_vram: ovl_00743CD0
+ compress: True
subsegments:
- [0x743FE0, data, overlays/ovl_00743CD0_reloc]
@@ -87,6 +97,7 @@
start: 0x744020
vram: 0x80804C40
follows_vram: ovl_00743CD0_reloc
+ compress: True
bss_size: 0x20170
subsegments:
- [0x744020, asm, overlays/ovl_00744020]
@@ -98,6 +109,7 @@
start: 0x747940
vram: 0x808286D0
follows_vram: ovl_00744020
+ compress: True
subsegments:
- [0x747940, data, overlays/ovl_00744020_reloc]
@@ -106,6 +118,7 @@
start: 0x747AA0
vram: 0x80828830
follows_vram: ovl_00744020_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x747AA0, asm, overlays/ovl_00747AA0]
@@ -116,6 +129,7 @@
start: 0x7485F0
vram: 0x80829380
follows_vram: ovl_00747AA0
+ compress: True
subsegments:
- [0x7485F0, data, overlays/ovl_00747AA0_reloc]
@@ -124,6 +138,7 @@
start: 0x7486E0
vram: 0x80829470
follows_vram: ovl_00747AA0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x7486E0, asm, overlays/ovl_007486E0]
@@ -134,6 +149,7 @@
start: 0x749200
vram: 0x80829F90
follows_vram: ovl_007486E0
+ compress: True
subsegments:
- [0x749200, data, overlays/ovl_007486E0_reloc]
@@ -142,6 +158,7 @@
start: 0x7492E0
vram: 0x8082A070
follows_vram: ovl_007486E0_reloc
+ compress: True
bss_size: 0x6370
subsegments:
- [0x7492E0, asm, overlays/ovl_007492E0]
@@ -153,6 +170,7 @@
start: 0x771900
vram: 0x80858A00
follows_vram: ovl_007492E0
+ compress: True
subsegments:
- [0x771900, data, overlays/ovl_007492E0_reloc]
@@ -161,6 +179,7 @@
start: 0x7745B0
vram: 0x8085B6B0
follows_vram: ovl_007492E0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x7745B0, asm, overlays/ovl_007745B0]
@@ -170,6 +189,7 @@
start: 0x774980
vram: 0x8085BA80
follows_vram: ovl_007745B0
+ compress: True
subsegments:
- [0x774980, data, overlays/ovl_007745B0_reloc]
@@ -178,6 +198,7 @@
start: 0x7749C0
vram: 0x8085BAC0
follows_vram: ovl_007745B0_reloc
+ compress: True
bss_size: 0x10730
subsegments:
- [0x7749C0, asm, overlays/ovl_submenu]
@@ -189,6 +210,7 @@
start: 0x7778B0
vram: 0x8086F0E0
follows_vram: ovl_submenu
+ compress: True
subsegments:
- [0x7778B0, data, overlays/ovl_submenu_reloc]
@@ -197,6 +219,7 @@
start: 0x777AE0
vram: 0x8086F310
follows_vram: ovl_submenu_reloc
+ compress: True
bss_size: 0x120
subsegments:
- [0x777AE0, asm, overlays/ovl_00777AE0]
@@ -208,6 +231,7 @@
start: 0x781D60
vram: 0x808796B0
follows_vram: ovl_00777AE0
+ compress: True
subsegments:
- [0x781D60, data, overlays/ovl_00777AE0_reloc]
@@ -216,6 +240,7 @@
start: 0x7829E0
vram: 0x8087A330
follows_vram: ovl_00777AE0_reloc
+ compress: True
bss_size: 0x300
subsegments:
- [0x7829E0, asm, overlays/ovl_007829E0]
@@ -227,6 +252,7 @@
start: 0x784DE0
vram: 0x8087CA30
follows_vram: ovl_007829E0
+ compress: True
subsegments:
- [0x784DE0, data, overlays/ovl_007829E0_reloc]
@@ -235,6 +261,7 @@
start: 0x784FC0
vram: 0x8087CC10
follows_vram: ovl_007829E0_reloc
+ compress: True
bss_size: 0x130
subsegments:
- [0x784FC0, asm, overlays/ovl_00784FC0]
@@ -246,6 +273,7 @@
start: 0x785690
vram: 0x8087D410
follows_vram: ovl_00784FC0
+ compress: True
subsegments:
- [0x785690, data, overlays/ovl_00784FC0_reloc]
@@ -254,6 +282,7 @@
start: 0x785700
vram: 0x8087D480
follows_vram: ovl_00784FC0_reloc
+ compress: True
bss_size: 0x5E0
subsegments:
- [0x785700, asm, overlays/ovl_00785700]
@@ -265,6 +294,7 @@
start: 0x7898C0
vram: 0x80881C20
follows_vram: ovl_00785700
+ compress: True
subsegments:
- [0x7898C0, data, overlays/ovl_00785700_reloc]
@@ -273,6 +303,7 @@
start: 0x789B60
vram: 0x80881EC0
follows_vram: ovl_00785700_reloc
+ compress: True
bss_size: 0x10
subsegments:
- [0x789B60, asm, overlays/ovl_00789B60]
@@ -283,6 +314,7 @@
start: 0x78A4F0
vram: 0x80882860
follows_vram: ovl_00789B60
+ compress: True
subsegments:
- [0x78A4F0, data, overlays/ovl_00789B60_reloc]
@@ -291,6 +323,7 @@
start: 0x78A560
vram: 0x808828D0
follows_vram: ovl_00789B60_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x78A560, asm, overlays/ovl_0078A560]
@@ -301,6 +334,7 @@
start: 0x78ADC0
vram: 0x80883130
follows_vram: ovl_0078A560
+ compress: True
subsegments:
- [0x78ADC0, data, overlays/ovl_0078A560_reloc]
@@ -309,6 +343,7 @@
start: 0x78AE30
vram: 0x808831A0
follows_vram: ovl_0078A560_reloc
+ compress: True
bss_size: 0x20
subsegments:
- [0x78AE30, asm, overlays/ovl_0078AE30]
@@ -319,6 +354,7 @@
start: 0x78BEE0
vram: 0x80884270
follows_vram: ovl_0078AE30
+ compress: True
subsegments:
- [0x78BEE0, data, overlays/ovl_0078AE30_reloc]
@@ -327,6 +363,7 @@
start: 0x78BFB0
vram: 0x80884340
follows_vram: ovl_0078AE30_reloc
+ compress: True
bss_size: 0x230
subsegments:
- [0x78BFB0, asm, overlays/ovl_0078BFB0]
@@ -338,6 +375,7 @@
start: 0x78CAD0
vram: 0x80885090
follows_vram: ovl_0078BFB0
+ compress: True
subsegments:
- [0x78CAD0, data, overlays/ovl_0078BFB0_reloc]
@@ -346,6 +384,7 @@
start: 0x78CB80
vram: 0x80885140
follows_vram: ovl_0078BFB0_reloc
+ compress: True
bss_size: 0x30
subsegments:
- [0x78CB80, asm, overlays/ovl_0078CB80]
@@ -357,6 +396,7 @@
start: 0x790530
vram: 0x80888B20
follows_vram: ovl_0078CB80
+ compress: True
subsegments:
- [0x790530, data, overlays/ovl_0078CB80_reloc]
@@ -365,6 +405,7 @@
start: 0x7908A0
vram: 0x80888E90
follows_vram: ovl_0078CB80_reloc
+ compress: True
bss_size: 0xC0
subsegments:
- [0x7908A0, asm, overlays/ovl_007908A0]
@@ -376,6 +417,7 @@
start: 0x792610
vram: 0x8088ACC0
follows_vram: ovl_007908A0
+ compress: True
subsegments:
- [0x792610, data, overlays/ovl_007908A0_reloc]
@@ -384,6 +426,7 @@
start: 0x792700
vram: 0x8088ADB0
follows_vram: ovl_007908A0_reloc
+ compress: True
bss_size: 0x1A0
subsegments:
- [0x792700, asm, overlays/ovl_00792700]
@@ -395,6 +438,7 @@
start: 0x794240
vram: 0x8088CA90
follows_vram: ovl_00792700
+ compress: True
subsegments:
- [0x794240, data, overlays/ovl_00792700_reloc]
@@ -403,6 +447,7 @@
start: 0x794380
vram: 0x8088CBD0
follows_vram: ovl_00792700_reloc
+ compress: True
bss_size: 0x30
subsegments:
- [0x794380, asm, overlays/ovl_00794380]
@@ -413,6 +458,7 @@
start: 0x795290
vram: 0x8088DB10
follows_vram: ovl_00794380
+ compress: True
subsegments:
- [0x795290, data, overlays/ovl_00794380_reloc]
@@ -421,6 +467,7 @@
start: 0x795350
vram: 0x8088DBD0
follows_vram: ovl_00794380_reloc
+ compress: True
bss_size: 0x3F80
subsegments:
- [0x795350, asm, overlays/ovl_00795350]
@@ -432,6 +479,7 @@
start: 0x797870
vram: 0x80894070
follows_vram: ovl_00795350
+ compress: True
subsegments:
- [0x797870, data, overlays/ovl_00795350_reloc]
@@ -440,6 +488,7 @@
start: 0x797A50
vram: 0x80894250
follows_vram: ovl_00795350_reloc
+ compress: True
bss_size: 0x80
subsegments:
- [0x797A50, asm, overlays/ovl_00797A50]
@@ -451,6 +500,7 @@
start: 0x799450
vram: 0x80895CD0
follows_vram: ovl_00797A50
+ compress: True
subsegments:
- [0x799450, data, overlays/ovl_00797A50_reloc]
@@ -459,6 +509,7 @@
start: 0x799580
vram: 0x80895E00
follows_vram: ovl_00797A50_reloc
+ compress: True
bss_size: 0x10
subsegments:
- [0x799580, asm, overlays/ovl_00799580]
@@ -470,6 +521,7 @@
start: 0x79A1E0
vram: 0x80896A70
follows_vram: ovl_00799580
+ compress: True
subsegments:
- [0x79A1E0, data, overlays/ovl_00799580_reloc]
@@ -478,6 +530,7 @@
start: 0x79A290
vram: 0x80896B20
follows_vram: ovl_00799580_reloc
+ compress: True
bss_size: 0x10
subsegments:
- [0x79A290, asm, overlays/ovl_0079A290]
@@ -488,6 +541,7 @@
start: 0x79AFD0
vram: 0x80897870
follows_vram: ovl_0079A290
+ compress: True
subsegments:
- [0x79AFD0, data, overlays/ovl_0079A290_reloc]
@@ -496,6 +550,7 @@
start: 0x79B120
vram: 0x808979C0
follows_vram: ovl_0079A290_reloc
+ compress: True
bss_size: 0x30
subsegments:
- [0x79B120, asm, overlays/ovl_0079B120]
@@ -507,6 +562,7 @@
start: 0x79BF10
vram: 0x808987E0
follows_vram: ovl_0079B120
+ compress: True
subsegments:
- [0x79BF10, data, overlays/ovl_0079B120_reloc]
@@ -515,6 +571,7 @@
start: 0x79C020
vram: 0x808988F0
follows_vram: ovl_0079B120_reloc
+ compress: True
bss_size: 0x30
subsegments:
- [0x79C020, asm, overlays/ovl_0079C020]
@@ -526,6 +583,7 @@
start: 0x79D8B0
vram: 0x8089A1B0
follows_vram: ovl_0079C020
+ compress: True
subsegments:
- [0x79D8B0, data, overlays/ovl_0079C020_reloc]
@@ -534,6 +592,7 @@
start: 0x79DA50
vram: 0x8089A350
follows_vram: ovl_0079C020_reloc
+ compress: True
bss_size: 0x10
subsegments:
- [0x79DA50, asm, overlays/ovl_0079DA50]
@@ -544,6 +603,7 @@
start: 0x79E370
vram: 0x8089AC80
follows_vram: ovl_0079DA50
+ compress: True
subsegments:
- [0x79E370, data, overlays/ovl_0079DA50_reloc]
@@ -552,6 +612,7 @@
start: 0x79E430
vram: 0x8089AD40
follows_vram: ovl_0079DA50_reloc
+ compress: True
bss_size: 0x6D80
subsegments:
- [0x79E430, asm, overlays/ovl_0079E430]
@@ -563,6 +624,7 @@
start: 0x79F770
vram: 0x808A2E00
follows_vram: ovl_0079E430
+ compress: True
subsegments:
- [0x79F770, data, overlays/ovl_0079E430_reloc]
@@ -571,6 +633,7 @@
start: 0x79F810
vram: 0x808A2EA0
follows_vram: ovl_0079E430_reloc
+ compress: True
bss_size: 0x10
subsegments:
- [0x79F810, asm, overlays/ovl_0079F810]
@@ -582,6 +645,7 @@
start: 0x7A0F40
vram: 0x808A45E0
follows_vram: ovl_0079F810
+ compress: True
subsegments:
- [0x7A0F40, data, overlays/ovl_0079F810_reloc]
@@ -590,6 +654,7 @@
start: 0x7A10E0
vram: 0x808A4780
follows_vram: ovl_0079F810_reloc
+ compress: True
bss_size: 0x170
subsegments:
- [0x7A10E0, asm, overlays/ovl_007A10E0]
@@ -600,6 +665,7 @@
start: 0x7A2820
vram: 0x808A6030
follows_vram: ovl_007A10E0
+ compress: True
subsegments:
- [0x7A2820, data, overlays/ovl_007A10E0_reloc]
@@ -608,6 +674,7 @@
start: 0x7A28F0
vram: 0x808A6100
follows_vram: ovl_007A10E0_reloc
+ compress: True
bss_size: 0x3120
subsegments:
- [0x7A28F0, asm, overlays/ovl_007A28F0]
@@ -619,6 +686,7 @@
start: 0x7AC200
vram: 0x808B2B30
follows_vram: ovl_007A28F0
+ compress: True
subsegments:
- [0x7AC200, data, overlays/ovl_007A28F0_reloc]
@@ -627,6 +695,7 @@
start: 0x7AC420
vram: 0x808B2D50
follows_vram: ovl_007A28F0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x7AC420, asm, overlays/ovl_player_actor]
@@ -637,6 +706,7 @@
start: 0x7D9BA0
vram: 0x808E04D0
follows_vram: ovl_player_actor
+ compress: True
subsegments:
- [0x7D9BA0, data, overlays/ovl_player_actor_reloc]
@@ -645,6 +715,7 @@
start: 0x7DE050
vram: 0x808E4980
follows_vram: ovl_player_actor_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x7DE050, asm, overlays/ovl_007DE050]
@@ -655,6 +726,7 @@
start: 0x7DF070
vram: 0x808E59A0
follows_vram: ovl_007DE050
+ compress: True
subsegments:
- [0x7DF070, data, overlays/ovl_007DE050_reloc]
@@ -663,6 +735,7 @@
start: 0x7DF180
vram: 0x808E5AB0
follows_vram: ovl_007DE050_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x7DF180, asm, overlays/ovl_007DF180]
@@ -673,6 +746,7 @@
start: 0x7E0780
vram: 0x808E70B0
follows_vram: ovl_007DF180
+ compress: True
subsegments:
- [0x7E0780, data, overlays/ovl_007DF180_reloc]
@@ -681,6 +755,7 @@
start: 0x7E08D0
vram: 0x808E7200
follows_vram: ovl_007DF180_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x7E08D0, asm, overlays/ovl_007E08D0]
@@ -691,6 +766,7 @@
start: 0x7E17F0
vram: 0x808E8120
follows_vram: ovl_007E08D0
+ compress: True
subsegments:
- [0x7E17F0, data, overlays/ovl_007E08D0_reloc]
@@ -699,6 +775,7 @@
start: 0x7E18F0
vram: 0x808E8220
follows_vram: ovl_007E08D0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x7E18F0, asm, overlays/ovl_007E18F0]
@@ -709,6 +786,7 @@
start: 0x7E2380
vram: 0x808E8CB0
follows_vram: ovl_007E18F0
+ compress: True
subsegments:
- [0x7E2380, data, overlays/ovl_007E18F0_reloc]
@@ -717,6 +795,7 @@
start: 0x7E2440
vram: 0x808E8D70
follows_vram: ovl_007E18F0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x7E2440, asm, overlays/ovl_007E2440]
@@ -727,6 +806,7 @@
start: 0x7E30C0
vram: 0x808E99F0
follows_vram: ovl_007E2440
+ compress: True
subsegments:
- [0x7E30C0, data, overlays/ovl_007E2440_reloc]
@@ -735,6 +815,7 @@
start: 0x7E3170
vram: 0x808E9AA0
follows_vram: ovl_007E2440_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x7E3170, asm, overlays/ovl_007E3170]
@@ -745,6 +826,7 @@
start: 0x7E38F0
vram: 0x808EA220
follows_vram: ovl_007E3170
+ compress: True
subsegments:
- [0x7E38F0, data, overlays/ovl_007E3170_reloc]
@@ -753,6 +835,7 @@
start: 0x7E3990
vram: 0x808EA2C0
follows_vram: ovl_007E3170_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x7E3990, asm, overlays/ovl_007E3990]
@@ -763,6 +846,7 @@
start: 0x7E4070
vram: 0x808EA9A0
follows_vram: ovl_007E3990
+ compress: True
subsegments:
- [0x7E4070, data, overlays/ovl_007E3990_reloc]
@@ -771,6 +855,7 @@
start: 0x7E4130
vram: 0x808EAA60
follows_vram: ovl_007E3990_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x7E4130, asm, overlays/ovl_007E4130]
@@ -781,6 +866,7 @@
start: 0x7E4D30
vram: 0x808EB660
follows_vram: ovl_007E4130
+ compress: True
subsegments:
- [0x7E4D30, data, overlays/ovl_007E4130_reloc]
@@ -789,6 +875,7 @@
start: 0x7E4DF0
vram: 0x808EB720
follows_vram: ovl_007E4130_reloc
+ compress: True
bss_size: 0x20
subsegments:
- [0x7E4DF0, asm, overlays/ovl_007E4DF0]
@@ -800,6 +887,7 @@
start: 0x7E55B0
vram: 0x808EBF00
follows_vram: ovl_007E4DF0
+ compress: True
subsegments:
- [0x7E55B0, data, overlays/ovl_007E4DF0_reloc]
@@ -808,6 +896,7 @@
start: 0x7E5640
vram: 0x808EBF90
follows_vram: ovl_007E4DF0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x7E5640, asm, overlays/ovl_007E5640]
@@ -818,6 +907,7 @@
start: 0x7E5850
vram: 0x808EC1A0
follows_vram: ovl_007E5640
+ compress: True
subsegments:
- [0x7E5850, data, overlays/ovl_007E5640_reloc]
@@ -826,6 +916,7 @@
start: 0x7E5880
vram: 0x808EC1D0
follows_vram: ovl_007E5640_reloc
+ compress: True
bss_size: 0x490
subsegments:
- [0x7E5880, asm, overlays/ovl_007E5880]
@@ -837,6 +928,7 @@
start: 0x7EF1F0
vram: 0x808F5FD0
follows_vram: ovl_007E5880
+ compress: True
subsegments:
- [0x7EF1F0, data, overlays/ovl_007E5880_reloc]
@@ -845,6 +937,7 @@
start: 0x7F0350
vram: 0x808F7130
follows_vram: ovl_007E5880_reloc
+ compress: True
bss_size: 0x490
subsegments:
- [0x7F0350, asm, overlays/ovl_007F0350]
@@ -856,6 +949,7 @@
start: 0x7F9D60
vram: 0x80900FD0
follows_vram: ovl_007F0350
+ compress: True
subsegments:
- [0x7F9D60, data, overlays/ovl_007F0350_reloc]
@@ -864,6 +958,7 @@
start: 0x7FAEB0
vram: 0x80902120
follows_vram: ovl_007F0350_reloc
+ compress: True
bss_size: 0x490
subsegments:
- [0x7FAEB0, asm, overlays/ovl_007FAEB0]
@@ -875,6 +970,7 @@
start: 0x804CC0
vram: 0x8090C3C0
follows_vram: ovl_007FAEB0
+ compress: True
subsegments:
- [0x804CC0, data, overlays/ovl_007FAEB0_reloc]
@@ -883,6 +979,7 @@
start: 0x805E30
vram: 0x8090D530
follows_vram: ovl_007FAEB0_reloc
+ compress: True
bss_size: 0x490
subsegments:
- [0x805E30, asm, overlays/ovl_00805E30]
@@ -894,6 +991,7 @@
start: 0x80F760
vram: 0x809172F0
follows_vram: ovl_00805E30
+ compress: True
subsegments:
- [0x80F760, data, overlays/ovl_00805E30_reloc]
@@ -902,6 +1000,7 @@
start: 0x8108C0
vram: 0x80918450
follows_vram: ovl_00805E30_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8108C0, asm, overlays/ovl_008108C0]
@@ -912,6 +1011,7 @@
start: 0x814C50
vram: 0x8091C7E0
follows_vram: ovl_008108C0
+ compress: True
subsegments:
- [0x814C50, data, overlays/ovl_008108C0_reloc]
@@ -920,6 +1020,7 @@
start: 0x814FA0
vram: 0x8091CB30
follows_vram: ovl_008108C0_reloc
+ compress: True
bss_size: 0xB0
subsegments:
- [0x814FA0, asm, overlays/ovl_00814FA0]
@@ -930,6 +1031,7 @@
start: 0x815AD0
vram: 0x8091D710
follows_vram: ovl_00814FA0
+ compress: True
subsegments:
- [0x815AD0, data, overlays/ovl_00814FA0_reloc]
@@ -938,6 +1040,7 @@
start: 0x815B70
vram: 0x8091D7B0
follows_vram: ovl_00814FA0_reloc
+ compress: True
bss_size: 0x160
subsegments:
- [0x815B70, asm, overlays/ovl_00815B70]
@@ -948,6 +1051,7 @@
start: 0x81A1A0
vram: 0x80921F40
follows_vram: ovl_00815B70
+ compress: True
subsegments:
- [0x81A1A0, data, overlays/ovl_00815B70_reloc]
@@ -956,6 +1060,7 @@
start: 0x81AA60
vram: 0x80922800
follows_vram: ovl_00815B70_reloc
+ compress: True
bss_size: 0x270
subsegments:
- [0x81AA60, asm, overlays/ovl_0081AA60]
@@ -967,6 +1072,7 @@
start: 0x81D540
vram: 0x80925550
follows_vram: ovl_0081AA60
+ compress: True
subsegments:
- [0x81D540, data, overlays/ovl_0081AA60_reloc]
@@ -975,6 +1081,7 @@
start: 0x81D9D0
vram: 0x809259E0
follows_vram: ovl_0081AA60_reloc
+ compress: True
bss_size: 0x4E0
subsegments:
- [0x81D9D0, asm, overlays/ovl_0081D9D0]
@@ -985,6 +1092,7 @@
start: 0x821740
vram: 0x80929C30
follows_vram: ovl_0081D9D0
+ compress: True
subsegments:
- [0x821740, data, overlays/ovl_0081D9D0_reloc]
@@ -993,6 +1101,7 @@
start: 0x821B40
vram: 0x8092A030
follows_vram: ovl_0081D9D0_reloc
+ compress: True
bss_size: 0x310
subsegments:
- [0x821B40, asm, overlays/ovl_00821B40]
@@ -1003,6 +1112,7 @@
start: 0x8240D0
vram: 0x8092C8D0
follows_vram: ovl_00821B40
+ compress: True
subsegments:
- [0x8240D0, data, overlays/ovl_00821B40_reloc]
@@ -1011,6 +1121,7 @@
start: 0x824500
vram: 0x8092CD00
follows_vram: ovl_00821B40_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x824500, asm, overlays/ovl_00824500]
@@ -1020,6 +1131,7 @@
start: 0x8252E0
vram: 0x8092DAE0
follows_vram: ovl_00824500
+ compress: True
subsegments:
- [0x8252E0, data, overlays/ovl_00824500_reloc]
@@ -1028,6 +1140,7 @@
start: 0x8253C0
vram: 0x8092DBC0
follows_vram: ovl_00824500_reloc
+ compress: True
bss_size: 0x380
subsegments:
- [0x8253C0, asm, overlays/ovl_008253C0]
@@ -1038,6 +1151,7 @@
start: 0x827BE0
vram: 0x80930760
follows_vram: ovl_008253C0
+ compress: True
subsegments:
- [0x827BE0, data, overlays/ovl_008253C0_reloc]
@@ -1046,6 +1160,7 @@
start: 0x827DE0
vram: 0x80930960
follows_vram: ovl_008253C0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x827DE0, asm, overlays/ovl_00827DE0]
@@ -1056,6 +1171,7 @@
start: 0x828C00
vram: 0x80931780
follows_vram: ovl_00827DE0
+ compress: True
subsegments:
- [0x828C00, data, overlays/ovl_00827DE0_reloc]
@@ -1064,6 +1180,7 @@
start: 0x828C50
vram: 0x809317D0
follows_vram: ovl_00827DE0_reloc
+ compress: False
bss_size: 0x0
subsegments:
- [0x828C50, asm, overlays/ovl_00828C50]
@@ -1074,6 +1191,7 @@
start: 0x82B0C0
vram: 0x80933C40
follows_vram: ovl_00828C50
+ compress: False
subsegments:
- [0x82B0C0, data, overlays/ovl_00828C50_reloc]
@@ -1082,6 +1200,7 @@
start: 0x82B3C0
vram: 0x80933F40
follows_vram: ovl_00828C50_reloc
+ compress: True
bss_size: 0x40
subsegments:
- [0x82B3C0, asm, overlays/ovl_0082B3C0]
@@ -1092,6 +1211,7 @@
start: 0x82BAE0
vram: 0x809346A0
follows_vram: ovl_0082B3C0
+ compress: True
subsegments:
- [0x82BAE0, data, overlays/ovl_0082B3C0_reloc]
@@ -1100,6 +1220,7 @@
start: 0x82BB80
vram: 0x80934740
follows_vram: ovl_0082B3C0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x82BB80, asm, overlays/ovl_0082BB80]
@@ -1109,6 +1230,7 @@
start: 0x82BBF0
vram: 0x809347B0
follows_vram: ovl_0082BB80
+ compress: True
subsegments:
- [0x82BBF0, data, overlays/ovl_0082BB80_reloc]
@@ -1117,6 +1239,7 @@
start: 0x82BC20
vram: 0x809347E0
follows_vram: ovl_0082BB80_reloc
+ compress: True
bss_size: 0x360
subsegments:
- [0x82BC20, asm, overlays/ovl_0082BC20]
@@ -1128,6 +1251,7 @@
start: 0x82CDE0
vram: 0x80935D00
follows_vram: ovl_0082BC20
+ compress: True
subsegments:
- [0x82CDE0, data, overlays/ovl_0082BC20_reloc]
@@ -1136,6 +1260,7 @@
start: 0x82CED0
vram: 0x80935DF0
follows_vram: ovl_0082BC20_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x82CED0, asm, overlays/ovl_0082CED0]
@@ -1145,6 +1270,7 @@
start: 0x82D7A0
vram: 0x809366C0
follows_vram: ovl_0082CED0
+ compress: True
subsegments:
- [0x82D7A0, data, overlays/ovl_0082CED0_reloc]
@@ -1153,6 +1279,7 @@
start: 0x82D7F0
vram: 0x80936710
follows_vram: ovl_0082CED0_reloc
+ compress: True
bss_size: 0x22F0
subsegments:
- [0x82D7F0, asm, overlays/ovl_0082D7F0]
@@ -1164,6 +1291,7 @@
start: 0x844400
vram: 0x8094F610
follows_vram: ovl_0082D7F0
+ compress: True
subsegments:
- [0x844400, data, overlays/ovl_0082D7F0_reloc]
@@ -1172,6 +1300,7 @@
start: 0x845C40
vram: 0x80950E50
follows_vram: ovl_0082D7F0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x845C40, asm, overlays/ovl_00845C40]
@@ -1182,6 +1311,7 @@
start: 0x8463A0
vram: 0x809515B0
follows_vram: ovl_00845C40
+ compress: True
subsegments:
- [0x8463A0, data, overlays/ovl_00845C40_reloc]
@@ -1190,6 +1320,7 @@
start: 0x846430
vram: 0x80951640
follows_vram: ovl_00845C40_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x846430, asm, overlays/ovl_00846430]
@@ -1199,6 +1330,7 @@
start: 0x8464A0
vram: 0x809516B0
follows_vram: ovl_00846430
+ compress: True
subsegments:
- [0x8464A0, data, overlays/ovl_00846430_reloc]
@@ -1207,6 +1339,7 @@
start: 0x8464D0
vram: 0x809516E0
follows_vram: ovl_00846430_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8464D0, asm, overlays/ovl_008464D0]
@@ -1216,6 +1349,7 @@
start: 0x846810
vram: 0x80951A20
follows_vram: ovl_008464D0
+ compress: True
subsegments:
- [0x846810, data, overlays/ovl_008464D0_reloc]
@@ -1224,6 +1358,7 @@
start: 0x846860
vram: 0x80951A70
follows_vram: ovl_008464D0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x846860, asm, overlays/ovl_00846860]
@@ -1234,6 +1369,7 @@
start: 0x8476A0
vram: 0x809528B0
follows_vram: ovl_00846860
+ compress: True
subsegments:
- [0x8476A0, data, overlays/ovl_00846860_reloc]
@@ -1242,6 +1378,7 @@
start: 0x8477A0
vram: 0x809529B0
follows_vram: ovl_00846860_reloc
+ compress: True
bss_size: 0x10
subsegments:
- [0x8477A0, asm, overlays/ovl_008477A0]
@@ -1253,6 +1390,7 @@
start: 0x8484C0
vram: 0x809536E0
follows_vram: ovl_008477A0
+ compress: True
subsegments:
- [0x8484C0, data, overlays/ovl_008477A0_reloc]
@@ -1261,6 +1399,7 @@
start: 0x848600
vram: 0x80953820
follows_vram: ovl_008477A0_reloc
+ compress: True
bss_size: 0x10
subsegments:
- [0x848600, asm, overlays/ovl_00848600]
@@ -1272,6 +1411,7 @@
start: 0x848B40
vram: 0x80953D70
follows_vram: ovl_00848600
+ compress: True
subsegments:
- [0x848B40, data, overlays/ovl_00848600_reloc]
@@ -1280,6 +1420,7 @@
start: 0x848BF0
vram: 0x80953E20
follows_vram: ovl_00848600_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x848BF0, asm, overlays/ovl_00848BF0]
@@ -1289,6 +1430,7 @@
start: 0x849AC0
vram: 0x80954CF0
follows_vram: ovl_00848BF0
+ compress: True
subsegments:
- [0x849AC0, data, overlays/ovl_00848BF0_reloc]
@@ -1297,6 +1439,7 @@
start: 0x849B50
vram: 0x80954D80
follows_vram: ovl_00848BF0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x849B50, asm, overlays/ovl_00849B50]
@@ -1306,6 +1449,7 @@
start: 0x84C8A0
vram: 0x80957AD0
follows_vram: ovl_00849B50
+ compress: True
subsegments:
- [0x84C8A0, data, overlays/ovl_00849B50_reloc]
@@ -1314,6 +1458,7 @@
start: 0x84CBC0
vram: 0x80957DF0
follows_vram: ovl_00849B50_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x84CBC0, asm, overlays/ovl_0084CBC0]
@@ -1323,6 +1468,7 @@
start: 0x84D110
vram: 0x80958340
follows_vram: ovl_0084CBC0
+ compress: True
subsegments:
- [0x84D110, data, overlays/ovl_0084CBC0_reloc]
@@ -1331,6 +1477,7 @@
start: 0x84D180
vram: 0x809583B0
follows_vram: ovl_0084CBC0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x84D180, asm, overlays/ovl_0084D180]
@@ -1340,6 +1487,7 @@
start: 0x84E000
vram: 0x80959230
follows_vram: ovl_0084D180
+ compress: True
subsegments:
- [0x84E000, data, overlays/ovl_0084D180_reloc]
@@ -1348,6 +1496,7 @@
start: 0x84E080
vram: 0x809592B0
follows_vram: ovl_0084D180_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x84E080, asm, overlays/ovl_0084E080]
@@ -1358,6 +1507,7 @@
start: 0x84F0E0
vram: 0x8095A310
follows_vram: ovl_0084E080
+ compress: True
subsegments:
- [0x84F0E0, data, overlays/ovl_0084E080_reloc]
@@ -1366,6 +1516,7 @@
start: 0x84F180
vram: 0x8095A3B0
follows_vram: ovl_0084E080_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x84F180, asm, overlays/ovl_0084F180]
@@ -1376,6 +1527,7 @@
start: 0x8504F0
vram: 0x8095B720
follows_vram: ovl_0084F180
+ compress: True
subsegments:
- [0x8504F0, data, overlays/ovl_0084F180_reloc]
@@ -1384,6 +1536,7 @@
start: 0x850680
vram: 0x8095B8B0
follows_vram: ovl_0084F180_reloc
+ compress: True
bss_size: 0x130
subsegments:
- [0x850680, asm, overlays/ovl_00850680]
@@ -1395,6 +1548,7 @@
start: 0x857100
vram: 0x80962460
follows_vram: ovl_00850680
+ compress: True
subsegments:
- [0x857100, data, overlays/ovl_00850680_reloc]
@@ -1403,6 +1557,7 @@
start: 0x8576C0
vram: 0x80962A20
follows_vram: ovl_00850680_reloc
+ compress: True
bss_size: 0x10
subsegments:
- [0x8576C0, asm, overlays/ovl_008576C0]
@@ -1414,6 +1569,7 @@
start: 0x858960
vram: 0x80963CD0
follows_vram: ovl_008576C0
+ compress: True
subsegments:
- [0x858960, data, overlays/ovl_008576C0_reloc]
@@ -1422,6 +1578,7 @@
start: 0x858A50
vram: 0x80963DC0
follows_vram: ovl_008576C0_reloc
+ compress: True
bss_size: 0x30
subsegments:
- [0x858A50, asm, overlays/ovl_00858A50]
@@ -1433,6 +1590,7 @@
start: 0x85A180
vram: 0x80965520
follows_vram: ovl_00858A50
+ compress: True
subsegments:
- [0x85A180, data, overlays/ovl_00858A50_reloc]
@@ -1441,6 +1599,7 @@
start: 0x85A400
vram: 0x809657A0
follows_vram: ovl_00858A50_reloc
+ compress: True
bss_size: 0x10
subsegments:
- [0x85A400, asm, overlays/ovl_0085A400]
@@ -1451,6 +1610,7 @@
start: 0x85A880
vram: 0x80965C30
follows_vram: ovl_0085A400
+ compress: True
subsegments:
- [0x85A880, data, overlays/ovl_0085A400_reloc]
@@ -1459,6 +1619,7 @@
start: 0x85A8E0
vram: 0x80965C90
follows_vram: ovl_0085A400_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x85A8E0, asm, overlays/ovl_0085A8E0]
@@ -1469,6 +1630,7 @@
start: 0x85B0F0
vram: 0x809664A0
follows_vram: ovl_0085A8E0
+ compress: True
subsegments:
- [0x85B0F0, data, overlays/ovl_0085A8E0_reloc]
@@ -1477,6 +1639,7 @@
start: 0x85B170
vram: 0x80966520
follows_vram: ovl_0085A8E0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x85B170, asm, overlays/ovl_0085B170]
@@ -1487,6 +1650,7 @@
start: 0x85B8D0
vram: 0x80966C80
follows_vram: ovl_0085B170
+ compress: True
subsegments:
- [0x85B8D0, data, overlays/ovl_0085B170_reloc]
@@ -1495,6 +1659,7 @@
start: 0x85B960
vram: 0x80966D10
follows_vram: ovl_0085B170_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x85B960, asm, overlays/ovl_0085B960]
@@ -1505,6 +1670,7 @@
start: 0x85C160
vram: 0x80967510
follows_vram: ovl_0085B960
+ compress: True
subsegments:
- [0x85C160, data, overlays/ovl_0085B960_reloc]
@@ -1513,6 +1679,7 @@
start: 0x85C200
vram: 0x809675B0
follows_vram: ovl_0085B960_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x85C200, asm, overlays/ovl_0085C200]
@@ -1522,6 +1689,7 @@
start: 0x85C510
vram: 0x809678C0
follows_vram: ovl_0085C200
+ compress: True
subsegments:
- [0x85C510, data, overlays/ovl_0085C200_reloc]
@@ -1530,6 +1698,7 @@
start: 0x85C570
vram: 0x80967920
follows_vram: ovl_0085C200_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x85C570, asm, overlays/ovl_0085C570]
@@ -1540,6 +1709,7 @@
start: 0x85D4B0
vram: 0x80968860
follows_vram: ovl_0085C570
+ compress: True
subsegments:
- [0x85D4B0, data, overlays/ovl_0085C570_reloc]
@@ -1548,6 +1718,7 @@
start: 0x85D660
vram: 0x80968A10
follows_vram: ovl_0085C570_reloc
+ compress: True
bss_size: 0x10
subsegments:
- [0x85D660, asm, overlays/ovl_0085D660]
@@ -1559,6 +1730,7 @@
start: 0x85F5D0
vram: 0x8096A990
follows_vram: ovl_0085D660
+ compress: True
subsegments:
- [0x85F5D0, data, overlays/ovl_0085D660_reloc]
@@ -1567,6 +1739,7 @@
start: 0x85F7D0
vram: 0x8096AB90
follows_vram: ovl_0085D660_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x85F7D0, asm, overlays/ovl_0085F7D0]
@@ -1577,6 +1750,7 @@
start: 0x861260
vram: 0x8096C620
follows_vram: ovl_0085F7D0
+ compress: True
subsegments:
- [0x861260, data, overlays/ovl_0085F7D0_reloc]
@@ -1585,6 +1759,7 @@
start: 0x861420
vram: 0x8096C7E0
follows_vram: ovl_0085F7D0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x861420, asm, overlays/ovl_00861420]
@@ -1594,6 +1769,7 @@
start: 0x8622A0
vram: 0x8096D660
follows_vram: ovl_00861420
+ compress: True
subsegments:
- [0x8622A0, data, overlays/ovl_00861420_reloc]
@@ -1602,6 +1778,7 @@
start: 0x8623E0
vram: 0x8096D7A0
follows_vram: ovl_00861420_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8623E0, asm, overlays/ovl_008623E0]
@@ -1611,6 +1788,7 @@
start: 0x862840
vram: 0x8096DC00
follows_vram: ovl_008623E0
+ compress: True
subsegments:
- [0x862840, data, overlays/ovl_008623E0_reloc]
@@ -1619,6 +1797,7 @@
start: 0x862870
vram: 0x8096DC30
follows_vram: ovl_008623E0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x862870, asm, overlays/ovl_00862870]
@@ -1629,6 +1808,7 @@
start: 0x866A80
vram: 0x80971E40
follows_vram: ovl_00862870
+ compress: True
subsegments:
- [0x866A80, data, overlays/ovl_00862870_reloc]
@@ -1637,6 +1817,7 @@
start: 0x866ED0
vram: 0x80972290
follows_vram: ovl_00862870_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x866ED0, asm, overlays/ovl_00866ED0]
@@ -1647,6 +1828,7 @@
start: 0x8675C0
vram: 0x80972980
follows_vram: ovl_00866ED0
+ compress: True
subsegments:
- [0x8675C0, data, overlays/ovl_00866ED0_reloc]
@@ -1655,6 +1837,7 @@
start: 0x867620
vram: 0x809729E0
follows_vram: ovl_00866ED0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x867620, asm, overlays/ovl_00867620]
@@ -1664,6 +1847,7 @@
start: 0x867880
vram: 0x80972C40
follows_vram: ovl_00867620
+ compress: True
subsegments:
- [0x867880, data, overlays/ovl_00867620_reloc]
@@ -1672,6 +1856,7 @@
start: 0x8678C0
vram: 0x80972C80
follows_vram: ovl_00867620_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8678C0, asm, overlays/ovl_008678C0]
@@ -1682,6 +1867,7 @@
start: 0x867C20
vram: 0x80972FE0
follows_vram: ovl_008678C0
+ compress: True
subsegments:
- [0x867C20, data, overlays/ovl_008678C0_reloc]
@@ -1690,6 +1876,7 @@
start: 0x867C60
vram: 0x80973020
follows_vram: ovl_008678C0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x867C60, asm, overlays/ovl_00867C60]
@@ -1699,6 +1886,7 @@
start: 0x867CD0
vram: 0x80973090
follows_vram: ovl_00867C60
+ compress: True
subsegments:
- [0x867CD0, data, overlays/ovl_00867C60_reloc]
@@ -1707,6 +1895,7 @@
start: 0x867D00
vram: 0x809730C0
follows_vram: ovl_00867C60_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x867D00, asm, overlays/ovl_00867D00]
@@ -1716,6 +1905,7 @@
start: 0x867D70
vram: 0x80973130
follows_vram: ovl_00867D00
+ compress: True
subsegments:
- [0x867D70, data, overlays/ovl_00867D00_reloc]
@@ -1724,6 +1914,7 @@
start: 0x867DA0
vram: 0x80973160
follows_vram: ovl_00867D00_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x867DA0, asm, overlays/ovl_00867DA0]
@@ -1733,6 +1924,7 @@
start: 0x8681B0
vram: 0x80973570
follows_vram: ovl_00867DA0
+ compress: True
subsegments:
- [0x8681B0, data, overlays/ovl_00867DA0_reloc]
@@ -1741,6 +1933,7 @@
start: 0x8681F0
vram: 0x809735B0
follows_vram: ovl_00867DA0_reloc
+ compress: True
bss_size: 0x10F70
subsegments:
- [0x8681F0, asm, overlays/ovl_008681F0]
@@ -1752,6 +1945,7 @@
start: 0x878550
vram: 0x80994880
follows_vram: ovl_008681F0
+ compress: True
subsegments:
- [0x878550, data, overlays/ovl_008681F0_reloc]
@@ -1760,6 +1954,7 @@
start: 0x8798C0
vram: 0x80995BF0
follows_vram: ovl_008681F0_reloc
+ compress: True
bss_size: 0x4C0
subsegments:
- [0x8798C0, asm, overlays/ovl_008798C0]
@@ -1771,6 +1966,7 @@
start: 0x886FA0
vram: 0x809A3790
follows_vram: ovl_008798C0
+ compress: True
subsegments:
- [0x886FA0, data, overlays/ovl_008798C0_reloc]
@@ -1779,6 +1975,7 @@
start: 0x887F90
vram: 0x809A4780
follows_vram: ovl_008798C0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x887F90, asm, overlays/ovl_00887F90]
@@ -1788,6 +1985,7 @@
start: 0x889110
vram: 0x809A5900
follows_vram: ovl_00887F90
+ compress: True
subsegments:
- [0x889110, data, overlays/ovl_00887F90_reloc]
@@ -1796,6 +1994,7 @@
start: 0x889270
vram: 0x809A5A60
follows_vram: ovl_00887F90_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x889270, asm, overlays/ovl_00889270]
@@ -1805,6 +2004,7 @@
start: 0x889400
vram: 0x809A5BF0
follows_vram: ovl_00889270
+ compress: True
subsegments:
- [0x889400, data, overlays/ovl_00889270_reloc]
@@ -1813,6 +2013,7 @@
start: 0x889440
vram: 0x809A5C30
follows_vram: ovl_00889270_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x889440, asm, overlays/ovl_00889440]
@@ -1823,6 +2024,7 @@
start: 0x88D780
vram: 0x809A9F70
follows_vram: ovl_00889440
+ compress: True
subsegments:
- [0x88D780, data, overlays/ovl_00889440_reloc]
@@ -1831,6 +2033,7 @@
start: 0x88DD00
vram: 0x809AA4F0
follows_vram: ovl_00889440_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x88DD00, asm, overlays/ovl_0088DD00]
@@ -1841,6 +2044,7 @@
start: 0x892070
vram: 0x809AE860
follows_vram: ovl_0088DD00
+ compress: True
subsegments:
- [0x892070, data, overlays/ovl_0088DD00_reloc]
@@ -1849,6 +2053,7 @@
start: 0x892600
vram: 0x809AEDF0
follows_vram: ovl_0088DD00_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x892600, asm, overlays/ovl_00892600]
@@ -1858,6 +2063,7 @@
start: 0x8927D0
vram: 0x809AEFC0
follows_vram: ovl_00892600
+ compress: True
subsegments:
- [0x8927D0, data, overlays/ovl_00892600_reloc]
@@ -1866,6 +2072,7 @@
start: 0x892810
vram: 0x809AF000
follows_vram: ovl_00892600_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x892810, asm, overlays/ovl_00892810]
@@ -1876,6 +2083,7 @@
start: 0x8947C0
vram: 0x809B0FB0
follows_vram: ovl_00892810
+ compress: True
subsegments:
- [0x8947C0, data, overlays/ovl_00892810_reloc]
@@ -1884,6 +2092,7 @@
start: 0x894A70
vram: 0x809B1260
follows_vram: ovl_00892810_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x894A70, asm, overlays/ovl_00894A70]
@@ -1894,6 +2103,7 @@
start: 0x8967C0
vram: 0x809B2FB0
follows_vram: ovl_00894A70
+ compress: True
subsegments:
- [0x8967C0, data, overlays/ovl_00894A70_reloc]
@@ -1902,6 +2112,7 @@
start: 0x896A30
vram: 0x809B3220
follows_vram: ovl_00894A70_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x896A30, asm, overlays/ovl_00896A30]
@@ -1912,6 +2123,7 @@
start: 0x897350
vram: 0x809B3B40
follows_vram: ovl_00896A30
+ compress: True
subsegments:
- [0x897350, data, overlays/ovl_00896A30_reloc]
@@ -1920,6 +2132,7 @@
start: 0x897450
vram: 0x809B3C40
follows_vram: ovl_00896A30_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x897450, asm, overlays/ovl_00897450]
@@ -1930,6 +2143,7 @@
start: 0x8980D0
vram: 0x809B48C0
follows_vram: ovl_00897450
+ compress: True
subsegments:
- [0x8980D0, data, overlays/ovl_00897450_reloc]
@@ -1938,6 +2152,7 @@
start: 0x898220
vram: 0x809B4A10
follows_vram: ovl_00897450_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x898220, asm, overlays/ovl_00898220]
@@ -1948,6 +2163,7 @@
start: 0x899040
vram: 0x809B5830
follows_vram: ovl_00898220
+ compress: True
subsegments:
- [0x899040, data, overlays/ovl_00898220_reloc]
@@ -1956,6 +2172,7 @@
start: 0x8991B0
vram: 0x809B59A0
follows_vram: ovl_00898220_reloc
+ compress: True
bss_size: 0x10
subsegments:
- [0x8991B0, asm, overlays/ovl_008991B0]
@@ -1967,6 +2184,7 @@
start: 0x89A020
vram: 0x809B6820
follows_vram: ovl_008991B0
+ compress: True
subsegments:
- [0x89A020, data, overlays/ovl_008991B0_reloc]
@@ -1975,6 +2193,7 @@
start: 0x89A1B0
vram: 0x809B69B0
follows_vram: ovl_008991B0_reloc
+ compress: True
bss_size: 0x10
subsegments:
- [0x89A1B0, asm, overlays/ovl_0089A1B0]
@@ -1986,6 +2205,7 @@
start: 0x8A0B50
vram: 0x809BD360
follows_vram: ovl_0089A1B0
+ compress: True
subsegments:
- [0x8A0B50, data, overlays/ovl_0089A1B0_reloc]
@@ -1994,6 +2214,7 @@
start: 0x8A1160
vram: 0x809BD970
follows_vram: ovl_0089A1B0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8A1160, asm, overlays/ovl_008A1160]
@@ -2003,6 +2224,7 @@
start: 0x8A1E00
vram: 0x809BE610
follows_vram: ovl_008A1160
+ compress: True
subsegments:
- [0x8A1E00, data, overlays/ovl_008A1160_reloc]
@@ -2011,6 +2233,7 @@
start: 0x8A1F10
vram: 0x809BE720
follows_vram: ovl_008A1160_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8A1F10, asm, overlays/ovl_008A1F10]
@@ -2021,6 +2244,7 @@
start: 0x8A4630
vram: 0x809C0E40
follows_vram: ovl_008A1F10
+ compress: True
subsegments:
- [0x8A4630, data, overlays/ovl_008A1F10_reloc]
@@ -2029,6 +2253,7 @@
start: 0x8A4940
vram: 0x809C1150
follows_vram: ovl_008A1F10_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8A4940, asm, overlays/ovl_008A4940]
@@ -2038,6 +2263,7 @@
start: 0x8A5670
vram: 0x809C1E80
follows_vram: ovl_008A4940
+ compress: True
subsegments:
- [0x8A5670, data, overlays/ovl_008A4940_reloc]
@@ -2046,6 +2272,7 @@
start: 0x8A5760
vram: 0x809C1F70
follows_vram: ovl_008A4940_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8A5760, asm, overlays/ovl_008A5760]
@@ -2056,6 +2283,7 @@
start: 0x8A6A60
vram: 0x809C3270
follows_vram: ovl_008A5760
+ compress: True
subsegments:
- [0x8A6A60, data, overlays/ovl_008A5760_reloc]
@@ -2064,6 +2292,7 @@
start: 0x8A6C10
vram: 0x809C3420
follows_vram: ovl_008A5760_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8A6C10, asm, overlays/ovl_008A6C10]
@@ -2074,6 +2303,7 @@
start: 0x8A8A10
vram: 0x809C5220
follows_vram: ovl_008A6C10
+ compress: True
subsegments:
- [0x8A8A10, data, overlays/ovl_008A6C10_reloc]
@@ -2082,6 +2312,7 @@
start: 0x8A8C80
vram: 0x809C5490
follows_vram: ovl_008A6C10_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8A8C80, asm, overlays/ovl_008A8C80]
@@ -2092,6 +2323,7 @@
start: 0x8AA170
vram: 0x809C6980
follows_vram: ovl_008A8C80
+ compress: True
subsegments:
- [0x8AA170, data, overlays/ovl_008A8C80_reloc]
@@ -2100,6 +2332,7 @@
start: 0x8AA370
vram: 0x809C6B80
follows_vram: ovl_008A8C80_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8AA370, asm, overlays/ovl_008AA370]
@@ -2110,6 +2343,7 @@
start: 0x8AB600
vram: 0x809C7E10
follows_vram: ovl_008AA370
+ compress: True
subsegments:
- [0x8AB600, data, overlays/ovl_008AA370_reloc]
@@ -2118,6 +2352,7 @@
start: 0x8AB7E0
vram: 0x809C7FF0
follows_vram: ovl_008AA370_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8AB7E0, asm, overlays/ovl_008AB7E0]
@@ -2128,6 +2363,7 @@
start: 0x8ADBA0
vram: 0x809CA3B0
follows_vram: ovl_008AB7E0
+ compress: True
subsegments:
- [0x8ADBA0, data, overlays/ovl_008AB7E0_reloc]
@@ -2136,6 +2372,7 @@
start: 0x8ADF40
vram: 0x809CA750
follows_vram: ovl_008AB7E0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8ADF40, asm, overlays/ovl_008ADF40]
@@ -2146,6 +2383,7 @@
start: 0x8B2140
vram: 0x809CE950
follows_vram: ovl_008ADF40
+ compress: True
subsegments:
- [0x8B2140, data, overlays/ovl_008ADF40_reloc]
@@ -2154,6 +2392,7 @@
start: 0x8B26B0
vram: 0x809CEEC0
follows_vram: ovl_008ADF40_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8B26B0, asm, overlays/ovl_008B26B0]
@@ -2163,6 +2402,7 @@
start: 0x8B2C20
vram: 0x809CF430
follows_vram: ovl_008B26B0
+ compress: True
subsegments:
- [0x8B2C20, data, overlays/ovl_008B26B0_reloc]
@@ -2171,6 +2411,7 @@
start: 0x8B2CE0
vram: 0x809CF4F0
follows_vram: ovl_008B26B0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8B2CE0, asm, overlays/ovl_008B2CE0]
@@ -2181,6 +2422,7 @@
start: 0x8B7410
vram: 0x809D3C20
follows_vram: ovl_008B2CE0
+ compress: True
subsegments:
- [0x8B7410, data, overlays/ovl_008B2CE0_reloc]
@@ -2189,6 +2431,7 @@
start: 0x8B79B0
vram: 0x809D41C0
follows_vram: ovl_008B2CE0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8B79B0, asm, overlays/ovl_008B79B0]
@@ -2199,6 +2442,7 @@
start: 0x8B8E00
vram: 0x809D5610
follows_vram: ovl_008B79B0
+ compress: True
subsegments:
- [0x8B8E00, data, overlays/ovl_008B79B0_reloc]
@@ -2207,6 +2451,7 @@
start: 0x8B8FC0
vram: 0x809D57D0
follows_vram: ovl_008B79B0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8B8FC0, asm, overlays/ovl_008B8FC0]
@@ -2216,6 +2461,7 @@
start: 0x8BA290
vram: 0x809D6AA0
follows_vram: ovl_008B8FC0
+ compress: True
subsegments:
- [0x8BA290, data, overlays/ovl_008B8FC0_reloc]
@@ -2224,6 +2470,7 @@
start: 0x8BA3B0
vram: 0x809D6BC0
follows_vram: ovl_008B8FC0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8BA3B0, asm, overlays/ovl_008BA3B0]
@@ -2233,6 +2480,7 @@
start: 0x8BADB0
vram: 0x809D75C0
follows_vram: ovl_008BA3B0
+ compress: True
subsegments:
- [0x8BADB0, data, overlays/ovl_008BA3B0_reloc]
@@ -2241,6 +2489,7 @@
start: 0x8BAE60
vram: 0x809D7670
follows_vram: ovl_008BA3B0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8BAE60, asm, overlays/ovl_008BAE60]
@@ -2251,6 +2500,7 @@
start: 0x8BB990
vram: 0x809D81A0
follows_vram: ovl_008BAE60
+ compress: True
subsegments:
- [0x8BB990, data, overlays/ovl_008BAE60_reloc]
@@ -2259,6 +2509,7 @@
start: 0x8BBAA0
vram: 0x809D82B0
follows_vram: ovl_008BAE60_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8BBAA0, asm, overlays/ovl_008BBAA0]
@@ -2269,6 +2520,7 @@
start: 0x8BD250
vram: 0x809D9A60
follows_vram: ovl_008BBAA0
+ compress: True
subsegments:
- [0x8BD250, data, overlays/ovl_008BBAA0_reloc]
@@ -2277,6 +2529,7 @@
start: 0x8BD480
vram: 0x809D9C90
follows_vram: ovl_008BBAA0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8BD480, asm, overlays/ovl_008BD480]
@@ -2286,6 +2539,7 @@
start: 0x8BE570
vram: 0x809DAD80
follows_vram: ovl_008BD480
+ compress: True
subsegments:
- [0x8BE570, data, overlays/ovl_008BD480_reloc]
@@ -2294,6 +2548,7 @@
start: 0x8BE690
vram: 0x809DAEA0
follows_vram: ovl_008BD480_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8BE690, asm, overlays/ovl_008BE690]
@@ -2304,6 +2559,7 @@
start: 0x8BFAB0
vram: 0x809DC2C0
follows_vram: ovl_008BE690
+ compress: True
subsegments:
- [0x8BFAB0, data, overlays/ovl_008BE690_reloc]
@@ -2312,6 +2568,7 @@
start: 0x8BFC40
vram: 0x809DC450
follows_vram: ovl_008BE690_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8BFC40, asm, overlays/ovl_008BFC40]
@@ -2321,6 +2578,7 @@
start: 0x8C0320
vram: 0x809DCB30
follows_vram: ovl_008BFC40
+ compress: True
subsegments:
- [0x8C0320, data, overlays/ovl_008BFC40_reloc]
@@ -2329,6 +2587,7 @@
start: 0x8C03E0
vram: 0x809DCBF0
follows_vram: ovl_008BFC40_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8C03E0, asm, overlays/ovl_008C03E0]
@@ -2339,6 +2598,7 @@
start: 0x8C0F20
vram: 0x809DD730
follows_vram: ovl_008C03E0
+ compress: True
subsegments:
- [0x8C0F20, data, overlays/ovl_008C03E0_reloc]
@@ -2347,6 +2607,7 @@
start: 0x8C1040
vram: 0x809DD850
follows_vram: ovl_008C03E0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8C1040, asm, overlays/ovl_008C1040]
@@ -2356,6 +2617,7 @@
start: 0x8C1A20
vram: 0x809DE230
follows_vram: ovl_008C1040
+ compress: True
subsegments:
- [0x8C1A20, data, overlays/ovl_008C1040_reloc]
@@ -2364,6 +2626,7 @@
start: 0x8C1B30
vram: 0x809DE340
follows_vram: ovl_008C1040_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8C1B30, asm, overlays/ovl_008C1B30]
@@ -2373,6 +2636,7 @@
start: 0x8C2370
vram: 0x809DEB80
follows_vram: ovl_008C1B30
+ compress: True
subsegments:
- [0x8C2370, data, overlays/ovl_008C1B30_reloc]
@@ -2381,6 +2645,7 @@
start: 0x8C2480
vram: 0x809DEC90
follows_vram: ovl_008C1B30_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8C2480, asm, overlays/ovl_008C2480]
@@ -2391,6 +2656,7 @@
start: 0x8C2E60
vram: 0x809DF670
follows_vram: ovl_008C2480
+ compress: True
subsegments:
- [0x8C2E60, data, overlays/ovl_008C2480_reloc]
@@ -2399,6 +2665,7 @@
start: 0x8C2F70
vram: 0x809DF780
follows_vram: ovl_008C2480_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8C2F70, asm, overlays/ovl_008C2F70]
@@ -2408,6 +2675,7 @@
start: 0x8C31C0
vram: 0x809DF9D0
follows_vram: ovl_008C2F70
+ compress: True
subsegments:
- [0x8C31C0, data, overlays/ovl_008C2F70_reloc]
@@ -2416,6 +2684,7 @@
start: 0x8C3210
vram: 0x809DFA20
follows_vram: ovl_008C2F70_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8C3210, asm, overlays/ovl_008C3210]
@@ -2425,6 +2694,7 @@
start: 0x8C3930
vram: 0x809E0140
follows_vram: ovl_008C3210
+ compress: True
subsegments:
- [0x8C3930, data, overlays/ovl_008C3210_reloc]
@@ -2433,6 +2703,7 @@
start: 0x8C3A00
vram: 0x809E0210
follows_vram: ovl_008C3210_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8C3A00, asm, overlays/ovl_008C3A00]
@@ -2442,6 +2713,7 @@
start: 0x8C4230
vram: 0x809E0A40
follows_vram: ovl_008C3A00
+ compress: True
subsegments:
- [0x8C4230, data, overlays/ovl_008C3A00_reloc]
@@ -2450,6 +2722,7 @@
start: 0x8C4300
vram: 0x809E0B10
follows_vram: ovl_008C3A00_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8C4300, asm, overlays/ovl_008C4300]
@@ -2459,6 +2732,7 @@
start: 0x8C4E40
vram: 0x809E1650
follows_vram: ovl_008C4300
+ compress: True
subsegments:
- [0x8C4E40, data, overlays/ovl_008C4300_reloc]
@@ -2467,6 +2741,7 @@
start: 0x8C4F70
vram: 0x809E1780
follows_vram: ovl_008C4300_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8C4F70, asm, overlays/ovl_008C4F70]
@@ -2477,6 +2752,7 @@
start: 0x8C6210
vram: 0x809E2A20
follows_vram: ovl_008C4F70
+ compress: True
subsegments:
- [0x8C6210, data, overlays/ovl_008C4F70_reloc]
@@ -2485,6 +2761,7 @@
start: 0x8C6390
vram: 0x809E2BA0
follows_vram: ovl_008C4F70_reloc
+ compress: True
bss_size: 0x20
subsegments:
- [0x8C6390, asm, overlays/ovl_008C6390]
@@ -2495,6 +2772,7 @@
start: 0x8C6C50
vram: 0x809E3480
follows_vram: ovl_008C6390
+ compress: True
subsegments:
- [0x8C6C50, data, overlays/ovl_008C6390_reloc]
@@ -2503,6 +2781,7 @@
start: 0x8C6D80
vram: 0x809E35B0
follows_vram: ovl_008C6390_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8C6D80, asm, overlays/ovl_008C6D80]
@@ -2513,6 +2792,7 @@
start: 0x8C7FD0
vram: 0x809E4800
follows_vram: ovl_008C6D80
+ compress: True
subsegments:
- [0x8C7FD0, data, overlays/ovl_008C6D80_reloc]
@@ -2521,6 +2801,7 @@
start: 0x8C81F0
vram: 0x809E4A20
follows_vram: ovl_008C6D80_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8C81F0, asm, overlays/ovl_008C81F0]
@@ -2530,6 +2811,7 @@
start: 0x8C8DF0
vram: 0x809E5620
follows_vram: ovl_008C81F0
+ compress: True
subsegments:
- [0x8C8DF0, data, overlays/ovl_008C81F0_reloc]
@@ -2538,6 +2820,7 @@
start: 0x8C8F10
vram: 0x809E5740
follows_vram: ovl_008C81F0_reloc
+ compress: True
bss_size: 0x10
subsegments:
- [0x8C8F10, asm, overlays/ovl_008C8F10]
@@ -2548,6 +2831,7 @@
start: 0x8C9AC0
vram: 0x809E6300
follows_vram: ovl_008C8F10
+ compress: True
subsegments:
- [0x8C9AC0, data, overlays/ovl_008C8F10_reloc]
@@ -2556,6 +2840,7 @@
start: 0x8C9BB0
vram: 0x809E63F0
follows_vram: ovl_008C8F10_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8C9BB0, asm, overlays/ovl_008C9BB0]
@@ -2565,6 +2850,7 @@
start: 0x8CA870
vram: 0x809E70B0
follows_vram: ovl_008C9BB0
+ compress: True
subsegments:
- [0x8CA870, data, overlays/ovl_008C9BB0_reloc]
@@ -2573,6 +2859,7 @@
start: 0x8CA950
vram: 0x809E7190
follows_vram: ovl_008C9BB0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8CA950, asm, overlays/ovl_008CA950]
@@ -2582,6 +2869,7 @@
start: 0x8CB5C0
vram: 0x809E7E00
follows_vram: ovl_008CA950
+ compress: True
subsegments:
- [0x8CB5C0, data, overlays/ovl_008CA950_reloc]
@@ -2590,6 +2878,7 @@
start: 0x8CB690
vram: 0x809E7ED0
follows_vram: ovl_008CA950_reloc
+ compress: True
bss_size: 0x14AF0
subsegments:
- [0x8CB690, asm, overlays/ovl_008CB690]
@@ -2601,6 +2890,7 @@
start: 0x8CD350
vram: 0x809FE680
follows_vram: ovl_008CB690
+ compress: True
subsegments:
- [0x8CD350, data, overlays/ovl_008CB690_reloc]
@@ -2609,6 +2899,7 @@
start: 0x8CD550
vram: 0x809FE880
follows_vram: ovl_008CB690_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8CD550, asm, overlays/ovl_008CD550]
@@ -2619,6 +2910,7 @@
start: 0x8CE770
vram: 0x809FFAA0
follows_vram: ovl_008CD550
+ compress: True
subsegments:
- [0x8CE770, data, overlays/ovl_008CD550_reloc]
@@ -2627,6 +2919,7 @@
start: 0x8CE890
vram: 0x809FFBC0
follows_vram: ovl_008CD550_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8CE890, asm, overlays/ovl_008CE890]
@@ -2637,6 +2930,7 @@
start: 0x8CFA70
vram: 0x80A00DA0
follows_vram: ovl_008CE890
+ compress: True
subsegments:
- [0x8CFA70, data, overlays/ovl_008CE890_reloc]
@@ -2645,6 +2939,7 @@
start: 0x8CFBA0
vram: 0x80A00ED0
follows_vram: ovl_008CE890_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8CFBA0, asm, overlays/ovl_008CFBA0]
@@ -2655,6 +2950,7 @@
start: 0x8D0BF0
vram: 0x80A01F20
follows_vram: ovl_008CFBA0
+ compress: True
subsegments:
- [0x8D0BF0, data, overlays/ovl_008CFBA0_reloc]
@@ -2663,6 +2959,7 @@
start: 0x8D0D20
vram: 0x80A02050
follows_vram: ovl_008CFBA0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8D0D20, asm, overlays/ovl_008D0D20]
@@ -2673,6 +2970,7 @@
start: 0x8D1DD0
vram: 0x80A03100
follows_vram: ovl_008D0D20
+ compress: True
subsegments:
- [0x8D1DD0, data, overlays/ovl_008D0D20_reloc]
@@ -2681,6 +2979,7 @@
start: 0x8D1F00
vram: 0x80A03230
follows_vram: ovl_008D0D20_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8D1F00, asm, overlays/ovl_008D1F00]
@@ -2690,6 +2989,7 @@
start: 0x8D2140
vram: 0x80A03470
follows_vram: ovl_008D1F00
+ compress: True
subsegments:
- [0x8D2140, data, overlays/ovl_008D1F00_reloc]
@@ -2698,6 +2998,7 @@
start: 0x8D2170
vram: 0x80A034A0
follows_vram: ovl_008D1F00_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8D2170, asm, overlays/ovl_008D2170]
@@ -2707,6 +3008,7 @@
start: 0x8D2410
vram: 0x80A03740
follows_vram: ovl_008D2170
+ compress: True
subsegments:
- [0x8D2410, data, overlays/ovl_008D2170_reloc]
@@ -2715,6 +3017,7 @@
start: 0x8D2440
vram: 0x80A03770
follows_vram: ovl_008D2170_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8D2440, asm, overlays/ovl_008D2440]
@@ -2725,6 +3028,7 @@
start: 0x8D3B80
vram: 0x80A04EB0
follows_vram: ovl_008D2440
+ compress: True
subsegments:
- [0x8D3B80, data, overlays/ovl_008D2440_reloc]
@@ -2733,6 +3037,7 @@
start: 0x8D3D00
vram: 0x80A05030
follows_vram: ovl_008D2440_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8D3D00, asm, overlays/ovl_008D3D00]
@@ -2743,6 +3048,7 @@
start: 0x8D4970
vram: 0x80A05CA0
follows_vram: ovl_008D3D00
+ compress: True
subsegments:
- [0x8D4970, data, overlays/ovl_008D3D00_reloc]
@@ -2751,6 +3057,7 @@
start: 0x8D4A20
vram: 0x80A05D50
follows_vram: ovl_008D3D00_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8D4A20, asm, overlays/ovl_008D4A20]
@@ -2761,6 +3068,7 @@
start: 0x8D6340
vram: 0x80A07670
follows_vram: ovl_008D4A20
+ compress: True
subsegments:
- [0x8D6340, data, overlays/ovl_008D4A20_reloc]
@@ -2769,6 +3077,7 @@
start: 0x8D6550
vram: 0x80A07880
follows_vram: ovl_008D4A20_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8D6550, asm, overlays/ovl_008D6550]
@@ -2779,6 +3088,7 @@
start: 0x8D6F10
vram: 0x80A08240
follows_vram: ovl_008D6550
+ compress: True
subsegments:
- [0x8D6F10, data, overlays/ovl_008D6550_reloc]
@@ -2787,6 +3097,7 @@
start: 0x8D6FC0
vram: 0x80A082F0
follows_vram: ovl_008D6550_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8D6FC0, asm, overlays/ovl_008D6FC0]
@@ -2797,6 +3108,7 @@
start: 0x8D7ED0
vram: 0x80A09200
follows_vram: ovl_008D6FC0
+ compress: True
subsegments:
- [0x8D7ED0, data, overlays/ovl_008D6FC0_reloc]
@@ -2805,6 +3117,7 @@
start: 0x8D8000
vram: 0x80A09330
follows_vram: ovl_008D6FC0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8D8000, asm, overlays/ovl_008D8000]
@@ -2814,6 +3127,7 @@
start: 0x8D84A0
vram: 0x80A097D0
follows_vram: ovl_008D8000
+ compress: True
subsegments:
- [0x8D84A0, data, overlays/ovl_008D8000_reloc]
@@ -2822,6 +3136,7 @@
start: 0x8D8510
vram: 0x80A09840
follows_vram: ovl_008D8000_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8D8510, asm, overlays/ovl_008D8510]
@@ -2832,6 +3147,7 @@
start: 0x8D8E40
vram: 0x80A0A170
follows_vram: ovl_008D8510
+ compress: True
subsegments:
- [0x8D8E40, data, overlays/ovl_008D8510_reloc]
@@ -2840,6 +3156,7 @@
start: 0x8D8EC0
vram: 0x80A0A1F0
follows_vram: ovl_008D8510_reloc
+ compress: True
bss_size: 0x10
subsegments:
- [0x8D8EC0, asm, overlays/ovl_008D8EC0]
@@ -2851,6 +3168,7 @@
start: 0x8D9FA0
vram: 0x80A0B2E0
follows_vram: ovl_008D8EC0
+ compress: True
subsegments:
- [0x8D9FA0, data, overlays/ovl_008D8EC0_reloc]
@@ -2859,6 +3177,7 @@
start: 0x8DA0C0
vram: 0x80A0B400
follows_vram: ovl_008D8EC0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8DA0C0, asm, overlays/ovl_008DA0C0]
@@ -2869,6 +3188,7 @@
start: 0x8DB170
vram: 0x80A0C4B0
follows_vram: ovl_008DA0C0
+ compress: True
subsegments:
- [0x8DB170, data, overlays/ovl_008DA0C0_reloc]
@@ -2877,6 +3197,7 @@
start: 0x8DB2A0
vram: 0x80A0C5E0
follows_vram: ovl_008DA0C0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8DB2A0, asm, overlays/ovl_008DB2A0]
@@ -2887,6 +3208,7 @@
start: 0x8DBE70
vram: 0x80A0D1B0
follows_vram: ovl_008DB2A0
+ compress: True
subsegments:
- [0x8DBE70, data, overlays/ovl_008DB2A0_reloc]
@@ -2895,6 +3217,7 @@
start: 0x8DBF00
vram: 0x80A0D240
follows_vram: ovl_008DB2A0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8DBF00, asm, overlays/ovl_008DBF00]
@@ -2905,6 +3228,7 @@
start: 0x8DC730
vram: 0x80A0DA70
follows_vram: ovl_008DBF00
+ compress: True
subsegments:
- [0x8DC730, data, overlays/ovl_008DBF00_reloc]
@@ -2913,6 +3237,7 @@
start: 0x8DC7D0
vram: 0x80A0DB10
follows_vram: ovl_008DBF00_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8DC7D0, asm, overlays/ovl_008DC7D0]
@@ -2923,6 +3248,7 @@
start: 0x8DD7E0
vram: 0x80A0EB20
follows_vram: ovl_008DC7D0
+ compress: True
subsegments:
- [0x8DD7E0, data, overlays/ovl_008DC7D0_reloc]
@@ -2931,6 +3257,7 @@
start: 0x8DD910
vram: 0x80A0EC50
follows_vram: ovl_008DC7D0_reloc
+ compress: True
bss_size: 0x10
subsegments:
- [0x8DD910, asm, overlays/ovl_008DD910]
@@ -2942,6 +3269,7 @@
start: 0x8DED10
vram: 0x80A10060
follows_vram: ovl_008DD910
+ compress: True
subsegments:
- [0x8DED10, data, overlays/ovl_008DD910_reloc]
@@ -2950,6 +3278,7 @@
start: 0x8DEEC0
vram: 0x80A10210
follows_vram: ovl_008DD910_reloc
+ compress: True
bss_size: 0x5410
subsegments:
- [0x8DEEC0, asm, overlays/ovl_008DEEC0]
@@ -2961,6 +3290,7 @@
start: 0x8E0870
vram: 0x80A16FD0
follows_vram: ovl_008DEEC0
+ compress: True
subsegments:
- [0x8E0870, data, overlays/ovl_008DEEC0_reloc]
@@ -2969,6 +3299,7 @@
start: 0x8E0A30
vram: 0x80A17190
follows_vram: ovl_008DEEC0_reloc
+ compress: True
bss_size: 0x1DD0
subsegments:
- [0x8E0A30, asm, overlays/ovl_008E0A30]
@@ -2980,6 +3311,7 @@
start: 0x8E4170
vram: 0x80A1C6A0
follows_vram: ovl_008E0A30
+ compress: True
subsegments:
- [0x8E4170, data, overlays/ovl_008E0A30_reloc]
@@ -2988,6 +3320,7 @@
start: 0x8E46A0
vram: 0x80A1CBD0
follows_vram: ovl_008E0A30_reloc
+ compress: True
bss_size: 0x10
subsegments:
- [0x8E46A0, asm, overlays/ovl_008E46A0]
@@ -2999,6 +3332,7 @@
start: 0x8E6640
vram: 0x80A1EB80
follows_vram: ovl_008E46A0
+ compress: True
subsegments:
- [0x8E6640, data, overlays/ovl_008E46A0_reloc]
@@ -3007,6 +3341,7 @@
start: 0x8E6770
vram: 0x80A1ECB0
follows_vram: ovl_008E46A0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8E6770, asm, overlays/ovl_008E6770]
@@ -3017,6 +3352,7 @@
start: 0x8E6F10
vram: 0x80A1F450
follows_vram: ovl_008E6770
+ compress: True
subsegments:
- [0x8E6F10, data, overlays/ovl_008E6770_reloc]
@@ -3025,6 +3361,7 @@
start: 0x8E6FD0
vram: 0x80A1F510
follows_vram: ovl_008E6770_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8E6FD0, asm, overlays/ovl_008E6FD0]
@@ -3035,6 +3372,7 @@
start: 0x8E74D0
vram: 0x80A1FA10
follows_vram: ovl_008E6FD0
+ compress: True
subsegments:
- [0x8E74D0, data, overlays/ovl_008E6FD0_reloc]
@@ -3043,6 +3381,7 @@
start: 0x8E7560
vram: 0x80A1FAA0
follows_vram: ovl_008E6FD0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8E7560, asm, overlays/ovl_008E7560]
@@ -3053,6 +3392,7 @@
start: 0x8E7830
vram: 0x80A1FD70
follows_vram: ovl_008E7560
+ compress: True
subsegments:
- [0x8E7830, data, overlays/ovl_008E7560_reloc]
@@ -3061,6 +3401,7 @@
start: 0x8E78A0
vram: 0x80A1FDE0
follows_vram: ovl_008E7560_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8E78A0, asm, overlays/ovl_008E78A0]
@@ -3071,6 +3412,7 @@
start: 0x8E7B80
vram: 0x80A200C0
follows_vram: ovl_008E78A0
+ compress: True
subsegments:
- [0x8E7B80, data, overlays/ovl_008E78A0_reloc]
@@ -3079,6 +3421,7 @@
start: 0x8E7BF0
vram: 0x80A20130
follows_vram: ovl_008E78A0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8E7BF0, asm, overlays/ovl_008E7BF0]
@@ -3089,6 +3432,7 @@
start: 0x8E7EC0
vram: 0x80A20400
follows_vram: ovl_008E7BF0
+ compress: True
subsegments:
- [0x8E7EC0, data, overlays/ovl_008E7BF0_reloc]
@@ -3097,6 +3441,7 @@
start: 0x8E7F30
vram: 0x80A20470
follows_vram: ovl_008E7BF0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8E7F30, asm, overlays/ovl_008E7F30]
@@ -3107,6 +3452,7 @@
start: 0x8E8200
vram: 0x80A20740
follows_vram: ovl_008E7F30
+ compress: True
subsegments:
- [0x8E8200, data, overlays/ovl_008E7F30_reloc]
@@ -3115,6 +3461,7 @@
start: 0x8E8270
vram: 0x80A207B0
follows_vram: ovl_008E7F30_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8E8270, asm, overlays/ovl_008E8270]
@@ -3125,6 +3472,7 @@
start: 0x8E86E0
vram: 0x80A20C20
follows_vram: ovl_008E8270
+ compress: True
subsegments:
- [0x8E86E0, data, overlays/ovl_008E8270_reloc]
@@ -3133,6 +3481,7 @@
start: 0x8E8720
vram: 0x80A20C60
follows_vram: ovl_008E8270_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8E8720, asm, overlays/ovl_008E8720]
@@ -3143,6 +3492,7 @@
start: 0x8E89F0
vram: 0x80A20F30
follows_vram: ovl_008E8720
+ compress: True
subsegments:
- [0x8E89F0, data, overlays/ovl_008E8720_reloc]
@@ -3151,6 +3501,7 @@
start: 0x8E8A60
vram: 0x80A20FA0
follows_vram: ovl_008E8720_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8E8A60, asm, overlays/ovl_008E8A60]
@@ -3161,6 +3512,7 @@
start: 0x8E8DD0
vram: 0x80A21310
follows_vram: ovl_008E8A60
+ compress: True
subsegments:
- [0x8E8DD0, data, overlays/ovl_008E8A60_reloc]
@@ -3169,6 +3521,7 @@
start: 0x8E8E20
vram: 0x80A21360
follows_vram: ovl_008E8A60_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8E8E20, asm, overlays/ovl_008E8E20]
@@ -3179,6 +3532,7 @@
start: 0x8E90E0
vram: 0x80A21620
follows_vram: ovl_008E8E20
+ compress: True
subsegments:
- [0x8E90E0, data, overlays/ovl_008E8E20_reloc]
@@ -3187,6 +3541,7 @@
start: 0x8E9130
vram: 0x80A21670
follows_vram: ovl_008E8E20_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8E9130, asm, overlays/ovl_008E9130]
@@ -3197,6 +3552,7 @@
start: 0x8EA800
vram: 0x80A22D40
follows_vram: ovl_008E9130
+ compress: True
subsegments:
- [0x8EA800, data, overlays/ovl_008E9130_reloc]
@@ -3205,6 +3561,7 @@
start: 0x8EA970
vram: 0x80A22EB0
follows_vram: ovl_008E9130_reloc
+ compress: True
bss_size: 0x20
subsegments:
- [0x8EA970, asm, overlays/ovl_008EA970]
@@ -3216,6 +3573,7 @@
start: 0x8ED0E0
vram: 0x80A25640
follows_vram: ovl_008EA970
+ compress: True
subsegments:
- [0x8ED0E0, data, overlays/ovl_008EA970_reloc]
@@ -3224,6 +3582,7 @@
start: 0x8ED290
vram: 0x80A257F0
follows_vram: ovl_008EA970_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8ED290, asm, overlays/ovl_008ED290]
@@ -3234,6 +3593,7 @@
start: 0x8ED580
vram: 0x80A25AE0
follows_vram: ovl_008ED290
+ compress: True
subsegments:
- [0x8ED580, data, overlays/ovl_008ED290_reloc]
@@ -3242,6 +3602,7 @@
start: 0x8ED5C0
vram: 0x80A25B20
follows_vram: ovl_008ED290_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8ED5C0, asm, overlays/ovl_008ED5C0]
@@ -3252,6 +3613,7 @@
start: 0x8EDB20
vram: 0x80A26080
follows_vram: ovl_008ED5C0
+ compress: True
subsegments:
- [0x8EDB20, data, overlays/ovl_008ED5C0_reloc]
@@ -3260,6 +3622,7 @@
start: 0x8EDB70
vram: 0x80A260D0
follows_vram: ovl_008ED5C0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8EDB70, asm, overlays/ovl_008EDB70]
@@ -3270,6 +3633,7 @@
start: 0x8EDD80
vram: 0x80A262E0
follows_vram: ovl_008EDB70
+ compress: True
subsegments:
- [0x8EDD80, data, overlays/ovl_008EDB70_reloc]
@@ -3278,6 +3642,7 @@
start: 0x8EDDB0
vram: 0x80A26310
follows_vram: ovl_008EDB70_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8EDDB0, asm, overlays/ovl_008EDDB0]
@@ -3288,6 +3653,7 @@
start: 0x8EE2B0
vram: 0x80A26810
follows_vram: ovl_008EDDB0
+ compress: True
subsegments:
- [0x8EE2B0, data, overlays/ovl_008EDDB0_reloc]
@@ -3296,6 +3662,7 @@
start: 0x8EE310
vram: 0x80A26870
follows_vram: ovl_008EDDB0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8EE310, asm, overlays/ovl_008EE310]
@@ -3306,6 +3673,7 @@
start: 0x8EECC0
vram: 0x80A27220
follows_vram: ovl_008EE310
+ compress: True
subsegments:
- [0x8EECC0, data, overlays/ovl_008EE310_reloc]
@@ -3314,6 +3682,7 @@
start: 0x8EED90
vram: 0x80A272F0
follows_vram: ovl_008EE310_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8EED90, asm, overlays/ovl_008EED90]
@@ -3324,6 +3693,7 @@
start: 0x8EF400
vram: 0x80A27960
follows_vram: ovl_008EED90
+ compress: True
subsegments:
- [0x8EF400, data, overlays/ovl_008EED90_reloc]
@@ -3332,6 +3702,7 @@
start: 0x8EF480
vram: 0x80A279E0
follows_vram: ovl_008EED90_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8EF480, asm, overlays/ovl_008EF480]
@@ -3342,6 +3713,7 @@
start: 0x8EFEF0
vram: 0x80A28450
follows_vram: ovl_008EF480
+ compress: True
subsegments:
- [0x8EFEF0, data, overlays/ovl_008EF480_reloc]
@@ -3350,6 +3722,7 @@
start: 0x8EFF50
vram: 0x80A284B0
follows_vram: ovl_008EF480_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8EFF50, asm, overlays/ovl_008EFF50]
@@ -3360,6 +3733,7 @@
start: 0x8F0680
vram: 0x80A28BE0
follows_vram: ovl_008EFF50
+ compress: True
subsegments:
- [0x8F0680, data, overlays/ovl_008EFF50_reloc]
@@ -3368,6 +3742,7 @@
start: 0x8F0730
vram: 0x80A28C90
follows_vram: ovl_008EFF50_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8F0730, asm, overlays/ovl_008F0730]
@@ -3378,6 +3753,7 @@
start: 0x8F0A30
vram: 0x80A28F90
follows_vram: ovl_008F0730
+ compress: True
subsegments:
- [0x8F0A30, data, overlays/ovl_008F0730_reloc]
@@ -3386,6 +3762,7 @@
start: 0x8F0A80
vram: 0x80A28FE0
follows_vram: ovl_008F0730_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8F0A80, asm, overlays/ovl_008F0A80]
@@ -3396,6 +3773,7 @@
start: 0x8F0FA0
vram: 0x80A29500
follows_vram: ovl_008F0A80
+ compress: True
subsegments:
- [0x8F0FA0, data, overlays/ovl_008F0A80_reloc]
@@ -3404,6 +3782,7 @@
start: 0x8F1010
vram: 0x80A29570
follows_vram: ovl_008F0A80_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8F1010, asm, overlays/ovl_008F1010]
@@ -3414,6 +3793,7 @@
start: 0x8F1410
vram: 0x80A29970
follows_vram: ovl_008F1010
+ compress: True
subsegments:
- [0x8F1410, data, overlays/ovl_008F1010_reloc]
@@ -3422,6 +3802,7 @@
start: 0x8F1470
vram: 0x80A299D0
follows_vram: ovl_008F1010_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8F1470, asm, overlays/ovl_008F1470]
@@ -3432,6 +3813,7 @@
start: 0x8F1790
vram: 0x80A29CF0
follows_vram: ovl_008F1470
+ compress: True
subsegments:
- [0x8F1790, data, overlays/ovl_008F1470_reloc]
@@ -3440,6 +3822,7 @@
start: 0x8F17C0
vram: 0x80A29D20
follows_vram: ovl_008F1470_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8F17C0, asm, overlays/ovl_008F17C0]
@@ -3449,6 +3832,7 @@
start: 0x8F1920
vram: 0x80A29E80
follows_vram: ovl_008F17C0
+ compress: True
subsegments:
- [0x8F1920, data, overlays/ovl_008F17C0_reloc]
@@ -3457,6 +3841,7 @@
start: 0x8F1950
vram: 0x80A29EB0
follows_vram: ovl_008F17C0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8F1950, asm, overlays/ovl_008F1950]
@@ -3467,6 +3852,7 @@
start: 0x8F1BB0
vram: 0x80A2A110
follows_vram: ovl_008F1950
+ compress: True
subsegments:
- [0x8F1BB0, data, overlays/ovl_008F1950_reloc]
@@ -3475,6 +3861,7 @@
start: 0x8F1BF0
vram: 0x80A2A150
follows_vram: ovl_008F1950_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8F1BF0, asm, overlays/ovl_008F1BF0]
@@ -3485,6 +3872,7 @@
start: 0x8F1FC0
vram: 0x80A2A520
follows_vram: ovl_008F1BF0
+ compress: True
subsegments:
- [0x8F1FC0, data, overlays/ovl_008F1BF0_reloc]
@@ -3493,6 +3881,7 @@
start: 0x8F2020
vram: 0x80A2A580
follows_vram: ovl_008F1BF0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8F2020, asm, overlays/ovl_008F2020]
@@ -3503,6 +3892,7 @@
start: 0x8F23F0
vram: 0x80A2A950
follows_vram: ovl_008F2020
+ compress: True
subsegments:
- [0x8F23F0, data, overlays/ovl_008F2020_reloc]
@@ -3511,6 +3901,7 @@
start: 0x8F2430
vram: 0x80A2A990
follows_vram: ovl_008F2020_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8F2430, asm, overlays/ovl_008F2430]
@@ -3520,6 +3911,7 @@
start: 0x8F2680
vram: 0x80A2ABE0
follows_vram: ovl_008F2430
+ compress: True
subsegments:
- [0x8F2680, data, overlays/ovl_008F2430_reloc]
@@ -3528,6 +3920,7 @@
start: 0x8F26B0
vram: 0x80A2AC10
follows_vram: ovl_008F2430_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8F26B0, asm, overlays/ovl_008F26B0]
@@ -3538,6 +3931,7 @@
start: 0x8F29F0
vram: 0x80A2AF50
follows_vram: ovl_008F26B0
+ compress: True
subsegments:
- [0x8F29F0, data, overlays/ovl_008F26B0_reloc]
@@ -3546,6 +3940,7 @@
start: 0x8F2A50
vram: 0x80A2AFB0
follows_vram: ovl_008F26B0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8F2A50, asm, overlays/ovl_008F2A50]
@@ -3556,6 +3951,7 @@
start: 0x8F2DF0
vram: 0x80A2B350
follows_vram: ovl_008F2A50
+ compress: True
subsegments:
- [0x8F2DF0, data, overlays/ovl_008F2A50_reloc]
@@ -3564,6 +3960,7 @@
start: 0x8F2E40
vram: 0x80A2B3A0
follows_vram: ovl_008F2A50_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8F2E40, asm, overlays/ovl_008F2E40]
@@ -3574,6 +3971,7 @@
start: 0x8F3230
vram: 0x80A2B790
follows_vram: ovl_008F2E40
+ compress: True
subsegments:
- [0x8F3230, data, overlays/ovl_008F2E40_reloc]
@@ -3582,6 +3980,7 @@
start: 0x8F3280
vram: 0x80A2B7E0
follows_vram: ovl_008F2E40_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8F3280, asm, overlays/ovl_008F3280]
@@ -3592,6 +3991,7 @@
start: 0x8F3730
vram: 0x80A2BC90
follows_vram: ovl_008F3280
+ compress: True
subsegments:
- [0x8F3730, data, overlays/ovl_008F3280_reloc]
@@ -3600,6 +4000,7 @@
start: 0x8F3780
vram: 0x80A2BCE0
follows_vram: ovl_008F3280_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8F3780, asm, overlays/ovl_008F3780]
@@ -3610,6 +4011,7 @@
start: 0x8F3E30
vram: 0x80A2C390
follows_vram: ovl_008F3780
+ compress: True
subsegments:
- [0x8F3E30, data, overlays/ovl_008F3780_reloc]
@@ -3618,6 +4020,7 @@
start: 0x8F3EC0
vram: 0x80A2C420
follows_vram: ovl_008F3780_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8F3EC0, asm, overlays/ovl_008F3EC0]
@@ -3628,6 +4031,7 @@
start: 0x8F4290
vram: 0x80A2C7F0
follows_vram: ovl_008F3EC0
+ compress: True
subsegments:
- [0x8F4290, data, overlays/ovl_008F3EC0_reloc]
@@ -3636,6 +4040,7 @@
start: 0x8F42E0
vram: 0x80A2C840
follows_vram: ovl_008F3EC0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8F42E0, asm, overlays/ovl_008F42E0]
@@ -3645,6 +4050,7 @@
start: 0x8F44C0
vram: 0x80A2CA20
follows_vram: ovl_008F42E0
+ compress: True
subsegments:
- [0x8F44C0, data, overlays/ovl_008F42E0_reloc]
@@ -3653,6 +4059,7 @@
start: 0x8F44F0
vram: 0x80A2CA50
follows_vram: ovl_008F42E0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8F44F0, asm, overlays/ovl_008F44F0]
@@ -3663,6 +4070,7 @@
start: 0x8F4840
vram: 0x80A2CDA0
follows_vram: ovl_008F44F0
+ compress: True
subsegments:
- [0x8F4840, data, overlays/ovl_008F44F0_reloc]
@@ -3671,6 +4079,7 @@
start: 0x8F4890
vram: 0x80A2CDF0
follows_vram: ovl_008F44F0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8F4890, asm, overlays/ovl_008F4890]
@@ -3681,6 +4090,7 @@
start: 0x8F4D80
vram: 0x80A2D2E0
follows_vram: ovl_008F4890
+ compress: True
subsegments:
- [0x8F4D80, data, overlays/ovl_008F4890_reloc]
@@ -3689,6 +4099,7 @@
start: 0x8F4DC0
vram: 0x80A2D320
follows_vram: ovl_008F4890_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8F4DC0, asm, overlays/ovl_008F4DC0]
@@ -3698,6 +4109,7 @@
start: 0x8F4F60
vram: 0x80A2D4C0
follows_vram: ovl_008F4DC0
+ compress: True
subsegments:
- [0x8F4F60, data, overlays/ovl_008F4DC0_reloc]
@@ -3706,6 +4118,7 @@
start: 0x8F4F90
vram: 0x80A2D4F0
follows_vram: ovl_008F4DC0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8F4F90, asm, overlays/ovl_008F4F90]
@@ -3716,6 +4129,7 @@
start: 0x8F5220
vram: 0x80A2D780
follows_vram: ovl_008F4F90
+ compress: True
subsegments:
- [0x8F5220, data, overlays/ovl_008F4F90_reloc]
@@ -3724,6 +4138,7 @@
start: 0x8F5270
vram: 0x80A2D7D0
follows_vram: ovl_008F4F90_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8F5270, asm, overlays/ovl_008F5270]
@@ -3734,6 +4149,7 @@
start: 0x8F5620
vram: 0x80A2DB80
follows_vram: ovl_008F5270
+ compress: True
subsegments:
- [0x8F5620, data, overlays/ovl_008F5270_reloc]
@@ -3742,6 +4158,7 @@
start: 0x8F56A0
vram: 0x80A2DC00
follows_vram: ovl_008F5270_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8F56A0, asm, overlays/ovl_008F56A0]
@@ -3752,6 +4169,7 @@
start: 0x8F5A20
vram: 0x80A2DF80
follows_vram: ovl_008F56A0
+ compress: True
subsegments:
- [0x8F5A20, data, overlays/ovl_008F56A0_reloc]
@@ -3760,6 +4178,7 @@
start: 0x8F5A80
vram: 0x80A2DFE0
follows_vram: ovl_008F56A0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8F5A80, asm, overlays/ovl_008F5A80]
@@ -3769,6 +4188,7 @@
start: 0x8F5C90
vram: 0x80A2E1F0
follows_vram: ovl_008F5A80
+ compress: True
subsegments:
- [0x8F5C90, data, overlays/ovl_008F5A80_reloc]
@@ -3777,6 +4197,7 @@
start: 0x8F5CD0
vram: 0x80A2E230
follows_vram: ovl_008F5A80_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8F5CD0, asm, overlays/ovl_008F5CD0]
@@ -3787,6 +4208,7 @@
start: 0x8F5F20
vram: 0x80A2E480
follows_vram: ovl_008F5CD0
+ compress: True
subsegments:
- [0x8F5F20, data, overlays/ovl_008F5CD0_reloc]
@@ -3795,6 +4217,7 @@
start: 0x8F5F70
vram: 0x80A2E4D0
follows_vram: ovl_008F5CD0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8F5F70, asm, overlays/ovl_008F5F70]
@@ -3805,6 +4228,7 @@
start: 0x8F62E0
vram: 0x80A2E840
follows_vram: ovl_008F5F70
+ compress: True
subsegments:
- [0x8F62E0, data, overlays/ovl_008F5F70_reloc]
@@ -3813,6 +4237,7 @@
start: 0x8F6320
vram: 0x80A2E880
follows_vram: ovl_008F5F70_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8F6320, asm, overlays/ovl_008F6320]
@@ -3822,6 +4247,7 @@
start: 0x8F65D0
vram: 0x80A2EB30
follows_vram: ovl_008F6320
+ compress: True
subsegments:
- [0x8F65D0, data, overlays/ovl_008F6320_reloc]
@@ -3830,6 +4256,7 @@
start: 0x8F6600
vram: 0x80A2EB60
follows_vram: ovl_008F6320_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8F6600, asm, overlays/ovl_008F6600]
@@ -3840,6 +4267,7 @@
start: 0x8F6B70
vram: 0x80A2F0D0
follows_vram: ovl_008F6600
+ compress: True
subsegments:
- [0x8F6B70, data, overlays/ovl_008F6600_reloc]
@@ -3848,6 +4276,7 @@
start: 0x8F6BE0
vram: 0x80A2F140
follows_vram: ovl_008F6600_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8F6BE0, asm, overlays/ovl_008F6BE0]
@@ -3858,6 +4287,7 @@
start: 0x8F6E90
vram: 0x80A2F3F0
follows_vram: ovl_008F6BE0
+ compress: True
subsegments:
- [0x8F6E90, data, overlays/ovl_008F6BE0_reloc]
@@ -3866,6 +4296,7 @@
start: 0x8F6ED0
vram: 0x80A2F430
follows_vram: ovl_008F6BE0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8F6ED0, asm, overlays/ovl_008F6ED0]
@@ -3876,6 +4307,7 @@
start: 0x8F7350
vram: 0x80A2F8B0
follows_vram: ovl_008F6ED0
+ compress: True
subsegments:
- [0x8F7350, data, overlays/ovl_008F6ED0_reloc]
@@ -3884,6 +4316,7 @@
start: 0x8F73B0
vram: 0x80A2F910
follows_vram: ovl_008F6ED0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8F73B0, asm, overlays/ovl_008F73B0]
@@ -3894,6 +4327,7 @@
start: 0x8F7740
vram: 0x80A2FCA0
follows_vram: ovl_008F73B0
+ compress: True
subsegments:
- [0x8F7740, data, overlays/ovl_008F73B0_reloc]
@@ -3902,6 +4336,7 @@
start: 0x8F7770
vram: 0x80A2FCD0
follows_vram: ovl_008F73B0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8F7770, asm, overlays/ovl_008F7770]
@@ -3912,6 +4347,7 @@
start: 0x8F80C0
vram: 0x80A30620
follows_vram: ovl_008F7770
+ compress: True
subsegments:
- [0x8F80C0, data, overlays/ovl_008F7770_reloc]
@@ -3920,6 +4356,7 @@
start: 0x8F8140
vram: 0x80A306A0
follows_vram: ovl_008F7770_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8F8140, asm, overlays/ovl_008F8140]
@@ -3930,6 +4367,7 @@
start: 0x8F8630
vram: 0x80A30B90
follows_vram: ovl_008F8140
+ compress: True
subsegments:
- [0x8F8630, data, overlays/ovl_008F8140_reloc]
@@ -3938,6 +4376,7 @@
start: 0x8F8690
vram: 0x80A30BF0
follows_vram: ovl_008F8140_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8F8690, asm, overlays/ovl_008F8690]
@@ -3948,6 +4387,7 @@
start: 0x8F8A30
vram: 0x80A30F90
follows_vram: ovl_008F8690
+ compress: True
subsegments:
- [0x8F8A30, data, overlays/ovl_008F8690_reloc]
@@ -3956,6 +4396,7 @@
start: 0x8F8A80
vram: 0x80A30FE0
follows_vram: ovl_008F8690_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8F8A80, asm, overlays/ovl_008F8A80]
@@ -3966,6 +4407,7 @@
start: 0x8F8FA0
vram: 0x80A31500
follows_vram: ovl_008F8A80
+ compress: True
subsegments:
- [0x8F8FA0, data, overlays/ovl_008F8A80_reloc]
@@ -3974,6 +4416,7 @@
start: 0x8F8FE0
vram: 0x80A31540
follows_vram: ovl_008F8A80_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8F8FE0, asm, overlays/ovl_008F8FE0]
@@ -3984,6 +4427,7 @@
start: 0x8F95C0
vram: 0x80A31B20
follows_vram: ovl_008F8FE0
+ compress: True
subsegments:
- [0x8F95C0, data, overlays/ovl_008F8FE0_reloc]
@@ -3992,6 +4436,7 @@
start: 0x8F9650
vram: 0x80A31BB0
follows_vram: ovl_008F8FE0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8F9650, asm, overlays/ovl_008F9650]
@@ -4001,6 +4446,7 @@
start: 0x8F98B0
vram: 0x80A31E10
follows_vram: ovl_008F9650
+ compress: True
subsegments:
- [0x8F98B0, data, overlays/ovl_008F9650_reloc]
@@ -4009,6 +4455,7 @@
start: 0x8F98E0
vram: 0x80A31E40
follows_vram: ovl_008F9650_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8F98E0, asm, overlays/ovl_008F98E0]
@@ -4019,6 +4466,7 @@
start: 0x8F9CE0
vram: 0x80A32240
follows_vram: ovl_008F98E0
+ compress: True
subsegments:
- [0x8F9CE0, data, overlays/ovl_008F98E0_reloc]
@@ -4027,6 +4475,7 @@
start: 0x8F9D20
vram: 0x80A32280
follows_vram: ovl_008F98E0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8F9D20, asm, overlays/ovl_008F9D20]
@@ -4036,6 +4485,7 @@
start: 0x8F9ED0
vram: 0x80A32430
follows_vram: ovl_008F9D20
+ compress: True
subsegments:
- [0x8F9ED0, data, overlays/ovl_008F9D20_reloc]
@@ -4044,6 +4494,7 @@
start: 0x8F9F00
vram: 0x80A32460
follows_vram: ovl_008F9D20_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8F9F00, asm, overlays/ovl_008F9F00]
@@ -4054,6 +4505,7 @@
start: 0x8FA2F0
vram: 0x80A32850
follows_vram: ovl_008F9F00
+ compress: True
subsegments:
- [0x8FA2F0, data, overlays/ovl_008F9F00_reloc]
@@ -4062,6 +4514,7 @@
start: 0x8FA340
vram: 0x80A328A0
follows_vram: ovl_008F9F00_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8FA340, asm, overlays/ovl_008FA340]
@@ -4071,6 +4524,7 @@
start: 0x8FA5B0
vram: 0x80A32B10
follows_vram: ovl_008FA340
+ compress: True
subsegments:
- [0x8FA5B0, data, overlays/ovl_008FA340_reloc]
@@ -4079,6 +4533,7 @@
start: 0x8FA5E0
vram: 0x80A32B40
follows_vram: ovl_008FA340_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8FA5E0, asm, overlays/ovl_008FA5E0]
@@ -4089,6 +4544,7 @@
start: 0x8FABD0
vram: 0x80A33130
follows_vram: ovl_008FA5E0
+ compress: True
subsegments:
- [0x8FABD0, data, overlays/ovl_008FA5E0_reloc]
@@ -4097,6 +4553,7 @@
start: 0x8FAC50
vram: 0x80A331B0
follows_vram: ovl_008FA5E0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8FAC50, asm, overlays/ovl_008FAC50]
@@ -4107,6 +4564,7 @@
start: 0x8FAE90
vram: 0x80A333F0
follows_vram: ovl_008FAC50
+ compress: True
subsegments:
- [0x8FAE90, data, overlays/ovl_008FAC50_reloc]
@@ -4115,6 +4573,7 @@
start: 0x8FAED0
vram: 0x80A33430
follows_vram: ovl_008FAC50_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8FAED0, asm, overlays/ovl_008FAED0]
@@ -4125,6 +4584,7 @@
start: 0x8FB3F0
vram: 0x80A33950
follows_vram: ovl_008FAED0
+ compress: True
subsegments:
- [0x8FB3F0, data, overlays/ovl_008FAED0_reloc]
@@ -4133,6 +4593,7 @@
start: 0x8FB460
vram: 0x80A339C0
follows_vram: ovl_008FAED0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8FB460, asm, overlays/ovl_008FB460]
@@ -4143,6 +4604,7 @@
start: 0x8FB6D0
vram: 0x80A33C30
follows_vram: ovl_008FB460
+ compress: True
subsegments:
- [0x8FB6D0, data, overlays/ovl_008FB460_reloc]
@@ -4151,6 +4613,7 @@
start: 0x8FB710
vram: 0x80A33C70
follows_vram: ovl_008FB460_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8FB710, asm, overlays/ovl_008FB710]
@@ -4161,6 +4624,7 @@
start: 0x8FBB40
vram: 0x80A340A0
follows_vram: ovl_008FB710
+ compress: True
subsegments:
- [0x8FBB40, data, overlays/ovl_008FB710_reloc]
@@ -4169,6 +4633,7 @@
start: 0x8FBB90
vram: 0x80A340F0
follows_vram: ovl_008FB710_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8FBB90, asm, overlays/ovl_008FBB90]
@@ -4179,6 +4644,7 @@
start: 0x8FBF30
vram: 0x80A34490
follows_vram: ovl_008FBB90
+ compress: True
subsegments:
- [0x8FBF30, data, overlays/ovl_008FBB90_reloc]
@@ -4187,6 +4653,7 @@
start: 0x8FBF70
vram: 0x80A344D0
follows_vram: ovl_008FBB90_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8FBF70, asm, overlays/ovl_008FBF70]
@@ -4197,6 +4664,7 @@
start: 0x8FC1E0
vram: 0x80A34740
follows_vram: ovl_008FBF70
+ compress: True
subsegments:
- [0x8FC1E0, data, overlays/ovl_008FBF70_reloc]
@@ -4205,6 +4673,7 @@
start: 0x8FC210
vram: 0x80A34770
follows_vram: ovl_008FBF70_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8FC210, asm, overlays/ovl_008FC210]
@@ -4215,6 +4684,7 @@
start: 0x8FC780
vram: 0x80A34CE0
follows_vram: ovl_008FC210
+ compress: True
subsegments:
- [0x8FC780, data, overlays/ovl_008FC210_reloc]
@@ -4223,6 +4693,7 @@
start: 0x8FC7E0
vram: 0x80A34D40
follows_vram: ovl_008FC210_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8FC7E0, asm, overlays/ovl_008FC7E0]
@@ -4233,6 +4704,7 @@
start: 0x8FC9E0
vram: 0x80A34F40
follows_vram: ovl_008FC7E0
+ compress: True
subsegments:
- [0x8FC9E0, data, overlays/ovl_008FC7E0_reloc]
@@ -4241,6 +4713,7 @@
start: 0x8FCA20
vram: 0x80A34F80
follows_vram: ovl_008FC7E0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8FCA20, asm, overlays/ovl_008FCA20]
@@ -4251,6 +4724,7 @@
start: 0x8FD460
vram: 0x80A359C0
follows_vram: ovl_008FCA20
+ compress: True
subsegments:
- [0x8FD460, data, overlays/ovl_008FCA20_reloc]
@@ -4259,6 +4733,7 @@
start: 0x8FD520
vram: 0x80A35A80
follows_vram: ovl_008FCA20_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8FD520, asm, overlays/ovl_008FD520]
@@ -4269,6 +4744,7 @@
start: 0x8FDD60
vram: 0x80A362C0
follows_vram: ovl_008FD520
+ compress: True
subsegments:
- [0x8FDD60, data, overlays/ovl_008FD520_reloc]
@@ -4277,6 +4753,7 @@
start: 0x8FDE10
vram: 0x80A36370
follows_vram: ovl_008FD520_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8FDE10, asm, overlays/ovl_008FDE10]
@@ -4286,6 +4763,7 @@
start: 0x8FDF60
vram: 0x80A364C0
follows_vram: ovl_008FDE10
+ compress: True
subsegments:
- [0x8FDF60, data, overlays/ovl_008FDE10_reloc]
@@ -4294,6 +4772,7 @@
start: 0x8FDF90
vram: 0x80A364F0
follows_vram: ovl_008FDE10_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8FDF90, asm, overlays/ovl_008FDF90]
@@ -4304,6 +4783,7 @@
start: 0x8FE390
vram: 0x80A368F0
follows_vram: ovl_008FDF90
+ compress: True
subsegments:
- [0x8FE390, data, overlays/ovl_008FDF90_reloc]
@@ -4312,6 +4792,7 @@
start: 0x8FE3E0
vram: 0x80A36940
follows_vram: ovl_008FDF90_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8FE3E0, asm, overlays/ovl_008FE3E0]
@@ -4322,6 +4803,7 @@
start: 0x8FEAE0
vram: 0x80A37040
follows_vram: ovl_008FE3E0
+ compress: True
subsegments:
- [0x8FEAE0, data, overlays/ovl_008FE3E0_reloc]
@@ -4330,6 +4812,7 @@
start: 0x8FEB60
vram: 0x80A370C0
follows_vram: ovl_008FE3E0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8FEB60, asm, overlays/ovl_008FEB60]
@@ -4340,6 +4823,7 @@
start: 0x8FEE50
vram: 0x80A373B0
follows_vram: ovl_008FEB60
+ compress: True
subsegments:
- [0x8FEE50, data, overlays/ovl_008FEB60_reloc]
@@ -4348,6 +4832,7 @@
start: 0x8FEE80
vram: 0x80A373E0
follows_vram: ovl_008FEB60_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8FEE80, asm, overlays/ovl_008FEE80]
@@ -4357,6 +4842,7 @@
start: 0x8FF140
vram: 0x80A376A0
follows_vram: ovl_008FEE80
+ compress: True
subsegments:
- [0x8FF140, data, overlays/ovl_008FEE80_reloc]
@@ -4365,6 +4851,7 @@
start: 0x8FF170
vram: 0x80A376D0
follows_vram: ovl_008FEE80_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8FF170, asm, overlays/ovl_008FF170]
@@ -4375,6 +4862,7 @@
start: 0x8FF730
vram: 0x80A37C90
follows_vram: ovl_008FF170
+ compress: True
subsegments:
- [0x8FF730, data, overlays/ovl_008FF170_reloc]
@@ -4383,6 +4871,7 @@
start: 0x8FF7C0
vram: 0x80A37D20
follows_vram: ovl_008FF170_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8FF7C0, asm, overlays/ovl_008FF7C0]
@@ -4393,6 +4882,7 @@
start: 0x8FFC20
vram: 0x80A38180
follows_vram: ovl_008FF7C0
+ compress: True
subsegments:
- [0x8FFC20, data, overlays/ovl_008FF7C0_reloc]
@@ -4401,6 +4891,7 @@
start: 0x8FFC90
vram: 0x80A381F0
follows_vram: ovl_008FF7C0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x8FFC90, asm, overlays/ovl_008FFC90]
@@ -4411,6 +4902,7 @@
start: 0x9004B0
vram: 0x80A38A10
follows_vram: ovl_008FFC90
+ compress: True
subsegments:
- [0x9004B0, data, overlays/ovl_008FFC90_reloc]
@@ -4419,6 +4911,7 @@
start: 0x900530
vram: 0x80A38A90
follows_vram: ovl_008FFC90_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x900530, asm, overlays/ovl_00900530]
@@ -4429,6 +4922,7 @@
start: 0x900C60
vram: 0x80A391C0
follows_vram: ovl_00900530
+ compress: True
subsegments:
- [0x900C60, data, overlays/ovl_00900530_reloc]
@@ -4437,6 +4931,7 @@
start: 0x900CD0
vram: 0x80A39230
follows_vram: ovl_00900530_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x900CD0, asm, overlays/ovl_00900CD0]
@@ -4447,6 +4942,7 @@
start: 0x901540
vram: 0x80A39AA0
follows_vram: ovl_00900CD0
+ compress: True
subsegments:
- [0x901540, data, overlays/ovl_00900CD0_reloc]
@@ -4455,6 +4951,7 @@
start: 0x9015C0
vram: 0x80A39B20
follows_vram: ovl_00900CD0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9015C0, asm, overlays/ovl_009015C0]
@@ -4465,6 +4962,7 @@
start: 0x901CF0
vram: 0x80A3A250
follows_vram: ovl_009015C0
+ compress: True
subsegments:
- [0x901CF0, data, overlays/ovl_009015C0_reloc]
@@ -4473,6 +4971,7 @@
start: 0x901D60
vram: 0x80A3A2C0
follows_vram: ovl_009015C0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x901D60, asm, overlays/ovl_00901D60]
@@ -4483,6 +4982,7 @@
start: 0x9020D0
vram: 0x80A3A630
follows_vram: ovl_00901D60
+ compress: True
subsegments:
- [0x9020D0, data, overlays/ovl_00901D60_reloc]
@@ -4491,6 +4991,7 @@
start: 0x902120
vram: 0x80A3A680
follows_vram: ovl_00901D60_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x902120, asm, overlays/ovl_00902120]
@@ -4500,6 +5001,7 @@
start: 0x902780
vram: 0x80A3ACE0
follows_vram: ovl_00902120
+ compress: True
subsegments:
- [0x902780, data, overlays/ovl_00902120_reloc]
@@ -4508,6 +5010,7 @@
start: 0x902810
vram: 0x80A3AD70
follows_vram: ovl_00902120_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x902810, asm, overlays/ovl_00902810]
@@ -4517,6 +5020,7 @@
start: 0x902C10
vram: 0x80A3B170
follows_vram: ovl_00902810
+ compress: True
subsegments:
- [0x902C10, data, overlays/ovl_00902810_reloc]
@@ -4525,6 +5029,7 @@
start: 0x902C40
vram: 0x80A3B1A0
follows_vram: ovl_00902810_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x902C40, asm, overlays/ovl_00902C40]
@@ -4535,6 +5040,7 @@
start: 0x9031A0
vram: 0x80A3B700
follows_vram: ovl_00902C40
+ compress: True
subsegments:
- [0x9031A0, data, overlays/ovl_00902C40_reloc]
@@ -4543,6 +5049,7 @@
start: 0x9031F0
vram: 0x80A3B750
follows_vram: ovl_00902C40_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9031F0, asm, overlays/ovl_009031F0]
@@ -4552,6 +5059,7 @@
start: 0x903430
vram: 0x80A3B990
follows_vram: ovl_009031F0
+ compress: True
subsegments:
- [0x903430, data, overlays/ovl_009031F0_reloc]
@@ -4560,6 +5068,7 @@
start: 0x903460
vram: 0x80A3B9C0
follows_vram: ovl_009031F0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x903460, asm, overlays/ovl_00903460]
@@ -4570,6 +5079,7 @@
start: 0x903B40
vram: 0x80A3C0A0
follows_vram: ovl_00903460
+ compress: True
subsegments:
- [0x903B40, data, overlays/ovl_00903460_reloc]
@@ -4578,6 +5088,7 @@
start: 0x903B90
vram: 0x80A3C0F0
follows_vram: ovl_00903460_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x903B90, data, overlays/ovl_00903B90]
@@ -4586,6 +5097,7 @@
start: 0x903BB0
vram: 0x80A3C110
follows_vram: ovl_00903B90
+ compress: True
subsegments:
- [0x903BB0, data, overlays/ovl_00903B90_reloc]
@@ -4594,6 +5106,7 @@
start: 0x903BD0
vram: 0x80A3C130
follows_vram: ovl_00903B90_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x903BD0, asm, overlays/ovl_00903BD0]
@@ -4603,6 +5116,7 @@
start: 0x9042B0
vram: 0x80A3C810
follows_vram: ovl_00903BD0
+ compress: True
subsegments:
- [0x9042B0, data, overlays/ovl_00903BD0_reloc]
@@ -4611,6 +5125,7 @@
start: 0x904330
vram: 0x80A3C890
follows_vram: ovl_00903BD0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x904330, asm, overlays/ovl_00904330]
@@ -4621,6 +5136,7 @@
start: 0x904A50
vram: 0x80A3CFB0
follows_vram: ovl_00904330
+ compress: True
subsegments:
- [0x904A50, data, overlays/ovl_00904330_reloc]
@@ -4629,6 +5145,7 @@
start: 0x904AB0
vram: 0x80A3D010
follows_vram: ovl_00904330_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x904AB0, asm, overlays/ovl_00904AB0]
@@ -4639,6 +5156,7 @@
start: 0x9051F0
vram: 0x80A3D750
follows_vram: ovl_00904AB0
+ compress: True
subsegments:
- [0x9051F0, data, overlays/ovl_00904AB0_reloc]
@@ -4647,6 +5165,7 @@
start: 0x905280
vram: 0x80A3D7E0
follows_vram: ovl_00904AB0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x905280, asm, overlays/ovl_00905280]
@@ -4657,6 +5176,7 @@
start: 0x9059A0
vram: 0x80A3DF00
follows_vram: ovl_00905280
+ compress: True
subsegments:
- [0x9059A0, data, overlays/ovl_00905280_reloc]
@@ -4665,6 +5185,7 @@
start: 0x905A30
vram: 0x80A3DF90
follows_vram: ovl_00905280_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x905A30, asm, overlays/ovl_00905A30]
@@ -4675,6 +5196,7 @@
start: 0x906010
vram: 0x80A3E570
follows_vram: ovl_00905A30
+ compress: True
subsegments:
- [0x906010, data, overlays/ovl_00905A30_reloc]
@@ -4683,6 +5205,7 @@
start: 0x906060
vram: 0x80A3E5C0
follows_vram: ovl_00905A30_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x906060, asm, overlays/ovl_00906060]
@@ -4693,6 +5216,7 @@
start: 0x9061F0
vram: 0x80A3E750
follows_vram: ovl_00906060
+ compress: True
subsegments:
- [0x9061F0, data, overlays/ovl_00906060_reloc]
@@ -4701,6 +5225,7 @@
start: 0x906220
vram: 0x80A3E780
follows_vram: ovl_00906060_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x906220, data, overlays/ovl_00906220]
@@ -4709,6 +5234,7 @@
start: 0x906270
vram: 0x80A3E7D0
follows_vram: ovl_00906220
+ compress: True
subsegments:
- [0x906270, data, overlays/ovl_00906220_reloc]
@@ -4717,6 +5243,7 @@
start: 0x906290
vram: 0x80A3E7F0
follows_vram: ovl_00906220_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x906290, data, overlays/ovl_00906290]
@@ -4725,6 +5252,7 @@
start: 0x9062E0
vram: 0x80A3E840
follows_vram: ovl_00906290
+ compress: True
subsegments:
- [0x9062E0, data, overlays/ovl_00906290_reloc]
@@ -4733,6 +5261,7 @@
start: 0x906300
vram: 0x80A3E860
follows_vram: ovl_00906290_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x906300, data, overlays/ovl_00906300]
@@ -4741,6 +5270,7 @@
start: 0x906350
vram: 0x80A3E8B0
follows_vram: ovl_00906300
+ compress: True
subsegments:
- [0x906350, data, overlays/ovl_00906300_reloc]
@@ -4749,6 +5279,7 @@
start: 0x906370
vram: 0x80A3E8D0
follows_vram: ovl_00906300_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x906370, data, overlays/ovl_00906370]
@@ -4757,6 +5288,7 @@
start: 0x9063C0
vram: 0x80A3E920
follows_vram: ovl_00906370
+ compress: True
subsegments:
- [0x9063C0, data, overlays/ovl_00906370_reloc]
@@ -4765,6 +5297,7 @@
start: 0x9063E0
vram: 0x80A3E940
follows_vram: ovl_00906370_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9063E0, data, overlays/ovl_009063E0]
@@ -4773,6 +5306,7 @@
start: 0x906430
vram: 0x80A3E990
follows_vram: ovl_009063E0
+ compress: True
subsegments:
- [0x906430, data, overlays/ovl_009063E0_reloc]
@@ -4781,6 +5315,7 @@
start: 0x906450
vram: 0x80A3E9B0
follows_vram: ovl_009063E0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x906450, data, overlays/ovl_00906450]
@@ -4789,6 +5324,7 @@
start: 0x9064A0
vram: 0x80A3EA00
follows_vram: ovl_00906450
+ compress: True
subsegments:
- [0x9064A0, data, overlays/ovl_00906450_reloc]
@@ -4797,6 +5333,7 @@
start: 0x9064C0
vram: 0x80A3EA20
follows_vram: ovl_00906450_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9064C0, data, overlays/ovl_009064C0]
@@ -4805,6 +5342,7 @@
start: 0x906510
vram: 0x80A3EA70
follows_vram: ovl_009064C0
+ compress: True
subsegments:
- [0x906510, data, overlays/ovl_009064C0_reloc]
@@ -4813,6 +5351,7 @@
start: 0x906530
vram: 0x80A3EA90
follows_vram: ovl_009064C0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x906530, data, overlays/ovl_00906530]
@@ -4821,6 +5360,7 @@
start: 0x906580
vram: 0x80A3EAE0
follows_vram: ovl_00906530
+ compress: True
subsegments:
- [0x906580, data, overlays/ovl_00906530_reloc]
@@ -4829,6 +5369,7 @@
start: 0x9065A0
vram: 0x80A3EB00
follows_vram: ovl_00906530_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9065A0, data, overlays/ovl_009065A0]
@@ -4837,6 +5378,7 @@
start: 0x9065F0
vram: 0x80A3EB50
follows_vram: ovl_009065A0
+ compress: True
subsegments:
- [0x9065F0, data, overlays/ovl_009065A0_reloc]
@@ -4845,6 +5387,7 @@
start: 0x906610
vram: 0x80A3EB70
follows_vram: ovl_009065A0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x906610, data, overlays/ovl_00906610]
@@ -4853,6 +5396,7 @@
start: 0x906660
vram: 0x80A3EBC0
follows_vram: ovl_00906610
+ compress: True
subsegments:
- [0x906660, data, overlays/ovl_00906610_reloc]
@@ -4861,6 +5405,7 @@
start: 0x906680
vram: 0x80A3EBE0
follows_vram: ovl_00906610_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x906680, data, overlays/ovl_00906680]
@@ -4869,6 +5414,7 @@
start: 0x9066D0
vram: 0x80A3EC30
follows_vram: ovl_00906680
+ compress: True
subsegments:
- [0x9066D0, data, overlays/ovl_00906680_reloc]
@@ -4877,6 +5423,7 @@
start: 0x9066F0
vram: 0x80A3EC50
follows_vram: ovl_00906680_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9066F0, asm, overlays/ovl_009066F0]
@@ -4887,6 +5434,7 @@
start: 0x906B20
vram: 0x80A3F080
follows_vram: ovl_009066F0
+ compress: True
subsegments:
- [0x906B20, data, overlays/ovl_009066F0_reloc]
@@ -4895,6 +5443,7 @@
start: 0x906B80
vram: 0x80A3F0E0
follows_vram: ovl_009066F0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x906B80, asm, overlays/ovl_00906B80]
@@ -4904,6 +5453,7 @@
start: 0x906EE0
vram: 0x80A3F440
follows_vram: ovl_00906B80
+ compress: True
subsegments:
- [0x906EE0, data, overlays/ovl_00906B80_reloc]
@@ -4912,6 +5462,7 @@
start: 0x906F10
vram: 0x80A3F470
follows_vram: ovl_00906B80_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x906F10, data, overlays/ovl_00906F10]
@@ -4920,6 +5471,7 @@
start: 0x906F60
vram: 0x80A3F4C0
follows_vram: ovl_00906F10
+ compress: True
subsegments:
- [0x906F60, data, overlays/ovl_00906F10_reloc]
@@ -4928,6 +5480,7 @@
start: 0x906F80
vram: 0x80A3F4E0
follows_vram: ovl_00906F10_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x906F80, data, overlays/ovl_00906F80]
@@ -4936,6 +5489,7 @@
start: 0x906FD0
vram: 0x80A3F530
follows_vram: ovl_00906F80
+ compress: True
subsegments:
- [0x906FD0, data, overlays/ovl_00906F80_reloc]
@@ -4944,6 +5498,7 @@
start: 0x906FF0
vram: 0x80A3F550
follows_vram: ovl_00906F80_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x906FF0, data, overlays/ovl_00906FF0]
@@ -4952,6 +5507,7 @@
start: 0x907040
vram: 0x80A3F5A0
follows_vram: ovl_00906FF0
+ compress: True
subsegments:
- [0x907040, data, overlays/ovl_00906FF0_reloc]
@@ -4960,6 +5516,7 @@
start: 0x907060
vram: 0x80A3F5C0
follows_vram: ovl_00906FF0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x907060, data, overlays/ovl_00907060]
@@ -4968,6 +5525,7 @@
start: 0x9070B0
vram: 0x80A3F610
follows_vram: ovl_00907060
+ compress: True
subsegments:
- [0x9070B0, data, overlays/ovl_00907060_reloc]
@@ -4976,6 +5534,7 @@
start: 0x9070D0
vram: 0x80A3F630
follows_vram: ovl_00907060_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9070D0, data, overlays/ovl_009070D0]
@@ -4984,6 +5543,7 @@
start: 0x907120
vram: 0x80A3F680
follows_vram: ovl_009070D0
+ compress: True
subsegments:
- [0x907120, data, overlays/ovl_009070D0_reloc]
@@ -4992,6 +5552,7 @@
start: 0x907140
vram: 0x80A3F6A0
follows_vram: ovl_009070D0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x907140, data, overlays/ovl_00907140]
@@ -5000,6 +5561,7 @@
start: 0x907190
vram: 0x80A3F6F0
follows_vram: ovl_00907140
+ compress: True
subsegments:
- [0x907190, data, overlays/ovl_00907140_reloc]
@@ -5008,6 +5570,7 @@
start: 0x9071B0
vram: 0x80A3F710
follows_vram: ovl_00907140_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9071B0, asm, overlays/ovl_009071B0]
@@ -5018,6 +5581,7 @@
start: 0x9075E0
vram: 0x80A3FB40
follows_vram: ovl_009071B0
+ compress: True
subsegments:
- [0x9075E0, data, overlays/ovl_009071B0_reloc]
@@ -5026,6 +5590,7 @@
start: 0x907640
vram: 0x80A3FBA0
follows_vram: ovl_009071B0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x907640, data, overlays/ovl_00907640]
@@ -5034,6 +5599,7 @@
start: 0x907690
vram: 0x80A3FBF0
follows_vram: ovl_00907640
+ compress: True
subsegments:
- [0x907690, data, overlays/ovl_00907640_reloc]
@@ -5042,6 +5608,7 @@
start: 0x9076B0
vram: 0x80A3FC10
follows_vram: ovl_00907640_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9076B0, data, overlays/ovl_009076B0]
@@ -5050,6 +5617,7 @@
start: 0x907700
vram: 0x80A3FC60
follows_vram: ovl_009076B0
+ compress: True
subsegments:
- [0x907700, data, overlays/ovl_009076B0_reloc]
@@ -5058,6 +5626,7 @@
start: 0x907720
vram: 0x80A3FC80
follows_vram: ovl_009076B0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x907720, data, overlays/ovl_00907720]
@@ -5066,6 +5635,7 @@
start: 0x907770
vram: 0x80A3FCD0
follows_vram: ovl_00907720
+ compress: True
subsegments:
- [0x907770, data, overlays/ovl_00907720_reloc]
@@ -5074,6 +5644,7 @@
start: 0x907790
vram: 0x80A3FCF0
follows_vram: ovl_00907720_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x907790, asm, overlays/ovl_00907790]
@@ -5083,6 +5654,7 @@
start: 0x907AF0
vram: 0x80A40050
follows_vram: ovl_00907790
+ compress: True
subsegments:
- [0x907AF0, data, overlays/ovl_00907790_reloc]
@@ -5091,6 +5663,7 @@
start: 0x907B20
vram: 0x80A40080
follows_vram: ovl_00907790_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x907B20, data, overlays/ovl_00907B20]
@@ -5099,6 +5672,7 @@
start: 0x907B70
vram: 0x80A400D0
follows_vram: ovl_00907B20
+ compress: True
subsegments:
- [0x907B70, data, overlays/ovl_00907B20_reloc]
@@ -5107,6 +5681,7 @@
start: 0x907B90
vram: 0x80A400F0
follows_vram: ovl_00907B20_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x907B90, data, overlays/ovl_00907B90]
@@ -5115,6 +5690,7 @@
start: 0x907BE0
vram: 0x80A40140
follows_vram: ovl_00907B90
+ compress: True
subsegments:
- [0x907BE0, data, overlays/ovl_00907B90_reloc]
@@ -5123,6 +5699,7 @@
start: 0x907C00
vram: 0x80A40160
follows_vram: ovl_00907B90_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x907C00, data, overlays/ovl_00907C00]
@@ -5131,6 +5708,7 @@
start: 0x907C50
vram: 0x80A401B0
follows_vram: ovl_00907C00
+ compress: True
subsegments:
- [0x907C50, data, overlays/ovl_00907C00_reloc]
@@ -5139,6 +5717,7 @@
start: 0x907C70
vram: 0x80A401D0
follows_vram: ovl_00907C00_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x907C70, data, overlays/ovl_00907C70]
@@ -5147,6 +5726,7 @@
start: 0x907CC0
vram: 0x80A40220
follows_vram: ovl_00907C70
+ compress: True
subsegments:
- [0x907CC0, data, overlays/ovl_00907C70_reloc]
@@ -5155,6 +5735,7 @@
start: 0x907CE0
vram: 0x80A40240
follows_vram: ovl_00907C70_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x907CE0, data, overlays/ovl_00907CE0]
@@ -5163,6 +5744,7 @@
start: 0x907D30
vram: 0x80A40290
follows_vram: ovl_00907CE0
+ compress: True
subsegments:
- [0x907D30, data, overlays/ovl_00907CE0_reloc]
@@ -5171,6 +5753,7 @@
start: 0x907D50
vram: 0x80A402B0
follows_vram: ovl_00907CE0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x907D50, data, overlays/ovl_00907D50]
@@ -5179,6 +5762,7 @@
start: 0x907DA0
vram: 0x80A40300
follows_vram: ovl_00907D50
+ compress: True
subsegments:
- [0x907DA0, data, overlays/ovl_00907D50_reloc]
@@ -5187,6 +5771,7 @@
start: 0x907DC0
vram: 0x80A40320
follows_vram: ovl_00907D50_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x907DC0, data, overlays/ovl_00907DC0]
@@ -5195,6 +5780,7 @@
start: 0x907E10
vram: 0x80A40370
follows_vram: ovl_00907DC0
+ compress: True
subsegments:
- [0x907E10, data, overlays/ovl_00907DC0_reloc]
@@ -5203,6 +5789,7 @@
start: 0x907E30
vram: 0x80A40390
follows_vram: ovl_00907DC0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x907E30, data, overlays/ovl_00907E30]
@@ -5211,6 +5798,7 @@
start: 0x907E80
vram: 0x80A403E0
follows_vram: ovl_00907E30
+ compress: True
subsegments:
- [0x907E80, data, overlays/ovl_00907E30_reloc]
@@ -5219,6 +5807,7 @@
start: 0x907EA0
vram: 0x80A40400
follows_vram: ovl_00907E30_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x907EA0, data, overlays/ovl_00907EA0]
@@ -5227,6 +5816,7 @@
start: 0x907EF0
vram: 0x80A40450
follows_vram: ovl_00907EA0
+ compress: True
subsegments:
- [0x907EF0, data, overlays/ovl_00907EA0_reloc]
@@ -5235,6 +5825,7 @@
start: 0x907F10
vram: 0x80A40470
follows_vram: ovl_00907EA0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x907F10, asm, overlays/ovl_00907F10]
@@ -5244,6 +5835,7 @@
start: 0x907FF0
vram: 0x80A40550
follows_vram: ovl_00907F10
+ compress: True
subsegments:
- [0x907FF0, data, overlays/ovl_00907F10_reloc]
@@ -5252,6 +5844,7 @@
start: 0x908020
vram: 0x80A40580
follows_vram: ovl_00907F10_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x908020, asm, overlays/ovl_00908020]
@@ -5261,6 +5854,7 @@
start: 0x908100
vram: 0x80A40660
follows_vram: ovl_00908020
+ compress: True
subsegments:
- [0x908100, data, overlays/ovl_00908020_reloc]
@@ -5269,6 +5863,7 @@
start: 0x908130
vram: 0x80A40690
follows_vram: ovl_00908020_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x908130, asm, overlays/ovl_00908130]
@@ -5278,6 +5873,7 @@
start: 0x908210
vram: 0x80A40770
follows_vram: ovl_00908130
+ compress: True
subsegments:
- [0x908210, data, overlays/ovl_00908130_reloc]
@@ -5286,6 +5882,7 @@
start: 0x908240
vram: 0x80A407A0
follows_vram: ovl_00908130_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x908240, asm, overlays/ovl_00908240]
@@ -5295,6 +5892,7 @@
start: 0x908330
vram: 0x80A40890
follows_vram: ovl_00908240
+ compress: True
subsegments:
- [0x908330, data, overlays/ovl_00908240_reloc]
@@ -5303,6 +5901,7 @@
start: 0x908350
vram: 0x80A408B0
follows_vram: ovl_00908240_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x908350, data, overlays/ovl_00908350]
@@ -5311,6 +5910,7 @@
start: 0x9083A0
vram: 0x80A40900
follows_vram: ovl_00908350
+ compress: True
subsegments:
- [0x9083A0, data, overlays/ovl_00908350_reloc]
@@ -5319,6 +5919,7 @@
start: 0x9083C0
vram: 0x80A40920
follows_vram: ovl_00908350_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9083C0, data, overlays/ovl_009083C0]
@@ -5327,6 +5928,7 @@
start: 0x908410
vram: 0x80A40970
follows_vram: ovl_009083C0
+ compress: True
subsegments:
- [0x908410, data, overlays/ovl_009083C0_reloc]
@@ -5335,6 +5937,7 @@
start: 0x908430
vram: 0x80A40990
follows_vram: ovl_009083C0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x908430, data, overlays/ovl_00908430]
@@ -5343,6 +5946,7 @@
start: 0x908480
vram: 0x80A409E0
follows_vram: ovl_00908430
+ compress: True
subsegments:
- [0x908480, data, overlays/ovl_00908430_reloc]
@@ -5351,6 +5955,7 @@
start: 0x9084A0
vram: 0x80A40A00
follows_vram: ovl_00908430_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9084A0, data, overlays/ovl_009084A0]
@@ -5359,6 +5964,7 @@
start: 0x9084F0
vram: 0x80A40A50
follows_vram: ovl_009084A0
+ compress: True
subsegments:
- [0x9084F0, data, overlays/ovl_009084A0_reloc]
@@ -5367,6 +5973,7 @@
start: 0x908510
vram: 0x80A40A70
follows_vram: ovl_009084A0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x908510, data, overlays/ovl_00908510]
@@ -5375,6 +5982,7 @@
start: 0x908560
vram: 0x80A40AC0
follows_vram: ovl_00908510
+ compress: True
subsegments:
- [0x908560, data, overlays/ovl_00908510_reloc]
@@ -5383,6 +5991,7 @@
start: 0x908580
vram: 0x80A40AE0
follows_vram: ovl_00908510_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x908580, asm, overlays/ovl_00908580]
@@ -5392,6 +6001,7 @@
start: 0x9088E0
vram: 0x80A40E40
follows_vram: ovl_00908580
+ compress: True
subsegments:
- [0x9088E0, data, overlays/ovl_00908580_reloc]
@@ -5400,6 +6010,7 @@
start: 0x908910
vram: 0x80A40E70
follows_vram: ovl_00908580_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x908910, data, overlays/ovl_00908910]
@@ -5408,6 +6019,7 @@
start: 0x908960
vram: 0x80A40EC0
follows_vram: ovl_00908910
+ compress: True
subsegments:
- [0x908960, data, overlays/ovl_00908910_reloc]
@@ -5416,6 +6028,7 @@
start: 0x908980
vram: 0x80A40EE0
follows_vram: ovl_00908910_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x908980, data, overlays/ovl_00908980]
@@ -5424,6 +6037,7 @@
start: 0x9089D0
vram: 0x80A40F30
follows_vram: ovl_00908980
+ compress: True
subsegments:
- [0x9089D0, data, overlays/ovl_00908980_reloc]
@@ -5432,6 +6046,7 @@
start: 0x9089F0
vram: 0x80A40F50
follows_vram: ovl_00908980_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9089F0, data, overlays/ovl_009089F0]
@@ -5440,6 +6055,7 @@
start: 0x908A40
vram: 0x80A40FA0
follows_vram: ovl_009089F0
+ compress: True
subsegments:
- [0x908A40, data, overlays/ovl_009089F0_reloc]
@@ -5448,6 +6064,7 @@
start: 0x908A60
vram: 0x80A40FC0
follows_vram: ovl_009089F0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x908A60, data, overlays/ovl_00908A60]
@@ -5456,6 +6073,7 @@
start: 0x908AB0
vram: 0x80A41010
follows_vram: ovl_00908A60
+ compress: True
subsegments:
- [0x908AB0, data, overlays/ovl_00908A60_reloc]
@@ -5464,6 +6082,7 @@
start: 0x908AD0
vram: 0x80A41030
follows_vram: ovl_00908A60_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x908AD0, data, overlays/ovl_00908AD0]
@@ -5472,6 +6091,7 @@
start: 0x908B20
vram: 0x80A41080
follows_vram: ovl_00908AD0
+ compress: True
subsegments:
- [0x908B20, data, overlays/ovl_00908AD0_reloc]
@@ -5480,6 +6100,7 @@
start: 0x908B40
vram: 0x80A410A0
follows_vram: ovl_00908AD0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x908B40, data, overlays/ovl_00908B40]
@@ -5488,6 +6109,7 @@
start: 0x908B90
vram: 0x80A410F0
follows_vram: ovl_00908B40
+ compress: True
subsegments:
- [0x908B90, data, overlays/ovl_00908B40_reloc]
@@ -5496,6 +6118,7 @@
start: 0x908BB0
vram: 0x80A41110
follows_vram: ovl_00908B40_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x908BB0, data, overlays/ovl_00908BB0]
@@ -5504,6 +6127,7 @@
start: 0x908C00
vram: 0x80A41160
follows_vram: ovl_00908BB0
+ compress: True
subsegments:
- [0x908C00, data, overlays/ovl_00908BB0_reloc]
@@ -5512,6 +6136,7 @@
start: 0x908C20
vram: 0x80A41180
follows_vram: ovl_00908BB0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x908C20, data, overlays/ovl_00908C20]
@@ -5520,6 +6145,7 @@
start: 0x908C70
vram: 0x80A411D0
follows_vram: ovl_00908C20
+ compress: True
subsegments:
- [0x908C70, data, overlays/ovl_00908C20_reloc]
@@ -5528,6 +6154,7 @@
start: 0x908C90
vram: 0x80A411F0
follows_vram: ovl_00908C20_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x908C90, data, overlays/ovl_00908C90]
@@ -5536,6 +6163,7 @@
start: 0x908CE0
vram: 0x80A41240
follows_vram: ovl_00908C90
+ compress: True
subsegments:
- [0x908CE0, data, overlays/ovl_00908C90_reloc]
@@ -5544,6 +6172,7 @@
start: 0x908D00
vram: 0x80A41260
follows_vram: ovl_00908C90_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x908D00, data, overlays/ovl_00908D00]
@@ -5552,6 +6181,7 @@
start: 0x908D50
vram: 0x80A412B0
follows_vram: ovl_00908D00
+ compress: True
subsegments:
- [0x908D50, data, overlays/ovl_00908D00_reloc]
@@ -5560,6 +6190,7 @@
start: 0x908D70
vram: 0x80A412D0
follows_vram: ovl_00908D00_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x908D70, data, overlays/ovl_00908D70]
@@ -5568,6 +6199,7 @@
start: 0x908DC0
vram: 0x80A41320
follows_vram: ovl_00908D70
+ compress: True
subsegments:
- [0x908DC0, data, overlays/ovl_00908D70_reloc]
@@ -5576,6 +6208,7 @@
start: 0x908DE0
vram: 0x80A41340
follows_vram: ovl_00908D70_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x908DE0, data, overlays/ovl_00908DE0]
@@ -5584,6 +6217,7 @@
start: 0x908E30
vram: 0x80A41390
follows_vram: ovl_00908DE0
+ compress: True
subsegments:
- [0x908E30, data, overlays/ovl_00908DE0_reloc]
@@ -5592,6 +6226,7 @@
start: 0x908E50
vram: 0x80A413B0
follows_vram: ovl_00908DE0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x908E50, data, overlays/ovl_00908E50]
@@ -5600,6 +6235,7 @@
start: 0x908EA0
vram: 0x80A41400
follows_vram: ovl_00908E50
+ compress: True
subsegments:
- [0x908EA0, data, overlays/ovl_00908E50_reloc]
@@ -5608,6 +6244,7 @@
start: 0x908EC0
vram: 0x80A41420
follows_vram: ovl_00908E50_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x908EC0, data, overlays/ovl_00908EC0]
@@ -5616,6 +6253,7 @@
start: 0x908F10
vram: 0x80A41470
follows_vram: ovl_00908EC0
+ compress: True
subsegments:
- [0x908F10, data, overlays/ovl_00908EC0_reloc]
@@ -5624,6 +6262,7 @@
start: 0x908F30
vram: 0x80A41490
follows_vram: ovl_00908EC0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x908F30, asm, overlays/ovl_00908F30]
@@ -5633,6 +6272,7 @@
start: 0x9093D0
vram: 0x80A41930
follows_vram: ovl_00908F30
+ compress: True
subsegments:
- [0x9093D0, data, overlays/ovl_00908F30_reloc]
@@ -5641,6 +6281,7 @@
start: 0x909410
vram: 0x80A41970
follows_vram: ovl_00908F30_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x909410, data, overlays/ovl_00909410]
@@ -5649,6 +6290,7 @@
start: 0x909460
vram: 0x80A419C0
follows_vram: ovl_00909410
+ compress: True
subsegments:
- [0x909460, data, overlays/ovl_00909410_reloc]
@@ -5657,6 +6299,7 @@
start: 0x909480
vram: 0x80A419E0
follows_vram: ovl_00909410_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x909480, data, overlays/ovl_00909480]
@@ -5665,6 +6308,7 @@
start: 0x9094D0
vram: 0x80A41A30
follows_vram: ovl_00909480
+ compress: True
subsegments:
- [0x9094D0, data, overlays/ovl_00909480_reloc]
@@ -5673,6 +6317,7 @@
start: 0x9094F0
vram: 0x80A41A50
follows_vram: ovl_00909480_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9094F0, data, overlays/ovl_009094F0]
@@ -5681,6 +6326,7 @@
start: 0x909540
vram: 0x80A41AA0
follows_vram: ovl_009094F0
+ compress: True
subsegments:
- [0x909540, data, overlays/ovl_009094F0_reloc]
@@ -5689,6 +6335,7 @@
start: 0x909560
vram: 0x80A41AC0
follows_vram: ovl_009094F0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x909560, data, overlays/ovl_00909560]
@@ -5697,6 +6344,7 @@
start: 0x9095B0
vram: 0x80A41B10
follows_vram: ovl_00909560
+ compress: True
subsegments:
- [0x9095B0, data, overlays/ovl_00909560_reloc]
@@ -5705,6 +6353,7 @@
start: 0x9095D0
vram: 0x80A41B30
follows_vram: ovl_00909560_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9095D0, asm, overlays/ovl_009095D0]
@@ -5714,6 +6363,7 @@
start: 0x9096B0
vram: 0x80A41C10
follows_vram: ovl_009095D0
+ compress: True
subsegments:
- [0x9096B0, data, overlays/ovl_009095D0_reloc]
@@ -5722,6 +6372,7 @@
start: 0x9096E0
vram: 0x80A41C40
follows_vram: ovl_009095D0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9096E0, asm, overlays/ovl_009096E0]
@@ -5731,6 +6382,7 @@
start: 0x9097D0
vram: 0x80A41D30
follows_vram: ovl_009096E0
+ compress: True
subsegments:
- [0x9097D0, data, overlays/ovl_009096E0_reloc]
@@ -5739,6 +6391,7 @@
start: 0x9097F0
vram: 0x80A41D50
follows_vram: ovl_009096E0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9097F0, asm, overlays/ovl_009097F0]
@@ -5748,6 +6401,7 @@
start: 0x9098D0
vram: 0x80A41E30
follows_vram: ovl_009097F0
+ compress: True
subsegments:
- [0x9098D0, data, overlays/ovl_009097F0_reloc]
@@ -5756,6 +6410,7 @@
start: 0x909900
vram: 0x80A41E60
follows_vram: ovl_009097F0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x909900, data, overlays/ovl_00909900]
@@ -5764,6 +6419,7 @@
start: 0x909950
vram: 0x80A41EB0
follows_vram: ovl_00909900
+ compress: True
subsegments:
- [0x909950, data, overlays/ovl_00909900_reloc]
@@ -5772,6 +6428,7 @@
start: 0x909970
vram: 0x80A41ED0
follows_vram: ovl_00909900_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x909970, data, overlays/ovl_00909970]
@@ -5780,6 +6437,7 @@
start: 0x9099C0
vram: 0x80A41F20
follows_vram: ovl_00909970
+ compress: True
subsegments:
- [0x9099C0, data, overlays/ovl_00909970_reloc]
@@ -5788,6 +6446,7 @@
start: 0x9099E0
vram: 0x80A41F40
follows_vram: ovl_00909970_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9099E0, data, overlays/ovl_009099E0]
@@ -5796,6 +6455,7 @@
start: 0x909A30
vram: 0x80A41F90
follows_vram: ovl_009099E0
+ compress: True
subsegments:
- [0x909A30, data, overlays/ovl_009099E0_reloc]
@@ -5804,6 +6464,7 @@
start: 0x909A50
vram: 0x80A41FB0
follows_vram: ovl_009099E0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x909A50, asm, overlays/ovl_00909A50]
@@ -5813,6 +6474,7 @@
start: 0x909B30
vram: 0x80A42090
follows_vram: ovl_00909A50
+ compress: True
subsegments:
- [0x909B30, data, overlays/ovl_00909A50_reloc]
@@ -5821,6 +6483,7 @@
start: 0x909B60
vram: 0x80A420C0
follows_vram: ovl_00909A50_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x909B60, asm, overlays/ovl_00909B60]
@@ -5830,6 +6493,7 @@
start: 0x909EC0
vram: 0x80A42420
follows_vram: ovl_00909B60
+ compress: True
subsegments:
- [0x909EC0, data, overlays/ovl_00909B60_reloc]
@@ -5838,6 +6502,7 @@
start: 0x909EF0
vram: 0x80A42450
follows_vram: ovl_00909B60_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x909EF0, data, overlays/ovl_00909EF0]
@@ -5846,6 +6511,7 @@
start: 0x909F40
vram: 0x80A424A0
follows_vram: ovl_00909EF0
+ compress: True
subsegments:
- [0x909F40, data, overlays/ovl_00909EF0_reloc]
@@ -5854,6 +6520,7 @@
start: 0x909F60
vram: 0x80A424C0
follows_vram: ovl_00909EF0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x909F60, data, overlays/ovl_00909F60]
@@ -5862,6 +6529,7 @@
start: 0x909FB0
vram: 0x80A42510
follows_vram: ovl_00909F60
+ compress: True
subsegments:
- [0x909FB0, data, overlays/ovl_00909F60_reloc]
@@ -5870,6 +6538,7 @@
start: 0x909FD0
vram: 0x80A42530
follows_vram: ovl_00909F60_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x909FD0, data, overlays/ovl_00909FD0]
@@ -5878,6 +6547,7 @@
start: 0x90A020
vram: 0x80A42580
follows_vram: ovl_00909FD0
+ compress: True
subsegments:
- [0x90A020, data, overlays/ovl_00909FD0_reloc]
@@ -5886,6 +6556,7 @@
start: 0x90A040
vram: 0x80A425A0
follows_vram: ovl_00909FD0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90A040, asm, overlays/ovl_0090A040]
@@ -5895,6 +6566,7 @@
start: 0x90A3A0
vram: 0x80A42900
follows_vram: ovl_0090A040
+ compress: True
subsegments:
- [0x90A3A0, data, overlays/ovl_0090A040_reloc]
@@ -5903,6 +6575,7 @@
start: 0x90A3D0
vram: 0x80A42930
follows_vram: ovl_0090A040_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90A3D0, data, overlays/ovl_0090A3D0]
@@ -5911,6 +6584,7 @@
start: 0x90A420
vram: 0x80A42980
follows_vram: ovl_0090A3D0
+ compress: True
subsegments:
- [0x90A420, data, overlays/ovl_0090A3D0_reloc]
@@ -5919,6 +6593,7 @@
start: 0x90A440
vram: 0x80A429A0
follows_vram: ovl_0090A3D0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90A440, data, overlays/ovl_0090A440]
@@ -5927,6 +6602,7 @@
start: 0x90A490
vram: 0x80A429F0
follows_vram: ovl_0090A440
+ compress: True
subsegments:
- [0x90A490, data, overlays/ovl_0090A440_reloc]
@@ -5935,6 +6611,7 @@
start: 0x90A4B0
vram: 0x80A42A10
follows_vram: ovl_0090A440_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90A4B0, data, overlays/ovl_0090A4B0]
@@ -5943,6 +6620,7 @@
start: 0x90A500
vram: 0x80A42A60
follows_vram: ovl_0090A4B0
+ compress: True
subsegments:
- [0x90A500, data, overlays/ovl_0090A4B0_reloc]
@@ -5951,6 +6629,7 @@
start: 0x90A520
vram: 0x80A42A80
follows_vram: ovl_0090A4B0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90A520, asm, overlays/ovl_0090A520]
@@ -5961,6 +6640,7 @@
start: 0x90AD50
vram: 0x80A432B0
follows_vram: ovl_0090A520
+ compress: True
subsegments:
- [0x90AD50, data, overlays/ovl_0090A520_reloc]
@@ -5969,6 +6649,7 @@
start: 0x90ADB0
vram: 0x80A43310
follows_vram: ovl_0090A520_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90ADB0, data, overlays/ovl_0090ADB0]
@@ -5977,6 +6658,7 @@
start: 0x90AE00
vram: 0x80A43360
follows_vram: ovl_0090ADB0
+ compress: True
subsegments:
- [0x90AE00, data, overlays/ovl_0090ADB0_reloc]
@@ -5985,6 +6667,7 @@
start: 0x90AE20
vram: 0x80A43380
follows_vram: ovl_0090ADB0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90AE20, asm, overlays/ovl_0090AE20]
@@ -5994,6 +6677,7 @@
start: 0x90B180
vram: 0x80A436E0
follows_vram: ovl_0090AE20
+ compress: True
subsegments:
- [0x90B180, data, overlays/ovl_0090AE20_reloc]
@@ -6002,6 +6686,7 @@
start: 0x90B1B0
vram: 0x80A43710
follows_vram: ovl_0090AE20_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90B1B0, data, overlays/ovl_0090B1B0]
@@ -6010,6 +6695,7 @@
start: 0x90B200
vram: 0x80A43760
follows_vram: ovl_0090B1B0
+ compress: True
subsegments:
- [0x90B200, data, overlays/ovl_0090B1B0_reloc]
@@ -6018,6 +6704,7 @@
start: 0x90B220
vram: 0x80A43780
follows_vram: ovl_0090B1B0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90B220, data, overlays/ovl_0090B220]
@@ -6026,6 +6713,7 @@
start: 0x90B270
vram: 0x80A437D0
follows_vram: ovl_0090B220
+ compress: True
subsegments:
- [0x90B270, data, overlays/ovl_0090B220_reloc]
@@ -6034,6 +6722,7 @@
start: 0x90B290
vram: 0x80A437F0
follows_vram: ovl_0090B220_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90B290, data, overlays/ovl_0090B290]
@@ -6042,6 +6731,7 @@
start: 0x90B2E0
vram: 0x80A43840
follows_vram: ovl_0090B290
+ compress: True
subsegments:
- [0x90B2E0, data, overlays/ovl_0090B290_reloc]
@@ -6050,6 +6740,7 @@
start: 0x90B300
vram: 0x80A43860
follows_vram: ovl_0090B290_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90B300, data, overlays/ovl_0090B300]
@@ -6058,6 +6749,7 @@
start: 0x90B350
vram: 0x80A438B0
follows_vram: ovl_0090B300
+ compress: True
subsegments:
- [0x90B350, data, overlays/ovl_0090B300_reloc]
@@ -6066,6 +6758,7 @@
start: 0x90B370
vram: 0x80A438D0
follows_vram: ovl_0090B300_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90B370, data, overlays/ovl_0090B370]
@@ -6074,6 +6767,7 @@
start: 0x90B3C0
vram: 0x80A43920
follows_vram: ovl_0090B370
+ compress: True
subsegments:
- [0x90B3C0, data, overlays/ovl_0090B370_reloc]
@@ -6082,6 +6776,7 @@
start: 0x90B3E0
vram: 0x80A43940
follows_vram: ovl_0090B370_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90B3E0, data, overlays/ovl_0090B3E0]
@@ -6090,6 +6785,7 @@
start: 0x90B430
vram: 0x80A43990
follows_vram: ovl_0090B3E0
+ compress: True
subsegments:
- [0x90B430, data, overlays/ovl_0090B3E0_reloc]
@@ -6098,6 +6794,7 @@
start: 0x90B450
vram: 0x80A439B0
follows_vram: ovl_0090B3E0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90B450, data, overlays/ovl_0090B450]
@@ -6106,6 +6803,7 @@
start: 0x90B4A0
vram: 0x80A43A00
follows_vram: ovl_0090B450
+ compress: True
subsegments:
- [0x90B4A0, data, overlays/ovl_0090B450_reloc]
@@ -6114,6 +6812,7 @@
start: 0x90B4C0
vram: 0x80A43A20
follows_vram: ovl_0090B450_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90B4C0, data, overlays/ovl_0090B4C0]
@@ -6122,6 +6821,7 @@
start: 0x90B510
vram: 0x80A43A70
follows_vram: ovl_0090B4C0
+ compress: True
subsegments:
- [0x90B510, data, overlays/ovl_0090B4C0_reloc]
@@ -6130,6 +6830,7 @@
start: 0x90B530
vram: 0x80A43A90
follows_vram: ovl_0090B4C0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90B530, data, overlays/ovl_0090B530]
@@ -6138,6 +6839,7 @@
start: 0x90B580
vram: 0x80A43AE0
follows_vram: ovl_0090B530
+ compress: True
subsegments:
- [0x90B580, data, overlays/ovl_0090B530_reloc]
@@ -6146,6 +6848,7 @@
start: 0x90B5A0
vram: 0x80A43B00
follows_vram: ovl_0090B530_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90B5A0, data, overlays/ovl_0090B5A0]
@@ -6154,6 +6857,7 @@
start: 0x90B5F0
vram: 0x80A43B50
follows_vram: ovl_0090B5A0
+ compress: True
subsegments:
- [0x90B5F0, data, overlays/ovl_0090B5A0_reloc]
@@ -6162,6 +6866,7 @@
start: 0x90B610
vram: 0x80A43B70
follows_vram: ovl_0090B5A0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90B610, asm, overlays/ovl_0090B610]
@@ -6171,6 +6876,7 @@
start: 0x90B970
vram: 0x80A43ED0
follows_vram: ovl_0090B610
+ compress: True
subsegments:
- [0x90B970, data, overlays/ovl_0090B610_reloc]
@@ -6179,6 +6885,7 @@
start: 0x90B9A0
vram: 0x80A43F00
follows_vram: ovl_0090B610_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90B9A0, data, overlays/ovl_0090B9A0]
@@ -6187,6 +6894,7 @@
start: 0x90B9F0
vram: 0x80A43F50
follows_vram: ovl_0090B9A0
+ compress: True
subsegments:
- [0x90B9F0, data, overlays/ovl_0090B9A0_reloc]
@@ -6195,6 +6903,7 @@
start: 0x90BA10
vram: 0x80A43F70
follows_vram: ovl_0090B9A0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90BA10, data, overlays/ovl_0090BA10]
@@ -6203,6 +6912,7 @@
start: 0x90BA60
vram: 0x80A43FC0
follows_vram: ovl_0090BA10
+ compress: True
subsegments:
- [0x90BA60, data, overlays/ovl_0090BA10_reloc]
@@ -6211,6 +6921,7 @@
start: 0x90BA80
vram: 0x80A43FE0
follows_vram: ovl_0090BA10_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90BA80, data, overlays/ovl_0090BA80]
@@ -6219,6 +6930,7 @@
start: 0x90BAD0
vram: 0x80A44030
follows_vram: ovl_0090BA80
+ compress: True
subsegments:
- [0x90BAD0, data, overlays/ovl_0090BA80_reloc]
@@ -6227,6 +6939,7 @@
start: 0x90BAF0
vram: 0x80A44050
follows_vram: ovl_0090BA80_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90BAF0, data, overlays/ovl_0090BAF0]
@@ -6235,6 +6948,7 @@
start: 0x90BB40
vram: 0x80A440A0
follows_vram: ovl_0090BAF0
+ compress: True
subsegments:
- [0x90BB40, data, overlays/ovl_0090BAF0_reloc]
@@ -6243,6 +6957,7 @@
start: 0x90BB60
vram: 0x80A440C0
follows_vram: ovl_0090BAF0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90BB60, asm, overlays/ovl_0090BB60]
@@ -6252,6 +6967,7 @@
start: 0x90BC40
vram: 0x80A441A0
follows_vram: ovl_0090BB60
+ compress: True
subsegments:
- [0x90BC40, data, overlays/ovl_0090BB60_reloc]
@@ -6260,6 +6976,7 @@
start: 0x90BC70
vram: 0x80A441D0
follows_vram: ovl_0090BB60_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90BC70, data, overlays/ovl_0090BC70]
@@ -6268,6 +6985,7 @@
start: 0x90BCC0
vram: 0x80A44220
follows_vram: ovl_0090BC70
+ compress: True
subsegments:
- [0x90BCC0, data, overlays/ovl_0090BC70_reloc]
@@ -6276,6 +6994,7 @@
start: 0x90BCE0
vram: 0x80A44240
follows_vram: ovl_0090BC70_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90BCE0, asm, overlays/ovl_0090BCE0]
@@ -6285,6 +7004,7 @@
start: 0x90C040
vram: 0x80A445A0
follows_vram: ovl_0090BCE0
+ compress: True
subsegments:
- [0x90C040, data, overlays/ovl_0090BCE0_reloc]
@@ -6293,6 +7013,7 @@
start: 0x90C070
vram: 0x80A445D0
follows_vram: ovl_0090BCE0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90C070, data, overlays/ovl_0090C070]
@@ -6301,6 +7022,7 @@
start: 0x90C0C0
vram: 0x80A44620
follows_vram: ovl_0090C070
+ compress: True
subsegments:
- [0x90C0C0, data, overlays/ovl_0090C070_reloc]
@@ -6309,6 +7031,7 @@
start: 0x90C0E0
vram: 0x80A44640
follows_vram: ovl_0090C070_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90C0E0, asm, overlays/ovl_0090C0E0]
@@ -6318,6 +7041,7 @@
start: 0x90C250
vram: 0x80A447B0
follows_vram: ovl_0090C0E0
+ compress: True
subsegments:
- [0x90C250, data, overlays/ovl_0090C0E0_reloc]
@@ -6326,6 +7050,7 @@
start: 0x90C280
vram: 0x80A447E0
follows_vram: ovl_0090C0E0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90C280, asm, overlays/ovl_0090C280]
@@ -6335,6 +7060,7 @@
start: 0x90C330
vram: 0x80A44890
follows_vram: ovl_0090C280
+ compress: True
subsegments:
- [0x90C330, data, overlays/ovl_0090C280_reloc]
@@ -6343,6 +7069,7 @@
start: 0x90C360
vram: 0x80A448C0
follows_vram: ovl_0090C280_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90C360, asm, overlays/ovl_0090C360]
@@ -6352,6 +7079,7 @@
start: 0x90C440
vram: 0x80A449A0
follows_vram: ovl_0090C360
+ compress: True
subsegments:
- [0x90C440, data, overlays/ovl_0090C360_reloc]
@@ -6360,6 +7088,7 @@
start: 0x90C470
vram: 0x80A449D0
follows_vram: ovl_0090C360_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90C470, asm, overlays/ovl_0090C470]
@@ -6369,6 +7098,7 @@
start: 0x90C550
vram: 0x80A44AB0
follows_vram: ovl_0090C470
+ compress: True
subsegments:
- [0x90C550, data, overlays/ovl_0090C470_reloc]
@@ -6377,6 +7107,7 @@
start: 0x90C580
vram: 0x80A44AE0
follows_vram: ovl_0090C470_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90C580, asm, overlays/ovl_0090C580]
@@ -6386,6 +7117,7 @@
start: 0x90C660
vram: 0x80A44BC0
follows_vram: ovl_0090C580
+ compress: True
subsegments:
- [0x90C660, data, overlays/ovl_0090C580_reloc]
@@ -6394,6 +7126,7 @@
start: 0x90C690
vram: 0x80A44BF0
follows_vram: ovl_0090C580_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90C690, data, overlays/ovl_0090C690]
@@ -6402,6 +7135,7 @@
start: 0x90C6E0
vram: 0x80A44C40
follows_vram: ovl_0090C690
+ compress: True
subsegments:
- [0x90C6E0, data, overlays/ovl_0090C690_reloc]
@@ -6410,6 +7144,7 @@
start: 0x90C700
vram: 0x80A44C60
follows_vram: ovl_0090C690_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90C700, data, overlays/ovl_0090C700]
@@ -6418,6 +7153,7 @@
start: 0x90C750
vram: 0x80A44CB0
follows_vram: ovl_0090C700
+ compress: True
subsegments:
- [0x90C750, data, overlays/ovl_0090C700_reloc]
@@ -6426,6 +7162,7 @@
start: 0x90C770
vram: 0x80A44CD0
follows_vram: ovl_0090C700_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90C770, data, overlays/ovl_0090C770]
@@ -6434,6 +7171,7 @@
start: 0x90C7C0
vram: 0x80A44D20
follows_vram: ovl_0090C770
+ compress: True
subsegments:
- [0x90C7C0, data, overlays/ovl_0090C770_reloc]
@@ -6442,6 +7180,7 @@
start: 0x90C7E0
vram: 0x80A44D40
follows_vram: ovl_0090C770_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90C7E0, data, overlays/ovl_0090C7E0]
@@ -6450,6 +7189,7 @@
start: 0x90C830
vram: 0x80A44D90
follows_vram: ovl_0090C7E0
+ compress: True
subsegments:
- [0x90C830, data, overlays/ovl_0090C7E0_reloc]
@@ -6458,6 +7198,7 @@
start: 0x90C850
vram: 0x80A44DB0
follows_vram: ovl_0090C7E0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90C850, asm, overlays/ovl_0090C850]
@@ -6467,6 +7208,7 @@
start: 0x90C930
vram: 0x80A44E90
follows_vram: ovl_0090C850
+ compress: True
subsegments:
- [0x90C930, data, overlays/ovl_0090C850_reloc]
@@ -6475,6 +7217,7 @@
start: 0x90C960
vram: 0x80A44EC0
follows_vram: ovl_0090C850_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90C960, data, overlays/ovl_0090C960]
@@ -6483,6 +7226,7 @@
start: 0x90C9B0
vram: 0x80A44F10
follows_vram: ovl_0090C960
+ compress: True
subsegments:
- [0x90C9B0, data, overlays/ovl_0090C960_reloc]
@@ -6491,6 +7235,7 @@
start: 0x90C9D0
vram: 0x80A44F30
follows_vram: ovl_0090C960_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90C9D0, asm, overlays/ovl_0090C9D0]
@@ -6500,6 +7245,7 @@
start: 0x90CAC0
vram: 0x80A45020
follows_vram: ovl_0090C9D0
+ compress: True
subsegments:
- [0x90CAC0, data, overlays/ovl_0090C9D0_reloc]
@@ -6508,6 +7254,7 @@
start: 0x90CAE0
vram: 0x80A45040
follows_vram: ovl_0090C9D0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90CAE0, asm, overlays/ovl_0090CAE0]
@@ -6517,6 +7264,7 @@
start: 0x90CE70
vram: 0x80A453D0
follows_vram: ovl_0090CAE0
+ compress: True
subsegments:
- [0x90CE70, data, overlays/ovl_0090CAE0_reloc]
@@ -6525,6 +7273,7 @@
start: 0x90CEA0
vram: 0x80A45400
follows_vram: ovl_0090CAE0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90CEA0, asm, overlays/ovl_0090CEA0]
@@ -6534,6 +7283,7 @@
start: 0x90CF80
vram: 0x80A454E0
follows_vram: ovl_0090CEA0
+ compress: True
subsegments:
- [0x90CF80, data, overlays/ovl_0090CEA0_reloc]
@@ -6542,6 +7292,7 @@
start: 0x90CFB0
vram: 0x80A45510
follows_vram: ovl_0090CEA0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90CFB0, asm, overlays/ovl_0090CFB0]
@@ -6552,6 +7303,7 @@
start: 0x90D440
vram: 0x80A459A0
follows_vram: ovl_0090CFB0
+ compress: True
subsegments:
- [0x90D440, data, overlays/ovl_0090CFB0_reloc]
@@ -6560,6 +7312,7 @@
start: 0x90D480
vram: 0x80A459E0
follows_vram: ovl_0090CFB0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90D480, data, overlays/ovl_0090D480]
@@ -6568,6 +7321,7 @@
start: 0x90D4D0
vram: 0x80A45A30
follows_vram: ovl_0090D480
+ compress: True
subsegments:
- [0x90D4D0, data, overlays/ovl_0090D480_reloc]
@@ -6576,6 +7330,7 @@
start: 0x90D4F0
vram: 0x80A45A50
follows_vram: ovl_0090D480_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90D4F0, data, overlays/ovl_0090D4F0]
@@ -6584,6 +7339,7 @@
start: 0x90D540
vram: 0x80A45AA0
follows_vram: ovl_0090D4F0
+ compress: True
subsegments:
- [0x90D540, data, overlays/ovl_0090D4F0_reloc]
@@ -6592,6 +7348,7 @@
start: 0x90D560
vram: 0x80A45AC0
follows_vram: ovl_0090D4F0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90D560, data, overlays/ovl_0090D560]
@@ -6600,6 +7357,7 @@
start: 0x90D5B0
vram: 0x80A45B10
follows_vram: ovl_0090D560
+ compress: True
subsegments:
- [0x90D5B0, data, overlays/ovl_0090D560_reloc]
@@ -6608,6 +7366,7 @@
start: 0x90D5D0
vram: 0x80A45B30
follows_vram: ovl_0090D560_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90D5D0, data, overlays/ovl_0090D5D0]
@@ -6616,6 +7375,7 @@
start: 0x90D620
vram: 0x80A45B80
follows_vram: ovl_0090D5D0
+ compress: True
subsegments:
- [0x90D620, data, overlays/ovl_0090D5D0_reloc]
@@ -6624,6 +7384,7 @@
start: 0x90D640
vram: 0x80A45BA0
follows_vram: ovl_0090D5D0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90D640, data, overlays/ovl_0090D640]
@@ -6632,6 +7393,7 @@
start: 0x90D690
vram: 0x80A45BF0
follows_vram: ovl_0090D640
+ compress: True
subsegments:
- [0x90D690, data, overlays/ovl_0090D640_reloc]
@@ -6640,6 +7402,7 @@
start: 0x90D6B0
vram: 0x80A45C10
follows_vram: ovl_0090D640_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90D6B0, data, overlays/ovl_0090D6B0]
@@ -6648,6 +7411,7 @@
start: 0x90D700
vram: 0x80A45C60
follows_vram: ovl_0090D6B0
+ compress: True
subsegments:
- [0x90D700, data, overlays/ovl_0090D6B0_reloc]
@@ -6656,6 +7420,7 @@
start: 0x90D720
vram: 0x80A45C80
follows_vram: ovl_0090D6B0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90D720, asm, overlays/ovl_0090D720]
@@ -6665,6 +7430,7 @@
start: 0x90DB60
vram: 0x80A460C0
follows_vram: ovl_0090D720
+ compress: True
subsegments:
- [0x90DB60, data, overlays/ovl_0090D720_reloc]
@@ -6673,6 +7439,7 @@
start: 0x90DBA0
vram: 0x80A46100
follows_vram: ovl_0090D720_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90DBA0, data, overlays/ovl_0090DBA0]
@@ -6681,6 +7448,7 @@
start: 0x90DBF0
vram: 0x80A46150
follows_vram: ovl_0090DBA0
+ compress: True
subsegments:
- [0x90DBF0, data, overlays/ovl_0090DBA0_reloc]
@@ -6689,6 +7457,7 @@
start: 0x90DC10
vram: 0x80A46170
follows_vram: ovl_0090DBA0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90DC10, data, overlays/ovl_0090DC10]
@@ -6697,6 +7466,7 @@
start: 0x90DC60
vram: 0x80A461C0
follows_vram: ovl_0090DC10
+ compress: True
subsegments:
- [0x90DC60, data, overlays/ovl_0090DC10_reloc]
@@ -6705,6 +7475,7 @@
start: 0x90DC80
vram: 0x80A461E0
follows_vram: ovl_0090DC10_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90DC80, data, overlays/ovl_0090DC80]
@@ -6713,6 +7484,7 @@
start: 0x90DCD0
vram: 0x80A46230
follows_vram: ovl_0090DC80
+ compress: True
subsegments:
- [0x90DCD0, data, overlays/ovl_0090DC80_reloc]
@@ -6721,6 +7493,7 @@
start: 0x90DCF0
vram: 0x80A46250
follows_vram: ovl_0090DC80_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90DCF0, data, overlays/ovl_0090DCF0]
@@ -6729,6 +7502,7 @@
start: 0x90DD40
vram: 0x80A462A0
follows_vram: ovl_0090DCF0
+ compress: True
subsegments:
- [0x90DD40, data, overlays/ovl_0090DCF0_reloc]
@@ -6737,6 +7511,7 @@
start: 0x90DD60
vram: 0x80A462C0
follows_vram: ovl_0090DCF0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90DD60, data, overlays/ovl_0090DD60]
@@ -6745,6 +7520,7 @@
start: 0x90DDB0
vram: 0x80A46310
follows_vram: ovl_0090DD60
+ compress: True
subsegments:
- [0x90DDB0, data, overlays/ovl_0090DD60_reloc]
@@ -6753,6 +7529,7 @@
start: 0x90DDD0
vram: 0x80A46330
follows_vram: ovl_0090DD60_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90DDD0, data, overlays/ovl_0090DDD0]
@@ -6761,6 +7538,7 @@
start: 0x90DE20
vram: 0x80A46380
follows_vram: ovl_0090DDD0
+ compress: True
subsegments:
- [0x90DE20, data, overlays/ovl_0090DDD0_reloc]
@@ -6769,6 +7547,7 @@
start: 0x90DE40
vram: 0x80A463A0
follows_vram: ovl_0090DDD0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90DE40, data, overlays/ovl_0090DE40]
@@ -6777,6 +7556,7 @@
start: 0x90DE90
vram: 0x80A463F0
follows_vram: ovl_0090DE40
+ compress: True
subsegments:
- [0x90DE90, data, overlays/ovl_0090DE40_reloc]
@@ -6785,6 +7565,7 @@
start: 0x90DEB0
vram: 0x80A46410
follows_vram: ovl_0090DE40_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90DEB0, data, overlays/ovl_0090DEB0]
@@ -6793,6 +7574,7 @@
start: 0x90DF00
vram: 0x80A46460
follows_vram: ovl_0090DEB0
+ compress: True
subsegments:
- [0x90DF00, data, overlays/ovl_0090DEB0_reloc]
@@ -6801,6 +7583,7 @@
start: 0x90DF20
vram: 0x80A46480
follows_vram: ovl_0090DEB0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90DF20, data, overlays/ovl_0090DF20]
@@ -6809,6 +7592,7 @@
start: 0x90DF70
vram: 0x80A464D0
follows_vram: ovl_0090DF20
+ compress: True
subsegments:
- [0x90DF70, data, overlays/ovl_0090DF20_reloc]
@@ -6817,6 +7601,7 @@
start: 0x90DF90
vram: 0x80A464F0
follows_vram: ovl_0090DF20_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90DF90, data, overlays/ovl_0090DF90]
@@ -6825,6 +7610,7 @@
start: 0x90DFE0
vram: 0x80A46540
follows_vram: ovl_0090DF90
+ compress: True
subsegments:
- [0x90DFE0, data, overlays/ovl_0090DF90_reloc]
@@ -6833,6 +7619,7 @@
start: 0x90E000
vram: 0x80A46560
follows_vram: ovl_0090DF90_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90E000, data, overlays/ovl_0090E000]
@@ -6841,6 +7628,7 @@
start: 0x90E050
vram: 0x80A465B0
follows_vram: ovl_0090E000
+ compress: True
subsegments:
- [0x90E050, data, overlays/ovl_0090E000_reloc]
@@ -6849,6 +7637,7 @@
start: 0x90E070
vram: 0x80A465D0
follows_vram: ovl_0090E000_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90E070, data, overlays/ovl_0090E070]
@@ -6857,6 +7646,7 @@
start: 0x90E0C0
vram: 0x80A46620
follows_vram: ovl_0090E070
+ compress: True
subsegments:
- [0x90E0C0, data, overlays/ovl_0090E070_reloc]
@@ -6865,6 +7655,7 @@
start: 0x90E0E0
vram: 0x80A46640
follows_vram: ovl_0090E070_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90E0E0, data, overlays/ovl_0090E0E0]
@@ -6873,6 +7664,7 @@
start: 0x90E130
vram: 0x80A46690
follows_vram: ovl_0090E0E0
+ compress: True
subsegments:
- [0x90E130, data, overlays/ovl_0090E0E0_reloc]
@@ -6881,6 +7673,7 @@
start: 0x90E150
vram: 0x80A466B0
follows_vram: ovl_0090E0E0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90E150, data, overlays/ovl_0090E150]
@@ -6889,6 +7682,7 @@
start: 0x90E1A0
vram: 0x80A46700
follows_vram: ovl_0090E150
+ compress: True
subsegments:
- [0x90E1A0, data, overlays/ovl_0090E150_reloc]
@@ -6897,6 +7691,7 @@
start: 0x90E1C0
vram: 0x80A46720
follows_vram: ovl_0090E150_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90E1C0, data, overlays/ovl_0090E1C0]
@@ -6905,6 +7700,7 @@
start: 0x90E210
vram: 0x80A46770
follows_vram: ovl_0090E1C0
+ compress: True
subsegments:
- [0x90E210, data, overlays/ovl_0090E1C0_reloc]
@@ -6913,6 +7709,7 @@
start: 0x90E230
vram: 0x80A46790
follows_vram: ovl_0090E1C0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90E230, data, overlays/ovl_0090E230]
@@ -6921,6 +7718,7 @@
start: 0x90E280
vram: 0x80A467E0
follows_vram: ovl_0090E230
+ compress: True
subsegments:
- [0x90E280, data, overlays/ovl_0090E230_reloc]
@@ -6929,6 +7727,7 @@
start: 0x90E2A0
vram: 0x80A46800
follows_vram: ovl_0090E230_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90E2A0, data, overlays/ovl_0090E2A0]
@@ -6937,6 +7736,7 @@
start: 0x90E2F0
vram: 0x80A46850
follows_vram: ovl_0090E2A0
+ compress: True
subsegments:
- [0x90E2F0, data, overlays/ovl_0090E2A0_reloc]
@@ -6945,6 +7745,7 @@
start: 0x90E310
vram: 0x80A46870
follows_vram: ovl_0090E2A0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90E310, data, overlays/ovl_0090E310]
@@ -6953,6 +7754,7 @@
start: 0x90E360
vram: 0x80A468C0
follows_vram: ovl_0090E310
+ compress: True
subsegments:
- [0x90E360, data, overlays/ovl_0090E310_reloc]
@@ -6961,6 +7763,7 @@
start: 0x90E380
vram: 0x80A468E0
follows_vram: ovl_0090E310_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90E380, data, overlays/ovl_0090E380]
@@ -6969,6 +7772,7 @@
start: 0x90E3D0
vram: 0x80A46930
follows_vram: ovl_0090E380
+ compress: True
subsegments:
- [0x90E3D0, data, overlays/ovl_0090E380_reloc]
@@ -6977,6 +7781,7 @@
start: 0x90E3F0
vram: 0x80A46950
follows_vram: ovl_0090E380_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90E3F0, data, overlays/ovl_0090E3F0]
@@ -6985,6 +7790,7 @@
start: 0x90E440
vram: 0x80A469A0
follows_vram: ovl_0090E3F0
+ compress: True
subsegments:
- [0x90E440, data, overlays/ovl_0090E3F0_reloc]
@@ -6993,6 +7799,7 @@
start: 0x90E460
vram: 0x80A469C0
follows_vram: ovl_0090E3F0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90E460, asm, overlays/ovl_0090E460]
@@ -7003,6 +7810,7 @@
start: 0x90E820
vram: 0x80A46D80
follows_vram: ovl_0090E460
+ compress: True
subsegments:
- [0x90E820, data, overlays/ovl_0090E460_reloc]
@@ -7011,6 +7819,7 @@
start: 0x90E880
vram: 0x80A46DE0
follows_vram: ovl_0090E460_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90E880, data, overlays/ovl_0090E880]
@@ -7019,6 +7828,7 @@
start: 0x90E8D0
vram: 0x80A46E30
follows_vram: ovl_0090E880
+ compress: True
subsegments:
- [0x90E8D0, data, overlays/ovl_0090E880_reloc]
@@ -7027,6 +7837,7 @@
start: 0x90E8F0
vram: 0x80A46E50
follows_vram: ovl_0090E880_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90E8F0, data, overlays/ovl_0090E8F0]
@@ -7035,6 +7846,7 @@
start: 0x90E940
vram: 0x80A46EA0
follows_vram: ovl_0090E8F0
+ compress: True
subsegments:
- [0x90E940, data, overlays/ovl_0090E8F0_reloc]
@@ -7043,6 +7855,7 @@
start: 0x90E960
vram: 0x80A46EC0
follows_vram: ovl_0090E8F0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90E960, data, overlays/ovl_0090E960]
@@ -7051,6 +7864,7 @@
start: 0x90E9B0
vram: 0x80A46F10
follows_vram: ovl_0090E960
+ compress: True
subsegments:
- [0x90E9B0, data, overlays/ovl_0090E960_reloc]
@@ -7059,6 +7873,7 @@
start: 0x90E9D0
vram: 0x80A46F30
follows_vram: ovl_0090E960_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90E9D0, data, overlays/ovl_0090E9D0]
@@ -7067,6 +7882,7 @@
start: 0x90EA20
vram: 0x80A46F80
follows_vram: ovl_0090E9D0
+ compress: True
subsegments:
- [0x90EA20, data, overlays/ovl_0090E9D0_reloc]
@@ -7075,6 +7891,7 @@
start: 0x90EA40
vram: 0x80A46FA0
follows_vram: ovl_0090E9D0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90EA40, data, overlays/ovl_0090EA40]
@@ -7083,6 +7900,7 @@
start: 0x90EA90
vram: 0x80A46FF0
follows_vram: ovl_0090EA40
+ compress: True
subsegments:
- [0x90EA90, data, overlays/ovl_0090EA40_reloc]
@@ -7091,6 +7909,7 @@
start: 0x90EAB0
vram: 0x80A47010
follows_vram: ovl_0090EA40_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90EAB0, data, overlays/ovl_0090EAB0]
@@ -7099,6 +7918,7 @@
start: 0x90EB00
vram: 0x80A47060
follows_vram: ovl_0090EAB0
+ compress: True
subsegments:
- [0x90EB00, data, overlays/ovl_0090EAB0_reloc]
@@ -7107,6 +7927,7 @@
start: 0x90EB20
vram: 0x80A47080
follows_vram: ovl_0090EAB0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90EB20, data, overlays/ovl_0090EB20]
@@ -7115,6 +7936,7 @@
start: 0x90EB70
vram: 0x80A470D0
follows_vram: ovl_0090EB20
+ compress: True
subsegments:
- [0x90EB70, data, overlays/ovl_0090EB20_reloc]
@@ -7123,6 +7945,7 @@
start: 0x90EB90
vram: 0x80A470F0
follows_vram: ovl_0090EB20_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90EB90, data, overlays/ovl_0090EB90]
@@ -7131,6 +7954,7 @@
start: 0x90EBE0
vram: 0x80A47140
follows_vram: ovl_0090EB90
+ compress: True
subsegments:
- [0x90EBE0, data, overlays/ovl_0090EB90_reloc]
@@ -7139,6 +7963,7 @@
start: 0x90EC00
vram: 0x80A47160
follows_vram: ovl_0090EB90_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90EC00, data, overlays/ovl_0090EC00]
@@ -7147,6 +7972,7 @@
start: 0x90EC50
vram: 0x80A471B0
follows_vram: ovl_0090EC00
+ compress: True
subsegments:
- [0x90EC50, data, overlays/ovl_0090EC00_reloc]
@@ -7155,6 +7981,7 @@
start: 0x90EC70
vram: 0x80A471D0
follows_vram: ovl_0090EC00_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90EC70, data, overlays/ovl_0090EC70]
@@ -7163,6 +7990,7 @@
start: 0x90ECC0
vram: 0x80A47220
follows_vram: ovl_0090EC70
+ compress: True
subsegments:
- [0x90ECC0, data, overlays/ovl_0090EC70_reloc]
@@ -7171,6 +7999,7 @@
start: 0x90ECE0
vram: 0x80A47240
follows_vram: ovl_0090EC70_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90ECE0, data, overlays/ovl_0090ECE0]
@@ -7179,6 +8008,7 @@
start: 0x90ED30
vram: 0x80A47290
follows_vram: ovl_0090ECE0
+ compress: True
subsegments:
- [0x90ED30, data, overlays/ovl_0090ECE0_reloc]
@@ -7187,6 +8017,7 @@
start: 0x90ED50
vram: 0x80A472B0
follows_vram: ovl_0090ECE0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90ED50, data, overlays/ovl_0090ED50]
@@ -7195,6 +8026,7 @@
start: 0x90EDA0
vram: 0x80A47300
follows_vram: ovl_0090ED50
+ compress: True
subsegments:
- [0x90EDA0, data, overlays/ovl_0090ED50_reloc]
@@ -7203,6 +8035,7 @@
start: 0x90EDC0
vram: 0x80A47320
follows_vram: ovl_0090ED50_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90EDC0, data, overlays/ovl_0090EDC0]
@@ -7211,6 +8044,7 @@
start: 0x90EE10
vram: 0x80A47370
follows_vram: ovl_0090EDC0
+ compress: True
subsegments:
- [0x90EE10, data, overlays/ovl_0090EDC0_reloc]
@@ -7219,6 +8053,7 @@
start: 0x90EE30
vram: 0x80A47390
follows_vram: ovl_0090EDC0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90EE30, data, overlays/ovl_0090EE30]
@@ -7227,6 +8062,7 @@
start: 0x90EE80
vram: 0x80A473E0
follows_vram: ovl_0090EE30
+ compress: True
subsegments:
- [0x90EE80, data, overlays/ovl_0090EE30_reloc]
@@ -7235,6 +8071,7 @@
start: 0x90EEA0
vram: 0x80A47400
follows_vram: ovl_0090EE30_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90EEA0, data, overlays/ovl_0090EEA0]
@@ -7243,6 +8080,7 @@
start: 0x90EEF0
vram: 0x80A47450
follows_vram: ovl_0090EEA0
+ compress: True
subsegments:
- [0x90EEF0, data, overlays/ovl_0090EEA0_reloc]
@@ -7251,6 +8089,7 @@
start: 0x90EF10
vram: 0x80A47470
follows_vram: ovl_0090EEA0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90EF10, data, overlays/ovl_0090EF10]
@@ -7259,6 +8098,7 @@
start: 0x90EF60
vram: 0x80A474C0
follows_vram: ovl_0090EF10
+ compress: True
subsegments:
- [0x90EF60, data, overlays/ovl_0090EF10_reloc]
@@ -7267,6 +8107,7 @@
start: 0x90EF80
vram: 0x80A474E0
follows_vram: ovl_0090EF10_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90EF80, data, overlays/ovl_0090EF80]
@@ -7275,6 +8116,7 @@
start: 0x90EFD0
vram: 0x80A47530
follows_vram: ovl_0090EF80
+ compress: True
subsegments:
- [0x90EFD0, data, overlays/ovl_0090EF80_reloc]
@@ -7283,6 +8125,7 @@
start: 0x90EFF0
vram: 0x80A47550
follows_vram: ovl_0090EF80_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90EFF0, data, overlays/ovl_0090EFF0]
@@ -7291,6 +8134,7 @@
start: 0x90F040
vram: 0x80A475A0
follows_vram: ovl_0090EFF0
+ compress: True
subsegments:
- [0x90F040, data, overlays/ovl_0090EFF0_reloc]
@@ -7299,6 +8143,7 @@
start: 0x90F060
vram: 0x80A475C0
follows_vram: ovl_0090EFF0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90F060, data, overlays/ovl_0090F060]
@@ -7307,6 +8152,7 @@
start: 0x90F0B0
vram: 0x80A47610
follows_vram: ovl_0090F060
+ compress: True
subsegments:
- [0x90F0B0, data, overlays/ovl_0090F060_reloc]
@@ -7315,6 +8161,7 @@
start: 0x90F0D0
vram: 0x80A47630
follows_vram: ovl_0090F060_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90F0D0, data, overlays/ovl_0090F0D0]
@@ -7323,6 +8170,7 @@
start: 0x90F120
vram: 0x80A47680
follows_vram: ovl_0090F0D0
+ compress: True
subsegments:
- [0x90F120, data, overlays/ovl_0090F0D0_reloc]
@@ -7331,6 +8179,7 @@
start: 0x90F140
vram: 0x80A476A0
follows_vram: ovl_0090F0D0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90F140, data, overlays/ovl_0090F140]
@@ -7339,6 +8188,7 @@
start: 0x90F190
vram: 0x80A476F0
follows_vram: ovl_0090F140
+ compress: True
subsegments:
- [0x90F190, data, overlays/ovl_0090F140_reloc]
@@ -7347,6 +8197,7 @@
start: 0x90F1B0
vram: 0x80A47710
follows_vram: ovl_0090F140_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90F1B0, data, overlays/ovl_0090F1B0]
@@ -7355,6 +8206,7 @@
start: 0x90F200
vram: 0x80A47760
follows_vram: ovl_0090F1B0
+ compress: True
subsegments:
- [0x90F200, data, overlays/ovl_0090F1B0_reloc]
@@ -7363,6 +8215,7 @@
start: 0x90F220
vram: 0x80A47780
follows_vram: ovl_0090F1B0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90F220, asm, overlays/ovl_0090F220]
@@ -7372,6 +8225,7 @@
start: 0x90F2D0
vram: 0x80A47830
follows_vram: ovl_0090F220
+ compress: True
subsegments:
- [0x90F2D0, data, overlays/ovl_0090F220_reloc]
@@ -7380,6 +8234,7 @@
start: 0x90F300
vram: 0x80A47860
follows_vram: ovl_0090F220_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90F300, data, overlays/ovl_0090F300]
@@ -7388,6 +8243,7 @@
start: 0x90F350
vram: 0x80A478B0
follows_vram: ovl_0090F300
+ compress: True
subsegments:
- [0x90F350, data, overlays/ovl_0090F300_reloc]
@@ -7396,6 +8252,7 @@
start: 0x90F370
vram: 0x80A478D0
follows_vram: ovl_0090F300_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90F370, data, overlays/ovl_0090F370]
@@ -7404,6 +8261,7 @@
start: 0x90F3C0
vram: 0x80A47920
follows_vram: ovl_0090F370
+ compress: True
subsegments:
- [0x90F3C0, data, overlays/ovl_0090F370_reloc]
@@ -7412,6 +8270,7 @@
start: 0x90F3E0
vram: 0x80A47940
follows_vram: ovl_0090F370_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90F3E0, data, overlays/ovl_0090F3E0]
@@ -7420,6 +8279,7 @@
start: 0x90F430
vram: 0x80A47990
follows_vram: ovl_0090F3E0
+ compress: True
subsegments:
- [0x90F430, data, overlays/ovl_0090F3E0_reloc]
@@ -7428,6 +8288,7 @@
start: 0x90F450
vram: 0x80A479B0
follows_vram: ovl_0090F3E0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90F450, data, overlays/ovl_0090F450]
@@ -7436,6 +8297,7 @@
start: 0x90F4A0
vram: 0x80A47A00
follows_vram: ovl_0090F450
+ compress: True
subsegments:
- [0x90F4A0, data, overlays/ovl_0090F450_reloc]
@@ -7444,6 +8306,7 @@
start: 0x90F4C0
vram: 0x80A47A20
follows_vram: ovl_0090F450_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90F4C0, data, overlays/ovl_0090F4C0]
@@ -7452,6 +8315,7 @@
start: 0x90F510
vram: 0x80A47A70
follows_vram: ovl_0090F4C0
+ compress: True
subsegments:
- [0x90F510, data, overlays/ovl_0090F4C0_reloc]
@@ -7460,6 +8324,7 @@
start: 0x90F530
vram: 0x80A47A90
follows_vram: ovl_0090F4C0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90F530, data, overlays/ovl_0090F530]
@@ -7468,6 +8333,7 @@
start: 0x90F580
vram: 0x80A47AE0
follows_vram: ovl_0090F530
+ compress: True
subsegments:
- [0x90F580, data, overlays/ovl_0090F530_reloc]
@@ -7476,6 +8342,7 @@
start: 0x90F5A0
vram: 0x80A47B00
follows_vram: ovl_0090F530_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90F5A0, data, overlays/ovl_0090F5A0]
@@ -7484,6 +8351,7 @@
start: 0x90F5F0
vram: 0x80A47B50
follows_vram: ovl_0090F5A0
+ compress: True
subsegments:
- [0x90F5F0, data, overlays/ovl_0090F5A0_reloc]
@@ -7492,6 +8360,7 @@
start: 0x90F610
vram: 0x80A47B70
follows_vram: ovl_0090F5A0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90F610, data, overlays/ovl_0090F610]
@@ -7500,6 +8369,7 @@
start: 0x90F660
vram: 0x80A47BC0
follows_vram: ovl_0090F610
+ compress: True
subsegments:
- [0x90F660, data, overlays/ovl_0090F610_reloc]
@@ -7508,6 +8378,7 @@
start: 0x90F680
vram: 0x80A47BE0
follows_vram: ovl_0090F610_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90F680, data, overlays/ovl_0090F680]
@@ -7516,6 +8387,7 @@
start: 0x90F6D0
vram: 0x80A47C30
follows_vram: ovl_0090F680
+ compress: True
subsegments:
- [0x90F6D0, data, overlays/ovl_0090F680_reloc]
@@ -7524,6 +8396,7 @@
start: 0x90F6F0
vram: 0x80A47C50
follows_vram: ovl_0090F680_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90F6F0, data, overlays/ovl_0090F6F0]
@@ -7532,6 +8405,7 @@
start: 0x90F740
vram: 0x80A47CA0
follows_vram: ovl_0090F6F0
+ compress: True
subsegments:
- [0x90F740, data, overlays/ovl_0090F6F0_reloc]
@@ -7540,6 +8414,7 @@
start: 0x90F760
vram: 0x80A47CC0
follows_vram: ovl_0090F6F0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90F760, data, overlays/ovl_0090F760]
@@ -7548,6 +8423,7 @@
start: 0x90F7B0
vram: 0x80A47D10
follows_vram: ovl_0090F760
+ compress: True
subsegments:
- [0x90F7B0, data, overlays/ovl_0090F760_reloc]
@@ -7556,6 +8432,7 @@
start: 0x90F7D0
vram: 0x80A47D30
follows_vram: ovl_0090F760_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90F7D0, data, overlays/ovl_0090F7D0]
@@ -7564,6 +8441,7 @@
start: 0x90F820
vram: 0x80A47D80
follows_vram: ovl_0090F7D0
+ compress: True
subsegments:
- [0x90F820, data, overlays/ovl_0090F7D0_reloc]
@@ -7572,6 +8450,7 @@
start: 0x90F840
vram: 0x80A47DA0
follows_vram: ovl_0090F7D0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90F840, data, overlays/ovl_0090F840]
@@ -7580,6 +8459,7 @@
start: 0x90F890
vram: 0x80A47DF0
follows_vram: ovl_0090F840
+ compress: True
subsegments:
- [0x90F890, data, overlays/ovl_0090F840_reloc]
@@ -7588,6 +8468,7 @@
start: 0x90F8B0
vram: 0x80A47E10
follows_vram: ovl_0090F840_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90F8B0, data, overlays/ovl_0090F8B0]
@@ -7596,6 +8477,7 @@
start: 0x90F900
vram: 0x80A47E60
follows_vram: ovl_0090F8B0
+ compress: True
subsegments:
- [0x90F900, data, overlays/ovl_0090F8B0_reloc]
@@ -7604,6 +8486,7 @@
start: 0x90F920
vram: 0x80A47E80
follows_vram: ovl_0090F8B0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90F920, data, overlays/ovl_0090F920]
@@ -7612,6 +8495,7 @@
start: 0x90F970
vram: 0x80A47ED0
follows_vram: ovl_0090F920
+ compress: True
subsegments:
- [0x90F970, data, overlays/ovl_0090F920_reloc]
@@ -7620,6 +8504,7 @@
start: 0x90F990
vram: 0x80A47EF0
follows_vram: ovl_0090F920_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90F990, data, overlays/ovl_0090F990]
@@ -7628,6 +8513,7 @@
start: 0x90F9E0
vram: 0x80A47F40
follows_vram: ovl_0090F990
+ compress: True
subsegments:
- [0x90F9E0, data, overlays/ovl_0090F990_reloc]
@@ -7636,6 +8522,7 @@
start: 0x90FA00
vram: 0x80A47F60
follows_vram: ovl_0090F990_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90FA00, data, overlays/ovl_0090FA00]
@@ -7644,6 +8531,7 @@
start: 0x90FA50
vram: 0x80A47FB0
follows_vram: ovl_0090FA00
+ compress: True
subsegments:
- [0x90FA50, data, overlays/ovl_0090FA00_reloc]
@@ -7652,6 +8540,7 @@
start: 0x90FA70
vram: 0x80A47FD0
follows_vram: ovl_0090FA00_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90FA70, data, overlays/ovl_0090FA70]
@@ -7660,6 +8549,7 @@
start: 0x90FAC0
vram: 0x80A48020
follows_vram: ovl_0090FA70
+ compress: True
subsegments:
- [0x90FAC0, data, overlays/ovl_0090FA70_reloc]
@@ -7668,6 +8558,7 @@
start: 0x90FAE0
vram: 0x80A48040
follows_vram: ovl_0090FA70_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90FAE0, data, overlays/ovl_0090FAE0]
@@ -7676,6 +8567,7 @@
start: 0x90FB30
vram: 0x80A48090
follows_vram: ovl_0090FAE0
+ compress: True
subsegments:
- [0x90FB30, data, overlays/ovl_0090FAE0_reloc]
@@ -7684,6 +8576,7 @@
start: 0x90FB50
vram: 0x80A480B0
follows_vram: ovl_0090FAE0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90FB50, data, overlays/ovl_0090FB50]
@@ -7692,6 +8585,7 @@
start: 0x90FBA0
vram: 0x80A48100
follows_vram: ovl_0090FB50
+ compress: True
subsegments:
- [0x90FBA0, data, overlays/ovl_0090FB50_reloc]
@@ -7700,6 +8594,7 @@
start: 0x90FBC0
vram: 0x80A48120
follows_vram: ovl_0090FB50_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90FBC0, data, overlays/ovl_0090FBC0]
@@ -7708,6 +8603,7 @@
start: 0x90FC10
vram: 0x80A48170
follows_vram: ovl_0090FBC0
+ compress: True
subsegments:
- [0x90FC10, data, overlays/ovl_0090FBC0_reloc]
@@ -7716,6 +8612,7 @@
start: 0x90FC30
vram: 0x80A48190
follows_vram: ovl_0090FBC0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90FC30, data, overlays/ovl_0090FC30]
@@ -7724,6 +8621,7 @@
start: 0x90FC80
vram: 0x80A481E0
follows_vram: ovl_0090FC30
+ compress: True
subsegments:
- [0x90FC80, data, overlays/ovl_0090FC30_reloc]
@@ -7732,6 +8630,7 @@
start: 0x90FCA0
vram: 0x80A48200
follows_vram: ovl_0090FC30_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90FCA0, data, overlays/ovl_0090FCA0]
@@ -7740,6 +8639,7 @@
start: 0x90FCF0
vram: 0x80A48250
follows_vram: ovl_0090FCA0
+ compress: True
subsegments:
- [0x90FCF0, data, overlays/ovl_0090FCA0_reloc]
@@ -7748,6 +8648,7 @@
start: 0x90FD10
vram: 0x80A48270
follows_vram: ovl_0090FCA0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90FD10, data, overlays/ovl_0090FD10]
@@ -7756,6 +8657,7 @@
start: 0x90FD60
vram: 0x80A482C0
follows_vram: ovl_0090FD10
+ compress: True
subsegments:
- [0x90FD60, data, overlays/ovl_0090FD10_reloc]
@@ -7764,6 +8666,7 @@
start: 0x90FD80
vram: 0x80A482E0
follows_vram: ovl_0090FD10_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90FD80, data, overlays/ovl_0090FD80]
@@ -7772,6 +8675,7 @@
start: 0x90FDD0
vram: 0x80A48330
follows_vram: ovl_0090FD80
+ compress: True
subsegments:
- [0x90FDD0, data, overlays/ovl_0090FD80_reloc]
@@ -7780,6 +8684,7 @@
start: 0x90FDF0
vram: 0x80A48350
follows_vram: ovl_0090FD80_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90FDF0, data, overlays/ovl_0090FDF0]
@@ -7788,6 +8693,7 @@
start: 0x90FE40
vram: 0x80A483A0
follows_vram: ovl_0090FDF0
+ compress: True
subsegments:
- [0x90FE40, data, overlays/ovl_0090FDF0_reloc]
@@ -7796,6 +8702,7 @@
start: 0x90FE60
vram: 0x80A483C0
follows_vram: ovl_0090FDF0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x90FE60, asm, overlays/ovl_0090FE60]
@@ -7805,6 +8712,7 @@
start: 0x910280
vram: 0x80A487E0
follows_vram: ovl_0090FE60
+ compress: True
subsegments:
- [0x910280, data, overlays/ovl_0090FE60_reloc]
@@ -7813,6 +8721,7 @@
start: 0x9102C0
vram: 0x80A48820
follows_vram: ovl_0090FE60_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9102C0, asm, overlays/ovl_009102C0]
@@ -7822,6 +8731,7 @@
start: 0x9103A0
vram: 0x80A48900
follows_vram: ovl_009102C0
+ compress: True
subsegments:
- [0x9103A0, data, overlays/ovl_009102C0_reloc]
@@ -7830,6 +8740,7 @@
start: 0x9103D0
vram: 0x80A48930
follows_vram: ovl_009102C0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9103D0, data, overlays/ovl_009103D0]
@@ -7838,6 +8749,7 @@
start: 0x910420
vram: 0x80A48980
follows_vram: ovl_009103D0
+ compress: True
subsegments:
- [0x910420, data, overlays/ovl_009103D0_reloc]
@@ -7846,6 +8758,7 @@
start: 0x910440
vram: 0x80A489A0
follows_vram: ovl_009103D0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x910440, asm, overlays/ovl_00910440]
@@ -7856,6 +8769,7 @@
start: 0x910DD0
vram: 0x80A49330
follows_vram: ovl_00910440
+ compress: True
subsegments:
- [0x910DD0, data, overlays/ovl_00910440_reloc]
@@ -7864,6 +8778,7 @@
start: 0x910E50
vram: 0x80A493B0
follows_vram: ovl_00910440_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x910E50, asm, overlays/ovl_00910E50]
@@ -7874,6 +8789,7 @@
start: 0x9112F0
vram: 0x80A49850
follows_vram: ovl_00910E50
+ compress: True
subsegments:
- [0x9112F0, data, overlays/ovl_00910E50_reloc]
@@ -7882,6 +8798,7 @@
start: 0x911340
vram: 0x80A498A0
follows_vram: ovl_00910E50_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x911340, asm, overlays/ovl_00911340]
@@ -7891,6 +8808,7 @@
start: 0x911460
vram: 0x80A499C0
follows_vram: ovl_00911340
+ compress: True
subsegments:
- [0x911460, data, overlays/ovl_00911340_reloc]
@@ -7899,6 +8817,7 @@
start: 0x911490
vram: 0x80A499F0
follows_vram: ovl_00911340_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x911490, asm, overlays/ovl_00911490]
@@ -7908,6 +8827,7 @@
start: 0x911870
vram: 0x80A49DD0
follows_vram: ovl_00911490
+ compress: True
subsegments:
- [0x911870, data, overlays/ovl_00911490_reloc]
@@ -7916,6 +8836,7 @@
start: 0x9118A0
vram: 0x80A49E00
follows_vram: ovl_00911490_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9118A0, data, overlays/ovl_009118A0]
@@ -7924,6 +8845,7 @@
start: 0x9118F0
vram: 0x80A49E50
follows_vram: ovl_009118A0
+ compress: True
subsegments:
- [0x9118F0, data, overlays/ovl_009118A0_reloc]
@@ -7932,6 +8854,7 @@
start: 0x911910
vram: 0x80A49E70
follows_vram: ovl_009118A0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x911910, asm, overlays/ovl_00911910]
@@ -7941,6 +8864,7 @@
start: 0x911E20
vram: 0x80A4A380
follows_vram: ovl_00911910
+ compress: True
subsegments:
- [0x911E20, data, overlays/ovl_00911910_reloc]
@@ -7949,6 +8873,7 @@
start: 0x911E60
vram: 0x80A4A3C0
follows_vram: ovl_00911910_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x911E60, asm, overlays/ovl_00911E60]
@@ -7958,6 +8883,7 @@
start: 0x912070
vram: 0x80A4A5D0
follows_vram: ovl_00911E60
+ compress: True
subsegments:
- [0x912070, data, overlays/ovl_00911E60_reloc]
@@ -7966,6 +8892,7 @@
start: 0x9120B0
vram: 0x80A4A610
follows_vram: ovl_00911E60_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9120B0, asm, overlays/ovl_009120B0]
@@ -7975,6 +8902,7 @@
start: 0x912A60
vram: 0x80A4AFC0
follows_vram: ovl_009120B0
+ compress: True
subsegments:
- [0x912A60, data, overlays/ovl_009120B0_reloc]
@@ -7983,6 +8911,7 @@
start: 0x912A90
vram: 0x80A4AFF0
follows_vram: ovl_009120B0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x912A90, data, overlays/ovl_00912A90]
@@ -7991,6 +8920,7 @@
start: 0x912AE0
vram: 0x80A4B040
follows_vram: ovl_00912A90
+ compress: True
subsegments:
- [0x912AE0, data, overlays/ovl_00912A90_reloc]
@@ -7999,6 +8929,7 @@
start: 0x912B00
vram: 0x80A4B060
follows_vram: ovl_00912A90_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x912B00, data, overlays/ovl_00912B00]
@@ -8007,6 +8938,7 @@
start: 0x912B50
vram: 0x80A4B0B0
follows_vram: ovl_00912B00
+ compress: True
subsegments:
- [0x912B50, data, overlays/ovl_00912B00_reloc]
@@ -8015,6 +8947,7 @@
start: 0x912B70
vram: 0x80A4B0D0
follows_vram: ovl_00912B00_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x912B70, data, overlays/ovl_00912B70]
@@ -8023,6 +8956,7 @@
start: 0x912BC0
vram: 0x80A4B120
follows_vram: ovl_00912B70
+ compress: True
subsegments:
- [0x912BC0, data, overlays/ovl_00912B70_reloc]
@@ -8031,6 +8965,7 @@
start: 0x912BE0
vram: 0x80A4B140
follows_vram: ovl_00912B70_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x912BE0, data, overlays/ovl_00912BE0]
@@ -8039,6 +8974,7 @@
start: 0x912C30
vram: 0x80A4B190
follows_vram: ovl_00912BE0
+ compress: True
subsegments:
- [0x912C30, data, overlays/ovl_00912BE0_reloc]
@@ -8047,6 +8983,7 @@
start: 0x912C50
vram: 0x80A4B1B0
follows_vram: ovl_00912BE0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x912C50, data, overlays/ovl_00912C50]
@@ -8055,6 +8992,7 @@
start: 0x912CA0
vram: 0x80A4B200
follows_vram: ovl_00912C50
+ compress: True
subsegments:
- [0x912CA0, data, overlays/ovl_00912C50_reloc]
@@ -8063,6 +9001,7 @@
start: 0x912CC0
vram: 0x80A4B220
follows_vram: ovl_00912C50_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x912CC0, data, overlays/ovl_00912CC0]
@@ -8071,6 +9010,7 @@
start: 0x912D10
vram: 0x80A4B270
follows_vram: ovl_00912CC0
+ compress: True
subsegments:
- [0x912D10, data, overlays/ovl_00912CC0_reloc]
@@ -8079,6 +9019,7 @@
start: 0x912D30
vram: 0x80A4B290
follows_vram: ovl_00912CC0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x912D30, data, overlays/ovl_00912D30]
@@ -8087,6 +9028,7 @@
start: 0x912D80
vram: 0x80A4B2E0
follows_vram: ovl_00912D30
+ compress: True
subsegments:
- [0x912D80, data, overlays/ovl_00912D30_reloc]
@@ -8095,6 +9037,7 @@
start: 0x912DA0
vram: 0x80A4B300
follows_vram: ovl_00912D30_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x912DA0, data, overlays/ovl_00912DA0]
@@ -8103,6 +9046,7 @@
start: 0x912DF0
vram: 0x80A4B350
follows_vram: ovl_00912DA0
+ compress: True
subsegments:
- [0x912DF0, data, overlays/ovl_00912DA0_reloc]
@@ -8111,6 +9055,7 @@
start: 0x912E10
vram: 0x80A4B370
follows_vram: ovl_00912DA0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x912E10, asm, overlays/ovl_00912E10]
@@ -8120,6 +9065,7 @@
start: 0x912EF0
vram: 0x80A4B450
follows_vram: ovl_00912E10
+ compress: True
subsegments:
- [0x912EF0, data, overlays/ovl_00912E10_reloc]
@@ -8128,6 +9074,7 @@
start: 0x912F20
vram: 0x80A4B480
follows_vram: ovl_00912E10_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x912F20, data, overlays/ovl_00912F20]
@@ -8136,6 +9083,7 @@
start: 0x912F70
vram: 0x80A4B4D0
follows_vram: ovl_00912F20
+ compress: True
subsegments:
- [0x912F70, data, overlays/ovl_00912F20_reloc]
@@ -8144,6 +9092,7 @@
start: 0x912F90
vram: 0x80A4B4F0
follows_vram: ovl_00912F20_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x912F90, data, overlays/ovl_00912F90]
@@ -8152,6 +9101,7 @@
start: 0x912FE0
vram: 0x80A4B540
follows_vram: ovl_00912F90
+ compress: True
subsegments:
- [0x912FE0, data, overlays/ovl_00912F90_reloc]
@@ -8160,6 +9110,7 @@
start: 0x913000
vram: 0x80A4B560
follows_vram: ovl_00912F90_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x913000, asm, overlays/ovl_00913000]
@@ -8169,6 +9120,7 @@
start: 0x913360
vram: 0x80A4B8C0
follows_vram: ovl_00913000
+ compress: True
subsegments:
- [0x913360, data, overlays/ovl_00913000_reloc]
@@ -8177,6 +9129,7 @@
start: 0x913390
vram: 0x80A4B8F0
follows_vram: ovl_00913000_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x913390, data, overlays/ovl_00913390]
@@ -8185,6 +9138,7 @@
start: 0x9133E0
vram: 0x80A4B940
follows_vram: ovl_00913390
+ compress: True
subsegments:
- [0x9133E0, data, overlays/ovl_00913390_reloc]
@@ -8193,6 +9147,7 @@
start: 0x913400
vram: 0x80A4B960
follows_vram: ovl_00913390_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x913400, data, overlays/ovl_00913400]
@@ -8201,6 +9156,7 @@
start: 0x913450
vram: 0x80A4B9B0
follows_vram: ovl_00913400
+ compress: True
subsegments:
- [0x913450, data, overlays/ovl_00913400_reloc]
@@ -8209,6 +9165,7 @@
start: 0x913470
vram: 0x80A4B9D0
follows_vram: ovl_00913400_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x913470, data, overlays/ovl_00913470]
@@ -8217,6 +9174,7 @@
start: 0x9134C0
vram: 0x80A4BA20
follows_vram: ovl_00913470
+ compress: True
subsegments:
- [0x9134C0, data, overlays/ovl_00913470_reloc]
@@ -8225,6 +9183,7 @@
start: 0x9134E0
vram: 0x80A4BA40
follows_vram: ovl_00913470_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9134E0, data, overlays/ovl_009134E0]
@@ -8233,6 +9192,7 @@
start: 0x913530
vram: 0x80A4BA90
follows_vram: ovl_009134E0
+ compress: True
subsegments:
- [0x913530, data, overlays/ovl_009134E0_reloc]
@@ -8241,6 +9201,7 @@
start: 0x913550
vram: 0x80A4BAB0
follows_vram: ovl_009134E0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x913550, data, overlays/ovl_00913550]
@@ -8249,6 +9210,7 @@
start: 0x9135A0
vram: 0x80A4BB00
follows_vram: ovl_00913550
+ compress: True
subsegments:
- [0x9135A0, data, overlays/ovl_00913550_reloc]
@@ -8257,6 +9219,7 @@
start: 0x9135C0
vram: 0x80A4BB20
follows_vram: ovl_00913550_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9135C0, data, overlays/ovl_009135C0]
@@ -8265,6 +9228,7 @@
start: 0x913610
vram: 0x80A4BB70
follows_vram: ovl_009135C0
+ compress: True
subsegments:
- [0x913610, data, overlays/ovl_009135C0_reloc]
@@ -8273,6 +9237,7 @@
start: 0x913630
vram: 0x80A4BB90
follows_vram: ovl_009135C0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x913630, data, overlays/ovl_00913630]
@@ -8281,6 +9246,7 @@
start: 0x913680
vram: 0x80A4BBE0
follows_vram: ovl_00913630
+ compress: True
subsegments:
- [0x913680, data, overlays/ovl_00913630_reloc]
@@ -8289,6 +9255,7 @@
start: 0x9136A0
vram: 0x80A4BC00
follows_vram: ovl_00913630_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9136A0, asm, overlays/ovl_009136A0]
@@ -8298,6 +9265,7 @@
start: 0x913A00
vram: 0x80A4BF60
follows_vram: ovl_009136A0
+ compress: True
subsegments:
- [0x913A00, data, overlays/ovl_009136A0_reloc]
@@ -8306,6 +9274,7 @@
start: 0x913A30
vram: 0x80A4BF90
follows_vram: ovl_009136A0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x913A30, data, overlays/ovl_00913A30]
@@ -8314,6 +9283,7 @@
start: 0x913A80
vram: 0x80A4BFE0
follows_vram: ovl_00913A30
+ compress: True
subsegments:
- [0x913A80, data, overlays/ovl_00913A30_reloc]
@@ -8322,6 +9292,7 @@
start: 0x913AA0
vram: 0x80A4C000
follows_vram: ovl_00913A30_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x913AA0, data, overlays/ovl_00913AA0]
@@ -8330,6 +9301,7 @@
start: 0x913AF0
vram: 0x80A4C050
follows_vram: ovl_00913AA0
+ compress: True
subsegments:
- [0x913AF0, data, overlays/ovl_00913AA0_reloc]
@@ -8338,6 +9310,7 @@
start: 0x913B10
vram: 0x80A4C070
follows_vram: ovl_00913AA0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x913B10, data, overlays/ovl_00913B10]
@@ -8346,6 +9319,7 @@
start: 0x913B60
vram: 0x80A4C0C0
follows_vram: ovl_00913B10
+ compress: True
subsegments:
- [0x913B60, data, overlays/ovl_00913B10_reloc]
@@ -8354,6 +9328,7 @@
start: 0x913B80
vram: 0x80A4C0E0
follows_vram: ovl_00913B10_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x913B80, asm, overlays/ovl_00913B80]
@@ -8363,6 +9338,7 @@
start: 0x913EE0
vram: 0x80A4C440
follows_vram: ovl_00913B80
+ compress: True
subsegments:
- [0x913EE0, data, overlays/ovl_00913B80_reloc]
@@ -8371,6 +9347,7 @@
start: 0x913F10
vram: 0x80A4C470
follows_vram: ovl_00913B80_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x913F10, data, overlays/ovl_00913F10]
@@ -8379,6 +9356,7 @@
start: 0x913F60
vram: 0x80A4C4C0
follows_vram: ovl_00913F10
+ compress: True
subsegments:
- [0x913F60, data, overlays/ovl_00913F10_reloc]
@@ -8387,6 +9365,7 @@
start: 0x913F80
vram: 0x80A4C4E0
follows_vram: ovl_00913F10_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x913F80, data, overlays/ovl_00913F80]
@@ -8395,6 +9374,7 @@
start: 0x913FD0
vram: 0x80A4C530
follows_vram: ovl_00913F80
+ compress: True
subsegments:
- [0x913FD0, data, overlays/ovl_00913F80_reloc]
@@ -8403,6 +9383,7 @@
start: 0x913FF0
vram: 0x80A4C550
follows_vram: ovl_00913F80_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x913FF0, data, overlays/ovl_00913FF0]
@@ -8411,6 +9392,7 @@
start: 0x914040
vram: 0x80A4C5A0
follows_vram: ovl_00913FF0
+ compress: True
subsegments:
- [0x914040, data, overlays/ovl_00913FF0_reloc]
@@ -8419,6 +9401,7 @@
start: 0x914060
vram: 0x80A4C5C0
follows_vram: ovl_00913FF0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x914060, data, overlays/ovl_00914060]
@@ -8427,6 +9410,7 @@
start: 0x9140B0
vram: 0x80A4C610
follows_vram: ovl_00914060
+ compress: True
subsegments:
- [0x9140B0, data, overlays/ovl_00914060_reloc]
@@ -8435,6 +9419,7 @@
start: 0x9140D0
vram: 0x80A4C630
follows_vram: ovl_00914060_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9140D0, data, overlays/ovl_009140D0]
@@ -8443,6 +9428,7 @@
start: 0x914120
vram: 0x80A4C680
follows_vram: ovl_009140D0
+ compress: True
subsegments:
- [0x914120, data, overlays/ovl_009140D0_reloc]
@@ -8451,6 +9437,7 @@
start: 0x914140
vram: 0x80A4C6A0
follows_vram: ovl_009140D0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x914140, asm, overlays/ovl_00914140]
@@ -8460,6 +9447,7 @@
start: 0x9144A0
vram: 0x80A4CA00
follows_vram: ovl_00914140
+ compress: True
subsegments:
- [0x9144A0, data, overlays/ovl_00914140_reloc]
@@ -8468,6 +9456,7 @@
start: 0x9144D0
vram: 0x80A4CA30
follows_vram: ovl_00914140_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9144D0, data, overlays/ovl_009144D0]
@@ -8476,6 +9465,7 @@
start: 0x914520
vram: 0x80A4CA80
follows_vram: ovl_009144D0
+ compress: True
subsegments:
- [0x914520, data, overlays/ovl_009144D0_reloc]
@@ -8484,6 +9474,7 @@
start: 0x914540
vram: 0x80A4CAA0
follows_vram: ovl_009144D0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x914540, asm, overlays/ovl_00914540]
@@ -8493,6 +9484,7 @@
start: 0x914630
vram: 0x80A4CB90
follows_vram: ovl_00914540
+ compress: True
subsegments:
- [0x914630, data, overlays/ovl_00914540_reloc]
@@ -8501,6 +9493,7 @@
start: 0x914650
vram: 0x80A4CBB0
follows_vram: ovl_00914540_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x914650, data, overlays/ovl_00914650]
@@ -8509,6 +9502,7 @@
start: 0x9146A0
vram: 0x80A4CC00
follows_vram: ovl_00914650
+ compress: True
subsegments:
- [0x9146A0, data, overlays/ovl_00914650_reloc]
@@ -8517,6 +9511,7 @@
start: 0x9146C0
vram: 0x80A4CC20
follows_vram: ovl_00914650_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9146C0, data, overlays/ovl_009146C0]
@@ -8525,6 +9520,7 @@
start: 0x914710
vram: 0x80A4CC70
follows_vram: ovl_009146C0
+ compress: True
subsegments:
- [0x914710, data, overlays/ovl_009146C0_reloc]
@@ -8533,6 +9529,7 @@
start: 0x914730
vram: 0x80A4CC90
follows_vram: ovl_009146C0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x914730, data, overlays/ovl_00914730]
@@ -8541,6 +9538,7 @@
start: 0x914780
vram: 0x80A4CCE0
follows_vram: ovl_00914730
+ compress: True
subsegments:
- [0x914780, data, overlays/ovl_00914730_reloc]
@@ -8549,6 +9547,7 @@
start: 0x9147A0
vram: 0x80A4CD00
follows_vram: ovl_00914730_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9147A0, data, overlays/ovl_009147A0]
@@ -8557,6 +9556,7 @@
start: 0x9147F0
vram: 0x80A4CD50
follows_vram: ovl_009147A0
+ compress: True
subsegments:
- [0x9147F0, data, overlays/ovl_009147A0_reloc]
@@ -8565,6 +9565,7 @@
start: 0x914810
vram: 0x80A4CD70
follows_vram: ovl_009147A0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x914810, data, overlays/ovl_00914810]
@@ -8573,6 +9574,7 @@
start: 0x914860
vram: 0x80A4CDC0
follows_vram: ovl_00914810
+ compress: True
subsegments:
- [0x914860, data, overlays/ovl_00914810_reloc]
@@ -8581,6 +9583,7 @@
start: 0x914880
vram: 0x80A4CDE0
follows_vram: ovl_00914810_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x914880, data, overlays/ovl_00914880]
@@ -8589,6 +9592,7 @@
start: 0x9148D0
vram: 0x80A4CE30
follows_vram: ovl_00914880
+ compress: True
subsegments:
- [0x9148D0, data, overlays/ovl_00914880_reloc]
@@ -8597,6 +9601,7 @@
start: 0x9148F0
vram: 0x80A4CE50
follows_vram: ovl_00914880_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9148F0, data, overlays/ovl_009148F0]
@@ -8605,6 +9610,7 @@
start: 0x914940
vram: 0x80A4CEA0
follows_vram: ovl_009148F0
+ compress: True
subsegments:
- [0x914940, data, overlays/ovl_009148F0_reloc]
@@ -8613,6 +9619,7 @@
start: 0x914960
vram: 0x80A4CEC0
follows_vram: ovl_009148F0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x914960, data, overlays/ovl_00914960]
@@ -8621,6 +9628,7 @@
start: 0x9149B0
vram: 0x80A4CF10
follows_vram: ovl_00914960
+ compress: True
subsegments:
- [0x9149B0, data, overlays/ovl_00914960_reloc]
@@ -8629,6 +9637,7 @@
start: 0x9149D0
vram: 0x80A4CF30
follows_vram: ovl_00914960_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9149D0, data, overlays/ovl_009149D0]
@@ -8637,6 +9646,7 @@
start: 0x914A20
vram: 0x80A4CF80
follows_vram: ovl_009149D0
+ compress: True
subsegments:
- [0x914A20, data, overlays/ovl_009149D0_reloc]
@@ -8645,6 +9655,7 @@
start: 0x914A40
vram: 0x80A4CFA0
follows_vram: ovl_009149D0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x914A40, data, overlays/ovl_00914A40]
@@ -8653,6 +9664,7 @@
start: 0x914A90
vram: 0x80A4CFF0
follows_vram: ovl_00914A40
+ compress: True
subsegments:
- [0x914A90, data, overlays/ovl_00914A40_reloc]
@@ -8661,6 +9673,7 @@
start: 0x914AB0
vram: 0x80A4D010
follows_vram: ovl_00914A40_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x914AB0, data, overlays/ovl_00914AB0]
@@ -8669,6 +9682,7 @@
start: 0x914B00
vram: 0x80A4D060
follows_vram: ovl_00914AB0
+ compress: True
subsegments:
- [0x914B00, data, overlays/ovl_00914AB0_reloc]
@@ -8677,6 +9691,7 @@
start: 0x914B20
vram: 0x80A4D080
follows_vram: ovl_00914AB0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x914B20, data, overlays/ovl_00914B20]
@@ -8685,6 +9700,7 @@
start: 0x914B70
vram: 0x80A4D0D0
follows_vram: ovl_00914B20
+ compress: True
subsegments:
- [0x914B70, data, overlays/ovl_00914B20_reloc]
@@ -8693,6 +9709,7 @@
start: 0x914B90
vram: 0x80A4D0F0
follows_vram: ovl_00914B20_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x914B90, data, overlays/ovl_00914B90]
@@ -8701,6 +9718,7 @@
start: 0x914BE0
vram: 0x80A4D140
follows_vram: ovl_00914B90
+ compress: True
subsegments:
- [0x914BE0, data, overlays/ovl_00914B90_reloc]
@@ -8709,6 +9727,7 @@
start: 0x914C00
vram: 0x80A4D160
follows_vram: ovl_00914B90_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x914C00, data, overlays/ovl_00914C00]
@@ -8717,6 +9736,7 @@
start: 0x914C50
vram: 0x80A4D1B0
follows_vram: ovl_00914C00
+ compress: True
subsegments:
- [0x914C50, data, overlays/ovl_00914C00_reloc]
@@ -8725,6 +9745,7 @@
start: 0x914C70
vram: 0x80A4D1D0
follows_vram: ovl_00914C00_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x914C70, data, overlays/ovl_00914C70]
@@ -8733,6 +9754,7 @@
start: 0x914CC0
vram: 0x80A4D220
follows_vram: ovl_00914C70
+ compress: True
subsegments:
- [0x914CC0, data, overlays/ovl_00914C70_reloc]
@@ -8741,6 +9763,7 @@
start: 0x914CE0
vram: 0x80A4D240
follows_vram: ovl_00914C70_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x914CE0, asm, overlays/ovl_00914CE0]
@@ -8750,6 +9773,7 @@
start: 0x915040
vram: 0x80A4D5A0
follows_vram: ovl_00914CE0
+ compress: True
subsegments:
- [0x915040, data, overlays/ovl_00914CE0_reloc]
@@ -8758,6 +9782,7 @@
start: 0x915070
vram: 0x80A4D5D0
follows_vram: ovl_00914CE0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x915070, data, overlays/ovl_00915070]
@@ -8766,6 +9791,7 @@
start: 0x9150C0
vram: 0x80A4D620
follows_vram: ovl_00915070
+ compress: True
subsegments:
- [0x9150C0, data, overlays/ovl_00915070_reloc]
@@ -8774,6 +9800,7 @@
start: 0x9150E0
vram: 0x80A4D640
follows_vram: ovl_00915070_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9150E0, data, overlays/ovl_009150E0]
@@ -8782,6 +9809,7 @@
start: 0x915130
vram: 0x80A4D690
follows_vram: ovl_009150E0
+ compress: True
subsegments:
- [0x915130, data, overlays/ovl_009150E0_reloc]
@@ -8790,6 +9818,7 @@
start: 0x915150
vram: 0x80A4D6B0
follows_vram: ovl_009150E0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x915150, data, overlays/ovl_00915150]
@@ -8798,6 +9827,7 @@
start: 0x9151A0
vram: 0x80A4D700
follows_vram: ovl_00915150
+ compress: True
subsegments:
- [0x9151A0, data, overlays/ovl_00915150_reloc]
@@ -8806,6 +9836,7 @@
start: 0x9151C0
vram: 0x80A4D720
follows_vram: ovl_00915150_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9151C0, data, overlays/ovl_009151C0]
@@ -8814,6 +9845,7 @@
start: 0x915210
vram: 0x80A4D770
follows_vram: ovl_009151C0
+ compress: True
subsegments:
- [0x915210, data, overlays/ovl_009151C0_reloc]
@@ -8822,6 +9854,7 @@
start: 0x915230
vram: 0x80A4D790
follows_vram: ovl_009151C0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x915230, data, overlays/ovl_00915230]
@@ -8830,6 +9863,7 @@
start: 0x915280
vram: 0x80A4D7E0
follows_vram: ovl_00915230
+ compress: True
subsegments:
- [0x915280, data, overlays/ovl_00915230_reloc]
@@ -8838,6 +9872,7 @@
start: 0x9152A0
vram: 0x80A4D800
follows_vram: ovl_00915230_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9152A0, data, overlays/ovl_009152A0]
@@ -8846,6 +9881,7 @@
start: 0x9152F0
vram: 0x80A4D850
follows_vram: ovl_009152A0
+ compress: True
subsegments:
- [0x9152F0, data, overlays/ovl_009152A0_reloc]
@@ -8854,6 +9890,7 @@
start: 0x915310
vram: 0x80A4D870
follows_vram: ovl_009152A0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x915310, asm, overlays/ovl_00915310]
@@ -8863,6 +9900,7 @@
start: 0x915860
vram: 0x80A4DDC0
follows_vram: ovl_00915310
+ compress: True
subsegments:
- [0x915860, data, overlays/ovl_00915310_reloc]
@@ -8871,6 +9909,7 @@
start: 0x915890
vram: 0x80A4DDF0
follows_vram: ovl_00915310_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x915890, asm, overlays/ovl_00915890]
@@ -8880,6 +9919,7 @@
start: 0x9159E0
vram: 0x80A4DF40
follows_vram: ovl_00915890
+ compress: True
subsegments:
- [0x9159E0, data, overlays/ovl_00915890_reloc]
@@ -8888,6 +9928,7 @@
start: 0x915A10
vram: 0x80A4DF70
follows_vram: ovl_00915890_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x915A10, data, overlays/ovl_00915A10]
@@ -8896,6 +9937,7 @@
start: 0x915A60
vram: 0x80A4DFC0
follows_vram: ovl_00915A10
+ compress: True
subsegments:
- [0x915A60, data, overlays/ovl_00915A10_reloc]
@@ -8904,6 +9946,7 @@
start: 0x915A80
vram: 0x80A4DFE0
follows_vram: ovl_00915A10_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x915A80, data, overlays/ovl_00915A80]
@@ -8912,6 +9955,7 @@
start: 0x915AD0
vram: 0x80A4E030
follows_vram: ovl_00915A80
+ compress: True
subsegments:
- [0x915AD0, data, overlays/ovl_00915A80_reloc]
@@ -8920,6 +9964,7 @@
start: 0x915AF0
vram: 0x80A4E050
follows_vram: ovl_00915A80_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x915AF0, data, overlays/ovl_00915AF0]
@@ -8928,6 +9973,7 @@
start: 0x915B40
vram: 0x80A4E0A0
follows_vram: ovl_00915AF0
+ compress: True
subsegments:
- [0x915B40, data, overlays/ovl_00915AF0_reloc]
@@ -8936,6 +9982,7 @@
start: 0x915B60
vram: 0x80A4E0C0
follows_vram: ovl_00915AF0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x915B60, data, overlays/ovl_00915B60]
@@ -8944,6 +9991,7 @@
start: 0x915BB0
vram: 0x80A4E110
follows_vram: ovl_00915B60
+ compress: True
subsegments:
- [0x915BB0, data, overlays/ovl_00915B60_reloc]
@@ -8952,6 +10000,7 @@
start: 0x915BD0
vram: 0x80A4E130
follows_vram: ovl_00915B60_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x915BD0, data, overlays/ovl_00915BD0]
@@ -8960,6 +10009,7 @@
start: 0x915C20
vram: 0x80A4E180
follows_vram: ovl_00915BD0
+ compress: True
subsegments:
- [0x915C20, data, overlays/ovl_00915BD0_reloc]
@@ -8968,6 +10018,7 @@
start: 0x915C40
vram: 0x80A4E1A0
follows_vram: ovl_00915BD0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x915C40, asm, overlays/ovl_00915C40]
@@ -8977,6 +10028,7 @@
start: 0x915F50
vram: 0x80A4E4B0
follows_vram: ovl_00915C40
+ compress: True
subsegments:
- [0x915F50, data, overlays/ovl_00915C40_reloc]
@@ -8985,6 +10037,7 @@
start: 0x915F80
vram: 0x80A4E4E0
follows_vram: ovl_00915C40_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x915F80, data, overlays/ovl_00915F80]
@@ -8993,6 +10046,7 @@
start: 0x915FD0
vram: 0x80A4E530
follows_vram: ovl_00915F80
+ compress: True
subsegments:
- [0x915FD0, data, overlays/ovl_00915F80_reloc]
@@ -9001,6 +10055,7 @@
start: 0x915FF0
vram: 0x80A4E550
follows_vram: ovl_00915F80_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x915FF0, asm, overlays/ovl_00915FF0]
@@ -9010,6 +10065,7 @@
start: 0x916300
vram: 0x80A4E860
follows_vram: ovl_00915FF0
+ compress: True
subsegments:
- [0x916300, data, overlays/ovl_00915FF0_reloc]
@@ -9018,6 +10074,7 @@
start: 0x916330
vram: 0x80A4E890
follows_vram: ovl_00915FF0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x916330, data, overlays/ovl_00916330]
@@ -9026,6 +10083,7 @@
start: 0x916380
vram: 0x80A4E8E0
follows_vram: ovl_00916330
+ compress: True
subsegments:
- [0x916380, data, overlays/ovl_00916330_reloc]
@@ -9034,6 +10092,7 @@
start: 0x9163A0
vram: 0x80A4E900
follows_vram: ovl_00916330_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9163A0, asm, overlays/ovl_009163A0]
@@ -9043,6 +10102,7 @@
start: 0x9166B0
vram: 0x80A4EC10
follows_vram: ovl_009163A0
+ compress: True
subsegments:
- [0x9166B0, data, overlays/ovl_009163A0_reloc]
@@ -9051,6 +10111,7 @@
start: 0x9166E0
vram: 0x80A4EC40
follows_vram: ovl_009163A0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9166E0, data, overlays/ovl_009166E0]
@@ -9059,6 +10120,7 @@
start: 0x916730
vram: 0x80A4EC90
follows_vram: ovl_009166E0
+ compress: True
subsegments:
- [0x916730, data, overlays/ovl_009166E0_reloc]
@@ -9067,6 +10129,7 @@
start: 0x916750
vram: 0x80A4ECB0
follows_vram: ovl_009166E0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x916750, data, overlays/ovl_00916750]
@@ -9075,6 +10138,7 @@
start: 0x9167A0
vram: 0x80A4ED00
follows_vram: ovl_00916750
+ compress: True
subsegments:
- [0x9167A0, data, overlays/ovl_00916750_reloc]
@@ -9083,6 +10147,7 @@
start: 0x9167C0
vram: 0x80A4ED20
follows_vram: ovl_00916750_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9167C0, data, overlays/ovl_009167C0]
@@ -9091,6 +10156,7 @@
start: 0x916810
vram: 0x80A4ED70
follows_vram: ovl_009167C0
+ compress: True
subsegments:
- [0x916810, data, overlays/ovl_009167C0_reloc]
@@ -9099,6 +10165,7 @@
start: 0x916830
vram: 0x80A4ED90
follows_vram: ovl_009167C0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x916830, data, overlays/ovl_00916830]
@@ -9107,6 +10174,7 @@
start: 0x916880
vram: 0x80A4EDE0
follows_vram: ovl_00916830
+ compress: True
subsegments:
- [0x916880, data, overlays/ovl_00916830_reloc]
@@ -9115,6 +10183,7 @@
start: 0x9168A0
vram: 0x80A4EE00
follows_vram: ovl_00916830_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9168A0, asm, overlays/ovl_009168A0]
@@ -9124,6 +10193,7 @@
start: 0x9169E0
vram: 0x80A4EF40
follows_vram: ovl_009168A0
+ compress: True
subsegments:
- [0x9169E0, data, overlays/ovl_009168A0_reloc]
@@ -9132,6 +10202,7 @@
start: 0x916A10
vram: 0x80A4EF70
follows_vram: ovl_009168A0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x916A10, data, overlays/ovl_00916A10]
@@ -9140,6 +10211,7 @@
start: 0x916A60
vram: 0x80A4EFC0
follows_vram: ovl_00916A10
+ compress: True
subsegments:
- [0x916A60, data, overlays/ovl_00916A10_reloc]
@@ -9148,6 +10220,7 @@
start: 0x916A80
vram: 0x80A4EFE0
follows_vram: ovl_00916A10_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x916A80, data, overlays/ovl_00916A80]
@@ -9156,6 +10229,7 @@
start: 0x916AD0
vram: 0x80A4F030
follows_vram: ovl_00916A80
+ compress: True
subsegments:
- [0x916AD0, data, overlays/ovl_00916A80_reloc]
@@ -9164,6 +10238,7 @@
start: 0x916AF0
vram: 0x80A4F050
follows_vram: ovl_00916A80_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x916AF0, data, overlays/ovl_00916AF0]
@@ -9172,6 +10247,7 @@
start: 0x916B40
vram: 0x80A4F0A0
follows_vram: ovl_00916AF0
+ compress: True
subsegments:
- [0x916B40, data, overlays/ovl_00916AF0_reloc]
@@ -9180,6 +10256,7 @@
start: 0x916B60
vram: 0x80A4F0C0
follows_vram: ovl_00916AF0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x916B60, asm, overlays/ovl_00916B60]
@@ -9189,6 +10266,7 @@
start: 0x916E40
vram: 0x80A4F3A0
follows_vram: ovl_00916B60
+ compress: True
subsegments:
- [0x916E40, data, overlays/ovl_00916B60_reloc]
@@ -9197,6 +10275,7 @@
start: 0x916E70
vram: 0x80A4F3D0
follows_vram: ovl_00916B60_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x916E70, data, overlays/ovl_00916E70]
@@ -9205,6 +10284,7 @@
start: 0x916EC0
vram: 0x80A4F420
follows_vram: ovl_00916E70
+ compress: True
subsegments:
- [0x916EC0, data, overlays/ovl_00916E70_reloc]
@@ -9213,6 +10293,7 @@
start: 0x916EE0
vram: 0x80A4F440
follows_vram: ovl_00916E70_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x916EE0, data, overlays/ovl_00916EE0]
@@ -9221,6 +10302,7 @@
start: 0x916F30
vram: 0x80A4F490
follows_vram: ovl_00916EE0
+ compress: True
subsegments:
- [0x916F30, data, overlays/ovl_00916EE0_reloc]
@@ -9229,6 +10311,7 @@
start: 0x916F50
vram: 0x80A4F4B0
follows_vram: ovl_00916EE0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x916F50, data, overlays/ovl_00916F50]
@@ -9237,6 +10320,7 @@
start: 0x916FA0
vram: 0x80A4F500
follows_vram: ovl_00916F50
+ compress: True
subsegments:
- [0x916FA0, data, overlays/ovl_00916F50_reloc]
@@ -9245,6 +10329,7 @@
start: 0x916FC0
vram: 0x80A4F520
follows_vram: ovl_00916F50_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x916FC0, data, overlays/ovl_00916FC0]
@@ -9253,6 +10338,7 @@
start: 0x917010
vram: 0x80A4F570
follows_vram: ovl_00916FC0
+ compress: True
subsegments:
- [0x917010, data, overlays/ovl_00916FC0_reloc]
@@ -9261,6 +10347,7 @@
start: 0x917030
vram: 0x80A4F590
follows_vram: ovl_00916FC0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x917030, data, overlays/ovl_00917030]
@@ -9269,6 +10356,7 @@
start: 0x917080
vram: 0x80A4F5E0
follows_vram: ovl_00917030
+ compress: True
subsegments:
- [0x917080, data, overlays/ovl_00917030_reloc]
@@ -9277,6 +10365,7 @@
start: 0x9170A0
vram: 0x80A4F600
follows_vram: ovl_00917030_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9170A0, data, overlays/ovl_009170A0]
@@ -9285,6 +10374,7 @@
start: 0x9170F0
vram: 0x80A4F650
follows_vram: ovl_009170A0
+ compress: True
subsegments:
- [0x9170F0, data, overlays/ovl_009170A0_reloc]
@@ -9293,6 +10383,7 @@
start: 0x917110
vram: 0x80A4F670
follows_vram: ovl_009170A0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x917110, data, overlays/ovl_00917110]
@@ -9301,6 +10392,7 @@
start: 0x917160
vram: 0x80A4F6C0
follows_vram: ovl_00917110
+ compress: True
subsegments:
- [0x917160, data, overlays/ovl_00917110_reloc]
@@ -9309,6 +10401,7 @@
start: 0x917180
vram: 0x80A4F6E0
follows_vram: ovl_00917110_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x917180, asm, overlays/ovl_00917180]
@@ -9318,6 +10411,7 @@
start: 0x9174E0
vram: 0x80A4FA40
follows_vram: ovl_00917180
+ compress: True
subsegments:
- [0x9174E0, data, overlays/ovl_00917180_reloc]
@@ -9326,6 +10420,7 @@
start: 0x917510
vram: 0x80A4FA70
follows_vram: ovl_00917180_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x917510, asm, overlays/ovl_00917510]
@@ -9335,6 +10430,7 @@
start: 0x917870
vram: 0x80A4FDD0
follows_vram: ovl_00917510
+ compress: True
subsegments:
- [0x917870, data, overlays/ovl_00917510_reloc]
@@ -9343,6 +10439,7 @@
start: 0x9178A0
vram: 0x80A4FE00
follows_vram: ovl_00917510_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9178A0, asm, overlays/ovl_009178A0]
@@ -9352,6 +10449,7 @@
start: 0x917C00
vram: 0x80A50160
follows_vram: ovl_009178A0
+ compress: True
subsegments:
- [0x917C00, data, overlays/ovl_009178A0_reloc]
@@ -9360,6 +10458,7 @@
start: 0x917C30
vram: 0x80A50190
follows_vram: ovl_009178A0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x917C30, asm, overlays/ovl_00917C30]
@@ -9369,6 +10468,7 @@
start: 0x917F10
vram: 0x80A50470
follows_vram: ovl_00917C30
+ compress: True
subsegments:
- [0x917F10, data, overlays/ovl_00917C30_reloc]
@@ -9377,6 +10477,7 @@
start: 0x917F40
vram: 0x80A504A0
follows_vram: ovl_00917C30_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x917F40, data, overlays/ovl_00917F40]
@@ -9385,6 +10486,7 @@
start: 0x917F90
vram: 0x80A504F0
follows_vram: ovl_00917F40
+ compress: True
subsegments:
- [0x917F90, data, overlays/ovl_00917F40_reloc]
@@ -9393,6 +10495,7 @@
start: 0x917FB0
vram: 0x80A50510
follows_vram: ovl_00917F40_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x917FB0, data, overlays/ovl_00917FB0]
@@ -9401,6 +10504,7 @@
start: 0x918000
vram: 0x80A50560
follows_vram: ovl_00917FB0
+ compress: True
subsegments:
- [0x918000, data, overlays/ovl_00917FB0_reloc]
@@ -9409,6 +10513,7 @@
start: 0x918020
vram: 0x80A50580
follows_vram: ovl_00917FB0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x918020, data, overlays/ovl_00918020]
@@ -9417,6 +10522,7 @@
start: 0x918070
vram: 0x80A505D0
follows_vram: ovl_00918020
+ compress: True
subsegments:
- [0x918070, data, overlays/ovl_00918020_reloc]
@@ -9425,6 +10531,7 @@
start: 0x918090
vram: 0x80A505F0
follows_vram: ovl_00918020_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x918090, data, overlays/ovl_00918090]
@@ -9433,6 +10540,7 @@
start: 0x9180E0
vram: 0x80A50640
follows_vram: ovl_00918090
+ compress: True
subsegments:
- [0x9180E0, data, overlays/ovl_00918090_reloc]
@@ -9441,6 +10549,7 @@
start: 0x918100
vram: 0x80A50660
follows_vram: ovl_00918090_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x918100, data, overlays/ovl_00918100]
@@ -9449,6 +10558,7 @@
start: 0x918150
vram: 0x80A506B0
follows_vram: ovl_00918100
+ compress: True
subsegments:
- [0x918150, data, overlays/ovl_00918100_reloc]
@@ -9457,6 +10567,7 @@
start: 0x918170
vram: 0x80A506D0
follows_vram: ovl_00918100_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x918170, asm, overlays/ovl_00918170]
@@ -9467,6 +10578,7 @@
start: 0x918490
vram: 0x80A509F0
follows_vram: ovl_00918170
+ compress: True
subsegments:
- [0x918490, data, overlays/ovl_00918170_reloc]
@@ -9475,6 +10587,7 @@
start: 0x9184E0
vram: 0x80A50A40
follows_vram: ovl_00918170_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9184E0, asm, overlays/ovl_009184E0]
@@ -9484,6 +10597,7 @@
start: 0x9187C0
vram: 0x80A50D20
follows_vram: ovl_009184E0
+ compress: True
subsegments:
- [0x9187C0, data, overlays/ovl_009184E0_reloc]
@@ -9492,6 +10606,7 @@
start: 0x9187F0
vram: 0x80A50D50
follows_vram: ovl_009184E0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9187F0, data, overlays/ovl_009187F0]
@@ -9500,6 +10615,7 @@
start: 0x918840
vram: 0x80A50DA0
follows_vram: ovl_009187F0
+ compress: True
subsegments:
- [0x918840, data, overlays/ovl_009187F0_reloc]
@@ -9508,6 +10624,7 @@
start: 0x918860
vram: 0x80A50DC0
follows_vram: ovl_009187F0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x918860, asm, overlays/ovl_00918860]
@@ -9518,6 +10635,7 @@
start: 0x918BD0
vram: 0x80A51130
follows_vram: ovl_00918860
+ compress: True
subsegments:
- [0x918BD0, data, overlays/ovl_00918860_reloc]
@@ -9526,6 +10644,7 @@
start: 0x918C20
vram: 0x80A51180
follows_vram: ovl_00918860_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x918C20, asm, overlays/ovl_00918C20]
@@ -9536,6 +10655,7 @@
start: 0x919390
vram: 0x80A518F0
follows_vram: ovl_00918C20
+ compress: True
subsegments:
- [0x919390, data, overlays/ovl_00918C20_reloc]
@@ -9544,6 +10664,7 @@
start: 0x919400
vram: 0x80A51960
follows_vram: ovl_00918C20_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x919400, asm, overlays/ovl_00919400]
@@ -9554,6 +10675,7 @@
start: 0x919730
vram: 0x80A51C90
follows_vram: ovl_00919400
+ compress: True
subsegments:
- [0x919730, data, overlays/ovl_00919400_reloc]
@@ -9562,6 +10684,7 @@
start: 0x919760
vram: 0x80A51CC0
follows_vram: ovl_00919400_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x919760, asm, overlays/ovl_00919760]
@@ -9572,6 +10695,7 @@
start: 0x91A230
vram: 0x80A52790
follows_vram: ovl_00919760
+ compress: True
subsegments:
- [0x91A230, data, overlays/ovl_00919760_reloc]
@@ -9580,6 +10704,7 @@
start: 0x91A2D0
vram: 0x80A52830
follows_vram: ovl_00919760_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x91A2D0, asm, overlays/ovl_0091A2D0]
@@ -9590,6 +10715,7 @@
start: 0x91A860
vram: 0x80A52DC0
follows_vram: ovl_0091A2D0
+ compress: True
subsegments:
- [0x91A860, data, overlays/ovl_0091A2D0_reloc]
@@ -9598,6 +10724,7 @@
start: 0x91A8B0
vram: 0x80A52E10
follows_vram: ovl_0091A2D0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x91A8B0, asm, overlays/ovl_0091A8B0]
@@ -9608,6 +10735,7 @@
start: 0x91AFF0
vram: 0x80A53550
follows_vram: ovl_0091A8B0
+ compress: True
subsegments:
- [0x91AFF0, data, overlays/ovl_0091A8B0_reloc]
@@ -9616,6 +10744,7 @@
start: 0x91B080
vram: 0x80A535E0
follows_vram: ovl_0091A8B0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x91B080, asm, overlays/ovl_0091B080]
@@ -9626,6 +10755,7 @@
start: 0x91B660
vram: 0x80A53BC0
follows_vram: ovl_0091B080
+ compress: True
subsegments:
- [0x91B660, data, overlays/ovl_0091B080_reloc]
@@ -9634,6 +10764,7 @@
start: 0x91B700
vram: 0x80A53C60
follows_vram: ovl_0091B080_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x91B700, asm, overlays/ovl_0091B700]
@@ -9644,6 +10775,7 @@
start: 0x91BEF0
vram: 0x80A54450
follows_vram: ovl_0091B700
+ compress: True
subsegments:
- [0x91BEF0, data, overlays/ovl_0091B700_reloc]
@@ -9652,6 +10784,7 @@
start: 0x91BF30
vram: 0x80A54490
follows_vram: ovl_0091B700_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x91BF30, asm, overlays/ovl_0091BF30]
@@ -9661,6 +10794,7 @@
start: 0x91C160
vram: 0x80A546C0
follows_vram: ovl_0091BF30
+ compress: True
subsegments:
- [0x91C160, data, overlays/ovl_0091BF30_reloc]
@@ -9669,6 +10803,7 @@
start: 0x91C190
vram: 0x80A546F0
follows_vram: ovl_0091BF30_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x91C190, asm, overlays/ovl_0091C190]
@@ -9679,6 +10814,7 @@
start: 0x91C5A0
vram: 0x80A54B00
follows_vram: ovl_0091C190
+ compress: True
subsegments:
- [0x91C5A0, data, overlays/ovl_0091C190_reloc]
@@ -9687,6 +10823,7 @@
start: 0x91C600
vram: 0x80A54B60
follows_vram: ovl_0091C190_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x91C600, asm, overlays/ovl_0091C600]
@@ -9697,6 +10834,7 @@
start: 0x91CCA0
vram: 0x80A55200
follows_vram: ovl_0091C600
+ compress: True
subsegments:
- [0x91CCA0, data, overlays/ovl_0091C600_reloc]
@@ -9705,6 +10843,7 @@
start: 0x91CD10
vram: 0x80A55270
follows_vram: ovl_0091C600_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x91CD10, asm, overlays/ovl_0091CD10]
@@ -9715,6 +10854,7 @@
start: 0x91D3D0
vram: 0x80A55930
follows_vram: ovl_0091CD10
+ compress: True
subsegments:
- [0x91D3D0, data, overlays/ovl_0091CD10_reloc]
@@ -9723,6 +10863,7 @@
start: 0x91D450
vram: 0x80A559B0
follows_vram: ovl_0091CD10_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x91D450, asm, overlays/ovl_0091D450]
@@ -9733,6 +10874,7 @@
start: 0x91D8D0
vram: 0x80A55E30
follows_vram: ovl_0091D450
+ compress: True
subsegments:
- [0x91D8D0, data, overlays/ovl_0091D450_reloc]
@@ -9741,6 +10883,7 @@
start: 0x91D910
vram: 0x80A55E70
follows_vram: ovl_0091D450_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x91D910, asm, overlays/ovl_0091D910]
@@ -9751,6 +10894,7 @@
start: 0x91DEB0
vram: 0x80A56410
follows_vram: ovl_0091D910
+ compress: True
subsegments:
- [0x91DEB0, data, overlays/ovl_0091D910_reloc]
@@ -9759,6 +10903,7 @@
start: 0x91DF10
vram: 0x80A56470
follows_vram: ovl_0091D910_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x91DF10, asm, overlays/ovl_0091DF10]
@@ -9768,6 +10913,7 @@
start: 0x91E390
vram: 0x80A568F0
follows_vram: ovl_0091DF10
+ compress: True
subsegments:
- [0x91E390, data, overlays/ovl_0091DF10_reloc]
@@ -9776,6 +10922,7 @@
start: 0x91E3C0
vram: 0x80A56920
follows_vram: ovl_0091DF10_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x91E3C0, asm, overlays/ovl_0091E3C0]
@@ -9786,6 +10933,7 @@
start: 0x91E7A0
vram: 0x80A56D00
follows_vram: ovl_0091E3C0
+ compress: True
subsegments:
- [0x91E7A0, data, overlays/ovl_0091E3C0_reloc]
@@ -9794,6 +10942,7 @@
start: 0x91E800
vram: 0x80A56D60
follows_vram: ovl_0091E3C0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x91E800, data, overlays/ovl_0091E800]
@@ -9802,6 +10951,7 @@
start: 0x91E850
vram: 0x80A56DB0
follows_vram: ovl_0091E800
+ compress: True
subsegments:
- [0x91E850, data, overlays/ovl_0091E800_reloc]
@@ -9810,6 +10960,7 @@
start: 0x91E870
vram: 0x80A56DD0
follows_vram: ovl_0091E800_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x91E870, data, overlays/ovl_0091E870]
@@ -9818,6 +10969,7 @@
start: 0x91E8C0
vram: 0x80A56E20
follows_vram: ovl_0091E870
+ compress: True
subsegments:
- [0x91E8C0, data, overlays/ovl_0091E870_reloc]
@@ -9826,6 +10978,7 @@
start: 0x91E8E0
vram: 0x80A56E40
follows_vram: ovl_0091E870_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x91E8E0, asm, overlays/ovl_0091E8E0]
@@ -9835,6 +10988,7 @@
start: 0x91EC40
vram: 0x80A571A0
follows_vram: ovl_0091E8E0
+ compress: True
subsegments:
- [0x91EC40, data, overlays/ovl_0091E8E0_reloc]
@@ -9843,6 +10997,7 @@
start: 0x91EC70
vram: 0x80A571D0
follows_vram: ovl_0091E8E0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x91EC70, asm, overlays/ovl_0091EC70]
@@ -9853,6 +11008,7 @@
start: 0x91F370
vram: 0x80A578D0
follows_vram: ovl_0091EC70
+ compress: True
subsegments:
- [0x91F370, data, overlays/ovl_0091EC70_reloc]
@@ -9861,6 +11017,7 @@
start: 0x91F3E0
vram: 0x80A57940
follows_vram: ovl_0091EC70_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x91F3E0, asm, overlays/ovl_0091F3E0]
@@ -9871,6 +11028,7 @@
start: 0x91FB10
vram: 0x80A58070
follows_vram: ovl_0091F3E0
+ compress: True
subsegments:
- [0x91FB10, data, overlays/ovl_0091F3E0_reloc]
@@ -9879,6 +11037,7 @@
start: 0x91FB80
vram: 0x80A580E0
follows_vram: ovl_0091F3E0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x91FB80, data, overlays/ovl_0091FB80]
@@ -9887,6 +11046,7 @@
start: 0x91FBD0
vram: 0x80A58130
follows_vram: ovl_0091FB80
+ compress: True
subsegments:
- [0x91FBD0, data, overlays/ovl_0091FB80_reloc]
@@ -9895,6 +11055,7 @@
start: 0x91FBF0
vram: 0x80A58150
follows_vram: ovl_0091FB80_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x91FBF0, data, overlays/ovl_0091FBF0]
@@ -9903,6 +11064,7 @@
start: 0x91FC40
vram: 0x80A581A0
follows_vram: ovl_0091FBF0
+ compress: True
subsegments:
- [0x91FC40, data, overlays/ovl_0091FBF0_reloc]
@@ -9911,6 +11073,7 @@
start: 0x91FC60
vram: 0x80A581C0
follows_vram: ovl_0091FBF0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x91FC60, data, overlays/ovl_0091FC60]
@@ -9919,6 +11082,7 @@
start: 0x91FCB0
vram: 0x80A58210
follows_vram: ovl_0091FC60
+ compress: True
subsegments:
- [0x91FCB0, data, overlays/ovl_0091FC60_reloc]
@@ -9927,6 +11091,7 @@
start: 0x91FCD0
vram: 0x80A58230
follows_vram: ovl_0091FC60_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x91FCD0, data, overlays/ovl_0091FCD0]
@@ -9935,6 +11100,7 @@
start: 0x91FD20
vram: 0x80A58280
follows_vram: ovl_0091FCD0
+ compress: True
subsegments:
- [0x91FD20, data, overlays/ovl_0091FCD0_reloc]
@@ -9943,6 +11109,7 @@
start: 0x91FD40
vram: 0x80A582A0
follows_vram: ovl_0091FCD0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x91FD40, data, overlays/ovl_0091FD40]
@@ -9951,6 +11118,7 @@
start: 0x91FD90
vram: 0x80A582F0
follows_vram: ovl_0091FD40
+ compress: True
subsegments:
- [0x91FD90, data, overlays/ovl_0091FD40_reloc]
@@ -9959,6 +11127,7 @@
start: 0x91FDB0
vram: 0x80A58310
follows_vram: ovl_0091FD40_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x91FDB0, asm, overlays/ovl_0091FDB0]
@@ -9968,6 +11137,7 @@
start: 0x920260
vram: 0x80A587C0
follows_vram: ovl_0091FDB0
+ compress: True
subsegments:
- [0x920260, data, overlays/ovl_0091FDB0_reloc]
@@ -9976,6 +11146,7 @@
start: 0x9202A0
vram: 0x80A58800
follows_vram: ovl_0091FDB0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9202A0, asm, overlays/ovl_009202A0]
@@ -9985,6 +11156,7 @@
start: 0x920380
vram: 0x80A588E0
follows_vram: ovl_009202A0
+ compress: True
subsegments:
- [0x920380, data, overlays/ovl_009202A0_reloc]
@@ -9993,6 +11165,7 @@
start: 0x9203B0
vram: 0x80A58910
follows_vram: ovl_009202A0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9203B0, asm, overlays/ovl_009203B0]
@@ -10002,6 +11175,7 @@
start: 0x920490
vram: 0x80A589F0
follows_vram: ovl_009203B0
+ compress: True
subsegments:
- [0x920490, data, overlays/ovl_009203B0_reloc]
@@ -10010,6 +11184,7 @@
start: 0x9204C0
vram: 0x80A58A20
follows_vram: ovl_009203B0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9204C0, asm, overlays/ovl_009204C0]
@@ -10019,6 +11194,7 @@
start: 0x9205A0
vram: 0x80A58B00
follows_vram: ovl_009204C0
+ compress: True
subsegments:
- [0x9205A0, data, overlays/ovl_009204C0_reloc]
@@ -10027,6 +11203,7 @@
start: 0x9205D0
vram: 0x80A58B30
follows_vram: ovl_009204C0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9205D0, asm, overlays/ovl_009205D0]
@@ -10036,6 +11213,7 @@
start: 0x9206B0
vram: 0x80A58C10
follows_vram: ovl_009205D0
+ compress: True
subsegments:
- [0x9206B0, data, overlays/ovl_009205D0_reloc]
@@ -10044,6 +11222,7 @@
start: 0x9206E0
vram: 0x80A58C40
follows_vram: ovl_009205D0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9206E0, asm, overlays/ovl_009206E0]
@@ -10054,6 +11233,7 @@
start: 0x920CD0
vram: 0x80A59230
follows_vram: ovl_009206E0
+ compress: True
subsegments:
- [0x920CD0, data, overlays/ovl_009206E0_reloc]
@@ -10062,6 +11242,7 @@
start: 0x920D20
vram: 0x80A59280
follows_vram: ovl_009206E0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x920D20, data, overlays/ovl_00920D20]
@@ -10070,6 +11251,7 @@
start: 0x920D70
vram: 0x80A592D0
follows_vram: ovl_00920D20
+ compress: True
subsegments:
- [0x920D70, data, overlays/ovl_00920D20_reloc]
@@ -10078,6 +11260,7 @@
start: 0x920D90
vram: 0x80A592F0
follows_vram: ovl_00920D20_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x920D90, data, overlays/ovl_00920D90]
@@ -10086,6 +11269,7 @@
start: 0x920DE0
vram: 0x80A59340
follows_vram: ovl_00920D90
+ compress: True
subsegments:
- [0x920DE0, data, overlays/ovl_00920D90_reloc]
@@ -10094,6 +11278,7 @@
start: 0x920E00
vram: 0x80A59360
follows_vram: ovl_00920D90_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x920E00, asm, overlays/ovl_00920E00]
@@ -10104,6 +11289,7 @@
start: 0x922270
vram: 0x80A5A7D0
follows_vram: ovl_00920E00
+ compress: True
subsegments:
- [0x922270, data, overlays/ovl_00920E00_reloc]
@@ -10112,6 +11298,7 @@
start: 0x922380
vram: 0x80A5A8E0
follows_vram: ovl_00920E00_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x922380, data, overlays/ovl_00922380]
@@ -10120,6 +11307,7 @@
start: 0x9223D0
vram: 0x80A5A930
follows_vram: ovl_00922380
+ compress: True
subsegments:
- [0x9223D0, data, overlays/ovl_00922380_reloc]
@@ -10128,6 +11316,7 @@
start: 0x9223F0
vram: 0x80A5A950
follows_vram: ovl_00922380_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9223F0, asm, overlays/ovl_009223F0]
@@ -10138,6 +11327,7 @@
start: 0x9229B0
vram: 0x80A5AF10
follows_vram: ovl_009223F0
+ compress: True
subsegments:
- [0x9229B0, data, overlays/ovl_009223F0_reloc]
@@ -10146,6 +11336,7 @@
start: 0x922A10
vram: 0x80A5AF70
follows_vram: ovl_009223F0_reloc
+ compress: True
bss_size: 0x7800
subsegments:
- [0x922A10, asm, overlays/ovl_00922A10]
@@ -10157,6 +11348,7 @@
start: 0x924590
vram: 0x80A642F0
follows_vram: ovl_00922A10
+ compress: True
subsegments:
- [0x924590, data, overlays/ovl_00922A10_reloc]
@@ -10165,6 +11357,7 @@
start: 0x9247E0
vram: 0x80A64540
follows_vram: ovl_00922A10_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9247E0, data, overlays/ovl_009247E0]
@@ -10173,6 +11366,7 @@
start: 0x924830
vram: 0x80A64590
follows_vram: ovl_009247E0
+ compress: True
subsegments:
- [0x924830, data, overlays/ovl_009247E0_reloc]
@@ -10181,6 +11375,7 @@
start: 0x924850
vram: 0x80A645B0
follows_vram: ovl_009247E0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x924850, data, overlays/ovl_00924850]
@@ -10189,6 +11384,7 @@
start: 0x9248A0
vram: 0x80A64600
follows_vram: ovl_00924850
+ compress: True
subsegments:
- [0x9248A0, data, overlays/ovl_00924850_reloc]
@@ -10197,6 +11393,7 @@
start: 0x9248C0
vram: 0x80A64620
follows_vram: ovl_00924850_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9248C0, data, overlays/ovl_009248C0]
@@ -10205,6 +11402,7 @@
start: 0x924910
vram: 0x80A64670
follows_vram: ovl_009248C0
+ compress: True
subsegments:
- [0x924910, data, overlays/ovl_009248C0_reloc]
@@ -10213,6 +11411,7 @@
start: 0x924930
vram: 0x80A64690
follows_vram: ovl_009248C0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x924930, data, overlays/ovl_00924930]
@@ -10221,6 +11420,7 @@
start: 0x924980
vram: 0x80A646E0
follows_vram: ovl_00924930
+ compress: True
subsegments:
- [0x924980, data, overlays/ovl_00924930_reloc]
@@ -10229,6 +11429,7 @@
start: 0x9249A0
vram: 0x80A64700
follows_vram: ovl_00924930_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9249A0, data, overlays/ovl_009249A0]
@@ -10237,6 +11438,7 @@
start: 0x9249F0
vram: 0x80A64750
follows_vram: ovl_009249A0
+ compress: True
subsegments:
- [0x9249F0, data, overlays/ovl_009249A0_reloc]
@@ -10245,6 +11447,7 @@
start: 0x924A10
vram: 0x80A64770
follows_vram: ovl_009249A0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x924A10, data, overlays/ovl_00924A10]
@@ -10253,6 +11456,7 @@
start: 0x924A60
vram: 0x80A647C0
follows_vram: ovl_00924A10
+ compress: True
subsegments:
- [0x924A60, data, overlays/ovl_00924A10_reloc]
@@ -10261,6 +11465,7 @@
start: 0x924A80
vram: 0x80A647E0
follows_vram: ovl_00924A10_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x924A80, data, overlays/ovl_00924A80]
@@ -10269,6 +11474,7 @@
start: 0x924AD0
vram: 0x80A64830
follows_vram: ovl_00924A80
+ compress: True
subsegments:
- [0x924AD0, data, overlays/ovl_00924A80_reloc]
@@ -10277,6 +11483,7 @@
start: 0x924AF0
vram: 0x80A64850
follows_vram: ovl_00924A80_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x924AF0, data, overlays/ovl_00924AF0]
@@ -10285,6 +11492,7 @@
start: 0x924B40
vram: 0x80A648A0
follows_vram: ovl_00924AF0
+ compress: True
subsegments:
- [0x924B40, data, overlays/ovl_00924AF0_reloc]
@@ -10293,6 +11501,7 @@
start: 0x924B60
vram: 0x80A648C0
follows_vram: ovl_00924AF0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x924B60, data, overlays/ovl_00924B60]
@@ -10301,6 +11510,7 @@
start: 0x924BB0
vram: 0x80A64910
follows_vram: ovl_00924B60
+ compress: True
subsegments:
- [0x924BB0, data, overlays/ovl_00924B60_reloc]
@@ -10309,6 +11519,7 @@
start: 0x924BD0
vram: 0x80A64930
follows_vram: ovl_00924B60_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x924BD0, data, overlays/ovl_00924BD0]
@@ -10317,6 +11528,7 @@
start: 0x924C20
vram: 0x80A64980
follows_vram: ovl_00924BD0
+ compress: True
subsegments:
- [0x924C20, data, overlays/ovl_00924BD0_reloc]
@@ -10325,6 +11537,7 @@
start: 0x924C40
vram: 0x80A649A0
follows_vram: ovl_00924BD0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x924C40, asm, overlays/ovl_00924C40]
@@ -10335,6 +11548,7 @@
start: 0x927200
vram: 0x80A66F60
follows_vram: ovl_00924C40
+ compress: True
subsegments:
- [0x927200, data, overlays/ovl_00924C40_reloc]
@@ -10343,6 +11557,7 @@
start: 0x927440
vram: 0x80A671A0
follows_vram: ovl_00924C40_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x927440, asm, overlays/ovl_00927440]
@@ -10353,6 +11568,7 @@
start: 0x927860
vram: 0x80A675C0
follows_vram: ovl_00927440
+ compress: True
subsegments:
- [0x927860, data, overlays/ovl_00927440_reloc]
@@ -10361,6 +11577,7 @@
start: 0x927910
vram: 0x80A67670
follows_vram: ovl_00927440_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x927910, asm, overlays/ovl_00927910]
@@ -10371,6 +11588,7 @@
start: 0x928170
vram: 0x80A67ED0
follows_vram: ovl_00927910
+ compress: True
subsegments:
- [0x928170, data, overlays/ovl_00927910_reloc]
@@ -10379,6 +11597,7 @@
start: 0x928230
vram: 0x80A67F90
follows_vram: ovl_00927910_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x928230, asm, overlays/ovl_00928230]
@@ -10389,6 +11608,7 @@
start: 0x9284D0
vram: 0x80A68230
follows_vram: ovl_00928230
+ compress: True
subsegments:
- [0x9284D0, data, overlays/ovl_00928230_reloc]
@@ -10397,6 +11617,7 @@
start: 0x928530
vram: 0x80A68290
follows_vram: ovl_00928230_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x928530, asm, overlays/ovl_00928530]
@@ -10407,6 +11628,7 @@
start: 0x928770
vram: 0x80A684D0
follows_vram: ovl_00928530
+ compress: True
subsegments:
- [0x928770, data, overlays/ovl_00928530_reloc]
@@ -10415,6 +11637,7 @@
start: 0x9287B0
vram: 0x80A68510
follows_vram: ovl_00928530_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9287B0, asm, overlays/ovl_009287B0]
@@ -10425,6 +11648,7 @@
start: 0x928C80
vram: 0x80A689E0
follows_vram: ovl_009287B0
+ compress: True
subsegments:
- [0x928C80, data, overlays/ovl_009287B0_reloc]
@@ -10433,6 +11657,7 @@
start: 0x928CC0
vram: 0x80A68A20
follows_vram: ovl_009287B0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x928CC0, data, overlays/ovl_00928CC0]
@@ -10441,6 +11666,7 @@
start: 0x928D10
vram: 0x80A68A70
follows_vram: ovl_00928CC0
+ compress: True
subsegments:
- [0x928D10, data, overlays/ovl_00928CC0_reloc]
@@ -10449,6 +11675,7 @@
start: 0x928D30
vram: 0x80A68A90
follows_vram: ovl_00928CC0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x928D30, asm, overlays/ovl_00928D30]
@@ -10458,6 +11685,7 @@
start: 0x929140
vram: 0x80A68EA0
follows_vram: ovl_00928D30
+ compress: True
subsegments:
- [0x929140, data, overlays/ovl_00928D30_reloc]
@@ -10466,6 +11694,7 @@
start: 0x929170
vram: 0x80A68ED0
follows_vram: ovl_00928D30_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x929170, data, overlays/ovl_00929170]
@@ -10474,6 +11703,7 @@
start: 0x9291C0
vram: 0x80A68F20
follows_vram: ovl_00929170
+ compress: True
subsegments:
- [0x9291C0, data, overlays/ovl_00929170_reloc]
@@ -10482,6 +11712,7 @@
start: 0x9291E0
vram: 0x80A68F40
follows_vram: ovl_00929170_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9291E0, data, overlays/ovl_009291E0]
@@ -10490,6 +11721,7 @@
start: 0x929230
vram: 0x80A68F90
follows_vram: ovl_009291E0
+ compress: True
subsegments:
- [0x929230, data, overlays/ovl_009291E0_reloc]
@@ -10498,6 +11730,7 @@
start: 0x929250
vram: 0x80A68FB0
follows_vram: ovl_009291E0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x929250, data, overlays/ovl_00929250]
@@ -10506,6 +11739,7 @@
start: 0x9292A0
vram: 0x80A69000
follows_vram: ovl_00929250
+ compress: True
subsegments:
- [0x9292A0, data, overlays/ovl_00929250_reloc]
@@ -10514,6 +11748,7 @@
start: 0x9292C0
vram: 0x80A69020
follows_vram: ovl_00929250_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9292C0, data, overlays/ovl_009292C0]
@@ -10522,6 +11757,7 @@
start: 0x929310
vram: 0x80A69070
follows_vram: ovl_009292C0
+ compress: True
subsegments:
- [0x929310, data, overlays/ovl_009292C0_reloc]
@@ -10530,6 +11766,7 @@
start: 0x929330
vram: 0x80A69090
follows_vram: ovl_009292C0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x929330, data, overlays/ovl_00929330]
@@ -10538,6 +11775,7 @@
start: 0x929380
vram: 0x80A690E0
follows_vram: ovl_00929330
+ compress: True
subsegments:
- [0x929380, data, overlays/ovl_00929330_reloc]
@@ -10546,6 +11784,7 @@
start: 0x9293A0
vram: 0x80A69100
follows_vram: ovl_00929330_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9293A0, data, overlays/ovl_009293A0]
@@ -10554,6 +11793,7 @@
start: 0x9293F0
vram: 0x80A69150
follows_vram: ovl_009293A0
+ compress: True
subsegments:
- [0x9293F0, data, overlays/ovl_009293A0_reloc]
@@ -10562,6 +11802,7 @@
start: 0x929410
vram: 0x80A69170
follows_vram: ovl_009293A0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x929410, data, overlays/ovl_00929410]
@@ -10570,6 +11811,7 @@
start: 0x929460
vram: 0x80A691C0
follows_vram: ovl_00929410
+ compress: True
subsegments:
- [0x929460, data, overlays/ovl_00929410_reloc]
@@ -10578,6 +11820,7 @@
start: 0x929480
vram: 0x80A691E0
follows_vram: ovl_00929410_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x929480, data, overlays/ovl_00929480]
@@ -10586,6 +11829,7 @@
start: 0x9294D0
vram: 0x80A69230
follows_vram: ovl_00929480
+ compress: True
subsegments:
- [0x9294D0, data, overlays/ovl_00929480_reloc]
@@ -10594,6 +11838,7 @@
start: 0x9294F0
vram: 0x80A69250
follows_vram: ovl_00929480_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9294F0, data, overlays/ovl_009294F0]
@@ -10602,6 +11847,7 @@
start: 0x929540
vram: 0x80A692A0
follows_vram: ovl_009294F0
+ compress: True
subsegments:
- [0x929540, data, overlays/ovl_009294F0_reloc]
@@ -10610,6 +11856,7 @@
start: 0x929560
vram: 0x80A692C0
follows_vram: ovl_009294F0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x929560, data, overlays/ovl_00929560]
@@ -10618,6 +11865,7 @@
start: 0x9295B0
vram: 0x80A69310
follows_vram: ovl_00929560
+ compress: True
subsegments:
- [0x9295B0, data, overlays/ovl_00929560_reloc]
@@ -10626,6 +11874,7 @@
start: 0x9295D0
vram: 0x80A69330
follows_vram: ovl_00929560_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9295D0, data, overlays/ovl_009295D0]
@@ -10634,6 +11883,7 @@
start: 0x929620
vram: 0x80A69380
follows_vram: ovl_009295D0
+ compress: True
subsegments:
- [0x929620, data, overlays/ovl_009295D0_reloc]
@@ -10642,6 +11892,7 @@
start: 0x929640
vram: 0x80A693A0
follows_vram: ovl_009295D0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x929640, data, overlays/ovl_00929640]
@@ -10650,6 +11901,7 @@
start: 0x929690
vram: 0x80A693F0
follows_vram: ovl_00929640
+ compress: True
subsegments:
- [0x929690, data, overlays/ovl_00929640_reloc]
@@ -10658,6 +11910,7 @@
start: 0x9296B0
vram: 0x80A69410
follows_vram: ovl_00929640_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9296B0, data, overlays/ovl_009296B0]
@@ -10666,6 +11919,7 @@
start: 0x929700
vram: 0x80A69460
follows_vram: ovl_009296B0
+ compress: True
subsegments:
- [0x929700, data, overlays/ovl_009296B0_reloc]
@@ -10674,6 +11928,7 @@
start: 0x929720
vram: 0x80A69480
follows_vram: ovl_009296B0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x929720, data, overlays/ovl_00929720]
@@ -10682,6 +11937,7 @@
start: 0x929770
vram: 0x80A694D0
follows_vram: ovl_00929720
+ compress: True
subsegments:
- [0x929770, data, overlays/ovl_00929720_reloc]
@@ -10690,6 +11946,7 @@
start: 0x929790
vram: 0x80A694F0
follows_vram: ovl_00929720_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x929790, data, overlays/ovl_00929790]
@@ -10698,6 +11955,7 @@
start: 0x9297E0
vram: 0x80A69540
follows_vram: ovl_00929790
+ compress: True
subsegments:
- [0x9297E0, data, overlays/ovl_00929790_reloc]
@@ -10706,6 +11964,7 @@
start: 0x929800
vram: 0x80A69560
follows_vram: ovl_00929790_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x929800, asm, overlays/ovl_00929800]
@@ -10716,6 +11975,7 @@
start: 0x929E20
vram: 0x80A69B80
follows_vram: ovl_00929800
+ compress: True
subsegments:
- [0x929E20, data, overlays/ovl_00929800_reloc]
@@ -10724,6 +11984,7 @@
start: 0x929E80
vram: 0x80A69BE0
follows_vram: ovl_00929800_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x929E80, asm, overlays/ovl_00929E80]
@@ -10733,6 +11994,7 @@
start: 0x929F70
vram: 0x80A69CD0
follows_vram: ovl_00929E80
+ compress: True
subsegments:
- [0x929F70, data, overlays/ovl_00929E80_reloc]
@@ -10741,6 +12003,7 @@
start: 0x929F90
vram: 0x80A69CF0
follows_vram: ovl_00929E80_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x929F90, data, overlays/ovl_00929F90]
@@ -10749,6 +12012,7 @@
start: 0x929FE0
vram: 0x80A69D40
follows_vram: ovl_00929F90
+ compress: True
subsegments:
- [0x929FE0, data, overlays/ovl_00929F90_reloc]
@@ -10757,6 +12021,7 @@
start: 0x92A000
vram: 0x80A69D60
follows_vram: ovl_00929F90_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x92A000, data, overlays/ovl_0092A000]
@@ -10765,6 +12030,7 @@
start: 0x92A050
vram: 0x80A69DB0
follows_vram: ovl_0092A000
+ compress: True
subsegments:
- [0x92A050, data, overlays/ovl_0092A000_reloc]
@@ -10773,6 +12039,7 @@
start: 0x92A070
vram: 0x80A69DD0
follows_vram: ovl_0092A000_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x92A070, data, overlays/ovl_0092A070]
@@ -10781,6 +12048,7 @@
start: 0x92A0C0
vram: 0x80A69E20
follows_vram: ovl_0092A070
+ compress: True
subsegments:
- [0x92A0C0, data, overlays/ovl_0092A070_reloc]
@@ -10789,6 +12057,7 @@
start: 0x92A0E0
vram: 0x80A69E40
follows_vram: ovl_0092A070_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x92A0E0, data, overlays/ovl_0092A0E0]
@@ -10797,6 +12066,7 @@
start: 0x92A130
vram: 0x80A69E90
follows_vram: ovl_0092A0E0
+ compress: True
subsegments:
- [0x92A130, data, overlays/ovl_0092A0E0_reloc]
@@ -10805,6 +12075,7 @@
start: 0x92A150
vram: 0x80A69EB0
follows_vram: ovl_0092A0E0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x92A150, data, overlays/ovl_0092A150]
@@ -10813,6 +12084,7 @@
start: 0x92A1A0
vram: 0x80A69F00
follows_vram: ovl_0092A150
+ compress: True
subsegments:
- [0x92A1A0, data, overlays/ovl_0092A150_reloc]
@@ -10821,6 +12093,7 @@
start: 0x92A1C0
vram: 0x80A69F20
follows_vram: ovl_0092A150_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x92A1C0, data, overlays/ovl_0092A1C0]
@@ -10829,6 +12102,7 @@
start: 0x92A210
vram: 0x80A69F70
follows_vram: ovl_0092A1C0
+ compress: True
subsegments:
- [0x92A210, data, overlays/ovl_0092A1C0_reloc]
@@ -10837,6 +12111,7 @@
start: 0x92A230
vram: 0x80A69F90
follows_vram: ovl_0092A1C0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x92A230, data, overlays/ovl_0092A230]
@@ -10845,6 +12120,7 @@
start: 0x92A280
vram: 0x80A69FE0
follows_vram: ovl_0092A230
+ compress: True
subsegments:
- [0x92A280, data, overlays/ovl_0092A230_reloc]
@@ -10853,6 +12129,7 @@
start: 0x92A2A0
vram: 0x80A6A000
follows_vram: ovl_0092A230_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x92A2A0, asm, overlays/ovl_0092A2A0]
@@ -10862,6 +12139,7 @@
start: 0x92A390
vram: 0x80A6A0F0
follows_vram: ovl_0092A2A0
+ compress: True
subsegments:
- [0x92A390, data, overlays/ovl_0092A2A0_reloc]
@@ -10870,6 +12148,7 @@
start: 0x92A3B0
vram: 0x80A6A110
follows_vram: ovl_0092A2A0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x92A3B0, data, overlays/ovl_0092A3B0]
@@ -10878,6 +12157,7 @@
start: 0x92A400
vram: 0x80A6A160
follows_vram: ovl_0092A3B0
+ compress: True
subsegments:
- [0x92A400, data, overlays/ovl_0092A3B0_reloc]
@@ -10886,6 +12166,7 @@
start: 0x92A420
vram: 0x80A6A180
follows_vram: ovl_0092A3B0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x92A420, data, overlays/ovl_0092A420]
@@ -10894,6 +12175,7 @@
start: 0x92A470
vram: 0x80A6A1D0
follows_vram: ovl_0092A420
+ compress: True
subsegments:
- [0x92A470, data, overlays/ovl_0092A420_reloc]
@@ -10902,6 +12184,7 @@
start: 0x92A490
vram: 0x80A6A1F0
follows_vram: ovl_0092A420_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x92A490, asm, overlays/ovl_0092A490]
@@ -10911,6 +12194,7 @@
start: 0x92A6E0
vram: 0x80A6A440
follows_vram: ovl_0092A490
+ compress: True
subsegments:
- [0x92A6E0, data, overlays/ovl_0092A490_reloc]
@@ -10919,6 +12203,7 @@
start: 0x92A730
vram: 0x80A6A490
follows_vram: ovl_0092A490_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x92A730, asm, overlays/ovl_0092A730]
@@ -10928,6 +12213,7 @@
start: 0x92A820
vram: 0x80A6A580
follows_vram: ovl_0092A730
+ compress: True
subsegments:
- [0x92A820, data, overlays/ovl_0092A730_reloc]
@@ -10936,6 +12222,7 @@
start: 0x92A840
vram: 0x80A6A5A0
follows_vram: ovl_0092A730_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x92A840, data, overlays/ovl_0092A840]
@@ -10944,6 +12231,7 @@
start: 0x92A890
vram: 0x80A6A5F0
follows_vram: ovl_0092A840
+ compress: True
subsegments:
- [0x92A890, data, overlays/ovl_0092A840_reloc]
@@ -10952,6 +12240,7 @@
start: 0x92A8B0
vram: 0x80A6A610
follows_vram: ovl_0092A840_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x92A8B0, data, overlays/ovl_0092A8B0]
@@ -10960,6 +12249,7 @@
start: 0x92A900
vram: 0x80A6A660
follows_vram: ovl_0092A8B0
+ compress: True
subsegments:
- [0x92A900, data, overlays/ovl_0092A8B0_reloc]
@@ -10968,6 +12258,7 @@
start: 0x92A920
vram: 0x80A6A680
follows_vram: ovl_0092A8B0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x92A920, data, overlays/ovl_0092A920]
@@ -10976,6 +12267,7 @@
start: 0x92A970
vram: 0x80A6A6D0
follows_vram: ovl_0092A920
+ compress: True
subsegments:
- [0x92A970, data, overlays/ovl_0092A920_reloc]
@@ -10984,6 +12276,7 @@
start: 0x92A990
vram: 0x80A6A6F0
follows_vram: ovl_0092A920_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x92A990, data, overlays/ovl_0092A990]
@@ -10992,6 +12285,7 @@
start: 0x92A9E0
vram: 0x80A6A740
follows_vram: ovl_0092A990
+ compress: True
subsegments:
- [0x92A9E0, data, overlays/ovl_0092A990_reloc]
@@ -11000,6 +12294,7 @@
start: 0x92AA00
vram: 0x80A6A760
follows_vram: ovl_0092A990_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x92AA00, data, overlays/ovl_0092AA00]
@@ -11008,6 +12303,7 @@
start: 0x92AA50
vram: 0x80A6A7B0
follows_vram: ovl_0092AA00
+ compress: True
subsegments:
- [0x92AA50, data, overlays/ovl_0092AA00_reloc]
@@ -11016,6 +12312,7 @@
start: 0x92AA70
vram: 0x80A6A7D0
follows_vram: ovl_0092AA00_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x92AA70, data, overlays/ovl_0092AA70]
@@ -11024,6 +12321,7 @@
start: 0x92AAC0
vram: 0x80A6A820
follows_vram: ovl_0092AA70
+ compress: True
subsegments:
- [0x92AAC0, data, overlays/ovl_0092AA70_reloc]
@@ -11032,6 +12330,7 @@
start: 0x92AAE0
vram: 0x80A6A840
follows_vram: ovl_0092AA70_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x92AAE0, data, overlays/ovl_0092AAE0]
@@ -11040,6 +12339,7 @@
start: 0x92AB30
vram: 0x80A6A890
follows_vram: ovl_0092AAE0
+ compress: True
subsegments:
- [0x92AB30, data, overlays/ovl_0092AAE0_reloc]
@@ -11048,6 +12348,7 @@
start: 0x92AB50
vram: 0x80A6A8B0
follows_vram: ovl_0092AAE0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x92AB50, asm, overlays/ovl_0092AB50]
@@ -11058,6 +12359,7 @@
start: 0x92B490
vram: 0x80A6B1F0
follows_vram: ovl_0092AB50
+ compress: True
subsegments:
- [0x92B490, data, overlays/ovl_0092AB50_reloc]
@@ -11066,6 +12368,7 @@
start: 0x92B4F0
vram: 0x80A6B250
follows_vram: ovl_0092AB50_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x92B4F0, data, overlays/ovl_0092B4F0]
@@ -11074,6 +12377,7 @@
start: 0x92B540
vram: 0x80A6B2A0
follows_vram: ovl_0092B4F0
+ compress: True
subsegments:
- [0x92B540, data, overlays/ovl_0092B4F0_reloc]
@@ -11082,6 +12386,7 @@
start: 0x92B560
vram: 0x80A6B2C0
follows_vram: ovl_0092B4F0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x92B560, asm, overlays/ovl_0092B560]
@@ -11091,6 +12396,7 @@
start: 0x92B650
vram: 0x80A6B3B0
follows_vram: ovl_0092B560
+ compress: True
subsegments:
- [0x92B650, data, overlays/ovl_0092B560_reloc]
@@ -11099,6 +12405,7 @@
start: 0x92B670
vram: 0x80A6B3D0
follows_vram: ovl_0092B560_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x92B670, data, overlays/ovl_0092B670]
@@ -11107,6 +12414,7 @@
start: 0x92B6C0
vram: 0x80A6B420
follows_vram: ovl_0092B670
+ compress: True
subsegments:
- [0x92B6C0, data, overlays/ovl_0092B670_reloc]
@@ -11115,6 +12423,7 @@
start: 0x92B6E0
vram: 0x80A6B440
follows_vram: ovl_0092B670_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x92B6E0, data, overlays/ovl_0092B6E0]
@@ -11123,6 +12432,7 @@
start: 0x92B730
vram: 0x80A6B490
follows_vram: ovl_0092B6E0
+ compress: True
subsegments:
- [0x92B730, data, overlays/ovl_0092B6E0_reloc]
@@ -11131,6 +12441,7 @@
start: 0x92B750
vram: 0x80A6B4B0
follows_vram: ovl_0092B6E0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x92B750, asm, overlays/ovl_0092B750]
@@ -11141,6 +12452,7 @@
start: 0x92B940
vram: 0x80A6B6A0
follows_vram: ovl_0092B750
+ compress: True
subsegments:
- [0x92B940, data, overlays/ovl_0092B750_reloc]
@@ -11149,6 +12461,7 @@
start: 0x92B970
vram: 0x80A6B6D0
follows_vram: ovl_0092B750_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x92B970, asm, overlays/ovl_0092B970]
@@ -11159,6 +12472,7 @@
start: 0x92BEB0
vram: 0x80A6BC10
follows_vram: ovl_0092B970
+ compress: True
subsegments:
- [0x92BEB0, data, overlays/ovl_0092B970_reloc]
@@ -11167,6 +12481,7 @@
start: 0x92BF20
vram: 0x80A6BC80
follows_vram: ovl_0092B970_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x92BF20, data, overlays/ovl_0092BF20]
@@ -11175,6 +12490,7 @@
start: 0x92BF70
vram: 0x80A6BCD0
follows_vram: ovl_0092BF20
+ compress: True
subsegments:
- [0x92BF70, data, overlays/ovl_0092BF20_reloc]
@@ -11183,6 +12499,7 @@
start: 0x92BF90
vram: 0x80A6BCF0
follows_vram: ovl_0092BF20_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x92BF90, data, overlays/ovl_0092BF90]
@@ -11191,6 +12508,7 @@
start: 0x92BFE0
vram: 0x80A6BD40
follows_vram: ovl_0092BF90
+ compress: True
subsegments:
- [0x92BFE0, data, overlays/ovl_0092BF90_reloc]
@@ -11199,6 +12517,7 @@
start: 0x92C000
vram: 0x80A6BD60
follows_vram: ovl_0092BF90_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x92C000, data, overlays/ovl_0092C000]
@@ -11207,6 +12526,7 @@
start: 0x92C050
vram: 0x80A6BDB0
follows_vram: ovl_0092C000
+ compress: True
subsegments:
- [0x92C050, data, overlays/ovl_0092C000_reloc]
@@ -11215,6 +12535,7 @@
start: 0x92C070
vram: 0x80A6BDD0
follows_vram: ovl_0092C000_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x92C070, data, overlays/ovl_0092C070]
@@ -11223,6 +12544,7 @@
start: 0x92C0C0
vram: 0x80A6BE20
follows_vram: ovl_0092C070
+ compress: True
subsegments:
- [0x92C0C0, data, overlays/ovl_0092C070_reloc]
@@ -11231,6 +12553,7 @@
start: 0x92C0E0
vram: 0x80A6BE40
follows_vram: ovl_0092C070_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x92C0E0, data, overlays/ovl_0092C0E0]
@@ -11239,6 +12562,7 @@
start: 0x92C130
vram: 0x80A6BE90
follows_vram: ovl_0092C0E0
+ compress: True
subsegments:
- [0x92C130, data, overlays/ovl_0092C0E0_reloc]
@@ -11247,6 +12571,7 @@
start: 0x92C150
vram: 0x80A6BEB0
follows_vram: ovl_0092C0E0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x92C150, data, overlays/ovl_0092C150]
@@ -11255,6 +12580,7 @@
start: 0x92C1A0
vram: 0x80A6BF00
follows_vram: ovl_0092C150
+ compress: True
subsegments:
- [0x92C1A0, data, overlays/ovl_0092C150_reloc]
@@ -11263,6 +12589,7 @@
start: 0x92C1C0
vram: 0x80A6BF20
follows_vram: ovl_0092C150_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x92C1C0, data, overlays/ovl_0092C1C0]
@@ -11271,6 +12598,7 @@
start: 0x92C210
vram: 0x80A6BF70
follows_vram: ovl_0092C1C0
+ compress: True
subsegments:
- [0x92C210, data, overlays/ovl_0092C1C0_reloc]
@@ -11279,6 +12607,7 @@
start: 0x92C230
vram: 0x80A6BF90
follows_vram: ovl_0092C1C0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x92C230, asm, overlays/ovl_0092C230]
@@ -11288,6 +12617,7 @@
start: 0x92C320
vram: 0x80A6C080
follows_vram: ovl_0092C230
+ compress: True
subsegments:
- [0x92C320, data, overlays/ovl_0092C230_reloc]
@@ -11296,6 +12626,7 @@
start: 0x92C340
vram: 0x80A6C0A0
follows_vram: ovl_0092C230_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x92C340, data, overlays/ovl_0092C340]
@@ -11304,6 +12635,7 @@
start: 0x92C390
vram: 0x80A6C0F0
follows_vram: ovl_0092C340
+ compress: True
subsegments:
- [0x92C390, data, overlays/ovl_0092C340_reloc]
@@ -11312,6 +12644,7 @@
start: 0x92C3B0
vram: 0x80A6C110
follows_vram: ovl_0092C340_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x92C3B0, asm, overlays/ovl_0092C3B0]
@@ -11321,6 +12654,7 @@
start: 0x92C4A0
vram: 0x80A6C200
follows_vram: ovl_0092C3B0
+ compress: True
subsegments:
- [0x92C4A0, data, overlays/ovl_0092C3B0_reloc]
@@ -11329,6 +12663,7 @@
start: 0x92C4C0
vram: 0x80A6C220
follows_vram: ovl_0092C3B0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x92C4C0, asm, overlays/ovl_0092C4C0]
@@ -11338,6 +12673,7 @@
start: 0x92C820
vram: 0x80A6C580
follows_vram: ovl_0092C4C0
+ compress: True
subsegments:
- [0x92C820, data, overlays/ovl_0092C4C0_reloc]
@@ -11346,6 +12682,7 @@
start: 0x92C850
vram: 0x80A6C5B0
follows_vram: ovl_0092C4C0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x92C850, asm, overlays/ovl_0092C850]
@@ -11355,6 +12692,7 @@
start: 0x92E960
vram: 0x80A6E6C0
follows_vram: ovl_0092C850
+ compress: True
subsegments:
- [0x92E960, data, overlays/ovl_0092C850_reloc]
@@ -11363,6 +12701,7 @@
start: 0x92EC40
vram: 0x80A6E9A0
follows_vram: ovl_0092C850_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x92EC40, asm, overlays/ovl_0092EC40]
@@ -11372,6 +12711,7 @@
start: 0x92EFA0
vram: 0x80A6ED00
follows_vram: ovl_0092EC40
+ compress: True
subsegments:
- [0x92EFA0, data, overlays/ovl_0092EC40_reloc]
@@ -11380,6 +12720,7 @@
start: 0x92EFD0
vram: 0x80A6ED30
follows_vram: ovl_0092EC40_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x92EFD0, data, overlays/ovl_0092EFD0]
@@ -11388,6 +12729,7 @@
start: 0x92F020
vram: 0x80A6ED80
follows_vram: ovl_0092EFD0
+ compress: True
subsegments:
- [0x92F020, data, overlays/ovl_0092EFD0_reloc]
@@ -11396,6 +12738,7 @@
start: 0x92F040
vram: 0x80A6EDA0
follows_vram: ovl_0092EFD0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x92F040, asm, overlays/ovl_0092F040]
@@ -11405,6 +12748,7 @@
start: 0x92F3A0
vram: 0x80A6F100
follows_vram: ovl_0092F040
+ compress: True
subsegments:
- [0x92F3A0, data, overlays/ovl_0092F040_reloc]
@@ -11413,6 +12757,7 @@
start: 0x92F3D0
vram: 0x80A6F130
follows_vram: ovl_0092F040_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x92F3D0, asm, overlays/ovl_0092F3D0]
@@ -11422,6 +12767,7 @@
start: 0x92F730
vram: 0x80A6F490
follows_vram: ovl_0092F3D0
+ compress: True
subsegments:
- [0x92F730, data, overlays/ovl_0092F3D0_reloc]
@@ -11430,6 +12776,7 @@
start: 0x92F760
vram: 0x80A6F4C0
follows_vram: ovl_0092F3D0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x92F760, asm, overlays/ovl_0092F760]
@@ -11439,6 +12786,7 @@
start: 0x92FAC0
vram: 0x80A6F820
follows_vram: ovl_0092F760
+ compress: True
subsegments:
- [0x92FAC0, data, overlays/ovl_0092F760_reloc]
@@ -11447,6 +12795,7 @@
start: 0x92FAF0
vram: 0x80A6F850
follows_vram: ovl_0092F760_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x92FAF0, asm, overlays/ovl_0092FAF0]
@@ -11456,6 +12805,7 @@
start: 0x92FE50
vram: 0x80A6FBB0
follows_vram: ovl_0092FAF0
+ compress: True
subsegments:
- [0x92FE50, data, overlays/ovl_0092FAF0_reloc]
@@ -11464,6 +12814,7 @@
start: 0x92FE80
vram: 0x80A6FBE0
follows_vram: ovl_0092FAF0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x92FE80, asm, overlays/ovl_0092FE80]
@@ -11473,6 +12824,7 @@
start: 0x9301E0
vram: 0x80A6FF40
follows_vram: ovl_0092FE80
+ compress: True
subsegments:
- [0x9301E0, data, overlays/ovl_0092FE80_reloc]
@@ -11481,6 +12833,7 @@
start: 0x930210
vram: 0x80A6FF70
follows_vram: ovl_0092FE80_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x930210, asm, overlays/ovl_00930210]
@@ -11490,6 +12843,7 @@
start: 0x930570
vram: 0x80A702D0
follows_vram: ovl_00930210
+ compress: True
subsegments:
- [0x930570, data, overlays/ovl_00930210_reloc]
@@ -11498,6 +12852,7 @@
start: 0x9305A0
vram: 0x80A70300
follows_vram: ovl_00930210_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9305A0, asm, overlays/ovl_009305A0]
@@ -11507,6 +12862,7 @@
start: 0x930A60
vram: 0x80A707C0
follows_vram: ovl_009305A0
+ compress: True
subsegments:
- [0x930A60, data, overlays/ovl_009305A0_reloc]
@@ -11515,6 +12871,7 @@
start: 0x930A90
vram: 0x80A707F0
follows_vram: ovl_009305A0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x930A90, data, overlays/ovl_00930A90]
@@ -11523,6 +12880,7 @@
start: 0x930AE0
vram: 0x80A70840
follows_vram: ovl_00930A90
+ compress: True
subsegments:
- [0x930AE0, data, overlays/ovl_00930A90_reloc]
@@ -11531,6 +12889,7 @@
start: 0x930B00
vram: 0x80A70860
follows_vram: ovl_00930A90_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x930B00, data, overlays/ovl_00930B00]
@@ -11539,6 +12898,7 @@
start: 0x930B50
vram: 0x80A708B0
follows_vram: ovl_00930B00
+ compress: True
subsegments:
- [0x930B50, data, overlays/ovl_00930B00_reloc]
@@ -11547,6 +12907,7 @@
start: 0x930B70
vram: 0x80A708D0
follows_vram: ovl_00930B00_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x930B70, asm, overlays/ovl_00930B70]
@@ -11556,6 +12917,7 @@
start: 0x930ED0
vram: 0x80A70C30
follows_vram: ovl_00930B70
+ compress: True
subsegments:
- [0x930ED0, data, overlays/ovl_00930B70_reloc]
@@ -11564,6 +12926,7 @@
start: 0x930F00
vram: 0x80A70C60
follows_vram: ovl_00930B70_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x930F00, asm, overlays/ovl_00930F00]
@@ -11573,6 +12936,7 @@
start: 0x931260
vram: 0x80A70FC0
follows_vram: ovl_00930F00
+ compress: True
subsegments:
- [0x931260, data, overlays/ovl_00930F00_reloc]
@@ -11581,6 +12945,7 @@
start: 0x931290
vram: 0x80A70FF0
follows_vram: ovl_00930F00_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x931290, asm, overlays/ovl_00931290]
@@ -11590,6 +12955,7 @@
start: 0x9315F0
vram: 0x80A71350
follows_vram: ovl_00931290
+ compress: True
subsegments:
- [0x9315F0, data, overlays/ovl_00931290_reloc]
@@ -11598,6 +12964,7 @@
start: 0x931620
vram: 0x80A71380
follows_vram: ovl_00931290_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x931620, asm, overlays/ovl_00931620]
@@ -11607,6 +12974,7 @@
start: 0x931980
vram: 0x80A716E0
follows_vram: ovl_00931620
+ compress: True
subsegments:
- [0x931980, data, overlays/ovl_00931620_reloc]
@@ -11615,6 +12983,7 @@
start: 0x9319B0
vram: 0x80A71710
follows_vram: ovl_00931620_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9319B0, asm, overlays/ovl_009319B0]
@@ -11624,6 +12993,7 @@
start: 0x931D10
vram: 0x80A71A70
follows_vram: ovl_009319B0
+ compress: True
subsegments:
- [0x931D10, data, overlays/ovl_009319B0_reloc]
@@ -11632,6 +13002,7 @@
start: 0x931D40
vram: 0x80A71AA0
follows_vram: ovl_009319B0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x931D40, asm, overlays/ovl_00931D40]
@@ -11642,6 +13013,7 @@
start: 0x932260
vram: 0x80A71FC0
follows_vram: ovl_00931D40
+ compress: True
subsegments:
- [0x932260, data, overlays/ovl_00931D40_reloc]
@@ -11650,6 +13022,7 @@
start: 0x9322F0
vram: 0x80A72050
follows_vram: ovl_00931D40_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9322F0, asm, overlays/ovl_009322F0]
@@ -11660,6 +13033,7 @@
start: 0x932A50
vram: 0x80A727B0
follows_vram: ovl_009322F0
+ compress: True
subsegments:
- [0x932A50, data, overlays/ovl_009322F0_reloc]
@@ -11668,6 +13042,7 @@
start: 0x932AA0
vram: 0x80A72800
follows_vram: ovl_009322F0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x932AA0, asm, overlays/ovl_00932AA0]
@@ -11677,6 +13052,7 @@
start: 0x932B30
vram: 0x80A72890
follows_vram: ovl_00932AA0
+ compress: True
subsegments:
- [0x932B30, data, overlays/ovl_00932AA0_reloc]
@@ -11685,6 +13061,7 @@
start: 0x932B60
vram: 0x80A728C0
follows_vram: ovl_00932AA0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x932B60, asm, overlays/ovl_00932B60]
@@ -11694,6 +13071,7 @@
start: 0x933DB0
vram: 0x80A73B10
follows_vram: ovl_00932B60
+ compress: True
subsegments:
- [0x933DB0, data, overlays/ovl_00932B60_reloc]
@@ -11702,6 +13080,7 @@
start: 0x933F00
vram: 0x80A73C60
follows_vram: ovl_00932B60_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x933F00, asm, overlays/ovl_00933F00]
@@ -11711,6 +13090,7 @@
start: 0x934C40
vram: 0x80A749A0
follows_vram: ovl_00933F00
+ compress: True
subsegments:
- [0x934C40, data, overlays/ovl_00933F00_reloc]
@@ -11719,6 +13099,7 @@
start: 0x934D50
vram: 0x80A74AB0
follows_vram: ovl_00933F00_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x934D50, asm, overlays/ovl_00934D50]
@@ -11729,6 +13110,7 @@
start: 0x936310
vram: 0x80A76070
follows_vram: ovl_00934D50
+ compress: True
subsegments:
- [0x936310, data, overlays/ovl_00934D50_reloc]
@@ -11737,6 +13119,7 @@
start: 0x936470
vram: 0x80A761D0
follows_vram: ovl_00934D50_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x936470, asm, overlays/ovl_00936470]
@@ -11747,6 +13130,7 @@
start: 0x936B20
vram: 0x80A76880
follows_vram: ovl_00936470
+ compress: True
subsegments:
- [0x936B20, data, overlays/ovl_00936470_reloc]
@@ -11755,6 +13139,7 @@
start: 0x936BC0
vram: 0x80A76920
follows_vram: ovl_00936470_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x936BC0, asm, overlays/ovl_00936BC0]
@@ -11764,6 +13149,7 @@
start: 0x9370C0
vram: 0x80A76E20
follows_vram: ovl_00936BC0
+ compress: True
subsegments:
- [0x9370C0, data, overlays/ovl_00936BC0_reloc]
@@ -11772,6 +13158,7 @@
start: 0x937120
vram: 0x80A76E80
follows_vram: ovl_00936BC0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x937120, asm, overlays/ovl_00937120]
@@ -11782,6 +13169,7 @@
start: 0x937820
vram: 0x80A77580
follows_vram: ovl_00937120
+ compress: True
subsegments:
- [0x937820, data, overlays/ovl_00937120_reloc]
@@ -11790,6 +13178,7 @@
start: 0x9378C0
vram: 0x80A77620
follows_vram: ovl_00937120_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9378C0, asm, overlays/ovl_009378C0]
@@ -11800,6 +13189,7 @@
start: 0x938EC0
vram: 0x80A78C20
follows_vram: ovl_009378C0
+ compress: True
subsegments:
- [0x938EC0, data, overlays/ovl_009378C0_reloc]
@@ -11808,6 +13198,7 @@
start: 0x939090
vram: 0x80A78DF0
follows_vram: ovl_009378C0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x939090, data, overlays/ovl_00939090]
@@ -11816,6 +13207,7 @@
start: 0x9390E0
vram: 0x80A78E40
follows_vram: ovl_00939090
+ compress: True
subsegments:
- [0x9390E0, data, overlays/ovl_00939090_reloc]
@@ -11824,6 +13216,7 @@
start: 0x939100
vram: 0x80A78E60
follows_vram: ovl_00939090_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x939100, data, overlays/ovl_00939100]
@@ -11832,6 +13225,7 @@
start: 0x939150
vram: 0x80A78EB0
follows_vram: ovl_00939100
+ compress: True
subsegments:
- [0x939150, data, overlays/ovl_00939100_reloc]
@@ -11840,6 +13234,7 @@
start: 0x939170
vram: 0x80A78ED0
follows_vram: ovl_00939100_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x939170, data, overlays/ovl_00939170]
@@ -11848,6 +13243,7 @@
start: 0x9391C0
vram: 0x80A78F20
follows_vram: ovl_00939170
+ compress: True
subsegments:
- [0x9391C0, data, overlays/ovl_00939170_reloc]
@@ -11856,6 +13252,7 @@
start: 0x9391E0
vram: 0x80A78F40
follows_vram: ovl_00939170_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9391E0, asm, overlays/ovl_009391E0]
@@ -11865,6 +13262,7 @@
start: 0x9392C0
vram: 0x80A79020
follows_vram: ovl_009391E0
+ compress: True
subsegments:
- [0x9392C0, data, overlays/ovl_009391E0_reloc]
@@ -11873,6 +13271,7 @@
start: 0x9392F0
vram: 0x80A79050
follows_vram: ovl_009391E0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9392F0, asm, overlays/ovl_009392F0]
@@ -11882,6 +13281,7 @@
start: 0x9393D0
vram: 0x80A79130
follows_vram: ovl_009392F0
+ compress: True
subsegments:
- [0x9393D0, data, overlays/ovl_009392F0_reloc]
@@ -11890,6 +13290,7 @@
start: 0x939400
vram: 0x80A79160
follows_vram: ovl_009392F0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x939400, asm, overlays/ovl_00939400]
@@ -11899,6 +13300,7 @@
start: 0x9394E0
vram: 0x80A79240
follows_vram: ovl_00939400
+ compress: True
subsegments:
- [0x9394E0, data, overlays/ovl_00939400_reloc]
@@ -11907,6 +13309,7 @@
start: 0x939510
vram: 0x80A79270
follows_vram: ovl_00939400_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x939510, data, overlays/ovl_00939510]
@@ -11915,6 +13318,7 @@
start: 0x939560
vram: 0x80A792C0
follows_vram: ovl_00939510
+ compress: True
subsegments:
- [0x939560, data, overlays/ovl_00939510_reloc]
@@ -11923,6 +13327,7 @@
start: 0x939580
vram: 0x80A792E0
follows_vram: ovl_00939510_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x939580, data, overlays/ovl_00939580]
@@ -11931,6 +13336,7 @@
start: 0x9395D0
vram: 0x80A79330
follows_vram: ovl_00939580
+ compress: True
subsegments:
- [0x9395D0, data, overlays/ovl_00939580_reloc]
@@ -11939,6 +13345,7 @@
start: 0x9395F0
vram: 0x80A79350
follows_vram: ovl_00939580_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9395F0, asm, overlays/ovl_009395F0]
@@ -11949,6 +13356,7 @@
start: 0x93A7D0
vram: 0x80A7A530
follows_vram: ovl_009395F0
+ compress: True
subsegments:
- [0x93A7D0, data, overlays/ovl_009395F0_reloc]
@@ -11957,6 +13365,7 @@
start: 0x93A8B0
vram: 0x80A7A610
follows_vram: ovl_009395F0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x93A8B0, data, overlays/ovl_0093A8B0]
@@ -11965,6 +13374,7 @@
start: 0x93A900
vram: 0x80A7A660
follows_vram: ovl_0093A8B0
+ compress: True
subsegments:
- [0x93A900, data, overlays/ovl_0093A8B0_reloc]
@@ -11973,6 +13383,7 @@
start: 0x93A920
vram: 0x80A7A680
follows_vram: ovl_0093A8B0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x93A920, asm, overlays/ovl_0093A920]
@@ -11983,6 +13394,7 @@
start: 0x93BBC0
vram: 0x80A7B920
follows_vram: ovl_0093A920
+ compress: True
subsegments:
- [0x93BBC0, data, overlays/ovl_0093A920_reloc]
@@ -11991,6 +13403,7 @@
start: 0x93BD70
vram: 0x80A7BAD0
follows_vram: ovl_0093A920_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x93BD70, asm, overlays/ovl_0093BD70]
@@ -12001,6 +13414,7 @@
start: 0x93BF40
vram: 0x80A7BCA0
follows_vram: ovl_0093BD70
+ compress: True
subsegments:
- [0x93BF40, data, overlays/ovl_0093BD70_reloc]
@@ -12009,6 +13423,7 @@
start: 0x93BF80
vram: 0x80A7BCE0
follows_vram: ovl_0093BD70_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x93BF80, data, overlays/ovl_0093BF80]
@@ -12017,6 +13432,7 @@
start: 0x93BFD0
vram: 0x80A7BD30
follows_vram: ovl_0093BF80
+ compress: True
subsegments:
- [0x93BFD0, data, overlays/ovl_0093BF80_reloc]
@@ -12025,6 +13441,7 @@
start: 0x93BFF0
vram: 0x80A7BD50
follows_vram: ovl_0093BF80_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x93BFF0, data, overlays/ovl_0093BFF0]
@@ -12033,6 +13450,7 @@
start: 0x93C040
vram: 0x80A7BDA0
follows_vram: ovl_0093BFF0
+ compress: True
subsegments:
- [0x93C040, data, overlays/ovl_0093BFF0_reloc]
@@ -12041,6 +13459,7 @@
start: 0x93C060
vram: 0x80A7BDC0
follows_vram: ovl_0093BFF0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x93C060, data, overlays/ovl_0093C060]
@@ -12049,6 +13468,7 @@
start: 0x93C0B0
vram: 0x80A7BE10
follows_vram: ovl_0093C060
+ compress: True
subsegments:
- [0x93C0B0, data, overlays/ovl_0093C060_reloc]
@@ -12057,6 +13477,7 @@
start: 0x93C0D0
vram: 0x80A7BE30
follows_vram: ovl_0093C060_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x93C0D0, asm, overlays/ovl_0093C0D0]
@@ -12066,6 +13487,7 @@
start: 0x93C5A0
vram: 0x80A7C300
follows_vram: ovl_0093C0D0
+ compress: True
subsegments:
- [0x93C5A0, data, overlays/ovl_0093C0D0_reloc]
@@ -12074,6 +13496,7 @@
start: 0x93C5D0
vram: 0x80A7C330
follows_vram: ovl_0093C0D0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x93C5D0, asm, overlays/ovl_0093C5D0]
@@ -12083,6 +13506,7 @@
start: 0x93CAA0
vram: 0x80A7C800
follows_vram: ovl_0093C5D0
+ compress: True
subsegments:
- [0x93CAA0, data, overlays/ovl_0093C5D0_reloc]
@@ -12091,6 +13515,7 @@
start: 0x93CAD0
vram: 0x80A7C830
follows_vram: ovl_0093C5D0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x93CAD0, asm, overlays/ovl_0093CAD0]
@@ -12100,6 +13525,7 @@
start: 0x93CFA0
vram: 0x80A7CD00
follows_vram: ovl_0093CAD0
+ compress: True
subsegments:
- [0x93CFA0, data, overlays/ovl_0093CAD0_reloc]
@@ -12108,6 +13534,7 @@
start: 0x93CFD0
vram: 0x80A7CD30
follows_vram: ovl_0093CAD0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x93CFD0, asm, overlays/ovl_0093CFD0]
@@ -12117,6 +13544,7 @@
start: 0x93D4A0
vram: 0x80A7D200
follows_vram: ovl_0093CFD0
+ compress: True
subsegments:
- [0x93D4A0, data, overlays/ovl_0093CFD0_reloc]
@@ -12125,6 +13553,7 @@
start: 0x93D4D0
vram: 0x80A7D230
follows_vram: ovl_0093CFD0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x93D4D0, data, overlays/ovl_0093D4D0]
@@ -12133,6 +13562,7 @@
start: 0x93D520
vram: 0x80A7D280
follows_vram: ovl_0093D4D0
+ compress: True
subsegments:
- [0x93D520, data, overlays/ovl_0093D4D0_reloc]
@@ -12141,6 +13571,7 @@
start: 0x93D540
vram: 0x80A7D2A0
follows_vram: ovl_0093D4D0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x93D540, data, overlays/ovl_0093D540]
@@ -12149,6 +13580,7 @@
start: 0x93D590
vram: 0x80A7D2F0
follows_vram: ovl_0093D540
+ compress: True
subsegments:
- [0x93D590, data, overlays/ovl_0093D540_reloc]
@@ -12157,6 +13589,7 @@
start: 0x93D5B0
vram: 0x80A7D310
follows_vram: ovl_0093D540_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x93D5B0, data, overlays/ovl_0093D5B0]
@@ -12165,6 +13598,7 @@
start: 0x93D600
vram: 0x80A7D360
follows_vram: ovl_0093D5B0
+ compress: True
subsegments:
- [0x93D600, data, overlays/ovl_0093D5B0_reloc]
@@ -12173,6 +13607,7 @@
start: 0x93D620
vram: 0x80A7D380
follows_vram: ovl_0093D5B0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x93D620, data, overlays/ovl_0093D620]
@@ -12181,6 +13616,7 @@
start: 0x93D670
vram: 0x80A7D3D0
follows_vram: ovl_0093D620
+ compress: True
subsegments:
- [0x93D670, data, overlays/ovl_0093D620_reloc]
@@ -12189,6 +13625,7 @@
start: 0x93D690
vram: 0x80A7D3F0
follows_vram: ovl_0093D620_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x93D690, data, overlays/ovl_0093D690]
@@ -12197,6 +13634,7 @@
start: 0x93D6E0
vram: 0x80A7D440
follows_vram: ovl_0093D690
+ compress: True
subsegments:
- [0x93D6E0, data, overlays/ovl_0093D690_reloc]
@@ -12205,6 +13643,7 @@
start: 0x93D700
vram: 0x80A7D460
follows_vram: ovl_0093D690_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x93D700, asm, overlays/ovl_0093D700]
@@ -12214,6 +13653,7 @@
start: 0x93DBD0
vram: 0x80A7D930
follows_vram: ovl_0093D700
+ compress: True
subsegments:
- [0x93DBD0, data, overlays/ovl_0093D700_reloc]
@@ -12222,6 +13662,7 @@
start: 0x93DC00
vram: 0x80A7D960
follows_vram: ovl_0093D700_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x93DC00, asm, overlays/ovl_0093DC00]
@@ -12231,6 +13672,7 @@
start: 0x93E0D0
vram: 0x80A7DE30
follows_vram: ovl_0093DC00
+ compress: True
subsegments:
- [0x93E0D0, data, overlays/ovl_0093DC00_reloc]
@@ -12239,6 +13681,7 @@
start: 0x93E100
vram: 0x80A7DE60
follows_vram: ovl_0093DC00_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x93E100, asm, overlays/ovl_0093E100]
@@ -12248,6 +13691,7 @@
start: 0x93E5D0
vram: 0x80A7E330
follows_vram: ovl_0093E100
+ compress: True
subsegments:
- [0x93E5D0, data, overlays/ovl_0093E100_reloc]
@@ -12256,6 +13700,7 @@
start: 0x93E600
vram: 0x80A7E360
follows_vram: ovl_0093E100_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x93E600, asm, overlays/ovl_0093E600]
@@ -12265,6 +13710,7 @@
start: 0x93EAD0
vram: 0x80A7E830
follows_vram: ovl_0093E600
+ compress: True
subsegments:
- [0x93EAD0, data, overlays/ovl_0093E600_reloc]
@@ -12273,6 +13719,7 @@
start: 0x93EB00
vram: 0x80A7E860
follows_vram: ovl_0093E600_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x93EB00, asm, overlays/ovl_0093EB00]
@@ -12282,6 +13729,7 @@
start: 0x93EFD0
vram: 0x80A7ED30
follows_vram: ovl_0093EB00
+ compress: True
subsegments:
- [0x93EFD0, data, overlays/ovl_0093EB00_reloc]
@@ -12290,6 +13738,7 @@
start: 0x93F000
vram: 0x80A7ED60
follows_vram: ovl_0093EB00_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x93F000, data, overlays/ovl_0093F000]
@@ -12298,6 +13747,7 @@
start: 0x93F050
vram: 0x80A7EDB0
follows_vram: ovl_0093F000
+ compress: True
subsegments:
- [0x93F050, data, overlays/ovl_0093F000_reloc]
@@ -12306,6 +13756,7 @@
start: 0x93F070
vram: 0x80A7EDD0
follows_vram: ovl_0093F000_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x93F070, data, overlays/ovl_0093F070]
@@ -12314,6 +13765,7 @@
start: 0x93F0C0
vram: 0x80A7EE20
follows_vram: ovl_0093F070
+ compress: True
subsegments:
- [0x93F0C0, data, overlays/ovl_0093F070_reloc]
@@ -12322,6 +13774,7 @@
start: 0x93F0E0
vram: 0x80A7EE40
follows_vram: ovl_0093F070_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x93F0E0, data, overlays/ovl_0093F0E0]
@@ -12330,6 +13783,7 @@
start: 0x93F130
vram: 0x80A7EE90
follows_vram: ovl_0093F0E0
+ compress: True
subsegments:
- [0x93F130, data, overlays/ovl_0093F0E0_reloc]
@@ -12338,6 +13792,7 @@
start: 0x93F150
vram: 0x80A7EEB0
follows_vram: ovl_0093F0E0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x93F150, data, overlays/ovl_0093F150]
@@ -12346,6 +13801,7 @@
start: 0x93F1A0
vram: 0x80A7EF00
follows_vram: ovl_0093F150
+ compress: True
subsegments:
- [0x93F1A0, data, overlays/ovl_0093F150_reloc]
@@ -12354,6 +13810,7 @@
start: 0x93F1C0
vram: 0x80A7EF20
follows_vram: ovl_0093F150_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x93F1C0, data, overlays/ovl_0093F1C0]
@@ -12362,6 +13819,7 @@
start: 0x93F210
vram: 0x80A7EF70
follows_vram: ovl_0093F1C0
+ compress: True
subsegments:
- [0x93F210, data, overlays/ovl_0093F1C0_reloc]
@@ -12370,6 +13828,7 @@
start: 0x93F230
vram: 0x80A7EF90
follows_vram: ovl_0093F1C0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x93F230, data, overlays/ovl_0093F230]
@@ -12378,6 +13837,7 @@
start: 0x93F280
vram: 0x80A7EFE0
follows_vram: ovl_0093F230
+ compress: True
subsegments:
- [0x93F280, data, overlays/ovl_0093F230_reloc]
@@ -12386,6 +13846,7 @@
start: 0x93F2A0
vram: 0x80A7F000
follows_vram: ovl_0093F230_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x93F2A0, data, overlays/ovl_0093F2A0]
@@ -12394,6 +13855,7 @@
start: 0x93F2F0
vram: 0x80A7F050
follows_vram: ovl_0093F2A0
+ compress: True
subsegments:
- [0x93F2F0, data, overlays/ovl_0093F2A0_reloc]
@@ -12402,6 +13864,7 @@
start: 0x93F310
vram: 0x80A7F070
follows_vram: ovl_0093F2A0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x93F310, data, overlays/ovl_0093F310]
@@ -12410,6 +13873,7 @@
start: 0x93F360
vram: 0x80A7F0C0
follows_vram: ovl_0093F310
+ compress: True
subsegments:
- [0x93F360, data, overlays/ovl_0093F310_reloc]
@@ -12418,6 +13882,7 @@
start: 0x93F380
vram: 0x80A7F0E0
follows_vram: ovl_0093F310_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x93F380, asm, overlays/ovl_0093F380]
@@ -12427,6 +13892,7 @@
start: 0x93F9A0
vram: 0x80A7F700
follows_vram: ovl_0093F380
+ compress: True
subsegments:
- [0x93F9A0, data, overlays/ovl_0093F380_reloc]
@@ -12435,6 +13901,7 @@
start: 0x93F9E0
vram: 0x80A7F740
follows_vram: ovl_0093F380_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x93F9E0, data, overlays/ovl_0093F9E0]
@@ -12443,6 +13910,7 @@
start: 0x93FA30
vram: 0x80A7F790
follows_vram: ovl_0093F9E0
+ compress: True
subsegments:
- [0x93FA30, data, overlays/ovl_0093F9E0_reloc]
@@ -12451,6 +13919,7 @@
start: 0x93FA50
vram: 0x80A7F7B0
follows_vram: ovl_0093F9E0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x93FA50, data, overlays/ovl_0093FA50]
@@ -12459,6 +13928,7 @@
start: 0x93FAA0
vram: 0x80A7F800
follows_vram: ovl_0093FA50
+ compress: True
subsegments:
- [0x93FAA0, data, overlays/ovl_0093FA50_reloc]
@@ -12467,6 +13937,7 @@
start: 0x93FAC0
vram: 0x80A7F820
follows_vram: ovl_0093FA50_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x93FAC0, data, overlays/ovl_0093FAC0]
@@ -12475,6 +13946,7 @@
start: 0x93FB10
vram: 0x80A7F870
follows_vram: ovl_0093FAC0
+ compress: True
subsegments:
- [0x93FB10, data, overlays/ovl_0093FAC0_reloc]
@@ -12483,6 +13955,7 @@
start: 0x93FB30
vram: 0x80A7F890
follows_vram: ovl_0093FAC0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x93FB30, data, overlays/ovl_0093FB30]
@@ -12491,6 +13964,7 @@
start: 0x93FB80
vram: 0x80A7F8E0
follows_vram: ovl_0093FB30
+ compress: True
subsegments:
- [0x93FB80, data, overlays/ovl_0093FB30_reloc]
@@ -12499,6 +13973,7 @@
start: 0x93FBA0
vram: 0x80A7F900
follows_vram: ovl_0093FB30_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x93FBA0, data, overlays/ovl_0093FBA0]
@@ -12507,6 +13982,7 @@
start: 0x93FBF0
vram: 0x80A7F950
follows_vram: ovl_0093FBA0
+ compress: True
subsegments:
- [0x93FBF0, data, overlays/ovl_0093FBA0_reloc]
@@ -12515,6 +13991,7 @@
start: 0x93FC10
vram: 0x80A7F970
follows_vram: ovl_0093FBA0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x93FC10, asm, overlays/ovl_0093FC10]
@@ -12525,6 +14002,7 @@
start: 0x9402F0
vram: 0x80A80050
follows_vram: ovl_0093FC10
+ compress: True
subsegments:
- [0x9402F0, data, overlays/ovl_0093FC10_reloc]
@@ -12533,6 +14011,7 @@
start: 0x940380
vram: 0x80A800E0
follows_vram: ovl_0093FC10_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x940380, asm, overlays/ovl_00940380]
@@ -12543,6 +14022,7 @@
start: 0x9419B0
vram: 0x80A81710
follows_vram: ovl_00940380
+ compress: True
subsegments:
- [0x9419B0, data, overlays/ovl_00940380_reloc]
@@ -12551,6 +14031,7 @@
start: 0x941B10
vram: 0x80A81870
follows_vram: ovl_00940380_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x941B10, data, overlays/ovl_00941B10]
@@ -12559,6 +14040,7 @@
start: 0x941B60
vram: 0x80A818C0
follows_vram: ovl_00941B10
+ compress: True
subsegments:
- [0x941B60, data, overlays/ovl_00941B10_reloc]
@@ -12567,6 +14049,7 @@
start: 0x941B80
vram: 0x80A818E0
follows_vram: ovl_00941B10_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x941B80, data, overlays/ovl_00941B80]
@@ -12575,6 +14058,7 @@
start: 0x941BD0
vram: 0x80A81930
follows_vram: ovl_00941B80
+ compress: True
subsegments:
- [0x941BD0, data, overlays/ovl_00941B80_reloc]
@@ -12583,6 +14067,7 @@
start: 0x941BF0
vram: 0x80A81950
follows_vram: ovl_00941B80_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x941BF0, asm, overlays/ovl_00941BF0]
@@ -12593,6 +14078,7 @@
start: 0x9427D0
vram: 0x80A82530
follows_vram: ovl_00941BF0
+ compress: True
subsegments:
- [0x9427D0, data, overlays/ovl_00941BF0_reloc]
@@ -12601,6 +14087,7 @@
start: 0x9428A0
vram: 0x80A82600
follows_vram: ovl_00941BF0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9428A0, asm, overlays/ovl_009428A0]
@@ -12611,6 +14098,7 @@
start: 0x942E50
vram: 0x80A82BB0
follows_vram: ovl_009428A0
+ compress: True
subsegments:
- [0x942E50, data, overlays/ovl_009428A0_reloc]
@@ -12619,6 +14107,7 @@
start: 0x942EE0
vram: 0x80A82C40
follows_vram: ovl_009428A0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x942EE0, data, overlays/ovl_00942EE0]
@@ -12627,6 +14116,7 @@
start: 0x942F30
vram: 0x80A82C90
follows_vram: ovl_00942EE0
+ compress: True
subsegments:
- [0x942F30, data, overlays/ovl_00942EE0_reloc]
@@ -12635,6 +14125,7 @@
start: 0x942F50
vram: 0x80A82CB0
follows_vram: ovl_00942EE0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x942F50, data, overlays/ovl_00942F50]
@@ -12643,6 +14134,7 @@
start: 0x942FA0
vram: 0x80A82D00
follows_vram: ovl_00942F50
+ compress: True
subsegments:
- [0x942FA0, data, overlays/ovl_00942F50_reloc]
@@ -12651,6 +14143,7 @@
start: 0x942FC0
vram: 0x80A82D20
follows_vram: ovl_00942F50_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x942FC0, data, overlays/ovl_00942FC0]
@@ -12659,6 +14152,7 @@
start: 0x943010
vram: 0x80A82D70
follows_vram: ovl_00942FC0
+ compress: True
subsegments:
- [0x943010, data, overlays/ovl_00942FC0_reloc]
@@ -12667,6 +14161,7 @@
start: 0x943030
vram: 0x80A82D90
follows_vram: ovl_00942FC0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x943030, data, overlays/ovl_00943030]
@@ -12675,6 +14170,7 @@
start: 0x943080
vram: 0x80A82DE0
follows_vram: ovl_00943030
+ compress: True
subsegments:
- [0x943080, data, overlays/ovl_00943030_reloc]
@@ -12683,6 +14179,7 @@
start: 0x9430A0
vram: 0x80A82E00
follows_vram: ovl_00943030_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9430A0, data, overlays/ovl_009430A0]
@@ -12691,6 +14188,7 @@
start: 0x9430F0
vram: 0x80A82E50
follows_vram: ovl_009430A0
+ compress: True
subsegments:
- [0x9430F0, data, overlays/ovl_009430A0_reloc]
@@ -12699,6 +14197,7 @@
start: 0x943110
vram: 0x80A82E70
follows_vram: ovl_009430A0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x943110, data, overlays/ovl_00943110]
@@ -12707,6 +14206,7 @@
start: 0x943160
vram: 0x80A82EC0
follows_vram: ovl_00943110
+ compress: True
subsegments:
- [0x943160, data, overlays/ovl_00943110_reloc]
@@ -12715,6 +14215,7 @@
start: 0x943180
vram: 0x80A82EE0
follows_vram: ovl_00943110_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x943180, data, overlays/ovl_00943180]
@@ -12723,6 +14224,7 @@
start: 0x9431D0
vram: 0x80A82F30
follows_vram: ovl_00943180
+ compress: True
subsegments:
- [0x9431D0, data, overlays/ovl_00943180_reloc]
@@ -12731,6 +14233,7 @@
start: 0x9431F0
vram: 0x80A82F50
follows_vram: ovl_00943180_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9431F0, data, overlays/ovl_009431F0]
@@ -12739,6 +14242,7 @@
start: 0x943240
vram: 0x80A82FA0
follows_vram: ovl_009431F0
+ compress: True
subsegments:
- [0x943240, data, overlays/ovl_009431F0_reloc]
@@ -12747,6 +14251,7 @@
start: 0x943260
vram: 0x80A82FC0
follows_vram: ovl_009431F0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x943260, data, overlays/ovl_00943260]
@@ -12755,6 +14260,7 @@
start: 0x9432B0
vram: 0x80A83010
follows_vram: ovl_00943260
+ compress: True
subsegments:
- [0x9432B0, data, overlays/ovl_00943260_reloc]
@@ -12763,6 +14269,7 @@
start: 0x9432D0
vram: 0x80A83030
follows_vram: ovl_00943260_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9432D0, data, overlays/ovl_009432D0]
@@ -12771,6 +14278,7 @@
start: 0x943320
vram: 0x80A83080
follows_vram: ovl_009432D0
+ compress: True
subsegments:
- [0x943320, data, overlays/ovl_009432D0_reloc]
@@ -12779,6 +14287,7 @@
start: 0x943340
vram: 0x80A830A0
follows_vram: ovl_009432D0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x943340, data, overlays/ovl_00943340]
@@ -12787,6 +14296,7 @@
start: 0x943390
vram: 0x80A830F0
follows_vram: ovl_00943340
+ compress: True
subsegments:
- [0x943390, data, overlays/ovl_00943340_reloc]
@@ -12795,6 +14305,7 @@
start: 0x9433B0
vram: 0x80A83110
follows_vram: ovl_00943340_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9433B0, data, overlays/ovl_009433B0]
@@ -12803,6 +14314,7 @@
start: 0x943400
vram: 0x80A83160
follows_vram: ovl_009433B0
+ compress: True
subsegments:
- [0x943400, data, overlays/ovl_009433B0_reloc]
@@ -12811,6 +14323,7 @@
start: 0x943420
vram: 0x80A83180
follows_vram: ovl_009433B0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x943420, data, overlays/ovl_00943420]
@@ -12819,6 +14332,7 @@
start: 0x943470
vram: 0x80A831D0
follows_vram: ovl_00943420
+ compress: True
subsegments:
- [0x943470, data, overlays/ovl_00943420_reloc]
@@ -12827,6 +14341,7 @@
start: 0x943490
vram: 0x80A831F0
follows_vram: ovl_00943420_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x943490, data, overlays/ovl_00943490]
@@ -12835,6 +14350,7 @@
start: 0x9434E0
vram: 0x80A83240
follows_vram: ovl_00943490
+ compress: True
subsegments:
- [0x9434E0, data, overlays/ovl_00943490_reloc]
@@ -12843,6 +14359,7 @@
start: 0x943500
vram: 0x80A83260
follows_vram: ovl_00943490_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x943500, data, overlays/ovl_00943500]
@@ -12851,6 +14368,7 @@
start: 0x943550
vram: 0x80A832B0
follows_vram: ovl_00943500
+ compress: True
subsegments:
- [0x943550, data, overlays/ovl_00943500_reloc]
@@ -12859,6 +14377,7 @@
start: 0x943570
vram: 0x80A832D0
follows_vram: ovl_00943500_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x943570, data, overlays/ovl_00943570]
@@ -12867,6 +14386,7 @@
start: 0x9435C0
vram: 0x80A83320
follows_vram: ovl_00943570
+ compress: True
subsegments:
- [0x9435C0, data, overlays/ovl_00943570_reloc]
@@ -12875,6 +14395,7 @@
start: 0x9435E0
vram: 0x80A83340
follows_vram: ovl_00943570_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9435E0, data, overlays/ovl_009435E0]
@@ -12883,6 +14404,7 @@
start: 0x943630
vram: 0x80A83390
follows_vram: ovl_009435E0
+ compress: True
subsegments:
- [0x943630, data, overlays/ovl_009435E0_reloc]
@@ -12891,6 +14413,7 @@
start: 0x943650
vram: 0x80A833B0
follows_vram: ovl_009435E0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x943650, data, overlays/ovl_00943650]
@@ -12899,6 +14422,7 @@
start: 0x9436A0
vram: 0x80A83400
follows_vram: ovl_00943650
+ compress: True
subsegments:
- [0x9436A0, data, overlays/ovl_00943650_reloc]
@@ -12907,6 +14431,7 @@
start: 0x9436C0
vram: 0x80A83420
follows_vram: ovl_00943650_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9436C0, data, overlays/ovl_009436C0]
@@ -12915,6 +14440,7 @@
start: 0x943710
vram: 0x80A83470
follows_vram: ovl_009436C0
+ compress: True
subsegments:
- [0x943710, data, overlays/ovl_009436C0_reloc]
@@ -12923,6 +14449,7 @@
start: 0x943730
vram: 0x80A83490
follows_vram: ovl_009436C0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x943730, data, overlays/ovl_00943730]
@@ -12931,6 +14458,7 @@
start: 0x943780
vram: 0x80A834E0
follows_vram: ovl_00943730
+ compress: True
subsegments:
- [0x943780, data, overlays/ovl_00943730_reloc]
@@ -12939,6 +14467,7 @@
start: 0x9437A0
vram: 0x80A83500
follows_vram: ovl_00943730_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9437A0, data, overlays/ovl_009437A0]
@@ -12947,6 +14476,7 @@
start: 0x9437F0
vram: 0x80A83550
follows_vram: ovl_009437A0
+ compress: True
subsegments:
- [0x9437F0, data, overlays/ovl_009437A0_reloc]
@@ -12955,6 +14485,7 @@
start: 0x943810
vram: 0x80A83570
follows_vram: ovl_009437A0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x943810, data, overlays/ovl_00943810]
@@ -12963,6 +14494,7 @@
start: 0x943860
vram: 0x80A835C0
follows_vram: ovl_00943810
+ compress: True
subsegments:
- [0x943860, data, overlays/ovl_00943810_reloc]
@@ -12971,6 +14503,7 @@
start: 0x943880
vram: 0x80A835E0
follows_vram: ovl_00943810_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x943880, data, overlays/ovl_00943880]
@@ -12979,6 +14512,7 @@
start: 0x9438D0
vram: 0x80A83630
follows_vram: ovl_00943880
+ compress: True
subsegments:
- [0x9438D0, data, overlays/ovl_00943880_reloc]
@@ -12987,6 +14521,7 @@
start: 0x9438F0
vram: 0x80A83650
follows_vram: ovl_00943880_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9438F0, data, overlays/ovl_009438F0]
@@ -12995,6 +14530,7 @@
start: 0x943940
vram: 0x80A836A0
follows_vram: ovl_009438F0
+ compress: True
subsegments:
- [0x943940, data, overlays/ovl_009438F0_reloc]
@@ -13003,6 +14539,7 @@
start: 0x943960
vram: 0x80A836C0
follows_vram: ovl_009438F0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x943960, asm, overlays/ovl_00943960]
@@ -13013,6 +14550,7 @@
start: 0x9448A0
vram: 0x80A84600
follows_vram: ovl_00943960
+ compress: True
subsegments:
- [0x9448A0, data, overlays/ovl_00943960_reloc]
@@ -13021,6 +14559,7 @@
start: 0x944930
vram: 0x80A84690
follows_vram: ovl_00943960_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x944930, data, overlays/ovl_00944930]
@@ -13029,6 +14568,7 @@
start: 0x944980
vram: 0x80A846E0
follows_vram: ovl_00944930
+ compress: True
subsegments:
- [0x944980, data, overlays/ovl_00944930_reloc]
@@ -13037,6 +14577,7 @@
start: 0x9449A0
vram: 0x80A84700
follows_vram: ovl_00944930_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9449A0, data, overlays/ovl_009449A0]
@@ -13045,6 +14586,7 @@
start: 0x9449F0
vram: 0x80A84750
follows_vram: ovl_009449A0
+ compress: True
subsegments:
- [0x9449F0, data, overlays/ovl_009449A0_reloc]
@@ -13053,6 +14595,7 @@
start: 0x944A10
vram: 0x80A84770
follows_vram: ovl_009449A0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x944A10, data, overlays/ovl_00944A10]
@@ -13061,6 +14604,7 @@
start: 0x944A60
vram: 0x80A847C0
follows_vram: ovl_00944A10
+ compress: True
subsegments:
- [0x944A60, data, overlays/ovl_00944A10_reloc]
@@ -13069,6 +14613,7 @@
start: 0x944A80
vram: 0x80A847E0
follows_vram: ovl_00944A10_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x944A80, data, overlays/ovl_00944A80]
@@ -13077,6 +14622,7 @@
start: 0x944AD0
vram: 0x80A84830
follows_vram: ovl_00944A80
+ compress: True
subsegments:
- [0x944AD0, data, overlays/ovl_00944A80_reloc]
@@ -13085,6 +14631,7 @@
start: 0x944AF0
vram: 0x80A84850
follows_vram: ovl_00944A80_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x944AF0, data, overlays/ovl_00944AF0]
@@ -13093,6 +14640,7 @@
start: 0x944B40
vram: 0x80A848A0
follows_vram: ovl_00944AF0
+ compress: True
subsegments:
- [0x944B40, data, overlays/ovl_00944AF0_reloc]
@@ -13101,6 +14649,7 @@
start: 0x944B60
vram: 0x80A848C0
follows_vram: ovl_00944AF0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x944B60, asm, overlays/ovl_00944B60]
@@ -13110,6 +14659,7 @@
start: 0x944C40
vram: 0x80A849A0
follows_vram: ovl_00944B60
+ compress: True
subsegments:
- [0x944C40, data, overlays/ovl_00944B60_reloc]
@@ -13118,6 +14668,7 @@
start: 0x944C70
vram: 0x80A849D0
follows_vram: ovl_00944B60_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x944C70, asm, overlays/ovl_00944C70]
@@ -13127,6 +14678,7 @@
start: 0x944D50
vram: 0x80A84AB0
follows_vram: ovl_00944C70
+ compress: True
subsegments:
- [0x944D50, data, overlays/ovl_00944C70_reloc]
@@ -13135,6 +14687,7 @@
start: 0x944D80
vram: 0x80A84AE0
follows_vram: ovl_00944C70_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x944D80, asm, overlays/ovl_00944D80]
@@ -13144,6 +14697,7 @@
start: 0x944E60
vram: 0x80A84BC0
follows_vram: ovl_00944D80
+ compress: True
subsegments:
- [0x944E60, data, overlays/ovl_00944D80_reloc]
@@ -13152,6 +14706,7 @@
start: 0x944E90
vram: 0x80A84BF0
follows_vram: ovl_00944D80_reloc
+ compress: True
bss_size: 0x10
subsegments:
- [0x944E90, asm, overlays/ovl_00944E90]
@@ -13163,6 +14718,7 @@
start: 0x945A20
vram: 0x80A85790
follows_vram: ovl_00944E90
+ compress: True
subsegments:
- [0x945A20, data, overlays/ovl_00944E90_reloc]
@@ -13171,6 +14727,7 @@
start: 0x945B10
vram: 0x80A85880
follows_vram: ovl_00944E90_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x945B10, asm, overlays/ovl_00945B10]
@@ -13181,6 +14738,7 @@
start: 0x9467E0
vram: 0x80A86550
follows_vram: ovl_00945B10
+ compress: True
subsegments:
- [0x9467E0, data, overlays/ovl_00945B10_reloc]
@@ -13189,6 +14747,7 @@
start: 0x946900
vram: 0x80A86670
follows_vram: ovl_00945B10_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x946900, asm, overlays/ovl_00946900]
@@ -13198,6 +14757,7 @@
start: 0x9473F0
vram: 0x80A87160
follows_vram: ovl_00946900
+ compress: True
subsegments:
- [0x9473F0, data, overlays/ovl_00946900_reloc]
@@ -13206,6 +14766,7 @@
start: 0x9474F0
vram: 0x80A87260
follows_vram: ovl_00946900_reloc
+ compress: True
bss_size: 0x10
subsegments:
- [0x9474F0, asm, overlays/ovl_009474F0]
@@ -13217,6 +14778,7 @@
start: 0x948850
vram: 0x80A885D0
follows_vram: ovl_009474F0
+ compress: True
subsegments:
- [0x948850, data, overlays/ovl_009474F0_reloc]
@@ -13225,6 +14787,7 @@
start: 0x948A20
vram: 0x80A887A0
follows_vram: ovl_009474F0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x948A20, asm, overlays/ovl_00948A20]
@@ -13234,6 +14797,7 @@
start: 0x949A90
vram: 0x80A89810
follows_vram: ovl_00948A20
+ compress: True
subsegments:
- [0x949A90, data, overlays/ovl_00948A20_reloc]
@@ -13242,6 +14806,7 @@
start: 0x949BE0
vram: 0x80A89960
follows_vram: ovl_00948A20_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x949BE0, asm, overlays/ovl_00949BE0]
@@ -13251,6 +14816,7 @@
start: 0x94B350
vram: 0x80A8B0D0
follows_vram: ovl_00949BE0
+ compress: True
subsegments:
- [0x94B350, data, overlays/ovl_00949BE0_reloc]
@@ -13259,6 +14825,7 @@
start: 0x94B4B0
vram: 0x80A8B230
follows_vram: ovl_00949BE0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x94B4B0, asm, overlays/ovl_0094B4B0]
@@ -13268,6 +14835,7 @@
start: 0x94BF40
vram: 0x80A8BCC0
follows_vram: ovl_0094B4B0
+ compress: True
subsegments:
- [0x94BF40, data, overlays/ovl_0094B4B0_reloc]
@@ -13276,6 +14844,7 @@
start: 0x94BFD0
vram: 0x80A8BD50
follows_vram: ovl_0094B4B0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x94BFD0, asm, overlays/ovl_0094BFD0]
@@ -13286,6 +14855,7 @@
start: 0x94D850
vram: 0x80A8D5D0
follows_vram: ovl_0094BFD0
+ compress: True
subsegments:
- [0x94D850, data, overlays/ovl_0094BFD0_reloc]
@@ -13294,6 +14864,7 @@
start: 0x94D920
vram: 0x80A8D6A0
follows_vram: ovl_0094BFD0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x94D920, asm, overlays/ovl_0094D920]
@@ -13304,6 +14875,7 @@
start: 0x94EF80
vram: 0x80A8ED00
follows_vram: ovl_0094D920
+ compress: True
subsegments:
- [0x94EF80, data, overlays/ovl_0094D920_reloc]
@@ -13312,6 +14884,7 @@
start: 0x94F170
vram: 0x80A8EEF0
follows_vram: ovl_0094D920_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x94F170, asm, overlays/ovl_0094F170]
@@ -13321,6 +14894,7 @@
start: 0x94F520
vram: 0x80A8F2A0
follows_vram: ovl_0094F170
+ compress: True
subsegments:
- [0x94F520, data, overlays/ovl_0094F170_reloc]
@@ -13329,6 +14903,7 @@
start: 0x94F570
vram: 0x80A8F2F0
follows_vram: ovl_0094F170_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x94F570, asm, overlays/ovl_0094F570]
@@ -13338,6 +14913,7 @@
start: 0x94F9C0
vram: 0x80A8F740
follows_vram: ovl_0094F570
+ compress: True
subsegments:
- [0x94F9C0, data, overlays/ovl_0094F570_reloc]
@@ -13346,6 +14922,7 @@
start: 0x94FA20
vram: 0x80A8F7A0
follows_vram: ovl_0094F570_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x94FA20, asm, overlays/ovl_0094FA20]
@@ -13355,6 +14932,7 @@
start: 0x94FB00
vram: 0x80A8F880
follows_vram: ovl_0094FA20
+ compress: True
subsegments:
- [0x94FB00, data, overlays/ovl_0094FA20_reloc]
@@ -13363,6 +14941,7 @@
start: 0x94FB30
vram: 0x80A8F8B0
follows_vram: ovl_0094FA20_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x94FB30, asm, overlays/ovl_0094FB30]
@@ -13372,6 +14951,7 @@
start: 0x94FC10
vram: 0x80A8F990
follows_vram: ovl_0094FB30
+ compress: True
subsegments:
- [0x94FC10, data, overlays/ovl_0094FB30_reloc]
@@ -13380,6 +14960,7 @@
start: 0x94FC40
vram: 0x80A8F9C0
follows_vram: ovl_0094FB30_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x94FC40, asm, overlays/ovl_0094FC40]
@@ -13389,6 +14970,7 @@
start: 0x94FD20
vram: 0x80A8FAA0
follows_vram: ovl_0094FC40
+ compress: True
subsegments:
- [0x94FD20, data, overlays/ovl_0094FC40_reloc]
@@ -13397,6 +14979,7 @@
start: 0x94FD50
vram: 0x80A8FAD0
follows_vram: ovl_0094FC40_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x94FD50, asm, overlays/ovl_0094FD50]
@@ -13406,6 +14989,7 @@
start: 0x94FE30
vram: 0x80A8FBB0
follows_vram: ovl_0094FD50
+ compress: True
subsegments:
- [0x94FE30, data, overlays/ovl_0094FD50_reloc]
@@ -13414,6 +14998,7 @@
start: 0x94FE60
vram: 0x80A8FBE0
follows_vram: ovl_0094FD50_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x94FE60, asm, overlays/ovl_0094FE60]
@@ -13423,6 +15008,7 @@
start: 0x94FF40
vram: 0x80A8FCC0
follows_vram: ovl_0094FE60
+ compress: True
subsegments:
- [0x94FF40, data, overlays/ovl_0094FE60_reloc]
@@ -13431,6 +15017,7 @@
start: 0x94FF70
vram: 0x80A8FCF0
follows_vram: ovl_0094FE60_reloc
+ compress: True
bss_size: 0x10
subsegments:
- [0x94FF70, asm, overlays/ovl_0094FF70]
@@ -13442,6 +15029,7 @@
start: 0x950C50
vram: 0x80A909E0
follows_vram: ovl_0094FF70
+ compress: True
subsegments:
- [0x950C50, data, overlays/ovl_0094FF70_reloc]
@@ -13450,6 +15038,7 @@
start: 0x950DE0
vram: 0x80A90B70
follows_vram: ovl_0094FF70_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x950DE0, asm, overlays/ovl_00950DE0]
@@ -13460,6 +15049,7 @@
start: 0x951960
vram: 0x80A916F0
follows_vram: ovl_00950DE0
+ compress: True
subsegments:
- [0x951960, data, overlays/ovl_00950DE0_reloc]
@@ -13468,6 +15058,7 @@
start: 0x951A70
vram: 0x80A91800
follows_vram: ovl_00950DE0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x951A70, asm, overlays/ovl_00951A70]
@@ -13478,6 +15069,7 @@
start: 0x951CC0
vram: 0x80A91A50
follows_vram: ovl_00951A70
+ compress: True
subsegments:
- [0x951CC0, data, overlays/ovl_00951A70_reloc]
@@ -13486,6 +15078,7 @@
start: 0x951D10
vram: 0x80A91AA0
follows_vram: ovl_00951A70_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x951D10, asm, overlays/ovl_00951D10]
@@ -13495,6 +15088,7 @@
start: 0x952670
vram: 0x80A92400
follows_vram: ovl_00951D10
+ compress: True
subsegments:
- [0x952670, data, overlays/ovl_00951D10_reloc]
@@ -13503,6 +15097,7 @@
start: 0x952730
vram: 0x80A924C0
follows_vram: ovl_00951D10_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x952730, asm, overlays/ovl_00952730]
@@ -13513,6 +15108,7 @@
start: 0x9536E0
vram: 0x80A93470
follows_vram: ovl_00952730
+ compress: True
subsegments:
- [0x9536E0, data, overlays/ovl_00952730_reloc]
@@ -13521,6 +15117,7 @@
start: 0x9537E0
vram: 0x80A93570
follows_vram: ovl_00952730_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9537E0, asm, overlays/ovl_009537E0]
@@ -13530,6 +15127,7 @@
start: 0x953D70
vram: 0x80A93B00
follows_vram: ovl_009537E0
+ compress: True
subsegments:
- [0x953D70, data, overlays/ovl_009537E0_reloc]
@@ -13538,6 +15136,7 @@
start: 0x953DE0
vram: 0x80A93B70
follows_vram: ovl_009537E0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x953DE0, data, overlays/ovl_00953DE0]
@@ -13546,6 +15145,7 @@
start: 0x953E30
vram: 0x80A93BC0
follows_vram: ovl_00953DE0
+ compress: True
subsegments:
- [0x953E30, data, overlays/ovl_00953DE0_reloc]
@@ -13554,6 +15154,7 @@
start: 0x953E50
vram: 0x80A93BE0
follows_vram: ovl_00953DE0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x953E50, data, overlays/ovl_00953E50]
@@ -13562,6 +15163,7 @@
start: 0x953EA0
vram: 0x80A93C30
follows_vram: ovl_00953E50
+ compress: True
subsegments:
- [0x953EA0, data, overlays/ovl_00953E50_reloc]
@@ -13570,6 +15172,7 @@
start: 0x953EC0
vram: 0x80A93C50
follows_vram: ovl_00953E50_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x953EC0, data, overlays/ovl_00953EC0]
@@ -13578,6 +15181,7 @@
start: 0x953F10
vram: 0x80A93CA0
follows_vram: ovl_00953EC0
+ compress: True
subsegments:
- [0x953F10, data, overlays/ovl_00953EC0_reloc]
@@ -13586,6 +15190,7 @@
start: 0x953F30
vram: 0x80A93CC0
follows_vram: ovl_00953EC0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x953F30, asm, overlays/ovl_00953F30]
@@ -13596,6 +15201,7 @@
start: 0x954C50
vram: 0x80A949E0
follows_vram: ovl_00953F30
+ compress: True
subsegments:
- [0x954C50, data, overlays/ovl_00953F30_reloc]
@@ -13604,6 +15210,7 @@
start: 0x954D30
vram: 0x80A94AC0
follows_vram: ovl_00953F30_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x954D30, asm, overlays/ovl_00954D30]
@@ -13614,6 +15221,7 @@
start: 0x9563E0
vram: 0x80A96170
follows_vram: ovl_00954D30
+ compress: True
subsegments:
- [0x9563E0, data, overlays/ovl_00954D30_reloc]
@@ -13622,6 +15230,7 @@
start: 0x956630
vram: 0x80A963C0
follows_vram: ovl_00954D30_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x956630, asm, overlays/ovl_00956630]
@@ -13631,6 +15240,7 @@
start: 0x956830
vram: 0x80A965C0
follows_vram: ovl_00956630
+ compress: True
subsegments:
- [0x956830, data, overlays/ovl_00956630_reloc]
@@ -13639,6 +15249,7 @@
start: 0x956870
vram: 0x80A96600
follows_vram: ovl_00956630_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x956870, data, overlays/ovl_00956870]
@@ -13647,6 +15258,7 @@
start: 0x9568C0
vram: 0x80A96650
follows_vram: ovl_00956870
+ compress: True
subsegments:
- [0x9568C0, data, overlays/ovl_00956870_reloc]
@@ -13655,6 +15267,7 @@
start: 0x9568E0
vram: 0x80A96670
follows_vram: ovl_00956870_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9568E0, data, overlays/ovl_009568E0]
@@ -13663,6 +15276,7 @@
start: 0x956930
vram: 0x80A966C0
follows_vram: ovl_009568E0
+ compress: True
subsegments:
- [0x956930, data, overlays/ovl_009568E0_reloc]
@@ -13671,6 +15285,7 @@
start: 0x956950
vram: 0x80A966E0
follows_vram: ovl_009568E0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x956950, data, overlays/ovl_00956950]
@@ -13679,6 +15294,7 @@
start: 0x9569A0
vram: 0x80A96730
follows_vram: ovl_00956950
+ compress: True
subsegments:
- [0x9569A0, data, overlays/ovl_00956950_reloc]
@@ -13687,6 +15303,7 @@
start: 0x9569C0
vram: 0x80A96750
follows_vram: ovl_00956950_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9569C0, data, overlays/ovl_009569C0]
@@ -13695,6 +15312,7 @@
start: 0x956A10
vram: 0x80A967A0
follows_vram: ovl_009569C0
+ compress: True
subsegments:
- [0x956A10, data, overlays/ovl_009569C0_reloc]
@@ -13703,6 +15321,7 @@
start: 0x956A30
vram: 0x80A967C0
follows_vram: ovl_009569C0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x956A30, data, overlays/ovl_00956A30]
@@ -13711,6 +15330,7 @@
start: 0x956A80
vram: 0x80A96810
follows_vram: ovl_00956A30
+ compress: True
subsegments:
- [0x956A80, data, overlays/ovl_00956A30_reloc]
@@ -13719,6 +15339,7 @@
start: 0x956AA0
vram: 0x80A96830
follows_vram: ovl_00956A30_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x956AA0, data, overlays/ovl_00956AA0]
@@ -13727,6 +15348,7 @@
start: 0x956AF0
vram: 0x80A96880
follows_vram: ovl_00956AA0
+ compress: True
subsegments:
- [0x956AF0, data, overlays/ovl_00956AA0_reloc]
@@ -13735,6 +15357,7 @@
start: 0x956B10
vram: 0x80A968A0
follows_vram: ovl_00956AA0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x956B10, data, overlays/ovl_00956B10]
@@ -13743,6 +15366,7 @@
start: 0x956B60
vram: 0x80A968F0
follows_vram: ovl_00956B10
+ compress: True
subsegments:
- [0x956B60, data, overlays/ovl_00956B10_reloc]
@@ -13751,6 +15375,7 @@
start: 0x956B80
vram: 0x80A96910
follows_vram: ovl_00956B10_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x956B80, data, overlays/ovl_00956B80]
@@ -13759,6 +15384,7 @@
start: 0x956BD0
vram: 0x80A96960
follows_vram: ovl_00956B80
+ compress: True
subsegments:
- [0x956BD0, data, overlays/ovl_00956B80_reloc]
@@ -13767,6 +15393,7 @@
start: 0x956BF0
vram: 0x80A96980
follows_vram: ovl_00956B80_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x956BF0, asm, overlays/ovl_00956BF0]
@@ -13777,6 +15404,7 @@
start: 0x957380
vram: 0x80A97110
follows_vram: ovl_00956BF0
+ compress: True
subsegments:
- [0x957380, data, overlays/ovl_00956BF0_reloc]
@@ -13785,6 +15413,7 @@
start: 0x957410
vram: 0x80A971A0
follows_vram: ovl_00956BF0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x957410, asm, overlays/ovl_00957410]
@@ -13794,6 +15423,7 @@
start: 0x957770
vram: 0x80A97500
follows_vram: ovl_00957410
+ compress: True
subsegments:
- [0x957770, data, overlays/ovl_00957410_reloc]
@@ -13802,6 +15432,7 @@
start: 0x9577A0
vram: 0x80A97530
follows_vram: ovl_00957410_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9577A0, asm, overlays/ovl_009577A0]
@@ -13811,6 +15442,7 @@
start: 0x957B00
vram: 0x80A97890
follows_vram: ovl_009577A0
+ compress: True
subsegments:
- [0x957B00, data, overlays/ovl_009577A0_reloc]
@@ -13819,6 +15451,7 @@
start: 0x957B30
vram: 0x80A978C0
follows_vram: ovl_009577A0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x957B30, data, overlays/ovl_00957B30]
@@ -13827,6 +15460,7 @@
start: 0x957B80
vram: 0x80A97910
follows_vram: ovl_00957B30
+ compress: True
subsegments:
- [0x957B80, data, overlays/ovl_00957B30_reloc]
@@ -13835,6 +15469,7 @@
start: 0x957BA0
vram: 0x80A97930
follows_vram: ovl_00957B30_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x957BA0, asm, overlays/ovl_00957BA0]
@@ -13845,6 +15480,7 @@
start: 0x957FA0
vram: 0x80A97D30
follows_vram: ovl_00957BA0
+ compress: True
subsegments:
- [0x957FA0, data, overlays/ovl_00957BA0_reloc]
@@ -13853,6 +15489,7 @@
start: 0x957FF0
vram: 0x80A97D80
follows_vram: ovl_00957BA0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x957FF0, data, overlays/ovl_00957FF0]
@@ -13861,6 +15498,7 @@
start: 0x958040
vram: 0x80A97DD0
follows_vram: ovl_00957FF0
+ compress: True
subsegments:
- [0x958040, data, overlays/ovl_00957FF0_reloc]
@@ -13869,6 +15507,7 @@
start: 0x958060
vram: 0x80A97DF0
follows_vram: ovl_00957FF0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x958060, data, overlays/ovl_00958060]
@@ -13877,6 +15516,7 @@
start: 0x9580B0
vram: 0x80A97E40
follows_vram: ovl_00958060
+ compress: True
subsegments:
- [0x9580B0, data, overlays/ovl_00958060_reloc]
@@ -13885,6 +15525,7 @@
start: 0x9580D0
vram: 0x80A97E60
follows_vram: ovl_00958060_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9580D0, data, overlays/ovl_009580D0]
@@ -13893,6 +15534,7 @@
start: 0x958120
vram: 0x80A97EB0
follows_vram: ovl_009580D0
+ compress: True
subsegments:
- [0x958120, data, overlays/ovl_009580D0_reloc]
@@ -13901,6 +15543,7 @@
start: 0x958140
vram: 0x80A97ED0
follows_vram: ovl_009580D0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x958140, data, overlays/ovl_00958140]
@@ -13909,6 +15552,7 @@
start: 0x958190
vram: 0x80A97F20
follows_vram: ovl_00958140
+ compress: True
subsegments:
- [0x958190, data, overlays/ovl_00958140_reloc]
@@ -13917,6 +15561,7 @@
start: 0x9581B0
vram: 0x80A97F40
follows_vram: ovl_00958140_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9581B0, data, overlays/ovl_009581B0]
@@ -13925,6 +15570,7 @@
start: 0x958200
vram: 0x80A97F90
follows_vram: ovl_009581B0
+ compress: True
subsegments:
- [0x958200, data, overlays/ovl_009581B0_reloc]
@@ -13933,6 +15579,7 @@
start: 0x958220
vram: 0x80A97FB0
follows_vram: ovl_009581B0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x958220, asm, overlays/ovl_00958220]
@@ -13943,6 +15590,7 @@
start: 0x9590A0
vram: 0x80A98E30
follows_vram: ovl_00958220
+ compress: True
subsegments:
- [0x9590A0, data, overlays/ovl_00958220_reloc]
@@ -13951,6 +15599,7 @@
start: 0x9591D0
vram: 0x80A98F60
follows_vram: ovl_00958220_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9591D0, asm, overlays/ovl_009591D0]
@@ -13961,6 +15610,7 @@
start: 0x95B1E0
vram: 0x80A9AF70
follows_vram: ovl_009591D0
+ compress: True
subsegments:
- [0x95B1E0, data, overlays/ovl_009591D0_reloc]
@@ -13969,6 +15619,7 @@
start: 0x95B440
vram: 0x80A9B1D0
follows_vram: ovl_009591D0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x95B440, asm, overlays/ovl_0095B440]
@@ -13979,6 +15630,7 @@
start: 0x95BD80
vram: 0x80A9BB10
follows_vram: ovl_0095B440
+ compress: True
subsegments:
- [0x95BD80, data, overlays/ovl_0095B440_reloc]
@@ -13987,6 +15639,7 @@
start: 0x95BDE0
vram: 0x80A9BB70
follows_vram: ovl_0095B440_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x95BDE0, data, overlays/ovl_0095BDE0]
@@ -13995,6 +15648,7 @@
start: 0x95BE30
vram: 0x80A9BBC0
follows_vram: ovl_0095BDE0
+ compress: True
subsegments:
- [0x95BE30, data, overlays/ovl_0095BDE0_reloc]
@@ -14003,6 +15657,7 @@
start: 0x95BE50
vram: 0x80A9BBE0
follows_vram: ovl_0095BDE0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x95BE50, data, overlays/ovl_0095BE50]
@@ -14011,6 +15666,7 @@
start: 0x95BEA0
vram: 0x80A9BC30
follows_vram: ovl_0095BE50
+ compress: True
subsegments:
- [0x95BEA0, data, overlays/ovl_0095BE50_reloc]
@@ -14019,6 +15675,7 @@
start: 0x95BEC0
vram: 0x80A9BC50
follows_vram: ovl_0095BE50_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x95BEC0, data, overlays/ovl_0095BEC0]
@@ -14027,6 +15684,7 @@
start: 0x95BF10
vram: 0x80A9BCA0
follows_vram: ovl_0095BEC0
+ compress: True
subsegments:
- [0x95BF10, data, overlays/ovl_0095BEC0_reloc]
@@ -14035,6 +15693,7 @@
start: 0x95BF30
vram: 0x80A9BCC0
follows_vram: ovl_0095BEC0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x95BF30, data, overlays/ovl_0095BF30]
@@ -14043,6 +15702,7 @@
start: 0x95BF80
vram: 0x80A9BD10
follows_vram: ovl_0095BF30
+ compress: True
subsegments:
- [0x95BF80, data, overlays/ovl_0095BF30_reloc]
@@ -14051,6 +15711,7 @@
start: 0x95BFA0
vram: 0x80A9BD30
follows_vram: ovl_0095BF30_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x95BFA0, asm, overlays/ovl_0095BFA0]
@@ -14061,6 +15722,7 @@
start: 0x95C5D0
vram: 0x80A9C360
follows_vram: ovl_0095BFA0
+ compress: True
subsegments:
- [0x95C5D0, data, overlays/ovl_0095BFA0_reloc]
@@ -14069,6 +15731,7 @@
start: 0x95C630
vram: 0x80A9C3C0
follows_vram: ovl_0095BFA0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x95C630, asm, overlays/ovl_0095C630]
@@ -14079,6 +15742,7 @@
start: 0x95CF10
vram: 0x80A9CCA0
follows_vram: ovl_0095C630
+ compress: True
subsegments:
- [0x95CF10, data, overlays/ovl_0095C630_reloc]
@@ -14087,6 +15751,7 @@
start: 0x95CFD0
vram: 0x80A9CD60
follows_vram: ovl_0095C630_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x95CFD0, data, overlays/ovl_0095CFD0]
@@ -14095,6 +15760,7 @@
start: 0x95D020
vram: 0x80A9CDB0
follows_vram: ovl_0095CFD0
+ compress: True
subsegments:
- [0x95D020, data, overlays/ovl_0095CFD0_reloc]
@@ -14103,6 +15769,7 @@
start: 0x95D040
vram: 0x80A9CDD0
follows_vram: ovl_0095CFD0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x95D040, data, overlays/ovl_0095D040]
@@ -14111,6 +15778,7 @@
start: 0x95D090
vram: 0x80A9CE20
follows_vram: ovl_0095D040
+ compress: True
subsegments:
- [0x95D090, data, overlays/ovl_0095D040_reloc]
@@ -14119,6 +15787,7 @@
start: 0x95D0B0
vram: 0x80A9CE40
follows_vram: ovl_0095D040_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x95D0B0, data, overlays/ovl_0095D0B0]
@@ -14127,6 +15796,7 @@
start: 0x95D100
vram: 0x80A9CE90
follows_vram: ovl_0095D0B0
+ compress: True
subsegments:
- [0x95D100, data, overlays/ovl_0095D0B0_reloc]
@@ -14135,6 +15805,7 @@
start: 0x95D120
vram: 0x80A9CEB0
follows_vram: ovl_0095D0B0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x95D120, asm, overlays/ovl_0095D120]
@@ -14144,6 +15815,7 @@
start: 0x95D4C0
vram: 0x80A9D250
follows_vram: ovl_0095D120
+ compress: True
subsegments:
- [0x95D4C0, data, overlays/ovl_0095D120_reloc]
@@ -14152,6 +15824,7 @@
start: 0x95D4F0
vram: 0x80A9D280
follows_vram: ovl_0095D120_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x95D4F0, asm, overlays/ovl_0095D4F0]
@@ -14162,6 +15835,7 @@
start: 0x95DD40
vram: 0x80A9DAD0
follows_vram: ovl_0095D4F0
+ compress: True
subsegments:
- [0x95DD40, data, overlays/ovl_0095D4F0_reloc]
@@ -14170,6 +15844,7 @@
start: 0x95DDA0
vram: 0x80A9DB30
follows_vram: ovl_0095D4F0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x95DDA0, asm, overlays/ovl_0095DDA0]
@@ -14179,6 +15854,7 @@
start: 0x95DE80
vram: 0x80A9DC10
follows_vram: ovl_0095DDA0
+ compress: True
subsegments:
- [0x95DE80, data, overlays/ovl_0095DDA0_reloc]
@@ -14187,6 +15863,7 @@
start: 0x95DEB0
vram: 0x80A9DC40
follows_vram: ovl_0095DDA0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x95DEB0, asm, overlays/ovl_0095DEB0]
@@ -14197,6 +15874,7 @@
start: 0x95E4C0
vram: 0x80A9E250
follows_vram: ovl_0095DEB0
+ compress: True
subsegments:
- [0x95E4C0, data, overlays/ovl_0095DEB0_reloc]
@@ -14205,6 +15883,7 @@
start: 0x95E520
vram: 0x80A9E2B0
follows_vram: ovl_0095DEB0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x95E520, data, overlays/ovl_0095E520]
@@ -14213,6 +15892,7 @@
start: 0x95E570
vram: 0x80A9E300
follows_vram: ovl_0095E520
+ compress: True
subsegments:
- [0x95E570, data, overlays/ovl_0095E520_reloc]
@@ -14221,6 +15901,7 @@
start: 0x95E590
vram: 0x80A9E320
follows_vram: ovl_0095E520_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x95E590, data, overlays/ovl_0095E590]
@@ -14229,6 +15910,7 @@
start: 0x95E5E0
vram: 0x80A9E370
follows_vram: ovl_0095E590
+ compress: True
subsegments:
- [0x95E5E0, data, overlays/ovl_0095E590_reloc]
@@ -14237,6 +15919,7 @@
start: 0x95E600
vram: 0x80A9E390
follows_vram: ovl_0095E590_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x95E600, data, overlays/ovl_0095E600]
@@ -14245,6 +15928,7 @@
start: 0x95E650
vram: 0x80A9E3E0
follows_vram: ovl_0095E600
+ compress: True
subsegments:
- [0x95E650, data, overlays/ovl_0095E600_reloc]
@@ -14253,6 +15937,7 @@
start: 0x95E670
vram: 0x80A9E400
follows_vram: ovl_0095E600_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x95E670, data, overlays/ovl_0095E670]
@@ -14261,6 +15946,7 @@
start: 0x95E6C0
vram: 0x80A9E450
follows_vram: ovl_0095E670
+ compress: True
subsegments:
- [0x95E6C0, data, overlays/ovl_0095E670_reloc]
@@ -14269,6 +15955,7 @@
start: 0x95E6E0
vram: 0x80A9E470
follows_vram: ovl_0095E670_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x95E6E0, data, overlays/ovl_0095E6E0]
@@ -14277,6 +15964,7 @@
start: 0x95E730
vram: 0x80A9E4C0
follows_vram: ovl_0095E6E0
+ compress: True
subsegments:
- [0x95E730, data, overlays/ovl_0095E6E0_reloc]
@@ -14285,6 +15973,7 @@
start: 0x95E750
vram: 0x80A9E4E0
follows_vram: ovl_0095E6E0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x95E750, asm, overlays/ovl_0095E750]
@@ -14295,6 +15984,7 @@
start: 0x95EC60
vram: 0x80A9E9F0
follows_vram: ovl_0095E750
+ compress: True
subsegments:
- [0x95EC60, data, overlays/ovl_0095E750_reloc]
@@ -14303,6 +15993,7 @@
start: 0x95ECC0
vram: 0x80A9EA50
follows_vram: ovl_0095E750_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x95ECC0, asm, overlays/ovl_0095ECC0]
@@ -14312,6 +16003,7 @@
start: 0x95ED90
vram: 0x80A9EB20
follows_vram: ovl_0095ECC0
+ compress: True
subsegments:
- [0x95ED90, data, overlays/ovl_0095ECC0_reloc]
@@ -14320,6 +16012,7 @@
start: 0x95EDC0
vram: 0x80A9EB50
follows_vram: ovl_0095ECC0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x95EDC0, data, overlays/ovl_0095EDC0]
@@ -14328,6 +16021,7 @@
start: 0x95EE10
vram: 0x80A9EBA0
follows_vram: ovl_0095EDC0
+ compress: True
subsegments:
- [0x95EE10, data, overlays/ovl_0095EDC0_reloc]
@@ -14336,6 +16030,7 @@
start: 0x95EE30
vram: 0x80A9EBC0
follows_vram: ovl_0095EDC0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x95EE30, data, overlays/ovl_0095EE30]
@@ -14344,6 +16039,7 @@
start: 0x95EE80
vram: 0x80A9EC10
follows_vram: ovl_0095EE30
+ compress: True
subsegments:
- [0x95EE80, data, overlays/ovl_0095EE30_reloc]
@@ -14352,6 +16048,7 @@
start: 0x95EEA0
vram: 0x80A9EC30
follows_vram: ovl_0095EE30_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x95EEA0, data, overlays/ovl_0095EEA0]
@@ -14360,6 +16057,7 @@
start: 0x95EEF0
vram: 0x80A9EC80
follows_vram: ovl_0095EEA0
+ compress: True
subsegments:
- [0x95EEF0, data, overlays/ovl_0095EEA0_reloc]
@@ -14368,6 +16066,7 @@
start: 0x95EF10
vram: 0x80A9ECA0
follows_vram: ovl_0095EEA0_reloc
+ compress: True
bss_size: 0x20
subsegments:
- [0x95EF10, asm, overlays/ovl_0095EF10]
@@ -14379,6 +16078,7 @@
start: 0x95F750
vram: 0x80A9F500
follows_vram: ovl_0095EF10
+ compress: True
subsegments:
- [0x95F750, data, overlays/ovl_0095EF10_reloc]
@@ -14387,6 +16087,7 @@
start: 0x95F830
vram: 0x80A9F5E0
follows_vram: ovl_0095EF10_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x95F830, asm, overlays/ovl_0095F830]
@@ -14397,6 +16098,7 @@
start: 0x95FE60
vram: 0x80A9FC10
follows_vram: ovl_0095F830
+ compress: True
subsegments:
- [0x95FE60, data, overlays/ovl_0095F830_reloc]
@@ -14405,6 +16107,7 @@
start: 0x95FEC0
vram: 0x80A9FC70
follows_vram: ovl_0095F830_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x95FEC0, asm, overlays/ovl_0095FEC0]
@@ -14415,6 +16118,7 @@
start: 0x9625A0
vram: 0x80AA2350
follows_vram: ovl_0095FEC0
+ compress: True
subsegments:
- [0x9625A0, data, overlays/ovl_0095FEC0_reloc]
@@ -14423,6 +16127,7 @@
start: 0x962800
vram: 0x80AA25B0
follows_vram: ovl_0095FEC0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x962800, asm, overlays/ovl_00962800]
@@ -14432,6 +16137,7 @@
start: 0x962CD0
vram: 0x80AA2A80
follows_vram: ovl_00962800
+ compress: True
subsegments:
- [0x962CD0, data, overlays/ovl_00962800_reloc]
@@ -14440,6 +16146,7 @@
start: 0x962D00
vram: 0x80AA2AB0
follows_vram: ovl_00962800_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x962D00, asm, overlays/ovl_00962D00]
@@ -14449,6 +16156,7 @@
start: 0x963000
vram: 0x80AA2DB0
follows_vram: ovl_00962D00
+ compress: True
subsegments:
- [0x963000, data, overlays/ovl_00962D00_reloc]
@@ -14457,6 +16165,7 @@
start: 0x963030
vram: 0x80AA2DE0
follows_vram: ovl_00962D00_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x963030, asm, overlays/ovl_00963030]
@@ -14466,6 +16175,7 @@
start: 0x963490
vram: 0x80AA3240
follows_vram: ovl_00963030
+ compress: True
subsegments:
- [0x963490, data, overlays/ovl_00963030_reloc]
@@ -14474,6 +16184,7 @@
start: 0x9634D0
vram: 0x80AA3280
follows_vram: ovl_00963030_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9634D0, asm, overlays/ovl_009634D0]
@@ -14483,6 +16194,7 @@
start: 0x9635B0
vram: 0x80AA3360
follows_vram: ovl_009634D0
+ compress: True
subsegments:
- [0x9635B0, data, overlays/ovl_009634D0_reloc]
@@ -14491,6 +16203,7 @@
start: 0x9635E0
vram: 0x80AA3390
follows_vram: ovl_009634D0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9635E0, asm, overlays/ovl_009635E0]
@@ -14501,6 +16214,7 @@
start: 0x963D90
vram: 0x80AA3B40
follows_vram: ovl_009635E0
+ compress: True
subsegments:
- [0x963D90, data, overlays/ovl_009635E0_reloc]
@@ -14509,6 +16223,7 @@
start: 0x963DF0
vram: 0x80AA3BA0
follows_vram: ovl_009635E0_reloc
+ compress: True
bss_size: 0xE0
subsegments:
- [0x963DF0, asm, overlays/ovl_00963DF0]
@@ -14520,6 +16235,7 @@
start: 0x965040
vram: 0x80AA4ED0
follows_vram: ovl_00963DF0
+ compress: True
subsegments:
- [0x965040, data, overlays/ovl_00963DF0_reloc]
@@ -14528,6 +16244,7 @@
start: 0x9651E0
vram: 0x80AA5070
follows_vram: ovl_00963DF0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9651E0, asm, overlays/ovl_009651E0]
@@ -14537,6 +16254,7 @@
start: 0x9652C0
vram: 0x80AA5150
follows_vram: ovl_009651E0
+ compress: True
subsegments:
- [0x9652C0, data, overlays/ovl_009651E0_reloc]
@@ -14545,6 +16263,7 @@
start: 0x9652F0
vram: 0x80AA5180
follows_vram: ovl_009651E0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9652F0, data, overlays/ovl_009652F0]
@@ -14553,6 +16272,7 @@
start: 0x965340
vram: 0x80AA51D0
follows_vram: ovl_009652F0
+ compress: True
subsegments:
- [0x965340, data, overlays/ovl_009652F0_reloc]
@@ -14561,6 +16281,7 @@
start: 0x965360
vram: 0x80AA51F0
follows_vram: ovl_009652F0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x965360, data, overlays/ovl_00965360]
@@ -14569,6 +16290,7 @@
start: 0x9653B0
vram: 0x80AA5240
follows_vram: ovl_00965360
+ compress: True
subsegments:
- [0x9653B0, data, overlays/ovl_00965360_reloc]
@@ -14577,6 +16299,7 @@
start: 0x9653D0
vram: 0x80AA5260
follows_vram: ovl_00965360_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9653D0, asm, overlays/ovl_009653D0]
@@ -14587,6 +16310,7 @@
start: 0x965B80
vram: 0x80AA5A10
follows_vram: ovl_009653D0
+ compress: True
subsegments:
- [0x965B80, data, overlays/ovl_009653D0_reloc]
@@ -14595,6 +16319,7 @@
start: 0x965BE0
vram: 0x80AA5A70
follows_vram: ovl_009653D0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x965BE0, asm, overlays/ovl_00965BE0]
@@ -14605,6 +16330,7 @@
start: 0x967130
vram: 0x80AA6FC0
follows_vram: ovl_00965BE0
+ compress: True
subsegments:
- [0x967130, data, overlays/ovl_00965BE0_reloc]
@@ -14613,6 +16339,7 @@
start: 0x9672A0
vram: 0x80AA7130
follows_vram: ovl_00965BE0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9672A0, data, overlays/ovl_009672A0]
@@ -14621,6 +16348,7 @@
start: 0x9672F0
vram: 0x80AA7180
follows_vram: ovl_009672A0
+ compress: True
subsegments:
- [0x9672F0, data, overlays/ovl_009672A0_reloc]
@@ -14629,6 +16357,7 @@
start: 0x967310
vram: 0x80AA71A0
follows_vram: ovl_009672A0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x967310, asm, overlays/ovl_00967310]
@@ -14639,6 +16368,7 @@
start: 0x967940
vram: 0x80AA77D0
follows_vram: ovl_00967310
+ compress: True
subsegments:
- [0x967940, data, overlays/ovl_00967310_reloc]
@@ -14647,6 +16377,7 @@
start: 0x9679A0
vram: 0x80AA7830
follows_vram: ovl_00967310_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9679A0, asm, overlays/ovl_009679A0]
@@ -14657,6 +16388,7 @@
start: 0x968030
vram: 0x80AA7EC0
follows_vram: ovl_009679A0
+ compress: True
subsegments:
- [0x968030, data, overlays/ovl_009679A0_reloc]
@@ -14665,6 +16397,7 @@
start: 0x9680A0
vram: 0x80AA7F30
follows_vram: ovl_009679A0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9680A0, asm, overlays/ovl_009680A0]
@@ -14675,6 +16408,7 @@
start: 0x9686D0
vram: 0x80AA8560
follows_vram: ovl_009680A0
+ compress: True
subsegments:
- [0x9686D0, data, overlays/ovl_009680A0_reloc]
@@ -14683,6 +16417,7 @@
start: 0x968730
vram: 0x80AA85C0
follows_vram: ovl_009680A0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x968730, data, overlays/ovl_00968730]
@@ -14691,6 +16426,7 @@
start: 0x968780
vram: 0x80AA8610
follows_vram: ovl_00968730
+ compress: True
subsegments:
- [0x968780, data, overlays/ovl_00968730_reloc]
@@ -14699,6 +16435,7 @@
start: 0x9687A0
vram: 0x80AA8630
follows_vram: ovl_00968730_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9687A0, data, overlays/ovl_009687A0]
@@ -14707,6 +16444,7 @@
start: 0x9687F0
vram: 0x80AA8680
follows_vram: ovl_009687A0
+ compress: True
subsegments:
- [0x9687F0, data, overlays/ovl_009687A0_reloc]
@@ -14715,6 +16453,7 @@
start: 0x968810
vram: 0x80AA86A0
follows_vram: ovl_009687A0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x968810, data, overlays/ovl_00968810]
@@ -14723,6 +16462,7 @@
start: 0x968860
vram: 0x80AA86F0
follows_vram: ovl_00968810
+ compress: True
subsegments:
- [0x968860, data, overlays/ovl_00968810_reloc]
@@ -14731,6 +16471,7 @@
start: 0x968880
vram: 0x80AA8710
follows_vram: ovl_00968810_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x968880, asm, overlays/ovl_00968880]
@@ -14740,6 +16481,7 @@
start: 0x968960
vram: 0x80AA87F0
follows_vram: ovl_00968880
+ compress: True
subsegments:
- [0x968960, data, overlays/ovl_00968880_reloc]
@@ -14748,6 +16490,7 @@
start: 0x968990
vram: 0x80AA8820
follows_vram: ovl_00968880_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x968990, data, overlays/ovl_00968990]
@@ -14756,6 +16499,7 @@
start: 0x9689E0
vram: 0x80AA8870
follows_vram: ovl_00968990
+ compress: True
subsegments:
- [0x9689E0, data, overlays/ovl_00968990_reloc]
@@ -14764,6 +16508,7 @@
start: 0x968A00
vram: 0x80AA8890
follows_vram: ovl_00968990_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x968A00, data, overlays/ovl_00968A00]
@@ -14772,6 +16517,7 @@
start: 0x968A50
vram: 0x80AA88E0
follows_vram: ovl_00968A00
+ compress: True
subsegments:
- [0x968A50, data, overlays/ovl_00968A00_reloc]
@@ -14780,6 +16526,7 @@
start: 0x968A70
vram: 0x80AA8900
follows_vram: ovl_00968A00_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x968A70, data, overlays/ovl_00968A70]
@@ -14788,6 +16535,7 @@
start: 0x968AC0
vram: 0x80AA8950
follows_vram: ovl_00968A70
+ compress: True
subsegments:
- [0x968AC0, data, overlays/ovl_00968A70_reloc]
@@ -14796,6 +16544,7 @@
start: 0x968AE0
vram: 0x80AA8970
follows_vram: ovl_00968A70_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x968AE0, asm, overlays/ovl_00968AE0]
@@ -14805,6 +16554,7 @@
start: 0x968DA0
vram: 0x80AA8C30
follows_vram: ovl_00968AE0
+ compress: True
subsegments:
- [0x968DA0, data, overlays/ovl_00968AE0_reloc]
@@ -14813,6 +16563,7 @@
start: 0x968DD0
vram: 0x80AA8C60
follows_vram: ovl_00968AE0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x968DD0, asm, overlays/ovl_00968DD0]
@@ -14822,6 +16573,7 @@
start: 0x969130
vram: 0x80AA8FC0
follows_vram: ovl_00968DD0
+ compress: True
subsegments:
- [0x969130, data, overlays/ovl_00968DD0_reloc]
@@ -14830,6 +16582,7 @@
start: 0x969160
vram: 0x80AA8FF0
follows_vram: ovl_00968DD0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x969160, data, overlays/ovl_00969160]
@@ -14838,6 +16591,7 @@
start: 0x9691B0
vram: 0x80AA9040
follows_vram: ovl_00969160
+ compress: True
subsegments:
- [0x9691B0, data, overlays/ovl_00969160_reloc]
@@ -14846,6 +16600,7 @@
start: 0x9691D0
vram: 0x80AA9060
follows_vram: ovl_00969160_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9691D0, data, overlays/ovl_009691D0]
@@ -14854,6 +16609,7 @@
start: 0x969220
vram: 0x80AA90B0
follows_vram: ovl_009691D0
+ compress: True
subsegments:
- [0x969220, data, overlays/ovl_009691D0_reloc]
@@ -14862,6 +16618,7 @@
start: 0x969240
vram: 0x80AA90D0
follows_vram: ovl_009691D0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x969240, data, overlays/ovl_00969240]
@@ -14870,6 +16627,7 @@
start: 0x969290
vram: 0x80AA9120
follows_vram: ovl_00969240
+ compress: True
subsegments:
- [0x969290, data, overlays/ovl_00969240_reloc]
@@ -14878,6 +16636,7 @@
start: 0x9692B0
vram: 0x80AA9140
follows_vram: ovl_00969240_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9692B0, data, overlays/ovl_009692B0]
@@ -14886,6 +16645,7 @@
start: 0x969300
vram: 0x80AA9190
follows_vram: ovl_009692B0
+ compress: True
subsegments:
- [0x969300, data, overlays/ovl_009692B0_reloc]
@@ -14894,6 +16654,7 @@
start: 0x969320
vram: 0x80AA91B0
follows_vram: ovl_009692B0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x969320, data, overlays/ovl_00969320]
@@ -14902,6 +16663,7 @@
start: 0x969370
vram: 0x80AA9200
follows_vram: ovl_00969320
+ compress: True
subsegments:
- [0x969370, data, overlays/ovl_00969320_reloc]
@@ -14910,6 +16672,7 @@
start: 0x969390
vram: 0x80AA9220
follows_vram: ovl_00969320_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x969390, data, overlays/ovl_00969390]
@@ -14918,6 +16681,7 @@
start: 0x9693E0
vram: 0x80AA9270
follows_vram: ovl_00969390
+ compress: True
subsegments:
- [0x9693E0, data, overlays/ovl_00969390_reloc]
@@ -14926,6 +16690,7 @@
start: 0x969400
vram: 0x80AA9290
follows_vram: ovl_00969390_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x969400, data, overlays/ovl_00969400]
@@ -14934,6 +16699,7 @@
start: 0x969450
vram: 0x80AA92E0
follows_vram: ovl_00969400
+ compress: True
subsegments:
- [0x969450, data, overlays/ovl_00969400_reloc]
@@ -14942,6 +16708,7 @@
start: 0x969470
vram: 0x80AA9300
follows_vram: ovl_00969400_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x969470, data, overlays/ovl_00969470]
@@ -14950,6 +16717,7 @@
start: 0x9694C0
vram: 0x80AA9350
follows_vram: ovl_00969470
+ compress: True
subsegments:
- [0x9694C0, data, overlays/ovl_00969470_reloc]
@@ -14958,6 +16726,7 @@
start: 0x9694E0
vram: 0x80AA9370
follows_vram: ovl_00969470_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9694E0, data, overlays/ovl_009694E0]
@@ -14966,6 +16735,7 @@
start: 0x969530
vram: 0x80AA93C0
follows_vram: ovl_009694E0
+ compress: True
subsegments:
- [0x969530, data, overlays/ovl_009694E0_reloc]
@@ -14974,6 +16744,7 @@
start: 0x969550
vram: 0x80AA93E0
follows_vram: ovl_009694E0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x969550, data, overlays/ovl_00969550]
@@ -14982,6 +16753,7 @@
start: 0x9695A0
vram: 0x80AA9430
follows_vram: ovl_00969550
+ compress: True
subsegments:
- [0x9695A0, data, overlays/ovl_00969550_reloc]
@@ -14990,6 +16762,7 @@
start: 0x9695C0
vram: 0x80AA9450
follows_vram: ovl_00969550_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x9695C0, data, overlays/ovl_009695C0]
@@ -14998,6 +16771,7 @@
start: 0x969610
vram: 0x80AA94A0
follows_vram: ovl_009695C0
+ compress: True
subsegments:
- [0x969610, data, overlays/ovl_009695C0_reloc]
@@ -15006,6 +16780,7 @@
start: 0x969630
vram: 0x80AA94C0
follows_vram: ovl_009695C0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x969630, asm, overlays/ovl_00969630]
@@ -15016,6 +16791,7 @@
start: 0x969B30
vram: 0x80AA99C0
follows_vram: ovl_00969630
+ compress: True
subsegments:
- [0x969B30, data, overlays/ovl_00969630_reloc]
@@ -15024,6 +16800,7 @@
start: 0x969B80
vram: 0x80AA9A10
follows_vram: ovl_00969630_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x969B80, asm, overlays/ovl_00969B80]
@@ -15034,6 +16811,7 @@
start: 0x96A080
vram: 0x80AA9F10
follows_vram: ovl_00969B80
+ compress: True
subsegments:
- [0x96A080, data, overlays/ovl_00969B80_reloc]
@@ -15042,6 +16820,7 @@
start: 0x96A0D0
vram: 0x80AA9F60
follows_vram: ovl_00969B80_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x96A0D0, data, overlays/ovl_0096A0D0]
@@ -15050,6 +16829,7 @@
start: 0x96A120
vram: 0x80AA9FB0
follows_vram: ovl_0096A0D0
+ compress: True
subsegments:
- [0x96A120, data, overlays/ovl_0096A0D0_reloc]
@@ -15058,6 +16838,7 @@
start: 0x96A140
vram: 0x80AA9FD0
follows_vram: ovl_0096A0D0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x96A140, data, overlays/ovl_0096A140]
@@ -15066,6 +16847,7 @@
start: 0x96A190
vram: 0x80AAA020
follows_vram: ovl_0096A140
+ compress: True
subsegments:
- [0x96A190, data, overlays/ovl_0096A140_reloc]
@@ -15074,6 +16856,7 @@
start: 0x96A1B0
vram: 0x80AAA040
follows_vram: ovl_0096A140_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x96A1B0, data, overlays/ovl_0096A1B0]
@@ -15082,6 +16865,7 @@
start: 0x96A200
vram: 0x80AAA090
follows_vram: ovl_0096A1B0
+ compress: True
subsegments:
- [0x96A200, data, overlays/ovl_0096A1B0_reloc]
@@ -15090,6 +16874,7 @@
start: 0x96A220
vram: 0x80AAA0B0
follows_vram: ovl_0096A1B0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x96A220, data, overlays/ovl_0096A220]
@@ -15098,6 +16883,7 @@
start: 0x96A270
vram: 0x80AAA100
follows_vram: ovl_0096A220
+ compress: True
subsegments:
- [0x96A270, data, overlays/ovl_0096A220_reloc]
@@ -15106,6 +16892,7 @@
start: 0x96A290
vram: 0x80AAA120
follows_vram: ovl_0096A220_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x96A290, asm, overlays/ovl_0096A290]
@@ -15115,6 +16902,7 @@
start: 0x96AF10
vram: 0x80AAADA0
follows_vram: ovl_0096A290
+ compress: True
subsegments:
- [0x96AF10, data, overlays/ovl_0096A290_reloc]
@@ -15123,6 +16911,7 @@
start: 0x96B010
vram: 0x80AAAEA0
follows_vram: ovl_0096A290_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x96B010, asm, overlays/ovl_0096B010]
@@ -15132,6 +16921,7 @@
start: 0x96B0F0
vram: 0x80AAAF80
follows_vram: ovl_0096B010
+ compress: True
subsegments:
- [0x96B0F0, data, overlays/ovl_0096B010_reloc]
@@ -15140,6 +16930,7 @@
start: 0x96B120
vram: 0x80AAAFB0
follows_vram: ovl_0096B010_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x96B120, asm, overlays/ovl_0096B120]
@@ -15149,6 +16940,7 @@
start: 0x96B200
vram: 0x80AAB090
follows_vram: ovl_0096B120
+ compress: True
subsegments:
- [0x96B200, data, overlays/ovl_0096B120_reloc]
@@ -15157,6 +16949,7 @@
start: 0x96B230
vram: 0x80AAB0C0
follows_vram: ovl_0096B120_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x96B230, asm, overlays/ovl_0096B230]
@@ -15166,6 +16959,7 @@
start: 0x96B310
vram: 0x80AAB1A0
follows_vram: ovl_0096B230
+ compress: True
subsegments:
- [0x96B310, data, overlays/ovl_0096B230_reloc]
@@ -15174,6 +16968,7 @@
start: 0x96B340
vram: 0x80AAB1D0
follows_vram: ovl_0096B230_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x96B340, asm, overlays/ovl_0096B340]
@@ -15183,6 +16978,7 @@
start: 0x96B450
vram: 0x80AAB2E0
follows_vram: ovl_0096B340
+ compress: True
subsegments:
- [0x96B450, data, overlays/ovl_0096B340_reloc]
@@ -15191,6 +16987,7 @@
start: 0x96B470
vram: 0x80AAB300
follows_vram: ovl_0096B340_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x96B470, asm, overlays/ovl_0096B470]
@@ -15201,6 +16998,7 @@
start: 0x96C2B0
vram: 0x80AAC140
follows_vram: ovl_0096B470
+ compress: True
subsegments:
- [0x96C2B0, data, overlays/ovl_0096B470_reloc]
@@ -15209,6 +17007,7 @@
start: 0x96C3A0
vram: 0x80AAC230
follows_vram: ovl_0096B470_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x96C3A0, asm, overlays/ovl_0096C3A0]
@@ -15218,6 +17017,7 @@
start: 0x96CC00
vram: 0x80AACA90
follows_vram: ovl_0096C3A0
+ compress: True
subsegments:
- [0x96CC00, data, overlays/ovl_0096C3A0_reloc]
@@ -15226,6 +17026,7 @@
start: 0x96CCF0
vram: 0x80AACB80
follows_vram: ovl_0096C3A0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x96CCF0, asm, overlays/ovl_0096CCF0]
@@ -15235,6 +17036,7 @@
start: 0x96D1F0
vram: 0x80AAD080
follows_vram: ovl_0096CCF0
+ compress: True
subsegments:
- [0x96D1F0, data, overlays/ovl_0096CCF0_reloc]
@@ -15243,6 +17045,7 @@
start: 0x96D250
vram: 0x80AAD0E0
follows_vram: ovl_0096CCF0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x96D250, asm, overlays/ovl_0096D250]
@@ -15253,6 +17056,7 @@
start: 0x96E7D0
vram: 0x80AAE660
follows_vram: ovl_0096D250
+ compress: True
subsegments:
- [0x96E7D0, data, overlays/ovl_0096D250_reloc]
@@ -15261,6 +17065,7 @@
start: 0x96E8E0
vram: 0x80AAE770
follows_vram: ovl_0096D250_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x96E8E0, asm, overlays/ovl_0096E8E0]
@@ -15270,6 +17075,7 @@
start: 0x96E9C0
vram: 0x80AAE850
follows_vram: ovl_0096E8E0
+ compress: True
subsegments:
- [0x96E9C0, data, overlays/ovl_0096E8E0_reloc]
@@ -15278,6 +17084,7 @@
start: 0x96E9F0
vram: 0x80AAE880
follows_vram: ovl_0096E8E0_reloc
+ compress: True
bss_size: 0x10
subsegments:
- [0x96E9F0, asm, overlays/ovl_0096E9F0]
@@ -15288,6 +17095,7 @@
start: 0x96EB00
vram: 0x80AAE9A0
follows_vram: ovl_0096E9F0
+ compress: True
subsegments:
- [0x96EB00, data, overlays/ovl_0096E9F0_reloc]
@@ -15296,6 +17104,7 @@
start: 0x96EB20
vram: 0x80AAE9C0
follows_vram: ovl_0096E9F0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x96EB20, asm, overlays/ovl_0096EB20]
@@ -15305,6 +17114,7 @@
start: 0x96F290
vram: 0x80AAF130
follows_vram: ovl_0096EB20
+ compress: True
subsegments:
- [0x96F290, data, overlays/ovl_0096EB20_reloc]
@@ -15313,6 +17123,7 @@
start: 0x96F360
vram: 0x80AAF200
follows_vram: ovl_0096EB20_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x96F360, data, overlays/ovl_0096F360]
@@ -15321,6 +17132,7 @@
start: 0x96F3B0
vram: 0x80AAF250
follows_vram: ovl_0096F360
+ compress: True
subsegments:
- [0x96F3B0, data, overlays/ovl_0096F360_reloc]
@@ -15329,6 +17141,7 @@
start: 0x96F3D0
vram: 0x80AAF270
follows_vram: ovl_0096F360_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x96F3D0, data, overlays/ovl_0096F3D0]
@@ -15337,6 +17150,7 @@
start: 0x96F420
vram: 0x80AAF2C0
follows_vram: ovl_0096F3D0
+ compress: True
subsegments:
- [0x96F420, data, overlays/ovl_0096F3D0_reloc]
@@ -15345,6 +17159,7 @@
start: 0x96F440
vram: 0x80AAF2E0
follows_vram: ovl_0096F3D0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x96F440, data, overlays/ovl_0096F440]
@@ -15353,6 +17168,7 @@
start: 0x96F490
vram: 0x80AAF330
follows_vram: ovl_0096F440
+ compress: True
subsegments:
- [0x96F490, data, overlays/ovl_0096F440_reloc]
@@ -15361,6 +17177,7 @@
start: 0x96F4B0
vram: 0x80AAF350
follows_vram: ovl_0096F440_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x96F4B0, data, overlays/ovl_0096F4B0]
@@ -15369,6 +17186,7 @@
start: 0x96F500
vram: 0x80AAF3A0
follows_vram: ovl_0096F4B0
+ compress: True
subsegments:
- [0x96F500, data, overlays/ovl_0096F4B0_reloc]
@@ -15377,6 +17195,7 @@
start: 0x96F520
vram: 0x80AAF3C0
follows_vram: ovl_0096F4B0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x96F520, data, overlays/ovl_0096F520]
@@ -15385,6 +17204,7 @@
start: 0x96F570
vram: 0x80AAF410
follows_vram: ovl_0096F520
+ compress: True
subsegments:
- [0x96F570, data, overlays/ovl_0096F520_reloc]
@@ -15393,6 +17213,7 @@
start: 0x96F590
vram: 0x80AAF430
follows_vram: ovl_0096F520_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x96F590, data, overlays/ovl_0096F590]
@@ -15401,6 +17222,7 @@
start: 0x96F5E0
vram: 0x80AAF480
follows_vram: ovl_0096F590
+ compress: True
subsegments:
- [0x96F5E0, data, overlays/ovl_0096F590_reloc]
@@ -15409,6 +17231,7 @@
start: 0x96F600
vram: 0x80AAF4A0
follows_vram: ovl_0096F590_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x96F600, asm, overlays/ovl_0096F600]
@@ -15418,6 +17241,7 @@
start: 0x96FAA0
vram: 0x80AAF940
follows_vram: ovl_0096F600
+ compress: True
subsegments:
- [0x96FAA0, data, overlays/ovl_0096F600_reloc]
@@ -15426,6 +17250,7 @@
start: 0x96FAE0
vram: 0x80AAF980
follows_vram: ovl_0096F600_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x96FAE0, asm, overlays/ovl_0096FAE0]
@@ -15435,6 +17260,7 @@
start: 0x96FE40
vram: 0x80AAFCE0
follows_vram: ovl_0096FAE0
+ compress: True
subsegments:
- [0x96FE40, data, overlays/ovl_0096FAE0_reloc]
@@ -15443,6 +17269,7 @@
start: 0x96FE70
vram: 0x80AAFD10
follows_vram: ovl_0096FAE0_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x96FE70, asm, overlays/ovl_0096FE70]
@@ -15452,6 +17279,7 @@
start: 0x9701D0
vram: 0x80AB0070
follows_vram: ovl_0096FE70
+ compress: True
subsegments:
- [0x9701D0, data, overlays/ovl_0096FE70_reloc]
@@ -15460,6 +17288,7 @@
start: 0x970200
vram: 0x80AB00A0
follows_vram: ovl_0096FE70_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x970200, asm, overlays/ovl_00970200]
@@ -15470,6 +17299,7 @@
start: 0x970820
vram: 0x80AB06C0
follows_vram: ovl_00970200
+ compress: True
subsegments:
- [0x970820, data, overlays/ovl_00970200_reloc]
@@ -15478,6 +17308,7 @@
start: 0x970880
vram: 0x80AB0720
follows_vram: ovl_00970200_reloc
+ compress: True
bss_size: 0x0
subsegments:
- [0x970880, asm, overlays/ovl_00970880]
@@ -15487,6 +17318,7 @@
start: 0x9708F0
vram: 0x80AB0790
follows_vram: ovl_00970880
+ compress: True
subsegments:
- [0x9708F0, data, overlays/ovl_00970880_reloc]
@@ -15495,6 +17327,7 @@
start: 0x970920
vram: 0x80AB07C0
follows_vram: ovl_00970880_reloc
+ compress: True
bss_size: 0x420
subsegments:
- [0x970920, asm, overlays/ovl_00970920]
@@ -15505,5 +17338,6 @@
start: 0x9754A0
vram: 0x80AB5760
follows_vram: ovl_00970920
+ compress: True
subsegments:
- [0x9754A0, data, overlays/ovl_00970920_reloc]