diff --git a/Android.mk b/Android.mk
new file mode 100644
index 0000000..e86c6ab
--- /dev/null
+++ b/Android.mk
@@ -0,0 +1,32 @@
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES = \
+	Tremor/bitwise.c \
+	Tremor/codebook.c \
+	Tremor/dsp.c \
+	Tremor/floor0.c \
+	Tremor/floor1.c \
+	Tremor/floor_lookup.c \
+	Tremor/framing.c \
+	Tremor/info.c \
+	Tremor/mapping0.c \
+	Tremor/mdct.c \
+	Tremor/misc.c \
+	Tremor/res012.c \
+	Tremor/vorbisfile.c
+
+LOCAL_CFLAGS+= -O2
+
+ifneq ($(TARGET_SIMULATOR),true)
+LOCAL_CFLAGS+= -D_ARM_ASSEM_
+endif
+	
+LOCAL_C_INCLUDES:= \
+	$(LOCAL_PATH)/Tremor
+
+LOCAL_ARM_MODE := arm
+
+LOCAL_MODULE := libvorbisidec
+
+include $(BUILD_SHARED_LIBRARY)
diff --git a/MODULE_LICENSE_BSD_LIKE b/MODULE_LICENSE_BSD_LIKE
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/MODULE_LICENSE_BSD_LIKE
diff --git a/NOTICE b/NOTICE
new file mode 100644
index 0000000..6111c6c
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,28 @@
+Copyright (c) 2002, Xiph.org Foundation
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+- Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+
+- Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+
+- Neither the name of the Xiph.org Foundation nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION
+OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/README b/README
new file mode 100644
index 0000000..81ff10a
--- /dev/null
+++ b/README
@@ -0,0 +1,7 @@
+This version of Tremor is derived from xiph.org's lowmem branch.  It has been
+patched against publicly known vulnerabilities with sample files available
+here:
+
+ http://static.dataspill.org/releases/ogg/examples/
+
+When syncing with svn, please ensure that these defects are not reintroduced.
diff --git a/Tremor/CHANGELOG b/Tremor/CHANGELOG
new file mode 100644
index 0000000..53f2335
--- /dev/null
+++ b/Tremor/CHANGELOG
@@ -0,0 +1,19 @@
+*** 20020517: 1.0.2 ***
+
+  Playback bugfix to floor1; mode mistakenly used for sizing instead
+  of blockflag
+
+*** 20020515: 1.0.1 ***
+
+  Added complete API documentation to source tarball.  No code
+  changes.
+
+*** 20020412: 1.0.1 ***
+
+  Fixed a clipping bug that affected ARM processors; negative
+  overflows were being properly clipped, but then clobbered to
+  positive by the positive overflow chec (asm_arm.h:CLIP_TO_15)
+
+*** 20020403: 1.0.0 ***
+
+  Initial version
\ No newline at end of file
diff --git a/Tremor/COPYING b/Tremor/COPYING
new file mode 100644
index 0000000..6111c6c
--- /dev/null
+++ b/Tremor/COPYING
@@ -0,0 +1,28 @@
+Copyright (c) 2002, Xiph.org Foundation
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+- Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+
+- Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+
+- Neither the name of the Xiph.org Foundation nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION
+OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/Tremor/Makefile.am b/Tremor/Makefile.am
new file mode 100644
index 0000000..81fbdc4
--- /dev/null
+++ b/Tremor/Makefile.am
@@ -0,0 +1,37 @@
+AUTOMAKE_OPTIONS = foreign
+
+INCLUDES = -I./
+
+lib_LTLIBRARIES = libvorbisidec.la
+
+libvorbisidec_la_SOURCES = mdct.c dsp.c info.c misc.c \
+                        floor1.c floor0.c vorbisfile.c \
+                        res012.c mapping0.c codebook.c \
+			framing.c bitwise.c \
+                        codebook.h misc.h mdct_lookup.h\
+                        os.h mdct.h ivorbisfile.h lsp_lookup.h\
+                        window_lookup.h floor_lookup.c \
+                        codec_internal.h ogg.h \
+			asm_arm.h ivorbiscodec.h
+libvorbisidec_la_LDFLAGS = -version-info @V_LIB_CURRENT@:@V_LIB_REVISION@:@V_LIB_AGE@
+
+EXTRA_PROGRAMS = ivorbisfile_example
+CLEANFILES = $(EXTRA_PROGRAMS) $(lib_LTLIBRARIES)
+
+ivorbisfile_example_SOURCES = ivorbisfile_example.c
+ivorbisfile_example_LDFLAGS = -static 
+ivorbisfile_example_LDADD = libvorbisidec.la
+
+includedir = $(prefix)/include/tremor
+
+include_HEADERS = ivorbiscodec.h ivorbisfile.h ogg.h os_types.h config_types.h
+
+example:
+	-ln -fs . vorbis
+	$(MAKE) ivorbisfile_example
+
+debug:
+	$(MAKE) all CFLAGS="@DEBUG@"
+
+profile:
+	$(MAKE) all CFLAGS="@PROFILE@"
diff --git a/Tremor/README b/Tremor/README
new file mode 100644
index 0000000..1321175
--- /dev/null
+++ b/Tremor/README
@@ -0,0 +1,46 @@
+This README covers the Ogg Vorbis 'Tremor' integer playback codec
+source as of date 2002 09 02, version 1.0.0.
+
+                            ******
+
+The C source in this package will build on any ANSI C compiler and
+function completely and properly on any platform.  The included build
+system assumes GNU build system and make tools (m4, automake,
+autoconf, libtool and gmake).  GCC is not required, although GCC is
+the most tested compiler.  To build using GNU tools, type in the
+source directory:
+
+./autogen.sh
+make
+
+Currently, the source implements playback in pure C on all platforms
+except ARM, where a [currently] small amount of assembly (see
+asm_arm.h) is used to implement 64 bit math operations and fast LSP
+computation.  If building on ARM without the benefit of GNU build
+system tools, be sure that '_ARM_ASSEM_' is #defined by the build
+system if this assembly is desired, else the resulting library will
+use whatever 64 bit math builtins the compiler implements.
+
+No math library is required by this source.  No floating point
+operations are used at any point in either setup or decode.  This
+decoder library will properly decode any past, current or future
+Vorbis I file or stream.
+
+                           ********
+
+The build system produces a static and [when supported by the OS]
+dynamic library named 'libvorbisidec'.  This library exposes an API
+nearly identical to the BSD reference library's 'libvorbisfile',
+including all the features familiar to users of vorbisfile.  This API
+is similar enough that the proper header file to include is named
+'ivorbisfile.h' [included in the source build directory].  Lower level
+libvorbis-style headers and structures are in 'ivorbiscodec.h'
+[included in the source build directory]. A simple example program,
+ivorbisfile_example.c, can be built with 'make example'.
+
+                           ********
+
+Detailed Tremor API Documentation begins at doc/index.html
+
+Monty
+xiph.org
diff --git a/Tremor/TODO b/Tremor/TODO
new file mode 100644
index 0000000..0e542a3
--- /dev/null
+++ b/Tremor/TODO
@@ -0,0 +1,2 @@
+Add explicit 64 bit integer support rather than relying on compiler
+Roll in optional use of bounded heap memory manager
diff --git a/Tremor/Version_script.in b/Tremor/Version_script.in
new file mode 100644
index 0000000..2eb1d87
--- /dev/null
+++ b/Tremor/Version_script.in
@@ -0,0 +1,49 @@
+#
+# Export file for libvorbisidec
+#
+# Only the symbols listed in the global section will be callable from
+# applications linking to libvorbisidec.
+#
+
+@PACKAGE@.so.1
+{
+	global:
+		ov_clear;
+		ov_open;
+		ov_open_callbacks;
+		ov_test;
+		ov_test_callbacks;
+		ov_test_open;
+		ov_bitrate;
+		ov_bitrate_instant;
+		ov_streams;
+		ov_seekable;
+		ov_serialnumber;
+		ov_raw_total;
+		ov_pcm_total;
+		ov_time_total;
+		ov_raw_seek;
+		ov_pcm_seek;
+		ov_pcm_seek_page;
+		ov_time_seek;
+		ov_time_seek_page;
+		ov_raw_tell;
+		ov_pcm_tell;
+		ov_time_tell;
+		ov_info;
+		ov_comment;
+		ov_read;
+
+		vorbis_info_init;
+		vorbis_info_clear;
+		vorbis_info_blocksize;
+		vorbis_comment_init;
+		vorbis_comment_add;
+		vorbis_comment_add_tag;
+		vorbis_comment_query;
+		vorbis_comment_query_count;
+		vorbis_comment_clear;
+
+	local:
+		*;
+};
diff --git a/Tremor/asm_arm.h b/Tremor/asm_arm.h
new file mode 100644
index 0000000..3a3716d
--- /dev/null
+++ b/Tremor/asm_arm.h
@@ -0,0 +1,243 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE.   *
+ *                                                                  *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002    *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************
+
+ function: arm7 and later wide math functions
+
+ ********************************************************************/
+
+#ifdef _ARM_ASSEM_
+
+#if !defined(_V_WIDE_MATH) && !defined(_LOW_ACCURACY_)
+#define _V_WIDE_MATH
+
+static inline ogg_int32_t MULT32(ogg_int32_t x, ogg_int32_t y) {
+  int lo,hi;
+  asm volatile("smull\t%0, %1, %2, %3"
+               : "=&r"(lo),"=&r"(hi)
+               : "%r"(x),"r"(y)
+	       : "cc");
+  return(hi);
+}
+
+static inline ogg_int32_t MULT31(ogg_int32_t x, ogg_int32_t y) {
+  return MULT32(x,y)<<1;
+}
+
+static inline ogg_int32_t MULT31_SHIFT15(ogg_int32_t x, ogg_int32_t y) {
+  int lo,hi;
+  asm volatile("smull	%0, %1, %2, %3\n\t"
+	       "movs	%0, %0, lsr #15\n\t"
+	       "adc	%1, %0, %1, lsl #17\n\t"
+               : "=&r"(lo),"=&r"(hi)
+               : "%r"(x),"r"(y)
+	       : "cc");
+  return(hi);
+}
+
+#define MB() asm volatile ("" : : : "memory")
+
+static inline void XPROD32(ogg_int32_t  a, ogg_int32_t  b,
+			   ogg_int32_t  t, ogg_int32_t  v,
+			   ogg_int32_t *x, ogg_int32_t *y)
+{
+  int x1, y1, l;
+  asm(	"smull	%0, %1, %4, %6\n\t"
+	"smlal	%0, %1, %5, %7\n\t"
+	"rsb	%3, %4, #0\n\t"
+	"smull	%0, %2, %5, %6\n\t"
+	"smlal	%0, %2, %3, %7"
+	: "=&r" (l), "=&r" (x1), "=&r" (y1), "=r" (a)
+	: "3" (a), "r" (b), "r" (t), "r" (v)
+	: "cc" );
+  *x = x1;
+  MB();
+  *y = y1;
+}
+
+static inline void XPROD31(ogg_int32_t  a, ogg_int32_t  b,
+			   ogg_int32_t  t, ogg_int32_t  v,
+			   ogg_int32_t *x, ogg_int32_t *y)
+{
+  int x1, y1, l;
+  asm(	"smull	%0, %1, %4, %6\n\t"
+	"smlal	%0, %1, %5, %7\n\t"
+	"rsb	%3, %4, #0\n\t"
+	"smull	%0, %2, %5, %6\n\t"
+	"smlal	%0, %2, %3, %7"
+	: "=&r" (l), "=&r" (x1), "=&r" (y1), "=r" (a)
+	: "3" (a), "r" (b), "r" (t), "r" (v)
+	: "cc" );
+  *x = x1 << 1;
+  MB();
+  *y = y1 << 1;
+}
+
+static inline void XNPROD31(ogg_int32_t  a, ogg_int32_t  b,
+			    ogg_int32_t  t, ogg_int32_t  v,
+			    ogg_int32_t *x, ogg_int32_t *y)
+{
+  int x1, y1, l;
+  asm(	"rsb	%2, %4, #0\n\t"
+	"smull	%0, %1, %3, %5\n\t"
+	"smlal	%0, %1, %2, %6\n\t"
+	"smull	%0, %2, %4, %5\n\t"
+	"smlal	%0, %2, %3, %6"
+	: "=&r" (l), "=&r" (x1), "=&r" (y1)
+	: "r" (a), "r" (b), "r" (t), "r" (v)
+	: "cc" );
+  *x = x1 << 1;
+  MB();
+  *y = y1 << 1;
+}
+
+#endif
+
+#ifndef _V_CLIP_MATH
+#define _V_CLIP_MATH
+
+static inline ogg_int32_t CLIP_TO_15(ogg_int32_t x) {
+  int tmp;
+  asm volatile("subs	%1, %0, #32768\n\t"
+	       "movpl	%0, #0x7f00\n\t"
+	       "orrpl	%0, %0, #0xff\n"
+	       "adds	%1, %0, #32768\n\t"
+	       "movmi	%0, #0x8000"
+	       : "+r"(x),"=r"(tmp)
+	       :
+	       : "cc");
+  return(x);
+}
+
+#endif
+
+#ifndef _V_LSP_MATH_ASM
+#define _V_LSP_MATH_ASM
+
+static inline void lsp_loop_asm(ogg_uint32_t *qip,ogg_uint32_t *pip,
+				ogg_int32_t *qexpp,
+				ogg_int32_t *ilsp,ogg_int32_t wi,
+				ogg_int32_t m){
+  
+  ogg_uint32_t qi=*qip,pi=*pip;
+  ogg_int32_t qexp=*qexpp;
+
+  asm("mov     r0,%3;"
+      "mov     r1,%5,asr#1;"
+      "add     r0,r0,r1,lsl#3;"
+      "1:"
+      
+      "ldmdb   r0!,{r1,r3};"
+      "subs    r1,r1,%4;"          //ilsp[j]-wi
+      "rsbmi   r1,r1,#0;"          //labs(ilsp[j]-wi)
+      "umull   %0,r2,r1,%0;"       //qi*=labs(ilsp[j]-wi)
+      
+      "subs    r1,r3,%4;"          //ilsp[j+1]-wi
+      "rsbmi   r1,r1,#0;"          //labs(ilsp[j+1]-wi)
+      "umull   %1,r3,r1,%1;"       //pi*=labs(ilsp[j+1]-wi)
+      
+      "cmn     r2,r3;"             // shift down 16?
+      "beq     0f;"
+      "add     %2,%2,#16;"
+      "mov     %0,%0,lsr #16;"
+      "orr     %0,%0,r2,lsl #16;"
+      "mov     %1,%1,lsr #16;"
+      "orr     %1,%1,r3,lsl #16;"
+      "0:"
+      "cmp     r0,%3;\n"
+      "bhi     1b;\n"
+      
+      // odd filter assymetry
+      "ands    r0,%5,#1;\n"
+      "beq     2f;\n"
+      "add     r0,%3,%5,lsl#2;\n"
+      
+      "ldr     r1,[r0,#-4];\n"
+      "mov     r0,#0x4000;\n"
+      
+      "subs    r1,r1,%4;\n"          //ilsp[j]-wi
+      "rsbmi   r1,r1,#0;\n"          //labs(ilsp[j]-wi)
+      "umull   %0,r2,r1,%0;\n"       //qi*=labs(ilsp[j]-wi)
+      "umull   %1,r3,r0,%1;\n"       //pi*=labs(ilsp[j+1]-wi)
+      
+      "cmn     r2,r3;\n"             // shift down 16?
+      "beq     2f;\n"
+      "add     %2,%2,#16;\n"
+      "mov     %0,%0,lsr #16;\n"
+      "orr     %0,%0,r2,lsl #16;\n"
+      "mov     %1,%1,lsr #16;\n"
+      "orr     %1,%1,r3,lsl #16;\n"
+      
+      //qi=(pi>>shift)*labs(ilsp[j]-wi);
+      //pi=(qi>>shift)*labs(ilsp[j+1]-wi);
+      //qexp+=shift;
+      
+      //}
+	 
+      /* normalize to max 16 sig figs */
+      "2:"
+      "mov     r2,#0;"
+      "orr     r1,%0,%1;"
+      "tst     r1,#0xff000000;"
+      "addne   r2,r2,#8;"
+      "movne   r1,r1,lsr #8;"
+      "tst     r1,#0x00f00000;"
+      "addne   r2,r2,#4;"
+      "movne   r1,r1,lsr #4;"
+      "tst     r1,#0x000c0000;"
+      "addne   r2,r2,#2;"
+      "movne   r1,r1,lsr #2;"
+      "tst     r1,#0x00020000;"
+      "addne   r2,r2,#1;"
+      "movne   r1,r1,lsr #1;"
+      "tst     r1,#0x00010000;"
+      "addne   r2,r2,#1;"
+      "mov     %0,%0,lsr r2;"
+      "mov     %1,%1,lsr r2;"
+      "add     %2,%2,r2;"
+      
+      : "+r"(qi),"+r"(pi),"+r"(qexp)
+      : "r"(ilsp),"r"(wi),"r"(m)
+      : "r0","r1","r2","r3","cc");
+  
+  *qip=qi;
+  *pip=pi;
+  *qexpp=qexp;
+}
+
+static inline void lsp_norm_asm(ogg_uint32_t *qip,ogg_int32_t *qexpp){
+
+  ogg_uint32_t qi=*qip;
+  ogg_int32_t qexp=*qexpp;
+
+  asm("tst     %0,#0x0000ff00;"
+      "moveq   %0,%0,lsl #8;"
+      "subeq   %1,%1,#8;"
+      "tst     %0,#0x0000f000;"
+      "moveq   %0,%0,lsl #4;"
+      "subeq   %1,%1,#4;"
+      "tst     %0,#0x0000c000;"
+      "moveq   %0,%0,lsl #2;"
+      "subeq   %1,%1,#2;"
+      "tst     %0,#0x00008000;"
+      "moveq   %0,%0,lsl #1;"
+      "subeq   %1,%1,#1;"
+      : "+r"(qi),"+r"(qexp)
+      :
+      : "cc");
+  *qip=qi;
+  *qexpp=qexp;
+}
+
+#endif
+#endif
+
diff --git a/Tremor/autogen.sh b/Tremor/autogen.sh
new file mode 100755
index 0000000..e2e6f6b
--- /dev/null
+++ b/Tremor/autogen.sh
@@ -0,0 +1,61 @@
+#!/bin/sh
+# Run this to set up the build system: configure, makefiles, etc.
+# (based on the version in enlightenment's cvs)
+
+package="vorbisidec"
+
+srcdir=`dirname $0`
+test -z "$srcdir" && srcdir=.
+
+cd "$srcdir"
+DIE=0
+
+(autoconf --version) < /dev/null > /dev/null 2>&1 || {
+        echo
+        echo "You must have autoconf installed to compile $package."
+        echo "Download the appropriate package for your distribution,"
+        echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/"
+        DIE=1
+}
+
+(automake --version) < /dev/null > /dev/null 2>&1 || {
+        echo
+        echo "You must have automake installed to compile $package."
+	echo "Download the appropriate package for your system,"
+	echo "or get the source from one of the GNU ftp sites"
+	echo "listed in http://www.gnu.org/order/ftp.html"
+        DIE=1
+}
+
+(libtool --version) < /dev/null > /dev/null 2>&1 || {
+	echo
+	echo "You must have libtool installed to compile $package."
+	echo "Download the appropriate package for your system,"
+	echo "or get the source from one of the GNU ftp sites"
+	echo "listed in http://www.gnu.org/order/ftp.html"
+	DIE=1
+}
+
+if test "$DIE" -eq 1; then
+        exit 1
+fi
+
+if test -z "$*"; then
+        echo "I am going to run ./configure with no arguments - if you wish "
+        echo "to pass any to it, please specify them on the $0 command line."
+fi
+
+echo "Generating configuration files for $package, please wait...."
+
+echo "  aclocal $ACLOCAL_FLAGS"
+aclocal $ACLOCAL_FLAGS || exit 1
+echo "  autoheader"
+autoheader || exit 1
+echo "  libtoolize --automake"
+libtoolize --automake || exit 1
+echo "  automake --add-missing $AUTOMAKE_FLAGS"
+automake --add-missing $AUTOMAKE_FLAGS  || exit 1
+echo "  autoconf"
+autoconf || exit 1
+
+$srcdir/configure "$@" && echo
diff --git a/Tremor/bitwise.c b/Tremor/bitwise.c
new file mode 100644
index 0000000..ee792de
--- /dev/null
+++ b/Tremor/bitwise.c
@@ -0,0 +1,681 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE.   *
+ *                                                                  *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2003    *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************
+
+  function: packing variable sized words into an octet stream
+
+ ********************************************************************/
+
+/* We're 'LSb' endian; if we write a word but read individual bits,
+   then we'll read the lsb first */
+
+#include <string.h>
+#include <stdlib.h>
+#include "misc.h"
+#include "ogg.h"
+
+static unsigned long mask[]=
+{0x00000000,0x00000001,0x00000003,0x00000007,0x0000000f,
+ 0x0000001f,0x0000003f,0x0000007f,0x000000ff,0x000001ff,
+ 0x000003ff,0x000007ff,0x00000fff,0x00001fff,0x00003fff,
+ 0x00007fff,0x0000ffff,0x0001ffff,0x0003ffff,0x0007ffff,
+ 0x000fffff,0x001fffff,0x003fffff,0x007fffff,0x00ffffff,
+ 0x01ffffff,0x03ffffff,0x07ffffff,0x0fffffff,0x1fffffff,
+ 0x3fffffff,0x7fffffff,0xffffffff };
+
+/* spans forward, skipping as many bytes as headend is negative; if
+   headend is zero, simply finds next byte.  If we're up to the end
+   of the buffer, leaves headend at zero.  If we've read past the end,
+   halt the decode process. */
+
+static void _span(oggpack_buffer *b){
+  while(b->headend-(b->headbit>>3)<1){
+    b->headend-=b->headbit>>3;
+    b->headbit&=0x7;
+
+    if(b->head && b->head->next){
+      b->count+=b->head->length;
+      b->head=b->head->next;
+
+      if(b->headend+b->head->length>0)
+	b->headptr=b->head->buffer->data+b->head->begin-b->headend;
+
+      b->headend+=b->head->length; 
+    }else{
+      /* we've either met the end of decode, or gone past it. halt
+	 only if we're past */
+      if(b->headend*8<b->headbit)
+	/* read has fallen off the end */
+	b->headend=-1;
+        break;
+    }
+  }
+}
+
+void oggpack_readinit(oggpack_buffer *b,ogg_reference *r){
+  memset(b,0,sizeof(*b));
+
+  b->tail=b->head=r;
+  b->count=0;
+  if (b->head) {
+    b->headptr=b->head->buffer->data+b->head->begin;
+    b->headend=b->head->length;
+  } else {
+    b->headptr=0;
+    b->headend=0;
+  }
+  _span(b);
+}
+
+#define _lookspan()   while(!end){\
+                        head=head->next;\
+                        if(!head) return -1;\
+                        ptr=head->buffer->data + head->begin;\
+                        end=head->length;\
+                      }
+
+/* Read in bits without advancing the bitptr; bits <= 32 */
+long oggpack_look(oggpack_buffer *b,int bits){
+  unsigned long m=mask[bits];
+  unsigned long ret;
+
+  bits+=b->headbit;
+
+  if(bits >= b->headend<<3){
+    int            end=b->headend;
+    unsigned char *ptr=b->headptr;
+    ogg_reference *head=b->head;
+
+    if(end<0)return -1;
+    if (!head || !end)return -1;
+    
+    if(bits){
+      _lookspan();
+      ret=*ptr++>>b->headbit;
+      if(bits>8){
+        --end;
+        _lookspan();
+        ret|=*ptr++<<(8-b->headbit);  
+        if(bits>16){
+          --end;
+          _lookspan();
+          ret|=*ptr++<<(16-b->headbit);  
+          if(bits>24){
+            --end;
+            _lookspan();
+            ret|=*ptr++<<(24-b->headbit);  
+            if(bits>32 && b->headbit){
+              --end;
+              _lookspan();
+              ret|=*ptr<<(32-b->headbit);
+            }
+          }
+        }
+      }
+    }
+
+  }else{
+
+    /* make this a switch jump-table */
+    ret=b->headptr[0]>>b->headbit;
+    if(bits>8){
+      ret|=b->headptr[1]<<(8-b->headbit);  
+      if(bits>16){
+        ret|=b->headptr[2]<<(16-b->headbit);  
+        if(bits>24){
+          ret|=b->headptr[3]<<(24-b->headbit);  
+          if(bits>32 && b->headbit)
+            ret|=b->headptr[4]<<(32-b->headbit);
+        }
+      }
+    }
+  }
+
+  ret&=m;
+  return ret;
+}
+
+/* limited to 32 at a time */
+void oggpack_adv(oggpack_buffer *b,int bits){
+  bits+=b->headbit;
+  b->headbit=bits&7;
+  b->headend-=(bits>>3);
+  b->headptr+=(bits>>3);
+  if(b->headend<1)_span(b);
+}
+
+int oggpack_eop(oggpack_buffer *b){
+  if(b->headend<0)return -1;
+  return 0;
+}
+
+/* bits <= 32 */
+long oggpack_read(oggpack_buffer *b,int bits){
+  long ret=oggpack_look(b,bits);
+  oggpack_adv(b,bits);
+  return(ret);
+}
+
+long oggpack_bytes(oggpack_buffer *b){
+  if(b->headend<0)return b->count+b->head->length;
+  return b->count + b->head->length-b->headend + 
+    (b->headbit+7)/8;
+}
+
+long oggpack_bits(oggpack_buffer *b){
+  if(b->headend<0)return (b->count+b->head->length)*8;
+  return (b->count + b->head->length-b->headend)*8 + 
+    b->headbit;
+}
+
+/* Self test of the bitwise routines; everything else is based on
+   them, so they damned well better be solid. */
+
+#ifdef _V_BIT_TEST
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include "framing.c"
+
+static int ilog(unsigned long v){
+  int ret=0;
+  while(v){
+    ret++;
+    v>>=1;
+  }
+  return(ret);
+}
+      
+oggpack_buffer r;
+oggpack_buffer o;
+ogg_buffer_state *bs;
+ogg_reference *or;
+#define TESTWORDS 256
+
+void report(char *in){
+  fprintf(stderr,"%s",in);
+  exit(1);
+}
+
+int getbyte(ogg_reference *or,int position){
+  while(or && position>=or->length){
+    position-=or->length;
+    or=or->next;
+    if(or==NULL){
+      fprintf(stderr,"\n\tERROR: getbyte ran off end of buffer.\n");
+      exit(1);
+    }
+  }
+
+  if((position+or->begin)&1)
+    return (or->buffer->data[(position+or->begin)>>1])&0xff;
+  else
+    return (or->buffer->data[(position+or->begin)>>1]>>8)&0xff;
+}
+
+void cliptest(unsigned long *b,int vals,int bits,int *comp,int compsize){
+  long i,bitcount=0;
+  ogg_reference *or=ogg_buffer_alloc(bs,64);
+  for(i=0;i<compsize;i++)
+    or->buffer->data[i]= comp[i];
+  or->length=i;
+
+  oggpack_readinit(&r,or);
+  for(i=0;i<vals;i++){
+    unsigned long test;
+    int tbit=bits?bits:ilog(b[i]);
+    if((test=oggpack_look(&r,tbit))==0xffffffff)
+      report("out of data!\n");
+    if(test!=(b[i]&mask[tbit])){
+      fprintf(stderr,"%ld) %lx %lx\n",i,(b[i]&mask[tbit]),test);
+      report("looked at incorrect value!\n");
+    }
+    if((test=oggpack_read(&r,tbit))==0xffffffff){
+      report("premature end of data when reading!\n");
+    }
+    if(test!=(b[i]&mask[tbit])){
+      fprintf(stderr,"%ld) %lx %lx\n",i,(b[i]&mask[tbit]),test);
+      report("read incorrect value!\n");
+    }
+    bitcount+=tbit;
+
+    if(bitcount!=oggpack_bits(&r))
+      report("wrong number of bits while reading!\n");
+    if((bitcount+7)/8!=oggpack_bytes(&r))
+      report("wrong number of bytes while reading!\n");
+
+  }
+  if(oggpack_bytes(&r)!=(bitcount+7)/8)report("leftover bytes after read!\n");
+  ogg_buffer_release(or);
+}
+
+void _end_verify(int count){
+  int i;
+
+  /* are the proper number of bits left over? */
+  int leftover=count*8-oggpack_bits(&o);
+  if(leftover>7)
+    report("\nERROR: too many bits reported left over.\n");
+  
+  /* does reading to exactly byte alignment *not* trip EOF? */
+  if(oggpack_read(&o,leftover)==-1)
+    report("\nERROR: read to but not past exact end tripped EOF.\n");
+  if(oggpack_bits(&o)!=count*8)
+    report("\nERROR: read to but not past exact end reported bad bitcount.\n");
+
+  /* does EOF trip properly after a single additional bit? */
+  if(oggpack_read(&o,1)!=-1)
+    report("\nERROR: read past exact end did not trip EOF.\n");
+  if(oggpack_bits(&o)!=count*8)
+    report("\nERROR: read past exact end reported bad bitcount.\n");
+  
+  /* does EOF stay set over additional bit reads? */
+  for(i=0;i<=32;i++){
+    if(oggpack_read(&o,i)!=-1)
+      report("\nERROR: EOF did not stay set on stream.\n");
+    if(oggpack_bits(&o)!=count*8)
+      report("\nERROR: read past exact end reported bad bitcount.\n");
+  }
+}       
+
+void _end_verify2(int count){
+  int i;
+
+  /* are the proper number of bits left over? */
+  int leftover=count*8-oggpack_bits(&o);
+  if(leftover>7)
+    report("\nERROR: too many bits reported left over.\n");
+  
+  /* does reading to exactly byte alignment *not* trip EOF? */
+  oggpack_adv(&o,leftover);
+  if(o.headend!=0)
+    report("\nERROR: read to but not past exact end tripped EOF.\n");
+  if(oggpack_bits(&o)!=count*8)
+    report("\nERROR: read to but not past exact end reported bad bitcount.\n");
+  
+  /* does EOF trip properly after a single additional bit? */
+  oggpack_adv(&o,1);
+  if(o.headend>=0)
+    report("\nERROR: read past exact end did not trip EOF.\n");
+  if(oggpack_bits(&o)!=count*8)
+    report("\nERROR: read past exact end reported bad bitcount.\n");
+  
+  /* does EOF stay set over additional bit reads? */
+  for(i=0;i<=32;i++){
+    oggpack_adv(&o,i);
+    if(o.headend>=0)
+      report("\nERROR: EOF did not stay set on stream.\n");
+    if(oggpack_bits(&o)!=count*8)
+      report("\nERROR: read past exact end reported bad bitcount.\n");
+  }
+}       
+
+long ogg_buffer_length(ogg_reference *or){
+  int count=0;
+  while(or){
+    count+=or->length;
+    or=or->next;
+  }
+  return count;
+}
+
+ogg_reference *ogg_buffer_extend(ogg_reference *or,long bytes){
+  if(or){
+    while(or->next){
+      or=or->next;
+    }
+    or->next=ogg_buffer_alloc(or->buffer->ptr.owner,bytes);
+    return(or->next);
+  }
+  return 0;
+}
+
+void ogg_buffer_posttruncate(ogg_reference *or,long pos){
+  /* walk to the point where we want to begin truncate */
+  while(or && pos>or->length){
+    pos-=or->length;
+    or=or->next;
+  }
+  if(or){
+    ogg_buffer_release(or->next);
+    or->next=0;
+    or->length=pos;
+  }
+}
+
+int main(void){
+  long i;
+  static unsigned long testbuffer1[]=
+    {18,12,103948,4325,543,76,432,52,3,65,4,56,32,42,34,21,1,23,32,546,456,7,
+       567,56,8,8,55,3,52,342,341,4,265,7,67,86,2199,21,7,1,5,1,4};
+  int test1size=43;
+
+  static unsigned long testbuffer2[]=
+    {216531625L,1237861823,56732452,131,3212421,12325343,34547562,12313212,
+       1233432,534,5,346435231,14436467,7869299,76326614,167548585,
+       85525151,0,12321,1,349528352};
+  int test2size=21;
+
+  static unsigned long testbuffer3[]=
+    {1,0,14,0,1,0,12,0,1,0,0,0,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,1,1,1,1,1,0,0,1,
+       0,1,30,1,1,1,0,0,1,0,0,0,12,0,11,0,1,0,0,1};
+  int test3size=56;
+
+  static unsigned long large[]=
+    {2136531625L,2137861823,56732452,131,3212421,12325343,34547562,12313212,
+       1233432,534,5,2146435231,14436467,7869299,76326614,167548585,
+       85525151,0,12321,1,2146528352};
+
+  int onesize=33;
+  static int one[33]={146,25,44,151,195,15,153,176,233,131,196,65,85,172,47,40,
+                    34,242,223,136,35,222,211,86,171,50,225,135,214,75,172,
+                    223,4};
+
+  int twosize=6;
+  static int two[6]={61,255,255,251,231,29};
+
+  int threesize=54;
+  static int three[54]={169,2,232,252,91,132,156,36,89,13,123,176,144,32,254,
+                      142,224,85,59,121,144,79,124,23,67,90,90,216,79,23,83,
+                      58,135,196,61,55,129,183,54,101,100,170,37,127,126,10,
+                      100,52,4,14,18,86,77,1};
+
+  int foursize=38;
+  static int four[38]={18,6,163,252,97,194,104,131,32,1,7,82,137,42,129,11,72,
+                     132,60,220,112,8,196,109,64,179,86,9,137,195,208,122,169,
+                     28,2,133,0,1};
+
+  int fivesize=45;
+  static int five[45]={169,2,126,139,144,172,30,4,80,72,240,59,130,218,73,62,
+                     241,24,210,44,4,20,0,248,116,49,135,100,110,130,181,169,
+                     84,75,159,2,1,0,132,192,8,0,0,18,22};
+
+  int sixsize=7;
+  static int six[7]={17,177,170,242,169,19,148};
+
+  /* Test read/write together */
+  /* Later we test against pregenerated bitstreams */
+  bs=ogg_buffer_create();
+
+  fprintf(stderr,"\nSmall preclipped packing (LSb): ");
+  cliptest(testbuffer1,test1size,0,one,onesize);
+  fprintf(stderr,"ok.");
+
+  fprintf(stderr,"\nNull bit call (LSb): ");
+  cliptest(testbuffer3,test3size,0,two,twosize);
+  fprintf(stderr,"ok.");
+
+  fprintf(stderr,"\nLarge preclipped packing (LSb): ");
+  cliptest(testbuffer2,test2size,0,three,threesize);
+  fprintf(stderr,"ok.");
+
+  fprintf(stderr,"\n32 bit preclipped packing (LSb): ");
+
+  or=ogg_buffer_alloc(bs,128);
+  for(i=0;i<test2size;i++){
+    or->buffer->data[i*4]  = large[i]&0xff;
+    or->buffer->data[i*4+1]  = (large[i]>>8)&0xff;
+    or->buffer->data[i*4+2]  = (large[i]>>16)&0xff;
+    or->buffer->data[i*4+3]  = (large[i]>>24)&0xff;
+  }
+  or->length=test2size*4;
+  oggpack_readinit(&r,or);
+  for(i=0;i<test2size;i++){
+    unsigned long test;
+    if((test=oggpack_look(&r,32))==0xffffffffUL)report("out of data. failed!");
+    if(test!=large[i]){
+      fprintf(stderr,"%ld != %ld (%lx!=%lx):",test,large[i],
+              test,large[i]);
+      report("read incorrect value!\n");
+    }
+    oggpack_adv(&r,32);
+  }
+  ogg_buffer_release(or);
+  if(oggpack_bytes(&r)!=test2size*4)report("leftover bytes after read!\n");
+  fprintf(stderr,"ok.");
+  
+  fprintf(stderr,"\nSmall unclipped packing (LSb): ");
+  cliptest(testbuffer1,test1size,7,four,foursize);
+  fprintf(stderr,"ok.");
+
+  fprintf(stderr,"\nLarge unclipped packing (LSb): ");
+  cliptest(testbuffer2,test2size,17,five,fivesize);
+  fprintf(stderr,"ok.");
+
+  fprintf(stderr,"\nSingle bit unclipped packing (LSb): ");
+  cliptest(testbuffer3,test3size,1,six,sixsize);
+  fprintf(stderr,"ok.");
+
+  fprintf(stderr,"\nTesting read past end (LSb): ");
+  {
+    unsigned char dda[]={0,0,0,0};
+    ogg_buffer lob={dda,8,0,{0}};
+    ogg_reference lor={&lob,0,8,0};
+
+    oggpack_readinit(&r,&lor);
+    for(i=0;i<64;i++){
+      if(oggpack_read(&r,1)<0){
+        fprintf(stderr,"failed; got -1 prematurely.\n");
+        exit(1);
+      }
+    }
+    if(oggpack_look(&r,1)!=-1 ||
+       oggpack_read(&r,1)!=-1){
+      fprintf(stderr,"failed; read past end without -1.\n");
+      exit(1);
+    }
+  }
+  {
+    unsigned char dda[]={0,0,0,0};
+    ogg_buffer lob={dda,8,0,{0}};
+    ogg_reference lor={&lob,0,8,0};
+    unsigned long test;
+
+    oggpack_readinit(&r,&lor);
+    if((test=oggpack_read(&r,30))==0xffffffffUL || 
+       (test=oggpack_read(&r,16))==0xffffffffUL){
+      fprintf(stderr,"failed 2; got -1 prematurely.\n");
+      exit(1);
+    }
+    
+    if((test=oggpack_look(&r,18))==0xffffffffUL){
+      fprintf(stderr,"failed 3; got -1 prematurely.\n");
+      exit(1);
+    }
+    if((test=oggpack_look(&r,19))!=0xffffffffUL){
+      fprintf(stderr,"failed; read past end without -1.\n");
+      exit(1);
+    }
+    if((test=oggpack_look(&r,32))!=0xffffffffUL){
+      fprintf(stderr,"failed; read past end without -1.\n");
+      exit(1);
+    }
+  }
+  fprintf(stderr,"ok.\n");
+
+  /* now the scary shit: randomized testing */
+
+  for(i=0;i<10000;i++){
+    long j,count=0,count2=0,bitcount=0;
+    unsigned long values[TESTWORDS];
+    int len[TESTWORDS];
+    unsigned char flat[4*TESTWORDS]; /* max possible needed size */
+
+    memset(flat,0,sizeof(flat));
+    fprintf(stderr,"\rRandomized testing (LSb)... (%ld)   ",10000-i);
+
+    /* generate a list of words and lengths */
+    /* write the required number of bits out to packbuffer */
+    {
+      long word=0;
+      long bit=0;
+      int k;
+
+      for(j=0;j<TESTWORDS;j++){
+	values[j]=rand();
+	len[j]=(rand()%33);
+
+	for(k=0;k<len[j];k++){
+	  flat[word] |= ((values[j]>>k)&0x1)<<bit;
+	  bit++;
+	  bitcount++;
+	  if(bit>7){
+	    bit=0;
+	    word++;
+	  }
+	}
+      }
+    }
+    count2=(bitcount+7)>>3;
+
+    /* construct random-length buffer chain from flat vector; random
+       byte starting offset within the length of the vector */
+    {
+      ogg_reference *or=NULL,*orl=NULL;
+      long pos=0;
+      
+      /* build buffer chain */
+      while(count2){
+        int ilen=(rand()%32),k;
+        int ibegin=(rand()%32);
+	
+
+        if(ilen>count2)ilen=count2;
+
+        if(or)
+          orl=ogg_buffer_extend(orl,64);
+        else
+          or=orl=ogg_buffer_alloc(bs,64);
+
+        orl->length=ilen;
+        orl->begin=ibegin;
+
+	for(k=0;k<ilen;k++)
+	  orl->buffer->data[ibegin++]= flat[pos++];
+	
+        count2-=ilen;
+      }
+
+      if(ogg_buffer_length(or)!=(bitcount+7)/8){
+        fprintf(stderr,"\nERROR: buffer length incorrect after build.\n");
+        exit(1);
+      }
+
+
+      {
+        int begin=0; //=(rand()%TESTWORDS);
+        int ilen=(rand()%(TESTWORDS-begin));
+        int bitoffset,bitcount=0;
+        unsigned long temp;
+
+        for(j=0;j<begin;j++)
+          bitcount+=len[j];
+        or=ogg_buffer_pretruncate(or,bitcount/8);
+        bitoffset=bitcount%=8;
+        for(;j<begin+ilen;j++)
+          bitcount+=len[j];
+        ogg_buffer_posttruncate(or,((bitcount+7)/8));
+
+        if((count=ogg_buffer_length(or))!=(bitcount+7)/8){
+          fprintf(stderr,"\nERROR: buffer length incorrect after truncate.\n");
+          exit(1);
+        }
+        
+        oggpack_readinit(&o,or);
+
+        /* verify bit count */
+        if(oggpack_bits(&o)!=0){
+          fprintf(stderr,"\nERROR: Read bitcounter not zero!\n");
+          exit(1);
+        }
+        if(oggpack_bytes(&o)!=0){
+          fprintf(stderr,"\nERROR: Read bytecounter not zero!\n");
+          exit(1);
+        }
+
+        bitcount=bitoffset;
+        oggpack_read(&o,bitoffset);
+
+        /* read and compare to original list */
+        for(j=begin;j<begin+ilen;j++){
+	  temp=oggpack_read(&o,len[j]);
+          if(temp==0xffffffffUL){
+            fprintf(stderr,"\nERROR: End of stream too soon! word: %ld,%d\n",
+                    j-begin,ilen);
+            exit(1);
+          }
+          if(temp!=(values[j]&mask[len[j]])){
+            fprintf(stderr,"\nERROR: Incorrect read %lx != %lx, word %ld, len %d\n"
+,
+                    values[j]&mask[len[j]],temp,j-begin,len[j]);
+            exit(1);
+          }
+          bitcount+=len[j];
+          if(oggpack_bits(&o)!=bitcount){
+            fprintf(stderr,"\nERROR: Read bitcounter %d != %ld!\n",
+                    bitcount,oggpack_bits(&o));
+            exit(1);
+          }
+          if(oggpack_bytes(&o)!=(bitcount+7)/8){
+            fprintf(stderr,"\nERROR: Read bytecounter %d != %ld!\n",
+                    (bitcount+7)/8,oggpack_bytes(&o));
+            exit(1);
+          }
+          
+        }
+        _end_verify(count);
+        
+        /* look/adv version */
+        oggpack_readinit(&o,or);
+        bitcount=bitoffset;
+        oggpack_adv(&o,bitoffset);
+
+        /* read and compare to original list */
+        for(j=begin;j<begin+ilen;j++){
+	  temp=oggpack_look(&o,len[j]);
+
+          if(temp==0xffffffffUL){
+            fprintf(stderr,"\nERROR: End of stream too soon! word: %ld\n",
+                    j-begin);
+            exit(1);
+          }
+          if(temp!=(values[j]&mask[len[j]])){
+            fprintf(stderr,"\nERROR: Incorrect look %lx != %lx, word %ld, len %d\n"
+,
+                    values[j]&mask[len[j]],temp,j-begin,len[j]);
+            exit(1);
+          }
+	  oggpack_adv(&o,len[j]);
+          bitcount+=len[j];
+          if(oggpack_bits(&o)!=bitcount){
+            fprintf(stderr,"\nERROR: Look/Adv bitcounter %d != %ld!\n",
+                    bitcount,oggpack_bits(&o));
+            exit(1);
+          }
+          if(oggpack_bytes(&o)!=(bitcount+7)/8){
+            fprintf(stderr,"\nERROR: Look/Adv bytecounter %d != %ld!\n",
+                    (bitcount+7)/8,oggpack_bytes(&o));
+            exit(1);
+          }
+          
+        }
+        _end_verify2(count);
+
+      }
+      ogg_buffer_release(or);
+    }
+  }
+  fprintf(stderr,"\rRandomized testing (LSb)... ok.   \n");
+
+  return(0);
+}  
+#endif
diff --git a/Tremor/codebook.c b/Tremor/codebook.c
new file mode 100644
index 0000000..35aaeff
--- /dev/null
+++ b/Tremor/codebook.c
@@ -0,0 +1,826 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE.   *
+ *                                                                  *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002    *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************
+
+ function: basic codebook pack/unpack/code/decode operations
+
+ ********************************************************************/
+
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include <limits.h>
+#include "ogg.h"
+#include "ivorbiscodec.h"
+#include "codebook.h"
+#include "misc.h"
+#include "os.h"
+
+
+/**** pack/unpack helpers ******************************************/
+int _ilog(unsigned int v){
+  int ret=0;
+  while(v){
+    ret++;
+    v>>=1;
+  }
+  return(ret);
+}
+
+static ogg_uint32_t decpack(long entry,long used_entry,long quantvals,
+			    codebook *b,oggpack_buffer *opb,int maptype){
+  ogg_uint32_t ret=0;
+  int j;
+  
+  switch(b->dec_type){
+
+  case 0:
+    return (ogg_uint32_t)entry;
+
+  case 1:
+    if(maptype==1){
+      /* vals are already read into temporary column vector here */
+      for(j=0;j<b->dim;j++){
+	ogg_uint32_t off=entry%quantvals;
+	entry/=quantvals;
+	ret|=((ogg_uint16_t *)(b->q_val))[off]<<(b->q_bits*j);
+      }
+    }else{
+      for(j=0;j<b->dim;j++)
+	ret|=oggpack_read(opb,b->q_bits)<<(b->q_bits*j);
+    }
+    return ret;
+    
+  case 2:
+    for(j=0;j<b->dim;j++){
+      ogg_uint32_t off=entry%quantvals;
+      entry/=quantvals;
+      ret|=off<<(b->q_pack*j);
+    }
+    return ret;
+
+  case 3:
+    return (ogg_uint32_t)used_entry;
+
+  }
+  return 0; /* silence compiler */
+}
+
+/* 32 bit float (not IEEE; nonnormalized mantissa +
+   biased exponent) : neeeeeee eeemmmmm mmmmmmmm mmmmmmmm 
+   Why not IEEE?  It's just not that important here. */
+
+static ogg_int32_t _float32_unpack(long val,int *point){
+  long   mant=val&0x1fffff;
+  int    sign=val&0x80000000;
+  
+  *point=((val&0x7fe00000L)>>21)-788;
+
+  if(mant){
+    while(!(mant&0x40000000)){
+      mant<<=1;
+      *point-=1;
+    }
+    if(sign)mant= -mant;
+  }else{
+    *point=-9999;
+  }
+  return mant;
+}
+
+/* choose the smallest supported node size that fits our decode table.
+   Legal bytewidths are 1/1 1/2 2/2 2/4 4/4 */
+static int _determine_node_bytes(long used, int leafwidth){
+
+  /* special case small books to size 4 to avoid multiple special
+     cases in repack */
+  if(used<2)
+    return 4;
+
+  if(leafwidth==3)leafwidth=4;
+  if(_ilog(3*used-6)+1 <= leafwidth*4) 
+    return leafwidth/2?leafwidth/2:1;
+  return leafwidth;
+}
+
+/* convenience/clarity; leaves are specified as multiple of node word
+   size (1 or 2) */
+static int _determine_leaf_words(int nodeb, int leafwidth){
+  if(leafwidth>nodeb)return 2;
+  return 1;
+}
+
+/* given a list of word lengths, number of used entries, and byte
+   width of a leaf, generate the decode table */
+static int _make_words(char *l,long n,ogg_uint32_t *r,long quantvals,
+		       codebook *b, oggpack_buffer *opb,int maptype){
+  long i,j,count=0;
+  long top=0;
+  ogg_uint32_t marker[33];
+
+  if (n<1)
+    return 1;
+
+  if(n<2){
+    r[0]=0x80000000;
+  }else{
+    memset(marker,0,sizeof(marker));
+    
+    for(i=0;i<n;i++){
+      long length=l[i];
+      if(length){
+	ogg_uint32_t entry=marker[length];
+	long chase=0;
+	if(count && !entry)return -1; /* overpopulated tree! */
+	
+	/* chase the tree as far as it's already populated, fill in past */
+	for(j=0;j<length-1;j++){
+	  int bit=(entry>>(length-j-1))&1;
+	  if(chase>=top){ 
+	    if (chase < 0 || chase >= n) return 1;
+	    top++;
+	    r[chase*2]=top;
+	    r[chase*2+1]=0;
+	  }else
+	    if (chase < 0 || chase >= n || chase*2+bit > n*2+1) return 1;
+	    if(!r[chase*2+bit])
+	      r[chase*2+bit]=top;
+	  chase=r[chase*2+bit];
+	  if (chase < 0 || chase >= n) return 1;
+	}
+	{	
+	  int bit=(entry>>(length-j-1))&1;
+	  if(chase>=top){ 
+	    top++;
+	    r[chase*2+1]=0;
+	  }
+	  r[chase*2+bit]= decpack(i,count++,quantvals,b,opb,maptype) | 
+	    0x80000000;
+	}
+
+	/* Look to see if the next shorter marker points to the node
+	   above. if so, update it and repeat.  */
+	for(j=length;j>0;j--){          
+	  if(marker[j]&1){
+	    marker[j]=marker[j-1]<<1;
+	    break;
+	  }
+	  marker[j]++;
+	}
+	
+	/* prune the tree; the implicit invariant says all the longer
+	   markers were dangling from our just-taken node.  Dangle them
+	   from our *new* node. */
+	for(j=length+1;j<33;j++)
+	  if((marker[j]>>1) == entry){
+	    entry=marker[j];
+	    marker[j]=marker[j-1]<<1;
+	  }else
+	    break;
+      }
+    }
+  }
+  
+  return 0;
+}
+
+static int _make_decode_table(codebook *s,char *lengthlist,long quantvals,
+			      oggpack_buffer *opb,int maptype){
+  int i;
+  ogg_uint32_t *work;
+
+  if (!lengthlist) return 1;
+  if(s->dec_nodeb==4){
+    /* Over-allocate by using s->entries instead of used_entries.
+     * This means that we can use s->entries to enforce size in
+     * _make_words without messing up length list looping.
+     * This probably wastes a bit of space, but it shouldn't
+     * impact behavior or size too much.
+     */
+    s->dec_table=_ogg_malloc((s->entries*2+1)*sizeof(*work));
+    if (!s->dec_table) return 1;
+    /* +1 (rather than -2) is to accommodate 0 and 1 sized books,
+       which are specialcased to nodeb==4 */
+    if(_make_words(lengthlist,s->entries,
+		   s->dec_table,quantvals,s,opb,maptype))return 1;
+    
+    return 0;
+  }
+
+  if (s->used_entries > INT_MAX/2 ||
+      s->used_entries*2 > INT_MAX/((long) sizeof(*work)) - 1) return 1;
+  /* Overallocate as above */
+  work=alloca((s->entries*2+1)*sizeof(*work));
+  if (!work) return 1;
+  if(_make_words(lengthlist,s->entries,work,quantvals,s,opb,maptype))return 1;
+  if (s->used_entries > INT_MAX/(s->dec_leafw+1)) return 1;
+  if (s->dec_nodeb && s->used_entries * (s->dec_leafw+1) > INT_MAX/s->dec_nodeb) return 1;
+  s->dec_table=_ogg_malloc((s->used_entries*(s->dec_leafw+1)-2)*
+			   s->dec_nodeb);
+  if (!s->dec_table) return 1;
+  
+  if(s->dec_leafw==1){
+    switch(s->dec_nodeb){
+    case 1:
+      for(i=0;i<s->used_entries*2-2;i++)
+	  ((unsigned char *)s->dec_table)[i]=
+	    ((work[i] & 0x80000000UL) >> 24) | work[i];
+      break;
+    case 2:
+      for(i=0;i<s->used_entries*2-2;i++)
+	  ((ogg_uint16_t *)s->dec_table)[i]=
+	    ((work[i] & 0x80000000UL) >> 16) | work[i];
+      break; 
+    }
+
+  }else{
+    /* more complex; we have to do a two-pass repack that updates the
+       node indexing. */
+    long top=s->used_entries*3-2;
+    if(s->dec_nodeb==1){
+      unsigned char *out=(unsigned char *)s->dec_table;
+
+      for(i=s->used_entries*2-4;i>=0;i-=2){
+	if(work[i]&0x80000000UL){
+	  if(work[i+1]&0x80000000UL){
+	    top-=4;
+	    out[top]=(work[i]>>8 & 0x7f)|0x80;
+	    out[top+1]=(work[i+1]>>8 & 0x7f)|0x80;
+	    out[top+2]=work[i] & 0xff;
+	    out[top+3]=work[i+1] & 0xff;
+	  }else{
+	    top-=3;
+	    out[top]=(work[i]>>8 & 0x7f)|0x80;
+	    out[top+1]=work[work[i+1]*2];
+	    out[top+2]=work[i] & 0xff;
+	  }
+	}else{
+	  if(work[i+1]&0x80000000UL){
+	    top-=3;
+	    out[top]=work[work[i]*2];
+	    out[top+1]=(work[i+1]>>8 & 0x7f)|0x80;
+	    out[top+2]=work[i+1] & 0xff;
+	  }else{
+	    top-=2;
+	    out[top]=work[work[i]*2];
+	    out[top+1]=work[work[i+1]*2];
+	  }
+	}
+	work[i]=top;
+      }
+    }else{
+      ogg_uint16_t *out=(ogg_uint16_t *)s->dec_table;
+      for(i=s->used_entries*2-4;i>=0;i-=2){
+	if(work[i]&0x80000000UL){
+	  if(work[i+1]&0x80000000UL){
+	    top-=4;
+	    out[top]=(work[i]>>16 & 0x7fff)|0x8000;
+	    out[top+1]=(work[i+1]>>16 & 0x7fff)|0x8000;
+	    out[top+2]=work[i] & 0xffff;
+	    out[top+3]=work[i+1] & 0xffff;
+	  }else{
+	    top-=3;
+	    out[top]=(work[i]>>16 & 0x7fff)|0x8000;
+	    out[top+1]=work[work[i+1]*2];
+	    out[top+2]=work[i] & 0xffff;
+	  }
+	}else{
+	  if(work[i+1]&0x80000000UL){
+	    top-=3;
+	    out[top]=work[work[i]*2];
+	    out[top+1]=(work[i+1]>>16 & 0x7fff)|0x8000;
+	    out[top+2]=work[i+1] & 0xffff;
+	  }else{
+	    top-=2;
+	    out[top]=work[work[i]*2];
+	    out[top+1]=work[work[i+1]*2];
+	  }
+	}
+	work[i]=top;
+      }
+    }
+  }
+	
+  return 0;
+}
+
+/* most of the time, entries%dimensions == 0, but we need to be
+   well defined.  We define that the possible vales at each
+   scalar is values == entries/dim.  If entries%dim != 0, we'll
+   have 'too few' values (values*dim<entries), which means that
+   we'll have 'left over' entries; left over entries use zeroed
+   values (and are wasted).  So don't generate codebooks like
+   that */
+/* there might be a straightforward one-line way to do the below
+   that's portable and totally safe against roundoff, but I haven't
+   thought of it.  Therefore, we opt on the side of caution */
+long _book_maptype1_quantvals(codebook *b){
+  /* get us a starting hint, we'll polish it below */
+  int bits=_ilog(b->entries);
+  int vals=b->entries>>((bits-1)*(b->dim-1)/b->dim);
+
+  while(1){
+    long acc=1;
+    long acc1=1;
+    int i;
+    for(i=0;i<b->dim;i++){
+      acc*=vals;
+      acc1*=vals+1;
+    }
+    if(acc<=b->entries && acc1>b->entries){
+      return(vals);
+    }else{
+      if(acc>b->entries){
+        vals--;
+      }else{
+        vals++;
+      }
+    }
+  }
+}
+
+void vorbis_book_clear(codebook *b){
+  /* static book is not cleared; we're likely called on the lookup and
+     the static codebook belongs to the info struct */
+  if(b->q_val)_ogg_free(b->q_val);
+  if(b->dec_table)_ogg_free(b->dec_table);
+
+  memset(b,0,sizeof(*b));
+}
+
+int vorbis_book_unpack(oggpack_buffer *opb,codebook *s){
+  char         *lengthlist=NULL;
+  int           quantvals=0;
+  long          i,j;
+  int           maptype;
+
+  memset(s,0,sizeof(*s));
+
+  /* make sure alignment is correct */
+  if(oggpack_read(opb,24)!=0x564342)goto _eofout;
+
+  /* first the basic parameters */
+  s->dim=oggpack_read(opb,16);
+  s->entries=oggpack_read(opb,24);
+  if(s->entries<=0)goto _eofout;
+  if(s->dim<=0)goto _eofout;
+  if(_ilog(s->dim)+_ilog(s->entries)>24)goto _eofout; 
+  if (s->dim > INT_MAX/s->entries) goto _eofout;
+
+  /* codeword ordering.... length ordered or unordered? */
+  switch((int)oggpack_read(opb,1)){
+  case 0:
+    /* unordered */
+    lengthlist=(char *)alloca(sizeof(*lengthlist)*s->entries);
+    if(!lengthlist) goto _eofout;
+
+    /* allocated but unused entries? */
+    if(oggpack_read(opb,1)){
+      /* yes, unused entries */
+
+      for(i=0;i<s->entries;i++){
+	if(oggpack_read(opb,1)){
+	  long num=oggpack_read(opb,5);
+	  if(num==-1)goto _eofout;
+	  lengthlist[i]=num+1;
+	  s->used_entries++;
+	  if(num+1>s->dec_maxlength)s->dec_maxlength=num+1;
+	}else
+	  lengthlist[i]=0;
+      }
+    }else{
+      /* all entries used; no tagging */
+      s->used_entries=s->entries;
+      for(i=0;i<s->entries;i++){
+	long num=oggpack_read(opb,5);
+	if(num==-1)goto _eofout;
+	lengthlist[i]=num+1;
+	if(num+1>s->dec_maxlength)s->dec_maxlength=num+1;
+      }
+    }
+    
+    break;
+  case 1:
+    /* ordered */
+    {
+      long length=oggpack_read(opb,5)+1;
+
+      s->used_entries=s->entries;
+      lengthlist=(char *)alloca(sizeof(*lengthlist)*s->entries);
+      if (!lengthlist) goto _eofout;
+      
+      for(i=0;i<s->entries;){
+	long num=oggpack_read(opb,_ilog(s->entries-i));
+	if(num<0)goto _eofout;
+	for(j=0;j<num && i<s->entries;j++,i++)
+	  lengthlist[i]=length;
+	s->dec_maxlength=length;
+	length++;
+      }
+    }
+    break;
+  default:
+    /* EOF */
+    goto _eofout;
+  }
+
+
+  /* Do we have a mapping to unpack? */
+  
+  if((maptype=oggpack_read(opb,4))>0){
+    s->q_min=_float32_unpack(oggpack_read(opb,32),&s->q_minp);
+    s->q_del=_float32_unpack(oggpack_read(opb,32),&s->q_delp);
+    s->q_bits=oggpack_read(opb,4)+1;
+    s->q_seq=oggpack_read(opb,1);
+
+    s->q_del>>=s->q_bits;
+    s->q_delp+=s->q_bits;
+  }
+
+  switch(maptype){
+  case 0:
+
+    /* no mapping; decode type 0 */
+
+    /* how many bytes for the indexing? */
+    /* this is the correct boundary here; we lose one bit to
+       node/leaf mark */
+    s->dec_nodeb=_determine_node_bytes(s->used_entries,_ilog(s->entries)/8+1); 
+    s->dec_leafw=_determine_leaf_words(s->dec_nodeb,_ilog(s->entries)/8+1); 
+    s->dec_type=0;
+
+    if(_make_decode_table(s,lengthlist,quantvals,opb,maptype)) goto _errout;
+    break;
+
+  case 1:
+
+    /* mapping type 1; implicit values by lattice  position */
+    quantvals=_book_maptype1_quantvals(s);
+    
+    /* dec_type choices here are 1,2; 3 doesn't make sense */
+    {
+      /* packed values */
+      long total1=(s->q_bits*s->dim+8)/8; /* remember flag bit */
+      if (s->dim > (INT_MAX-8)/s->q_bits) goto _eofout;
+      /* vector of column offsets; remember flag bit */
+      long total2=(_ilog(quantvals-1)*s->dim+8)/8+(s->q_bits+7)/8;
+
+      
+      if(total1<=4 && total1<=total2){
+	/* use dec_type 1: vector of packed values */
+
+	/* need quantized values before  */
+	s->q_val=alloca(sizeof(ogg_uint16_t)*quantvals);
+	if (!s->q_val) goto _eofout;
+	for(i=0;i<quantvals;i++)
+	  ((ogg_uint16_t *)s->q_val)[i]=oggpack_read(opb,s->q_bits);
+	
+	if(oggpack_eop(opb)){
+	  s->q_val=0; /* cleanup must not free alloca memory */
+	  goto _eofout;
+	}
+
+	s->dec_type=1;
+	s->dec_nodeb=_determine_node_bytes(s->used_entries,
+					   (s->q_bits*s->dim+8)/8); 
+	s->dec_leafw=_determine_leaf_words(s->dec_nodeb,
+					   (s->q_bits*s->dim+8)/8); 
+	if(_make_decode_table(s,lengthlist,quantvals,opb,maptype)){
+	  s->q_val=0; /* cleanup must not free alloca memory */
+	  goto _errout;
+	}
+	
+	s->q_val=0; /* about to go out of scope; _make_decode_table
+                       was using it */
+	
+      }else{
+	/* use dec_type 2: packed vector of column offsets */
+
+	/* need quantized values before */
+	if(s->q_bits<=8){
+	  s->q_val=_ogg_malloc(quantvals);
+	  if (!s->q_val) goto _eofout;
+	  for(i=0;i<quantvals;i++)
+	    ((unsigned char *)s->q_val)[i]=oggpack_read(opb,s->q_bits);
+	}else{
+	  s->q_val=_ogg_malloc(quantvals*2);
+	  if (!s->q_val) goto _eofout;
+	  for(i=0;i<quantvals;i++)
+	    ((ogg_uint16_t *)s->q_val)[i]=oggpack_read(opb,s->q_bits);
+	}
+
+	if(oggpack_eop(opb))goto _eofout;
+
+	s->q_pack=_ilog(quantvals-1); 
+	s->dec_type=2;
+	s->dec_nodeb=_determine_node_bytes(s->used_entries,
+					   (_ilog(quantvals-1)*s->dim+8)/8); 
+	s->dec_leafw=_determine_leaf_words(s->dec_nodeb,
+					   (_ilog(quantvals-1)*s->dim+8)/8); 
+	if(_make_decode_table(s,lengthlist,quantvals,opb,maptype))goto _errout;
+
+      }
+    }
+    break;
+  case 2:
+
+    /* mapping type 2; explicit array of values */
+    quantvals=s->entries*s->dim;
+    /* dec_type choices here are 1,3; 2 is not possible */
+
+    if( (s->q_bits*s->dim+8)/8 <=4){ /* remember flag bit */
+      /* use dec_type 1: vector of packed values */
+
+      s->dec_type=1;
+      s->dec_nodeb=_determine_node_bytes(s->used_entries,(s->q_bits*s->dim+8)/8); 
+      s->dec_leafw=_determine_leaf_words(s->dec_nodeb,(s->q_bits*s->dim+8)/8); 
+      if(_make_decode_table(s,lengthlist,quantvals,opb,maptype))goto _errout;
+      
+    }else{
+      /* use dec_type 3: scalar offset into packed value array */
+
+      s->dec_type=3;
+      s->dec_nodeb=_determine_node_bytes(s->used_entries,_ilog(s->used_entries-1)/8+1); 
+      s->dec_leafw=_determine_leaf_words(s->dec_nodeb,_ilog(s->used_entries-1)/8+1); 
+      if(_make_decode_table(s,lengthlist,quantvals,opb,maptype))goto _errout;
+
+      /* get the vals & pack them */
+      s->q_pack=(s->q_bits+7)/8*s->dim;
+      s->q_val=_ogg_malloc(s->q_pack*s->used_entries);
+
+      if(s->q_bits<=8){
+	for(i=0;i<s->used_entries*s->dim;i++)
+	  ((unsigned char *)(s->q_val))[i]=oggpack_read(opb,s->q_bits);
+      }else{
+	for(i=0;i<s->used_entries*s->dim;i++)
+	  ((ogg_uint16_t *)(s->q_val))[i]=oggpack_read(opb,s->q_bits);
+      }
+    }
+    break;
+  default:
+    goto _errout;
+  }
+
+  if(oggpack_eop(opb))goto _eofout;
+
+  return 0;
+ _errout:
+ _eofout:
+  vorbis_book_clear(s);
+  return -1;
+}
+
+static inline ogg_uint32_t decode_packed_entry_number(codebook *book, 
+						      oggpack_buffer *b){
+  ogg_uint32_t chase=0;
+  int  read=book->dec_maxlength;
+  long lok = oggpack_look(b,read),i;
+  
+  while(lok<0 && read>1)
+    lok = oggpack_look(b, --read);
+
+  if(lok<0){
+    oggpack_adv(b,1); /* force eop */
+    return -1;
+  }
+
+  /* chase the tree with the bits we got */
+  if(book->dec_nodeb==1){
+    if(book->dec_leafw==1){
+
+      /* 8/8 */
+      unsigned char *t=(unsigned char *)book->dec_table;
+      for(i=0;i<read;i++){
+	chase=t[chase*2+((lok>>i)&1)];
+	if(chase&0x80UL)break;
+      }
+      chase&=0x7fUL;
+
+    }else{
+
+      /* 8/16 */
+      unsigned char *t=(unsigned char *)book->dec_table;
+      for(i=0;i<read;i++){
+	int bit=(lok>>i)&1;
+	int next=t[chase+bit];
+	if(next&0x80){
+	  chase= (next<<8) | t[chase+bit+1+(!bit || t[chase]&0x80)];
+	  break;
+	}
+	chase=next;
+      }
+      chase&=0x7fffUL;
+    }
+
+  }else{
+    if(book->dec_nodeb==2){
+      if(book->dec_leafw==1){
+	
+	/* 16/16 */
+	for(i=0;i<read;i++){
+	  chase=((ogg_uint16_t *)(book->dec_table))[chase*2+((lok>>i)&1)];
+	  if(chase&0x8000UL)break;
+	}
+	chase&=0x7fffUL;
+	
+      }else{
+	
+	/* 16/32 */
+	ogg_uint16_t *t=(ogg_uint16_t *)book->dec_table;
+	for(i=0;i<read;i++){
+	  int bit=(lok>>i)&1;
+	  int next=t[chase+bit];
+	  if(next&0x8000){
+	    chase= (next<<16) | t[chase+bit+1+(!bit || t[chase]&0x8000)];
+	    break;
+	  }
+	  chase=next;
+	}
+	chase&=0x7fffffffUL;
+      }
+      
+    }else{
+      
+      for(i=0;i<read;i++){
+	chase=((ogg_uint32_t *)(book->dec_table))[chase*2+((lok>>i)&1)];
+	if(chase&0x80000000UL)break;
+      }
+      chase&=0x7fffffffUL;
+      
+    }
+  }
+  
+  if(i<read){
+    oggpack_adv(b,i+1);
+    return chase;
+  }
+  oggpack_adv(b,read+1);
+  return(-1);
+}
+
+/* returns the [original, not compacted] entry number or -1 on eof *********/
+long vorbis_book_decode(codebook *book, oggpack_buffer *b){
+  if(book->dec_type)return -1;
+ return decode_packed_entry_number(book,b);
+}
+
+int decode_map(codebook *s, oggpack_buffer *b, ogg_int32_t *v, int point){
+  ogg_uint32_t entry = decode_packed_entry_number(s,b);
+  int i;
+  if(oggpack_eop(b))return(-1);
+
+  /* according to decode type */
+  switch(s->dec_type){
+  case 1:{
+    /* packed vector of values */
+    int mask=(1<<s->q_bits)-1;
+    for(i=0;i<s->dim;i++){
+      v[i]=entry&mask;
+      entry>>=s->q_bits;
+    }
+    break;
+  }
+  case 2:{
+    /* packed vector of column offsets */
+    int mask=(1<<s->q_pack)-1;
+    for(i=0;i<s->dim;i++){
+      if(s->q_bits<=8)
+	v[i]=((unsigned char *)(s->q_val))[entry&mask];
+      else
+	v[i]=((ogg_uint16_t *)(s->q_val))[entry&mask];
+      entry>>=s->q_pack;
+    }
+    break;
+  }
+  case 3:{
+    /* offset into array */
+    void *ptr=s->q_val+entry*s->q_pack;
+
+    if(s->q_bits<=8){
+      for(i=0;i<s->dim;i++)
+	v[i]=((unsigned char *)ptr)[i];
+    }else{
+      for(i=0;i<s->dim;i++)
+	v[i]=((ogg_uint16_t *)ptr)[i];
+    }
+    break;
+  }
+  default:
+    return -1;
+  }
+
+  /* we have the unpacked multiplicands; compute final vals */
+  {
+    int shiftM=point-s->q_delp;
+    ogg_int32_t add=point-s->q_minp;
+    if(add>0)
+      add= s->q_min >> add;
+    else
+      add= s->q_min << -add;
+
+    if(shiftM>0)
+      for(i=0;i<s->dim;i++)
+	v[i]= add + ((v[i] * s->q_del) >> shiftM);
+    else
+      for(i=0;i<s->dim;i++)
+	v[i]= add + ((v[i] * s->q_del) << -shiftM);
+
+    if(s->q_seq)
+      for(i=1;i<s->dim;i++)
+	v[i]+=v[i-1];
+  }
+
+  return 0;
+}
+
+/* returns 0 on OK or -1 on eof *************************************/
+long vorbis_book_decodevs_add(codebook *book,ogg_int32_t *a,
+			      oggpack_buffer *b,int n,int point){
+  if(book->used_entries>0){
+    int step=n/book->dim;
+    ogg_int32_t *v = (ogg_int32_t *)alloca(sizeof(*v)*book->dim);
+    int i,j,o;
+    if (!v) return -1;
+    
+    for (j=0;j<step;j++){
+      if(decode_map(book,b,v,point))return -1;
+      for(i=0,o=j;i<book->dim;i++,o+=step)
+	a[o]+=v[i];
+    }
+  }
+  return 0;
+}
+
+long vorbis_book_decodev_add(codebook *book,ogg_int32_t *a,
+			     oggpack_buffer *b,int n,int point){
+  if(book->used_entries>0){
+    ogg_int32_t *v = (ogg_int32_t *)alloca(sizeof(*v)*book->dim);
+    int i,j;
+    
+    if (!v) return -1;
+    for(i=0;i<n;){
+      if(decode_map(book,b,v,point))return -1;
+      for (j=0;j<book->dim;j++)
+	a[i++]+=v[j];
+    }
+  }
+  return 0;
+}
+
+long vorbis_book_decodev_set(codebook *book,ogg_int32_t *a,
+			     oggpack_buffer *b,int n,int point){
+  if(book->used_entries>0){
+    ogg_int32_t *v = (ogg_int32_t *)alloca(sizeof(*v)*book->dim);
+    int i,j;
+    
+    if (!v) return -1;
+    for(i=0;i<n;){
+      if(decode_map(book,b,v,point))return -1;
+      for (j=0;j<book->dim;j++)
+	a[i++]=v[j];
+    }
+  }else{
+    int i,j;
+    
+    for(i=0;i<n;){
+      for (j=0;j<book->dim;j++)
+	a[i++]=0;
+    }
+  }
+
+  return 0;
+}
+
+long vorbis_book_decodevv_add(codebook *book,ogg_int32_t **a,
+			      long offset,int ch,
+			      oggpack_buffer *b,int n,int point){
+  if(book->used_entries>0){
+    
+    ogg_int32_t *v = (ogg_int32_t *)alloca(sizeof(*v)*book->dim);
+    long i,j;
+    int chptr=0;
+    
+    if (!v) return -1;
+    for(i=offset;i<offset+n;){
+      if(decode_map(book,b,v,point))return -1;
+      for (j=0;j<book->dim;j++){
+	a[chptr++][i]+=v[j];
+	if(chptr==ch){
+	  chptr=0;
+	  i++;
+	}
+      }
+    }
+  }
+
+  return 0;
+}
diff --git a/Tremor/codebook.h b/Tremor/codebook.h
new file mode 100644
index 0000000..7519597
--- /dev/null
+++ b/Tremor/codebook.h
@@ -0,0 +1,65 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE.   *
+ *                                                                  *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002    *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************
+
+ function: basic shared codebook operations
+
+ ********************************************************************/
+
+#ifndef _V_CODEBOOK_H_
+#define _V_CODEBOOK_H_
+
+#include "ogg.h"
+
+typedef struct codebook{
+  long  dim;             /* codebook dimensions (elements per vector) */
+  long  entries;         /* codebook entries */
+  long  used_entries;    /* populated codebook entries */
+
+  int   dec_maxlength;
+  void *dec_table;
+  int   dec_nodeb;      
+  int   dec_leafw;      
+  int   dec_type;        /* 0 = entry number
+			    1 = packed vector of values
+			    2 = packed vector of column offsets, maptype 1 
+			    3 = scalar offset into value array,  maptype 2  */
+
+  ogg_int32_t q_min;  
+  int         q_minp;  
+  ogg_int32_t q_del;
+  int         q_delp;
+  int         q_seq;
+  int         q_bits;
+  int         q_pack;
+  void       *q_val;   
+
+} codebook;
+
+extern void vorbis_book_clear(codebook *b);
+extern int  vorbis_book_unpack(oggpack_buffer *b,codebook *c);
+
+extern long vorbis_book_decode(codebook *book, oggpack_buffer *b);
+extern long vorbis_book_decodevs_add(codebook *book, ogg_int32_t *a, 
+				     oggpack_buffer *b,int n,int point);
+extern long vorbis_book_decodev_set(codebook *book, ogg_int32_t *a, 
+				    oggpack_buffer *b,int n,int point);
+extern long vorbis_book_decodev_add(codebook *book, ogg_int32_t *a, 
+				    oggpack_buffer *b,int n,int point);
+extern long vorbis_book_decodevv_add(codebook *book, ogg_int32_t **a,
+				     long off,int ch, 
+				    oggpack_buffer *b,int n,int point);
+
+extern int _ilog(unsigned int v);
+
+
+#endif
diff --git a/Tremor/codec_internal.h b/Tremor/codec_internal.h
new file mode 100644
index 0000000..5dd0599
--- /dev/null
+++ b/Tremor/codec_internal.h
@@ -0,0 +1,213 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE.   *
+ *                                                                  *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2003    *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************
+
+ function: libvorbis codec headers
+
+ ********************************************************************/
+
+#ifndef _V_CODECI_H_
+#define _V_CODECI_H_
+
+#define CHUNKSIZE 1024
+
+#include "codebook.h"
+#include "ivorbiscodec.h"
+
+#define VI_TRANSFORMB 1
+#define VI_WINDOWB 1
+#define VI_TIMEB 1
+#define VI_FLOORB 2
+#define VI_RESB 3
+#define VI_MAPB 1
+
+typedef void vorbis_info_floor;
+
+/* vorbis_dsp_state buffers the current vorbis audio
+   analysis/synthesis state.  The DSP state belongs to a specific
+   logical bitstream ****************************************************/
+struct vorbis_dsp_state{
+  vorbis_info    *vi;
+  oggpack_buffer  opb;
+
+  ogg_int32_t   **work;
+  ogg_int32_t   **mdctright;
+  int             out_begin;
+  int             out_end;
+
+  long lW;
+  long W;
+
+  ogg_int64_t granulepos;
+  ogg_int64_t sequence;
+  ogg_int64_t sample_count;
+
+};
+
+
+/* Floor backend generic *****************************************/
+
+extern vorbis_info_floor *floor0_info_unpack(vorbis_info *,oggpack_buffer *);
+extern void floor0_free_info(vorbis_info_floor *);
+extern int floor0_memosize(vorbis_info_floor *);
+extern ogg_int32_t *floor0_inverse1(struct vorbis_dsp_state *,
+				    vorbis_info_floor *,ogg_int32_t *);
+extern int floor0_inverse2 (struct vorbis_dsp_state *,vorbis_info_floor *,
+			    ogg_int32_t *buffer,ogg_int32_t *);
+
+extern vorbis_info_floor *floor1_info_unpack(vorbis_info *,oggpack_buffer *);
+extern void floor1_free_info(vorbis_info_floor *);
+extern int floor1_memosize(vorbis_info_floor *);
+extern ogg_int32_t *floor1_inverse1(struct vorbis_dsp_state *,
+				    vorbis_info_floor *,ogg_int32_t *);
+extern int floor1_inverse2 (struct vorbis_dsp_state *,vorbis_info_floor *,
+			    ogg_int32_t *buffer,ogg_int32_t *);
+
+typedef struct{
+  int   order;
+  long  rate;
+  long  barkmap;
+
+  int   ampbits;
+  int   ampdB;
+
+  int   numbooks; /* <= 16 */
+  char  books[16];
+
+} vorbis_info_floor0;
+
+typedef struct{
+  char  class_dim;        /* 1 to 8 */
+  char  class_subs;       /* 0,1,2,3 (bits: 1<<n poss) */
+  unsigned char  class_book;       /* subs ^ dim entries */
+  unsigned char  class_subbook[8]; /* [VIF_CLASS][subs] */
+} floor1class;  
+
+typedef struct{
+  floor1class  *class;          /* [VIF_CLASS] */
+  char         *partitionclass; /* [VIF_PARTS]; 0 to 15 */
+  ogg_uint16_t *postlist;       /* [VIF_POSIT+2]; first two implicit */ 
+  char         *forward_index;  /* [VIF_POSIT+2]; */
+  char         *hineighbor;     /* [VIF_POSIT]; */
+  char         *loneighbor;     /* [VIF_POSIT]; */
+
+  int          partitions;    /* 0 to 31 */
+  int          posts;
+  int          mult;          /* 1 2 3 or 4 */ 
+
+} vorbis_info_floor1;
+
+/* Residue backend generic *****************************************/
+
+typedef struct vorbis_info_residue{
+  int type;
+  unsigned char *stagemasks;
+  unsigned char *stagebooks;
+
+/* block-partitioned VQ coded straight residue */
+  long begin;
+  long end;
+
+  /* first stage (lossless partitioning) */
+  int           grouping;         /* group n vectors per partition */
+  char          partitions;       /* possible codebooks for a partition */
+  unsigned char groupbook;        /* huffbook for partitioning */
+  char          stages;
+} vorbis_info_residue;
+
+extern void res_clear_info(vorbis_info_residue *info);
+extern int res_unpack(vorbis_info_residue *info,
+		      vorbis_info *vi,oggpack_buffer *opb);
+extern int res_inverse(vorbis_dsp_state *,vorbis_info_residue *info,
+		       ogg_int32_t **in,int *nonzero,int ch);
+
+/* mode ************************************************************/
+typedef struct {
+  unsigned char blockflag;
+  unsigned char mapping;
+} vorbis_info_mode;
+
+/* Mapping backend generic *****************************************/
+typedef struct coupling_step{
+  unsigned char mag;
+  unsigned char ang;
+} coupling_step;
+
+typedef struct submap{
+  char floor;
+  char residue;
+} submap;
+
+typedef struct vorbis_info_mapping{
+  int            submaps; 
+  
+  unsigned char *chmuxlist;
+  submap        *submaplist;
+
+  int            coupling_steps;
+  coupling_step *coupling;
+} vorbis_info_mapping;
+
+extern int mapping_info_unpack(vorbis_info_mapping *,vorbis_info *,
+			       oggpack_buffer *);
+extern void mapping_clear_info(vorbis_info_mapping *);
+extern int mapping_inverse(struct vorbis_dsp_state *,vorbis_info_mapping *);
+
+/* codec_setup_info contains all the setup information specific to the
+   specific compression/decompression mode in progress (eg,
+   psychoacoustic settings, channel setup, options, codebook
+   etc).  
+*********************************************************************/
+
+typedef struct codec_setup_info {
+
+  /* Vorbis supports only short and long blocks, but allows the
+     encoder to choose the sizes */
+
+  long blocksizes[2];
+
+  /* modes are the primary means of supporting on-the-fly different
+     blocksizes, different channel mappings (LR or M/A),
+     different residue backends, etc.  Each mode consists of a
+     blocksize flag and a mapping (along with the mapping setup */
+
+  int        modes;
+  int        maps;
+  int        floors;
+  int        residues;
+  int        books;
+
+  vorbis_info_mode       *mode_param;
+  vorbis_info_mapping    *map_param;
+  char                   *floor_type;
+  vorbis_info_floor     **floor_param;
+  vorbis_info_residue    *residue_param;
+  codebook               *book_param;
+
+} codec_setup_info;
+
+extern vorbis_dsp_state *vorbis_dsp_create(vorbis_info *vi);
+extern void     vorbis_dsp_destroy(vorbis_dsp_state *v);
+extern int      vorbis_dsp_headerin(vorbis_info *vi,vorbis_comment *vc,
+				    ogg_packet *op);
+
+extern int      vorbis_dsp_restart(vorbis_dsp_state *v);
+extern int      vorbis_dsp_synthesis(vorbis_dsp_state *vd,
+				     ogg_packet *op,int decodep);
+extern int      vorbis_dsp_pcmout(vorbis_dsp_state *v,
+				  ogg_int16_t *pcm,int samples);
+extern int      vorbis_dsp_read(vorbis_dsp_state *v,int samples);
+extern long     vorbis_packet_blocksize(vorbis_info *vi,ogg_packet *op);
+
+
+
+#endif
diff --git a/Tremor/config_types.h b/Tremor/config_types.h
new file mode 100644
index 0000000..4f07a03
--- /dev/null
+++ b/Tremor/config_types.h
@@ -0,0 +1,26 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE.   *
+ *                                                                  *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002    *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************
+
+ function: #ifdef jail to whip a few platforms into the UNIX ideal.
+
+ ********************************************************************/
+#ifndef _OS_CVTYPES_H
+#define _OS_CVTYPES_H
+
+typedef long long ogg_int64_t;
+typedef int ogg_int32_t;
+typedef unsigned int ogg_uint32_t;
+typedef short ogg_int16_t;
+typedef unsigned short ogg_uint16_t;
+
+#endif
diff --git a/Tremor/configure.in b/Tremor/configure.in
new file mode 100644
index 0000000..0b6e01c
--- /dev/null
+++ b/Tremor/configure.in
@@ -0,0 +1,137 @@
+dnl Process this file with autoconf to produce a configure script
+
+dnl ------------------------------------------------
+dnl Initialization and Versioning
+dnl ------------------------------------------------
+
+AC_INIT(mdct.c)
+
+AC_CANONICAL_HOST
+AC_CANONICAL_TARGET
+
+AM_CONFIG_HEADER([config.h])
+
+AM_INIT_AUTOMAKE(libvorbisidec,1.2.0)
+
+dnl Library versioning
+
+V_LIB_CURRENT=1
+V_LIB_REVISION=2
+V_LIB_AGE=0
+AC_SUBST(V_LIB_CURRENT)
+AC_SUBST(V_LIB_REVISION)
+AC_SUBST(V_LIB_AGE)
+
+dnl --------------------------------------------------  
+dnl Check for programs
+dnl --------------------------------------------------  
+
+dnl save $CFLAGS since AC_PROG_CC likes to insert "-g -O2"
+dnl if $CFLAGS is blank
+cflags_save="$CFLAGS"
+AC_PROG_CC
+AC_PROG_CPP
+CFLAGS="$cflags_save"
+
+AM_PROG_LIBTOOL
+
+dnl --------------------------------------------------
+dnl Set build flags based on environment
+dnl --------------------------------------------------
+
+dnl Set some target options
+
+cflags_save="$CFLAGS"
+ldflags_save="$LDFLAGS"
+if test -z "$GCC"; then
+        case $host in 
+        arm-*-*)
+                DEBUG="-g -D_ARM_ASSEM_" 
+                CFLAGS="-O -D_ARM_ASSEM_"
+                PROFILE="-p -g -O -D_ARM_ASSEM" ;;
+        *)
+                DEBUG="-g"
+                CFLAGS="-O"
+                PROFILE="-g -p" ;;
+        esac
+else
+
+        case $host in 
+        arm-*-*)
+                DEBUG="-g -Wall -W -D__NO_MATH_INLINES -fsigned-char -D_ARM_ASSEM_"
+                CFLAGS="-O2 -Wall -D_ARM_ASSEM_ -fsigned-char"
+                PROFILE="-Wall -pg -g -O2 -D_ARM_ASSEM_ -fsigned-char -fno-inline-functions";;
+
+        *)
+                DEBUG="-g -Wall -W -D__NO_MATH_INLINES -fsigned-char"
+                CFLAGS="-O2 -Wall -fsigned-char"
+                PROFILE="-Wall -pg -g -O2 -fsigned-char -fno-inline-functions";;
+        esac
+fi
+CFLAGS="$CFLAGS $cflags_save -D_REENTRANT"
+LDFLAGS="$LDFLAGS $ldflags_save"
+
+
+# Test whenever ld supports -version-script
+AC_PROG_LD
+AC_PROG_LD_GNU
+if test "x$lt_cv_prog_gnu_ld" = "xyes"; then
+   SHLIB_VERSION_ARG="Wl,--version-script=Version_script"
+
+   dnl Set extra linker options
+   case "$target_os" in
+  linux* | solaris* )
+    SHLIB_VERSION_ARG="-Wl,--version-script=Version_script"
+    ;;
+  *)
+    ;;
+   esac
+   LDFLAGS="$LDFLAGS $SHLIB_VERSION_ARG"
+fi
+
+dnl --------------------------------------------------
+dnl Options 
+dnl --------------------------------------------------
+
+AC_ARG_ENABLE(
+   low-accuracy,
+   [  --enable-low-accuracy   enable 32 bit only multiply operations],
+   CFLAGS="$CFLAGS -D_LOW_ACCURACY_"
+)
+
+AC_ARG_ENABLE(
+   64kHz-limit,
+   [  --enable-64kHz-limit   limit playback ability to <64kHz files],
+   CFLAGS="$CFLAGS -DLIMIT_TO_64kHz"
+)
+
+dnl --------------------------------------------------
+dnl Check for headers
+dnl --------------------------------------------------
+
+AC_CHECK_HEADER(memory.h,CFLAGS="$CFLAGS -DUSE_MEMORY_H",:)
+
+dnl --------------------------------------------------
+dnl Check for typedefs, structures, etc
+dnl --------------------------------------------------
+
+dnl none
+
+dnl --------------------------------------------------
+dnl Check for library functions
+dnl --------------------------------------------------
+
+AC_FUNC_ALLOCA
+AC_FUNC_MEMCMP
+
+dnl --------------------------------------------------
+dnl Do substitutions
+dnl --------------------------------------------------
+
+LIBS="$LIBS"
+
+AC_SUBST(LIBS)
+AC_SUBST(DEBUG)
+AC_SUBST(PROFILE)
+
+AC_OUTPUT(Makefile Version_script)
diff --git a/Tremor/debian/Makefile.am b/Tremor/debian/Makefile.am
new file mode 100644
index 0000000..45a0f01
--- /dev/null
+++ b/Tremor/debian/Makefile.am
@@ -0,0 +1,6 @@
+## Process this file with automake to produce Makefile.in
+
+AUTOMAKE_OPTIONS = foreign
+
+EXTRA_DIST = changelog control copyright libvorbisidec1.install\
+	libvorbisidec-dev.install rules
diff --git a/Tremor/debian/changelog b/Tremor/debian/changelog
new file mode 100644
index 0000000..0cb4935
--- /dev/null
+++ b/Tremor/debian/changelog
@@ -0,0 +1,9 @@
+libvorbisidec (1.2.0-1) unstable; urgency=low
+
+  * Initial Release.
+
+ -- Christopher L Cheney <ccheney@debian.org>  Wed, 09 Oct 2002 22:00:00 -0500
+
+Local variables:
+mode: debian-changelog
+End:
diff --git a/Tremor/debian/control b/Tremor/debian/control
new file mode 100644
index 0000000..f286e91
--- /dev/null
+++ b/Tremor/debian/control
@@ -0,0 +1,22 @@
+Source: libvorbisidec
+Section: libs
+Priority: optional
+Maintainer: Christopher L Cheney <ccheney@debian.org>
+Build-Depends: autotools-dev, debhelper (>> 4.0.18), devscripts, gawk
+Standards-Version: 3.5.7.0
+
+Package: libvorbisidec1
+Architecture: any
+Section: libs
+Depends: ${shlibs:Depends}
+Description: Ogg Bitstream Library
+ Libogg is a library for manipulating ogg bitstreams.  It handles
+ both making ogg bitstreams and getting packets from ogg bitstreams.
+
+Package: libvorbisidec-dev
+Architecture: any
+Section: devel
+Depends: libvorbisidec1 (= ${Source-Version}), libc6-dev
+Description: Ogg Bitstream Library Development
+ The libogg-dev package contains the header files and documentation
+ needed to develop applications with libogg.
diff --git a/Tremor/debian/copyright b/Tremor/debian/copyright
new file mode 100644
index 0000000..ef98ddd
--- /dev/null
+++ b/Tremor/debian/copyright
@@ -0,0 +1,37 @@
+This package was debianized by Christopher L Cheney <ccheney@debian.org> on
+Wed, 09 Oct 2002 22:00:00 -0500.
+
+It was downloaded from cvs.
+
+Upstream Author(s): Monty <monty@xiph.org>
+
+Copyright:
+Copyright (c) 2002, Xiph.org Foundation
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+- Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+
+- Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+
+- Neither the name of the Xiph.Org Foundation nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
diff --git a/Tremor/debian/libvorbisidec-dev.install b/Tremor/debian/libvorbisidec-dev.install
new file mode 100644
index 0000000..5c3ccf9
--- /dev/null
+++ b/Tremor/debian/libvorbisidec-dev.install
@@ -0,0 +1,8 @@
+debian/tmp/usr/include/tremor/config_types.h
+debian/tmp/usr/include/tremor/ivorbiscodec.h
+debian/tmp/usr/include/tremor/ivorbisfile.h
+debian/tmp/usr/include/tremor/ogg.h
+debian/tmp/usr/include/tremor/os_types.h
+debian/tmp/usr/lib/libvorbisidec.a
+debian/tmp/usr/lib/libvorbisidec.la
+debian/tmp/usr/lib/libvorbisidec.so
diff --git a/Tremor/debian/libvorbisidec1.install b/Tremor/debian/libvorbisidec1.install
new file mode 100644
index 0000000..b824d1e
--- /dev/null
+++ b/Tremor/debian/libvorbisidec1.install
@@ -0,0 +1 @@
+debian/tmp/usr/lib/libvorbisidec.so.*
diff --git a/Tremor/debian/rules b/Tremor/debian/rules
new file mode 100755
index 0000000..c684884
--- /dev/null
+++ b/Tremor/debian/rules
@@ -0,0 +1,151 @@
+#!/usr/bin/make -f
+# Sample debian/rules that uses debhelper.
+# GNU copyright 1997 to 1999 by Joey Hess.
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+# This is the debhelper compatibility version to use.
+export DH_COMPAT=4
+
+# This has to be exported to make some magic below work.
+export DH_OPTIONS
+
+# These are used for cross-compiling and for saving the configure script
+# from having to guess our platform (since we know it already)
+DEB_HOST_GNU_TYPE	?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
+DEB_BUILD_GNU_TYPE	?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
+
+objdir = $(CURDIR)/obj-$(DEB_BUILD_GNU_TYPE)
+
+ifneq (,$(findstring debug,$(DEB_BUILD_OPTIONS)))
+	CFLAGS += -g
+endif
+ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
+	INSTALL_PROGRAM += -s
+endif
+
+configure: configure-stamp
+configure-stamp:
+	dh_testdir
+
+	# make build directory
+	mkdir $(objdir)
+
+	# run configure with build tree $(objdir)
+	# change ../configure to ../autogen.sh for CVS build
+	cd $(objdir) && \
+	../configure --build=$(DEB_BUILD_GNU_TYPE) --host=$(DEB_HOST_GNU_TYPE) \
+	--prefix=/usr
+
+	touch configure-stamp
+
+build: build-stamp
+build-stamp: configure-stamp 
+	dh_testdir
+
+	cd $(objdir) && \
+	$(MAKE)
+
+	touch build-stamp
+
+autotools:
+	OLDDATESUB=`./config.sub -t | tr -d -` ;\
+	OLDDATEGUESS=`./config.guess -t | tr -d -` ;\
+	NEWDATESUB=`/usr/share/misc/config.sub -t | tr -d -` ;\
+	NEWDATEGUESS=`/usr/share/misc/config.guess -t | tr -d -` ;\
+	if [ $$OLDDATESUB -lt $$NEWDATESUB -o \
+	     $$OLDDATEGUESS -lt $$NEWDATEGUESS ]; then \
+	   dch -a -p "GNU config automated update: config.sub\
+	     ($$OLDDATESUB to $$NEWDATESUB), config.guess\
+	     ($$OLDDATEGUESS to $$NEWDATEGUESS)" ;\
+	   cp -f /usr/share/misc/config.sub config.sub ;\
+	   cp -f /usr/share/misc/config.guess config.guess ;\
+	   echo WARNING: GNU config scripts updated from master copies 1>&2 ;\
+	fi
+
+debian-clean:
+	dh_testdir
+	dh_testroot
+
+	dh_clean
+
+clean: autotools
+	dh_testdir
+	dh_testroot
+	rm -f build-stamp configure-stamp
+
+	# Remove build tree
+	rm -rf $(objdir)
+
+	# if Makefile exists run distclean
+	if test -f Makefile; then \
+		$(MAKE) distclean; \
+	fi
+
+	#if test -d CVS; then \
+		$(MAKE) cvs-clean ;\
+	fi
+
+	dh_clean
+
+install: DH_OPTIONS=
+install: build
+	dh_testdir
+	dh_testroot
+	dh_clean -k
+	dh_installdirs
+
+	cd $(objdir) && \
+	$(MAKE) install DESTDIR=$(CURDIR)/debian/tmp
+
+	dh_install --list-missing
+
+# This single target is used to build all the packages, all at once, or
+# one at a time. So keep in mind: any options passed to commands here will
+# affect _all_ packages. Anything you want to only affect one package
+# should be put in another target, such as the install target.
+binary-common:
+	dh_testdir
+	dh_testroot
+#	dh_installxfonts
+	dh_installchangelogs
+	dh_installdocs
+	dh_installexamples
+#	dh_installmenu
+#	dh_installdebconf
+#	dh_installlogrotate
+#	dh_installemacsen
+#	dh_installpam
+#	dh_installmime
+#	dh_installinit
+#	dh_installcron
+#	dh_installinfo
+#	dh_undocumented
+	dh_installman
+	dh_strip
+	dh_link
+	dh_compress
+	dh_fixperms
+	dh_makeshlibs -V
+	dh_installdeb
+#	dh_perl
+	dh_shlibdeps
+	dh_gencontrol
+	dh_md5sums
+	dh_builddeb
+
+# Build architecture independant packages using the common target.
+binary-indep: build install
+#	$(MAKE) -f debian/rules DH_OPTIONS=-i binary-common
+
+# Build architecture dependant packages using the common target.
+binary-arch: build install
+	$(MAKE) -f debian/rules DH_OPTIONS=-a binary-common
+
+# Any other binary targets build just one binary package at a time.
+binary-%: build install
+	$(MAKE) -f debian/rules binary-common DH_OPTIONS=-p$*
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary install configure
diff --git a/Tremor/doc/OggVorbis_File.html b/Tremor/doc/OggVorbis_File.html
new file mode 100644
index 0000000..9201d18
--- /dev/null
+++ b/Tremor/doc/OggVorbis_File.html
@@ -0,0 +1,132 @@
+<html>
+
+<head>
+<title>Tremor - datatype - OggVorbis_File</title>
+<link rel=stylesheet href="style.css" type="text/css">
+</head>
+
+<body bgcolor=white text=black link="#5555ff" alink="#5555ff" vlink="#5555ff">
+<table border=0 width=100%>
+<tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+<h1>OggVorbis_File</h1>
+
+<p><i>declared in "ivorbisfile.h"</i></p>
+
+<p>
+The OggVorbis_File structure defines an Ogg Vorbis file.
+<p>
+
+This structure is used in all libvorbisidec routines.  Before it can be used,
+it must be initialized by <a href="ov_open.html">ov_open()</a> or <a
+href="ov_open_callbacks.html">ov_open_callbacks()</a>.
+
+<p>
+After use, the OggVorbis_File structure must be deallocated with a
+call to <a href="ov_clear.html">ov_clear()</a>.
+
+<p>
+Once a file or data source is opened successfully by libvorbisidec
+(using <a href="ov_open.html">ov_open()</a> or <a
+href="ov_open_callbacks.html">ov_open_callbacks()</a>), it is owned by
+libvorbisidec.  The file should not be used by any other applications or
+functions outside of the libvorbisidec API.  The file must not be closed
+directly by the application at any time after a successful open;
+libvorbisidec expects to close the file within <a
+href="ov_clear.html">ov_clear()</a>.
+<p>
+If the call to <a href="ov_open.html">ov_open()</a> or <a
+href="ov_open_callbacks.html">ov_open_callbacks()</a> <b>fails</b>,
+libvorbisidec does <b>not</b> assume ownership of the file and the
+application is expected to close it if necessary.
+
+<br><br>
+<table border=0 width=100% color=black cellspacing=0 cellpadding=7>
+<tr bgcolor=#cccccc>
+	<td>
+<pre><b>typedef struct {
+  void             *datasource; /* Pointer to a FILE *, etc. */
+  int              seekable;
+  ogg_int64_t      offset;
+  ogg_int64_t      end;
+  ogg_sync_state   oy; 
+
+  /* If the FILE handle isn't seekable (eg, a pipe), only the current
+     stream appears */
+  int              links;
+  ogg_int64_t      *offsets;
+  ogg_int64_t      *dataoffsets;
+  long             *serialnos;
+  ogg_int64_t      *pcmlengths;
+  vorbis_info      *vi;
+  vorbis_comment   *vc;
+
+  /* Decoding working state local storage */
+  ogg_int64_t      pcm_offset;
+  int              ready_state;
+  long             current_serialno;
+  int              current_link;
+
+  ogg_int64_t      bittrack;
+  ogg_int64_t      samptrack;
+
+  ogg_stream_state os; /* take physical pages, weld into a logical
+                          stream of packets */
+  vorbis_dsp_state vd; /* central working state for the packet->PCM decoder */
+  vorbis_block     vb; /* local working space for packet->PCM decode */
+
+  <a href="ov_callbacks.html">ov_callbacks</a> callbacks;
+
+} OggVorbis_File;</b></pre>
+	</td>
+</tr>
+</table>
+
+<h3>Relevant Struct Members</h3>
+<dl>
+<dt><i>datasource</i></dt>
+
+<dd>Pointer to file or other ogg source.  When using stdio based
+file/stream access, this field contains a <tt>FILE</tt> pointer. When using
+custom IO via callbacks, libvorbisidec treats this void pointer as a
+black box only to be passed to the callback routines provided by the
+application.</dd>
+
+<dt><i>seekable</i></dt>
+<dd>Read-only int indicating whether file is seekable. E.g., a physical file is seekable, a pipe isn't.</dd>
+<dt><i>links</i></dt>
+<dd>Read-only int indicating the number of logical bitstreams within the physical bitstream.</dd>
+<dt><i>ov_callbacks</i></dt>
+<dd>Collection of file manipulation routines to be used on this data source.  When using stdio/FILE access via <a href="ov_open.html">ov_open()</a>, the callbacks will be filled in with stdio calls or wrappers to stdio calls.</dd>
+</dl>
+
+<h3>Notes</h3>
+
+<p>Tremor requires a native 64 bit integer type to compile and
+function; The GNU build system will locate and typedef
+<tt>ogg_int64_t</tt> to the appropriate native type.  If not using the
+GNU build tools, you will need to define <tt>ogg_int64_t</tt> as a
+64-bit type inside your system's project file/Makefile, etc. On win32,
+for example, this should be defined as <tt>__int64</tt>. 
+<p>
+
+
+<br><br>
+<hr noshade>
+<table border=0 width=100%>
+<tr valign=top>
+<td><p class=tiny>copyright &copy; 2002 Xiph.org</p></td>
+<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a></p></td>
+</tr><tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+</body>
+
+</html>
diff --git a/Tremor/doc/build.html b/Tremor/doc/build.html
new file mode 100644
index 0000000..6f0f4ee
--- /dev/null
+++ b/Tremor/doc/build.html
@@ -0,0 +1,111 @@
+<html>
+
+<head>
+<title>Tremor - Build</title>
+<link rel=stylesheet href="style.css" type="text/css">
+</head>
+
+<body bgcolor=white text=black link="#5555ff" alink="#5555ff" vlink="#5555ff">
+<table border=0 width=100%>
+<tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+<h1>Tremor: Building libvorbisidec</h1>
+
+<p>
+
+The C source in the Tremor package will build on any ANSI C compiler
+and function completely and properly on any platform.  The included
+build system assumes GNU build system and make tools (m4, automake,
+autoconf, libtool and gmake).  GCC is not required, although GCC is
+the most tested compiler.  To build using GNU tools, type in the
+source directory:
+
+<p>
+<pre><tt>
+./autogen.sh
+gmake
+</tt></pre>
+<p>
+or if GNU make is the standard make on the build system:
+<pre><tt>
+./autogen.sh
+make
+</tt></pre>
+
+<p>
+Currently, the source implements playback in pure C on all platforms
+except ARM, where a [currently] small amount of assembly (see the file
+asm_arm.h) is used to implement 64 bit math operations and
+fast LSP computation.  If building on ARM without the benefit of GNU
+build system tools, be sure that <tt>_ARM_ASSEM_</tt> is #defined by
+the build system if this assembly is desired, else the resulting
+library will use whatever 64 bit math builtins the compiler
+implements.
+
+<p>
+No math library is required by this source.  No floating point
+operations are used at any point in either setup or decode.  This
+decoder library will properly decode any past, current or future
+Vorbis I file or stream.
+
+<p>
+The GNU build system produces static and, when supported by the OS,
+dynamic libraries named 'libvorbisidec'.  This library exposes an API
+nearly identical to the BSD reference library's 'libvorbisfile',
+including all the features familiar to users of vorbisfile.  This API
+is similar enough that the proper header file to include is named
+'ivorbisfile.h', included in the source build directory. 
+Lower level libvorbis-style headers and structures are
+in 'ivorbiscodec.h', also included in the source build directory. A
+simple example program, ivorbisfile_example.c, can be built with 'make
+ivorbisfile_example'.
+<p>
+(We've summarized <a href="diff.html">differences between the free,
+reference vorbisfile library and Tremor's libvorbisidec in a separate
+document</a>.)
+
+<h3>Notes</h3>
+
+<p>Tremor requires a native 64 bit integer type to compile and
+function; The GNU build system will locate and typedef
+<tt>ogg_int64_t</tt> to the appropriate native type.  If not using the
+GNU build tools, you will need to define <tt>ogg_int64_t</tt> as a
+64-bit type inside your system's project file/Makefile, etc. On win32,
+for example, this should be defined as <tt>__int64</tt>. 
+<p>
+
+<br><br>
+<hr noshade>
+<table border=0 width=100%>
+<tr valign=top>
+<td><p class=tiny>copyright &copy; 2002 Xiph.org</p></td>
+<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a></p></td>
+</tr><tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+</body>
+
+</html>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tremor/doc/callbacks.html b/Tremor/doc/callbacks.html
new file mode 100644
index 0000000..9a6d392
--- /dev/null
+++ b/Tremor/doc/callbacks.html
@@ -0,0 +1,113 @@
+<html>
+
+<head>
+<title>Tremor - Callbacks and non-stdio I/O</title>
+<link rel=stylesheet href="style.css" type="text/css">
+</head>
+
+<body bgcolor=white text=black link="#5555ff" alink="#5555ff" vlink="#5555ff">
+<table border=0 width=100%>
+<tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+<h1>Callbacks and non-stdio I/O</h1>
+
+Although stdio is convenient and nearly universally implemented as per
+ANSI C, it is not suited to all or even most potential uses of Vorbis.
+For additional flexibility, embedded applications may provide their
+own I/O functions for use with Tremor when stdio is unavailable or not
+suitable.  One common example is decoding a Vorbis stream from a
+memory buffer.<p>
+
+Use custom I/O functions by populating an <a
+href="ov_callbacks.html">ov_callbacks</a> structure and calling <a
+href="ov_open_callbacks.html">ov_open_callbacks()</a> or <a
+href="ov_test_callbacks.html">ov_test_callbacks()</a> rather than the
+typical <a href="ov_open.html">ov_open()</a> or <a
+href="ov_test.html">ov_test()</a>.  Past the open call, use of
+libvorbisidec is identical to using it with stdio.
+
+<h2>Read function</h2> 
+
+The read-like function provided in the <tt>read_func</tt> field is
+used to fetch the requested amount of data.  It expects the fetch
+operation to function similar to file-access, that is, a multiple read
+operations will retrieve contiguous sequential pieces of data,
+advancing a position cursor after each read.<p>
+
+The following behaviors are also expected:<p>
+<ul>
+<li>a return of '0' indicates end-of-data (if the by-thread errno is unset)
+<li>short reads mean nothing special (short reads are not treated as error conditions)
+<li>a return of zero with the by-thread errno set to nonzero indicates a read error
+</ul>
+<p>
+
+<h2>Seek function</h2> 
+
+The seek-like function provided in the <tt>seek_func</tt> field is
+used to request non-sequential data access by libvorbisidec, moving
+the access cursor to the requested position.<p>
+
+libvorbisidec expects the following behavior:
+<ul>
+<li>The seek function must always return -1 (failure) if the given
+data abstraction is not seekable.  It may choose to always return -1
+if the application desires libvorbisidec to treat the Vorbis data
+strictly as a stream (which makes for a less expensive open
+operation).<p>
+
+<li>If the seek function initially indicates seekability, it must
+always succeed upon being given a valid seek request.<p>
+
+<li>The seek function must implement all of SEEK_SET, SEEK_CUR and
+SEEK_END.  The implementation of SEEK_END should set the access cursor
+one past the last byte of accessible data, as would stdio
+<tt>fseek()</tt><p>
+</ul>
+
+<h2>Close function</h2>
+
+The close function should deallocate any access state used by the
+passed in instance of the data access abstraction and invalidate the
+instance handle.  The close function is assumed to succeed.<p>
+
+One common use of callbacks and the close function is to change the
+behavior of libvorbisidec with respect to file closure for applications
+that <em>must</em> <tt>fclose</tt> data files themselves. By passing
+the normal stdio calls as callback functions, but passing a
+<tt>close_func</tt> that does nothing, an application may call <a
+href="ov_clear.html">ov_clear()</a> and then <tt>fclose()</tt> the
+file originally passed to libvorbisidec.
+
+<h2>Tell function</h2> 
+
+The tell function is intended to mimic the
+behavior of <tt>ftell()</tt> and must return the byte position of the
+next data byte that would be read.  If the data access cursor is at
+the end of the 'file' (pointing to one past the last byte of data, as
+it would be after calling <tt>fseek(file,SEEK_END,0)</tt>), the tell
+function must return the data position (and thus the total file size),
+not an error.<p>
+
+The tell function need not be provided if the data IO abstraction is
+not seekable.<p.
+
+<br><br>
+<hr noshade>
+<table border=0 width=100%>
+<tr valign=top>
+<td><p class=tiny>copyright &copy; 2002 Xiph.org</p></td>
+<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a></p></td>
+</tr><tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+</body>
+
+</html>
diff --git a/Tremor/doc/datastructures.html b/Tremor/doc/datastructures.html
new file mode 100644
index 0000000..2b3da07
--- /dev/null
+++ b/Tremor/doc/datastructures.html
@@ -0,0 +1,61 @@
+<html>
+
+<head>
+<title>Tremor - Base Data Structures</title>
+<link rel=stylesheet href="style.css" type="text/css">
+</head>
+
+<body bgcolor=white text=black link="#5555ff" alink="#5555ff" vlink="#5555ff">
+<table border=0 width=100%>
+<tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+<h1>Base Data Structures</h1>
+<p>There are several data structures used to hold file and bitstream information during libvorbisidec decoding. These structures are declared in "ivorbisfile.h" and "ivorbiscodec.h".
+<p>
+<p>When using libvorbisidec, it's not necessary to know about most of the contents of these data structures, but it may be helpful to understand what they contain.
+<br><br>
+
+<table border=1 color=black width=50% cellspacing=0 cellpadding=7>
+<tr bgcolor=#cccccc>
+	<td><b>datatype</b></td>
+	<td><b>purpose</b></td>
+</tr>
+<tr valign=top>
+	<td><a href="OggVorbis_File.html">OggVorbis_File</a></td>
+	<td>This structure represents the basic file information. It contains 
+	a pointer to the physical file or bitstream and various information about that bitstream.</td>
+</tr>
+<tr valign=top>
+<td><a href="vorbis_comment.html">vorbis_comment</a></td>
+	<td>This structure contains the file comments. It contains 
+	a pointer to unlimited user comments, information about the number of comments, and a vendor description.</td>
+</tr>
+<tr valign=top>
+<td><a href="vorbis_info.html">vorbis_info</a></td>
+	<td>This structure contains encoder-related information about the bitstream.  It includes encoder info, channel info, and bitrate limits.</td>
+</tr>
+<tr valign=top>
+<td><a href="ov_callbacks.html">ov_callbacks</a></td>
+	<td>This structure contains pointers to the application-specified file manipulation routines set for use by <a href="ov_open_callbacks.html">ov_open_callbacks()</a>. See also the <a href="callbacks.html">provided document on using application-provided callbacks instead of stdio</a>.</td>
+</tr>
+</table>
+
+<br><br>
+<hr noshade>
+<table border=0 width=100%>
+<tr valign=top>
+<td><p class=tiny>copyright &copy; 2002 Xiph.org</p></td>
+<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a></p></td>
+</tr><tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+</body>
+
+</html>
diff --git a/Tremor/doc/decoding.html b/Tremor/doc/decoding.html
new file mode 100644
index 0000000..1f61b47
--- /dev/null
+++ b/Tremor/doc/decoding.html
@@ -0,0 +1,82 @@
+<html>
+
+<head>
+<title>Tremor - Decoding</title>
+<link rel=stylesheet href="style.css" type="text/css">
+</head>
+
+<body bgcolor=white text=black link="#5555ff" alink="#5555ff" vlink="#5555ff">
+<table border=0 width=100%>
+<tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+<h1>Decoding</h1>
+
+<p>
+All libivorbisdec decoding routines are declared in "ivorbisfile.h".
+<p>
+
+After <a href="initialization.html">initialization</a>, decoding audio
+is as simple as calling <a href="ov_read.html">ov_read()</a>. This
+function works similarly to reading from a normal file using
+<tt>read()</tt>.<p>
+
+However, a few differences are worth noting:
+
+<h2>multiple stream links</h2>
+
+A Vorbis stream may consist of multiple sections (called links) that
+encode differing numbers of channels or sample rates.  It is vitally
+important to pay attention to the link numbers returned by <a
+href="ov_read.html">ov_read</a> and handle audio changes that may
+occur at link boundaries.  Such multi-section files do exist in the
+wild and are not merely a specification curiosity.
+
+<h2>returned data amount</h2>
+
+<a href="ov_read.html">ov_read</a> does not attempt to completely fill
+a large, passed in data buffer; it merely guarantees that the passed
+back data does not overflow the passed in buffer size.  Large buffers
+may be filled by iteratively looping over calls to <a
+href="ov_read.html">ov_read</a> (incrementing the buffer pointer)
+until the original buffer is filled.
+
+<h2>file cursor position</h2>
+
+Vorbis files do not necessarily start at a sample number or time offset
+of zero.  Do not be surprised if a file begins at a positive offset of
+several minutes or hours, such as would happen if a large stream (such
+as a concert recording) is chopped into multiple seperate files.
+
+<p>
+<table border=1 color=black width=50% cellspacing=0 cellpadding=7>
+<tr bgcolor=#cccccc>
+	<td><b>function</b></td>
+	<td><b>purpose</b></td>
+</tr>
+<tr valign=top>
+	<td><a href="ov_read.html">ov_read</a></td>
+	<td>This function makes up the main chunk of a decode loop. It takes an
+OggVorbis_File structure, which must have been initialized by a previous
+call to <a href="ov_open.html"><tt>ov_open()</tt></a>.</td>
+</tr>
+</table>
+
+<br><br>
+<hr noshade>
+<table border=0 width=100%>
+<tr valign=top>
+<td><p class=tiny>copyright &copy; 2002 Xiph.org</p></td>
+<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a></p></td>
+</tr><tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+</body>
+
+</html>
diff --git a/Tremor/doc/diff.html b/Tremor/doc/diff.html
new file mode 100644
index 0000000..ae0b908
--- /dev/null
+++ b/Tremor/doc/diff.html
@@ -0,0 +1,67 @@
+<html>
+
+<head>
+<title>Tremor - Vorbisfile Differences</title>
+<link rel=stylesheet href="style.css" type="text/css">
+</head>
+
+<body bgcolor=white text=black link="#5555ff" alink="#5555ff" vlink="#5555ff">
+<table border=0 width=100%>
+<tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+<h1>Tremor / Vorbisfile API Differences</h1>
+
+<p>
+
+The Tremor libvorbisidec library exposes an API intended to be as
+similar as possible to the familiar 'vorbisfile' library included with
+the open source Vorbis reference libraries distributed for free by
+Xiph.org. Differences are summarized below.<p>
+
+<h2>OggVorbis_File structure</h2>
+
+The <tt>bittrack</tt> and <tt>samptrack</tt> fields in the <a
+href="OggVorbis_File.html">OggVorbis_File</a> structure are changed to
+64 bit integers in Tremor, from doubles in vorbisfile.
+
+<h2>Time-related seek and tell function calls</h2>
+
+The <a href="ov_time_total.html">ov_time_total()</a> and <a
+href="ov_time_tell.html">ov_time_tell()</a> functions return milliseconds as 
+64 bit integers in Tremor.  In vorbisfile, these functions returned
+seconds as doubles.<p>
+
+In Tremor, the <a href="ov_time_seek.html">ov_time_seek()</a> and <a
+href="ov_time_seek_page.html">ov_time_seek_page()</a> calls take
+seeking positions in milliseconds as 64 bit integers, rather than in
+seconds as doubles as in Vorbisfile.<p>
+
+<h2>Reading decoded data</h2>
+
+Tremor <a href="ov_read.html">ov_read()</a> always returns data as
+signed 16 bit interleaved PCM in host byte order. As such, it does not
+take arguments to request specific signedness, byte order or bit depth
+as in Vorbisfile.<p>
+
+Tremor does not implement <tt>ov_read_float()</tt>.<p>
+
+
+<br><br>
+<hr noshade>
+<table border=0 width=100%>
+<tr valign=top>
+<td><p class=tiny>copyright &copy; 2002 Xiph.org</p></td>
+<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a></p></td>
+</tr><tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+</body>
+
+</html>
diff --git a/Tremor/doc/example.html b/Tremor/doc/example.html
new file mode 100644
index 0000000..2b9a1dd
--- /dev/null
+++ b/Tremor/doc/example.html
@@ -0,0 +1,205 @@
+<html>
+
+<head>
+<title>Tremor - Example Code</title>
+<link rel=stylesheet href="style.css" type="text/css">
+</head>
+
+<body bgcolor=white text=black link="#5555ff" alink="#5555ff" vlink="#5555ff">
+<table border=0 width=100%>
+<tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+<h1>Example Code</h1>
+
+<p>
+The following is a run-through of the decoding example program supplied
+with libvorbisidec, ivorbisfile_example.c.  
+This program takes a vorbis bitstream from stdin and writes raw pcm to stdout.
+
+<p>
+First, relevant headers, including vorbis-specific "ivorbiscodec.h" and "ivorbisfile.h" have to be included.
+
+<br><br>
+<table border=0 width=100% color=black cellspacing=0 cellpadding=7>
+<tr bgcolor=#cccccc>
+	<td>
+<pre><b>
+#include &lt;stdio.h&gt;
+#include &lt;stdlib.h&gt;
+#include &lt;math.h&gt;
+#include "ivorbiscodec.h"
+#include "ivorbisfile.h"
+</b></pre>
+	</td>
+</tr>
+</table>
+<p>
+We also have to make a concession to Windows users here.  If we are using windows for decoding, we must declare these libraries so that we can set stdin/stdout to binary.
+<br><br>
+<table border=0 width=100% color=black cellspacing=0 cellpadding=7>
+<tr bgcolor=#cccccc>
+	<td>
+<pre><b>
+#ifdef _WIN32
+#include &lt;io.h&gt;
+#include &lt;fcntl.h&gt;
+#endif
+</b></pre>
+	</td>
+</tr>
+</table>
+<p>
+Next, a buffer for the pcm audio output is declared.
+
+<br><br>
+<table border=0 width=100% color=black cellspacing=0 cellpadding=7>
+<tr bgcolor=#cccccc>
+        <td>
+<pre><b>
+char pcmout[4096];
+</b></pre>
+        </td>
+</tr>
+</table>
+
+<p>Inside main(), we declare our primary OggVorbis_File structure.  We also declare a few other helpful variables to track out progress within the file.
+Also, we make our final concession to Windows users by setting the stdin and stdout to binary mode.
+<br><br>
+<table border=0 width=100% color=black cellspacing=0 cellpadding=7>
+<tr bgcolor=#cccccc>
+        <td>
+<pre><b>
+int main(int argc, char **argv){
+  OggVorbis_File vf;
+  int eof=0;
+  int current_section;
+
+#ifdef _WIN32
+  _setmode( _fileno( stdin ), _O_BINARY );
+  _setmode( _fileno( stdout ), _O_BINARY );
+#endif
+</b></pre>
+        </td>
+</tr>
+</table>
+
+<p><a href="ov_open.html">ov_open()</a> must be
+called to initialize the <b>OggVorbis_File</b> structure with default values.  
+<a href="ov_open.html">ov_open()</a> also checks to ensure that we're reading Vorbis format and not something else.
+
+<br><br>
+<table border=0 width=100% color=black cellspacing=0 cellpadding=7>
+<tr bgcolor=#cccccc>
+        <td>
+<pre><b>
+  if(ov_open(stdin, &vf, NULL, 0) < 0) {
+      fprintf(stderr,"Input does not appear to be an Ogg bitstream.\n");
+      exit(1);
+  }
+
+</b></pre>
+        </td>
+</tr>
+</table>
+
+<p>
+We're going to pull the channel and bitrate info from the file using <a href="ov_info.html">ov_info()</a> and show them to the user.
+We also want to pull out and show the user a comment attached to the file using <a href="ov_comment.html">ov_comment()</a>.
+
+<br><br>
+<table border=0 width=100% color=black cellspacing=0 cellpadding=7>
+<tr bgcolor=#cccccc>
+        <td>
+<pre><b>
+  {
+    char **ptr=ov_comment(&vf,-1)->user_comments;
+    vorbis_info *vi=ov_info(&vf,-1);
+    while(*ptr){
+      fprintf(stderr,"%s\n",*ptr);
+      ++ptr;
+    }
+    fprintf(stderr,"\nBitstream is %d channel, %ldHz\n",vi->channels,vi->rate);
+    fprintf(stderr,"\nDecoded length: %ld samples\n",
+            (long)ov_pcm_total(&vf,-1));
+    fprintf(stderr,"Encoded by: %s\n\n",ov_comment(&vf,-1)->vendor);
+  }
+  
+</b></pre>
+        </td>
+</tr>
+</table>
+
+<p>
+Here's the read loop:
+
+<br><br>
+<table border=0 width=100% color=black cellspacing=0 cellpadding=7>
+<tr bgcolor=#cccccc>
+        <td>
+<pre><b>
+
+  while(!eof){
+    long ret=ov_read(&vf,pcmout,sizeof(pcmout),&current_section);
+    if (ret == 0) {
+      /* EOF */
+      eof=1;
+    } else if (ret < 0) {
+      /* error in the stream.  Not a problem, just reporting it in
+	 case we (the app) cares.  In this case, we don't. */
+    } else {
+      /* we don't bother dealing with sample rate changes, etc, but
+	 you'll have to*/
+      fwrite(pcmout,1,ret,stdout);
+    }
+  }
+
+  
+</b></pre>
+        </td>
+</tr>
+</table>
+
+<p>
+The code is reading blocks of data using <a href="ov_read.html">ov_read()</a>.
+Based on the value returned, we know if we're at the end of the file or have invalid data.  If we have valid data, we write it to the pcm output.
+
+<p>
+Now that we've finished playing, we can pack up and go home.  It's important to call <a href="ov_clear.html">ov_clear()</a> when we're finished.
+
+<br><br>
+<table border=0 width=100% color=black cellspacing=0 cellpadding=7>
+<tr bgcolor=#cccccc>
+        <td>
+<pre><b>
+
+  ov_clear(&vf);
+    
+  fprintf(stderr,"Done.\n");
+  return(0);
+}
+</b></pre>
+        </td>
+</tr>
+</table>
+
+<p>
+
+<br><br>
+<hr noshade>
+<table border=0 width=100%>
+<tr valign=top>
+<td><p class=tiny>copyright &copy; 2002 Xiph.org</p></td>
+<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a></p></td>
+</tr><tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+</body>
+
+</html>
diff --git a/Tremor/doc/fileinfo.html b/Tremor/doc/fileinfo.html
new file mode 100644
index 0000000..53dfd38
--- /dev/null
+++ b/Tremor/doc/fileinfo.html
@@ -0,0 +1,95 @@
+<html>
+
+<head>
+<title>Tremor - File Information</title>
+<link rel=stylesheet href="style.css" type="text/css">
+</head>
+
+<body bgcolor=white text=black link="#5555ff" alink="#5555ff" vlink="#5555ff">
+<table border=0 width=100%>
+<tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+<h1>File Information</h1>
+<p>Libvorbisidec contains many functions to get information about bitstream attributes and decoding status.
+<p>
+All libvorbisidec file information routines are declared in "ivorbisfile.h".
+<p>
+
+<table border=1 color=black width=50% cellspacing=0 cellpadding=7>
+<tr bgcolor=#cccccc>
+	<td><b>function</b></td>
+	<td><b>purpose</b></td>
+</tr>
+<tr valign=top>
+	<td><a href="ov_bitrate.html">ov_bitrate</a></td>
+	<td>Returns the average bitrate of the current logical bitstream.</td>
+</tr>
+<tr valign=top>
+	<td><a href="ov_bitrate_instant.html">ov_bitrate_instant</a></td>
+	<td>Returns the exact bitrate since the last call of this function, or -1 if at the beginning of the bitream or no new information is available.</td>
+</tr>
+<tr valign=top>
+	<td><a href="ov_streams.html">ov_streams</a></td>
+	<td>Gives the number of logical bitstreams within the current physical bitstream.</td>
+</tr>
+<tr valign=top>
+	<td><a href="ov_seekable.html">ov_seekable</a></td>
+	<td>Indicates whether the bitstream is seekable.</td>
+</tr>
+<tr valign=top>
+	<td><a href="ov_serialnumber.html">ov_serialnumber</a></td>
+	<td>Returns the unique serial number of the specified logical bitstream.</td>
+</tr>
+<tr valign=top>
+	<td><a href="ov_raw_total.html">ov_raw_total</a></td>
+	<td>Returns the total (compressed) bytes in a physical or logical seekable bitstream.</td>
+</tr>
+<tr valign=top>
+	<td><a href="ov_pcm_total.html">ov_pcm_total</a></td>
+	<td>Returns the total number of samples in a physical or logical seekable bitstream.</td>
+</tr>
+<tr valign=top>
+	<td><a href="ov_time_total.html">ov_time_total</a></td>
+	<td>Returns the total time length in seconds of a physical or logical seekable bitstream.</td>
+</tr>
+<tr valign=top>
+	<td><a href="ov_raw_tell.html">ov_raw_tell</a></td>
+	<td>Returns the byte location of the next sample to be read, giving the approximate location in the stream that the decoding engine has reached.</td>
+</tr>
+<tr valign=top>
+	<td><a href="ov_pcm_tell.html">ov_pcm_tell</a></td>
+	<td>Returns the sample location of the next sample to be read, giving the approximate location in the stream that the decoding engine has reached.</td>
+</tr>
+<tr valign=top>
+	<td><a href="ov_time_tell.html">ov_time_tell</a></td>
+	<td>Returns the time location of the next sample to be read, giving the approximate location in the stream that the decoding engine has reached.</td>
+</tr>
+<tr valign=top>
+	<td><a href="ov_info.html">ov_info</a></td>
+	<td>Returns the <a href="vorbis_info.html">vorbis_info</a> struct for a specific bitstream section.</td>
+</tr>
+<tr valign=top>
+	<td><a href="ov_comment.html">ov_comment</a></td>
+	<td>Returns attached <a href="vorbis_comment.html">comments</a> for the current bitstream.</td>
+</tr>
+</table>
+
+<br><br>
+<hr noshade>
+<table border=0 width=100%>
+<tr valign=top>
+<td><p class=tiny>copyright &copy; 2002 Xiph.org</p></td>
+<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a></p></td>
+</tr><tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+</body>
+
+</html>
diff --git a/Tremor/doc/index.html b/Tremor/doc/index.html
new file mode 100644
index 0000000..671f13f
--- /dev/null
+++ b/Tremor/doc/index.html
@@ -0,0 +1,53 @@
+<html>
+
+<head>
+<title>Tremor - Documentation</title>
+<link rel=stylesheet href="style.css" type="text/css">
+</head>
+
+<body bgcolor=white text=black link="#5555ff" alink="#5555ff" vlink="#5555ff">
+<table border=0 width=100%>
+<tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+<h1>Tremor Documentation</h1>
+
+<p>
+
+The Tremor Vorbis I stream and file decoder provides an embeddable,
+integer-only library [libvorbisidec] intended for decoding all current
+and future Vorbis I compliant streams.  The Tremor libvorbisidec
+library exposes an API intended to be as similar as possible to the
+familiar 'vorbisfile' library included with the open source Vorbis
+reference libraries distributed for free by Xiph.org. <p>
+
+Tremor can be used along with any ANSI compliant stdio implementation
+for file/stream access, or use custom stream i/o routines provided by
+the embedded environment.  Both uses are described in detail in this
+documentation.
+
+<p>
+<a href="build.html">Building libvorbisidec</a><br>
+<a href="overview.html">API overview</a><br>
+<a href="reference.html">API reference</a><br>
+<a href="example.html">Example code</a><br>
+<a href="diff.html">Tremor / vorbisfile API differences</a><br>
+
+<br><br>
+<hr noshade>
+<table border=0 width=100%>
+<tr valign=top>
+<td><p class=tiny>copyright &copy; 2002 Xiph.org</p></td>
+<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a></p></td>
+</tr><tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+</body>
+
+</html>
diff --git a/Tremor/doc/initialization.html b/Tremor/doc/initialization.html
new file mode 100644
index 0000000..f9f6807
--- /dev/null
+++ b/Tremor/doc/initialization.html
@@ -0,0 +1,101 @@
+<html>
+
+<head>
+<title>Tremor - Setup/Teardown</title>
+<link rel=stylesheet href="style.css" type="text/css">
+</head>
+
+<body bgcolor=white text=black link="#5555ff" alink="#5555ff" vlink="#5555ff">
+<table border=0 width=100%>
+<tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+<H1>Setup/Teardown</h1> <p>In order to decode audio using
+libvorbisidec, a bitstream containing Vorbis audio must be properly
+initialized before decoding and cleared when decoding is finished.
+The simplest possible case is to use <tt>fopen()</tt> to open a Vorbis
+file and then pass the <tt>FILE *</tt> to an <a
+href="ov_open.html">ov_open()</a> call.  A successful <a
+href="return.html">return code</a> from <a
+href="ov_open.html">ov_open()</a> indicates the file is ready for use.
+Once the file is no longer needed, <a
+href="ov_clear.html">ov_clear()</a> is used to close the file and
+deallocate decoding resources.  </b>Do not</b> call <tt>fclose()</tt> on the
+file; libvorbisidec does this in the <a
+href="ov_clear.html">ov_clear()</a> call.
+
+<p>
+All libvorbisidec initialization and deallocation routines are declared in "ivorbisfile.h".
+<p>
+
+<table border=1 color=black width=50% cellspacing=0 cellpadding=7>
+<tr bgcolor=#cccccc>
+	<td><b>function</b></td>
+	<td><b>purpose</b></td>
+</tr>
+<tr valign=top>
+	<td><a href="ov_open.html">ov_open</a></td>
+	<td>Initializes the Ogg Vorbis bitstream with a pointer to a bitstream and default values.  This must be called before other functions in the library may be
+	used.</td>
+</tr>
+<tr valign=top>
+	<td><a href="ov_open_callbacks.html">ov_open_callbacks</a></td>
+	<td>Initializes the Ogg Vorbis bitstream with a pointer to a bitstream, default values, and custom file/bitstream manipulation routines.  Used instead of <a href="ov_open.html">ov_open()</a> when working with other than stdio based I/O.</td>
+</tr>
+
+<tr valign=top>
+<td><a href="ov_test.html">ov_test</a></td> 
+
+<td>Partially opens a file just far enough to determine if the file
+is an Ogg Vorbis file or not.  A successful return indicates that the
+file appears to be an Ogg Vorbis file, but the <a
+href="OggVorbis_File.html">OggVorbis_File</a> struct is not yet fully
+initialized for actual decoding.  After a <a href="return.html">successful return</a>, the file
+may be closed using <a href="ov_clear.html">ov_clear()</a> or fully
+opened for decoding using <a
+href="ov_test_open.html">ov_test_open()</a>.<p> This call is intended to
+be used as a less expensive file open test than a full <a
+href="ov_open.html">ov_open()</a>.<p>
+Note that libvorbisidec owns the passed in file resource is it returns success; do not <tt>fclose()</tt> files owned by libvorbisidec.</td>
+
+</tr>
+<tr valign=top>
+<td><a href="ov_test_callbacks.html">ov_test_callbacks</a></td>
+<td>As above but allowing application-define I/O callbacks.<p>
+Note that libvorbisidec owns the passed in file resource is it returns success; do not <tt>fclose()</tt> files owned by libvorbisidec.</td>
+
+</tr>
+<tr valign=top>
+<td><a href="ov_test_open.html">ov_test_open</a><td>
+Finish opening a file after a successful call to <a href="ov_test.html">ov_test()</a> or <a href="ov_test_callbacks.html">ov_test_callbacks()</a>.</td>
+</tr>
+<tr valign=top>
+	<td><a href="ov_clear.html">ov_clear</a></td> <td>Closes the
+	bitstream and cleans up loose ends.  Must be called when
+	finished with the bitstream.  After return, the <a
+	href="OggVorbis_File.html">OggVorbis_File</a> struct is
+	invalid and may not be used before being initialized again
+	before begin reinitialized.
+
+</td>
+</tr>
+</table>
+
+<br><br>
+<hr noshade>
+<table border=0 width=100%>
+<tr valign=top>
+<td><p class=tiny>copyright &copy; 2002 Xiph.org</p></td>
+<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a></p></td>
+</tr><tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+</body>
+
+</html>
diff --git a/Tremor/doc/ov_bitrate.html b/Tremor/doc/ov_bitrate.html
new file mode 100644
index 0000000..65ebfc3
--- /dev/null
+++ b/Tremor/doc/ov_bitrate.html
@@ -0,0 +1,72 @@
+<html>
+
+<head>
+<title>Tremor - function - ov_bitrate</title>
+<link rel=stylesheet href="style.css" type="text/css">
+</head>
+
+<body bgcolor=white text=black link="#5555ff" alink="#5555ff" vlink="#5555ff">
+<table border=0 width=100%>
+<tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+<h1>ov_bitrate</h1>
+
+<p><i>declared in "ivorbisfile.h";</i></p>
+
+<p>This function returns the average bitrate for the specified logical bitstream.  This may be different from the <a href=ov_info.html>ov_info->nominal_bitrate</a> value, as it is based on the actual average for this bitstream if the file is seekable.
+<p>Nonseekable files will return the nominal bitrate setting or the average of the upper and lower bounds, if any of these values are set.
+<p>
+
+<br><br>
+<table border=0 color=black cellspacing=0 cellpadding=7>
+<tr bgcolor=#cccccc>
+	<td>
+<pre><b>
+long ov_bitrate(OggVorbis_File *vf,int i);
+</b></pre>
+	</td>
+</tr>
+</table>
+
+<h3>Parameters</h3>
+<dl>
+<dt><i>vf</i></dt>
+<dd>A pointer to the OggVorbis_File structure--this is used for ALL the externally visible libvorbisidec
+functions.</dd>
+<dt><i>i</i></dt>
+<dd>Link to the desired logical bitstream.  For nonseekable files, this argument is ignored.  To retrieve the bitrate for the entire bitstream, this parameter should be set to -1.</dd>
+</dl>
+
+
+<h3>Return Values</h3>
+<blockquote>
+<li>OV_EINVAL indicates that an invalid argument value was submitted or that the stream represented by <tt>vf</tt> is not open.</li>
+<li>OV_FALSE means the call returned a 'false' status, which in this case most likely indicates that the file is nonseekable and the upper, lower, and nominal bitrates were unset.
+<li><i>n</i> indicates the bitrate for the given logical bitstream or the entire
+   physical bitstream.  If the file is open for random (seekable) access, it will
+   find the *actual* average bitrate.  If the file is streaming (nonseekable), it
+   returns the nominal bitrate (if set) or else the average of the
+   upper/lower bounds (if set).</li>
+</blockquote>
+<p>
+
+
+<br><br>
+<hr noshade>
+<table border=0 width=100%>
+<tr valign=top>
+<td><p class=tiny>copyright &copy; 2002 Xiph.org</p></td>
+<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a></p></td>
+</tr><tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+</body>
+
+</html>
diff --git a/Tremor/doc/ov_bitrate_instant.html b/Tremor/doc/ov_bitrate_instant.html
new file mode 100644
index 0000000..874671f
--- /dev/null
+++ b/Tremor/doc/ov_bitrate_instant.html
@@ -0,0 +1,65 @@
+<html>
+
+<head>
+<title>Tremor - function - ov_bitrate</title>
+<link rel=stylesheet href="style.css" type="text/css">
+</head>
+
+<body bgcolor=white text=black link="#5555ff" alink="#5555ff" vlink="#5555ff">
+<table border=0 width=100%>
+<tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+<h1>ov_bitrate_instant</h1>
+
+<p><i>declared in "ivorbisfile.h";</i></p>
+
+<p>Used to find the most recent bitrate played back within the file.  Will return 0 if the bitrate has not changed or it is the beginning of the file.
+
+<br><br>
+<table border=0 color=black cellspacing=0 cellpadding=7>
+<tr bgcolor=#cccccc>
+	<td>
+<pre><b>
+long ov_bitrate_instant(OggVorbis_File *vf);
+</b></pre>
+	</td>
+</tr>
+</table>
+
+<h3>Parameters</h3>
+<dl>
+<dt><i>vf</i></dt>
+<dd>A pointer to the OggVorbis_File structure--this is used for ALL the externally visible libvorbisidec
+functions.
+</dl>
+
+
+<h3>Return Values</h3>
+<blockquote>
+<li>0 indicates the beginning of the file or unchanged bitrate info.</li>
+<li><i>n</i> indicates the actual bitrate since the last call.</li>
+<li>OV_FALSE indicates that playback is not in progress, and thus there is no instantaneous bitrate information to report.</li>
+<li>OV_EINVAL indicates that the stream represented by <tt>vf</tt> is not open.</li>
+</blockquote>
+<p>
+
+
+<br><br>
+<hr noshade>
+<table border=0 width=100%>
+<tr valign=top>
+<td><p class=tiny>copyright &copy; 2002 Xiph.org</p></td>
+<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a></p></td>
+</tr><tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+</body>
+
+</html>
diff --git a/Tremor/doc/ov_callbacks.html b/Tremor/doc/ov_callbacks.html
new file mode 100644
index 0000000..776352d
--- /dev/null
+++ b/Tremor/doc/ov_callbacks.html
@@ -0,0 +1,78 @@
+<html>
+
+<head>
+<title>Tremor - datatype - ov_callbacks</title>
+<link rel=stylesheet href="style.css" type="text/css">
+</head>
+
+<body bgcolor=white text=black link="#5555ff" alink="#5555ff" vlink="#5555ff">
+<table border=0 width=100%>
+<tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+<h1>ov_callbacks</h1>
+
+<p><i>declared in "ivorbiscodec.h"</i></p>
+
+<p>
+The ov_callbacks structure contains file manipulation function prototypes necessary for opening, closing, seeking, and location.
+
+<p>
+The ov_callbacks structure does not need to be user-defined if you are
+working with stdio-based file manipulation; the <a
+href="ov_open.html">ov_open()</a> call provides default callbacks for
+stdio.  ov_callbacks are defined and passed to <a
+href="ov_open_callbacks.html">ov_open_callbacks()</a> when
+implementing non-stdio based stream manipulation (such as playback
+from a memory buffer).
+<p>
+
+<table border=0 width=100% color=black cellspacing=0 cellpadding=7>
+<tr bgcolor=#cccccc>
+	<td>
+<pre><b>typedef struct {
+  size_t (*read_func)  (void *ptr, size_t size, size_t nmemb, void *datasource);
+  int    (*seek_func)  (void *datasource, ogg_int64_t offset, int whence);
+  int    (*close_func) (void *datasource);
+  long   (*tell_func)  (void *datasource);
+} ov_callbacks;</b></pre>
+	</td>
+</tr>
+</table>
+
+<h3>Relevant Struct Members</h3>
+<dl>
+<dt><i>read_func</i></dt>
+<dd>Pointer to custom data reading function.</dd>
+<dt><i>seek_func</i></dt>
+<dd>Pointer to custom data seeking function. If the data source is not seekable (or the application wants the data source to be treated as unseekable at all times), the provided seek callback should always return -1 (failure).</dd>
+<dt><i>close_func</i></dt>
+<dd>Pointer to custom data source closure function.</dd>
+<dt><i>tell_func</i></dt>
+<dd>Pointer to custom data location function.</dd>
+</dl>
+
+<p>
+
+See <a href="callbacks.html">the callbacks and non-stdio I/O document</a> for more
+detailed information on required behavior of the various callback
+functions.<p>
+
+<br><br>
+<hr noshade>
+<table border=0 width=100%>
+<tr valign=top>
+<td><p class=tiny>copyright &copy; 2002 Xiph.org</p></td>
+<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a></p></td>
+</tr><tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+</body>
+
+</html>
diff --git a/Tremor/doc/ov_clear.html b/Tremor/doc/ov_clear.html
new file mode 100644
index 0000000..7c51bb7
--- /dev/null
+++ b/Tremor/doc/ov_clear.html
@@ -0,0 +1,64 @@
+<html>
+
+<head>
+<title>Tremor - function - ov_clear</title>
+<link rel=stylesheet href="style.css" type="text/css">
+</head>
+
+<body bgcolor=white text=black link="#5555ff" alink="#5555ff" vlink="#5555ff">
+<table border=0 width=100%>
+<tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+<h1>ov_clear</h1>
+
+<p><i>declared in "ivorbisfile.h";</i></p>
+
+<p> After a bitstream has been opened using <a href="ov_open.html">ov_open()</a>/<a href="ov_open_callbacks.html">ov_open_callbacks()</a> and decoding is complete, the application must call <tt>ov_clear()</tt> to clear
+the decoder's buffers and close the file.<p>
+
+<tt>ov_clear()</tt> must also be called after a successful call to <a href="ov_test.html">ov_test()</a> or <a href="ov_test_callbacks.html">ov_test_callbacks()</a>.<p>
+
+<br><br>
+<table border=0 color=black cellspacing=0 cellpadding=7>
+<tr bgcolor=#cccccc>
+	<td>
+<pre><b>
+int ov_clear(OggVorbis_File *vf);
+</b></pre>
+	</td>
+</tr>
+</table>
+
+<h3>Parameters</h3>
+<dl>
+<dt><i>vf</i></dt>
+<dd>A pointer to the OggVorbis_File structure--this is used for ALL the externally visible libvorbisidec
+functions.  After <tt>ov_clear</tt> has been called, the structure is deallocated and can no longer be used.</dd>
+</dl>
+
+
+<h3>Return Values</h3>
+<blockquote>
+<li>0 for success</li>
+</blockquote>
+
+
+<br><br>
+<hr noshade>
+<table border=0 width=100%>
+<tr valign=top>
+<td><p class=tiny>copyright &copy; 2002 Xiph.org</p></td>
+<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a></p></td>
+</tr><tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+</body>
+
+</html>
diff --git a/Tremor/doc/ov_comment.html b/Tremor/doc/ov_comment.html
new file mode 100644
index 0000000..5d9cc0b
--- /dev/null
+++ b/Tremor/doc/ov_comment.html
@@ -0,0 +1,66 @@
+<html>
+
+<head>
+<title>Tremor - function - ov_bitrate</title>
+<link rel=stylesheet href="style.css" type="text/css">
+</head>
+
+
+<body bgcolor=white text=black link="#5555ff" alink="#5555ff" vlink="#5555ff">
+<table border=0 width=100%>
+<tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+<h1>ov_comment</h1>
+
+<p><i>declared in "ivorbisfile.h";</i></p>
+
+<p>Returns a pointer to the <a href="vorbis_comment.html">vorbis_comment</a> struct for the specified bitstream.  For nonseekable streams, returns the struct for the current bitstream.
+<p>
+
+<br><br>
+<table border=0 color=black cellspacing=0 cellpadding=7>
+<tr bgcolor=#cccccc>
+	<td>
+<pre><b>
+vorbis_comment *ov_comment(OggVorbis_File *vf,int link);
+</b></pre>
+	</td>
+</tr>
+</table>
+
+<h3>Parameters</h3>
+<dl>
+<dt><i>vf</i></dt>
+<dd>A pointer to the OggVorbis_File structure--this is used for ALL the externally visible libvorbisidec
+functions.</dd>
+<dt><i>i</i></dt>
+<dd>Link to the desired logical bitstream.  For nonseekable files, this argument is ignored.  To retrieve the <a href="vorbis_comment.html">vorbis_comment</a> struct for the current bitstream, this parameter should be set to -1.</dd>
+</dl>
+
+
+<h3>Return Values</h3>
+<blockquote>
+<li>Returns the vorbis_comment struct for the specified bitstream.</li>
+<li>NULL if the specified bitstream does not exist or the file has been initialized improperly.</li>
+</blockquote>
+<p>
+
+<br><br>
+<hr noshade>
+<table border=0 width=100%>
+<tr valign=top>
+<td><p class=tiny>copyright &copy; 2002 Xiph.org</p></td>
+<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a></p></td>
+</tr><tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+</body>
+
+</html>
diff --git a/Tremor/doc/ov_info.html b/Tremor/doc/ov_info.html
new file mode 100644
index 0000000..d783bf3
--- /dev/null
+++ b/Tremor/doc/ov_info.html
@@ -0,0 +1,64 @@
+<html>
+
+<head>
+<title>Tremor - function - ov_info</title>
+<link rel=stylesheet href="style.css" type="text/css">
+</head>
+
+<body bgcolor=white text=black link="#5555ff" alink="#5555ff" vlink="#5555ff">
+<table border=0 width=100%>
+<tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+<h1>ov_info</h1>
+
+<p><i>declared in "ivorbisfile.h";</i></p>
+
+<p>Returns the <a href="vorbis_info.html">vorbis_info</a> struct for the specified bitstream.  For nonseekable files, always returns the current vorbis_info struct.
+
+<br><br>
+<table border=0 color=black cellspacing=0 cellpadding=7>
+<tr bgcolor=#cccccc>
+	<td>
+<pre><b>
+vorbis_info *ov_info(<a href="OggVorbis_File.html">OggVorbis_File</a> *vf,int link);
+</b></pre>
+	</td>
+</tr>
+</table>
+
+<h3>Parameters</h3>
+<dl>
+<dt><i>vf</i></dt>
+<dd>A pointer to the OggVorbis_File structure--this is used for ALL the externally visible libvorbisidec
+functions. </dd>
+<dt><i>i</i></dt>
+<dd>Link to the desired logical bitstream.  For nonseekable files, this argument is ignored.  To retrieve the <a href="vorbis_info.html">vorbis_info</a> struct for the current bitstream, this parameter should be set to -1.</dd>
+</dl>
+
+
+<h3>Return Values</h3>
+<blockquote>
+<li>Returns the vorbis_info struct for the specified bitstream.  Returns vorbis_info for current bitstream if the file is nonseekable or i=-1.</li>
+<li>NULL if the specified bitstream does not exist or the file has been initialized improperly.</li>
+</blockquote>
+<p>
+
+<br><br>
+<hr noshade>
+<table border=0 width=100%>
+<tr valign=top>
+<td><p class=tiny>copyright &copy; 2002 Xiph.org</p></td>
+<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a></p></td>
+</tr><tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+</body>
+
+</html>
diff --git a/Tremor/doc/ov_open.html b/Tremor/doc/ov_open.html
new file mode 100644
index 0000000..654cae8
--- /dev/null
+++ b/Tremor/doc/ov_open.html
@@ -0,0 +1,115 @@
+<html>
+
+<head>
+<title>Tremor - function - ov_open</title>
+<link rel=stylesheet href="style.css" type="text/css">
+</head>
+
+<body bgcolor=white text=black link="#5555ff" alink="#5555ff" vlink="#5555ff">
+<table border=0 width=100%>
+<tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+<h1>ov_open</h1>
+
+<p><i>declared in "ivorbisfile.h";</i></p>
+
+<p>This is the main function used to open and initialize an OggVorbis_File
+structure. It sets up all the related decoding structure.
+<p>The first argument must be a file pointer to an already opened file
+or pipe (it need not be seekable--though this obviously restricts what
+can be done with the bitstream). <tt>vf</tt> should be a pointer to the
+OggVorbis_File structure--this is used for ALL the externally visible libvorbisidec
+functions. Once this has been called, the same <a href="OggVorbis_File.html">OggVorbis_File</a>
+struct should be passed to all the libvorbisidec functions.
+<p>Also, you should be aware that ov_open(), once successful, takes complete possession of the file resource.  After you have opened a file using ov_open(), you MUST close it using <a href="ov_clear.html">ov_clear()</a>, not fclose() or any other function.
+<p>
+It is often useful to call <tt>ov_open()</tt>
+simply to determine whether a given file is a vorbis bitstream. If the
+<tt>ov_open()</tt>
+call fails, then the file is not recognizable as such. 
+When you use <tt>ov_open()
+</tt>for
+this, you should <tt>fclose()</tt> the file pointer if, and only if, the
+<tt>ov_open()</tt>
+call fails. If it succeeds, you must call <a href="ov_clear.html">ov_clear()</a> to clear
+the decoder's buffers and close the file for you.<p>
+
+(Note that <a href="ov_test.html">ov_test()</a> provides a less expensive way to test a file for Vorbisness.)<p>
+
+<br><br>
+<table border=0 color=black cellspacing=0 cellpadding=7>
+<tr bgcolor=#cccccc>
+	<td>
+<pre><b>
+int ov_open(FILE *f,<a href="OggVorbis_File.html">OggVorbis_File</a> *vf,char *initial,long ibytes);
+</b></pre>
+	</td>
+</tr>
+</table>
+
+<h3>Parameters</h3>
+<dl>
+<dt><i>f</i></dt>
+<dd>File pointer to an already opened file
+or pipe (it need not be seekable--though this obviously restricts what
+can be done with the bitstream).</dd>
+<dt><i>vf</i></dt>
+<dd>A pointer to the OggVorbis_File structure--this is used for ALL the externally visible libvorbisidec
+functions. Once this has been called, the same <tt>OggVorbis_File</tt>
+struct should be passed to all the libvorbisidec functions.</dd>
+<dt><i>initial</i></dt>
+<dd>Typically set to NULL.  This parameter is useful if some data has already been
+read from the file and the stream is not seekable. It is used in conjunction with <tt>ibytes</tt>.  In this case, <tt>initial</tt>
+should be a pointer to a buffer containing the data read.</dd>
+<dt><i>ibytes</i></dt>
+<dd>Typically set to 0.  This parameter is useful if some data has already been
+read from the file and the stream is not seekable. In this case, <tt>ibytes</tt>
+should contain the length (in bytes) of the buffer.  Used together with <tt>initial</tt></dd>
+</dl>
+
+
+<h3>Return Values</h3>
+<blockquote>
+<li>0 indicates success</li>
+
+<li>less than zero for failure:</li>
+<ul>
+<li>OV_EREAD - A read from media returned an error.</li>
+<li>OV_ENOTVORBIS - Bitstream is not Vorbis data.</li>
+<li>OV_EVERSION - Vorbis version mismatch.</li>
+<li>OV_EBADHEADER - Invalid Vorbis bitstream header.</li>
+<li>OV_EFAULT - Internal logic fault; indicates a bug or heap/stack corruption.</li>
+</ul>
+</blockquote>
+<p>
+
+<h3>Notes</h3>
+<p>If your decoder is threaded, it is recommended that you NOT call
+<tt>ov_open()</tt>
+in the main control thread--instead, call <tt>ov_open()</tt> IN your decode/playback
+thread. This is important because <tt>ov_open()</tt> may be a fairly time-consuming
+call, given that the full structure of the file is determined at this point,
+which may require reading large parts of the file under certain circumstances
+(determining all the logical bitstreams in one physical bitstream, for
+example).  See <a href="threads.html">Thread Safety</a> for other information on using libvorbisidec with threads.
+
+
+<br><br>
+<hr noshade>
+<table border=0 width=100%>
+<tr valign=top>
+<td><p class=tiny>copyright &copy; 2002 Xiph.org</p></td>
+<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a></p></td>
+</tr><tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+</body>
+
+</html>
diff --git a/Tremor/doc/ov_open_callbacks.html b/Tremor/doc/ov_open_callbacks.html
new file mode 100644
index 0000000..64a2a92
--- /dev/null
+++ b/Tremor/doc/ov_open_callbacks.html
@@ -0,0 +1,110 @@
+<html>
+
+<head>
+<title>Tremor - function - ov_open_callbacks</title>
+<link rel=stylesheet href="style.css" type="text/css">
+</head>
+
+<body bgcolor=white text=black link="#5555ff" alink="#5555ff" vlink="#5555ff">
+<table border=0 width=100%>
+<tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+<h1>ov_open_callbacks</h1>
+
+<p><i>declared in "ivorbisfile.h";</i></p>
+
+<p>This is an alternative function used to open and initialize an OggVorbis_File
+structure when using a data source other than a file.   It allows you to specify custom file manipulation routines and sets up all the related decoding structure.
+<p>Once this has been called, the same <tt>OggVorbis_File</tt>
+struct should be passed to all the libvorbisidec functions.
+<p>
+It is often useful to call <tt>ov_open_callbacks()</tt>
+simply to determine whether a given file is a vorbis bitstream. If the
+<tt>ov_open_callbacks()</tt>
+call fails, then the file is not recognizable as such. When you use <tt>ov_open_callbacks()
+</tt>for
+this, you should <tt>fclose()</tt> the file pointer if, and only if, the
+<tt>ov_open_callbacks()</tt>
+call fails. If it succeeds, you must call <a href=ov_clear.html>ov_clear()</a> to clear
+the decoder's buffers and close the file for you.<p>
+
+See also <a href="callbacks.html">Callbacks and Non-stdio I/O</a> for information on designing and specifying the required callback functions.<p>
+
+<br><br>
+<table border=0 color=black cellspacing=0 cellpadding=7>
+<tr bgcolor=#cccccc>
+	<td>
+<pre><b>
+int ov_open_callbacks(void *datasource, <a href="OggVorbis_File.html">OggVorbis_File</a> *vf, char *initial, long ibytes, <a href="ov_callbacks.html">ov_callbacks</a> callbacks);
+</b></pre>
+	</td>
+</tr>
+</table>
+
+<h3>Parameters</h3>
+<dl>
+<dt><i>f</i></dt>
+<dd>File pointer to an already opened file
+or pipe (it need not be seekable--though this obviously restricts what
+can be done with the bitstream).</dd>
+<dt><i>vf</i></dt>
+<dd>A pointer to the OggVorbis_File structure--this is used for ALL the externally visible libvorbisidec
+functions. Once this has been called, the same <tt>OggVorbis_File</tt>
+struct should be passed to all the libvorbisidec functions.</dd>
+<dt><i>initial</i></dt>
+<dd>Typically set to NULL.  This parameter is useful if some data has already been
+read from the file and the stream is not seekable. It is used in conjunction with <tt>ibytes</tt>.  In this case, <tt>initial</tt>
+should be a pointer to a buffer containing the data read.</dd>
+<dt><i>ibytes</i></dt>
+<dd>Typically set to 0.  This parameter is useful if some data has already been
+read from the file and the stream is not seekable. In this case, <tt>ibytes</tt>
+should contain the length (in bytes) of the buffer.  Used together with <tt>initial</tt>.</dd>
+<dt><i>callbacks</i></dt>
+<dd>Pointer to a completed <a href="ov_callbacks.html">ov_callbacks</a> struct which indicates desired custom file manipulation routines.</dd>
+</dl>
+
+
+<h3>Return Values</h3>
+<blockquote>
+<li>0 for success</li>
+<li>less than zero for failure:</li>
+<ul>
+<li>OV_EREAD - A read from media returned an error.</li>
+<li>OV_ENOTVORBIS - Bitstream is not Vorbis data.</li>
+<li>OV_EVERSION - Vorbis version mismatch.</li>
+<li>OV_EBADHEADER - Invalid Vorbis bitstream header.</li>
+<li>OV_EFAULT - Internal logic fault; indicates a bug or heap/stack corruption.</li>
+</ul>
+</blockquote>
+<p>
+
+<h3>Notes</h3>
+<p>If your decoder is threaded, it is recommended that you NOT call
+<tt>ov_open_callbacks()</tt>
+in the main control thread--instead, call <tt>ov_open_callbacks()</tt> IN your decode/playback
+thread. This is important because <tt>ov_open_callbacks()</tt> may be a fairly time-consuming
+call, given that the full structure of the file is determined at this point,
+which may require reading large parts of the file under certain circumstances
+(determining all the logical bitstreams in one physical bitstream, for
+example).
+See <a href="threads.html">Thread Safety</a> for other information on using libvorbisidec with threads.
+
+<br><br>
+<hr noshade>
+<table border=0 width=100%>
+<tr valign=top>
+<td><p class=tiny>copyright &copy; 2002 Xiph.org</p></td>
+<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a></p></td>
+</tr><tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+</body>
+
+</html>
diff --git a/Tremor/doc/ov_pcm_seek.html b/Tremor/doc/ov_pcm_seek.html
new file mode 100644
index 0000000..cf0351e
--- /dev/null
+++ b/Tremor/doc/ov_pcm_seek.html
@@ -0,0 +1,81 @@
+<html>
+
+<head>
+<title>Tremor - function - ov_pcm_seek</title>
+<link rel=stylesheet href="style.css" type="text/css">
+</head>
+
+<body bgcolor=white text=black link="#5555ff" alink="#5555ff" vlink="#5555ff">
+<table border=0 width=100%>
+<tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+<h1>ov_pcm_seek</h1>
+
+<p><i>declared in "ivorbisfile.h";</i></p>
+
+<p>Seeks to the offset specified (in pcm samples) within the physical bitstream.  This function only works for seekable streams.
+<p>This also updates everything needed within the
+decoder, so you can immediately call <a href="ov_read.html">ov_read()</a> and get data from
+the newly seeked to position.
+<p>
+
+<br><br>
+<table border=0 color=black cellspacing=0 cellpadding=7>
+<tr bgcolor=#cccccc>
+	<td>
+<pre><b>
+int ov_pcm_seek(OggVorbis_File *vf,ogg_int64_t pos);
+</b></pre>
+	</td>
+</tr>
+</table>
+
+<h3>Parameters</h3>
+<dl>
+<dt><i>vf</i></dt>
+<dd>A pointer to the OggVorbis_File structure--this is used for ALL the externally visible libvorbisidec
+functions.</dd>
+<dt><i>pos</i></dt>
+<dd>Position in pcm samples to seek to in the bitstream.</dd>
+</dl>
+
+
+<h3>Return Values</h3>
+<blockquote>
+<li>0 for success</li>
+
+<li>
+nonzero indicates failure, described by several error codes:</li>
+<ul>
+<li>OV_ENOSEEK - Bitstream is not seekable.
+</li>
+<li>OV_EINVAL - Invalid argument value.
+</li>
+<li>OV_EREAD - A read from media returned an error.
+</li>
+<li>OV_EFAULT - Internal logic fault; indicates a bug or heap/stack 
+		corruption.
+</li>
+<li>OV_EBADLINK - Invalid stream section supplied to libvorbisidec, or the requested link is corrupt. 
+</li>
+</ul></blockquote>
+
+<br><br>
+<hr noshade>
+<table border=0 width=100%>
+<tr valign=top>
+<td><p class=tiny>copyright &copy; 2002 Xiph.org</p></td>
+<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a></p></td>
+</tr><tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+</body>
+
+</html>
diff --git a/Tremor/doc/ov_pcm_seek_page.html b/Tremor/doc/ov_pcm_seek_page.html
new file mode 100644
index 0000000..44468a8
--- /dev/null
+++ b/Tremor/doc/ov_pcm_seek_page.html
@@ -0,0 +1,83 @@
+<html>
+
+<head>
+<title>Tremor - function - ov_pcm_seek_page</title>
+<link rel=stylesheet href="style.css" type="text/css">
+</head>
+
+<body bgcolor=white text=black link="#5555ff" alink="#5555ff" vlink="#5555ff">
+<table border=0 width=100%>
+<tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+<h1>ov_pcm_seek_page</h1>
+
+<p><i>declared in "ivorbisfile.h";</i></p>
+
+<p>Seeks to the closest page preceding the specified location (in pcm samples) within the physical bitstream.  This function only works for seekable streams.
+<p>This function is faster than <a href="ov_pcm_seek.html">ov_pcm_seek</a> because the function can begin decoding at a page boundary rather than seeking through any remaining samples before the specified location.  However, it is less accurate.
+<p>This also updates everything needed within the
+decoder, so you can immediately call <a href="ov_read.html">ov_read()</a> and get data from
+the newly seeked to position.
+<p>
+
+<br><br>
+<table border=0 color=black cellspacing=0 cellpadding=7>
+<tr bgcolor=#cccccc>
+	<td>
+<pre><b>
+int ov_pcm_seek_page(OggVorbis_File *vf,ogg_int64_t pos);
+</b></pre>
+	</td>
+</tr>
+</table>
+
+<h3>Parameters</h3>
+<dl>
+<dt><i>vf</i></dt>
+<dd>A pointer to the OggVorbis_File structure--this is used for ALL the externally visible libvorbisidec
+functions.</dd>
+<dt><i>pos</i></dt>
+<dd>Position in pcm samples to seek to in the bitstream.</dd>
+</dl>
+
+
+<h3>Return Values</h3>
+<blockquote>
+<li>
+0 for success</li>
+
+<li>
+nonzero indicates failure, described by several error codes:</li>
+<ul>
+<li>OV_ENOSEEK - Bitstream is not seekable.
+</li>
+<li>OV_EINVAL - Invalid argument value.
+</li>
+<li>OV_EREAD - A read from media returned an error.
+</li>
+<li>OV_EFAULT - Internal logic fault; indicates a bug or heap/stack 
+		corruption.
+</li>
+<li>OV_EBADLINK - Invalid stream section supplied to libvorbisidec, or the requested link is corrupt. 
+</li>
+</ul></blockquote>
+
+<br><br>
+<hr noshade>
+<table border=0 width=100%>
+<tr valign=top>
+<td><p class=tiny>copyright &copy; 2002 Xiph.org</p></td>
+<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a></p></td>
+</tr><tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+</body>
+
+</html>
diff --git a/Tremor/doc/ov_pcm_tell.html b/Tremor/doc/ov_pcm_tell.html
new file mode 100644
index 0000000..0bb98d7
--- /dev/null
+++ b/Tremor/doc/ov_pcm_tell.html
@@ -0,0 +1,63 @@
+<html>
+
+<head>
+<title>Tremor - function - ov_pcm_tell</title>
+<link rel=stylesheet href="style.css" type="text/css">
+</head>
+
+<body bgcolor=white text=black link="#5555ff" alink="#5555ff" vlink="#5555ff">
+<table border=0 width=100%>
+<tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+<h1>ov_pcm_tell</h1>
+
+<p><i>declared in "ivorbisfile.h";</i></p>
+
+<p>Returns the current offset in samples.
+
+<br><br>
+<table border=0 color=black cellspacing=0 cellpadding=7>
+<tr bgcolor=#cccccc>
+	<td>
+<pre><b>
+ogg_int64_t ov_pcm_tell(OggVorbis_File *vf);
+</b></pre>
+	</td>
+</tr>
+</table>
+
+<h3>Parameters</h3>
+<dl>
+<dt><i>vf</i></dt>
+<dd>A pointer to the OggVorbis_File structure--this is used for ALL the externally visible libvorbisidec
+functions.</dd>
+</dl>
+
+
+<h3>Return Values</h3>
+<blockquote>
+<li><i>n</i> indicates the current offset in samples.</li>
+<li>OV_EINVAL means that the argument was invalid.  In this case, the requested bitstream did not exist.</li>
+</blockquote>
+<p>
+
+
+<br><br>
+<hr noshade>
+<table border=0 width=100%>
+<tr valign=top>
+<td><p class=tiny>copyright &copy; 2002 Xiph.org</p></td>
+<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a></p></td>
+</tr><tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+</body>
+
+</html>
diff --git a/Tremor/doc/ov_pcm_total.html b/Tremor/doc/ov_pcm_total.html
new file mode 100644
index 0000000..a19744a
--- /dev/null
+++ b/Tremor/doc/ov_pcm_total.html
@@ -0,0 +1,67 @@
+<html>
+
+<head>
+<title>Tremor - function - ov_pcm_total</title>
+<link rel=stylesheet href="style.css" type="text/css">
+</head>
+
+<body bgcolor=white text=black link="#5555ff" alink="#5555ff" vlink="#5555ff">
+<table border=0 width=100%>
+<tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+<h1>ov_pcm_total</h1>
+
+<p><i>declared in "ivorbisfile.h";</i></p>
+
+<p>Returns the total pcm samples of the physical bitstream or a specified logical bitstream.
+
+<br><br>
+<table border=0 color=black cellspacing=0 cellpadding=7>
+<tr bgcolor=#cccccc>
+	<td>
+<pre><b>
+ogg_int64_t ov_pcm_total(OggVorbis_File *vf,int i);
+</b></pre>
+	</td>
+</tr>
+</table>
+
+<h3>Parameters</h3>
+<dl>
+<dt><i>vf</i></dt>
+<dd>A pointer to the OggVorbis_File structure--this is used for ALL the externally visible libvorbisidec
+functions.</dd>
+<dt><i>i</i></dt>
+<dd>Link to the desired logical bitstream.  To retrieve the total pcm samples for the entire physical bitstream, this parameter should be set to -1.</dd>
+</dl>
+
+
+<h3>Return Values</h3>
+<blockquote>
+<li>OV_EINVAL means that the argument was invalid.  In this case, the requested bitstream did not exist or the bitstream is unseekable.</li>
+<li>
+total length in pcm samples of content if i=-1.</li>
+<li>length in pcm samples of logical bitstream if i=1 to n.</li>
+</blockquote>
+<p>
+
+
+<br><br>
+<hr noshade>
+<table border=0 width=100%>
+<tr valign=top>
+<td><p class=tiny>copyright &copy; 2002 Xiph.org</p></td>
+<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a></p></td>
+</tr><tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+</body>
+
+</html>
diff --git a/Tremor/doc/ov_raw_seek.html b/Tremor/doc/ov_raw_seek.html
new file mode 100644
index 0000000..e7f0bd3
--- /dev/null
+++ b/Tremor/doc/ov_raw_seek.html
@@ -0,0 +1,75 @@
+<html>
+
+<head>
+<title>Tremor - function - ov_raw_seek</title>
+<link rel=stylesheet href="style.css" type="text/css">
+</head>
+
+<body bgcolor=white text=black link="#5555ff" alink="#5555ff" vlink="#5555ff">
+<table border=0 width=100%>
+<tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+<h1>ov_raw_seek</h1>
+
+<p><i>declared in "ivorbisfile.h";</i></p>
+
+<p>Seeks to the offset specified (in compressed raw bytes) within the physical bitstream.  This function only works for seekable streams.
+<p>This also updates everything needed within the
+decoder, so you can immediately call <a href="ov_read.html">ov_read()</a> and get data from
+the newly seeked to position.
+<p>When seek speed is a priority, this is the best seek funtion to use.
+<br><br>
+<table border=0 color=black cellspacing=0 cellpadding=7>
+<tr bgcolor=#cccccc>
+	<td>
+<pre><b>
+int ov_raw_seek(OggVorbis_File *vf,long pos);
+</b></pre>
+	</td>
+</tr>
+</table>
+
+<h3>Parameters</h3>
+<dl>
+<dt><i>vf</i></dt>
+<dd>A pointer to the OggVorbis_File structure--this is used for ALL the externally visible libvorbisidec
+functions.</dd>
+<dt><i>pos</i></dt>
+<dd>Position in compressed bytes to seek to in the bitstream.</dd>
+</dl>
+
+
+<h3>Return Values</h3>
+<blockquote>
+<li>0 indicates success</li>
+<li>nonzero indicates failure, described by several error codes:</li>
+<ul>
+<li>OV_ENOSEEK - Bitstream is not seekable.
+</li>
+<li>OV_EINVAL - Invalid argument value.
+</li>
+<li>OV_EBADLINK - Invalid stream section supplied to libvorbisidec, or the requested link is corrupt. 
+</li>
+</ul>
+</blockquote>
+<p>
+
+<br><br>
+<hr noshade>
+<table border=0 width=100%>
+<tr valign=top>
+<td><p class=tiny>copyright &copy; 2002 Xiph.org</p></td>
+<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a></p></td>
+</tr><tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+</body>
+
+</html>
diff --git a/Tremor/doc/ov_raw_tell.html b/Tremor/doc/ov_raw_tell.html
new file mode 100644
index 0000000..f0d1f6a
--- /dev/null
+++ b/Tremor/doc/ov_raw_tell.html
@@ -0,0 +1,63 @@
+<html>
+
+<head>
+<title>Tremor - function - ov_raw_tell</title>
+<link rel=stylesheet href="style.css" type="text/css">
+</head>
+
+<body bgcolor=white text=black link="#5555ff" alink="#5555ff" vlink="#5555ff">
+<table border=0 width=100%>
+<tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+<h1>ov_raw_tell</h1>
+
+<p><i>declared in "ivorbisfile.h";</i></p>
+
+<p>Returns the current offset in raw compressed bytes.
+
+<br><br>
+<table border=0 color=black cellspacing=0 cellpadding=7>
+<tr bgcolor=#cccccc>
+	<td>
+<pre><b>
+ogg_int64_t ov_raw_tell(OggVorbis_File *vf);
+</b></pre>
+	</td>
+</tr>
+</table>
+
+<h3>Parameters</h3>
+<dl>
+<dt><i>vf</i></dt>
+<dd>A pointer to the OggVorbis_File structure--this is used for ALL the externally visible libvorbisidec
+functions.</dd>
+</dl>
+
+
+<h3>Return Values</h3>
+<blockquote>
+<li><i>n</i> indicates the current offset in bytes.</li>
+<li>OV_EINVAL means that the argument was invalid.  In this case, the requested bitstream did not exist.</li>
+</blockquote>
+<p>
+
+
+<br><br>
+<hr noshade>
+<table border=0 width=100%>
+<tr valign=top>
+<td><p class=tiny>copyright &copy; 2002 Xiph.org</p></td>
+<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a></p></td>
+</tr><tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+</body>
+
+</html>
diff --git a/Tremor/doc/ov_raw_total.html b/Tremor/doc/ov_raw_total.html
new file mode 100644
index 0000000..d0af35f
--- /dev/null
+++ b/Tremor/doc/ov_raw_total.html
@@ -0,0 +1,68 @@
+<html>
+
+<head>
+<title>Tremor - function - ov_raw_total</title>
+<link rel=stylesheet href="style.css" type="text/css">
+</head>
+
+<body bgcolor=white text=black link="#5555ff" alink="#5555ff" vlink="#5555ff">
+<table border=0 width=100%>
+<tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+<h1>ov_raw_total</h1>
+
+<p><i>declared in "ivorbisfile.h";</i></p>
+
+<p>Returns the total (compressed) bytes of the physical bitstream or a specified logical bitstream.
+
+<br><br>
+<table border=0 color=black cellspacing=0 cellpadding=7>
+<tr bgcolor=#cccccc>
+	<td>
+<pre><b>
+ogg_int64_t ov_raw_total(OggVorbis_File *vf,int i);
+</b></pre>
+	</td>
+</tr>
+</table>
+
+<h3>Parameters</h3>
+<dl>
+<dt><i>vf</i></dt>
+<dd>A pointer to the OggVorbis_File structure--this is used for ALL the externally visible libvorbisidec
+functions.</dd>
+<dt><i>i</i></dt>
+<dd>Link to the desired logical bitstream.  To retrieve the total bytes for the entire physical bitstream, this parameter should be set to -1.</dd>
+</dl>
+
+
+<h3>Return Values</h3>
+<blockquote>
+<li>OV_EINVAL means that the argument was invalid.  In this case, the requested bitstream did not exist or the bitstream is nonseekable</li>
+<li><tt>n</tt>
+total length in compressed bytes of content if i=-1.</li>
+<li><tt>n</tt> length in compressed bytes of logical bitstream if i=1 to n.</li>
+</blockquote>
+<p>
+
+
+
+<br><br>
+<hr noshade>
+<table border=0 width=100%>
+<tr valign=top>
+<td><p class=tiny>copyright &copy; 2002 Xiph.org</p></td>
+<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a></p></td>
+</tr><tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+</body>
+
+</html>
diff --git a/Tremor/doc/ov_read.html b/Tremor/doc/ov_read.html
new file mode 100644
index 0000000..208ef18
--- /dev/null
+++ b/Tremor/doc/ov_read.html
@@ -0,0 +1,115 @@
+<html>
+
+<head>
+<title>Tremor - function - ov_read</title>
+<link rel=stylesheet href="style.css" type="text/css">
+</head>
+
+<body bgcolor=white text=black link="#5555ff" alink="#5555ff" vlink="#5555ff">
+<table border=0 width=100%>
+<tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+<h1>ov_read()</h1>
+
+<p><i>declared in "ivorbisfile.h";</i></p>
+
+<p>
+   This is the main function used to decode a Vorbis file within a
+   loop.  It returns up to the specified number of bytes of decoded audio
+   in host-endian, signed 16 bit PCM format.  If the audio is
+   multichannel, the channels are interleaved in the output buffer.
+   If the passed in buffer is large, <tt>ov_read()</tt> will not fill
+   it; the passed in buffer size is treated as a <em>limit</em> and
+   not a request.
+<p>
+   
+Note that up to this point, the Tremor API could more or less hide the
+   multiple logical bitstream nature of chaining from the toplevel
+   application if the toplevel application didn't particularly care.
+   However, when reading audio back, the application must be aware
+   that multiple bitstream sections do not necessarily use the same
+   number of channels or sampling rate. <p> <tt>ov_read()</tt> passes
+   back the index of the sequential logical bitstream currently being
+   decoded (in <tt>*bitstream</tt>) along with the PCM data in order
+   that the toplevel application can handle channel and/or sample
+   rate changes. This number will be incremented at chaining
+   boundaries even for non-seekable streams. For seekable streams, it
+   represents the actual chaining index within the physical bitstream.
+<p>
+
+<br><br>
+<table border=0 color=black cellspacing=0 cellpadding=7>
+<tr bgcolor=#cccccc>
+	<td>
+<pre><b>
+long ov_read(<a href="OggVorbis_File.html">OggVorbis_File</a> *vf, char *buffer, int length, int *bitstream);
+</b></pre>
+	</td>
+</tr>
+</table>
+
+<h3>Parameters</h3>
+<dl>
+<dt><i>vf</i></dt>
+<dd>A pointer to the OggVorbis_File structure--this is used for ALL the externally visible libvorbisidec
+functions.</dd>
+<dt><i>buffer</i></dt>
+<dd>A pointer to an output buffer.  The decoded output is inserted into this buffer.</dd>
+<dt><i>length</i></dt>
+<dd>Number of bytes to be read into the buffer. Should be the same size as the buffer.  A typical value is 4096.</dd>
+<dt><i>bitstream</i></dt>
+<dd>A pointer to the number of the current logical bitstream.</dd>
+</dl>
+
+
+<h3>Return Values</h3>
+<blockquote>
+<dl>
+<dt>OV_HOLE</dt>
+  <dd>indicates there was an interruption in the data.
+      <br>(one of: garbage between pages, loss of sync followed by
+           recapture, or a corrupt page)</dd>
+<dt>OV_EBADLINK</dt>
+  <dd>indicates that an invalid stream section was supplied to
+      libvorbisidec, or the requested link is corrupt.</dd>
+<dt>0</dt>
+  <dd>indicates EOF</dd>
+<dt><i>n</i></dt>
+  <dd>indicates actual number of bytes read.  <tt>ov_read()</tt> will
+      decode at most one vorbis packet per invocation, so the value
+      returned will generally be less than <tt>length</tt>.
+</dl>
+</blockquote>
+
+<h3>Notes</h3>
+<p><b>Typical usage:</b>
+<blockquote>
+<tt>bytes_read = ov_read(&amp;vf,
+buffer, 4096,&amp;current_section)</tt>
+</blockquote>
+
+This reads up to 4096 bytes into a buffer, with signed 16-bit
+little-endian samples.
+</p>
+
+
+
+<br><br>
+<hr noshade>
+<table border=0 width=100%>
+<tr valign=top>
+<td><p class=tiny>copyright &copy; 2002 Xiph.org</p></td>
+<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a></p></td>
+</tr><tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+</body>
+
+</html>
diff --git a/Tremor/doc/ov_seekable.html b/Tremor/doc/ov_seekable.html
new file mode 100644
index 0000000..9bd7fc3
--- /dev/null
+++ b/Tremor/doc/ov_seekable.html
@@ -0,0 +1,63 @@
+<html>
+
+<head>
+<title>Tremor - function - ov_seekable</title>
+<link rel=stylesheet href="style.css" type="text/css">
+</head>
+
+<body bgcolor=white text=black link="#5555ff" alink="#5555ff" vlink="#5555ff">
+<table border=0 width=100%>
+<tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+<h1>ov_seekable</h1>
+
+<p><i>declared in "ivorbisfile.h";</i></p>
+
+<p>This indicates whether or not the bitstream is seekable.
+
+
+<br><br>
+<table border=0 color=black cellspacing=0 cellpadding=7>
+<tr bgcolor=#cccccc>
+	<td>
+<pre><b>
+long ov_seekable(OggVorbis_File *vf);
+</b></pre>
+	</td>
+</tr>
+</table>
+
+<h3>Parameters</h3>
+<dl>
+<dt><i>vf</i></dt>
+<dd>A pointer to the OggVorbis_File structure--this is used for ALL the externally visible libvorbisidec
+functions.</dd>
+</dl>
+
+
+<h3>Return Values</h3>
+<blockquote>
+<li>0 indicates that the file is not seekable.</li>
+<li>nonzero indicates that the file is seekable.</li>
+</blockquote>
+<p>
+
+<br><br>
+<hr noshade>
+<table border=0 width=100%>
+<tr valign=top>
+<td><p class=tiny>copyright &copy; 2002 Xiph.org</p></td>
+<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a></p></td>
+</tr><tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+</body>
+
+</html>
diff --git a/Tremor/doc/ov_serialnumber.html b/Tremor/doc/ov_serialnumber.html
new file mode 100644
index 0000000..d7d7c62
--- /dev/null
+++ b/Tremor/doc/ov_serialnumber.html
@@ -0,0 +1,67 @@
+<html>
+
+<head>
+<title>Tremor - function - ov_serialnumber</title>
+<link rel=stylesheet href="style.css" type="text/css">
+</head>
+
+<body bgcolor=white text=black link="#5555ff" alink="#5555ff" vlink="#5555ff">
+<table border=0 width=100%>
+<tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+<h1>ov_serialnumber</h1>
+
+<p><i>declared in "ivorbisfile.h";</i></p>
+
+<p>Returns the serialnumber of the specified logical bitstream link number within the overall physical bitstream.
+
+<br><br>
+<table border=0 color=black cellspacing=0 cellpadding=7>
+<tr bgcolor=#cccccc>
+	<td>
+<pre><b>
+long ov_serialnumber(OggVorbis_File *vf,int i);
+</b></pre>
+	</td>
+</tr>
+</table>
+
+<h3>Parameters</h3>
+<dl>
+<dt><i>vf</i></dt>
+<dd>A pointer to the OggVorbis_File structure--this is used for ALL the externally visible libvorbisidec
+functions.</dd>
+<dt><i>i</i></dt>
+<dd>Link to the desired logical bitstream.  For nonseekable files, this argument is ignored.  To retrieve the serial number of the current bitstream, this parameter should be set to -1.</dd>
+</dl>
+
+
+<h3>Return Values</h3>
+<blockquote>
+<li>
+-1 if the specified logical bitstream <i>i</i> does not exist.</li>
+
+<li>Returns the serial number of the logical bitstream <i>i</i> or the serial number of the current bitstream if the file is nonseekable.</li>
+</blockquote>
+<p>
+
+
+<br><br>
+<hr noshade>
+<table border=0 width=100%>
+<tr valign=top>
+<td><p class=tiny>copyright &copy; 2002 Xiph.org</p></td>
+<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a></p></td>
+</tr><tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+</body>
+
+</html>
diff --git a/Tremor/doc/ov_streams.html b/Tremor/doc/ov_streams.html
new file mode 100644
index 0000000..7ffee42
--- /dev/null
+++ b/Tremor/doc/ov_streams.html
@@ -0,0 +1,64 @@
+<html>
+
+<head>
+<title>Tremor - function - ov_streams</title>
+<link rel=stylesheet href="style.css" type="text/css">
+</head>
+
+<body bgcolor=white text=black link="#5555ff" alink="#5555ff" vlink="#5555ff">
+<table border=0 width=100%>
+<tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+<h1>ov_streams</h1>
+
+<p><i>declared in "ivorbisfile.h";</i></p>
+
+<p>Returns the number of logical bitstreams within our physical bitstream.
+
+<br><br>
+<table border=0 color=black cellspacing=0 cellpadding=7>
+<tr bgcolor=#cccccc>
+	<td>
+<pre><b>
+long ov_streams(OggVorbis_File *vf);
+</b></pre>
+	</td>
+</tr>
+</table>
+
+<h3>Parameters</h3>
+<dl>
+<dt><i>vf</i></dt>
+<dd>A pointer to the OggVorbis_File structure--this is used for ALL the externally visible libvorbisidec
+functions. </dd>
+</dl>
+
+
+<h3>Return Values</h3>
+<blockquote>
+<li>
+1 indicates a single logical bitstream or an unseekable file.</li>
+<li><i>n</i> indicates the number of logical bitstreams.</li>
+</blockquote>
+<p>
+
+
+<br><br>
+<hr noshade>
+<table border=0 width=100%>
+<tr valign=top>
+<td><p class=tiny>copyright &copy; 2002 Xiph.org</p></td>
+<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a></p></td>
+</tr><tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+</body>
+
+</html>
diff --git a/Tremor/doc/ov_test.html b/Tremor/doc/ov_test.html
new file mode 100644
index 0000000..96a9af0
--- /dev/null
+++ b/Tremor/doc/ov_test.html
@@ -0,0 +1,89 @@
+<html>
+
+<head>
+<title>Tremor - function - ov_test</title>
+<link rel=stylesheet href="style.css" type="text/css">
+</head>
+
+<body bgcolor=white text=black link="#5555ff" alink="#5555ff" vlink="#5555ff">
+<table border=0 width=100%>
+<tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+<h1>ov_test</h1>
+
+<p><i>declared in "ivorbisfile.h";</i></p>
+
+<p>
+This partially opens a vorbis file to test for Vorbis-ness.  It loads
+the headers for the first chain, and tests for seekability (but does not seek).
+Use <a href="ov_test_open.html">ov_test_open()</a> to finish opening the file
+or <a href="ov_clear.html">ov_clear</a> to close/free it.
+<p>
+
+<table border=0 color=black cellspacing=0 cellpadding=7>
+<tr bgcolor=#cccccc>
+	<td>
+<pre><b>
+int ov_test(FILE *f,<a href="OggVorbis_File.html">OggVorbis_File</a> *vf,char *initial,long ibytes);
+</b></pre>
+	</td>
+</tr>
+</table>
+
+<h3>Parameters</h3>
+<dl>
+<dt><i>f</i></dt>
+<dd>File pointer to an already opened file
+or pipe (it need not be seekable--though this obviously restricts what
+can be done with the bitstream).</dd>
+<dt><i>vf</i></dt>
+<dd>A pointer to the OggVorbis_File structure--this is used for ALL the externally visible libvorbisidec
+functions. Once this has been called, the same <tt>OggVorbis_File</tt>
+struct should be passed to all the libvorbisidec functions.</dd>
+<dt><i>initial</i></dt>
+<dd>Typically set to NULL.  This parameter is useful if some data has already been
+read from the file and the stream is not seekable. It is used in conjunction with <tt>ibytes</tt>.  In this case, <tt>initial</tt>
+should be a pointer to a buffer containing the data read.</dd>
+<dt><i>ibytes</i></dt>
+<dd>Typically set to 0.  This parameter is useful if some data has already been
+read from the file and the stream is not seekable. In this case, <tt>ibytes</tt>
+should contain the length (in bytes) of the buffer.  Used together with <tt>initial</tt></dd>
+</dl>
+
+
+<h3>Return Values</h3>
+<blockquote>
+<li>0 for success</li>
+
+<li>less than zero for failure:</li>
+<ul>
+<li>OV_EREAD - A read from media returned an error.</li>
+<li>OV_ENOTVORBIS - Bitstream is not Vorbis data.</li>
+<li>OV_EVERSION - Vorbis version mismatch.</li>
+<li>OV_EBADHEADER - Invalid Vorbis bitstream header.</li>
+<li>OV_EFAULT - Internal logic fault; indicates a bug or heap/stack corruption.</li>
+</ul>
+</blockquote>
+<p>
+
+
+
+<br><br>
+<hr noshade>
+<table border=0 width=100%>
+<tr valign=top>
+<td><p class=tiny>copyright &copy; 2002 Xiph.org</p></td>
+<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a></p></td>
+</tr><tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+</body>
+
+</html>
diff --git a/Tremor/doc/ov_test_callbacks.html b/Tremor/doc/ov_test_callbacks.html
new file mode 100644
index 0000000..4049548
--- /dev/null
+++ b/Tremor/doc/ov_test_callbacks.html
@@ -0,0 +1,90 @@
+<html>
+
+<head>
+<title>Tremor - function - ov_test_callbacks</title>
+<link rel=stylesheet href="style.css" type="text/css">
+</head>
+
+<body bgcolor=white text=black link="#5555ff" alink="#5555ff" vlink="#5555ff">
+<table border=0 width=100%>
+<tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+<h1>ov_test_callbacks</h1>
+
+<p><i>declared in "ivorbisfile.h";</i></p>
+
+<p>This is an alternative function used to open and test an OggVorbis_File
+structure when using a data source other than a file.   It allows you to specify custom file manipulation routines and sets up all the related decoding structures.
+<p>Once this has been called, the same <tt>OggVorbis_File</tt>
+struct should be passed to all the libvorbisidec functions.
+<p>
+<br><br>
+<table border=0 color=black cellspacing=0 cellpadding=7>
+<tr bgcolor=#cccccc>
+	<td>
+<pre><b>
+int ov_test_callbacks(void *datasource, <a href="OggVorbis_File.html">OggVorbis_File</a> *vf, char *initial, long ibytes, <a href="ov_callbacks.html">ov_callbacks</a> callbacks);
+</b></pre>
+	</td>
+</tr>
+</table>
+
+<h3>Parameters</h3>
+<dl>
+<dt><i>f</i></dt>
+<dd>File pointer to an already opened file
+or pipe (it need not be seekable--though this obviously restricts what
+can be done with the bitstream).</dd>
+<dt><i>vf</i></dt>
+<dd>A pointer to the OggVorbis_File structure--this is used for ALL the externally visible libvorbisidec
+functions. Once this has been called, the same <tt>OggVorbis_File</tt>
+struct should be passed to all the libvorbisidec functions.</dd>
+<dt><i>initial</i></dt>
+<dd>Typically set to NULL.  This parameter is useful if some data has already been
+read from the file and the stream is not seekable. It is used in conjunction with <tt>ibytes</tt>.  In this case, <tt>initial</tt>
+should be a pointer to a buffer containing the data read.</dd>
+<dt><i>ibytes</i></dt>
+<dd>Typically set to 0.  This parameter is useful if some data has already been
+read from the file and the stream is not seekable. In this case, <tt>ibytes</tt>
+should contain the length (in bytes) of the buffer.  Used together with <tt>initial</tt>.</dd>
+<dt><i>callbacks</i></dt>
+<dd>Pointer to a completed <a href="ov_callbacks.html">ov_callbacks</a> struct which indicates desired custom file manipulation routines.</dd>
+</dl>
+
+
+<h3>Return Values</h3>
+<blockquote>
+<li>0 for success</li>
+<li>less than zero for failure:</li>
+<ul>
+<li>OV_EREAD - A read from media returned an error.</li>
+<li>OV_ENOTVORBIS - Bitstream is not Vorbis data.</li>
+<li>OV_EVERSION - Vorbis version mismatch.</li>
+<li>OV_EBADHEADER - Invalid Vorbis bitstream header.</li>
+<li>OV_EFAULT - Internal logic fault; indicates a bug or heap/stack corruption.</li>
+</ul>
+</blockquote>
+<p>
+
+
+
+
+<br><br>
+<hr noshade>
+<table border=0 width=100%>
+<tr valign=top>
+<td><p class=tiny>copyright &copy; 2002 Xiph.org</p></td>
+<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a></p></td>
+</tr><tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+</body>
+
+</html>
diff --git a/Tremor/doc/ov_test_open.html b/Tremor/doc/ov_test_open.html
new file mode 100644
index 0000000..74f4410
--- /dev/null
+++ b/Tremor/doc/ov_test_open.html
@@ -0,0 +1,82 @@
+<html>
+
+<head>
+<title>Tremor - function - ov_test_open</title>
+<link rel=stylesheet href="style.css" type="text/css">
+</head>
+
+<body bgcolor=white text=black link="#5555ff" alink="#5555ff" vlink="#5555ff">
+<table border=0 width=100%>
+<tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+<h1>ov_test_open</h1>
+
+<p><i>declared in "ivorbisfile.h";</i></p>
+
+<p>
+Finish opening a file partially opened with <a href="ov_test.html">ov_test()</a>
+or <a href="ov_test_callbacks.html">ov_test_callbacks()</a>.
+<p>
+
+<table border=0 color=black cellspacing=0 cellpadding=7>
+<tr bgcolor=#cccccc>
+	<td>
+<pre><b>
+int ov_test_open(<a href="OggVorbis_File.html">OggVorbis_File</a> *vf);
+</b></pre>
+	</td>
+</tr>
+</table>
+
+<h3>Parameters</h3>
+<dl>
+<dt><i>vf</i></dt>
+<dd>A pointer to the OggVorbis_File structure--this is used for ALL the externally visible libvorbisidec
+functions. Once this has been called, the same <tt>OggVorbis_File</tt>
+struct should be passed to all the libvorbisidec functions.</dd>
+</dl>
+
+
+<h3>Return Values</h3>
+<blockquote>
+<li>
+0 for success</li>
+
+<li>less than zero for failure:</li>
+<ul>
+<li>OV_EREAD - A read from media returned an error.</li>
+<li>OV_ENOTVORBIS - Bitstream is not Vorbis data.</li>
+<li>OV_EVERSION - Vorbis version mismatch.</li>
+<li>OV_EBADHEADER - Invalid Vorbis bitstream header.</li>
+<li>OV_EFAULT - Internal logic fault; indicates a bug or heap/stack corruption.</li>
+</ul>
+</blockquote>
+<p>
+
+
+<br><br>
+<hr noshade>
+<table border=0 width=100%>
+<tr valign=top>
+<td><p class=tiny>copyright &copy; 2002 Xiph.org</p></td>
+<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a></p></td>
+</tr><tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+</body>
+
+</html>
+
+
+
+
+
+
+
diff --git a/Tremor/doc/ov_time_seek.html b/Tremor/doc/ov_time_seek.html
new file mode 100644
index 0000000..6dfa130
--- /dev/null
+++ b/Tremor/doc/ov_time_seek.html
@@ -0,0 +1,70 @@
+<html>
+
+<head>
+<title>Tremor - function - ov_time_seek</title>
+<link rel=stylesheet href="style.css" type="text/css">
+</head>
+
+<body bgcolor=white text=black link="#5555ff" alink="#5555ff" vlink="#5555ff">
+<table border=0 width=100%>
+<tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+<h1>ov_time_seek</h1>
+
+<p><i>declared in "ivorbisfile.h";</i></p>
+
+<p>For seekable
+streams, this seeks to the given time. For implementing seeking in a player,
+this is the only function generally needed. This also updates everything needed within the
+decoder, so you can immediately call <a href="ov_read.html">ov_read()</a> and get data from
+the newly seeked to position.  This function does not work for unseekable streams.
+
+<br><br>
+<table border=0 color=black cellspacing=0 cellpadding=7>
+<tr bgcolor=#cccccc>
+	<td>
+<pre><b>
+int ov_time_seek(<a href="OggVorbis_File.html">OggVorbis_File</a> *vf, ogg_int64_t ms);
+</b></pre>
+	</td>
+</tr>
+</table>
+
+<h3>Parameters</h3>
+<dl>
+<dt><i>vf</i></dt>
+<dd>Pointer to our already opened and initialized OggVorbis_File structure.</dd>
+<dt><i>ms</i></dt>
+<dd>Location to seek to within the file, specified in milliseconds.</dd>
+</dl>
+
+
+<h3>Return Values</h3>
+<blockquote>
+<li>
+0 for success</li>
+
+<li>
+Nonzero for failure</li>
+</blockquote>
+
+
+<br><br>
+<hr noshade>
+<table border=0 width=100%>
+<tr valign=top>
+<td><p class=tiny>copyright &copy; 2002 Xiph.org</p></td>
+<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a></p></td>
+</tr><tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+</body>
+
+</html>
diff --git a/Tremor/doc/ov_time_seek_page.html b/Tremor/doc/ov_time_seek_page.html
new file mode 100644
index 0000000..83cfefb
--- /dev/null
+++ b/Tremor/doc/ov_time_seek_page.html
@@ -0,0 +1,83 @@
+<html>
+
+<head>
+<title>Tremor - function - ov_time_seek_page</title>
+<link rel=stylesheet href="style.css" type="text/css">
+</head>
+
+<body bgcolor=white text=black link="#5555ff" alink="#5555ff" vlink="#5555ff">
+<table border=0 width=100%>
+<tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+<h1>ov_time_seek_page</h1>
+
+<p><i>declared in "ivorbisfile.h";</i></p>
+
+<p>For seekable
+streams, this seeks to closest full page preceding the given time.  This function is faster than <a href="ov_time_seek.html">ov_time_seek</a> because it doesn't seek through the last few samples to reach an exact time, but it is also less accurate.  This should be used when speed is important.
+<p>This function also updates everything needed within the
+decoder, so you can immediately call <a href="ov_read.html">ov_read()</a> and get data from
+the newly seeked to position.  
+<p>This function does not work for unseekable streams.
+
+<br><br>
+<table border=0 color=black cellspacing=0 cellpadding=7>
+<tr bgcolor=#cccccc>
+	<td>
+<pre><b>
+int ov_time_seek_page(<a href="OggVorbis_File.html">OggVorbis_File</a> *vf, ogg_int64_t ms);
+</b></pre>
+	</td>
+</tr>
+</table>
+
+<h3>Parameters</h3>
+<dl>
+<dt><i>vf</i></dt>
+<dd>Pointer to our already opened and initialized OggVorbis_File structure.</dd>
+<dt><i>ms</i></dt>
+<dd>Location to seek to within the file, specified in milliseconds.</dd>
+</dl>
+
+
+<h3>Return Values</h3>
+<blockquote>
+<li>
+0 for success</li>
+
+<li>
+nonzero indicates failure, described by several error codes:</li>
+<ul>
+<li>OV_ENOSEEK - Bitstream is not seekable.
+</li>
+<li>OV_EINVAL - Invalid argument value.
+</li>
+<li>OV_EREAD - A read from media returned an error.
+</li>
+<li>OV_EFAULT - Internal logic fault; indicates a bug or heap/stack 
+		corruption.
+</li>
+<li>OV_EBADLINK - Invalid stream section supplied to libvorbisidec, or the requested link is corrupt. 
+</li>
+</ul></blockquote>
+
+
+<br><br>
+<hr noshade>
+<table border=0 width=100%>
+<tr valign=top>
+<td><p class=tiny>copyright &copy; 2002 Xiph.org</p></td>
+<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a></p></td>
+</tr><tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+</body>
+
+</html>
diff --git a/Tremor/doc/ov_time_tell.html b/Tremor/doc/ov_time_tell.html
new file mode 100644
index 0000000..25d159b
--- /dev/null
+++ b/Tremor/doc/ov_time_tell.html
@@ -0,0 +1,63 @@
+<html>
+
+<head>
+<title>Tremor - function - ov_bitrate</title>
+<link rel=stylesheet href="style.css" type="text/css">
+</head>
+
+<body bgcolor=white text=black link="#5555ff" alink="#5555ff" vlink="#5555ff">
+<table border=0 width=100%>
+<tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+<h1>ov_time_tell</h1>
+
+<p><i>declared in "ivorbisfile.h";</i></p>
+
+<p>Returns the current decoding offset in milliseconds.
+
+<br><br>
+<table border=0 color=black cellspacing=0 cellpadding=7>
+<tr bgcolor=#cccccc>
+	<td>
+<pre><b>
+ogg_int64_t ov_time_tell(OggVorbis_File *vf);
+</b></pre>
+	</td>
+</tr>
+</table>
+
+<h3>Parameters</h3>
+<dl>
+<dt><i>vf</i></dt>
+<dd>A pointer to the OggVorbis_File structure--this is used for ALL the externally visible libvorbisidec
+functions.</dd>
+</dl>
+
+
+<h3>Return Values</h3>
+<blockquote>
+<li><i>n</i> indicates the current decoding time offset in milliseconds.</li>
+<li>OV_EINVAL means that the argument was invalid.  In this case, the requested bitstream did not exist.</li>
+</blockquote>
+<p>
+
+
+<br><br>
+<hr noshade>
+<table border=0 width=100%>
+<tr valign=top>
+<td><p class=tiny>copyright &copy; 2002 Xiph.org</p></td>
+<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a></p></td>
+</tr><tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+</body>
+
+</html>
diff --git a/Tremor/doc/ov_time_total.html b/Tremor/doc/ov_time_total.html
new file mode 100644
index 0000000..7c26b92
--- /dev/null
+++ b/Tremor/doc/ov_time_total.html
@@ -0,0 +1,67 @@
+<html>
+
+<head>
+<title>Tremor - function - ov_time_total</title>
+<link rel=stylesheet href="style.css" type="text/css">
+</head>
+
+<body bgcolor=white text=black link="#5555ff" alink="#5555ff" vlink="#5555ff">
+<table border=0 width=100%>
+<tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+<h1>ov_time_total</h1>
+
+<p><i>declared in "ivorbisfile.h";</i></p>
+
+
+<p>Returns the total time in seconds of the physical bitstream or a specified logical bitstream.
+
+
+<br><br>
+<table border=0 color=black cellspacing=0 cellpadding=7>
+<tr bgcolor=#cccccc>
+	<td>
+<pre><b>
+ogg_int64_t ov_time_total(OggVorbis_File *vf,int i);
+</b></pre>
+	</td>
+</tr>
+</table>
+
+<h3>Parameters</h3>
+<dl>
+<dt><i>vf</i></dt>
+<dd>A pointer to the OggVorbis_File structure--this is used for ALL the externally visible libvorbisidec
+functions.</dd>
+<dt><i>i</i></dt>
+<dd>Link to the desired logical bitstream.  To retrieve the time total for the entire physical bitstream, this parameter should be set to -1.</b></dd>
+</dl>
+
+
+<h3>Return Values</h3>
+<blockquote>
+<li>OV_EINVAL means that the argument was invalid.  In this case, the requested bitstream did not exist or the bitstream is nonseekable.</li>
+<li><tt>n</tt> total length in milliseconds of content if i=-1.</li>
+<li><tt>n</tt> length in milliseconds of logical bitstream if i=1 to n.</li>
+</blockquote>
+<p>
+
+<br><br>
+<hr noshade>
+<table border=0 width=100%>
+<tr valign=top>
+<td><p class=tiny>copyright &copy; 2002 Xiph.org</p></td>
+<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a></p></td>
+</tr><tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+</body>
+
+</html>
diff --git a/Tremor/doc/overview.html b/Tremor/doc/overview.html
new file mode 100644
index 0000000..0c82cb2
--- /dev/null
+++ b/Tremor/doc/overview.html
@@ -0,0 +1,61 @@
+<html>
+
+<head>
+<title>Tremor - API Overview</title>
+<link rel=stylesheet href="style.css" type="text/css">
+</head>
+
+<body bgcolor=white text=black link="#5555ff" alink="#5555ff" vlink="#5555ff">
+<table border=0 width=100%>
+<tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+<h1>Tremor API Overview</h1>
+
+<p>The makeup of the Tremor libvorbisidec library API is relatively
+simple.  It revolves around a single file resource.  This file resource is
+passed to libvorbisidec, where it is opened, manipulated, and closed,
+in the form of an <a href="OggVorbis_File.html">OggVorbis_File</a>
+struct.
+<p>
+The Tremor API consists of the following functional categories:
+<p>
+<ul>
+<li><p><a href="datastructures.html">Base data structures</a>
+<li><p><a href="initialization.html">Setup/Teardown</a>
+<li><p><a href="decoding.html">Decoding</a>
+<li><p><a href="seeking.html">Seeking</a>
+<li><p><a href="fileinfo.html">File Information</a>
+</ul>
+<p>
+In addition, the following subjects deserve attention additional to
+the above general overview:
+<p>
+<ul>
+<li><p><a href="threads.html">Threading and thread safety</a>
+<li><p><a href="callbacks.html">Using [non stdio] custom stream I/O
+via callbacks</a>
+<li><a href="diff.html">Tremor / vorbisfile API differences</a><br>
+</ul>
+<p>
+
+
+<br><br>
+<hr noshade>
+<table border=0 width=100%>
+<tr valign=top>
+<td><p class=tiny>copyright &copy; 2002 Xiph.org</p></td>
+<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a></p></td>
+</tr><tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+</body>
+
+</html>
+
diff --git a/Tremor/doc/reference.html b/Tremor/doc/reference.html
new file mode 100644
index 0000000..20e0a5f
--- /dev/null
+++ b/Tremor/doc/reference.html
@@ -0,0 +1,75 @@
+<html>
+
+<head>
+<title>Tremor API Reference</title>
+<link rel=stylesheet href="style.css" type="text/css">
+</head>
+
+<body bgcolor=white text=black link="#5555ff" alink="#5555ff" vlink="#5555ff">
+<table border=0 width=100%>
+<tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+<h1>Tremor API Reference</h1>
+
+<p>
+<b>Data Structures</b><br>
+<a href="OggVorbis_File.html">OggVorbis_File</a><br>
+<a href="vorbis_comment.html">vorbis_comment</a><br>
+<a href="vorbis_info.html">vorbis_info</a><br>
+<a href="ov_callbacks.html">ov_callbacks</a><br>
+<br>
+<b>Setup/Teardown</b><br>
+<a href="ov_open.html">ov_open()</a><br>
+<a href="ov_open_callbacks.html">ov_open_callbacks()</a><br>
+<a href="ov_clear.html">ov_clear()</a><br>
+<a href="ov_test.html">ov_test()</a><br>
+<a href="ov_test_callbacks.html">ov_test_callbacks()</a><br>
+<a href="ov_test_open.html">ov_test_open()</a><br>
+<br>
+<b>Decoding</b><br>
+<a href="ov_read.html">ov_read()</a><br>
+<br>
+<b>Seeking</b><br>
+<a href="ov_raw_seek.html">ov_raw_seek()</a><br>
+<a href="ov_pcm_seek.html">ov_pcm_seek()</a><br>
+<a href="ov_time_seek.html">ov_time_seek()</a><br>
+<a href="ov_pcm_seek_page.html">ov_pcm_seek_page()</a><br>
+<a href="ov_time_seek_page.html">ov_time_seek_page()</a><br>
+<br>
+<b>File Information</b><br>
+<a href="ov_bitrate.html">ov_bitrate()</a><br>
+<a href="ov_bitrate_instant.html">ov_bitrate_instant()</a><br>
+<a href="ov_streams.html">ov_streams()</a><br>
+<a href="ov_seekable.html">ov_seekable()</a><br>
+<a href="ov_serialnumber.html">ov_serialnumber()</a><br>
+<a href="ov_raw_total.html">ov_raw_total()</a><br>
+<a href="ov_pcm_total.html">ov_pcm_total()</a><br>
+<a href="ov_time_total.html">ov_time_total()</a><br>
+<a href="ov_raw_tell.html">ov_raw_tell()</a><br>
+<a href="ov_pcm_tell.html">ov_pcm_tell()</a><br>
+<a href="ov_time_tell.html">ov_time_tell()</a><br>
+<a href="ov_info.html">ov_info()</a><br>
+<a href="ov_comment.html">ov_comment()</a><br>
+<br>
+<b><a href="return.html">Return Codes</a></b><br>
+
+
+<br><br>
+<hr noshade>
+<table border=0 width=100%>
+<tr valign=top>
+<td><p class=tiny>copyright &copy; 2002 Xiph.org</p></td>
+<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a></p></td>
+</tr><tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+</body>
+
+</html>
diff --git a/Tremor/doc/return.html b/Tremor/doc/return.html
new file mode 100644
index 0000000..0a3f96c
--- /dev/null
+++ b/Tremor/doc/return.html
@@ -0,0 +1,77 @@
+<html>
+
+<head>
+<title>Tremor - Return Codes</title>
+<link rel=stylesheet href="style.css" type="text/css">
+</head>
+
+<body bgcolor=white text=black link="#5555ff" alink="#5555ff" vlink="#5555ff">
+<table border=0 width=100%>
+<tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+<h1>Return Codes</h1>
+
+<p>
+
+The following return codes are <tt>#define</tt>d in "ivorbiscodec.h"
+may be returned by libvorbisidec.  Descriptions of a code relevant to
+a specific function are found in the reference description of that
+function.
+
+<dl>
+
+<dt>OV_FALSE</dt>
+<dd>Not true, or no data available</dd>
+
+<dt>OV_HOLE</dt>
+<dd>Tremor encoutered missing or corrupt data in the bitstream.  Recovery
+is normally automatic and this return code is for informational purposes only.</dd>
+
+<dt>OV_EREAD</dt>
+<dd>Read error while fetching compressed data for decode</dd>
+
+<dt>OV_EFAULT</dt>
+<dd>Internal inconsistency in decode state.  Continuing is likely not possible.</dd>
+
+<dt>OV_EIMPL</dt>
+<dd>Feature not implemented</dd>
+
+<dt>OV_EINVAL</dt>
+<dd>Either an invalid argument, or incompletely initialized argument passed to libvorbisidec call</dd>
+
+<dt>OV_ENOTVORBIS</dt>
+<dd>The given file/data was not recognized as Ogg Vorbis data.</dd>
+
+<dt>OV_EBADHEADER</dt>
+<dd>The file/data is apparently an Ogg Vorbis stream, but contains a corrupted or undecipherable header.</dd>
+
+<dt>OV_EVERSION</dt>
+<dd>The bitstream format revision of the given stream is not supported.</dd>
+
+<dt>OV_EBADLINK</dt>
+<dd>The given link exists in the Vorbis data stream, but is not decipherable due to garbacge or corruption.</dd>
+
+<dt>OV_ENOSEEK</dt>
+<dd>The given stream is not seekable</dd>
+
+</dl>
+
+<br><br>
+<hr noshade>
+<table border=0 width=100%>
+<tr valign=top>
+<td><p class=tiny>copyright &copy; 2002 Xiph.org</p></td>
+<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a></p></td>
+</tr><tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+</body>
+
+</html>
diff --git a/Tremor/doc/seeking.html b/Tremor/doc/seeking.html
new file mode 100644
index 0000000..652368a
--- /dev/null
+++ b/Tremor/doc/seeking.html
@@ -0,0 +1,74 @@
+<html>
+
+<head>
+<title>Tremor - Seeking</title>
+<link rel=stylesheet href="style.css" type="text/css">
+</head>
+
+<body bgcolor=white text=black link="#5555ff" alink="#5555ff" vlink="#5555ff">
+<table border=0 width=100%>
+<tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+<h1>Seeking</h1>
+<p>Seeking functions allow you to specify a specific point in the stream to begin or continue decoding.
+<p>
+All libvorbisidec seeking routines are declared in "ivorbisfile.h".
+
+<p>Certain seeking functions are best suited to different situations.
+When speed is important and exact positioning isn't required,
+page-level seeking should be used.  Note also that Vorbis files do not
+necessarily start at a sample number or time offset of zero.  Do not
+be surprised if a file begins at a positive offset of several minutes
+or hours, such as would happen if a large stream (such as a concert
+recording) is chopped into multiple separate files.  Requesting to
+seek to a position before the beginning of such a file will seek to
+the position where audio begins.<p>
+
+</ul>
+
+<table border=1 color=black width=50% cellspacing=0 cellpadding=7>
+<tr bgcolor=#cccccc>
+	<td><b>function</b></td>
+	<td><b>purpose</b></td>
+</tr>
+<tr valign=top>
+	<td><a href="ov_raw_seek.html">ov_raw_seek</a></td>
+	<td>This function seeks to a position specified in the compressed bitstream, specified in bytes.</td>
+</tr>
+<tr valign=top>
+	<td><a href="ov_pcm_seek.html">ov_pcm_seek</a></td>
+	<td>This function seeks to a specific audio sample number, specified in pcm samples.</td>
+</tr>
+<tr valign=top>
+	<td><a href="ov_pcm_seek_page.html">ov_pcm_seek_page</a></td>
+	<td>This function seeks to the closest page preceding the specified audio sample number, specified in pcm samples.</td>
+</tr>
+<tr valign=top>
+	<td><a href="ov_time_seek.html">ov_time_seek</a></td>
+	<td>This function seeks to the specific time location in the bitstream, specified in integer milliseconds.  Note that this differs from the reference vorbisfile implementation, which takes seconds as a float. </td>
+</tr>
+<tr valign=top>
+	<td><a href="ov_time_seek_page.html">ov_time_seek_page</a></td>
+	<td>This function seeks to the closest page preceding the specified time position in the bitstream, specified in integer milliseconds.</td>
+</tr>
+</table>
+
+<br><br>
+<hr noshade>
+<table border=0 width=100%>
+<tr valign=top>
+<td><p class=tiny>copyright &copy; 2002 Xiph.org</p></td>
+<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a></p></td>
+</tr><tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+</body>
+
+</html>
diff --git a/Tremor/doc/style.css b/Tremor/doc/style.css
new file mode 100644
index 0000000..81cf417
--- /dev/null
+++ b/Tremor/doc/style.css
@@ -0,0 +1,7 @@
+BODY { font-family: Helvetica, sans-serif }
+TD { font-family: Helvetica, sans-serif }
+P { font-family: Helvetica, sans-serif }
+H1 { font-family: Helvetica, sans-serif }
+H2 { font-family: Helvetica, sans-serif }
+H4 { font-family: Helvetica, sans-serif }
+P.tiny { font-size: 8pt }
diff --git a/Tremor/doc/threads.html b/Tremor/doc/threads.html
new file mode 100644
index 0000000..53ed76a
--- /dev/null
+++ b/Tremor/doc/threads.html
@@ -0,0 +1,50 @@
+<html>
+
+<head>
+<title>Tremor - Thread Safety</title>
+<link rel=stylesheet href="style.css" type="text/css">
+</head>
+
+<body bgcolor=white text=black link="#5555ff" alink="#5555ff" vlink="#5555ff">
+<table border=0 width=100%>
+<tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+<h1>Thread Safety</h1>
+
+Tremor's libvorbisidec may be used safely in a threading environment
+so long as thread access to individual <a
+href="OggVorbis_File.html">OggVorbis_File</a> instances is serialized.  
+<ul>
+
+<li>Only one thread at a time may enter a function that takes a given <a
+href="OggVorbis_File.html">OggVorbis_File</a> instance, even if the
+functions involved appear to be read-only.<p>
+
+<li>Multiple threads may enter
+libvorbisidec at a given time, so long as each thread's function calls
+are using different <a href="OggVorbis_File.html">OggVorbis_File</a>
+instances. <p>
+
+<li>Any one <a
+href="OggVorbis_File.html">OggVorbis_File</a> instance may be used safely from multiple threads so long as only one thread at a time is making calls using that instance.<p>
+</ul>
+
+<br><br>
+<hr noshade>
+<table border=0 width=100%>
+<tr valign=top>
+<td><p class=tiny>copyright &copy; 2002 Xiph.org</p></td>
+<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a></p></td>
+</tr><tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+</body>
+
+</html>
diff --git a/Tremor/doc/vorbis_comment.html b/Tremor/doc/vorbis_comment.html
new file mode 100644
index 0000000..3232d96
--- /dev/null
+++ b/Tremor/doc/vorbis_comment.html
@@ -0,0 +1,70 @@
+<html>
+
+<head>
+<title>Tremor - datatype - vorbis_comment</title>
+<link rel=stylesheet href="style.css" type="text/css">
+</head>
+
+<body bgcolor=white text=black link="#5555ff" alink="#5555ff" vlink="#5555ff">
+<table border=0 width=100%>
+<tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+<h1>vorbis_comment</h1>
+
+<p><i>declared in "ivorbiscodec.h"</i></p>
+
+<p>
+The vorbis_comment structure defines an Ogg Vorbis comment.
+<p>
+Only the fields the program needs must be defined.  If a field isn't
+defined by the application, it will either be blank (if it's a string value)
+or set to some reasonable default (usually 0).
+<p>
+
+<table border=0 width=100% color=black cellspacing=0 cellpadding=7>
+<tr bgcolor=#cccccc>
+	<td>
+<pre><b>typedef struct vorbis_comment{
+  /* unlimited user comment fields. */
+  char **user_comments;
+  int  *comment_lengths;
+  int  comments;
+  char *vendor;
+
+} vorbis_comment;</b></pre>
+	</td>
+</tr>
+</table>
+
+<h3>Parameters</h3>
+<dl>
+<dt><i>user_comments</i></dt>
+<dd>Unlimited user comment array. The individual strings in the array are 8 bit clean, by the Vorbis specification, and as such the <tt>comment_lengths</tt> array should be consulted to determine string length.  For convenience, each string is also NULL-terminated by the decode library (although Vorbis comments are not NULL terminated within the bitstream itself).</dd>
+<dt><i>comment_lengths</i></dt>
+<dd>An int array that stores the length of each comment string</dd>
+<dt><i>comments</i></dt>
+<dd>Int signifying number of user comments in user_comments field.</dd>
+<dt><i>vendor</i></dt>
+<dd>Information about the creator of the file.  Stored in a standard C 0-terminated string.</dd>
+</dl>
+
+
+<br><br>
+<hr noshade>
+<table border=0 width=100%>
+<tr valign=top>
+<td><p class=tiny>copyright &copy; 2002 Xiph.org</p></td>
+<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a></p></td>
+</tr><tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+</body>
+
+</html>
diff --git a/Tremor/doc/vorbis_info.html b/Tremor/doc/vorbis_info.html
new file mode 100644
index 0000000..bd938cd
--- /dev/null
+++ b/Tremor/doc/vorbis_info.html
@@ -0,0 +1,80 @@
+<html>
+
+<head>
+<title>Tremor - datatype - vorbis_info</title>
+<link rel=stylesheet href="style.css" type="text/css">
+</head>
+
+<body bgcolor=white text=black link="#5555ff" alink="#5555ff" vlink="#5555ff">
+<table border=0 width=100%>
+<tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+<h1>vorbis_info</h1>
+
+<p><i>declared in "ivorbiscodec.h"</i></p>
+
+<p>
+The vorbis_info structure contains basic information about the audio in a vorbis bitstream.
+<p>
+
+<table border=0 width=100% color=black cellspacing=0 cellpadding=7>
+<tr bgcolor=#cccccc>
+	<td>
+<pre><b>typedef struct vorbis_info{
+  int version;
+  int channels;
+  long rate;
+  
+  long bitrate_upper;
+  long bitrate_nominal;
+  long bitrate_lower;
+  long bitrate_window;
+
+  void *codec_setup;
+
+} vorbis_info;</b></pre>
+	</td>
+</tr>
+</table>
+
+<h3>Relevant Struct Members</h3>
+<dl>
+<dt><i>version</i></dt>
+<dd>Vorbis encoder version used to create this bitstream.</dd>
+<dt><i>channels</i></dt>
+<dd>Int signifying number of channels in bitstream.</dd>
+<dt><i>rate</i></dt>
+<dd>Sampling rate of the bitstream.</dd>
+<dt><i>bitrate_upper</i></dt>
+<dd>Specifies the upper limit in a VBR bitstream.  If the value matches the bitrate_nominal and bitrate_lower parameters, the stream is fixed bitrate.  May be unset if no limit exists.</dd>
+<dt><i>bitrate_nominal</i></dt>
+<dd>Specifies the average bitrate for a VBR bitstream.  May be unset.  If the bitrate_upper and bitrate_lower parameters match, the stream is fixed bitrate.</dd>
+<dt><i>bitrate_lower</i></dt>
+<dd>Specifies the lower limit in a VBR bitstream.  If the value matches the bitrate_nominal and bitrate_upper parameters, the stream is fixed bitrate.  May be unset if no limit exists.</dd>
+<dt><i>bitrate_window</i></dt>
+<dd>Currently unset.</dd>
+
+<dt><i>codec_setup</i></dt>
+<dd>Internal structure that contains the detailed/unpacked configuration for decoding the current Vorbis bitstream.</dd>
+</dl>
+
+
+<br><br>
+<hr noshade>
+<table border=0 width=100%>
+<tr valign=top>
+<td><p class=tiny>copyright &copy; 2002 Xiph.org</p></td>
+<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a></p></td>
+</tr><tr>
+<td><p class=tiny>Tremor documentation</p></td>
+<td align=right><p class=tiny>Tremor version 1.0 - 20020403</p></td>
+</tr>
+</table>
+
+</body>
+
+</html>
diff --git a/Tremor/dsp.c b/Tremor/dsp.c
new file mode 100644
index 0000000..882b685
--- /dev/null
+++ b/Tremor/dsp.c
@@ -0,0 +1,298 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE.   *
+ *                                                                  *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2003    *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************
+
+ function: PCM data vector blocking, windowing and dis/reassembly
+
+ ********************************************************************/
+
+#include <stdlib.h> 
+#include "ogg.h"
+#include "mdct.h"
+#include "ivorbiscodec.h"
+#include "codec_internal.h"
+#include "misc.h"
+#include "window_lookup.h"
+
+int vorbis_dsp_restart(vorbis_dsp_state *v){
+  if(!v)return -1;
+  {
+    vorbis_info *vi=v->vi;
+    codec_setup_info *ci;
+    
+    if(!vi)return -1;
+    ci=vi->codec_setup;
+    if(!ci)return -1;
+    
+    v->out_end=-1;
+    v->out_begin=-1;
+
+    v->granulepos=-1;
+    v->sequence=-1;
+    v->sample_count=-1;
+  }
+  return 0;
+}
+
+vorbis_dsp_state *vorbis_dsp_create(vorbis_info *vi){
+  int i;
+
+  vorbis_dsp_state *v=_ogg_calloc(1,sizeof(*v));
+  codec_setup_info *ci=(codec_setup_info *)vi->codec_setup;
+
+  v->vi=vi;
+  
+  v->work=(ogg_int32_t **)_ogg_malloc(vi->channels*sizeof(*v->work));
+  v->mdctright=(ogg_int32_t **)_ogg_malloc(vi->channels*sizeof(*v->mdctright));
+  for(i=0;i<vi->channels;i++){
+    v->work[i]=(ogg_int32_t *)_ogg_calloc(1,(ci->blocksizes[1]>>1)*
+					  sizeof(*v->work[i]));
+    v->mdctright[i]=(ogg_int32_t *)_ogg_calloc(1,(ci->blocksizes[1]>>2)*
+					       sizeof(*v->mdctright[i]));
+  }
+
+  v->lW=0; /* previous window size */
+  v->W=0;  /* current window size */
+
+  vorbis_dsp_restart(v);
+  return v;
+}
+
+void vorbis_dsp_destroy(vorbis_dsp_state *v){
+  int i;
+  if(v){
+    vorbis_info *vi=v->vi;
+
+    if(v->work){
+      for(i=0;i<vi->channels;i++)
+        if(v->work[i])_ogg_free(v->work[i]);
+      _ogg_free(v->work);
+    }
+    if(v->mdctright){
+      for(i=0;i<vi->channels;i++)
+        if(v->mdctright[i])_ogg_free(v->mdctright[i]);
+      _ogg_free(v->mdctright);
+    }
+
+    _ogg_free(v);
+  }
+}
+
+static LOOKUP_T *_vorbis_window(int left){
+  switch(left){
+  case 32:
+    return vwin64;
+  case 64:
+    return vwin128;
+  case 128:
+    return vwin256;
+  case 256:
+    return vwin512;
+  case 512:
+    return vwin1024;
+  case 1024:
+    return vwin2048;
+  case 2048:
+    return vwin4096;
+#ifndef LIMIT_TO_64kHz
+  case 4096:
+    return vwin8192;
+#endif
+  default:
+    return(0);
+  }
+}
+
+/* pcm==0 indicates we just want the pending samples, no more */
+int vorbis_dsp_pcmout(vorbis_dsp_state *v,ogg_int16_t *pcm,int samples){
+  vorbis_info *vi=v->vi;
+  codec_setup_info *ci=(codec_setup_info *)vi->codec_setup;
+  if(v->out_begin>-1 && v->out_begin<v->out_end){
+    int n=v->out_end-v->out_begin;
+    if(pcm){
+      int i;
+      if(n>samples)n=samples;
+      for(i=0;i<vi->channels;i++)
+	mdct_unroll_lap(ci->blocksizes[0],ci->blocksizes[1],
+			v->lW,v->W,v->work[i],v->mdctright[i],
+			_vorbis_window(ci->blocksizes[0]>>1),
+			_vorbis_window(ci->blocksizes[1]>>1),
+			pcm+i,vi->channels,
+			v->out_begin,v->out_begin+n);
+    }
+    return(n);
+  }
+  return(0);
+}
+
+int vorbis_dsp_read(vorbis_dsp_state *v,int s){
+  if(s && v->out_begin+s>v->out_end)return(OV_EINVAL);
+  v->out_begin+=s;
+  return(0);
+}
+
+long vorbis_packet_blocksize(vorbis_info *vi,ogg_packet *op){
+  codec_setup_info     *ci=(codec_setup_info *)vi->codec_setup;
+  oggpack_buffer       opb;
+  int                  mode;
+  int modebits=0;
+  int v=ci->modes;
+ 
+  oggpack_readinit(&opb,op->packet);
+
+  /* Check the packet type */
+  if(oggpack_read(&opb,1)!=0){
+    /* Oops.  This is not an audio data packet */
+    return(OV_ENOTAUDIO);
+  }
+
+  while(v>1){
+    modebits++;
+    v>>=1;
+  }
+
+  /* read our mode and pre/post windowsize */
+  mode=oggpack_read(&opb,modebits);
+  if(mode==-1)return(OV_EBADPACKET);
+  return(ci->blocksizes[ci->mode_param[mode].blockflag]);
+}
+
+
+static int ilog(ogg_uint32_t v){
+  int ret=0;
+  if(v)--v;
+  while(v){
+    ret++;
+    v>>=1;
+  }
+  return(ret);
+}
+
+int vorbis_dsp_synthesis(vorbis_dsp_state *vd,ogg_packet *op,int decodep){
+  vorbis_info          *vi=vd->vi;
+  codec_setup_info     *ci=(codec_setup_info *)vi->codec_setup;
+  int                   mode,i;
+
+  oggpack_readinit(&vd->opb,op->packet);
+
+  /* Check the packet type */
+  if(oggpack_read(&vd->opb,1)!=0){
+    /* Oops.  This is not an audio data packet */
+    return OV_ENOTAUDIO ;
+  }
+
+  /* read our mode and pre/post windowsize */
+  mode=oggpack_read(&vd->opb,ilog(ci->modes));
+  if(mode==-1 || mode>=ci->modes) return OV_EBADPACKET;
+
+  /* shift information we still need from last window */
+  vd->lW=vd->W;
+  vd->W=ci->mode_param[mode].blockflag;
+  for(i=0;i<vi->channels;i++)
+    mdct_shift_right(ci->blocksizes[vd->lW],vd->work[i],vd->mdctright[i]);
+  
+  if(vd->W){
+    int temp;
+    oggpack_read(&vd->opb,1);
+    temp=oggpack_read(&vd->opb,1);
+    if(temp==-1) return OV_EBADPACKET;
+  }
+  
+  /* packet decode and portions of synthesis that rely on only this block */
+  if(decodep){
+    mapping_inverse(vd,ci->map_param+ci->mode_param[mode].mapping);
+
+    if(vd->out_begin==-1){
+      vd->out_begin=0;
+      vd->out_end=0;
+    }else{
+      vd->out_begin=0;
+      vd->out_end=ci->blocksizes[vd->lW]/4+ci->blocksizes[vd->W]/4;
+    }
+  }
+
+  /* track the frame number... This is for convenience, but also
+     making sure our last packet doesn't end with added padding.
+     
+     This is not foolproof!  It will be confused if we begin
+     decoding at the last page after a seek or hole.  In that case,
+     we don't have a starting point to judge where the last frame
+     is.  For this reason, vorbisfile will always try to make sure
+     it reads the last two marked pages in proper sequence */
+  
+  /* if we're out of sequence, dump granpos tracking until we sync back up */
+  if(vd->sequence==-1 || vd->sequence+1 != op->packetno-3){
+    /* out of sequence; lose count */
+    vd->granulepos=-1;
+    vd->sample_count=-1;
+  }
+  
+  vd->sequence=op->packetno;
+  vd->sequence=vd->sequence-3;
+  
+  if(vd->sample_count==-1){
+    vd->sample_count=0;
+  }else{
+    vd->sample_count+=
+      ci->blocksizes[vd->lW]/4+ci->blocksizes[vd->W]/4;
+  }
+  
+  if(vd->granulepos==-1){
+    if(op->granulepos!=-1){ /* only set if we have a
+			       position to set to */
+      
+      vd->granulepos=op->granulepos;
+      
+      /* is this a short page? */
+      if(vd->sample_count>vd->granulepos){
+	/* corner case; if this is both the first and last audio page,
+	   then spec says the end is cut, not beginning */
+	if(op->e_o_s){
+	  /* trim the end */
+	  /* no preceeding granulepos; assume we started at zero (we'd
+	     have to in a short single-page stream) */
+	  /* granulepos could be -1 due to a seek, but that would result
+	     in a long coun t, not short count */
+	  
+	  vd->out_end-=vd->sample_count-vd->granulepos;
+	}else{
+	  /* trim the beginning */
+	  vd->out_begin+=vd->sample_count-vd->granulepos;
+	  if(vd->out_begin>vd->out_end)
+	    vd->out_begin=vd->out_end;
+	}
+	
+      }
+      
+    }
+  }else{
+    vd->granulepos+=
+      ci->blocksizes[vd->lW]/4+ci->blocksizes[vd->W]/4;
+    if(op->granulepos!=-1 && vd->granulepos!=op->granulepos){
+      
+      if(vd->granulepos>op->granulepos){
+	long extra=vd->granulepos-op->granulepos;
+	
+	if(extra)
+	  if(op->e_o_s){
+	    /* partial last frame.  Strip the extra samples off */
+	    vd->out_end-=extra;
+	  } /* else {Shouldn't happen *unless* the bitstream is out of
+	       spec.  Either way, believe the bitstream } */
+      } /* else {Shouldn't happen *unless* the bitstream is out of
+	   spec.  Either way, believe the bitstream } */
+      vd->granulepos=op->granulepos;
+    }
+  }
+
+  return(0);
+}
diff --git a/Tremor/floor0.c b/Tremor/floor0.c
new file mode 100644
index 0000000..864af70
--- /dev/null
+++ b/Tremor/floor0.c
@@ -0,0 +1,428 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE.   *
+ *                                                                  *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2003    *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************
+
+ function: floor backend 0 implementation
+
+ ********************************************************************/
+
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include "ogg.h"
+#include "ivorbiscodec.h"
+#include "codec_internal.h"
+#include "codebook.h"
+#include "misc.h"
+#include "os.h"
+
+#define LSP_FRACBITS 14
+extern const ogg_int32_t FLOOR_fromdB_LOOKUP[];
+
+/*************** LSP decode ********************/
+
+#include "lsp_lookup.h"
+
+/* interpolated 1./sqrt(p) where .5 <= a < 1. (.100000... to .111111...) in
+   16.16 format 
+   returns in m.8 format */
+
+static long ADJUST_SQRT2[2]={8192,5792};
+static inline ogg_int32_t vorbis_invsqlook_i(long a,long e){
+  long i=(a&0x7fff)>>(INVSQ_LOOKUP_I_SHIFT-1); 
+  long d=a&INVSQ_LOOKUP_I_MASK;                              /*  0.10 */
+  long val=INVSQ_LOOKUP_I[i]-                                /*  1.16 */
+    ((INVSQ_LOOKUP_IDel[i]*d)>>INVSQ_LOOKUP_I_SHIFT);        /* result 1.16 */
+  val*=ADJUST_SQRT2[e&1];
+  e=(e>>1)+21;
+  return(val>>e);
+}
+
+/* interpolated lookup based fromdB function, domain -140dB to 0dB only */
+/* a is in n.12 format */
+#ifdef _LOW_ACCURACY_
+static inline ogg_int32_t vorbis_fromdBlook_i(long a){
+  if(a>0) return 0x7fffffff;
+  if(a<(-140<<12)) return 0;
+  return FLOOR_fromdB_LOOKUP[((a+140)*467)>>20]<<9;
+}
+#else
+static inline ogg_int32_t vorbis_fromdBlook_i(long a){
+  if(a>0) return 0x7fffffff;
+  if(a<(-140<<12)) return 0;
+  return FLOOR_fromdB_LOOKUP[((a+(140<<12))*467)>>20];
+}
+#endif
+
+/* interpolated lookup based cos function, domain 0 to PI only */
+/* a is in 0.16 format, where 0==0, 2^^16-1==PI, return 0.14 */
+static inline ogg_int32_t vorbis_coslook_i(long a){
+  int i=a>>COS_LOOKUP_I_SHIFT;
+  int d=a&COS_LOOKUP_I_MASK;
+  return COS_LOOKUP_I[i]- ((d*(COS_LOOKUP_I[i]-COS_LOOKUP_I[i+1]))>>
+			   COS_LOOKUP_I_SHIFT);
+}
+
+/* interpolated half-wave lookup based cos function */
+/* a is in 0.16 format, where 0==0, 2^^16==PI, return .LSP_FRACBITS */
+static inline ogg_int32_t vorbis_coslook2_i(long a){
+  int i=a>>COS_LOOKUP_I_SHIFT;
+  int d=a&COS_LOOKUP_I_MASK;
+  return ((COS_LOOKUP_I[i]<<COS_LOOKUP_I_SHIFT)-
+	  d*(COS_LOOKUP_I[i]-COS_LOOKUP_I[i+1]))>>
+    (COS_LOOKUP_I_SHIFT-LSP_FRACBITS+14);
+}
+
+static const ogg_uint16_t barklook[54]={
+  0,51,102,154,            206,258,311,365,
+  420,477,535,594,         656,719,785,854,
+  926,1002,1082,1166,      1256,1352,1454,1564,
+  1683,1812,1953,2107,     2276,2463,2670,2900,
+  3155,3440,3756,4106,     4493,4919,5387,5901,
+  6466,7094,7798,8599,     9528,10623,11935,13524,
+  15453,17775,20517,23667, 27183,31004
+};
+
+/* used in init only; interpolate the long way */
+static inline ogg_int32_t toBARK(int n){
+  int i;
+  for(i=0;i<54;i++) 
+    if(n>=barklook[i] && n<barklook[i+1])break;
+  
+  if(i==54){
+    return 54<<14;
+  }else{
+    return (i<<14)+(((n-barklook[i])*  
+		     ((1UL<<31)/(barklook[i+1]-barklook[i])))>>17);
+  }
+}
+
+static const unsigned char MLOOP_1[64]={
+   0,10,11,11, 12,12,12,12, 13,13,13,13, 13,13,13,13,
+  14,14,14,14, 14,14,14,14, 14,14,14,14, 14,14,14,14,
+  15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15,
+  15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15,
+};
+
+static const unsigned char MLOOP_2[64]={
+  0,4,5,5, 6,6,6,6, 7,7,7,7, 7,7,7,7,
+  8,8,8,8, 8,8,8,8, 8,8,8,8, 8,8,8,8,
+  9,9,9,9, 9,9,9,9, 9,9,9,9, 9,9,9,9,
+  9,9,9,9, 9,9,9,9, 9,9,9,9, 9,9,9,9,
+};
+
+static const unsigned char MLOOP_3[8]={0,1,2,2,3,3,3,3};
+
+void vorbis_lsp_to_curve(ogg_int32_t *curve,int n,int ln,
+			 ogg_int32_t *lsp,int m,
+			 ogg_int32_t amp,
+			 ogg_int32_t ampoffset,
+			 ogg_int32_t nyq){
+
+  /* 0 <= m < 256 */
+
+  /* set up for using all int later */
+  int i;
+  int ampoffseti=ampoffset*4096;
+  int ampi=amp;
+  ogg_int32_t *ilsp=(ogg_int32_t *)alloca(m*sizeof(*ilsp));
+
+  ogg_uint32_t inyq= (1UL<<31) / toBARK(nyq);
+  ogg_uint32_t imap= (1UL<<31) / ln;
+  ogg_uint32_t tBnyq1 = toBARK(nyq)<<1;
+
+  /* Besenham for frequency scale to avoid a division */
+  int f=0;
+  int fdx=n;
+  int fbase=nyq/fdx;
+  int ferr=0;
+  int fdy=nyq-fbase*fdx;
+  int map=0;
+
+#ifdef _LOW_ACCURACY_
+  ogg_uint32_t nextbark=((tBnyq1<<11)/ln)>>12;
+#else
+  ogg_uint32_t nextbark=MULT31(imap>>1,tBnyq1);
+#endif
+  int nextf=barklook[nextbark>>14]+(((nextbark&0x3fff)*
+	    (barklook[(nextbark>>14)+1]-barklook[nextbark>>14]))>>14);
+
+  /* lsp is in 8.24, range 0 to PI; coslook wants it in .16 0 to 1*/
+  for(i=0;i<m;i++){
+#ifndef _LOW_ACCURACY_
+    ogg_int32_t val=MULT32(lsp[i],0x517cc2);
+#else
+    ogg_int32_t val=((lsp[i]>>10)*0x517d)>>14;
+#endif
+
+    /* safeguard against a malicious stream */
+    if(val<0 || (val>>COS_LOOKUP_I_SHIFT)>=COS_LOOKUP_I_SZ){
+      memset(curve,0,sizeof(*curve)*n);
+      return;
+    }
+
+    ilsp[i]=vorbis_coslook_i(val);
+  }
+
+  i=0;
+  while(i<n){
+    int j;
+    ogg_uint32_t pi=46341; /* 2**-.5 in 0.16 */
+    ogg_uint32_t qi=46341;
+    ogg_int32_t qexp=0,shift;
+    ogg_int32_t wi;
+
+    wi=vorbis_coslook2_i((map*imap)>>15);
+
+
+#ifdef _V_LSP_MATH_ASM
+    lsp_loop_asm(&qi,&pi,&qexp,ilsp,wi,m);
+
+    pi=((pi*pi)>>16);
+    qi=((qi*qi)>>16);
+    
+    if(m&1){
+      qexp= qexp*2-28*((m+1)>>1)+m;	     
+      pi*=(1<<14)-((wi*wi)>>14);
+      qi+=pi>>14;     
+    }else{
+      qexp= qexp*2-13*m;
+      
+      pi*=(1<<14)-wi;
+      qi*=(1<<14)+wi;
+      
+      qi=(qi+pi)>>14;
+    }
+    
+    if(qi&0xffff0000){ /* checks for 1.xxxxxxxxxxxxxxxx */
+      qi>>=1; qexp++; 
+    }else
+      lsp_norm_asm(&qi,&qexp);
+
+#else
+
+    qi*=labs(ilsp[0]-wi);
+    pi*=labs(ilsp[1]-wi);
+
+    for(j=3;j<m;j+=2){
+      if(!(shift=MLOOP_1[(pi|qi)>>25]))
+      	if(!(shift=MLOOP_2[(pi|qi)>>19]))
+      	  shift=MLOOP_3[(pi|qi)>>16];
+      
+      qi=(qi>>shift)*labs(ilsp[j-1]-wi);
+      pi=(pi>>shift)*labs(ilsp[j]-wi);
+      qexp+=shift;
+    }
+    if(!(shift=MLOOP_1[(pi|qi)>>25]))
+      if(!(shift=MLOOP_2[(pi|qi)>>19]))
+	shift=MLOOP_3[(pi|qi)>>16];
+    
+    /* pi,qi normalized collectively, both tracked using qexp */
+
+    if(m&1){
+      /* odd order filter; slightly assymetric */
+      /* the last coefficient */
+      qi=(qi>>shift)*labs(ilsp[j-1]-wi);
+      pi=(pi>>shift)<<14;
+      qexp+=shift;
+
+      if(!(shift=MLOOP_1[(pi|qi)>>25]))
+	if(!(shift=MLOOP_2[(pi|qi)>>19]))
+	  shift=MLOOP_3[(pi|qi)>>16];
+      
+      pi>>=shift;
+      qi>>=shift;
+      qexp+=shift-14*((m+1)>>1);
+
+      pi=((pi*pi)>>16);
+      qi=((qi*qi)>>16);
+      qexp=qexp*2+m;
+
+      pi*=(1<<14)-((wi*wi)>>14);
+      qi+=pi>>14;
+
+    }else{
+      /* even order filter; still symmetric */
+
+      /* p*=p(1-w), q*=q(1+w), let normalization drift because it isn't
+	 worth tracking step by step */
+      
+      pi>>=shift;
+      qi>>=shift;
+      qexp+=shift-7*m;
+
+      pi=((pi*pi)>>16);
+      qi=((qi*qi)>>16);
+      qexp=qexp*2+m;
+      
+      pi*=(1<<14)-wi;
+      qi*=(1<<14)+wi;
+      qi=(qi+pi)>>14;
+      
+    }
+    
+
+    /* we've let the normalization drift because it wasn't important;
+       however, for the lookup, things must be normalized again.  We
+       need at most one right shift or a number of left shifts */
+
+    if(qi&0xffff0000){ /* checks for 1.xxxxxxxxxxxxxxxx */
+      qi>>=1; qexp++; 
+    }else
+      while(qi && !(qi&0x8000)){ /* checks for 0.0xxxxxxxxxxxxxxx or less*/
+	qi<<=1; qexp--; 
+      }
+
+#endif
+
+    amp=vorbis_fromdBlook_i(ampi*                     /*  n.4         */
+			    vorbis_invsqlook_i(qi,qexp)- 
+			                              /*  m.8, m+n<=8 */
+			    ampoffseti);              /*  8.12[0]     */
+    
+#ifdef _LOW_ACCURACY_
+    amp>>=9;
+#endif
+    curve[i]= MULT31_SHIFT15(curve[i],amp);
+
+    while(++i<n){
+	
+      /* line plot to get new f */
+      ferr+=fdy;
+      if(ferr>=fdx){
+	ferr-=fdx;
+	f++;
+      }
+      f+=fbase;
+      
+      if(f>=nextf)break;
+
+      curve[i]= MULT31_SHIFT15(curve[i],amp);
+    }
+
+    while(1){
+      map++;
+
+      if(map+1<ln){
+	
+#ifdef _LOW_ACCURACY_
+	nextbark=((tBnyq1<<11)/ln*(map+1))>>12;
+#else
+	nextbark=MULT31((map+1)*(imap>>1),tBnyq1);
+#endif
+	nextf=barklook[nextbark>>14]+
+	  (((nextbark&0x3fff)*
+	    (barklook[(nextbark>>14)+1]-barklook[nextbark>>14]))>>14);
+	if(f<=nextf)break;
+	
+      }else{
+	nextf=9999999;
+	break;
+      }
+    }
+    if(map>=ln){
+      map=ln-1; /* guard against the approximation */      
+      nextf=9999999;
+    }
+  }
+}
+
+/*************** vorbis decode glue ************/
+
+void floor0_free_info(vorbis_info_floor *i){
+  vorbis_info_floor0 *info=(vorbis_info_floor0 *)i;
+  if(info)_ogg_free(info);
+}
+
+vorbis_info_floor *floor0_info_unpack (vorbis_info *vi,oggpack_buffer *opb){
+  codec_setup_info     *ci=(codec_setup_info *)vi->codec_setup;
+  int j;
+
+  vorbis_info_floor0 *info=(vorbis_info_floor0 *)_ogg_malloc(sizeof(*info));
+  info->order=oggpack_read(opb,8);
+  info->rate=oggpack_read(opb,16);
+  info->barkmap=oggpack_read(opb,16);
+  info->ampbits=oggpack_read(opb,6);
+  info->ampdB=oggpack_read(opb,8);
+  info->numbooks=oggpack_read(opb,4)+1;
+  
+  if(info->order<1)goto err_out;
+  if(info->rate<1)goto err_out;
+  if(info->barkmap<1)goto err_out;
+    
+  for(j=0;j<info->numbooks;j++){
+    info->books[j]=oggpack_read(opb,8);
+    if(info->books[j]>=ci->books)goto err_out;
+  }
+
+  if(oggpack_eop(opb))goto err_out;
+  return(info);
+
+ err_out:
+  floor0_free_info(info);
+  return(NULL);
+}
+
+int floor0_memosize(vorbis_info_floor *i){
+  vorbis_info_floor0 *info=(vorbis_info_floor0 *)i;
+  return info->order+1;
+}
+
+ogg_int32_t *floor0_inverse1(vorbis_dsp_state *vd,vorbis_info_floor *i,
+			     ogg_int32_t *lsp){
+  vorbis_info_floor0 *info=(vorbis_info_floor0 *)i;
+  int j,k;
+  
+  int ampraw=oggpack_read(&vd->opb,info->ampbits);
+  if(ampraw>0){ /* also handles the -1 out of data case */
+    long maxval=(1<<info->ampbits)-1;
+    int amp=((ampraw*info->ampdB)<<4)/maxval;
+    int booknum=oggpack_read(&vd->opb,_ilog(info->numbooks));
+    
+    if(booknum!=-1 && booknum<info->numbooks){ /* be paranoid */
+      codec_setup_info  *ci=(codec_setup_info *)vd->vi->codec_setup;
+      codebook *b=ci->book_param+info->books[booknum];
+      ogg_int32_t last=0;
+            
+      for(j=0;j<info->order;j+=b->dim)
+	if(vorbis_book_decodev_set(b,lsp+j,&vd->opb,b->dim,-24)==-1)goto eop;
+      for(j=0;j<info->order;){
+	for(k=0;k<b->dim;k++,j++)lsp[j]+=last;
+	last=lsp[j-1];
+      }
+      
+      lsp[info->order]=amp;
+      return(lsp);
+    }
+  }
+ eop:
+  return(NULL);
+}
+
+int floor0_inverse2(vorbis_dsp_state *vd,vorbis_info_floor *i,
+			   ogg_int32_t *lsp,ogg_int32_t *out){
+  vorbis_info_floor0 *info=(vorbis_info_floor0 *)i;
+  codec_setup_info  *ci=(codec_setup_info *)vd->vi->codec_setup;
+  
+  if(lsp){
+    ogg_int32_t amp=lsp[info->order];
+
+    /* take the coefficients back to a spectral envelope curve */
+    vorbis_lsp_to_curve(out,ci->blocksizes[vd->W]/2,info->barkmap,
+			lsp,info->order,amp,info->ampdB,
+			info->rate>>1);
+    return(1);
+  }
+  memset(out,0,sizeof(*out)*ci->blocksizes[vd->W]/2);
+  return(0);
+}
+
diff --git a/Tremor/floor1.c b/Tremor/floor1.c
new file mode 100644
index 0000000..44091f5
--- /dev/null
+++ b/Tremor/floor1.c
@@ -0,0 +1,351 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE.   *
+ *                                                                  *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2003    *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************
+
+ function: floor backend 1 implementation
+
+ ********************************************************************/
+
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include "ogg.h"
+#include "ivorbiscodec.h"
+#include "codec_internal.h"
+#include "codebook.h"
+#include "misc.h"
+
+extern const ogg_int32_t FLOOR_fromdB_LOOKUP[];
+#define floor1_rangedB 140 /* floor 1 fixed at -140dB to 0dB range */
+#define VIF_POSIT 63
+
+/***********************************************/
+ 
+void floor1_free_info(vorbis_info_floor *i){
+  vorbis_info_floor1 *info=(vorbis_info_floor1 *)i;
+  if(info){
+    if(info->class)_ogg_free(info->class);
+    if(info->partitionclass)_ogg_free(info->partitionclass);
+    if(info->postlist)_ogg_free(info->postlist);
+    if(info->forward_index)_ogg_free(info->forward_index);
+    if(info->hineighbor)_ogg_free(info->hineighbor);
+    if(info->loneighbor)_ogg_free(info->loneighbor);
+    memset(info,0,sizeof(*info));
+    _ogg_free(info);
+  }
+}
+
+static int ilog(unsigned int v){
+  int ret=0;
+  while(v){
+    ret++;
+    v>>=1;
+  }
+  return(ret);
+}
+
+static void mergesort(char *index,ogg_uint16_t *vals,ogg_uint16_t n){
+  ogg_uint16_t i,j;
+  char *temp,*A=index,*B=_ogg_malloc(n*sizeof(*B));
+
+  for(i=1;i<n;i<<=1){
+    for(j=0;j+i<n;){
+      int k1=j;
+      int mid=j+i;
+      int k2=mid;
+      int end=(j+i*2<n?j+i*2:n);
+      while(k1<mid && k2<end){
+	if(vals[A[k1]]<vals[A[k2]])
+	  B[j++]=A[k1++];
+	else
+	  B[j++]=A[k2++];
+      }
+      while(k1<mid) B[j++]=A[k1++];
+      while(k2<end) B[j++]=A[k2++];
+    }
+    for(;j<n;j++)B[j]=A[j];
+    temp=A;A=B;B=temp;
+  }
+ 
+  if(B==index){
+    for(j=0;j<n;j++)B[j]=A[j];
+    _ogg_free(A);
+  }else
+    _ogg_free(B);
+}
+
+
+vorbis_info_floor *floor1_info_unpack (vorbis_info *vi,oggpack_buffer *opb){
+  codec_setup_info     *ci=(codec_setup_info *)vi->codec_setup;
+  int j,k,count=0,maxclass=-1,rangebits;
+  
+  vorbis_info_floor1 *info=(vorbis_info_floor1 *)_ogg_calloc(1,sizeof(*info));
+  /* read partitions */
+  info->partitions=oggpack_read(opb,5); /* only 0 to 31 legal */
+  info->partitionclass=
+    (char *)_ogg_malloc(info->partitions*sizeof(*info->partitionclass));
+  for(j=0;j<info->partitions;j++){
+    info->partitionclass[j]=oggpack_read(opb,4); /* only 0 to 15 legal */
+    if(maxclass<info->partitionclass[j])maxclass=info->partitionclass[j];
+  }
+
+  /* read partition classes */
+  info->class=
+    (floor1class *)_ogg_malloc((maxclass+1)*sizeof(*info->class));
+  for(j=0;j<maxclass+1;j++){
+    info->class[j].class_dim=oggpack_read(opb,3)+1; /* 1 to 8 */
+    info->class[j].class_subs=oggpack_read(opb,2); /* 0,1,2,3 bits */
+    if(oggpack_eop(opb)<0) goto err_out;
+    if(info->class[j].class_subs)
+      info->class[j].class_book=oggpack_read(opb,8);
+    else
+      info->class[j].class_book=0;
+    if(info->class[j].class_book>=ci->books)goto err_out;
+    for(k=0;k<(1<<info->class[j].class_subs);k++){
+      info->class[j].class_subbook[k]=oggpack_read(opb,8)-1;
+      if(info->class[j].class_subbook[k]>=ci->books &&
+	 info->class[j].class_subbook[k]!=0xff)goto err_out;
+    }
+  }
+
+  /* read the post list */
+  info->mult=oggpack_read(opb,2)+1;     /* only 1,2,3,4 legal now */ 
+  rangebits=oggpack_read(opb,4);
+
+  for(j=0,k=0;j<info->partitions;j++)
+    count+=info->class[info->partitionclass[j]].class_dim; 
+  info->postlist=
+    (ogg_uint16_t *)_ogg_malloc((count+2)*sizeof(*info->postlist));
+  info->forward_index=
+    (char *)_ogg_malloc((count+2)*sizeof(*info->forward_index));
+  info->loneighbor=
+    (char *)_ogg_malloc(count*sizeof(*info->loneighbor));
+  info->hineighbor=
+    (char *)_ogg_malloc(count*sizeof(*info->hineighbor));
+
+  count=0;
+  for(j=0,k=0;j<info->partitions;j++){
+    count+=info->class[info->partitionclass[j]].class_dim; 
+    for(;k<count;k++){
+      int t=info->postlist[k+2]=oggpack_read(opb,rangebits);
+      if(t>=(1<<rangebits))goto err_out;
+    }
+  }
+  if(oggpack_eop(opb))goto err_out;
+  info->postlist[0]=0;
+  info->postlist[1]=1<<rangebits;
+  info->posts=count+2;
+
+  /* also store a sorted position index */
+  for(j=0;j<info->posts;j++)info->forward_index[j]=j;
+  mergesort(info->forward_index,info->postlist,info->posts);
+  
+  /* discover our neighbors for decode where we don't use fit flags
+     (that would push the neighbors outward) */
+  for(j=0;j<info->posts-2;j++){
+    int lo=0;
+    int hi=1;
+    int lx=0;
+    int hx=info->postlist[1];
+    int currentx=info->postlist[j+2];
+    for(k=0;k<j+2;k++){
+      int x=info->postlist[k];
+      if(x>lx && x<currentx){
+	lo=k;
+	lx=x;
+      }
+      if(x<hx && x>currentx){
+	hi=k;
+	hx=x;
+      }
+    }
+    info->loneighbor[j]=lo;
+    info->hineighbor[j]=hi;
+  }
+
+  return(info);
+  
+ err_out:
+  floor1_free_info(info);
+  return(NULL);
+}
+
+static int render_point(int x0,int x1,int y0,int y1,int x){
+  y0&=0x7fff; /* mask off flag */
+  y1&=0x7fff;
+    
+  {
+    int dy=y1-y0;
+    int adx=x1-x0;
+    int ady=abs(dy);
+    int err=ady*(x-x0);
+    
+    int off=err/adx;
+    if(dy<0)return(y0-off);
+    return(y0+off);
+  }
+}
+
+static void render_line(int n,int x0,int x1,int y0,int y1,ogg_int32_t *d){
+  int dy=y1-y0;
+  int adx=x1-x0;
+  int ady=abs(dy);
+  int base=dy/adx;
+  int sy=(dy<0?base-1:base+1);
+  int x=x0;
+  int y=y0;
+  int err=0;
+
+  if(n>x1)n=x1;
+  ady-=abs(base*adx);
+
+  if(x<n)
+    d[x]= MULT31_SHIFT15(d[x],FLOOR_fromdB_LOOKUP[y]);
+
+  while(++x<n){
+    err=err+ady;
+    if(err>=adx){
+      err-=adx;
+      y+=sy;
+    }else{
+      y+=base;
+    }
+    d[x]= MULT31_SHIFT15(d[x],FLOOR_fromdB_LOOKUP[y]);
+  }
+}
+
+int floor1_memosize(vorbis_info_floor *i){
+  vorbis_info_floor1 *info=(vorbis_info_floor1 *)i;
+  return info->posts;
+}
+
+static int quant_look[4]={256,128,86,64};
+
+ogg_int32_t *floor1_inverse1(vorbis_dsp_state *vd,vorbis_info_floor *in,
+			     ogg_int32_t *fit_value){
+  vorbis_info_floor1 *info=(vorbis_info_floor1 *)in;
+  codec_setup_info   *ci=(codec_setup_info *)vd->vi->codec_setup;
+  
+  int i,j,k;
+  codebook *books=ci->book_param;   
+  int quant_q=quant_look[info->mult-1];
+
+  /* unpack wrapped/predicted values from stream */
+  if(oggpack_read(&vd->opb,1)==1){
+    fit_value[0]=oggpack_read(&vd->opb,ilog(quant_q-1));
+    fit_value[1]=oggpack_read(&vd->opb,ilog(quant_q-1));
+    
+    /* partition by partition */
+    /* partition by partition */
+    for(i=0,j=2;i<info->partitions;i++){
+      int classv=info->partitionclass[i];
+      int cdim=info->class[classv].class_dim;
+      int csubbits=info->class[classv].class_subs;
+      int csub=1<<csubbits;
+      int cval=0;
+
+      /* decode the partition's first stage cascade value */
+      if(csubbits){
+	cval=vorbis_book_decode(books+info->class[classv].class_book,&vd->opb);
+
+	if(cval==-1)goto eop;
+      }
+
+      for(k=0;k<cdim;k++){
+	int book=info->class[classv].class_subbook[cval&(csub-1)];
+	cval>>=csubbits;
+	if(book!=0xff){
+	  if((fit_value[j+k]=vorbis_book_decode(books+book,&vd->opb))==-1)
+	    goto eop;
+	}else{
+	  fit_value[j+k]=0;
+	}
+      }
+      j+=cdim;
+    }
+
+    /* unwrap positive values and reconsitute via linear interpolation */
+    for(i=2;i<info->posts;i++){
+      int predicted=render_point(info->postlist[info->loneighbor[i-2]],
+				 info->postlist[info->hineighbor[i-2]],
+				 fit_value[info->loneighbor[i-2]],
+				 fit_value[info->hineighbor[i-2]],
+				 info->postlist[i]);
+      int hiroom=quant_q-predicted;
+      int loroom=predicted;
+      int room=(hiroom<loroom?hiroom:loroom)<<1;
+      int val=fit_value[i];
+
+      if(val){
+	if(val>=room){
+	  if(hiroom>loroom){
+	    val = val-loroom;
+	  }else{
+	  val = -1-(val-hiroom);
+	  }
+	}else{
+	  if(val&1){
+	    val= -((val+1)>>1);
+	  }else{
+	    val>>=1;
+	  }
+	}
+
+	fit_value[i]=val+predicted;
+	fit_value[info->loneighbor[i-2]]&=0x7fff;
+	fit_value[info->hineighbor[i-2]]&=0x7fff;
+
+      }else{
+	fit_value[i]=predicted|0x8000;
+      }
+	
+    }
+
+    return(fit_value);
+  }
+ eop:
+  return(NULL);
+}
+
+int floor1_inverse2(vorbis_dsp_state *vd,vorbis_info_floor *in,
+		    ogg_int32_t *fit_value,ogg_int32_t *out){
+  vorbis_info_floor1 *info=(vorbis_info_floor1 *)in;
+
+  codec_setup_info   *ci=(codec_setup_info *)vd->vi->codec_setup;
+  int                  n=ci->blocksizes[vd->W]/2;
+  int j;
+
+  if(fit_value){
+    /* render the lines */
+    int hx=0;
+    int lx=0;
+    int ly=fit_value[0]*info->mult;
+    for(j=1;j<info->posts;j++){
+      int current=info->forward_index[j];
+      int hy=fit_value[current]&0x7fff;
+      if(hy==fit_value[current]){
+	
+	hy*=info->mult;
+	hx=info->postlist[current];
+	
+	render_line(n,lx,hx,ly,hy,out);
+	
+	lx=hx;
+	ly=hy;
+      }
+    }
+    for(j=hx;j<n;j++)out[j]*=ly; /* be certain */    
+    return(1);
+  }
+  memset(out,0,sizeof(*out)*n);
+  return(0);
+}
diff --git a/Tremor/floor_lookup.c b/Tremor/floor_lookup.c
new file mode 100644
index 0000000..be0554e
--- /dev/null
+++ b/Tremor/floor_lookup.c
@@ -0,0 +1,92 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE.   *
+ *                                                                  *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2003    *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************
+
+ function: floor dB lookup
+
+ ********************************************************************/
+
+#include "os.h"
+
+#ifdef _LOW_ACCURACY_
+#  define XdB(n) ((((n)>>8)+1)>>1)
+#else
+#  define XdB(n) (n)
+#endif
+
+const ogg_int32_t FLOOR_fromdB_LOOKUP[256]={
+  XdB(0x000000e5), XdB(0x000000f4), XdB(0x00000103), XdB(0x00000114),
+  XdB(0x00000126), XdB(0x00000139), XdB(0x0000014e), XdB(0x00000163),
+  XdB(0x0000017a), XdB(0x00000193), XdB(0x000001ad), XdB(0x000001c9),
+  XdB(0x000001e7), XdB(0x00000206), XdB(0x00000228), XdB(0x0000024c),
+  XdB(0x00000272), XdB(0x0000029b), XdB(0x000002c6), XdB(0x000002f4),
+  XdB(0x00000326), XdB(0x0000035a), XdB(0x00000392), XdB(0x000003cd),
+  XdB(0x0000040c), XdB(0x00000450), XdB(0x00000497), XdB(0x000004e4),
+  XdB(0x00000535), XdB(0x0000058c), XdB(0x000005e8), XdB(0x0000064a),
+  XdB(0x000006b3), XdB(0x00000722), XdB(0x00000799), XdB(0x00000818),
+  XdB(0x0000089e), XdB(0x0000092e), XdB(0x000009c6), XdB(0x00000a69),
+  XdB(0x00000b16), XdB(0x00000bcf), XdB(0x00000c93), XdB(0x00000d64),
+  XdB(0x00000e43), XdB(0x00000f30), XdB(0x0000102d), XdB(0x0000113a),
+  XdB(0x00001258), XdB(0x0000138a), XdB(0x000014cf), XdB(0x00001629),
+  XdB(0x0000179a), XdB(0x00001922), XdB(0x00001ac4), XdB(0x00001c82),
+  XdB(0x00001e5c), XdB(0x00002055), XdB(0x0000226f), XdB(0x000024ac),
+  XdB(0x0000270e), XdB(0x00002997), XdB(0x00002c4b), XdB(0x00002f2c),
+  XdB(0x0000323d), XdB(0x00003581), XdB(0x000038fb), XdB(0x00003caf),
+  XdB(0x000040a0), XdB(0x000044d3), XdB(0x0000494c), XdB(0x00004e10),
+  XdB(0x00005323), XdB(0x0000588a), XdB(0x00005e4b), XdB(0x0000646b),
+  XdB(0x00006af2), XdB(0x000071e5), XdB(0x0000794c), XdB(0x0000812e),
+  XdB(0x00008993), XdB(0x00009283), XdB(0x00009c09), XdB(0x0000a62d),
+  XdB(0x0000b0f9), XdB(0x0000bc79), XdB(0x0000c8b9), XdB(0x0000d5c4),
+  XdB(0x0000e3a9), XdB(0x0000f274), XdB(0x00010235), XdB(0x000112fd),
+  XdB(0x000124dc), XdB(0x000137e4), XdB(0x00014c29), XdB(0x000161bf),
+  XdB(0x000178bc), XdB(0x00019137), XdB(0x0001ab4a), XdB(0x0001c70e),
+  XdB(0x0001e4a1), XdB(0x0002041f), XdB(0x000225aa), XdB(0x00024962),
+  XdB(0x00026f6d), XdB(0x000297f0), XdB(0x0002c316), XdB(0x0002f109),
+  XdB(0x000321f9), XdB(0x00035616), XdB(0x00038d97), XdB(0x0003c8b4),
+  XdB(0x000407a7), XdB(0x00044ab2), XdB(0x00049218), XdB(0x0004de23),
+  XdB(0x00052f1e), XdB(0x0005855c), XdB(0x0005e135), XdB(0x00064306),
+  XdB(0x0006ab33), XdB(0x00071a24), XdB(0x0007904b), XdB(0x00080e20),
+  XdB(0x00089422), XdB(0x000922da), XdB(0x0009bad8), XdB(0x000a5cb6),
+  XdB(0x000b091a), XdB(0x000bc0b1), XdB(0x000c8436), XdB(0x000d5471),
+  XdB(0x000e3233), XdB(0x000f1e5f), XdB(0x001019e4), XdB(0x001125c1),
+  XdB(0x00124306), XdB(0x001372d5), XdB(0x0014b663), XdB(0x00160ef7),
+  XdB(0x00177df0), XdB(0x001904c1), XdB(0x001aa4f9), XdB(0x001c603d),
+  XdB(0x001e384f), XdB(0x00202f0f), XdB(0x0022467a), XdB(0x002480b1),
+  XdB(0x0026dff7), XdB(0x002966b3), XdB(0x002c1776), XdB(0x002ef4fc),
+  XdB(0x0032022d), XdB(0x00354222), XdB(0x0038b828), XdB(0x003c67c2),
+  XdB(0x004054ae), XdB(0x004482e8), XdB(0x0048f6af), XdB(0x004db488),
+  XdB(0x0052c142), XdB(0x005821ff), XdB(0x005ddc33), XdB(0x0063f5b0),
+  XdB(0x006a74a7), XdB(0x00715faf), XdB(0x0078bdce), XdB(0x0080967f),
+  XdB(0x0088f1ba), XdB(0x0091d7f9), XdB(0x009b5247), XdB(0x00a56a41),
+  XdB(0x00b02a27), XdB(0x00bb9ce2), XdB(0x00c7ce12), XdB(0x00d4ca17),
+  XdB(0x00e29e20), XdB(0x00f15835), XdB(0x0101074b), XdB(0x0111bb4e),
+  XdB(0x01238531), XdB(0x01367704), XdB(0x014aa402), XdB(0x016020a7),
+  XdB(0x017702c3), XdB(0x018f6190), XdB(0x01a955cb), XdB(0x01c4f9cf),
+  XdB(0x01e269a8), XdB(0x0201c33b), XdB(0x0223265a), XdB(0x0246b4ea),
+  XdB(0x026c9302), XdB(0x0294e716), XdB(0x02bfda13), XdB(0x02ed9793),
+  XdB(0x031e4e09), XdB(0x03522ee4), XdB(0x03896ed0), XdB(0x03c445e2),
+  XdB(0x0402efd6), XdB(0x0445ac4b), XdB(0x048cbefc), XdB(0x04d87013),
+  XdB(0x05290c67), XdB(0x057ee5ca), XdB(0x05da5364), XdB(0x063bb204),
+  XdB(0x06a36485), XdB(0x0711d42b), XdB(0x0787710e), XdB(0x0804b299),
+  XdB(0x088a17ef), XdB(0x0918287e), XdB(0x09af747c), XdB(0x0a50957e),
+  XdB(0x0afc2f19), XdB(0x0bb2ef7f), XdB(0x0c759034), XdB(0x0d44d6ca),
+  XdB(0x0e2195bc), XdB(0x0f0cad0d), XdB(0x10070b62), XdB(0x1111aeea),
+  XdB(0x122da66c), XdB(0x135c120f), XdB(0x149e24d9), XdB(0x15f525b1),
+  XdB(0x176270e3), XdB(0x18e7794b), XdB(0x1a85c9ae), XdB(0x1c3f06d1),
+  XdB(0x1e14f07d), XdB(0x200963d7), XdB(0x221e5ccd), XdB(0x2455f870),
+  XdB(0x26b2770b), XdB(0x29363e2b), XdB(0x2be3db5c), XdB(0x2ebe06b6),
+  XdB(0x31c7a55b), XdB(0x3503ccd4), XdB(0x3875c5aa), XdB(0x3c210f44),
+  XdB(0x4009632b), XdB(0x4432b8cf), XdB(0x48a149bc), XdB(0x4d59959e),
+  XdB(0x52606733), XdB(0x57bad899), XdB(0x5d6e593a), XdB(0x6380b298),
+  XdB(0x69f80e9a), XdB(0x70dafda8), XdB(0x78307d76), XdB(0x7fffffff),
+};
+  
diff --git a/Tremor/framing.c b/Tremor/framing.c
new file mode 100644
index 0000000..4842143
--- /dev/null
+++ b/Tremor/framing.c
@@ -0,0 +1,1117 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE.   *
+ *                                                                  *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2003    *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************
+
+ function: decode Ogg streams back into raw packets
+
+ note: The CRC code is directly derived from public domain code by
+ Ross Williams (ross@guest.adelaide.edu.au).  See docs/framing.html
+ for details.
+
+ ********************************************************************/
+
+#include <stdlib.h>
+#include <string.h>
+#include "ogg.h"
+#include "misc.h"
+
+
+/* A complete description of Ogg framing exists in docs/framing.html */
+
+/* basic, centralized Ogg memory management based on linked lists of
+   references to refcounted memory buffers.  References and buffers
+   are both recycled.  Buffers are passed around and consumed in
+   reference form. */
+
+static ogg_buffer_state *ogg_buffer_create(void){
+  ogg_buffer_state *bs=_ogg_calloc(1,sizeof(*bs));
+  return bs;
+}
+
+/* destruction is 'lazy'; there may be memory references outstanding,
+   and yanking the buffer state out from underneath would be
+   antisocial.  Dealloc what is currently unused and have
+   _release_one watch for the stragglers to come in.  When they do,
+   finish destruction. */
+
+/* call the helper while holding lock */
+static void _ogg_buffer_destroy(ogg_buffer_state *bs){
+  ogg_buffer *bt;
+  ogg_reference *rt;
+
+  if(bs->shutdown){
+
+    bt=bs->unused_buffers;
+    rt=bs->unused_references;
+
+    while(bt){
+      ogg_buffer *b=bt;
+      bt=b->ptr.next;
+      if(b->data)_ogg_free(b->data);
+      _ogg_free(b);
+    }
+    bs->unused_buffers=0;
+    while(rt){
+      ogg_reference *r=rt;
+      rt=r->next;
+      _ogg_free(r);
+    }
+    bs->unused_references=0;
+
+    if(!bs->outstanding)
+      _ogg_free(bs);
+
+  }
+}
+
+static void ogg_buffer_destroy(ogg_buffer_state *bs){
+  bs->shutdown=1;
+  _ogg_buffer_destroy(bs);
+}
+
+static ogg_buffer *_fetch_buffer(ogg_buffer_state *bs,long bytes){
+  ogg_buffer    *ob;
+  bs->outstanding++;
+
+  /* do we have an unused buffer sitting in the pool? */
+  if(bs->unused_buffers){
+    ob=bs->unused_buffers;
+    bs->unused_buffers=ob->ptr.next;
+
+    /* if the unused buffer is too small, grow it */
+    if(ob->size<bytes){
+      ob->data=_ogg_realloc(ob->data,bytes);
+      ob->size=bytes;
+    }
+  }else{
+    /* allocate a new buffer */
+    ob=_ogg_malloc(sizeof(*ob));
+    ob->data=_ogg_malloc(bytes<16?16:bytes);
+    ob->size=bytes;
+  }
+
+  ob->refcount=1;
+  ob->ptr.owner=bs;
+  return ob;
+}
+
+static ogg_reference *_fetch_ref(ogg_buffer_state *bs){
+  ogg_reference *or;
+  bs->outstanding++;
+
+  /* do we have an unused reference sitting in the pool? */
+  if(bs->unused_references){
+    or=bs->unused_references;
+    bs->unused_references=or->next;
+  }else{
+    /* allocate a new reference */
+    or=_ogg_malloc(sizeof(*or));
+  }
+
+  or->begin=0;
+  or->length=0;
+  or->next=0;
+  return or;
+}
+
+/* fetch a reference pointing to a fresh, initially continguous buffer
+   of at least [bytes] length */
+static ogg_reference *ogg_buffer_alloc(ogg_buffer_state *bs,long bytes){
+  ogg_buffer    *ob=_fetch_buffer(bs,bytes);
+  ogg_reference *or=_fetch_ref(bs);
+  or->buffer=ob;
+  return or;
+}
+
+/* enlarge the data buffer in the current link */
+static void ogg_buffer_realloc(ogg_reference *or,long bytes){
+  ogg_buffer    *ob=or->buffer;
+  
+  /* if the unused buffer is too small, grow it */
+  if(ob->size<bytes){
+    ob->data=_ogg_realloc(ob->data,bytes);
+    ob->size=bytes;
+  }
+}
+
+static void _ogg_buffer_mark_one(ogg_reference *or){
+  or->buffer->refcount++;
+}
+
+/* increase the refcount of the buffers to which the reference points */
+static void ogg_buffer_mark(ogg_reference *or){
+  while(or){
+    _ogg_buffer_mark_one(or);
+    or=or->next;
+  }
+}
+
+/* duplicate a reference (pointing to the same actual buffer memory)
+   and increment buffer refcount.  If the desired segment is zero
+   length, a zero length ref is returned. */
+static ogg_reference *ogg_buffer_sub(ogg_reference *or,long length){
+  ogg_reference *ret=0,*head=0;
+  
+  /* duplicate the reference chain; increment refcounts */
+  while(or && length){
+    ogg_reference *temp=_fetch_ref(or->buffer->ptr.owner);
+    if(head)
+      head->next=temp;
+    else
+      ret=temp;
+    head=temp;
+    head->buffer=or->buffer;    
+    head->begin=or->begin;
+    head->length=length;
+    if(head->length>or->length)
+      head->length=or->length;
+    
+    length-=head->length;
+    or=or->next;
+  }
+
+  ogg_buffer_mark(ret);
+  return ret;
+}
+
+ogg_reference *ogg_buffer_dup(ogg_reference *or){
+  ogg_reference *ret=0,*head=0;
+  /* duplicate the reference chain; increment refcounts */
+  while(or){
+    ogg_reference *temp=_fetch_ref(or->buffer->ptr.owner);
+    if(head)
+      head->next=temp;
+    else
+      ret=temp;
+    head=temp;
+    head->buffer=or->buffer;    
+    head->begin=or->begin;
+    head->length=or->length;
+    or=or->next;
+  }
+
+  ogg_buffer_mark(ret);
+  return ret;
+}
+
+/* split a reference into two references; 'return' is a reference to
+   the buffer preceeding pos and 'head'/'tail' are the buffer past the
+   split.  If pos is at or past the end of the passed in segment,
+   'head/tail' are NULL */
+static ogg_reference *ogg_buffer_split(ogg_reference **tail,
+                                ogg_reference **head,long pos){
+
+  /* walk past any preceeding fragments to one of:
+     a) the exact boundary that seps two fragments
+     b) the fragment that needs split somewhere in the middle */
+  ogg_reference *ret=*tail;
+  ogg_reference *or=*tail;
+
+  while(or && pos>or->length){
+    pos-=or->length;
+    or=or->next;
+  }
+
+  if(!or || pos==0){
+
+    return 0;
+    
+  }else{
+    
+    if(pos>=or->length){
+      /* exact split, or off the end? */
+      if(or->next){
+        
+        /* a split */
+        *tail=or->next;
+        or->next=0;
+        
+      }else{
+        
+        /* off or at the end */
+        *tail=*head=0;
+        
+      }
+    }else{
+      
+      /* split within a fragment */
+      long lengthA=pos;
+      long beginB=or->begin+pos;
+      long lengthB=or->length-pos;
+      
+      /* make a new reference to tail the second piece */
+      *tail=_fetch_ref(or->buffer->ptr.owner);
+      
+      (*tail)->buffer=or->buffer;
+      (*tail)->begin=beginB;
+      (*tail)->length=lengthB;
+      (*tail)->next=or->next;
+      _ogg_buffer_mark_one(*tail);
+      if(head && or==*head)*head=*tail;    
+      
+      /* update the first piece */
+      or->next=0;
+      or->length=lengthA;
+      
+    }
+  }
+  return ret;
+}
+
+static void ogg_buffer_release_one(ogg_reference *or){
+  ogg_buffer *ob=or->buffer;
+  ogg_buffer_state *bs=ob->ptr.owner;
+
+  ob->refcount--;
+  if(ob->refcount==0){
+    bs->outstanding--; /* for the returned buffer */
+    ob->ptr.next=bs->unused_buffers;
+    bs->unused_buffers=ob;
+  }
+  
+  bs->outstanding--; /* for the returned reference */
+  or->next=bs->unused_references;
+  bs->unused_references=or;
+
+  _ogg_buffer_destroy(bs); /* lazy cleanup (if needed) */
+
+}
+
+/* release the references, decrease the refcounts of buffers to which
+   they point, release any buffers with a refcount that drops to zero */
+static void ogg_buffer_release(ogg_reference *or){
+  while(or){
+    ogg_reference *next=or->next;
+    ogg_buffer_release_one(or);
+    or=next;
+  }
+}
+
+static ogg_reference *ogg_buffer_pretruncate(ogg_reference *or,long pos){
+  /* release preceeding fragments we don't want */
+  while(or && pos>=or->length){
+    ogg_reference *next=or->next;
+    pos-=or->length;
+    ogg_buffer_release_one(or);
+    or=next;
+  }
+  if (or) {
+    or->begin+=pos;
+    or->length-=pos;
+  }
+  return or;
+}
+
+static ogg_reference *ogg_buffer_walk(ogg_reference *or){
+  if(!or)return NULL;
+  while(or->next){
+    or=or->next;
+  }
+  return(or);
+}
+
+/* *head is appended to the front end (head) of *tail; both continue to
+   be valid pointers, with *tail at the tail and *head at the head */
+static ogg_reference *ogg_buffer_cat(ogg_reference *tail, ogg_reference *head){
+  if(!tail)return head;
+
+  while(tail->next){
+    tail=tail->next;
+  }
+  tail->next=head;
+  return ogg_buffer_walk(head);
+}
+
+static void _positionB(oggbyte_buffer *b,int pos){
+  if(pos<b->pos){
+    /* start at beginning, scan forward */
+    b->ref=b->baseref;
+    b->pos=0;
+    b->end=b->pos+b->ref->length;
+    b->ptr=b->ref->buffer->data+b->ref->begin;
+  }
+}
+
+static void _positionF(oggbyte_buffer *b,int pos){
+  /* scan forward for position */
+  while(pos>=b->end){
+    /* just seek forward */
+    b->pos+=b->ref->length;
+    b->ref=b->ref->next;
+    b->end=b->ref->length+b->pos;
+    b->ptr=b->ref->buffer->data+b->ref->begin;
+  }
+}
+
+static int oggbyte_init(oggbyte_buffer *b,ogg_reference *or){
+  memset(b,0,sizeof(*b));
+  if(or){
+    b->ref=b->baseref=or;
+    b->pos=0;
+    b->end=b->ref->length;
+    b->ptr=b->ref->buffer->data+b->ref->begin;  
+    return 0;
+  }else
+    return -1;
+}
+
+static void oggbyte_set4(oggbyte_buffer *b,ogg_uint32_t val,int pos){
+  int i;
+  _positionB(b,pos);
+  for(i=0;i<4;i++){
+    _positionF(b,pos);
+    b->ptr[pos-b->pos]=val;
+    val>>=8;
+    ++pos;
+  }
+}
+ 
+static unsigned char oggbyte_read1(oggbyte_buffer *b,int pos){
+  _positionB(b,pos);
+  _positionF(b,pos);
+  return b->ptr[pos-b->pos];
+}
+
+static ogg_uint32_t oggbyte_read4(oggbyte_buffer *b,int pos){
+  ogg_uint32_t ret;
+  _positionB(b,pos);
+  _positionF(b,pos);
+  ret=b->ptr[pos-b->pos];
+  _positionF(b,++pos);
+  ret|=b->ptr[pos-b->pos]<<8;
+  _positionF(b,++pos);
+  ret|=b->ptr[pos-b->pos]<<16;
+  _positionF(b,++pos);
+  ret|=b->ptr[pos-b->pos]<<24;
+  return ret;
+}
+
+static ogg_int64_t oggbyte_read8(oggbyte_buffer *b,int pos){
+  ogg_int64_t ret;
+  unsigned char t[7];
+  int i;
+  _positionB(b,pos);
+  for(i=0;i<7;i++){
+    _positionF(b,pos);
+    t[i]=b->ptr[pos++ -b->pos];
+  }
+
+  _positionF(b,pos);
+  ret=b->ptr[pos-b->pos];
+
+  for(i=6;i>=0;--i)
+    ret= ret<<8 | t[i];
+
+  return ret;
+}
+
+/* Now we get to the actual framing code */
+
+int ogg_page_version(ogg_page *og){
+  oggbyte_buffer ob;
+  if(oggbyte_init(&ob,og->header))return -1;
+  return oggbyte_read1(&ob,4);
+}
+
+int ogg_page_continued(ogg_page *og){
+  oggbyte_buffer ob;
+  if(oggbyte_init(&ob,og->header))return -1;
+  return oggbyte_read1(&ob,5)&0x01;
+}
+
+int ogg_page_bos(ogg_page *og){
+  oggbyte_buffer ob;
+  if(oggbyte_init(&ob,og->header))return -1;
+  return oggbyte_read1(&ob,5)&0x02;
+}
+
+int ogg_page_eos(ogg_page *og){
+  oggbyte_buffer ob;
+  if(oggbyte_init(&ob,og->header))return -1;
+  return oggbyte_read1(&ob,5)&0x04;
+}
+
+ogg_int64_t ogg_page_granulepos(ogg_page *og){
+  oggbyte_buffer ob;
+  if(oggbyte_init(&ob,og->header))return -1;
+  return oggbyte_read8(&ob,6);
+}
+
+ogg_uint32_t ogg_page_serialno(ogg_page *og){
+  oggbyte_buffer ob;
+  if(oggbyte_init(&ob,og->header)) return 0xffffffffUL;
+  return oggbyte_read4(&ob,14);
+}
+ 
+ogg_uint32_t ogg_page_pageno(ogg_page *og){
+  oggbyte_buffer ob;
+  if(oggbyte_init(&ob,og->header))return 0xffffffffUL;
+  return oggbyte_read4(&ob,18);
+}
+
+/* returns the number of packets that are completed on this page (if
+   the leading packet is begun on a previous page, but ends on this
+   page, it's counted */
+
+/* NOTE:
+If a page consists of a packet begun on a previous page, and a new
+packet begun (but not completed) on this page, the return will be:
+  ogg_page_packets(page)   ==1, 
+  ogg_page_continued(page) !=0
+
+If a page happens to be a single packet that was begun on a
+previous page, and spans to the next page (in the case of a three or
+more page packet), the return will be: 
+  ogg_page_packets(page)   ==0, 
+  ogg_page_continued(page) !=0
+*/
+
+int ogg_page_packets(ogg_page *og){
+  int i;
+  int n;
+  int count=0;
+  oggbyte_buffer ob;
+  oggbyte_init(&ob,og->header);
+
+  n=oggbyte_read1(&ob,26);
+  for(i=0;i<n;i++)
+    if(oggbyte_read1(&ob,27+i)<255)count++;
+  return(count);
+}
+
+/* Static CRC calculation table.  See older code in CVS for dead
+   run-time initialization code. */
+
+static ogg_uint32_t crc_lookup[256]={
+  0x00000000,0x04c11db7,0x09823b6e,0x0d4326d9,
+  0x130476dc,0x17c56b6b,0x1a864db2,0x1e475005,
+  0x2608edb8,0x22c9f00f,0x2f8ad6d6,0x2b4bcb61,
+  0x350c9b64,0x31cd86d3,0x3c8ea00a,0x384fbdbd,
+  0x4c11db70,0x48d0c6c7,0x4593e01e,0x4152fda9,
+  0x5f15adac,0x5bd4b01b,0x569796c2,0x52568b75,
+  0x6a1936c8,0x6ed82b7f,0x639b0da6,0x675a1011,
+  0x791d4014,0x7ddc5da3,0x709f7b7a,0x745e66cd,
+  0x9823b6e0,0x9ce2ab57,0x91a18d8e,0x95609039,
+  0x8b27c03c,0x8fe6dd8b,0x82a5fb52,0x8664e6e5,
+  0xbe2b5b58,0xbaea46ef,0xb7a96036,0xb3687d81,
+  0xad2f2d84,0xa9ee3033,0xa4ad16ea,0xa06c0b5d,
+  0xd4326d90,0xd0f37027,0xddb056fe,0xd9714b49,
+  0xc7361b4c,0xc3f706fb,0xceb42022,0xca753d95,
+  0xf23a8028,0xf6fb9d9f,0xfbb8bb46,0xff79a6f1,
+  0xe13ef6f4,0xe5ffeb43,0xe8bccd9a,0xec7dd02d,
+  0x34867077,0x30476dc0,0x3d044b19,0x39c556ae,
+  0x278206ab,0x23431b1c,0x2e003dc5,0x2ac12072,
+  0x128e9dcf,0x164f8078,0x1b0ca6a1,0x1fcdbb16,
+  0x018aeb13,0x054bf6a4,0x0808d07d,0x0cc9cdca,
+  0x7897ab07,0x7c56b6b0,0x71159069,0x75d48dde,
+  0x6b93dddb,0x6f52c06c,0x6211e6b5,0x66d0fb02,
+  0x5e9f46bf,0x5a5e5b08,0x571d7dd1,0x53dc6066,
+  0x4d9b3063,0x495a2dd4,0x44190b0d,0x40d816ba,
+  0xaca5c697,0xa864db20,0xa527fdf9,0xa1e6e04e,
+  0xbfa1b04b,0xbb60adfc,0xb6238b25,0xb2e29692,
+  0x8aad2b2f,0x8e6c3698,0x832f1041,0x87ee0df6,
+  0x99a95df3,0x9d684044,0x902b669d,0x94ea7b2a,
+  0xe0b41de7,0xe4750050,0xe9362689,0xedf73b3e,
+  0xf3b06b3b,0xf771768c,0xfa325055,0xfef34de2,
+  0xc6bcf05f,0xc27dede8,0xcf3ecb31,0xcbffd686,
+  0xd5b88683,0xd1799b34,0xdc3abded,0xd8fba05a,
+  0x690ce0ee,0x6dcdfd59,0x608edb80,0x644fc637,
+  0x7a089632,0x7ec98b85,0x738aad5c,0x774bb0eb,
+  0x4f040d56,0x4bc510e1,0x46863638,0x42472b8f,
+  0x5c007b8a,0x58c1663d,0x558240e4,0x51435d53,
+  0x251d3b9e,0x21dc2629,0x2c9f00f0,0x285e1d47,
+  0x36194d42,0x32d850f5,0x3f9b762c,0x3b5a6b9b,
+  0x0315d626,0x07d4cb91,0x0a97ed48,0x0e56f0ff,
+  0x1011a0fa,0x14d0bd4d,0x19939b94,0x1d528623,
+  0xf12f560e,0xf5ee4bb9,0xf8ad6d60,0xfc6c70d7,
+  0xe22b20d2,0xe6ea3d65,0xeba91bbc,0xef68060b,
+  0xd727bbb6,0xd3e6a601,0xdea580d8,0xda649d6f,
+  0xc423cd6a,0xc0e2d0dd,0xcda1f604,0xc960ebb3,
+  0xbd3e8d7e,0xb9ff90c9,0xb4bcb610,0xb07daba7,
+  0xae3afba2,0xaafbe615,0xa7b8c0cc,0xa379dd7b,
+  0x9b3660c6,0x9ff77d71,0x92b45ba8,0x9675461f,
+  0x8832161a,0x8cf30bad,0x81b02d74,0x857130c3,
+  0x5d8a9099,0x594b8d2e,0x5408abf7,0x50c9b640,
+  0x4e8ee645,0x4a4ffbf2,0x470cdd2b,0x43cdc09c,
+  0x7b827d21,0x7f436096,0x7200464f,0x76c15bf8,
+  0x68860bfd,0x6c47164a,0x61043093,0x65c52d24,
+  0x119b4be9,0x155a565e,0x18197087,0x1cd86d30,
+  0x029f3d35,0x065e2082,0x0b1d065b,0x0fdc1bec,
+  0x3793a651,0x3352bbe6,0x3e119d3f,0x3ad08088,
+  0x2497d08d,0x2056cd3a,0x2d15ebe3,0x29d4f654,
+  0xc5a92679,0xc1683bce,0xcc2b1d17,0xc8ea00a0,
+  0xd6ad50a5,0xd26c4d12,0xdf2f6bcb,0xdbee767c,
+  0xe3a1cbc1,0xe760d676,0xea23f0af,0xeee2ed18,
+  0xf0a5bd1d,0xf464a0aa,0xf9278673,0xfde69bc4,
+  0x89b8fd09,0x8d79e0be,0x803ac667,0x84fbdbd0,
+  0x9abc8bd5,0x9e7d9662,0x933eb0bb,0x97ffad0c,
+  0xafb010b1,0xab710d06,0xa6322bdf,0xa2f33668,
+  0xbcb4666d,0xb8757bda,0xb5365d03,0xb1f740b4};
+
+ogg_sync_state *ogg_sync_create(void){
+  ogg_sync_state *oy=_ogg_calloc(1,sizeof(*oy));
+  memset(oy,0,sizeof(*oy));
+  oy->bufferpool=ogg_buffer_create();
+  return oy;
+}
+
+int ogg_sync_destroy(ogg_sync_state *oy){
+  if(oy){
+    ogg_sync_reset(oy);
+    ogg_buffer_destroy(oy->bufferpool);
+    memset(oy,0,sizeof(*oy));
+    _ogg_free(oy);
+  }
+  return OGG_SUCCESS;
+}
+
+unsigned char *ogg_sync_bufferin(ogg_sync_state *oy, long bytes){
+
+  /* [allocate and] expose a buffer for data submission.
+
+     If there is no head fragment
+       allocate one and expose it
+     else
+       if the current head fragment has sufficient unused space
+         expose it
+       else
+         if the current head fragment is unused
+           resize and expose it
+         else
+           allocate new fragment and expose it
+  */
+
+  /* base case; fifo uninitialized */
+  if(!oy->fifo_head){
+    oy->fifo_head=oy->fifo_tail=ogg_buffer_alloc(oy->bufferpool,bytes);
+    return oy->fifo_head->buffer->data;
+  }
+  
+  /* space left in current fragment case */
+  if(oy->fifo_head->buffer->size-
+     oy->fifo_head->length-
+     oy->fifo_head->begin >= bytes)
+    return oy->fifo_head->buffer->data+
+      oy->fifo_head->length+oy->fifo_head->begin;
+
+  /* current fragment is unused, but too small */
+  if(!oy->fifo_head->length){
+    ogg_buffer_realloc(oy->fifo_head,bytes);
+    return oy->fifo_head->buffer->data+oy->fifo_head->begin;
+  }
+  
+  /* current fragment used/full; get new fragment */
+  {
+    ogg_reference *new=ogg_buffer_alloc(oy->bufferpool,bytes);
+    oy->fifo_head->next=new;
+    oy->fifo_head=new;
+  }
+  return oy->fifo_head->buffer->data;
+}
+
+int ogg_sync_wrote(ogg_sync_state *oy, long bytes){ 
+  if(!oy->fifo_head)return OGG_EINVAL;
+  if(oy->fifo_head->buffer->size-oy->fifo_head->length-oy->fifo_head->begin < 
+     bytes)return OGG_EINVAL;
+  oy->fifo_head->length+=bytes;
+  oy->fifo_fill+=bytes;
+  return OGG_SUCCESS;
+}
+
+static ogg_uint32_t _checksum(ogg_reference *or, int bytes){
+  ogg_uint32_t crc_reg=0;
+  int j,post;
+
+  while(or){
+    unsigned char *data=or->buffer->data+or->begin;
+    post=(bytes<or->length?bytes:or->length);
+    for(j=0;j<post;++j)
+      crc_reg=(crc_reg<<8)^crc_lookup[((crc_reg >> 24)&0xff)^data[j]];
+    bytes-=j;
+    or=or->next;
+  }
+
+  return crc_reg;
+}
+
+
+/* sync the stream.  This is meant to be useful for finding page
+   boundaries.
+
+   return values for this:
+  -n) skipped n bytes
+   0) page not ready; more data (no bytes skipped)
+   n) page synced at current location; page length n bytes
+   
+*/
+
+long ogg_sync_pageseek(ogg_sync_state *oy,ogg_page *og){
+  oggbyte_buffer page;
+  long           bytes,ret=0;
+
+  ogg_page_release(og);
+
+  bytes=oy->fifo_fill;
+  oggbyte_init(&page,oy->fifo_tail);
+
+  if(oy->headerbytes==0){
+    if(bytes<27)goto sync_out; /* not enough for even a minimal header */
+    
+    /* verify capture pattern */
+    if(oggbyte_read1(&page,0)!=(int)'O' ||
+       oggbyte_read1(&page,1)!=(int)'g' ||
+       oggbyte_read1(&page,2)!=(int)'g' ||
+       oggbyte_read1(&page,3)!=(int)'S'    ) goto sync_fail;
+
+    oy->headerbytes=oggbyte_read1(&page,26)+27;
+  }
+  if(bytes<oy->headerbytes)goto sync_out; /* not enough for header +
+                                             seg table */
+  if(oy->bodybytes==0){
+    int i;
+    /* count up body length in the segment table */
+    for(i=0;i<oy->headerbytes-27;i++)
+      oy->bodybytes+=oggbyte_read1(&page,27+i);
+  }
+  
+  if(oy->bodybytes+oy->headerbytes>bytes)goto sync_out;
+
+  /* we have what appears to be a complete page; last test: verify
+     checksum */
+  {
+    ogg_uint32_t chksum=oggbyte_read4(&page,22);
+    oggbyte_set4(&page,0,22);
+
+    /* Compare checksums; memory continues to be common access */
+    if(chksum!=_checksum(oy->fifo_tail,oy->bodybytes+oy->headerbytes)){
+      
+      /* D'oh.  Mismatch! Corrupt page (or miscapture and not a page
+         at all). replace the computed checksum with the one actually
+         read in; remember all the memory is common access */
+      
+      oggbyte_set4(&page,chksum,22);
+      goto sync_fail;
+    }
+    oggbyte_set4(&page,chksum,22);
+  }
+
+  /* We have a page.  Set up page return. */
+  if(og){
+    /* set up page output */
+    og->header=ogg_buffer_split(&oy->fifo_tail,&oy->fifo_head,oy->headerbytes);
+    og->header_len=oy->headerbytes;
+    og->body=ogg_buffer_split(&oy->fifo_tail,&oy->fifo_head,oy->bodybytes);
+    og->body_len=oy->bodybytes;
+  }else{
+    /* simply advance */
+    oy->fifo_tail=
+      ogg_buffer_pretruncate(oy->fifo_tail,oy->headerbytes+oy->bodybytes);
+    if(!oy->fifo_tail)oy->fifo_head=0;
+  }
+  
+  ret=oy->headerbytes+oy->bodybytes;
+  oy->unsynced=0;
+  oy->headerbytes=0;
+  oy->bodybytes=0;
+  oy->fifo_fill-=ret;
+
+  return ret;
+  
+ sync_fail:
+
+  oy->headerbytes=0;
+  oy->bodybytes=0;
+  oy->fifo_tail=ogg_buffer_pretruncate(oy->fifo_tail,1);
+  ret--;
+  
+  /* search forward through fragments for possible capture */
+  while(oy->fifo_tail){
+    /* invariant: fifo_cursor points to a position in fifo_tail */
+    unsigned char *now=oy->fifo_tail->buffer->data+oy->fifo_tail->begin;
+    unsigned char *next=memchr(now, 'O', oy->fifo_tail->length);
+      
+    if(next){
+      /* possible capture in this segment */
+      long bytes=next-now;
+      oy->fifo_tail=ogg_buffer_pretruncate(oy->fifo_tail,bytes);
+      ret-=bytes;
+      break;
+    }else{
+      /* no capture.  advance to next segment */
+      long bytes=oy->fifo_tail->length;
+      ret-=bytes;
+      oy->fifo_tail=ogg_buffer_pretruncate(oy->fifo_tail,bytes);
+    }
+  }
+  if(!oy->fifo_tail)oy->fifo_head=0;
+  oy->fifo_fill+=ret;
+
+ sync_out:
+  return ret;
+}
+
+/* sync the stream and get a page.  Keep trying until we find a page.
+   Supress 'sync errors' after reporting the first.
+
+   return values:
+   OGG_HOLE) recapture (hole in data)
+          0) need more data
+          1) page returned
+
+   Returns pointers into buffered data; invalidated by next call to
+   _stream, _clear, _init, or _buffer */
+
+int ogg_sync_pageout(ogg_sync_state *oy, ogg_page *og){
+
+  /* all we need to do is verify a page at the head of the stream
+     buffer.  If it doesn't verify, we look for the next potential
+     frame */
+
+  while(1){
+    long ret=ogg_sync_pageseek(oy,og);
+    if(ret>0){
+      /* have a page */
+      return 1;
+    }
+    if(ret==0){
+      /* need more data */
+      return 0;
+    }
+    
+    /* head did not start a synced page... skipped some bytes */
+    if(!oy->unsynced){
+      oy->unsynced=1;
+      return OGG_HOLE;
+    }
+
+    /* loop. keep looking */
+
+  }
+}
+
+/* clear things to an initial state.  Good to call, eg, before seeking */
+int ogg_sync_reset(ogg_sync_state *oy){
+
+  ogg_buffer_release(oy->fifo_tail);
+  oy->fifo_tail=0;
+  oy->fifo_head=0;
+  oy->fifo_fill=0;
+
+  oy->unsynced=0;
+  oy->headerbytes=0;
+  oy->bodybytes=0;
+  return OGG_SUCCESS;
+}
+
+ogg_stream_state *ogg_stream_create(int serialno){
+  ogg_stream_state *os=_ogg_calloc(1,sizeof(*os));
+  os->serialno=serialno;
+  os->pageno=-1;
+  return os;
+} 
+
+int ogg_stream_destroy(ogg_stream_state *os){
+  if(os){
+    ogg_buffer_release(os->header_tail);
+    ogg_buffer_release(os->body_tail);
+    memset(os,0,sizeof(*os));    
+    _ogg_free(os);
+  }
+  return OGG_SUCCESS;
+} 
+
+
+#define FINFLAG 0x80000000UL
+#define FINMASK 0x7fffffffUL
+
+static void _next_lace(oggbyte_buffer *ob,ogg_stream_state *os){
+  /* search ahead one lace */
+  os->body_fill_next=0;
+  while(os->laceptr<os->lacing_fill){
+    int val=oggbyte_read1(ob,27+os->laceptr++);
+    os->body_fill_next+=val;
+    if(val<255){
+      os->body_fill_next|=FINFLAG;
+      os->clearflag=1;
+      break;
+    }
+  }
+}
+
+static void _span_queued_page(ogg_stream_state *os){ 
+  while( !(os->body_fill&FINFLAG) ){
+    
+    if(!os->header_tail)break;
+
+    /* first flush out preceeding page header (if any).  Body is
+       flushed as it's consumed, so that's not done here. */
+
+    if(os->lacing_fill>=0)
+      os->header_tail=ogg_buffer_pretruncate(os->header_tail,
+                                             os->lacing_fill+27);
+    os->lacing_fill=0;
+    os->laceptr=0;
+    os->clearflag=0;
+
+    if(!os->header_tail){
+      os->header_head=0;
+      break;
+    }else{
+      
+      /* process/prepare next page, if any */
+
+      long pageno;
+      oggbyte_buffer ob;
+      ogg_page og;               /* only for parsing header values */
+      og.header=os->header_tail; /* only for parsing header values */
+      pageno=ogg_page_pageno(&og);
+
+      oggbyte_init(&ob,os->header_tail);
+      os->lacing_fill=oggbyte_read1(&ob,26);
+      
+      /* are we in sequence? */
+      if(pageno!=os->pageno){
+        if(os->pageno==-1) /* indicates seek or reset */
+          os->holeflag=1;  /* set for internal use */
+        else
+          os->holeflag=2;  /* set for external reporting */
+
+        os->body_tail=ogg_buffer_pretruncate(os->body_tail,
+                                             os->body_fill);
+        if(os->body_tail==0)os->body_head=0;
+        os->body_fill=0;
+
+      }
+    
+      if(ogg_page_continued(&og)){
+        if(os->body_fill==0){
+          /* continued packet, but no preceeding data to continue */
+          /* dump the first partial packet on the page */
+          _next_lace(&ob,os);   
+          os->body_tail=
+            ogg_buffer_pretruncate(os->body_tail,os->body_fill_next&FINMASK);
+          if(os->body_tail==0)os->body_head=0;
+          /* set span flag */
+          if(!os->spanflag && !os->holeflag)os->spanflag=2;
+        }
+      }else{
+        if(os->body_fill>0){
+          /* preceeding data to continue, but not a continued page */
+          /* dump body_fill */
+          os->body_tail=ogg_buffer_pretruncate(os->body_tail,
+                                               os->body_fill);
+          if(os->body_tail==0)os->body_head=0;
+          os->body_fill=0;
+
+          /* set espan flag */
+          if(!os->spanflag && !os->holeflag)os->spanflag=2;
+        }
+      }
+
+      if(os->laceptr<os->lacing_fill){
+        os->granulepos=ogg_page_granulepos(&og);
+
+        /* get current packet size & flag */
+        _next_lace(&ob,os);
+        os->body_fill+=os->body_fill_next; /* addition handles the flag fine;
+                                             unsigned on purpose */
+        /* ...and next packet size & flag */
+        _next_lace(&ob,os);
+
+      }
+      
+      os->pageno=pageno+1;
+      os->e_o_s=ogg_page_eos(&og);
+      os->b_o_s=ogg_page_bos(&og);
+    
+    }
+  }
+}
+
+/* add the incoming page to the stream state; we decompose the page
+   into packet segments here as well. */
+
+int ogg_stream_pagein(ogg_stream_state *os, ogg_page *og){
+
+  int serialno=ogg_page_serialno(og);
+  int version=ogg_page_version(og);
+
+  /* check the serial number */
+  if(serialno!=os->serialno){
+    ogg_page_release(og);
+    return OGG_ESERIAL;
+  }
+  if(version>0){
+    ogg_page_release(og);
+    return OGG_EVERSION;
+  }
+
+  /* add to fifos */
+  if(!os->body_tail){
+    os->body_tail=og->body;
+    os->body_head=ogg_buffer_walk(og->body);
+  }else{
+    os->body_head=ogg_buffer_cat(os->body_head,og->body);
+  }
+  if(!os->header_tail){
+    os->header_tail=og->header;
+    os->header_head=ogg_buffer_walk(og->header);
+    os->lacing_fill=-27;
+  }else{
+    os->header_head=ogg_buffer_cat(os->header_head,og->header);
+  }
+
+  memset(og,0,sizeof(*og));
+  return OGG_SUCCESS;
+}
+
+int ogg_stream_reset(ogg_stream_state *os){
+
+  ogg_buffer_release(os->header_tail);
+  ogg_buffer_release(os->body_tail);
+  os->header_tail=os->header_head=0;
+  os->body_tail=os->body_head=0;
+
+  os->e_o_s=0;
+  os->b_o_s=0;
+  os->pageno=-1;
+  os->packetno=0;
+  os->granulepos=0;
+
+  os->body_fill=0;
+  os->lacing_fill=0;
+
+  os->holeflag=0;
+  os->spanflag=0;
+  os->clearflag=0;
+  os->laceptr=0;
+  os->body_fill_next=0;
+
+  return OGG_SUCCESS;
+}
+
+int ogg_stream_reset_serialno(ogg_stream_state *os,int serialno){
+  ogg_stream_reset(os);
+  os->serialno=serialno;
+  return OGG_SUCCESS;
+}
+
+static int _packetout(ogg_stream_state *os,ogg_packet *op,int adv){
+
+  ogg_packet_release(op);
+  _span_queued_page(os);
+
+  if(os->holeflag){
+    int temp=os->holeflag;
+    if(os->clearflag)
+      os->holeflag=0;
+    else
+      os->holeflag=1;
+    if(temp==2){
+      os->packetno++;
+      return OGG_HOLE;
+    }
+  }
+  if(os->spanflag){
+    int temp=os->spanflag;
+    if(os->clearflag)
+      os->spanflag=0;
+    else
+      os->spanflag=1;
+    if(temp==2){
+      os->packetno++;
+      return OGG_SPAN;
+    }
+  }
+
+  if(!(os->body_fill&FINFLAG)) return 0;
+  if(!op && !adv)return 1; /* just using peek as an inexpensive way
+                               to ask if there's a whole packet
+                               waiting */
+  if(op){
+    op->b_o_s=os->b_o_s;
+    if(os->e_o_s && os->body_fill_next==0)
+      op->e_o_s=os->e_o_s;
+    else
+      op->e_o_s=0;
+    if( (os->body_fill&FINFLAG) && !(os->body_fill_next&FINFLAG) )
+      op->granulepos=os->granulepos;
+    else
+      op->granulepos=-1;
+    op->packetno=os->packetno;
+  }
+
+  if(adv){
+    oggbyte_buffer ob;
+    oggbyte_init(&ob,os->header_tail);
+
+    /* split the body contents off */
+    if(op){
+      op->packet=ogg_buffer_split(&os->body_tail,&os->body_head,
+				  os->body_fill&FINMASK);
+      op->bytes=os->body_fill&FINMASK;
+    }else{
+      os->body_tail=ogg_buffer_pretruncate(os->body_tail,
+					   os->body_fill&FINMASK);
+      if(os->body_tail==0)os->body_head=0;
+    }
+
+    /* update lacing pointers */
+    os->body_fill=os->body_fill_next;
+    _next_lace(&ob,os);
+  }else{
+    if(op){
+      op->packet=ogg_buffer_sub(os->body_tail,os->body_fill&FINMASK);
+      op->bytes=os->body_fill&FINMASK;
+    }
+  }
+  
+  if(adv){
+    os->packetno++;
+    os->b_o_s=0;
+  }
+
+  return 1;
+}
+
+int ogg_stream_packetout(ogg_stream_state *os,ogg_packet *op){
+  return _packetout(os,op,1);
+}
+
+int ogg_stream_packetpeek(ogg_stream_state *os,ogg_packet *op){
+  return _packetout(os,op,0);
+}
+
+int ogg_packet_release(ogg_packet *op) {
+  if(op){
+    ogg_buffer_release(op->packet);
+    memset(op, 0, sizeof(*op));
+  }
+  return OGG_SUCCESS;
+}
+
+int ogg_page_release(ogg_page *og) {
+  if(og){
+    ogg_buffer_release(og->header);
+    ogg_buffer_release(og->body);
+    memset(og, 0, sizeof(*og));
+  }
+  return OGG_SUCCESS;
+}
+
+void ogg_page_dup(ogg_page *dup,ogg_page *orig){
+  dup->header_len=orig->header_len;
+  dup->body_len=orig->body_len;
+  dup->header=ogg_buffer_dup(orig->header);
+  dup->body=ogg_buffer_dup(orig->body);
+}
+
diff --git a/Tremor/info.c b/Tremor/info.c
new file mode 100644
index 0000000..be5df49
--- /dev/null
+++ b/Tremor/info.c
@@ -0,0 +1,348 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE.   *
+ *                                                                  *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2003    *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************
+
+ function: maintain the info structure, info <-> header packets
+
+ ********************************************************************/
+
+/* general handling of the header and the vorbis_info structure (and
+   substructures) */
+
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include "ogg.h"
+#include "ivorbiscodec.h"
+#include "codec_internal.h"
+#include "codebook.h"
+#include "misc.h"
+#include "os.h"
+
+/* helpers */
+static void _v_readstring(oggpack_buffer *o,char *buf,int bytes){
+  while(bytes--){
+    *buf++=oggpack_read(o,8);
+  }
+}
+
+void vorbis_comment_init(vorbis_comment *vc){
+  memset(vc,0,sizeof(*vc));
+}
+
+/* This is more or less the same as strncasecmp - but that doesn't exist
+ * everywhere, and this is a fairly trivial function, so we include it */
+static int tagcompare(const char *s1, const char *s2, int n){
+  int c=0;
+  while(c < n){
+    if(toupper(s1[c]) != toupper(s2[c]))
+      return !0;
+    c++;
+  }
+  return 0;
+}
+
+char *vorbis_comment_query(vorbis_comment *vc, char *tag, int count){
+  long i;
+  int found = 0;
+  int taglen = strlen(tag)+1; /* +1 for the = we append */
+  char *fulltag = (char *)alloca(taglen+ 1);
+
+  strcpy(fulltag, tag);
+  strcat(fulltag, "=");
+  
+  for(i=0;i<vc->comments;i++){
+    if(!tagcompare(vc->user_comments[i], fulltag, taglen)){
+      if(count == found)
+	/* We return a pointer to the data, not a copy */
+      	return vc->user_comments[i] + taglen;
+      else
+	found++;
+    }
+  }
+  return NULL; /* didn't find anything */
+}
+
+int vorbis_comment_query_count(vorbis_comment *vc, char *tag){
+  int i,count=0;
+  int taglen = strlen(tag)+1; /* +1 for the = we append */
+  char *fulltag = (char *)alloca(taglen+1);
+  strcpy(fulltag,tag);
+  strcat(fulltag, "=");
+
+  for(i=0;i<vc->comments;i++){
+    if(!tagcompare(vc->user_comments[i], fulltag, taglen))
+      count++;
+  }
+
+  return count;
+}
+
+void vorbis_comment_clear(vorbis_comment *vc){
+  if(vc){
+    long i;
+    for(i=0;i<vc->comments;i++)
+      if(vc->user_comments[i])_ogg_free(vc->user_comments[i]);
+    if(vc->user_comments)_ogg_free(vc->user_comments);
+	if(vc->comment_lengths)_ogg_free(vc->comment_lengths);
+    if(vc->vendor)_ogg_free(vc->vendor);
+  }
+  memset(vc,0,sizeof(*vc));
+}
+
+/* blocksize 0 is guaranteed to be short, 1 is guarantted to be long.
+   They may be equal, but short will never ge greater than long */
+int vorbis_info_blocksize(vorbis_info *vi,int zo){
+  codec_setup_info *ci = (codec_setup_info *)vi->codec_setup;
+  return ci ? ci->blocksizes[zo] : -1;
+}
+
+/* used by synthesis, which has a full, alloced vi */
+void vorbis_info_init(vorbis_info *vi){
+  memset(vi,0,sizeof(*vi));
+  vi->codec_setup=(codec_setup_info *)_ogg_calloc(1,sizeof(codec_setup_info));
+}
+
+void vorbis_info_clear(vorbis_info *vi){
+  codec_setup_info     *ci=(codec_setup_info *)vi->codec_setup;
+  int i;
+
+  if(ci){
+
+    if(ci->mode_param)_ogg_free(ci->mode_param);
+
+    if(ci->map_param){
+      for(i=0;i<ci->maps;i++) /* unpack does the range checking */
+	mapping_clear_info(ci->map_param+i);
+      _ogg_free(ci->map_param);
+    }
+
+    if(ci->floor_param){
+      for(i=0;i<ci->floors;i++) /* unpack does the range checking */
+	if(ci->floor_type[i])
+	  floor1_free_info(ci->floor_param[i]);
+	else
+	  floor0_free_info(ci->floor_param[i]);
+      _ogg_free(ci->floor_param);
+      _ogg_free(ci->floor_type);
+    }
+
+    if(ci->residue_param){
+      for(i=0;i<ci->residues;i++) /* unpack does the range checking */
+	res_clear_info(ci->residue_param+i);
+      _ogg_free(ci->residue_param);
+    }
+
+    if(ci->book_param){
+      for(i=0;i<ci->books;i++)
+	vorbis_book_clear(ci->book_param+i);
+      _ogg_free(ci->book_param);
+    }
+    
+    _ogg_free(ci);
+  }
+
+  memset(vi,0,sizeof(*vi));
+}
+
+/* Header packing/unpacking ********************************************/
+
+static int _vorbis_unpack_info(vorbis_info *vi,oggpack_buffer *opb){
+  codec_setup_info     *ci=(codec_setup_info *)vi->codec_setup;
+  if(!ci)return(OV_EFAULT);
+
+  vi->version=oggpack_read(opb,32);
+  if(vi->version!=0)return(OV_EVERSION);
+
+  vi->channels=oggpack_read(opb,8);
+  vi->rate=oggpack_read(opb,32);
+
+  vi->bitrate_upper=oggpack_read(opb,32);
+  vi->bitrate_nominal=oggpack_read(opb,32);
+  vi->bitrate_lower=oggpack_read(opb,32);
+
+  ci->blocksizes[0]=1<<oggpack_read(opb,4);
+  ci->blocksizes[1]=1<<oggpack_read(opb,4);
+  
+#ifdef LIMIT_TO_64kHz
+  if(vi->rate>=64000 || ci->blocksizes[1]>4096)goto err_out;
+#else
+  if(vi->rate<64000 && ci->blocksizes[1]>4096)goto err_out;
+#endif
+
+  if(vi->rate<1)goto err_out;
+  if(vi->channels<1)goto err_out;
+  if(ci->blocksizes[0]<64)goto err_out; 
+  if(ci->blocksizes[1]<ci->blocksizes[0])goto err_out;
+  if(ci->blocksizes[1]>8192)goto err_out;
+  
+  if(oggpack_read(opb,1)!=1)goto err_out; /* EOP check */
+
+  return(0);
+ err_out:
+  vorbis_info_clear(vi);
+  return(OV_EBADHEADER);
+}
+
+static int _vorbis_unpack_comment(vorbis_comment *vc,oggpack_buffer *opb){
+  int i;
+  int vendorlen=oggpack_read(opb,32);
+  if(vendorlen<0)goto err_out;
+  vc->vendor=(char *)_ogg_calloc(vendorlen+1,1);
+  _v_readstring(opb,vc->vendor,vendorlen);
+  vc->comments=oggpack_read(opb,32);
+  if(vc->comments<0)goto err_out;
+  vc->user_comments=(char **)_ogg_calloc(vc->comments+1,sizeof(*vc->user_comments));
+  vc->comment_lengths=(int *)_ogg_calloc(vc->comments+1, sizeof(*vc->comment_lengths));
+	    
+  for(i=0;i<vc->comments;i++){
+    int len=oggpack_read(opb,32);
+    if(len<0)goto err_out;
+	vc->comment_lengths[i]=len;
+    vc->user_comments[i]=(char *)_ogg_calloc(len+1,1);
+    _v_readstring(opb,vc->user_comments[i],len);
+  }	  
+  if(oggpack_read(opb,1)!=1)goto err_out; /* EOP check */
+
+  return(0);
+ err_out:
+  vorbis_comment_clear(vc);
+  return(OV_EBADHEADER);
+}
+
+/* all of the real encoding details are here.  The modes, books,
+   everything */
+static int _vorbis_unpack_books(vorbis_info *vi,oggpack_buffer *opb){
+  codec_setup_info     *ci=(codec_setup_info *)vi->codec_setup;
+  int i;
+  if(!ci)return(OV_EFAULT);
+
+  /* codebooks */
+  ci->books=oggpack_read(opb,8)+1;
+  ci->book_param=(codebook *)_ogg_calloc(ci->books,sizeof(*ci->book_param));
+  for(i=0;i<ci->books;i++)
+    if(vorbis_book_unpack(opb,ci->book_param+i))goto err_out;
+
+  /* time backend settings, not actually used */
+  i=oggpack_read(opb,6);
+  for(;i>=0;i--)
+    if(oggpack_read(opb,16)!=0)goto err_out;
+
+  /* floor backend settings */
+  ci->floors=oggpack_read(opb,6)+1;
+  ci->floor_param=_ogg_malloc(sizeof(*ci->floor_param)*ci->floors);
+  ci->floor_type=_ogg_malloc(sizeof(*ci->floor_type)*ci->floors);
+  for(i=0;i<ci->floors;i++){
+    ci->floor_type[i]=oggpack_read(opb,16);
+    if(ci->floor_type[i]<0 || ci->floor_type[i]>=VI_FLOORB)goto err_out;
+    if(ci->floor_type[i])
+      ci->floor_param[i]=floor1_info_unpack(vi,opb);
+    else
+      ci->floor_param[i]=floor0_info_unpack(vi,opb);
+    if(!ci->floor_param[i])goto err_out;
+  }
+
+  /* residue backend settings */
+  ci->residues=oggpack_read(opb,6)+1;
+  ci->residue_param=_ogg_malloc(sizeof(*ci->residue_param)*ci->residues);
+  for(i=0;i<ci->residues;i++)
+    if(res_unpack(ci->residue_param+i,vi,opb))goto err_out;
+
+  /* map backend settings */
+  ci->maps=oggpack_read(opb,6)+1;
+  ci->map_param=_ogg_malloc(sizeof(*ci->map_param)*ci->maps);
+  for(i=0;i<ci->maps;i++){
+    if(oggpack_read(opb,16)!=0)goto err_out;
+    if(mapping_info_unpack(ci->map_param+i,vi,opb))goto err_out;
+  }
+  
+  /* mode settings */
+  ci->modes=oggpack_read(opb,6)+1;
+  ci->mode_param=
+    (vorbis_info_mode *)_ogg_malloc(ci->modes*sizeof(*ci->mode_param));
+  for(i=0;i<ci->modes;i++){
+    ci->mode_param[i].blockflag=oggpack_read(opb,1);
+    if(oggpack_read(opb,16))goto err_out;
+    if(oggpack_read(opb,16))goto err_out;
+    ci->mode_param[i].mapping=oggpack_read(opb,8);
+    if(ci->mode_param[i].mapping>=ci->maps)goto err_out;
+  }
+  
+  if(oggpack_read(opb,1)!=1)goto err_out; /* top level EOP check */
+
+  return(0);
+ err_out:
+  vorbis_info_clear(vi);
+  return(OV_EBADHEADER);
+}
+
+/* The Vorbis header is in three packets; the initial small packet in
+   the first page that identifies basic parameters, a second packet
+   with bitstream comments and a third packet that holds the
+   codebook. */
+
+int vorbis_dsp_headerin(vorbis_info *vi,vorbis_comment *vc,ogg_packet *op){
+  oggpack_buffer opb;
+  
+  if(op){
+    oggpack_readinit(&opb,op->packet);
+
+    /* Which of the three types of header is this? */
+    /* Also verify header-ness, vorbis */
+    {
+      char buffer[6];
+      int packtype=oggpack_read(&opb,8);
+      memset(buffer,0,6);
+      _v_readstring(&opb,buffer,6);
+      if(memcmp(buffer,"vorbis",6)){
+	/* not a vorbis header */
+	return(OV_ENOTVORBIS);
+      }
+      switch(packtype){
+      case 0x01: /* least significant *bit* is read first */
+	if(!op->b_o_s){
+	  /* Not the initial packet */
+	  return(OV_EBADHEADER);
+	}
+	if(vi->rate!=0){
+	  /* previously initialized info header */
+	  return(OV_EBADHEADER);
+	}
+
+	return(_vorbis_unpack_info(vi,&opb));
+
+      case 0x03: /* least significant *bit* is read first */
+	if(vi->rate==0){
+	  /* um... we didn't get the initial header */
+	  return(OV_EBADHEADER);
+	}
+
+	return(_vorbis_unpack_comment(vc,&opb));
+
+      case 0x05: /* least significant *bit* is read first */
+	if(vi->rate==0 || vc->vendor==NULL){
+	  /* um... we didn;t get the initial header or comments yet */
+	  return(OV_EBADHEADER);
+	}
+
+	return(_vorbis_unpack_books(vi,&opb));
+
+      default:
+	/* Not a valid vorbis header type */
+	return(OV_EBADHEADER);
+	break;
+      }
+    }
+  }
+  return(OV_EBADHEADER);
+}
+
diff --git a/Tremor/ivorbiscodec.h b/Tremor/ivorbiscodec.h
new file mode 100644
index 0000000..0eea9eb
--- /dev/null
+++ b/Tremor/ivorbiscodec.h
@@ -0,0 +1,104 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE.   *
+ *                                                                  *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002    *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************
+
+ function: libvorbis codec headers
+
+ ********************************************************************/
+
+#ifndef _vorbis_codec_h_
+#define _vorbis_codec_h_
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+
+#include "ogg.h"
+
+struct vorbis_dsp_state;
+typedef struct vorbis_dsp_state vorbis_dsp_state;
+
+typedef struct vorbis_info{
+  int version;
+  int channels;
+  long rate;
+
+  /* The below bitrate declarations are *hints*.
+     Combinations of the three values carry the following implications:
+     
+     all three set to the same value: 
+       implies a fixed rate bitstream
+     only nominal set: 
+       implies a VBR stream that averages the nominal bitrate.  No hard 
+       upper/lower limit
+     upper and or lower set: 
+       implies a VBR bitstream that obeys the bitrate limits. nominal 
+       may also be set to give a nominal rate.
+     none set:
+       the coder does not care to speculate.
+  */
+
+  long bitrate_upper;
+  long bitrate_nominal;
+  long bitrate_lower;
+  long bitrate_window;
+
+  void *codec_setup;
+} vorbis_info;
+
+typedef struct vorbis_comment{
+  char **user_comments;
+  int   *comment_lengths;
+  int    comments;
+  char  *vendor;
+
+} vorbis_comment;
+
+
+/* Vorbis PRIMITIVES: general ***************************************/
+
+extern void     vorbis_info_init(vorbis_info *vi);
+extern void     vorbis_info_clear(vorbis_info *vi);
+extern int      vorbis_info_blocksize(vorbis_info *vi,int zo);
+extern void     vorbis_comment_init(vorbis_comment *vc);
+extern void     vorbis_comment_add(vorbis_comment *vc, char *comment); 
+extern void     vorbis_comment_add_tag(vorbis_comment *vc, 
+				       char *tag, char *contents);
+extern char    *vorbis_comment_query(vorbis_comment *vc, char *tag, int count);
+extern int      vorbis_comment_query_count(vorbis_comment *vc, char *tag);
+extern void     vorbis_comment_clear(vorbis_comment *vc);
+
+/* Vorbis ERRORS and return codes ***********************************/
+
+#define OV_FALSE      -1  
+#define OV_EOF        -2
+#define OV_HOLE       -3
+
+#define OV_EREAD      -128
+#define OV_EFAULT     -129
+#define OV_EIMPL      -130
+#define OV_EINVAL     -131
+#define OV_ENOTVORBIS -132
+#define OV_EBADHEADER -133
+#define OV_EVERSION   -134
+#define OV_ENOTAUDIO  -135
+#define OV_EBADPACKET -136
+#define OV_EBADLINK   -137
+#define OV_ENOSEEK    -138
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif
+
diff --git a/Tremor/ivorbisfile.h b/Tremor/ivorbisfile.h
new file mode 100644
index 0000000..7ebc042
--- /dev/null
+++ b/Tremor/ivorbisfile.h
@@ -0,0 +1,122 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE.   *
+ *                                                                  *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2003    *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************
+
+ function: stdio-based convenience library for opening/seeking/decoding
+
+ ********************************************************************/
+
+#ifndef _OV_FILE_H_
+#define _OV_FILE_H_
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+
+#include <stdio.h>
+#include "ivorbiscodec.h"
+
+/* The function prototypes for the callbacks are basically the same as for
+ * the stdio functions fread, fseek, fclose, ftell. 
+ * The one difference is that the FILE * arguments have been replaced with
+ * a void * - this is to be used as a pointer to whatever internal data these
+ * functions might need. In the stdio case, it's just a FILE * cast to a void *
+ * 
+ * If you use other functions, check the docs for these functions and return
+ * the right values. For seek_func(), you *MUST* return -1 if the stream is
+ * unseekable
+ */
+typedef struct {
+  size_t (*read_func)  (void *ptr, size_t size, size_t nmemb, void *datasource);
+  int    (*seek_func)  (void *datasource, ogg_int64_t offset, int whence);
+  int    (*close_func) (void *datasource);
+  long   (*tell_func)  (void *datasource);
+} ov_callbacks;
+
+typedef struct OggVorbis_File {
+  void            *datasource; /* Pointer to a FILE *, etc. */
+  int              seekable;
+  ogg_int64_t      offset;
+  ogg_int64_t      end;
+  ogg_sync_state   *oy; 
+
+  /* If the FILE handle isn't seekable (eg, a pipe), only the current
+     stream appears */
+  int              links;
+  ogg_int64_t     *offsets;
+  ogg_int64_t     *dataoffsets;
+  ogg_uint32_t    *serialnos;
+  ogg_int64_t     *pcmlengths;
+  vorbis_info     vi;
+  vorbis_comment  vc;
+
+  /* Decoding working state local storage */
+  ogg_int64_t      pcm_offset;
+  int              ready_state;
+  ogg_uint32_t     current_serialno;
+  int              current_link;
+
+  ogg_int64_t      bittrack;
+  ogg_int64_t      samptrack;
+
+  ogg_stream_state *os; /* take physical pages, weld into a logical
+                          stream of packets */
+  vorbis_dsp_state *vd; /* central working state for the packet->PCM decoder */
+
+  ov_callbacks callbacks;
+
+} OggVorbis_File;
+
+extern int ov_clear(OggVorbis_File *vf);
+extern int ov_open(FILE *f,OggVorbis_File *vf,char *initial,long ibytes);
+extern int ov_open_callbacks(void *datasource, OggVorbis_File *vf,
+		char *initial, long ibytes, ov_callbacks callbacks);
+
+extern int ov_test(FILE *f,OggVorbis_File *vf,char *initial,long ibytes);
+extern int ov_test_callbacks(void *datasource, OggVorbis_File *vf,
+		char *initial, long ibytes, ov_callbacks callbacks);
+extern int ov_test_open(OggVorbis_File *vf);
+
+extern long ov_bitrate(OggVorbis_File *vf,int i);
+extern long ov_bitrate_instant(OggVorbis_File *vf);
+extern long ov_streams(OggVorbis_File *vf);
+extern long ov_seekable(OggVorbis_File *vf);
+extern long ov_serialnumber(OggVorbis_File *vf,int i);
+
+extern ogg_int64_t ov_raw_total(OggVorbis_File *vf,int i);
+extern ogg_int64_t ov_pcm_total(OggVorbis_File *vf,int i);
+extern ogg_int64_t ov_time_total(OggVorbis_File *vf,int i);
+
+extern int ov_raw_seek(OggVorbis_File *vf,ogg_int64_t pos);
+extern int ov_pcm_seek(OggVorbis_File *vf,ogg_int64_t pos);
+extern int ov_pcm_seek_page(OggVorbis_File *vf,ogg_int64_t pos);
+extern int ov_time_seek(OggVorbis_File *vf,ogg_int64_t pos);
+extern int ov_time_seek_page(OggVorbis_File *vf,ogg_int64_t pos);
+
+extern ogg_int64_t ov_raw_tell(OggVorbis_File *vf);
+extern ogg_int64_t ov_pcm_tell(OggVorbis_File *vf);
+extern ogg_int64_t ov_time_tell(OggVorbis_File *vf);
+
+extern vorbis_info *ov_info(OggVorbis_File *vf,int link);
+extern vorbis_comment *ov_comment(OggVorbis_File *vf,int link);
+
+extern long ov_read(OggVorbis_File *vf,void *buffer,int length,
+		    int *bitstream);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif
+
+
diff --git a/Tremor/ivorbisfile_example.c b/Tremor/ivorbisfile_example.c
new file mode 100644
index 0000000..c99cfd2
--- /dev/null
+++ b/Tremor/ivorbisfile_example.c
@@ -0,0 +1,86 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE.   *
+ *                                                                  *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002    *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************
+
+ function: simple example decoder using vorbisidec
+
+ ********************************************************************/
+
+/* Takes a vorbis bitstream from stdin and writes raw stereo PCM to
+   stdout using vorbisfile. Using vorbisfile is much simpler than
+   dealing with libvorbis. */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "ivorbiscodec.h"
+#include "ivorbisfile.h"
+
+#ifdef _WIN32 /* We need the following two to set stdin/stdout to binary */
+#include <io.h>
+#include <fcntl.h>
+#endif
+
+char pcmout[4096]; /* take 4k out of the data segment, not the stack */
+
+int main(){
+  OggVorbis_File vf;
+  int eof=0;
+  int current_section;
+
+#ifdef _WIN32 /* We need to set stdin/stdout to binary mode. Damn windows. */
+  /* Beware the evil ifdef. We avoid these where we can, but this one we 
+     cannot. Don't add any more, you'll probably go to hell if you do. */
+  _setmode( _fileno( stdin ), _O_BINARY );
+  _setmode( _fileno( stdout ), _O_BINARY );
+#endif
+
+  if(ov_open(stdin, &vf, NULL, 0) < 0) {
+      fprintf(stderr,"Input does not appear to be an Ogg bitstream.\n");
+      exit(1);
+  }
+
+  /* Throw the comments plus a few lines about the bitstream we're
+     decoding */
+  {
+    char **ptr=ov_comment(&vf,-1)->user_comments;
+    vorbis_info *vi=ov_info(&vf,-1);
+    while(*ptr){
+      fprintf(stderr,"%s\n",*ptr);
+      ++ptr;
+    }
+    fprintf(stderr,"\nBitstream is %d channel, %ldHz\n",vi->channels,vi->rate);
+    fprintf(stderr,"\nDecoded length: %ld samples\n",
+	    (long)ov_pcm_total(&vf,-1));
+    fprintf(stderr,"Encoded by: %s\n\n",ov_comment(&vf,-1)->vendor);
+  }
+  
+  while(!eof){
+    long ret=ov_read(&vf,pcmout,sizeof(pcmout),&current_section);
+    if (ret == 0) {
+      /* EOF */
+      eof=1;
+    } else if (ret < 0) {
+      /* error in the stream.  Not a problem, just reporting it in
+	 case we (the app) cares.  In this case, we don't. */
+    } else {
+      /* we don't bother dealing with sample rate changes, etc, but
+	 you'll have to*/
+      fwrite(pcmout,1,ret,stdout);
+    }
+  }
+
+  /* cleanup */
+  ov_clear(&vf);
+    
+  fprintf(stderr,"Done.\n");
+  return(0);
+}
diff --git a/Tremor/lsp_lookup.h b/Tremor/lsp_lookup.h
new file mode 100644
index 0000000..72c7581
--- /dev/null
+++ b/Tremor/lsp_lookup.h
@@ -0,0 +1,108 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE.   *
+ *                                                                  *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002    *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************
+
+  function: lookup data
+
+ ********************************************************************/
+
+#ifndef _V_LOOKUP_DATA_H_
+#define _V_LOOKUP_DATA_H_
+
+#include "os_types.h"
+
+#define INVSQ_LOOKUP_I_SHIFT 10
+#define INVSQ_LOOKUP_I_MASK 1023
+static const long INVSQ_LOOKUP_I[64+1]={
+	   92682,   91966,   91267,   90583,
+	   89915,   89261,   88621,   87995,
+	   87381,   86781,   86192,   85616,
+	   85051,   84497,   83953,   83420,
+	   82897,   82384,   81880,   81385,
+	   80899,   80422,   79953,   79492,
+	   79039,   78594,   78156,   77726,
+	   77302,   76885,   76475,   76072,
+	   75674,   75283,   74898,   74519,
+	   74146,   73778,   73415,   73058,
+	   72706,   72359,   72016,   71679,
+	   71347,   71019,   70695,   70376,
+	   70061,   69750,   69444,   69141,
+	   68842,   68548,   68256,   67969,
+	   67685,   67405,   67128,   66855,
+	   66585,   66318,   66054,   65794,
+	   65536,
+};
+
+static const long INVSQ_LOOKUP_IDel[64]={
+             716,     699,     684,     668,
+             654,     640,     626,     614,
+             600,     589,     576,     565,
+             554,     544,     533,     523,
+             513,     504,     495,     486,
+             477,     469,     461,     453,
+             445,     438,     430,     424,
+             417,     410,     403,     398,
+             391,     385,     379,     373,
+             368,     363,     357,     352,
+             347,     343,     337,     332,
+             328,     324,     319,     315,
+             311,     306,     303,     299,
+             294,     292,     287,     284,
+             280,     277,     273,     270,
+             267,     264,     260,     258,
+};
+
+#define COS_LOOKUP_I_SHIFT 9
+#define COS_LOOKUP_I_MASK 511
+#define COS_LOOKUP_I_SZ 128
+static const ogg_int32_t COS_LOOKUP_I[COS_LOOKUP_I_SZ+1]={
+	   16384,   16379,   16364,   16340,
+	   16305,   16261,   16207,   16143,
+	   16069,   15986,   15893,   15791,
+	   15679,   15557,   15426,   15286,
+	   15137,   14978,   14811,   14635,
+	   14449,   14256,   14053,   13842,
+	   13623,   13395,   13160,   12916,
+	   12665,   12406,   12140,   11866,
+	   11585,   11297,   11003,   10702,
+	   10394,   10080,    9760,    9434,
+	    9102,    8765,    8423,    8076,
+	    7723,    7366,    7005,    6639,
+	    6270,    5897,    5520,    5139,
+	    4756,    4370,    3981,    3590,
+	    3196,    2801,    2404,    2006,
+	    1606,    1205,     804,     402,
+	       0,    -401,    -803,   -1204,
+	   -1605,   -2005,   -2403,   -2800,
+	   -3195,   -3589,   -3980,   -4369,
+	   -4755,   -5138,   -5519,   -5896,
+	   -6269,   -6638,   -7004,   -7365,
+	   -7722,   -8075,   -8422,   -8764,
+	   -9101,   -9433,   -9759,  -10079,
+	  -10393,  -10701,  -11002,  -11296,
+	  -11584,  -11865,  -12139,  -12405,
+	  -12664,  -12915,  -13159,  -13394,
+	  -13622,  -13841,  -14052,  -14255,
+	  -14448,  -14634,  -14810,  -14977,
+	  -15136,  -15285,  -15425,  -15556,
+	  -15678,  -15790,  -15892,  -15985,
+	  -16068,  -16142,  -16206,  -16260,
+	  -16304,  -16339,  -16363,  -16378,
+	  -16383,
+};
+
+#endif
+
+
+
+
+
diff --git a/Tremor/mapping0.c b/Tremor/mapping0.c
new file mode 100644
index 0000000..23e3b8e
--- /dev/null
+++ b/Tremor/mapping0.c
@@ -0,0 +1,241 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE.   *
+ *                                                                  *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2003    *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************
+
+ function: channel mapping 0 implementation
+
+ ********************************************************************/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+#include "ogg.h"
+#include "os.h"
+#include "ivorbiscodec.h"
+#include "mdct.h"
+#include "codec_internal.h"
+#include "codebook.h"
+#include "misc.h"
+
+void mapping_clear_info(vorbis_info_mapping *info){
+  if(info){
+    if(info->chmuxlist)_ogg_free(info->chmuxlist);
+    if(info->submaplist)_ogg_free(info->submaplist);
+    if(info->coupling)_ogg_free(info->coupling);
+    memset(info,0,sizeof(*info));
+  }
+}
+
+static int ilog(unsigned int v){
+  int ret=0;
+  if(v)--v;
+  while(v){
+    ret++;
+    v>>=1;
+  }
+  return(ret);
+}
+
+/* also responsible for range checking */
+int mapping_info_unpack(vorbis_info_mapping *info,vorbis_info *vi,
+			oggpack_buffer *opb){
+  int i;
+  codec_setup_info     *ci=(codec_setup_info *)vi->codec_setup;
+  memset(info,0,sizeof(*info));
+
+  if(oggpack_read(opb,1))
+    info->submaps=oggpack_read(opb,4)+1;
+  else
+    info->submaps=1;
+
+  if(oggpack_read(opb,1)){
+    info->coupling_steps=oggpack_read(opb,8)+1;
+    info->coupling=
+      _ogg_malloc(info->coupling_steps*sizeof(*info->coupling));
+    
+    for(i=0;i<info->coupling_steps;i++){
+      int testM=info->coupling[i].mag=oggpack_read(opb,ilog(vi->channels));
+      int testA=info->coupling[i].ang=oggpack_read(opb,ilog(vi->channels));
+
+      if(testM<0 || 
+	 testA<0 || 
+	 testM==testA || 
+	 testM>=vi->channels ||
+	 testA>=vi->channels) goto err_out;
+    }
+
+  }
+
+  if(oggpack_read(opb,2)>0)goto err_out; /* 2,3:reserved */
+    
+  if(info->submaps>1){
+    info->chmuxlist=_ogg_malloc(sizeof(*info->chmuxlist)*vi->channels);
+    for(i=0;i<vi->channels;i++){
+      info->chmuxlist[i]=oggpack_read(opb,4);
+      if(info->chmuxlist[i]>=info->submaps)goto err_out;
+    }
+  }
+
+  info->submaplist=_ogg_malloc(sizeof(*info->submaplist)*info->submaps);
+  for(i=0;i<info->submaps;i++){
+    int temp=oggpack_read(opb,8);
+    info->submaplist[i].floor=oggpack_read(opb,8);
+    if(info->submaplist[i].floor>=ci->floors)goto err_out;
+    info->submaplist[i].residue=oggpack_read(opb,8);
+    if(info->submaplist[i].residue>=ci->residues)goto err_out;
+  }
+
+  return 0;
+
+ err_out:
+  mapping_clear_info(info);
+  return -1;
+}
+
+int mapping_inverse(vorbis_dsp_state *vd,vorbis_info_mapping *info){
+  vorbis_info          *vi=vd->vi;
+  codec_setup_info     *ci=(codec_setup_info *)vi->codec_setup;
+
+  int                   i,j;
+  long                  n=ci->blocksizes[vd->W];
+
+  ogg_int32_t **pcmbundle=
+    alloca(sizeof(*pcmbundle)*vi->channels);
+  int          *zerobundle=
+    alloca(sizeof(*zerobundle)*vi->channels);
+  int          *nonzero=
+    alloca(sizeof(*nonzero)*vi->channels);
+  ogg_int32_t **floormemo=
+    alloca(sizeof(*floormemo)*vi->channels);
+  
+  /* recover the spectral envelope; store it in the PCM vector for now */
+  for(i=0;i<vi->channels;i++){
+    int submap=0;
+    int floorno;
+    
+    if(info->submaps>1)
+      submap=info->chmuxlist[i];
+    floorno=info->submaplist[submap].floor;
+    
+    if(ci->floor_type[floorno]){
+      /* floor 1 */
+      floormemo[i]=alloca(sizeof(*floormemo[i])*
+			  floor1_memosize(ci->floor_param[floorno]));
+      floormemo[i]=floor1_inverse1(vd,ci->floor_param[floorno],floormemo[i]);
+    }else{
+      /* floor 0 */
+      floormemo[i]=alloca(sizeof(*floormemo[i])*
+			  floor0_memosize(ci->floor_param[floorno]));
+      floormemo[i]=floor0_inverse1(vd,ci->floor_param[floorno],floormemo[i]);
+    }
+    
+    if(floormemo[i])
+      nonzero[i]=1;
+    else
+      nonzero[i]=0;      
+    memset(vd->work[i],0,sizeof(*vd->work[i])*n/2);
+  }
+
+  /* channel coupling can 'dirty' the nonzero listing */
+  for(i=0;i<info->coupling_steps;i++){
+    if(nonzero[info->coupling[i].mag] ||
+       nonzero[info->coupling[i].ang]){
+      nonzero[info->coupling[i].mag]=1; 
+      nonzero[info->coupling[i].ang]=1; 
+    }
+  }
+
+  /* recover the residue into our working vectors */
+  for(i=0;i<info->submaps;i++){
+    int ch_in_bundle=0;
+    for(j=0;j<vi->channels;j++){
+      if(!info->chmuxlist || info->chmuxlist[j]==i){
+	if(nonzero[j])
+	  zerobundle[ch_in_bundle]=1;
+	else
+	  zerobundle[ch_in_bundle]=0;
+	pcmbundle[ch_in_bundle++]=vd->work[j];
+      }
+    }
+    
+    res_inverse(vd,ci->residue_param+info->submaplist[i].residue,
+		pcmbundle,zerobundle,ch_in_bundle);
+  }
+
+  //for(j=0;j<vi->channels;j++)
+  //_analysis_output("coupled",seq+j,vb->pcm[j],-8,n/2,0,0);
+
+  /* channel coupling */
+  for(i=info->coupling_steps-1;i>=0;i--){
+    ogg_int32_t *pcmM=vd->work[info->coupling[i].mag];
+    ogg_int32_t *pcmA=vd->work[info->coupling[i].ang];
+    
+    for(j=0;j<n/2;j++){
+      ogg_int32_t mag=pcmM[j];
+      ogg_int32_t ang=pcmA[j];
+      
+      if(mag>0)
+	if(ang>0){
+	  pcmM[j]=mag;
+	  pcmA[j]=mag-ang;
+	}else{
+	  pcmA[j]=mag;
+	  pcmM[j]=mag+ang;
+	}
+      else
+	if(ang>0){
+	  pcmM[j]=mag;
+	  pcmA[j]=mag+ang;
+	}else{
+	  pcmA[j]=mag;
+	  pcmM[j]=mag-ang;
+	}
+    }
+  }
+
+  //for(j=0;j<vi->channels;j++)
+  //_analysis_output("residue",seq+j,vb->pcm[j],-8,n/2,0,0);
+
+  /* compute and apply spectral envelope */
+  for(i=0;i<vi->channels;i++){
+    ogg_int32_t *pcm=vd->work[i];
+    int submap=0;
+    int floorno;
+
+    if(info->submaps>1)
+      submap=info->chmuxlist[i];
+    floorno=info->submaplist[submap].floor;
+
+    if(ci->floor_type[floorno]){
+      /* floor 1 */
+      floor1_inverse2(vd,ci->floor_param[floorno],floormemo[i],pcm);
+    }else{
+      /* floor 0 */
+      floor0_inverse2(vd,ci->floor_param[floorno],floormemo[i],pcm);
+    }
+  }
+
+  //for(j=0;j<vi->channels;j++)
+  //_analysis_output("mdct",seq+j,vb->pcm[j],-24,n/2,0,1);
+
+  /* transform the PCM data; takes PCM vector, vb; modifies PCM vector */
+  /* only MDCT right now.... */
+  for(i=0;i<vi->channels;i++)
+    mdct_backward(n,vd->work[i]);
+
+  //for(j=0;j<vi->channels;j++)
+  //_analysis_output("imdct",seq+j,vb->pcm[j],-24,n,0,0);
+
+  /* all done! */
+  return(0);
+}
diff --git a/Tremor/mdct.c b/Tremor/mdct.c
new file mode 100644
index 0000000..2201531
--- /dev/null
+++ b/Tremor/mdct.c
@@ -0,0 +1,486 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE.   *
+ *                                                                  *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2003    *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************
+
+ function: normalized modified discrete cosine transform
+           power of two length transform only [64 <= n ]
+ last mod: $Id: mdct.c,v 1.9.6.5 2003/04/29 04:03:27 xiphmont Exp $
+
+ Original algorithm adapted long ago from _The use of multirate filter
+ banks for coding of high quality digital audio_, by T. Sporer,
+ K. Brandenburg and B. Edler, collection of the European Signal
+ Processing Conference (EUSIPCO), Amsterdam, June 1992, Vol.1, pp
+ 211-214
+
+ The below code implements an algorithm that no longer looks much like
+ that presented in the paper, but the basic structure remains if you
+ dig deep enough to see it.
+
+ This module DOES NOT INCLUDE code to generate/apply the window
+ function.  Everybody has their own weird favorite including me... I
+ happen to like the properties of y=sin(.5PI*sin^2(x)), but others may
+ vehemently disagree.
+
+ ********************************************************************/
+
+#include "ivorbiscodec.h"
+#include "os.h"
+#include "misc.h"
+#include "mdct.h"
+#include "mdct_lookup.h"
+
+STIN void presymmetry(DATA_TYPE *in,int n2,int step){
+  DATA_TYPE *aX;
+  DATA_TYPE *bX;
+  LOOKUP_T *T;
+  int n4=n2>>1;
+  
+  aX            = in+n2-3;
+  T             = sincos_lookup0;
+
+  do{
+    REG_TYPE  r0= aX[0];
+    REG_TYPE  r2= aX[2];
+    XPROD31( r0, r2, T[0], T[1], &aX[0], &aX[2] ); T+=step;
+    aX-=4;
+  }while(aX>=in+n4);
+  do{
+    REG_TYPE  r0= aX[0];
+    REG_TYPE  r2= aX[2];
+    XPROD31( r0, r2, T[1], T[0], &aX[0], &aX[2] ); T-=step;
+    aX-=4;
+  }while(aX>=in);
+
+  aX            = in+n2-4;
+  bX            = in;
+  T             = sincos_lookup0;
+  do{
+    REG_TYPE  ri0= aX[0];
+    REG_TYPE  ri2= aX[2];
+    REG_TYPE  ro0= bX[0];
+    REG_TYPE  ro2= bX[2];
+    
+    XNPROD31( ro2, ro0, T[1], T[0], &aX[0], &aX[2] ); T+=step;
+    XNPROD31( ri2, ri0, T[0], T[1], &bX[0], &bX[2] );
+    
+    aX-=4;
+    bX+=4;
+  }while(aX>=in+n4);
+
+}
+
+/* 8 point butterfly (in place) */
+STIN void mdct_butterfly_8(DATA_TYPE *x){
+
+  REG_TYPE r0   = x[0] + x[1];
+  REG_TYPE r1   = x[0] - x[1];
+  REG_TYPE r2   = x[2] + x[3];
+  REG_TYPE r3   = x[2] - x[3];
+  REG_TYPE r4   = x[4] + x[5];
+  REG_TYPE r5   = x[4] - x[5];
+  REG_TYPE r6   = x[6] + x[7];
+  REG_TYPE r7   = x[6] - x[7];
+
+	   x[0] = r5   + r3;
+	   x[1] = r7   - r1;
+	   x[2] = r5   - r3;
+	   x[3] = r7   + r1;
+           x[4] = r4   - r0;
+	   x[5] = r6   - r2;
+           x[6] = r4   + r0;
+	   x[7] = r6   + r2;
+	   MB();
+}
+
+/* 16 point butterfly (in place, 4 register) */
+STIN void mdct_butterfly_16(DATA_TYPE *x){
+  
+  REG_TYPE r0, r1, r2, r3;
+  
+	   r0 = x[ 8] - x[ 9]; x[ 8] += x[ 9];
+	   r1 = x[10] - x[11]; x[10] += x[11];
+	   r2 = x[ 1] - x[ 0]; x[ 9]  = x[ 1] + x[0];
+	   r3 = x[ 3] - x[ 2]; x[11]  = x[ 3] + x[2];
+	   x[ 0] = MULT31((r0 - r1) , cPI2_8);
+	   x[ 1] = MULT31((r2 + r3) , cPI2_8);
+	   x[ 2] = MULT31((r0 + r1) , cPI2_8);
+	   x[ 3] = MULT31((r3 - r2) , cPI2_8);
+	   MB();
+
+	   r2 = x[12] - x[13]; x[12] += x[13];
+	   r3 = x[14] - x[15]; x[14] += x[15];
+	   r0 = x[ 4] - x[ 5]; x[13]  = x[ 5] + x[ 4];
+	   r1 = x[ 7] - x[ 6]; x[15]  = x[ 7] + x[ 6];
+	   x[ 4] = r2; x[ 5] = r1; 
+	   x[ 6] = r3; x[ 7] = r0;
+	   MB();
+
+	   mdct_butterfly_8(x);
+	   mdct_butterfly_8(x+8);
+}
+
+/* 32 point butterfly (in place, 4 register) */
+STIN void mdct_butterfly_32(DATA_TYPE *x){
+
+  REG_TYPE r0, r1, r2, r3;
+
+	   r0 = x[16] - x[17]; x[16] += x[17];
+	   r1 = x[18] - x[19]; x[18] += x[19];
+	   r2 = x[ 1] - x[ 0]; x[17]  = x[ 1] + x[ 0];
+	   r3 = x[ 3] - x[ 2]; x[19]  = x[ 3] + x[ 2];
+	   XNPROD31( r0, r1, cPI3_8, cPI1_8, &x[ 0], &x[ 2] );
+	   XPROD31 ( r2, r3, cPI1_8, cPI3_8, &x[ 1], &x[ 3] );
+	   MB();
+
+	   r0 = x[20] - x[21]; x[20] += x[21];
+	   r1 = x[22] - x[23]; x[22] += x[23];
+	   r2 = x[ 5] - x[ 4]; x[21]  = x[ 5] + x[ 4];
+	   r3 = x[ 7] - x[ 6]; x[23]  = x[ 7] + x[ 6];
+	   x[ 4] = MULT31((r0 - r1) , cPI2_8);
+	   x[ 5] = MULT31((r3 + r2) , cPI2_8);
+	   x[ 6] = MULT31((r0 + r1) , cPI2_8);
+	   x[ 7] = MULT31((r3 - r2) , cPI2_8);
+	   MB();
+
+	   r0 = x[24] - x[25]; x[24] += x[25];           
+	   r1 = x[26] - x[27]; x[26] += x[27];
+	   r2 = x[ 9] - x[ 8]; x[25]  = x[ 9] + x[ 8];
+	   r3 = x[11] - x[10]; x[27]  = x[11] + x[10];
+	   XNPROD31( r0, r1, cPI1_8, cPI3_8, &x[ 8], &x[10] );
+	   XPROD31 ( r2, r3, cPI3_8, cPI1_8, &x[ 9], &x[11] );
+	   MB();
+
+	   r0 = x[28] - x[29]; x[28] += x[29];           
+	   r1 = x[30] - x[31]; x[30] += x[31];
+	   r2 = x[12] - x[13]; x[29]  = x[13] + x[12];
+	   r3 = x[15] - x[14]; x[31]  = x[15] + x[14];
+	   x[12] = r0; x[13] = r3; 
+	   x[14] = r1; x[15] = r2;
+	   MB();
+
+	   mdct_butterfly_16(x);
+	   mdct_butterfly_16(x+16);
+}
+
+/* N/stage point generic N stage butterfly (in place, 2 register) */
+STIN void mdct_butterfly_generic(DATA_TYPE *x,int points,int step){
+
+  LOOKUP_T   *T  = sincos_lookup0;
+  DATA_TYPE *x1  = x + points - 4;
+  DATA_TYPE *x2  = x + (points>>1) - 4;
+  REG_TYPE   r0, r1, r2, r3;
+
+  do{
+    r0 = x1[0] - x1[1]; x1[0] += x1[1];
+    r1 = x1[3] - x1[2]; x1[2] += x1[3];
+    r2 = x2[1] - x2[0]; x1[1]  = x2[1] + x2[0];
+    r3 = x2[3] - x2[2]; x1[3]  = x2[3] + x2[2];
+    XPROD31( r1, r0, T[0], T[1], &x2[0], &x2[2] );
+    XPROD31( r2, r3, T[0], T[1], &x2[1], &x2[3] ); T+=step;
+    x1-=4; 
+    x2-=4;
+  }while(T<sincos_lookup0+1024);
+  do{
+    r0 = x1[0] - x1[1]; x1[0] += x1[1];
+    r1 = x1[2] - x1[3]; x1[2] += x1[3];
+    r2 = x2[0] - x2[1]; x1[1]  = x2[1] + x2[0];
+    r3 = x2[3] - x2[2]; x1[3]  = x2[3] + x2[2];
+    XNPROD31( r0, r1, T[0], T[1], &x2[0], &x2[2] );
+    XNPROD31( r3, r2, T[0], T[1], &x2[1], &x2[3] ); T-=step;
+    x1-=4; 
+    x2-=4; 
+  }while(T>sincos_lookup0);
+}
+
+STIN void mdct_butterflies(DATA_TYPE *x,int points,int shift){
+
+  int stages=8-shift;
+  int i,j;
+
+  for(i=0;--stages>0;i++){
+    for(j=0;j<(1<<i);j++)
+      mdct_butterfly_generic(x+(points>>i)*j,points>>i,4<<(i+shift));
+  }
+  
+  for(j=0;j<points;j+=32)
+    mdct_butterfly_32(x+j);
+}
+
+static unsigned char bitrev[16]={0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15};
+
+STIN int bitrev12(int x){
+  return bitrev[x>>8]|(bitrev[(x&0x0f0)>>4]<<4)|(((int)bitrev[x&0x00f])<<8);
+}
+
+STIN void mdct_bitreverse(DATA_TYPE *x,int n,int shift){
+  int          bit   = 0;
+  DATA_TYPE   *w     = x+(n>>1);
+
+  do{
+    DATA_TYPE  b     = bitrev12(bit++);
+    DATA_TYPE *xx    = x + (b>>shift);
+    REG_TYPE  r;
+
+               w    -= 2;
+
+	       if(w>xx){
+
+		 r      = xx[0];
+		 xx[0]  = w[0];
+		 w[0]   = r;
+		 
+		 r      = xx[1];
+		 xx[1]  = w[1];
+		 w[1]   = r;
+	       }
+  }while(w>x);
+}
+
+STIN void mdct_step7(DATA_TYPE *x,int n,int step){
+  DATA_TYPE   *w0    = x;
+  DATA_TYPE   *w1    = x+(n>>1);
+  LOOKUP_T    *T = (step>=4)?(sincos_lookup0+(step>>1)):sincos_lookup1;
+  LOOKUP_T    *Ttop  = T+1024;
+  REG_TYPE     r0, r1, r2, r3;
+  
+  do{
+	      w1    -= 2;
+
+              r0     = w0[0]  + w1[0];
+              r1     = w1[1]  - w0[1];	      
+	      r2     = MULT32(r0, T[1]) + MULT32(r1, T[0]);
+	      r3     = MULT32(r1, T[1]) - MULT32(r0, T[0]);
+	      T+=step;
+
+	      r0     = (w0[1] + w1[1])>>1;
+              r1     = (w0[0] - w1[0])>>1;
+	      w0[0]  = r0     + r2;
+	      w0[1]  = r1     + r3;
+	      w1[0]  = r0     - r2;
+	      w1[1]  = r3     - r1;
+
+	      w0    += 2;
+  }while(T<Ttop);
+  do{
+	      w1    -= 2;
+
+              r0     = w0[0]  + w1[0];
+              r1     = w1[1]  - w0[1];	
+	      T-=step;
+	      r2     = MULT32(r0, T[0]) + MULT32(r1, T[1]);
+	      r3     = MULT32(r1, T[0]) - MULT32(r0, T[1]);      
+
+	      r0     = (w0[1] + w1[1])>>1;
+              r1     = (w0[0] - w1[0])>>1;
+	      w0[0]  = r0     + r2;
+	      w0[1]  = r1     + r3;
+	      w1[0]  = r0     - r2;
+	      w1[1]  = r3     - r1;
+
+	      w0    += 2;
+  }while(w0<w1);
+}
+
+STIN void mdct_step8(DATA_TYPE *x, int n, int step){
+  LOOKUP_T *T;
+  LOOKUP_T *V;
+  DATA_TYPE *iX =x+(n>>1);
+  step>>=2;
+
+  switch(step) {
+  default: 
+    T=(step>=4)?(sincos_lookup0+(step>>1)):sincos_lookup1;
+    do{
+      REG_TYPE     r0  =  x[0];
+      REG_TYPE     r1  = -x[1];
+                   XPROD31( r0, r1, T[0], T[1], x, x+1); T+=step;
+                   x  +=2;
+    }while(x<iX);
+    break;
+  
+  case 1: 
+    {
+      /* linear interpolation between table values: offset=0.5, step=1 */
+      REG_TYPE    t0,t1,v0,v1,r0,r1;
+      T         = sincos_lookup0;
+      V         = sincos_lookup1;
+      t0        = (*T++)>>1;
+      t1        = (*T++)>>1;
+      do{
+	    r0  =  x[0];
+	    r1  = -x[1];	
+	    t0 += (v0 = (*V++)>>1);
+	    t1 += (v1 = (*V++)>>1);
+	    XPROD31( r0, r1, t0, t1, x, x+1 );
+	    
+	    r0  =  x[2];
+	    r1  = -x[3];
+	    v0 += (t0 = (*T++)>>1);
+	    v1 += (t1 = (*T++)>>1);
+	    XPROD31( r0, r1, v0, v1, x+2, x+3 );
+	    
+	    x += 4;
+      }while(x<iX);
+      break;
+    }
+    
+  case 0: 
+    {
+      /* linear interpolation between table values: offset=0.25, step=0.5 */
+      REG_TYPE    t0,t1,v0,v1,q0,q1,r0,r1;
+      T         = sincos_lookup0;
+      V         = sincos_lookup1;
+      t0        = *T++;
+      t1        = *T++;
+      do{
+
+	
+	v0  = *V++;
+	v1  = *V++;
+	t0 +=  (q0 = (v0-t0)>>2);
+	t1 +=  (q1 = (v1-t1)>>2);
+	r0  =  x[0];
+	r1  = -x[1];	
+	XPROD31( r0, r1, t0, t1, x, x+1 );
+	t0  = v0-q0;
+	t1  = v1-q1;
+	r0  =  x[2];
+	r1  = -x[3];	
+	XPROD31( r0, r1, t0, t1, x+2, x+3 );
+	
+	t0  = *T++;
+	t1  = *T++;
+	v0 += (q0 = (t0-v0)>>2);
+	v1 += (q1 = (t1-v1)>>2);
+	r0  =  x[4];
+	r1  = -x[5];	
+	XPROD31( r0, r1, v0, v1, x+4, x+5 );
+	v0  = t0-q0;
+	v1  = t1-q1;
+	r0  =  x[6];
+	r1  = -x[7];	
+	XPROD31( r0, r1, v0, v1, x+5, x+6 );
+
+	x+=8;
+      }while(x<iX);
+      break;
+    }
+  }
+}
+
+/* partial; doesn't perform last-step deinterleave/unrolling.  That
+   can be done more efficiently during pcm output */
+void mdct_backward(int n, DATA_TYPE *in){
+  int shift;
+  int step;
+  
+  for (shift=4;!(n&(1<<shift));shift++);
+  shift=13-shift;
+  step=2<<shift;
+   
+  presymmetry(in,n>>1,step);
+  mdct_butterflies(in,n>>1,shift);
+  mdct_bitreverse(in,n,shift);
+  mdct_step7(in,n,step);
+  mdct_step8(in,n,step);
+}
+
+void mdct_shift_right(int n, DATA_TYPE *in, DATA_TYPE *right){
+  int i;
+  n>>=2;
+  in+=1;
+
+  for(i=0;i<n;i++)
+    right[i]=in[i<<1];
+}
+
+void mdct_unroll_lap(int n0,int n1,
+		     int lW,int W,
+		     DATA_TYPE *in,
+		     DATA_TYPE *right,
+		     LOOKUP_T *w0,
+		     LOOKUP_T *w1,
+		     ogg_int16_t *out,
+		     int step,
+		     int start, /* samples, this frame */
+		     int end    /* samples, this frame */){
+
+  DATA_TYPE *l=in+(W&&lW ? n1>>1 : n0>>1);
+  DATA_TYPE *r=right+(lW ? n1>>2 : n0>>2);
+  DATA_TYPE *post;
+  LOOKUP_T *wR=(W && lW ? w1+(n1>>1) : w0+(n0>>1));
+  LOOKUP_T *wL=(W && lW ? w1         : w0        );
+
+  int preLap=(lW && !W ? (n1>>2)-(n0>>2) : 0 );
+  int halfLap=(lW && W ? (n1>>2) : (n0>>2) );
+  int postLap=(!lW && W ? (n1>>2)-(n0>>2) : 0 );
+  int n,off;
+
+  /* preceeding direct-copy lapping from previous frame, if any */
+  if(preLap){
+    n      = (end<preLap?end:preLap);
+    off    = (start<preLap?start:preLap);
+    post   = r-n;
+    r     -= off;
+    start -= off;
+    end   -= n;
+    while(r>post){
+      *out = CLIP_TO_15((*--r)>>9);
+      out+=step;
+    }
+  }
+  
+  /* cross-lap; two halves due to wrap-around */
+  n      = (end<halfLap?end:halfLap);
+  off    = (start<halfLap?start:halfLap);
+  post   = r-n;
+  r     -= off;
+  l     -= off*2;
+  start -= off;
+  wR    -= off;
+  wL    += off;
+  end   -= n;
+  while(r>post){
+    l-=2;
+    *out = CLIP_TO_15((MULT31(*--r,*--wR) + MULT31(*l,*wL++))>>9);
+    out+=step;
+  }
+
+  n      = (end<halfLap?end:halfLap);
+  off    = (start<halfLap?start:halfLap);
+  post   = r+n;
+  r     += off;
+  l     += off*2;
+  start -= off;
+  end   -= n;
+  wR    -= off;
+  wL    += off;
+  while(r<post){
+    *out = CLIP_TO_15((MULT31(*r++,*--wR) - MULT31(*l,*wL++))>>9);
+    out+=step;
+    l+=2;
+  }
+
+  /* preceeding direct-copy lapping from previous frame, if any */
+  if(postLap){
+    n      = (end<postLap?end:postLap);
+    off    = (start<postLap?start:postLap);
+    post   = l+n*2;
+    l     += off*2;
+    while(l<post){
+      *out = CLIP_TO_15((-*l)>>9);
+      out+=step;
+      l+=2;
+    }
+  }
+}
+
diff --git a/Tremor/mdct.h b/Tremor/mdct.h
new file mode 100644
index 0000000..5e865d0
--- /dev/null
+++ b/Tremor/mdct.h
@@ -0,0 +1,59 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE.   *
+ *                                                                  *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2003    *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************
+
+ function: modified discrete cosine transform prototypes
+
+ ********************************************************************/
+
+#ifndef _OGG_mdct_H_
+#define _OGG_mdct_H_
+
+#include "ivorbiscodec.h"
+#include "misc.h"
+
+#define DATA_TYPE ogg_int32_t
+#define REG_TYPE  register ogg_int32_t
+
+#ifdef _LOW_ACCURACY_
+#define cPI3_8 (0x0062)
+#define cPI2_8 (0x00b5)
+#define cPI1_8 (0x00ed)
+#else
+#define cPI3_8 (0x30fbc54d)
+#define cPI2_8 (0x5a82799a)
+#define cPI1_8 (0x7641af3d)
+#endif
+
+extern void mdct_backward(int n, DATA_TYPE *in);
+extern void mdct_shift_right(int n, DATA_TYPE *in, DATA_TYPE *right);
+extern void mdct_unroll_lap(int n0,int n1,
+			    int lW,int W,
+			    DATA_TYPE *in,DATA_TYPE *right,
+			    LOOKUP_T *w0,LOOKUP_T *w1,
+			    ogg_int16_t *out,
+			    int step,
+			    int start,int end /* samples, this frame */);
+
+#endif
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tremor/mdct_lookup.h b/Tremor/mdct_lookup.h
new file mode 100644
index 0000000..970e199
--- /dev/null
+++ b/Tremor/mdct_lookup.h
@@ -0,0 +1,540 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE.   *
+ *                                                                  *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002    *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************
+
+ function: sin,cos lookup tables
+
+ ********************************************************************/
+  
+#include "os_types.h"
+
+/* {sin(2*i*PI/4096), cos(2*i*PI/4096)}, with i = 0 to 512 */
+static LOOKUP_T sincos_lookup0[1026] = {
+  X(0x00000000), X(0x7fffffff), X(0x003243f5), X(0x7ffff621),
+  X(0x006487e3), X(0x7fffd886), X(0x0096cbc1), X(0x7fffa72c),
+  X(0x00c90f88), X(0x7fff6216), X(0x00fb5330), X(0x7fff0943),
+  X(0x012d96b1), X(0x7ffe9cb2), X(0x015fda03), X(0x7ffe1c65),
+  X(0x01921d20), X(0x7ffd885a), X(0x01c45ffe), X(0x7ffce093),
+  X(0x01f6a297), X(0x7ffc250f), X(0x0228e4e2), X(0x7ffb55ce),
+  X(0x025b26d7), X(0x7ffa72d1), X(0x028d6870), X(0x7ff97c18),
+  X(0x02bfa9a4), X(0x7ff871a2), X(0x02f1ea6c), X(0x7ff75370),
+  X(0x03242abf), X(0x7ff62182), X(0x03566a96), X(0x7ff4dbd9),
+  X(0x0388a9ea), X(0x7ff38274), X(0x03bae8b2), X(0x7ff21553),
+  X(0x03ed26e6), X(0x7ff09478), X(0x041f6480), X(0x7feeffe1),
+  X(0x0451a177), X(0x7fed5791), X(0x0483ddc3), X(0x7feb9b85),
+  X(0x04b6195d), X(0x7fe9cbc0), X(0x04e8543e), X(0x7fe7e841),
+  X(0x051a8e5c), X(0x7fe5f108), X(0x054cc7b1), X(0x7fe3e616),
+  X(0x057f0035), X(0x7fe1c76b), X(0x05b137df), X(0x7fdf9508),
+  X(0x05e36ea9), X(0x7fdd4eec), X(0x0615a48b), X(0x7fdaf519),
+  X(0x0647d97c), X(0x7fd8878e), X(0x067a0d76), X(0x7fd6064c),
+  X(0x06ac406f), X(0x7fd37153), X(0x06de7262), X(0x7fd0c8a3),
+  X(0x0710a345), X(0x7fce0c3e), X(0x0742d311), X(0x7fcb3c23),
+  X(0x077501be), X(0x7fc85854), X(0x07a72f45), X(0x7fc560cf),
+  X(0x07d95b9e), X(0x7fc25596), X(0x080b86c2), X(0x7fbf36aa),
+  X(0x083db0a7), X(0x7fbc040a), X(0x086fd947), X(0x7fb8bdb8),
+  X(0x08a2009a), X(0x7fb563b3), X(0x08d42699), X(0x7fb1f5fc),
+  X(0x09064b3a), X(0x7fae7495), X(0x09386e78), X(0x7faadf7c),
+  X(0x096a9049), X(0x7fa736b4), X(0x099cb0a7), X(0x7fa37a3c),
+  X(0x09cecf89), X(0x7f9faa15), X(0x0a00ece8), X(0x7f9bc640),
+  X(0x0a3308bd), X(0x7f97cebd), X(0x0a6522fe), X(0x7f93c38c),
+  X(0x0a973ba5), X(0x7f8fa4b0), X(0x0ac952aa), X(0x7f8b7227),
+  X(0x0afb6805), X(0x7f872bf3), X(0x0b2d7baf), X(0x7f82d214),
+  X(0x0b5f8d9f), X(0x7f7e648c), X(0x0b919dcf), X(0x7f79e35a),
+  X(0x0bc3ac35), X(0x7f754e80), X(0x0bf5b8cb), X(0x7f70a5fe),
+  X(0x0c27c389), X(0x7f6be9d4), X(0x0c59cc68), X(0x7f671a05),
+  X(0x0c8bd35e), X(0x7f62368f), X(0x0cbdd865), X(0x7f5d3f75),
+  X(0x0cefdb76), X(0x7f5834b7), X(0x0d21dc87), X(0x7f531655),
+  X(0x0d53db92), X(0x7f4de451), X(0x0d85d88f), X(0x7f489eaa),
+  X(0x0db7d376), X(0x7f434563), X(0x0de9cc40), X(0x7f3dd87c),
+  X(0x0e1bc2e4), X(0x7f3857f6), X(0x0e4db75b), X(0x7f32c3d1),
+  X(0x0e7fa99e), X(0x7f2d1c0e), X(0x0eb199a4), X(0x7f2760af),
+  X(0x0ee38766), X(0x7f2191b4), X(0x0f1572dc), X(0x7f1baf1e),
+  X(0x0f475bff), X(0x7f15b8ee), X(0x0f7942c7), X(0x7f0faf25),
+  X(0x0fab272b), X(0x7f0991c4), X(0x0fdd0926), X(0x7f0360cb),
+  X(0x100ee8ad), X(0x7efd1c3c), X(0x1040c5bb), X(0x7ef6c418),
+  X(0x1072a048), X(0x7ef05860), X(0x10a4784b), X(0x7ee9d914),
+  X(0x10d64dbd), X(0x7ee34636), X(0x11082096), X(0x7edc9fc6),
+  X(0x1139f0cf), X(0x7ed5e5c6), X(0x116bbe60), X(0x7ecf1837),
+  X(0x119d8941), X(0x7ec8371a), X(0x11cf516a), X(0x7ec14270),
+  X(0x120116d5), X(0x7eba3a39), X(0x1232d979), X(0x7eb31e78),
+  X(0x1264994e), X(0x7eabef2c), X(0x1296564d), X(0x7ea4ac58),
+  X(0x12c8106f), X(0x7e9d55fc), X(0x12f9c7aa), X(0x7e95ec1a),
+  X(0x132b7bf9), X(0x7e8e6eb2), X(0x135d2d53), X(0x7e86ddc6),
+  X(0x138edbb1), X(0x7e7f3957), X(0x13c0870a), X(0x7e778166),
+  X(0x13f22f58), X(0x7e6fb5f4), X(0x1423d492), X(0x7e67d703),
+  X(0x145576b1), X(0x7e5fe493), X(0x148715ae), X(0x7e57dea7),
+  X(0x14b8b17f), X(0x7e4fc53e), X(0x14ea4a1f), X(0x7e47985b),
+  X(0x151bdf86), X(0x7e3f57ff), X(0x154d71aa), X(0x7e37042a),
+  X(0x157f0086), X(0x7e2e9cdf), X(0x15b08c12), X(0x7e26221f),
+  X(0x15e21445), X(0x7e1d93ea), X(0x16139918), X(0x7e14f242),
+  X(0x16451a83), X(0x7e0c3d29), X(0x1676987f), X(0x7e0374a0),
+  X(0x16a81305), X(0x7dfa98a8), X(0x16d98a0c), X(0x7df1a942),
+  X(0x170afd8d), X(0x7de8a670), X(0x173c6d80), X(0x7ddf9034),
+  X(0x176dd9de), X(0x7dd6668f), X(0x179f429f), X(0x7dcd2981),
+  X(0x17d0a7bc), X(0x7dc3d90d), X(0x1802092c), X(0x7dba7534),
+  X(0x183366e9), X(0x7db0fdf8), X(0x1864c0ea), X(0x7da77359),
+  X(0x18961728), X(0x7d9dd55a), X(0x18c7699b), X(0x7d9423fc),
+  X(0x18f8b83c), X(0x7d8a5f40), X(0x192a0304), X(0x7d808728),
+  X(0x195b49ea), X(0x7d769bb5), X(0x198c8ce7), X(0x7d6c9ce9),
+  X(0x19bdcbf3), X(0x7d628ac6), X(0x19ef0707), X(0x7d58654d),
+  X(0x1a203e1b), X(0x7d4e2c7f), X(0x1a517128), X(0x7d43e05e),
+  X(0x1a82a026), X(0x7d3980ec), X(0x1ab3cb0d), X(0x7d2f0e2b),
+  X(0x1ae4f1d6), X(0x7d24881b), X(0x1b161479), X(0x7d19eebf),
+  X(0x1b4732ef), X(0x7d0f4218), X(0x1b784d30), X(0x7d048228),
+  X(0x1ba96335), X(0x7cf9aef0), X(0x1bda74f6), X(0x7ceec873),
+  X(0x1c0b826a), X(0x7ce3ceb2), X(0x1c3c8b8c), X(0x7cd8c1ae),
+  X(0x1c6d9053), X(0x7ccda169), X(0x1c9e90b8), X(0x7cc26de5),
+  X(0x1ccf8cb3), X(0x7cb72724), X(0x1d00843d), X(0x7cabcd28),
+  X(0x1d31774d), X(0x7ca05ff1), X(0x1d6265dd), X(0x7c94df83),
+  X(0x1d934fe5), X(0x7c894bde), X(0x1dc4355e), X(0x7c7da505),
+  X(0x1df5163f), X(0x7c71eaf9), X(0x1e25f282), X(0x7c661dbc),
+  X(0x1e56ca1e), X(0x7c5a3d50), X(0x1e879d0d), X(0x7c4e49b7),
+  X(0x1eb86b46), X(0x7c4242f2), X(0x1ee934c3), X(0x7c362904),
+  X(0x1f19f97b), X(0x7c29fbee), X(0x1f4ab968), X(0x7c1dbbb3),
+  X(0x1f7b7481), X(0x7c116853), X(0x1fac2abf), X(0x7c0501d2),
+  X(0x1fdcdc1b), X(0x7bf88830), X(0x200d888d), X(0x7bebfb70),
+  X(0x203e300d), X(0x7bdf5b94), X(0x206ed295), X(0x7bd2a89e),
+  X(0x209f701c), X(0x7bc5e290), X(0x20d0089c), X(0x7bb9096b),
+  X(0x21009c0c), X(0x7bac1d31), X(0x21312a65), X(0x7b9f1de6),
+  X(0x2161b3a0), X(0x7b920b89), X(0x219237b5), X(0x7b84e61f),
+  X(0x21c2b69c), X(0x7b77ada8), X(0x21f3304f), X(0x7b6a6227),
+  X(0x2223a4c5), X(0x7b5d039e), X(0x225413f8), X(0x7b4f920e),
+  X(0x22847de0), X(0x7b420d7a), X(0x22b4e274), X(0x7b3475e5),
+  X(0x22e541af), X(0x7b26cb4f), X(0x23159b88), X(0x7b190dbc),
+  X(0x2345eff8), X(0x7b0b3d2c), X(0x23763ef7), X(0x7afd59a4),
+  X(0x23a6887f), X(0x7aef6323), X(0x23d6cc87), X(0x7ae159ae),
+  X(0x24070b08), X(0x7ad33d45), X(0x243743fa), X(0x7ac50dec),
+  X(0x24677758), X(0x7ab6cba4), X(0x2497a517), X(0x7aa8766f),
+  X(0x24c7cd33), X(0x7a9a0e50), X(0x24f7efa2), X(0x7a8b9348),
+  X(0x25280c5e), X(0x7a7d055b), X(0x2558235f), X(0x7a6e648a),
+  X(0x2588349d), X(0x7a5fb0d8), X(0x25b84012), X(0x7a50ea47),
+  X(0x25e845b6), X(0x7a4210d8), X(0x26184581), X(0x7a332490),
+  X(0x26483f6c), X(0x7a24256f), X(0x26783370), X(0x7a151378),
+  X(0x26a82186), X(0x7a05eead), X(0x26d809a5), X(0x79f6b711),
+  X(0x2707ebc7), X(0x79e76ca7), X(0x2737c7e3), X(0x79d80f6f),
+  X(0x27679df4), X(0x79c89f6e), X(0x27976df1), X(0x79b91ca4),
+  X(0x27c737d3), X(0x79a98715), X(0x27f6fb92), X(0x7999dec4),
+  X(0x2826b928), X(0x798a23b1), X(0x2856708d), X(0x797a55e0),
+  X(0x288621b9), X(0x796a7554), X(0x28b5cca5), X(0x795a820e),
+  X(0x28e5714b), X(0x794a7c12), X(0x29150fa1), X(0x793a6361),
+  X(0x2944a7a2), X(0x792a37fe), X(0x29743946), X(0x7919f9ec),
+  X(0x29a3c485), X(0x7909a92d), X(0x29d34958), X(0x78f945c3),
+  X(0x2a02c7b8), X(0x78e8cfb2), X(0x2a323f9e), X(0x78d846fb),
+  X(0x2a61b101), X(0x78c7aba2), X(0x2a911bdc), X(0x78b6fda8),
+  X(0x2ac08026), X(0x78a63d11), X(0x2aefddd8), X(0x789569df),
+  X(0x2b1f34eb), X(0x78848414), X(0x2b4e8558), X(0x78738bb3),
+  X(0x2b7dcf17), X(0x786280bf), X(0x2bad1221), X(0x7851633b),
+  X(0x2bdc4e6f), X(0x78403329), X(0x2c0b83fa), X(0x782ef08b),
+  X(0x2c3ab2b9), X(0x781d9b65), X(0x2c69daa6), X(0x780c33b8),
+  X(0x2c98fbba), X(0x77fab989), X(0x2cc815ee), X(0x77e92cd9),
+  X(0x2cf72939), X(0x77d78daa), X(0x2d263596), X(0x77c5dc01),
+  X(0x2d553afc), X(0x77b417df), X(0x2d843964), X(0x77a24148),
+  X(0x2db330c7), X(0x7790583e), X(0x2de2211e), X(0x777e5cc3),
+  X(0x2e110a62), X(0x776c4edb), X(0x2e3fec8b), X(0x775a2e89),
+  X(0x2e6ec792), X(0x7747fbce), X(0x2e9d9b70), X(0x7735b6af),
+  X(0x2ecc681e), X(0x77235f2d), X(0x2efb2d95), X(0x7710f54c),
+  X(0x2f29ebcc), X(0x76fe790e), X(0x2f58a2be), X(0x76ebea77),
+  X(0x2f875262), X(0x76d94989), X(0x2fb5fab2), X(0x76c69647),
+  X(0x2fe49ba7), X(0x76b3d0b4), X(0x30133539), X(0x76a0f8d2),
+  X(0x3041c761), X(0x768e0ea6), X(0x30705217), X(0x767b1231),
+  X(0x309ed556), X(0x76680376), X(0x30cd5115), X(0x7654e279),
+  X(0x30fbc54d), X(0x7641af3d), X(0x312a31f8), X(0x762e69c4),
+  X(0x3158970e), X(0x761b1211), X(0x3186f487), X(0x7607a828),
+  X(0x31b54a5e), X(0x75f42c0b), X(0x31e39889), X(0x75e09dbd),
+  X(0x3211df04), X(0x75ccfd42), X(0x32401dc6), X(0x75b94a9c),
+  X(0x326e54c7), X(0x75a585cf), X(0x329c8402), X(0x7591aedd),
+  X(0x32caab6f), X(0x757dc5ca), X(0x32f8cb07), X(0x7569ca99),
+  X(0x3326e2c3), X(0x7555bd4c), X(0x3354f29b), X(0x75419de7),
+  X(0x3382fa88), X(0x752d6c6c), X(0x33b0fa84), X(0x751928e0),
+  X(0x33def287), X(0x7504d345), X(0x340ce28b), X(0x74f06b9e),
+  X(0x343aca87), X(0x74dbf1ef), X(0x3468aa76), X(0x74c7663a),
+  X(0x34968250), X(0x74b2c884), X(0x34c4520d), X(0x749e18cd),
+  X(0x34f219a8), X(0x7489571c), X(0x351fd918), X(0x74748371),
+  X(0x354d9057), X(0x745f9dd1), X(0x357b3f5d), X(0x744aa63f),
+  X(0x35a8e625), X(0x74359cbd), X(0x35d684a6), X(0x74208150),
+  X(0x36041ad9), X(0x740b53fb), X(0x3631a8b8), X(0x73f614c0),
+  X(0x365f2e3b), X(0x73e0c3a3), X(0x368cab5c), X(0x73cb60a8),
+  X(0x36ba2014), X(0x73b5ebd1), X(0x36e78c5b), X(0x73a06522),
+  X(0x3714f02a), X(0x738acc9e), X(0x37424b7b), X(0x73752249),
+  X(0x376f9e46), X(0x735f6626), X(0x379ce885), X(0x73499838),
+  X(0x37ca2a30), X(0x7333b883), X(0x37f76341), X(0x731dc70a),
+  X(0x382493b0), X(0x7307c3d0), X(0x3851bb77), X(0x72f1aed9),
+  X(0x387eda8e), X(0x72db8828), X(0x38abf0ef), X(0x72c54fc1),
+  X(0x38d8fe93), X(0x72af05a7), X(0x39060373), X(0x7298a9dd),
+  X(0x3932ff87), X(0x72823c67), X(0x395ff2c9), X(0x726bbd48),
+  X(0x398cdd32), X(0x72552c85), X(0x39b9bebc), X(0x723e8a20),
+  X(0x39e6975e), X(0x7227d61c), X(0x3a136712), X(0x7211107e),
+  X(0x3a402dd2), X(0x71fa3949), X(0x3a6ceb96), X(0x71e35080),
+  X(0x3a99a057), X(0x71cc5626), X(0x3ac64c0f), X(0x71b54a41),
+  X(0x3af2eeb7), X(0x719e2cd2), X(0x3b1f8848), X(0x7186fdde),
+  X(0x3b4c18ba), X(0x716fbd68), X(0x3b78a007), X(0x71586b74),
+  X(0x3ba51e29), X(0x71410805), X(0x3bd19318), X(0x7129931f),
+  X(0x3bfdfecd), X(0x71120cc5), X(0x3c2a6142), X(0x70fa74fc),
+  X(0x3c56ba70), X(0x70e2cbc6), X(0x3c830a50), X(0x70cb1128),
+  X(0x3caf50da), X(0x70b34525), X(0x3cdb8e09), X(0x709b67c0),
+  X(0x3d07c1d6), X(0x708378ff), X(0x3d33ec39), X(0x706b78e3),
+  X(0x3d600d2c), X(0x70536771), X(0x3d8c24a8), X(0x703b44ad),
+  X(0x3db832a6), X(0x7023109a), X(0x3de4371f), X(0x700acb3c),
+  X(0x3e10320d), X(0x6ff27497), X(0x3e3c2369), X(0x6fda0cae),
+  X(0x3e680b2c), X(0x6fc19385), X(0x3e93e950), X(0x6fa90921),
+  X(0x3ebfbdcd), X(0x6f906d84), X(0x3eeb889c), X(0x6f77c0b3),
+  X(0x3f1749b8), X(0x6f5f02b2), X(0x3f430119), X(0x6f463383),
+  X(0x3f6eaeb8), X(0x6f2d532c), X(0x3f9a5290), X(0x6f1461b0),
+  X(0x3fc5ec98), X(0x6efb5f12), X(0x3ff17cca), X(0x6ee24b57),
+  X(0x401d0321), X(0x6ec92683), X(0x40487f94), X(0x6eaff099),
+  X(0x4073f21d), X(0x6e96a99d), X(0x409f5ab6), X(0x6e7d5193),
+  X(0x40cab958), X(0x6e63e87f), X(0x40f60dfb), X(0x6e4a6e66),
+  X(0x4121589b), X(0x6e30e34a), X(0x414c992f), X(0x6e174730),
+  X(0x4177cfb1), X(0x6dfd9a1c), X(0x41a2fc1a), X(0x6de3dc11),
+  X(0x41ce1e65), X(0x6dca0d14), X(0x41f93689), X(0x6db02d29),
+  X(0x42244481), X(0x6d963c54), X(0x424f4845), X(0x6d7c3a98),
+  X(0x427a41d0), X(0x6d6227fa), X(0x42a5311b), X(0x6d48047e),
+  X(0x42d0161e), X(0x6d2dd027), X(0x42faf0d4), X(0x6d138afb),
+  X(0x4325c135), X(0x6cf934fc), X(0x4350873c), X(0x6cdece2f),
+  X(0x437b42e1), X(0x6cc45698), X(0x43a5f41e), X(0x6ca9ce3b),
+  X(0x43d09aed), X(0x6c8f351c), X(0x43fb3746), X(0x6c748b3f),
+  X(0x4425c923), X(0x6c59d0a9), X(0x4450507e), X(0x6c3f055d),
+  X(0x447acd50), X(0x6c242960), X(0x44a53f93), X(0x6c093cb6),
+  X(0x44cfa740), X(0x6bee3f62), X(0x44fa0450), X(0x6bd3316a),
+  X(0x452456bd), X(0x6bb812d1), X(0x454e9e80), X(0x6b9ce39b),
+  X(0x4578db93), X(0x6b81a3cd), X(0x45a30df0), X(0x6b66536b),
+  X(0x45cd358f), X(0x6b4af279), X(0x45f7526b), X(0x6b2f80fb),
+  X(0x4621647d), X(0x6b13fef5), X(0x464b6bbe), X(0x6af86c6c),
+  X(0x46756828), X(0x6adcc964), X(0x469f59b4), X(0x6ac115e2),
+  X(0x46c9405c), X(0x6aa551e9), X(0x46f31c1a), X(0x6a897d7d),
+  X(0x471cece7), X(0x6a6d98a4), X(0x4746b2bc), X(0x6a51a361),
+  X(0x47706d93), X(0x6a359db9), X(0x479a1d67), X(0x6a1987b0),
+  X(0x47c3c22f), X(0x69fd614a), X(0x47ed5be6), X(0x69e12a8c),
+  X(0x4816ea86), X(0x69c4e37a), X(0x48406e08), X(0x69a88c19),
+  X(0x4869e665), X(0x698c246c), X(0x48935397), X(0x696fac78),
+  X(0x48bcb599), X(0x69532442), X(0x48e60c62), X(0x69368bce),
+  X(0x490f57ee), X(0x6919e320), X(0x49389836), X(0x68fd2a3d),
+  X(0x4961cd33), X(0x68e06129), X(0x498af6df), X(0x68c387e9),
+  X(0x49b41533), X(0x68a69e81), X(0x49dd282a), X(0x6889a4f6),
+  X(0x4a062fbd), X(0x686c9b4b), X(0x4a2f2be6), X(0x684f8186),
+  X(0x4a581c9e), X(0x683257ab), X(0x4a8101de), X(0x68151dbe),
+  X(0x4aa9dba2), X(0x67f7d3c5), X(0x4ad2a9e2), X(0x67da79c3),
+  X(0x4afb6c98), X(0x67bd0fbd), X(0x4b2423be), X(0x679f95b7),
+  X(0x4b4ccf4d), X(0x67820bb7), X(0x4b756f40), X(0x676471c0),
+  X(0x4b9e0390), X(0x6746c7d8), X(0x4bc68c36), X(0x67290e02),
+  X(0x4bef092d), X(0x670b4444), X(0x4c177a6e), X(0x66ed6aa1),
+  X(0x4c3fdff4), X(0x66cf8120), X(0x4c6839b7), X(0x66b187c3),
+  X(0x4c9087b1), X(0x66937e91), X(0x4cb8c9dd), X(0x6675658c),
+  X(0x4ce10034), X(0x66573cbb), X(0x4d092ab0), X(0x66390422),
+  X(0x4d31494b), X(0x661abbc5), X(0x4d595bfe), X(0x65fc63a9),
+  X(0x4d8162c4), X(0x65ddfbd3), X(0x4da95d96), X(0x65bf8447),
+  X(0x4dd14c6e), X(0x65a0fd0b), X(0x4df92f46), X(0x65826622),
+  X(0x4e210617), X(0x6563bf92), X(0x4e48d0dd), X(0x6545095f),
+  X(0x4e708f8f), X(0x6526438f), X(0x4e984229), X(0x65076e25),
+  X(0x4ebfe8a5), X(0x64e88926), X(0x4ee782fb), X(0x64c99498),
+  X(0x4f0f1126), X(0x64aa907f), X(0x4f369320), X(0x648b7ce0),
+  X(0x4f5e08e3), X(0x646c59bf), X(0x4f857269), X(0x644d2722),
+  X(0x4faccfab), X(0x642de50d), X(0x4fd420a4), X(0x640e9386),
+  X(0x4ffb654d), X(0x63ef3290), X(0x50229da1), X(0x63cfc231),
+  X(0x5049c999), X(0x63b0426d), X(0x5070e92f), X(0x6390b34a),
+  X(0x5097fc5e), X(0x637114cc), X(0x50bf031f), X(0x635166f9),
+  X(0x50e5fd6d), X(0x6331a9d4), X(0x510ceb40), X(0x6311dd64),
+  X(0x5133cc94), X(0x62f201ac), X(0x515aa162), X(0x62d216b3),
+  X(0x518169a5), X(0x62b21c7b), X(0x51a82555), X(0x6292130c),
+  X(0x51ced46e), X(0x6271fa69), X(0x51f576ea), X(0x6251d298),
+  X(0x521c0cc2), X(0x62319b9d), X(0x524295f0), X(0x6211557e),
+  X(0x5269126e), X(0x61f1003f), X(0x528f8238), X(0x61d09be5),
+  X(0x52b5e546), X(0x61b02876), X(0x52dc3b92), X(0x618fa5f7),
+  X(0x53028518), X(0x616f146c), X(0x5328c1d0), X(0x614e73da),
+  X(0x534ef1b5), X(0x612dc447), X(0x537514c2), X(0x610d05b7),
+  X(0x539b2af0), X(0x60ec3830), X(0x53c13439), X(0x60cb5bb7),
+  X(0x53e73097), X(0x60aa7050), X(0x540d2005), X(0x60897601),
+  X(0x5433027d), X(0x60686ccf), X(0x5458d7f9), X(0x604754bf),
+  X(0x547ea073), X(0x60262dd6), X(0x54a45be6), X(0x6004f819),
+  X(0x54ca0a4b), X(0x5fe3b38d), X(0x54efab9c), X(0x5fc26038),
+  X(0x55153fd4), X(0x5fa0fe1f), X(0x553ac6ee), X(0x5f7f8d46),
+  X(0x556040e2), X(0x5f5e0db3), X(0x5585adad), X(0x5f3c7f6b),
+  X(0x55ab0d46), X(0x5f1ae274), X(0x55d05faa), X(0x5ef936d1),
+  X(0x55f5a4d2), X(0x5ed77c8a), X(0x561adcb9), X(0x5eb5b3a2),
+  X(0x56400758), X(0x5e93dc1f), X(0x566524aa), X(0x5e71f606),
+  X(0x568a34a9), X(0x5e50015d), X(0x56af3750), X(0x5e2dfe29),
+  X(0x56d42c99), X(0x5e0bec6e), X(0x56f9147e), X(0x5de9cc33),
+  X(0x571deefa), X(0x5dc79d7c), X(0x5742bc06), X(0x5da5604f),
+  X(0x57677b9d), X(0x5d8314b1), X(0x578c2dba), X(0x5d60baa7),
+  X(0x57b0d256), X(0x5d3e5237), X(0x57d5696d), X(0x5d1bdb65),
+  X(0x57f9f2f8), X(0x5cf95638), X(0x581e6ef1), X(0x5cd6c2b5),
+  X(0x5842dd54), X(0x5cb420e0), X(0x58673e1b), X(0x5c9170bf),
+  X(0x588b9140), X(0x5c6eb258), X(0x58afd6bd), X(0x5c4be5b0),
+  X(0x58d40e8c), X(0x5c290acc), X(0x58f838a9), X(0x5c0621b2),
+  X(0x591c550e), X(0x5be32a67), X(0x594063b5), X(0x5bc024f0),
+  X(0x59646498), X(0x5b9d1154), X(0x598857b2), X(0x5b79ef96),
+  X(0x59ac3cfd), X(0x5b56bfbd), X(0x59d01475), X(0x5b3381ce),
+  X(0x59f3de12), X(0x5b1035cf), X(0x5a1799d1), X(0x5aecdbc5),
+  X(0x5a3b47ab), X(0x5ac973b5), X(0x5a5ee79a), X(0x5aa5fda5),
+  X(0x5a82799a), X(0x5a82799a)
+  };
+  
+  /* {sin((2*i+1)*PI/4096), cos((2*i+1)*PI/4096)}, with i = 0 to 511 */
+static LOOKUP_T sincos_lookup1[1024] = {
+  X(0x001921fb), X(0x7ffffd88), X(0x004b65ee), X(0x7fffe9cb),
+  X(0x007da9d4), X(0x7fffc251), X(0x00afeda8), X(0x7fff8719),
+  X(0x00e23160), X(0x7fff3824), X(0x011474f6), X(0x7ffed572),
+  X(0x0146b860), X(0x7ffe5f03), X(0x0178fb99), X(0x7ffdd4d7),
+  X(0x01ab3e97), X(0x7ffd36ee), X(0x01dd8154), X(0x7ffc8549),
+  X(0x020fc3c6), X(0x7ffbbfe6), X(0x024205e8), X(0x7ffae6c7),
+  X(0x027447b0), X(0x7ff9f9ec), X(0x02a68917), X(0x7ff8f954),
+  X(0x02d8ca16), X(0x7ff7e500), X(0x030b0aa4), X(0x7ff6bcf0),
+  X(0x033d4abb), X(0x7ff58125), X(0x036f8a51), X(0x7ff4319d),
+  X(0x03a1c960), X(0x7ff2ce5b), X(0x03d407df), X(0x7ff1575d),
+  X(0x040645c7), X(0x7fefcca4), X(0x04388310), X(0x7fee2e30),
+  X(0x046abfb3), X(0x7fec7c02), X(0x049cfba7), X(0x7feab61a),
+  X(0x04cf36e5), X(0x7fe8dc78), X(0x05017165), X(0x7fe6ef1c),
+  X(0x0533ab20), X(0x7fe4ee06), X(0x0565e40d), X(0x7fe2d938),
+  X(0x05981c26), X(0x7fe0b0b1), X(0x05ca5361), X(0x7fde7471),
+  X(0x05fc89b8), X(0x7fdc247a), X(0x062ebf22), X(0x7fd9c0ca),
+  X(0x0660f398), X(0x7fd74964), X(0x06932713), X(0x7fd4be46),
+  X(0x06c5598a), X(0x7fd21f72), X(0x06f78af6), X(0x7fcf6ce8),
+  X(0x0729bb4e), X(0x7fcca6a7), X(0x075bea8c), X(0x7fc9ccb2),
+  X(0x078e18a7), X(0x7fc6df08), X(0x07c04598), X(0x7fc3dda9),
+  X(0x07f27157), X(0x7fc0c896), X(0x08249bdd), X(0x7fbd9fd0),
+  X(0x0856c520), X(0x7fba6357), X(0x0888ed1b), X(0x7fb7132b),
+  X(0x08bb13c5), X(0x7fb3af4e), X(0x08ed3916), X(0x7fb037bf),
+  X(0x091f5d06), X(0x7facac7f), X(0x09517f8f), X(0x7fa90d8e),
+  X(0x0983a0a7), X(0x7fa55aee), X(0x09b5c048), X(0x7fa1949e),
+  X(0x09e7de6a), X(0x7f9dbaa0), X(0x0a19fb04), X(0x7f99ccf4),
+  X(0x0a4c1610), X(0x7f95cb9a), X(0x0a7e2f85), X(0x7f91b694),
+  X(0x0ab0475c), X(0x7f8d8de1), X(0x0ae25d8d), X(0x7f895182),
+  X(0x0b147211), X(0x7f850179), X(0x0b4684df), X(0x7f809dc5),
+  X(0x0b7895f0), X(0x7f7c2668), X(0x0baaa53b), X(0x7f779b62),
+  X(0x0bdcb2bb), X(0x7f72fcb4), X(0x0c0ebe66), X(0x7f6e4a5e),
+  X(0x0c40c835), X(0x7f698461), X(0x0c72d020), X(0x7f64aabf),
+  X(0x0ca4d620), X(0x7f5fbd77), X(0x0cd6da2d), X(0x7f5abc8a),
+  X(0x0d08dc3f), X(0x7f55a7fa), X(0x0d3adc4e), X(0x7f507fc7),
+  X(0x0d6cda53), X(0x7f4b43f2), X(0x0d9ed646), X(0x7f45f47b),
+  X(0x0dd0d01f), X(0x7f409164), X(0x0e02c7d7), X(0x7f3b1aad),
+  X(0x0e34bd66), X(0x7f359057), X(0x0e66b0c3), X(0x7f2ff263),
+  X(0x0e98a1e9), X(0x7f2a40d2), X(0x0eca90ce), X(0x7f247ba5),
+  X(0x0efc7d6b), X(0x7f1ea2dc), X(0x0f2e67b8), X(0x7f18b679),
+  X(0x0f604faf), X(0x7f12b67c), X(0x0f923546), X(0x7f0ca2e7),
+  X(0x0fc41876), X(0x7f067bba), X(0x0ff5f938), X(0x7f0040f6),
+  X(0x1027d784), X(0x7ef9f29d), X(0x1059b352), X(0x7ef390ae),
+  X(0x108b8c9b), X(0x7eed1b2c), X(0x10bd6356), X(0x7ee69217),
+  X(0x10ef377d), X(0x7edff570), X(0x11210907), X(0x7ed94538),
+  X(0x1152d7ed), X(0x7ed28171), X(0x1184a427), X(0x7ecbaa1a),
+  X(0x11b66dad), X(0x7ec4bf36), X(0x11e83478), X(0x7ebdc0c6),
+  X(0x1219f880), X(0x7eb6aeca), X(0x124bb9be), X(0x7eaf8943),
+  X(0x127d7829), X(0x7ea85033), X(0x12af33ba), X(0x7ea1039b),
+  X(0x12e0ec6a), X(0x7e99a37c), X(0x1312a230), X(0x7e922fd6),
+  X(0x13445505), X(0x7e8aa8ac), X(0x137604e2), X(0x7e830dff),
+  X(0x13a7b1bf), X(0x7e7b5fce), X(0x13d95b93), X(0x7e739e1d),
+  X(0x140b0258), X(0x7e6bc8eb), X(0x143ca605), X(0x7e63e03b),
+  X(0x146e4694), X(0x7e5be40c), X(0x149fe3fc), X(0x7e53d462),
+  X(0x14d17e36), X(0x7e4bb13c), X(0x1503153a), X(0x7e437a9c),
+  X(0x1534a901), X(0x7e3b3083), X(0x15663982), X(0x7e32d2f4),
+  X(0x1597c6b7), X(0x7e2a61ed), X(0x15c95097), X(0x7e21dd73),
+  X(0x15fad71b), X(0x7e194584), X(0x162c5a3b), X(0x7e109a24),
+  X(0x165dd9f0), X(0x7e07db52), X(0x168f5632), X(0x7dff0911),
+  X(0x16c0cef9), X(0x7df62362), X(0x16f2443e), X(0x7ded2a47),
+  X(0x1723b5f9), X(0x7de41dc0), X(0x17552422), X(0x7ddafdce),
+  X(0x17868eb3), X(0x7dd1ca75), X(0x17b7f5a3), X(0x7dc883b4),
+  X(0x17e958ea), X(0x7dbf298d), X(0x181ab881), X(0x7db5bc02),
+  X(0x184c1461), X(0x7dac3b15), X(0x187d6c82), X(0x7da2a6c6),
+  X(0x18aec0db), X(0x7d98ff17), X(0x18e01167), X(0x7d8f4409),
+  X(0x19115e1c), X(0x7d85759f), X(0x1942a6f3), X(0x7d7b93da),
+  X(0x1973ebe6), X(0x7d719eba), X(0x19a52ceb), X(0x7d679642),
+  X(0x19d669fc), X(0x7d5d7a74), X(0x1a07a311), X(0x7d534b50),
+  X(0x1a38d823), X(0x7d4908d9), X(0x1a6a0929), X(0x7d3eb30f),
+  X(0x1a9b361d), X(0x7d3449f5), X(0x1acc5ef6), X(0x7d29cd8c),
+  X(0x1afd83ad), X(0x7d1f3dd6), X(0x1b2ea43a), X(0x7d149ad5),
+  X(0x1b5fc097), X(0x7d09e489), X(0x1b90d8bb), X(0x7cff1af5),
+  X(0x1bc1ec9e), X(0x7cf43e1a), X(0x1bf2fc3a), X(0x7ce94dfb),
+  X(0x1c240786), X(0x7cde4a98), X(0x1c550e7c), X(0x7cd333f3),
+  X(0x1c861113), X(0x7cc80a0f), X(0x1cb70f43), X(0x7cbcccec),
+  X(0x1ce80906), X(0x7cb17c8d), X(0x1d18fe54), X(0x7ca618f3),
+  X(0x1d49ef26), X(0x7c9aa221), X(0x1d7adb73), X(0x7c8f1817),
+  X(0x1dabc334), X(0x7c837ad8), X(0x1ddca662), X(0x7c77ca65),
+  X(0x1e0d84f5), X(0x7c6c06c0), X(0x1e3e5ee5), X(0x7c602fec),
+  X(0x1e6f342c), X(0x7c5445e9), X(0x1ea004c1), X(0x7c4848ba),
+  X(0x1ed0d09d), X(0x7c3c3860), X(0x1f0197b8), X(0x7c3014de),
+  X(0x1f325a0b), X(0x7c23de35), X(0x1f63178f), X(0x7c179467),
+  X(0x1f93d03c), X(0x7c0b3777), X(0x1fc4840a), X(0x7bfec765),
+  X(0x1ff532f2), X(0x7bf24434), X(0x2025dcec), X(0x7be5ade6),
+  X(0x205681f1), X(0x7bd9047c), X(0x208721f9), X(0x7bcc47fa),
+  X(0x20b7bcfe), X(0x7bbf7860), X(0x20e852f6), X(0x7bb295b0),
+  X(0x2118e3dc), X(0x7ba59fee), X(0x21496fa7), X(0x7b989719),
+  X(0x2179f64f), X(0x7b8b7b36), X(0x21aa77cf), X(0x7b7e4c45),
+  X(0x21daf41d), X(0x7b710a49), X(0x220b6b32), X(0x7b63b543),
+  X(0x223bdd08), X(0x7b564d36), X(0x226c4996), X(0x7b48d225),
+  X(0x229cb0d5), X(0x7b3b4410), X(0x22cd12bd), X(0x7b2da2fa),
+  X(0x22fd6f48), X(0x7b1feee5), X(0x232dc66d), X(0x7b1227d3),
+  X(0x235e1826), X(0x7b044dc7), X(0x238e646a), X(0x7af660c2),
+  X(0x23beab33), X(0x7ae860c7), X(0x23eeec78), X(0x7ada4dd8),
+  X(0x241f2833), X(0x7acc27f7), X(0x244f5e5c), X(0x7abdef25),
+  X(0x247f8eec), X(0x7aafa367), X(0x24afb9da), X(0x7aa144bc),
+  X(0x24dfdf20), X(0x7a92d329), X(0x250ffeb7), X(0x7a844eae),
+  X(0x25401896), X(0x7a75b74f), X(0x25702cb7), X(0x7a670d0d),
+  X(0x25a03b11), X(0x7a584feb), X(0x25d0439f), X(0x7a497feb),
+  X(0x26004657), X(0x7a3a9d0f), X(0x26304333), X(0x7a2ba75a),
+  X(0x26603a2c), X(0x7a1c9ece), X(0x26902b39), X(0x7a0d836d),
+  X(0x26c01655), X(0x79fe5539), X(0x26effb76), X(0x79ef1436),
+  X(0x271fda96), X(0x79dfc064), X(0x274fb3ae), X(0x79d059c8),
+  X(0x277f86b5), X(0x79c0e062), X(0x27af53a6), X(0x79b15435),
+  X(0x27df1a77), X(0x79a1b545), X(0x280edb23), X(0x79920392),
+  X(0x283e95a1), X(0x79823f20), X(0x286e49ea), X(0x797267f2),
+  X(0x289df7f8), X(0x79627e08), X(0x28cd9fc1), X(0x79528167),
+  X(0x28fd4140), X(0x79427210), X(0x292cdc6d), X(0x79325006),
+  X(0x295c7140), X(0x79221b4b), X(0x298bffb2), X(0x7911d3e2),
+  X(0x29bb87bc), X(0x790179cd), X(0x29eb0957), X(0x78f10d0f),
+  X(0x2a1a847b), X(0x78e08dab), X(0x2a49f920), X(0x78cffba3),
+  X(0x2a796740), X(0x78bf56f9), X(0x2aa8ced3), X(0x78ae9fb0),
+  X(0x2ad82fd2), X(0x789dd5cb), X(0x2b078a36), X(0x788cf94c),
+  X(0x2b36ddf7), X(0x787c0a36), X(0x2b662b0e), X(0x786b088c),
+  X(0x2b957173), X(0x7859f44f), X(0x2bc4b120), X(0x7848cd83),
+  X(0x2bf3ea0d), X(0x7837942b), X(0x2c231c33), X(0x78264849),
+  X(0x2c52478a), X(0x7814e9df), X(0x2c816c0c), X(0x780378f1),
+  X(0x2cb089b1), X(0x77f1f581), X(0x2cdfa071), X(0x77e05f91),
+  X(0x2d0eb046), X(0x77ceb725), X(0x2d3db928), X(0x77bcfc3f),
+  X(0x2d6cbb10), X(0x77ab2ee2), X(0x2d9bb5f6), X(0x77994f11),
+  X(0x2dcaa9d5), X(0x77875cce), X(0x2df996a3), X(0x7775581d),
+  X(0x2e287c5a), X(0x776340ff), X(0x2e575af3), X(0x77511778),
+  X(0x2e863267), X(0x773edb8b), X(0x2eb502ae), X(0x772c8d3a),
+  X(0x2ee3cbc1), X(0x771a2c88), X(0x2f128d99), X(0x7707b979),
+  X(0x2f41482e), X(0x76f5340e), X(0x2f6ffb7a), X(0x76e29c4b),
+  X(0x2f9ea775), X(0x76cff232), X(0x2fcd4c19), X(0x76bd35c7),
+  X(0x2ffbe95d), X(0x76aa670d), X(0x302a7f3a), X(0x76978605),
+  X(0x30590dab), X(0x768492b4), X(0x308794a6), X(0x76718d1c),
+  X(0x30b61426), X(0x765e7540), X(0x30e48c22), X(0x764b4b23),
+  X(0x3112fc95), X(0x76380ec8), X(0x31416576), X(0x7624c031),
+  X(0x316fc6be), X(0x76115f63), X(0x319e2067), X(0x75fdec60),
+  X(0x31cc7269), X(0x75ea672a), X(0x31fabcbd), X(0x75d6cfc5),
+  X(0x3228ff5c), X(0x75c32634), X(0x32573a3f), X(0x75af6a7b),
+  X(0x32856d5e), X(0x759b9c9b), X(0x32b398b3), X(0x7587bc98),
+  X(0x32e1bc36), X(0x7573ca75), X(0x330fd7e1), X(0x755fc635),
+  X(0x333debab), X(0x754bafdc), X(0x336bf78f), X(0x7537876c),
+  X(0x3399fb85), X(0x75234ce8), X(0x33c7f785), X(0x750f0054),
+  X(0x33f5eb89), X(0x74faa1b3), X(0x3423d78a), X(0x74e63108),
+  X(0x3451bb81), X(0x74d1ae55), X(0x347f9766), X(0x74bd199f),
+  X(0x34ad6b32), X(0x74a872e8), X(0x34db36df), X(0x7493ba34),
+  X(0x3508fa66), X(0x747eef85), X(0x3536b5be), X(0x746a12df),
+  X(0x356468e2), X(0x74552446), X(0x359213c9), X(0x744023bc),
+  X(0x35bfb66e), X(0x742b1144), X(0x35ed50c9), X(0x7415ece2),
+  X(0x361ae2d3), X(0x7400b69a), X(0x36486c86), X(0x73eb6e6e),
+  X(0x3675edd9), X(0x73d61461), X(0x36a366c6), X(0x73c0a878),
+  X(0x36d0d746), X(0x73ab2ab4), X(0x36fe3f52), X(0x73959b1b),
+  X(0x372b9ee3), X(0x737ff9ae), X(0x3758f5f2), X(0x736a4671),
+  X(0x37864477), X(0x73548168), X(0x37b38a6d), X(0x733eaa96),
+  X(0x37e0c7cc), X(0x7328c1ff), X(0x380dfc8d), X(0x7312c7a5),
+  X(0x383b28a9), X(0x72fcbb8c), X(0x38684c19), X(0x72e69db7),
+  X(0x389566d6), X(0x72d06e2b), X(0x38c278d9), X(0x72ba2cea),
+  X(0x38ef821c), X(0x72a3d9f7), X(0x391c8297), X(0x728d7557),
+  X(0x39497a43), X(0x7276ff0d), X(0x39766919), X(0x7260771b),
+  X(0x39a34f13), X(0x7249dd86), X(0x39d02c2a), X(0x72333251),
+  X(0x39fd0056), X(0x721c7580), X(0x3a29cb91), X(0x7205a716),
+  X(0x3a568dd4), X(0x71eec716), X(0x3a834717), X(0x71d7d585),
+  X(0x3aaff755), X(0x71c0d265), X(0x3adc9e86), X(0x71a9bdba),
+  X(0x3b093ca3), X(0x71929789), X(0x3b35d1a5), X(0x717b5fd3),
+  X(0x3b625d86), X(0x7164169d), X(0x3b8ee03e), X(0x714cbbeb),
+  X(0x3bbb59c7), X(0x71354fc0), X(0x3be7ca1a), X(0x711dd220),
+  X(0x3c143130), X(0x7106430e), X(0x3c408f03), X(0x70eea28e),
+  X(0x3c6ce38a), X(0x70d6f0a4), X(0x3c992ec0), X(0x70bf2d53),
+  X(0x3cc5709e), X(0x70a7589f), X(0x3cf1a91c), X(0x708f728b),
+  X(0x3d1dd835), X(0x70777b1c), X(0x3d49fde1), X(0x705f7255),
+  X(0x3d761a19), X(0x70475839), X(0x3da22cd7), X(0x702f2ccd),
+  X(0x3dce3614), X(0x7016f014), X(0x3dfa35c8), X(0x6ffea212),
+  X(0x3e262bee), X(0x6fe642ca), X(0x3e52187f), X(0x6fcdd241),
+  X(0x3e7dfb73), X(0x6fb5507a), X(0x3ea9d4c3), X(0x6f9cbd79),
+  X(0x3ed5a46b), X(0x6f841942), X(0x3f016a61), X(0x6f6b63d8),
+  X(0x3f2d26a0), X(0x6f529d40), X(0x3f58d921), X(0x6f39c57d),
+  X(0x3f8481dd), X(0x6f20dc92), X(0x3fb020ce), X(0x6f07e285),
+  X(0x3fdbb5ec), X(0x6eeed758), X(0x40074132), X(0x6ed5bb10),
+  X(0x4032c297), X(0x6ebc8db0), X(0x405e3a16), X(0x6ea34f3d),
+  X(0x4089a7a8), X(0x6e89ffb9), X(0x40b50b46), X(0x6e709f2a),
+  X(0x40e064ea), X(0x6e572d93), X(0x410bb48c), X(0x6e3daaf8),
+  X(0x4136fa27), X(0x6e24175c), X(0x416235b2), X(0x6e0a72c5),
+  X(0x418d6729), X(0x6df0bd35), X(0x41b88e84), X(0x6dd6f6b1),
+  X(0x41e3abbc), X(0x6dbd1f3c), X(0x420ebecb), X(0x6da336dc),
+  X(0x4239c7aa), X(0x6d893d93), X(0x4264c653), X(0x6d6f3365),
+  X(0x428fbabe), X(0x6d551858), X(0x42baa4e6), X(0x6d3aec6e),
+  X(0x42e584c3), X(0x6d20afac), X(0x43105a50), X(0x6d066215),
+  X(0x433b2585), X(0x6cec03af), X(0x4365e65b), X(0x6cd1947c),
+  X(0x43909ccd), X(0x6cb71482), X(0x43bb48d4), X(0x6c9c83c3),
+  X(0x43e5ea68), X(0x6c81e245), X(0x44108184), X(0x6c67300b),
+  X(0x443b0e21), X(0x6c4c6d1a), X(0x44659039), X(0x6c319975),
+  X(0x449007c4), X(0x6c16b521), X(0x44ba74bd), X(0x6bfbc021),
+  X(0x44e4d71c), X(0x6be0ba7b), X(0x450f2edb), X(0x6bc5a431),
+  X(0x45397bf4), X(0x6baa7d49), X(0x4563be60), X(0x6b8f45c7),
+  X(0x458df619), X(0x6b73fdae), X(0x45b82318), X(0x6b58a503),
+  X(0x45e24556), X(0x6b3d3bcb), X(0x460c5cce), X(0x6b21c208),
+  X(0x46366978), X(0x6b0637c1), X(0x46606b4e), X(0x6aea9cf8),
+  X(0x468a624a), X(0x6acef1b2), X(0x46b44e65), X(0x6ab335f4),
+  X(0x46de2f99), X(0x6a9769c1), X(0x470805df), X(0x6a7b8d1e),
+  X(0x4731d131), X(0x6a5fa010), X(0x475b9188), X(0x6a43a29a),
+  X(0x478546de), X(0x6a2794c1), X(0x47aef12c), X(0x6a0b7689),
+  X(0x47d8906d), X(0x69ef47f6), X(0x48022499), X(0x69d3090e),
+  X(0x482badab), X(0x69b6b9d3), X(0x48552b9b), X(0x699a5a4c),
+  X(0x487e9e64), X(0x697dea7b), X(0x48a805ff), X(0x69616a65),
+  X(0x48d16265), X(0x6944da10), X(0x48fab391), X(0x6928397e),
+  X(0x4923f97b), X(0x690b88b5), X(0x494d341e), X(0x68eec7b9),
+  X(0x49766373), X(0x68d1f68f), X(0x499f8774), X(0x68b5153a),
+  X(0x49c8a01b), X(0x689823bf), X(0x49f1ad61), X(0x687b2224),
+  X(0x4a1aaf3f), X(0x685e106c), X(0x4a43a5b0), X(0x6840ee9b),
+  X(0x4a6c90ad), X(0x6823bcb7), X(0x4a957030), X(0x68067ac3),
+  X(0x4abe4433), X(0x67e928c5), X(0x4ae70caf), X(0x67cbc6c0),
+  X(0x4b0fc99d), X(0x67ae54ba), X(0x4b387af9), X(0x6790d2b6),
+  X(0x4b6120bb), X(0x677340ba), X(0x4b89badd), X(0x67559eca),
+  X(0x4bb24958), X(0x6737ecea), X(0x4bdacc28), X(0x671a2b20),
+  X(0x4c034345), X(0x66fc596f), X(0x4c2baea9), X(0x66de77dc),
+  X(0x4c540e4e), X(0x66c0866d), X(0x4c7c622d), X(0x66a28524),
+  X(0x4ca4aa41), X(0x66847408), X(0x4ccce684), X(0x6666531d),
+  X(0x4cf516ee), X(0x66482267), X(0x4d1d3b7a), X(0x6629e1ec),
+  X(0x4d455422), X(0x660b91af), X(0x4d6d60df), X(0x65ed31b5),
+  X(0x4d9561ac), X(0x65cec204), X(0x4dbd5682), X(0x65b0429f),
+  X(0x4de53f5a), X(0x6591b38c), X(0x4e0d1c30), X(0x657314cf),
+  X(0x4e34ecfc), X(0x6554666d), X(0x4e5cb1b9), X(0x6535a86b),
+  X(0x4e846a60), X(0x6516dacd), X(0x4eac16eb), X(0x64f7fd98),
+  X(0x4ed3b755), X(0x64d910d1), X(0x4efb4b96), X(0x64ba147d),
+  X(0x4f22d3aa), X(0x649b08a0), X(0x4f4a4f89), X(0x647bed3f),
+  X(0x4f71bf2e), X(0x645cc260), X(0x4f992293), X(0x643d8806),
+  X(0x4fc079b1), X(0x641e3e38), X(0x4fe7c483), X(0x63fee4f8),
+  X(0x500f0302), X(0x63df7c4d), X(0x50363529), X(0x63c0043b),
+  X(0x505d5af1), X(0x63a07cc7), X(0x50847454), X(0x6380e5f6),
+  X(0x50ab814d), X(0x63613fcd), X(0x50d281d5), X(0x63418a50),
+  X(0x50f975e6), X(0x6321c585), X(0x51205d7b), X(0x6301f171),
+  X(0x5147388c), X(0x62e20e17), X(0x516e0715), X(0x62c21b7e),
+  X(0x5194c910), X(0x62a219aa), X(0x51bb7e75), X(0x628208a1),
+  X(0x51e22740), X(0x6261e866), X(0x5208c36a), X(0x6241b8ff),
+  X(0x522f52ee), X(0x62217a72), X(0x5255d5c5), X(0x62012cc2),
+  X(0x527c4bea), X(0x61e0cff5), X(0x52a2b556), X(0x61c06410),
+  X(0x52c91204), X(0x619fe918), X(0x52ef61ee), X(0x617f5f12),
+  X(0x5315a50e), X(0x615ec603), X(0x533bdb5d), X(0x613e1df0),
+  X(0x536204d7), X(0x611d66de), X(0x53882175), X(0x60fca0d2),
+  X(0x53ae3131), X(0x60dbcbd1), X(0x53d43406), X(0x60bae7e1),
+  X(0x53fa29ed), X(0x6099f505), X(0x542012e1), X(0x6078f344),
+  X(0x5445eedb), X(0x6057e2a2), X(0x546bbdd7), X(0x6036c325),
+  X(0x54917fce), X(0x601594d1), X(0x54b734ba), X(0x5ff457ad),
+  X(0x54dcdc96), X(0x5fd30bbc), X(0x5502775c), X(0x5fb1b104),
+  X(0x55280505), X(0x5f90478a), X(0x554d858d), X(0x5f6ecf53),
+  X(0x5572f8ed), X(0x5f4d4865), X(0x55985f20), X(0x5f2bb2c5),
+  X(0x55bdb81f), X(0x5f0a0e77), X(0x55e303e6), X(0x5ee85b82),
+  X(0x5608426e), X(0x5ec699e9), X(0x562d73b2), X(0x5ea4c9b3),
+  X(0x565297ab), X(0x5e82eae5), X(0x5677ae54), X(0x5e60fd84),
+  X(0x569cb7a8), X(0x5e3f0194), X(0x56c1b3a1), X(0x5e1cf71c),
+  X(0x56e6a239), X(0x5dfade20), X(0x570b8369), X(0x5dd8b6a7),
+  X(0x5730572e), X(0x5db680b4), X(0x57551d80), X(0x5d943c4e),
+  X(0x5779d65b), X(0x5d71e979), X(0x579e81b8), X(0x5d4f883b),
+  X(0x57c31f92), X(0x5d2d189a), X(0x57e7afe4), X(0x5d0a9a9a),
+  X(0x580c32a7), X(0x5ce80e41), X(0x5830a7d6), X(0x5cc57394),
+  X(0x58550f6c), X(0x5ca2ca99), X(0x58796962), X(0x5c801354),
+  X(0x589db5b3), X(0x5c5d4dcc), X(0x58c1f45b), X(0x5c3a7a05),
+  X(0x58e62552), X(0x5c179806), X(0x590a4893), X(0x5bf4a7d2),
+  X(0x592e5e19), X(0x5bd1a971), X(0x595265df), X(0x5bae9ce7),
+  X(0x59765fde), X(0x5b8b8239), X(0x599a4c12), X(0x5b68596d),
+  X(0x59be2a74), X(0x5b452288), X(0x59e1faff), X(0x5b21dd90),
+  X(0x5a05bdae), X(0x5afe8a8b), X(0x5a29727b), X(0x5adb297d),
+  X(0x5a4d1960), X(0x5ab7ba6c), X(0x5a70b258), X(0x5a943d5e),
+};
+  
diff --git a/Tremor/misc.c b/Tremor/misc.c
new file mode 100644
index 0000000..66bf523
--- /dev/null
+++ b/Tremor/misc.c
@@ -0,0 +1,208 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+ * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************/
+
+#define HEAD_ALIGN 64
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#define MISC_C
+#include "misc.h"
+#include <sys/time.h>
+
+static void **pointers=NULL;
+static long *insertlist=NULL; /* We can't embed this in the pointer list;
+			  a pointer can have any value... */
+
+static char **files=NULL;
+static long *file_bytes=NULL;
+static int  filecount=0;
+
+static int ptop=0;
+static int palloced=0;
+static int pinsert=0;
+
+typedef struct {
+  char *file;
+  long line;
+  long ptr;
+  long bytes;
+} head;
+
+long global_bytes=0;
+long start_time=-1;
+
+static void *_insert(void *ptr,long bytes,char *file,long line){
+  ((head *)ptr)->file=file;
+  ((head *)ptr)->line=line;
+  ((head *)ptr)->ptr=pinsert;
+  ((head *)ptr)->bytes=bytes-HEAD_ALIGN;
+
+  if(pinsert>=palloced){
+    palloced+=64;
+    if(pointers){
+      pointers=(void **)realloc(pointers,sizeof(void **)*palloced);
+      insertlist=(long *)realloc(insertlist,sizeof(long *)*palloced);
+    }else{
+      pointers=(void **)malloc(sizeof(void **)*palloced);
+      insertlist=(long *)malloc(sizeof(long *)*palloced);
+    }
+  }
+
+  pointers[pinsert]=ptr;
+
+  if(pinsert==ptop)
+    pinsert=++ptop;
+  else
+    pinsert=insertlist[pinsert];
+
+#ifdef _VDBG_GRAPHFILE
+  {
+    FILE *out;
+    struct timeval tv;
+    static struct timezone tz;
+    int i;
+    char buffer[80];
+    gettimeofday(&tv,&tz);
+
+    for(i=0;i<filecount;i++)
+      if(!strcmp(file,files[i]))break;
+
+    if(i==filecount){
+      filecount++;
+      if(!files){
+	files=malloc(filecount*sizeof(*files));
+	file_bytes=malloc(filecount*sizeof(*file_bytes));
+      }else{
+	files=realloc(files,filecount*sizeof(*files));
+	file_bytes=realloc(file_bytes,filecount*sizeof(*file_bytes));
+      }
+      files[i]=strdup(file);
+      file_bytes[i]=0;
+    }
+
+    file_bytes[i]+=bytes-HEAD_ALIGN;
+
+    if(start_time==-1)start_time=(tv.tv_sec*1000)+(tv.tv_usec/1000);
+
+    snprintf(buffer,80,"%s",file);
+    if(strchr(buffer,'.'))strchr(buffer,'.')[0]=0;
+    strcat(buffer,_VDBG_GRAPHFILE);
+    out=fopen(buffer,"a");
+    fprintf(out,"%ld, %ld\n",-start_time+(tv.tv_sec*1000)+(tv.tv_usec/1000),
+	    file_bytes[i]-(bytes-HEAD_ALIGN));
+    fprintf(out,"%ld, %ld # FILE %s LINE %ld\n",
+	    -start_time+(tv.tv_sec*1000)+(tv.tv_usec/1000),
+	    file_bytes[i],file,line);
+    fclose(out);
+
+    out=fopen("total"_VDBG_GRAPHFILE,"a");
+    fprintf(out,"%ld, %ld\n",-start_time+(tv.tv_sec*1000)+(tv.tv_usec/1000),
+	    global_bytes);
+    fprintf(out,"%ld, %ld\n",-start_time+(tv.tv_sec*1000)+(tv.tv_usec/1000),
+	    global_bytes+(bytes-HEAD_ALIGN));
+    fclose(out);
+  }
+#endif
+
+  global_bytes+=(bytes-HEAD_ALIGN);
+
+  return(ptr+HEAD_ALIGN);
+}
+
+static void _ripremove(void *ptr){
+  int insert;
+
+#ifdef _VDBG_GRAPHFILE
+  {
+    FILE *out=fopen("total"_VDBG_GRAPHFILE,"a");
+    struct timeval tv;
+    static struct timezone tz;
+    char buffer[80];
+    char *file =((head *)ptr)->file;
+    long bytes =((head *)ptr)->bytes;
+    int i;
+
+    gettimeofday(&tv,&tz);
+    fprintf(out,"%ld, %ld\n",-start_time+(tv.tv_sec*1000)+(tv.tv_usec/1000),
+	    global_bytes);
+    fprintf(out,"%ld, %ld\n",-start_time+(tv.tv_sec*1000)+(tv.tv_usec/1000),
+	    global_bytes-((head *)ptr)->bytes);
+    fclose(out);
+
+    for(i=0;i<filecount;i++)
+      if(!strcmp(file,files[i]))break;
+
+    snprintf(buffer,80,"%s",file);
+    if(strchr(buffer,'.'))strchr(buffer,'.')[0]=0;
+    strcat(buffer,_VDBG_GRAPHFILE);
+    out=fopen(buffer,"a");
+    fprintf(out,"%ld, %ld\n",-start_time+(tv.tv_sec*1000)+(tv.tv_usec/1000),
+	    file_bytes[i]);
+    fprintf(out,"%ld, %ld\n",-start_time+(tv.tv_sec*1000)+(tv.tv_usec/1000),
+	    file_bytes[i]-bytes);
+    fclose(out);
+
+    file_bytes[i]-=bytes;
+
+  }
+#endif
+
+  global_bytes-=((head *)ptr)->bytes;
+
+  insert=((head *)ptr)->ptr;
+  insertlist[insert]=pinsert;
+  pinsert=insert;
+
+  if(pointers[insert]==NULL){
+    fprintf(stderr,"DEBUGGING MALLOC ERROR: freeing previously freed memory\n");
+    fprintf(stderr,"\t%s %ld\n",((head *)ptr)->file,((head *)ptr)->line);
+  }
+
+  if(global_bytes<0){
+    fprintf(stderr,"DEBUGGING MALLOC ERROR: freeing unmalloced memory\n");
+  }
+
+  pointers[insert]=NULL;
+}
+
+void _VDBG_dump(void){
+  int i;
+  for(i=0;i<ptop;i++){
+    head *ptr=pointers[i];
+    if(ptr)
+      fprintf(stderr,"unfreed bytes from %s:%ld\n",
+	      ptr->file,ptr->line);
+  }
+
+}
+
+extern void *_VDBG_malloc(void *ptr,long bytes,char *file,long line){
+  bytes+=HEAD_ALIGN;
+  if(ptr){
+    ptr-=HEAD_ALIGN;
+    _ripremove(ptr);
+    ptr=realloc(ptr,bytes);
+  }else{
+    ptr=malloc(bytes);
+    memset(ptr,0,bytes);
+  }
+  return _insert(ptr,bytes,file,line);
+}
+
+extern void _VDBG_free(void *ptr,char *file,long line){
+  if(ptr){
+    ptr-=HEAD_ALIGN;
+    _ripremove(ptr);
+    free(ptr);
+  }
+}
+
diff --git a/Tremor/misc.h b/Tremor/misc.h
new file mode 100644
index 0000000..09a210e
--- /dev/null
+++ b/Tremor/misc.h
@@ -0,0 +1,193 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE.   *
+ *                                                                  *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2003    *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************
+
+ function: miscellaneous math and prototypes
+
+ ********************************************************************/
+
+#ifndef _V_RANDOM_H_
+#define _V_RANDOM_H_
+#include <endian.h>
+#include "ivorbiscodec.h"
+#include "os_types.h"
+
+/*#define _VDBG_GRAPHFILE "_0.m"*/
+
+
+#ifdef _VDBG_GRAPHFILE
+extern void *_VDBG_malloc(void *ptr,long bytes,char *file,long line); 
+extern void _VDBG_free(void *ptr,char *file,long line); 
+
+#undef _ogg_malloc
+#undef _ogg_calloc
+#undef _ogg_realloc
+#undef _ogg_free
+
+#define _ogg_malloc(x) _VDBG_malloc(NULL,(x),__FILE__,__LINE__)
+#define _ogg_calloc(x,y) _VDBG_malloc(NULL,(x)*(y),__FILE__,__LINE__)
+#define _ogg_realloc(x,y) _VDBG_malloc((x),(y),__FILE__,__LINE__)
+#define _ogg_free(x) _VDBG_free((x),__FILE__,__LINE__)
+#endif
+
+#include "asm_arm.h"
+  
+#ifndef _V_WIDE_MATH
+#define _V_WIDE_MATH
+  
+#ifndef  _LOW_ACCURACY_
+/* 64 bit multiply */
+
+#include <sys/types.h>
+
+#if BYTE_ORDER==LITTLE_ENDIAN
+union magic {
+  struct {
+    ogg_int32_t lo;
+    ogg_int32_t hi;
+  } halves;
+  ogg_int64_t whole;
+};
+#endif 
+
+#if BYTE_ORDER==BIG_ENDIAN
+union magic {
+  struct {
+    ogg_int32_t hi;
+    ogg_int32_t lo;
+  } halves;
+  ogg_int64_t whole;
+};
+#endif
+
+static inline ogg_int32_t MULT32(ogg_int32_t x, ogg_int32_t y) {
+  union magic magic;
+  magic.whole = (ogg_int64_t)x * y;
+  return magic.halves.hi;
+}
+
+static inline ogg_int32_t MULT31(ogg_int32_t x, ogg_int32_t y) {
+  return MULT32(x,y)<<1;
+}
+
+static inline ogg_int32_t MULT31_SHIFT15(ogg_int32_t x, ogg_int32_t y) {
+  union magic magic;
+  magic.whole  = (ogg_int64_t)x * y;
+  return ((ogg_uint32_t)(magic.halves.lo)>>15) | ((magic.halves.hi)<<17);
+}
+
+#else
+/* 32 bit multiply, more portable but less accurate */
+
+/*
+ * Note: Precision is biased towards the first argument therefore ordering
+ * is important.  Shift values were chosen for the best sound quality after
+ * many listening tests.
+ */
+
+/*
+ * For MULT32 and MULT31: The second argument is always a lookup table
+ * value already preshifted from 31 to 8 bits.  We therefore take the 
+ * opportunity to save on text space and use unsigned char for those
+ * tables in this case.
+ */
+
+static inline ogg_int32_t MULT32(ogg_int32_t x, ogg_int32_t y) {
+  return (x >> 9) * y;  /* y preshifted >>23 */
+}
+
+static inline ogg_int32_t MULT31(ogg_int32_t x, ogg_int32_t y) {
+  return (x >> 8) * y;  /* y preshifted >>23 */
+}
+
+static inline ogg_int32_t MULT31_SHIFT15(ogg_int32_t x, ogg_int32_t y) {
+  return (x >> 6) * y;  /* y preshifted >>9 */
+}
+
+#endif
+
+/*
+ * This should be used as a memory barrier, forcing all cached values in
+ * registers to wr writen back to memory.  Might or might not be beneficial
+ * depending on the architecture and compiler.
+ */
+#define MB()
+
+/*
+ * The XPROD functions are meant to optimize the cross products found all
+ * over the place in mdct.c by forcing memory operation ordering to avoid
+ * unnecessary register reloads as soon as memory is being written to.
+ * However this is only beneficial on CPUs with a sane number of general
+ * purpose registers which exclude the Intel x86.  On Intel, better let the
+ * compiler actually reload registers directly from original memory by using
+ * macros.
+ */
+
+#ifdef __i386__
+
+#define XPROD32(_a, _b, _t, _v, _x, _y)		\
+  { *(_x)=MULT32(_a,_t)+MULT32(_b,_v);		\
+    *(_y)=MULT32(_b,_t)-MULT32(_a,_v); }
+#define XPROD31(_a, _b, _t, _v, _x, _y)		\
+  { *(_x)=MULT31(_a,_t)+MULT31(_b,_v);		\
+    *(_y)=MULT31(_b,_t)-MULT31(_a,_v); }
+#define XNPROD31(_a, _b, _t, _v, _x, _y)	\
+  { *(_x)=MULT31(_a,_t)-MULT31(_b,_v);		\
+    *(_y)=MULT31(_b,_t)+MULT31(_a,_v); }
+
+#else
+
+static inline void XPROD32(ogg_int32_t  a, ogg_int32_t  b,
+			   ogg_int32_t  t, ogg_int32_t  v,
+			   ogg_int32_t *x, ogg_int32_t *y)
+{
+  *x = MULT32(a, t) + MULT32(b, v);
+  *y = MULT32(b, t) - MULT32(a, v);
+}
+
+static inline void XPROD31(ogg_int32_t  a, ogg_int32_t  b,
+			   ogg_int32_t  t, ogg_int32_t  v,
+			   ogg_int32_t *x, ogg_int32_t *y)
+{
+  *x = MULT31(a, t) + MULT31(b, v);
+  *y = MULT31(b, t) - MULT31(a, v);
+}
+
+static inline void XNPROD31(ogg_int32_t  a, ogg_int32_t  b,
+			    ogg_int32_t  t, ogg_int32_t  v,
+			    ogg_int32_t *x, ogg_int32_t *y)
+{
+  *x = MULT31(a, t) - MULT31(b, v);
+  *y = MULT31(b, t) + MULT31(a, v);
+}
+
+#endif
+
+#endif
+
+#ifndef _V_CLIP_MATH
+#define _V_CLIP_MATH
+
+static inline ogg_int32_t CLIP_TO_15(ogg_int32_t x) {
+  int ret=x;
+  ret-= ((x<=32767)-1)&(x-32767);
+  ret-= ((x>=-32768)-1)&(x+32768);
+  return(ret);
+}
+
+#endif
+
+#endif
+
+
+
+
diff --git a/Tremor/ogg.h b/Tremor/ogg.h
new file mode 100644
index 0000000..85cb41b
--- /dev/null
+++ b/Tremor/ogg.h
@@ -0,0 +1,206 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE.   *
+ *                                                                  *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2003    *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************
+
+ function: subsumed libogg includes
+
+ ********************************************************************/
+#ifndef _OGG_H
+#define _OGG_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "os_types.h"
+
+typedef struct ogg_buffer_state{
+  struct ogg_buffer    *unused_buffers;
+  struct ogg_reference *unused_references;
+  int                   outstanding;
+  int                   shutdown;
+} ogg_buffer_state;
+
+typedef struct ogg_buffer {
+  unsigned char      *data;
+  long                size;
+  int                 refcount;
+  
+  union {
+    ogg_buffer_state  *owner;
+    struct ogg_buffer *next;
+  } ptr;
+} ogg_buffer;
+
+typedef struct ogg_reference {
+  ogg_buffer    *buffer;
+  long           begin;
+  long           length;
+
+  struct ogg_reference *next;
+} ogg_reference;
+
+typedef struct oggpack_buffer {
+  int            headbit;
+  unsigned char *headptr;
+  long           headend;
+
+  /* memory management */
+  ogg_reference *head;
+  ogg_reference *tail;
+
+  /* render the byte/bit counter API constant time */
+  long              count; /* doesn't count the tail */
+} oggpack_buffer;
+
+typedef struct oggbyte_buffer {
+  ogg_reference *baseref;
+
+  ogg_reference *ref;
+  unsigned char *ptr;
+  long           pos;
+  long           end;
+} oggbyte_buffer;
+
+typedef struct ogg_sync_state {
+  /* decode memory management pool */
+  ogg_buffer_state *bufferpool;
+
+  /* stream buffers */
+  ogg_reference    *fifo_head;
+  ogg_reference    *fifo_tail;
+  long              fifo_fill;
+
+  /* stream sync management */
+  int               unsynced;
+  int               headerbytes;
+  int               bodybytes;
+
+} ogg_sync_state;
+
+typedef struct ogg_stream_state {
+  ogg_reference *header_head;
+  ogg_reference *header_tail;
+  ogg_reference *body_head;
+  ogg_reference *body_tail;
+
+  int            e_o_s;    /* set when we have buffered the last
+                              packet in the logical bitstream */
+  int            b_o_s;    /* set after we've written the initial page
+                              of a logical bitstream */
+  long           serialno;
+  long           pageno;
+  ogg_int64_t    packetno; /* sequence number for decode; the framing
+                              knows where there's a hole in the data,
+                              but we need coupling so that the codec
+                              (which is in a seperate abstraction
+                              layer) also knows about the gap */
+  ogg_int64_t    granulepos;
+
+  int            lacing_fill;
+  ogg_uint32_t   body_fill;
+
+  /* decode-side state data */
+  int            holeflag;
+  int            spanflag;
+  int            clearflag;
+  int            laceptr;
+  ogg_uint32_t   body_fill_next;
+  
+} ogg_stream_state;
+
+typedef struct {
+  ogg_reference *packet;
+  long           bytes;
+  long           b_o_s;
+  long           e_o_s;
+  ogg_int64_t    granulepos;
+  ogg_int64_t    packetno;     /* sequence number for decode; the framing
+                                  knows where there's a hole in the data,
+                                  but we need coupling so that the codec
+                                  (which is in a seperate abstraction
+                                  layer) also knows about the gap */
+} ogg_packet;
+
+typedef struct {
+  ogg_reference *header;
+  int            header_len;
+  ogg_reference *body;
+  long           body_len;
+} ogg_page;
+
+/* Ogg BITSTREAM PRIMITIVES: bitstream ************************/
+
+extern void  oggpack_readinit(oggpack_buffer *b,ogg_reference *r);
+extern long  oggpack_look(oggpack_buffer *b,int bits);
+extern void  oggpack_adv(oggpack_buffer *b,int bits);
+extern long  oggpack_read(oggpack_buffer *b,int bits);
+extern long  oggpack_bytes(oggpack_buffer *b);
+extern long  oggpack_bits(oggpack_buffer *b);
+extern int   oggpack_eop(oggpack_buffer *b);
+
+/* Ogg BITSTREAM PRIMITIVES: decoding **************************/
+
+extern ogg_sync_state *ogg_sync_create(void);
+extern int      ogg_sync_destroy(ogg_sync_state *oy);
+extern int      ogg_sync_reset(ogg_sync_state *oy);
+
+extern unsigned char *ogg_sync_bufferin(ogg_sync_state *oy, long size);
+extern int      ogg_sync_wrote(ogg_sync_state *oy, long bytes);
+extern long     ogg_sync_pageseek(ogg_sync_state *oy,ogg_page *og);
+extern int      ogg_sync_pageout(ogg_sync_state *oy, ogg_page *og);
+extern int      ogg_stream_pagein(ogg_stream_state *os, ogg_page *og);
+extern int      ogg_stream_packetout(ogg_stream_state *os,ogg_packet *op);
+extern int      ogg_stream_packetpeek(ogg_stream_state *os,ogg_packet *op);
+
+/* Ogg BITSTREAM PRIMITIVES: general ***************************/
+
+extern ogg_stream_state *ogg_stream_create(int serialno);
+extern int      ogg_stream_destroy(ogg_stream_state *os);
+extern int      ogg_stream_reset(ogg_stream_state *os);
+extern int      ogg_stream_reset_serialno(ogg_stream_state *os,int serialno);
+extern int      ogg_stream_eos(ogg_stream_state *os);
+
+extern int      ogg_page_checksum_set(ogg_page *og);
+
+extern int      ogg_page_version(ogg_page *og);
+extern int      ogg_page_continued(ogg_page *og);
+extern int      ogg_page_bos(ogg_page *og);
+extern int      ogg_page_eos(ogg_page *og);
+extern ogg_int64_t  ogg_page_granulepos(ogg_page *og);
+extern ogg_uint32_t ogg_page_serialno(ogg_page *og);
+extern ogg_uint32_t ogg_page_pageno(ogg_page *og);
+extern int      ogg_page_packets(ogg_page *og);
+extern int      ogg_page_getbuffer(ogg_page *og, unsigned char **buffer);
+
+extern int      ogg_packet_release(ogg_packet *op);
+extern int      ogg_page_release(ogg_page *og);
+
+extern void     ogg_page_dup(ogg_page *d, ogg_page *s);
+
+/* Ogg BITSTREAM PRIMITIVES: return codes ***************************/
+
+#define  OGG_SUCCESS   0
+
+#define  OGG_HOLE     -10
+#define  OGG_SPAN     -11
+#define  OGG_EVERSION -12
+#define  OGG_ESERIAL  -13
+#define  OGG_EINVAL   -14
+#define  OGG_EEOS     -15
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* _OGG_H */
diff --git a/Tremor/os.h b/Tremor/os.h
new file mode 100644
index 0000000..65a4992
--- /dev/null
+++ b/Tremor/os.h
@@ -0,0 +1,62 @@
+#ifndef _OS_H
+#define _OS_H
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE.   *
+ *                                                                  *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002    *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************
+
+ function: #ifdef jail to whip a few platforms into the UNIX ideal.
+
+ ********************************************************************/
+
+#include <math.h>
+#include "os_types.h"
+
+#ifndef _V_IFDEFJAIL_H_
+#  define _V_IFDEFJAIL_H_
+
+#  ifdef __GNUC__
+#    define STIN static __inline__
+#  elif _WIN32
+#    define STIN static __inline
+#  endif
+#else
+#  define STIN static
+#endif
+
+#ifndef M_PI
+#  define M_PI (3.1415926536f)
+#endif
+
+#ifdef _WIN32
+#  include <malloc.h>
+#  define rint(x)   (floor((x)+0.5f)) 
+#  define NO_FLOAT_MATH_LIB
+#  define FAST_HYPOT(a, b) sqrt((a)*(a) + (b)*(b))
+#endif
+
+#ifdef HAVE_ALLOCA_H
+#  include <alloca.h>
+#endif
+
+#ifdef USE_MEMORY_H
+#  include <memory.h>
+#endif
+
+#ifndef min
+#  define min(x,y)  ((x)>(y)?(y):(x))
+#endif
+
+#ifndef max
+#  define max(x,y)  ((x)<(y)?(y):(x))
+#endif
+
+#endif /* _OS_H */
diff --git a/Tremor/os_types.h b/Tremor/os_types.h
new file mode 100644
index 0000000..8d444d6
--- /dev/null
+++ b/Tremor/os_types.h
@@ -0,0 +1,93 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE.   *
+ *                                                                  *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002    *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************
+
+ function: #ifdef jail to whip a few platforms into the UNIX ideal.
+
+ ********************************************************************/
+#ifndef _OS_TYPES_H
+#define _OS_TYPES_H
+
+#ifdef _LOW_ACCURACY_
+#  define X(n) (((((n)>>22)+1)>>1) - ((((n)>>22)+1)>>9))
+#  define LOOKUP_T const unsigned char
+#else
+#  define X(n) (n)
+#  define LOOKUP_T const ogg_int32_t
+#endif
+
+/* make it easy on the folks that want to compile the libs with a
+   different malloc than stdlib */
+#define _ogg_malloc  malloc
+#define _ogg_calloc  calloc
+#define _ogg_realloc realloc
+#define _ogg_free    free
+
+#ifdef _WIN32 
+
+#  ifndef __GNUC__
+   /* MSVC/Borland */
+   typedef __int64 ogg_int64_t;
+   typedef __int32 ogg_int32_t;
+   typedef unsigned __int32 ogg_uint32_t;
+   typedef __int16 ogg_int16_t;
+   typedef unsigned __int16 ogg_uint16_t;
+#  else
+   /* Cygwin */
+   #include <_G_config.h>
+   typedef _G_int64_t ogg_int64_t;
+   typedef _G_int32_t ogg_int32_t;
+   typedef _G_uint32_t ogg_uint32_t;
+   typedef _G_int16_t ogg_int16_t;
+   typedef _G_uint16_t ogg_uint16_t;
+#  endif
+
+#elif defined(__MACOS__)
+
+#  include <sys/types.h>
+   typedef SInt16 ogg_int16_t;
+   typedef UInt16 ogg_uint16_t;
+   typedef SInt32 ogg_int32_t;
+   typedef UInt32 ogg_uint32_t;
+   typedef SInt64 ogg_int64_t;
+
+#elif defined(__MACOSX__) /* MacOS X Framework build */
+
+#  include <sys/types.h>
+   typedef int16_t ogg_int16_t;
+   typedef u_int16_t ogg_uint16_t;
+   typedef int32_t ogg_int32_t;
+   typedef u_int32_t ogg_uint32_t;
+   typedef int64_t ogg_int64_t;
+
+#elif defined(__BEOS__)
+
+   /* Be */
+#  include <inttypes.h>
+
+#elif defined (__EMX__)
+
+   /* OS/2 GCC */
+   typedef short ogg_int16_t;
+   typedef unsigned short ogg_uint16_t;
+   typedef int ogg_int32_t;
+   typedef unsigned int ogg_uint32_t;
+   typedef long long ogg_int64_t;
+
+#else
+
+#  include <sys/types.h>
+#  include "config_types.h"
+
+#endif
+
+#endif  /* _OS_TYPES_H */
diff --git a/Tremor/res012.c b/Tremor/res012.c
new file mode 100644
index 0000000..fffda8e
--- /dev/null
+++ b/Tremor/res012.c
@@ -0,0 +1,225 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE.   *
+ *                                                                  *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2003    *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************
+
+ function: residue backend 0, 1 and 2 implementation
+
+ ********************************************************************/
+
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include "ogg.h"
+#include "ivorbiscodec.h"
+#include "codec_internal.h"
+#include "codebook.h"
+#include "misc.h"
+#include "os.h"
+
+void res_clear_info(vorbis_info_residue *info){
+  if(info){
+    if(info->stagemasks)_ogg_free(info->stagemasks);
+    if(info->stagebooks)_ogg_free(info->stagebooks);
+    memset(info,0,sizeof(*info));
+  }
+}
+
+
+/* vorbis_info is for range checking */
+int res_unpack(vorbis_info_residue *info,
+		vorbis_info *vi,oggpack_buffer *opb){
+  int j,k;
+  codec_setup_info     *ci=(codec_setup_info *)vi->codec_setup;
+  memset(info,0,sizeof(*info));
+
+  info->type=oggpack_read(opb,16);
+  if(info->type>2 || info->type<0)goto errout;
+  info->begin=oggpack_read(opb,24);
+  info->end=oggpack_read(opb,24);
+  info->grouping=oggpack_read(opb,24)+1;
+  info->partitions=oggpack_read(opb,6)+1;
+  info->groupbook=oggpack_read(opb,8);
+  if(info->groupbook>=ci->books)goto errout;
+
+  info->stagemasks=_ogg_malloc(info->partitions*sizeof(*info->stagemasks));
+  info->stagebooks=_ogg_malloc(info->partitions*8*sizeof(*info->stagebooks));
+
+  for(j=0;j<info->partitions;j++){
+    int cascade=oggpack_read(opb,3);
+    if(oggpack_read(opb,1))
+      cascade|=(oggpack_read(opb,5)<<3);
+    info->stagemasks[j]=cascade;
+  }
+
+  for(j=0;j<info->partitions;j++){
+    for(k=0;k<8;k++){
+      if((info->stagemasks[j]>>k)&1){
+	unsigned char book=oggpack_read(opb,8);
+	if(book>=ci->books)goto errout;
+	info->stagebooks[j*8+k]=book;
+	if(k+1>info->stages)info->stages=k+1;
+      }else
+	info->stagebooks[j*8+k]=0xff;
+    }
+  }
+
+  if(oggpack_eop(opb))goto errout;
+
+  return 0;
+ errout:
+  res_clear_info(info);
+  return 1;
+}
+
+int res_inverse(vorbis_dsp_state *vd,vorbis_info_residue *info,
+		ogg_int32_t **in,int *nonzero,int ch){
+  
+  int i,j,k,s,used=0;
+  codec_setup_info     *ci=(codec_setup_info *)vd->vi->codec_setup;
+  codebook *phrasebook=ci->book_param+info->groupbook;
+  int samples_per_partition=info->grouping;
+  int partitions_per_word=phrasebook->dim;
+  int pcmend=ci->blocksizes[vd->W];
+
+  if(info->type<2){
+    int max=pcmend>>1;
+    int end=(info->end<max?info->end:max);
+    int n=end-info->begin;
+    
+    if(n>0){
+      int partvals=n/samples_per_partition;
+      int partwords=(partvals+partitions_per_word-1)/partitions_per_word;
+      
+      for(i=0;i<ch;i++)
+	if(nonzero[i])
+	  in[used++]=in[i];
+      ch=used;
+      
+      if(used){
+	
+	char **partword=(char **)alloca(ch*sizeof(*partword));
+	for(j=0;j<ch;j++)
+	  partword[j]=(char *)alloca(partwords*partitions_per_word*
+				     sizeof(*partword[j]));
+	
+	for(s=0;s<info->stages;s++){
+	  
+	  for(i=0;i<partvals;){
+	    if(s==0){
+	      /* fetch the partition word for each channel */
+	      
+	      partword[0][i+partitions_per_word-1]=1;
+	      for(k=partitions_per_word-2;k>=0;k--)
+		partword[0][i+k]=partword[0][i+k+1]*info->partitions;
+	      
+	      for(j=1;j<ch;j++)
+		for(k=partitions_per_word-1;k>=0;k--)
+		  partword[j][i+k]=partword[j-1][i+k];
+	      
+	      for(j=0;j<ch;j++){
+		int temp=vorbis_book_decode(phrasebook,&vd->opb);
+		if(temp==-1)goto eopbreak;
+		
+		/* this can be done quickly in assembly due to the quotient
+		   always being at most six bits */
+		for(k=0;k<partitions_per_word;k++){
+		  ogg_uint32_t div=partword[j][i+k];
+		  partword[j][i+k]=temp/div;
+		  temp-=partword[j][i+k]*div;
+		}
+		
+	      }
+	    }
+	    
+	    /* now we decode residual values for the partitions */
+	    for(k=0;k<partitions_per_word && i<partvals;k++,i++)
+	      for(j=0;j<ch;j++){
+		long offset=info->begin+i*samples_per_partition;
+		if(info->stagemasks[(int)partword[j][i]]&(1<<s)){
+		  codebook *stagebook=ci->book_param+
+		    info->stagebooks[(partword[j][i]<<3)+s];
+		  if(info->type){
+		    if(vorbis_book_decodev_add(stagebook,in[j]+offset,&vd->opb,
+					       samples_per_partition,-8)==-1)
+		      goto eopbreak;
+		  }else{
+		    if(vorbis_book_decodevs_add(stagebook,in[j]+offset,&vd->opb,
+						samples_per_partition,-8)==-1)
+		      goto eopbreak;
+		  }
+		}
+	      }
+	  }
+	} 
+      }
+    }
+  }else{
+    int max=(pcmend*ch)>>1;
+    int end=(info->end<max?info->end:max);
+    int n=end-info->begin;
+    
+    if(n>0){
+      int partvals=n/samples_per_partition;
+      int partwords=(partvals+partitions_per_word-1)/partitions_per_word;
+      
+      char *partword=
+	(char *)alloca(partwords*partitions_per_word*sizeof(*partword));
+      int beginoff=info->begin/ch;
+      
+      for(i=0;i<ch;i++)if(nonzero[i])break;
+      if(i==ch)return(0); /* no nonzero vectors */
+      
+      samples_per_partition/=ch;
+      
+      for(s=0;s<info->stages;s++){
+	for(i=0;i<partvals;){
+	  
+	  if(s==0){
+	    int temp;
+	    partword[i+partitions_per_word-1]=1;
+	    for(k=partitions_per_word-2;k>=0;k--)
+	      partword[i+k]=partword[i+k+1]*info->partitions;
+	    
+	    /* fetch the partition word */
+	    temp=vorbis_book_decode(phrasebook,&vd->opb);
+	    if(temp==-1)goto eopbreak;
+	    
+	    /* this can be done quickly in assembly due to the quotient
+	       always being at most six bits */
+	    for(k=0;k<partitions_per_word;k++){
+	      ogg_uint32_t div=partword[i+k];
+	      partword[i+k]=temp/div;
+	      temp-=partword[i+k]*div;
+	    }
+	  }
+	  
+	  /* now we decode residual values for the partitions */
+	  for(k=0;k<partitions_per_word && i<partvals;k++,i++)
+	    if(info->stagemasks[(int)partword[i]]&(1<<s)){
+	      codebook *stagebook=ci->book_param+
+		info->stagebooks[(partword[i]<<3)+s];
+	      if(vorbis_book_decodevv_add(stagebook,in,
+					  i*samples_per_partition+beginoff,ch,
+					  &vd->opb,
+					  samples_per_partition,-8)==-1)
+		goto eopbreak;
+	    }
+	}
+      } 
+    }
+  }
+ errout:
+ eopbreak:
+  
+  return 0;
+}    
+
diff --git a/Tremor/vorbisfile.c b/Tremor/vorbisfile.c
new file mode 100644
index 0000000..aafc308
--- /dev/null
+++ b/Tremor/vorbisfile.c
@@ -0,0 +1,1589 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE.   *
+ *                                                                  *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2003    *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************
+
+ function: stdio-based convenience library for opening/seeking/decoding
+ last mod: $Id: vorbisfile.c,v 1.6.2.5 2003/11/20 06:16:17 xiphmont Exp $
+
+ ********************************************************************/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <errno.h>
+#include <string.h>
+#include <math.h>
+
+#include "codec_internal.h"
+#include "ivorbisfile.h"
+
+#include "os.h"
+#include "misc.h"
+
+#define  NOTOPEN   0
+#define  PARTOPEN  1
+#define  OPENED    2
+#define  STREAMSET 3 /* serialno and link set, but not to current link */
+#define  LINKSET   4 /* serialno and link set to current link */
+#define  INITSET   5
+
+/* A 'chained bitstream' is a Vorbis bitstream that contains more than
+   one logical bitstream arranged end to end (the only form of Ogg
+   multiplexing allowed in a Vorbis bitstream; grouping [parallel
+   multiplexing] is not allowed in Vorbis) */
+
+/* A Vorbis file can be played beginning to end (streamed) without
+   worrying ahead of time about chaining (see decoder_example.c).  If
+   we have the whole file, however, and want random access
+   (seeking/scrubbing) or desire to know the total length/time of a
+   file, we need to account for the possibility of chaining. */
+
+/* We can handle things a number of ways; we can determine the entire
+   bitstream structure right off the bat, or find pieces on demand.
+   This example determines and caches structure for the entire
+   bitstream, but builds a virtual decoder on the fly when moving
+   between links in the chain. */
+
+/* There are also different ways to implement seeking.  Enough
+   information exists in an Ogg bitstream to seek to
+   sample-granularity positions in the output.  Or, one can seek by
+   picking some portion of the stream roughly in the desired area if
+   we only want coarse navigation through the stream. */
+
+/*************************************************************************
+ * Many, many internal helpers.  The intention is not to be confusing; 
+ * rampant duplication and monolithic function implementation would be 
+ * harder to understand anyway.  The high level functions are last.  Begin
+ * grokking near the end of the file */
+
+
+/* read a little more data from the file/pipe into the ogg_sync framer */
+static long _get_data(OggVorbis_File *vf){
+  errno=0;
+  if(vf->datasource){
+    unsigned char *buffer=ogg_sync_bufferin(vf->oy,CHUNKSIZE);
+    long bytes=(vf->callbacks.read_func)(buffer,1,CHUNKSIZE,vf->datasource);
+    if(bytes>0)ogg_sync_wrote(vf->oy,bytes);
+    if(bytes==0 && errno)return -1;
+    return bytes;
+  }else
+    return 0;
+}
+
+/* save a tiny smidge of verbosity to make the code more readable */
+static void _seek_helper(OggVorbis_File *vf,ogg_int64_t offset){
+  if(vf->datasource){ 
+    (vf->callbacks.seek_func)(vf->datasource, offset, SEEK_SET);
+    vf->offset=offset;
+    ogg_sync_reset(vf->oy);
+  }else{
+    /* shouldn't happen unless someone writes a broken callback */
+    return;
+  }
+}
+
+/* The read/seek functions track absolute position within the stream */
+
+/* from the head of the stream, get the next page.  boundary specifies
+   if the function is allowed to fetch more data from the stream (and
+   how much) or only use internally buffered data.
+
+   boundary: -1) unbounded search
+              0) read no additional data; use cached only
+	      n) search for a new page beginning for n bytes
+
+   return:   <0) did not find a page (OV_FALSE, OV_EOF, OV_EREAD)
+              n) found a page at absolute offset n 
+
+              produces a refcounted page */
+
+static ogg_int64_t _get_next_page(OggVorbis_File *vf,ogg_page *og,
+				  ogg_int64_t boundary){
+  if(boundary>0)boundary+=vf->offset;
+  while(1){
+    long more;
+
+    if(boundary>0 && vf->offset>=boundary)return OV_FALSE;
+    more=ogg_sync_pageseek(vf->oy,og);
+    
+    if(more<0){
+      /* skipped n bytes */
+      vf->offset-=more;
+    }else{
+      if(more==0){
+	/* send more paramedics */
+	if(!boundary)return OV_FALSE;
+	{
+	  long ret=_get_data(vf);
+	  if(ret==0)return OV_EOF;
+	  if(ret<0)return OV_EREAD;
+	}
+      }else{
+	/* got a page.  Return the offset at the page beginning,
+           advance the internal offset past the page end */
+	ogg_int64_t ret=vf->offset;
+	vf->offset+=more;
+	return ret;
+	
+      }
+    }
+  }
+}
+
+/* find the latest page beginning before the current stream cursor
+   position. Much dirtier than the above as Ogg doesn't have any
+   backward search linkage.  no 'readp' as it will certainly have to
+   read. */
+/* returns offset or OV_EREAD, OV_FAULT and produces a refcounted page */
+
+static ogg_int64_t _get_prev_page(OggVorbis_File *vf,ogg_page *og){
+  ogg_int64_t begin=vf->offset;
+  ogg_int64_t end=begin;
+  ogg_int64_t ret;
+  ogg_int64_t offset=-1;
+
+  while(offset==-1){
+    begin-=CHUNKSIZE;
+    if(begin<0)
+      begin=0;
+    _seek_helper(vf,begin);
+    while(vf->offset<end){
+      ret=_get_next_page(vf,og,end-vf->offset);
+      if(ret==OV_EREAD)return OV_EREAD;
+      if(ret<0){
+	break;
+      }else{
+	offset=ret;
+      }
+    }
+  }
+
+  /* we have the offset.  Actually snork and hold the page now */
+  _seek_helper(vf,offset);
+  ret=_get_next_page(vf,og,CHUNKSIZE);
+  if(ret<0)
+    /* this shouldn't be possible */
+    return OV_EFAULT;
+
+  return offset;
+}
+
+/* finds each bitstream link one at a time using a bisection search
+   (has to begin by knowing the offset of the lb's initial page).
+   Recurses for each link so it can alloc the link storage after
+   finding them all, then unroll and fill the cache at the same time */
+static int _bisect_forward_serialno(OggVorbis_File *vf,
+				    ogg_int64_t begin,
+				    ogg_int64_t searched,
+				    ogg_int64_t end,
+				    ogg_uint32_t currentno,
+				    long m){
+  ogg_int64_t endsearched=end;
+  ogg_int64_t next=end;
+  ogg_page og={0,0,0,0};
+  ogg_int64_t ret;
+  
+  /* the below guards against garbage seperating the last and
+     first pages of two links. */
+  while(searched<endsearched){
+    ogg_int64_t bisect;
+    
+    if(endsearched-searched<CHUNKSIZE){
+      bisect=searched;
+    }else{
+      bisect=(searched+endsearched)/2;
+    }
+    
+    _seek_helper(vf,bisect);
+    ret=_get_next_page(vf,&og,-1);
+    if(ret==OV_EREAD)return OV_EREAD;
+    if(ret<0 || ogg_page_serialno(&og)!=currentno){
+      endsearched=bisect;
+      if(ret>=0)next=ret;
+    }else{
+      searched=ret+og.header_len+og.body_len;
+    }
+    ogg_page_release(&og);
+  }
+
+  _seek_helper(vf,next);
+  ret=_get_next_page(vf,&og,-1);
+  if(ret==OV_EREAD)return OV_EREAD;
+  
+  if(searched>=end || ret<0){
+    ogg_page_release(&og);
+    vf->links=m+1;
+    vf->offsets=_ogg_malloc((vf->links+1)*sizeof(*vf->offsets));
+    vf->serialnos=_ogg_malloc(vf->links*sizeof(*vf->serialnos));
+    vf->offsets[m+1]=searched;
+  }else{
+    ret=_bisect_forward_serialno(vf,next,vf->offset,
+				 end,ogg_page_serialno(&og),m+1);
+    ogg_page_release(&og);
+    if(ret==OV_EREAD)return OV_EREAD;
+  }
+  
+  vf->offsets[m]=begin;
+  vf->serialnos[m]=currentno;
+  return 0;
+}
+
+static int _decode_clear(OggVorbis_File *vf){
+  if(vf->ready_state==INITSET){
+    vorbis_dsp_destroy(vf->vd);
+    vf->vd=0;
+    vf->ready_state=STREAMSET;
+  }
+  
+  if(vf->ready_state>=STREAMSET){
+    vorbis_info_clear(&vf->vi);
+    vorbis_comment_clear(&vf->vc);
+    vf->ready_state=OPENED;
+  }
+  return 0;
+}
+
+/* uses the local ogg_stream storage in vf; this is important for
+   non-streaming input sources */
+/* consumes the page that's passed in (if any) */
+/* state is LINKSET upon successful return */
+
+static int _fetch_headers(OggVorbis_File *vf,
+			  vorbis_info *vi,
+			  vorbis_comment *vc,
+			  ogg_uint32_t *serialno,
+			  ogg_page *og_ptr){
+  ogg_page og={0,0,0,0};
+  ogg_packet op={0,0,0,0,0,0};
+  int i,ret;
+  
+  if(vf->ready_state>OPENED)_decode_clear(vf);
+
+  if(!og_ptr){
+    ogg_int64_t llret=_get_next_page(vf,&og,CHUNKSIZE);
+    if(llret==OV_EREAD)return OV_EREAD;
+    if(llret<0)return OV_ENOTVORBIS;
+    og_ptr=&og;
+  }
+
+  ogg_stream_reset_serialno(vf->os,ogg_page_serialno(og_ptr));
+  if(serialno)*serialno=vf->os->serialno;
+  
+  /* extract the initial header from the first page and verify that the
+     Ogg bitstream is in fact Vorbis data */
+  
+  vorbis_info_init(vi);
+  vorbis_comment_init(vc);
+  
+  i=0;
+  while(i<3){
+    ogg_stream_pagein(vf->os,og_ptr);
+    while(i<3){
+      int result=ogg_stream_packetout(vf->os,&op);
+      if(result==0)break;
+      if(result==-1){
+	ret=OV_EBADHEADER;
+	goto bail_header;
+      }
+      if((ret=vorbis_dsp_headerin(vi,vc,&op))){
+	goto bail_header;
+      }
+      i++;
+    }
+    if(i<3)
+      if(_get_next_page(vf,og_ptr,CHUNKSIZE)<0){
+	ret=OV_EBADHEADER;
+	goto bail_header;
+      }
+  }
+
+  ogg_packet_release(&op);
+  ogg_page_release(&og);
+  vf->ready_state=LINKSET;
+  return 0; 
+
+ bail_header:
+  ogg_packet_release(&op);
+  ogg_page_release(&og);
+  vorbis_info_clear(vi);
+  vorbis_comment_clear(vc);
+  vf->ready_state=OPENED;
+
+  return ret;
+}
+
+/* we no longer preload all vorbis_info (and the associated
+   codec_setup) structs.  Call this to seek and fetch the info from
+   the bitstream, if needed */
+static int _set_link_number(OggVorbis_File *vf,int link){
+  if(link != vf->current_link) _decode_clear(vf);
+  if(vf->ready_state<STREAMSET){
+    _seek_helper(vf,vf->offsets[link]);
+    ogg_stream_reset_serialno(vf->os,vf->serialnos[link]);
+    vf->current_serialno=vf->serialnos[link];
+    vf->current_link=link;
+    return _fetch_headers(vf,&vf->vi,&vf->vc,&vf->current_serialno,NULL);
+  }
+  return 0;
+}
+
+static int _set_link_number_preserve_pos(OggVorbis_File *vf,int link){
+  ogg_int64_t pos=vf->offset;
+  int ret=_set_link_number(vf,link);
+  if(ret)return ret;
+  _seek_helper(vf,pos);
+  if(pos<vf->offsets[link] || pos>=vf->offsets[link+1])
+    vf->ready_state=STREAMSET;
+  return 0;
+}
+
+/* last step of the OggVorbis_File initialization; get all the offset
+   positions.  Only called by the seekable initialization (local
+   stream storage is hacked slightly; pay attention to how that's
+   done) */
+
+/* this is void and does not propogate errors up because we want to be
+   able to open and use damaged bitstreams as well as we can.  Just
+   watch out for missing information for links in the OggVorbis_File
+   struct */
+static void _prefetch_all_offsets(OggVorbis_File *vf, ogg_int64_t dataoffset){
+  ogg_page og={0,0,0,0};
+  int i;
+  ogg_int64_t ret;
+  
+  vf->dataoffsets=_ogg_malloc(vf->links*sizeof(*vf->dataoffsets));
+  vf->pcmlengths=_ogg_malloc(vf->links*2*sizeof(*vf->pcmlengths));
+  
+  for(i=0;i<vf->links;i++){
+    if(i==0){
+      /* we already grabbed the initial header earlier.  Just set the offset */
+      vf->dataoffsets[i]=dataoffset;
+      _seek_helper(vf,dataoffset);
+
+    }else{
+
+      /* seek to the location of the initial header */
+
+      _seek_helper(vf,vf->offsets[i]);
+      if(_fetch_headers(vf,&vf->vi,&vf->vc,NULL,NULL)<0){
+    	vf->dataoffsets[i]=-1;
+      }else{
+	vf->dataoffsets[i]=vf->offset;
+      }
+    }
+
+    /* fetch beginning PCM offset */
+
+    if(vf->dataoffsets[i]!=-1){
+      ogg_int64_t accumulated=0,pos;
+      long        lastblock=-1;
+      int         result;
+
+      ogg_stream_reset_serialno(vf->os,vf->serialnos[i]);
+
+      while(1){
+	ogg_packet op={0,0,0,0,0,0};
+
+	ret=_get_next_page(vf,&og,-1);
+	if(ret<0)
+	  /* this should not be possible unless the file is
+             truncated/mangled */
+	  break;
+       
+	if(ogg_page_serialno(&og)!=vf->serialnos[i])
+	  break;
+	
+	pos=ogg_page_granulepos(&og);
+
+	/* count blocksizes of all frames in the page */
+	ogg_stream_pagein(vf->os,&og);
+	while((result=ogg_stream_packetout(vf->os,&op))){
+	  if(result>0){ /* ignore holes */
+	    long thisblock=vorbis_packet_blocksize(&vf->vi,&op);
+	    if(lastblock!=-1)
+	      accumulated+=(lastblock+thisblock)>>2;
+	    lastblock=thisblock;
+	  }
+	}
+	ogg_packet_release(&op);
+
+	if(pos!=-1){
+	  /* pcm offset of last packet on the first audio page */
+	  accumulated= pos-accumulated;
+	  break;
+	}
+      }
+
+      /* less than zero?  This is a stream with samples trimmed off
+         the beginning, a normal occurrence; set the offset to zero */
+      if(accumulated<0)accumulated=0;
+
+      vf->pcmlengths[i*2]=accumulated;
+    }
+
+    /* get the PCM length of this link. To do this,
+       get the last page of the stream */
+    {
+      ogg_int64_t end=vf->offsets[i+1];
+      _seek_helper(vf,end);
+
+      while(1){
+	ret=_get_prev_page(vf,&og);
+	if(ret<0){
+	  /* this should not be possible */
+	  vorbis_info_clear(&vf->vi);
+	  vorbis_comment_clear(&vf->vc);
+	  break;
+	}
+	if(ogg_page_granulepos(&og)!=-1){
+	  vf->pcmlengths[i*2+1]=ogg_page_granulepos(&og)-vf->pcmlengths[i*2];
+	  break;
+	}
+	vf->offset=ret;
+      }
+    }
+  }
+  ogg_page_release(&og);
+}
+
+static int _make_decode_ready(OggVorbis_File *vf){
+  int i;
+  switch(vf->ready_state){
+  case OPENED:
+  case STREAMSET:
+    for(i=0;i<vf->links;i++)
+      if(vf->offsets[i+1]>=vf->offset)break;
+    if(i==vf->links)return -1;
+    i=_set_link_number_preserve_pos(vf,i);
+    if(i)return i;
+    /* fall through */
+  case LINKSET:
+    vf->vd=vorbis_dsp_create(&vf->vi);
+    vf->ready_state=INITSET;
+    vf->bittrack=0;
+    vf->samptrack=0;
+  case INITSET:
+    return 0;
+  default:
+    return -1;
+  }
+  
+}
+
+static int _open_seekable2(OggVorbis_File *vf){
+  ogg_uint32_t serialno=vf->current_serialno;
+  ogg_uint32_t tempserialno;
+  ogg_int64_t dataoffset=vf->offset, end;
+  ogg_page og={0,0,0,0};
+
+  /* we're partially open and have a first link header state in
+     storage in vf */
+  /* we can seek, so set out learning all about this file */
+  (vf->callbacks.seek_func)(vf->datasource,0,SEEK_END);
+  vf->offset=vf->end=(vf->callbacks.tell_func)(vf->datasource);
+  
+  /* We get the offset for the last page of the physical bitstream.
+     Most OggVorbis files will contain a single logical bitstream */
+  end=_get_prev_page(vf,&og);
+  if(end<0)return end;
+
+  /* more than one logical bitstream? */
+  tempserialno=ogg_page_serialno(&og);
+  ogg_page_release(&og);
+
+  if(tempserialno!=serialno){
+
+    /* Chained bitstream. Bisect-search each logical bitstream
+       section.  Do so based on serial number only */
+    if(_bisect_forward_serialno(vf,0,0,end+1,serialno,0)<0)return OV_EREAD;
+
+  }else{
+
+    /* Only one logical bitstream */
+    if(_bisect_forward_serialno(vf,0,end,end+1,serialno,0))return OV_EREAD;
+
+  }
+
+  /* the initial header memory is referenced by vf after; don't free it */
+  _prefetch_all_offsets(vf,dataoffset);
+  return ov_raw_seek(vf,0);
+}
+
+/* fetch and process a packet.  Handles the case where we're at a
+   bitstream boundary and dumps the decoding machine.  If the decoding
+   machine is unloaded, it loads it.  It also keeps pcm_offset up to
+   date (seek and read both use this.  seek uses a special hack with
+   readp). 
+
+   return: <0) error, OV_HOLE (lost packet) or OV_EOF
+            0) need more data (only if readp==0)
+	    1) got a packet 
+*/
+
+static int _fetch_and_process_packet(OggVorbis_File *vf,
+				     int readp,
+				     int spanp){
+  ogg_page og={0,0,0,0};
+  ogg_packet op={0,0,0,0,0,0};
+  int ret=0;
+
+  /* handle one packet.  Try to fetch it from current stream state */
+  /* extract packets from page */
+  while(1){
+    
+    /* process a packet if we can.  If the machine isn't loaded,
+       neither is a page */
+    if(vf->ready_state==INITSET){
+      while(1) {
+	int result=ogg_stream_packetout(vf->os,&op);
+	ogg_int64_t granulepos;
+
+	if(result<0){
+	  ret=OV_HOLE; /* hole in the data. */
+	  goto cleanup;
+	}
+	if(result>0){
+	  /* got a packet.  process it */
+	  granulepos=op.granulepos;
+	  if(!vorbis_dsp_synthesis(vf->vd,&op,1)){ /* lazy check for lazy
+						      header handling.  The
+						      header packets aren't
+						      audio, so if/when we
+						      submit them,
+						      vorbis_synthesis will
+						      reject them */
+	    
+	    vf->samptrack+=vorbis_dsp_pcmout(vf->vd,NULL,0);
+	    vf->bittrack+=op.bytes*8;
+	  
+	    /* update the pcm offset. */
+	    if(granulepos!=-1 && !op.e_o_s){
+	      int link=(vf->seekable?vf->current_link:0);
+	      int i,samples;
+	    
+	      /* this packet has a pcm_offset on it (the last packet
+	         completed on a page carries the offset) After processing
+	         (above), we know the pcm position of the *last* sample
+	         ready to be returned. Find the offset of the *first*
+
+	         As an aside, this trick is inaccurate if we begin
+	         reading anew right at the last page; the end-of-stream
+	         granulepos declares the last frame in the stream, and the
+	         last packet of the last page may be a partial frame.
+	         So, we need a previous granulepos from an in-sequence page
+	         to have a reference point.  Thus the !op.e_o_s clause
+	         above */
+
+	      if(vf->seekable && link>0)
+		granulepos-=vf->pcmlengths[link*2];
+	      if(granulepos<0)granulepos=0; /* actually, this
+					       shouldn't be possible
+					       here unless the stream
+					       is very broken */
+
+	      samples=vorbis_dsp_pcmout(vf->vd,NULL,0);
+	    
+	      granulepos-=samples;
+	      for(i=0;i<link;i++)
+	        granulepos+=vf->pcmlengths[i*2+1];
+	      vf->pcm_offset=granulepos;
+	    }
+	    ret=1;
+	    goto cleanup;
+	  }
+	}
+	else 
+	  break;
+      }
+    }
+
+    if(vf->ready_state>=OPENED){
+      int ret;
+      if(!readp){
+	ret=0;
+	goto cleanup;
+      }
+      if((ret=_get_next_page(vf,&og,-1))<0){
+	ret=OV_EOF; /* eof. leave unitialized */
+	goto cleanup;
+      }
+
+	/* bitrate tracking; add the header's bytes here, the body bytes
+	   are done by packet above */
+      vf->bittrack+=og.header_len*8;
+      
+      /* has our decoding just traversed a bitstream boundary? */
+      if(vf->ready_state==INITSET){
+	if(vf->current_serialno!=ogg_page_serialno(&og)){
+	  if(!spanp){
+	    ret=OV_EOF;
+	    goto cleanup;
+	  }
+
+	  _decode_clear(vf);
+	}
+      }
+    }
+
+    /* Do we need to load a new machine before submitting the page? */
+    /* This is different in the seekable and non-seekable cases.  
+
+       In the seekable case, we already have all the header
+       information loaded and cached; we just initialize the machine
+       with it and continue on our merry way.
+
+       In the non-seekable (streaming) case, we'll only be at a
+       boundary if we just left the previous logical bitstream and
+       we're now nominally at the header of the next bitstream
+    */
+
+    if(vf->ready_state!=INITSET){ 
+      int link,ret;
+
+      if(vf->ready_state<STREAMSET){
+	if(vf->seekable){
+	  vf->current_serialno=ogg_page_serialno(&og);
+	  
+	  /* match the serialno to bitstream section.  We use this rather than
+	     offset positions to avoid problems near logical bitstream
+	     boundaries */
+	  for(link=0;link<vf->links;link++)
+	    if(vf->serialnos[link]==vf->current_serialno)break;
+	  if(link==vf->links){
+	    ret=OV_EBADLINK; /* sign of a bogus stream.  error out,
+				leave machine uninitialized */
+	    goto cleanup;
+	  }
+
+	  vf->current_link=link;
+	  ret=_fetch_headers(vf,&vf->vi,&vf->vc,&vf->current_serialno,&og);
+	  if(ret) goto cleanup;
+	  
+	}else{
+	  /* we're streaming */
+	  /* fetch the three header packets, build the info struct */
+	  
+	  int ret=_fetch_headers(vf,&vf->vi,&vf->vc,&vf->current_serialno,&og);
+	  if(ret) goto cleanup;
+	  vf->current_link++;
+	}
+      }
+      
+      if(_make_decode_ready(vf)) return OV_EBADLINK;
+    }
+    ogg_stream_pagein(vf->os,&og);
+  }
+ cleanup:
+  ogg_packet_release(&op);
+  ogg_page_release(&og);
+  return ret;
+}
+
+/* if, eg, 64 bit stdio is configured by default, this will build with
+   fseek64 */
+static int _fseek64_wrap(FILE *f,ogg_int64_t off,int whence){
+  if(f==NULL)return -1;
+  return fseek(f,off,whence);
+}
+
+static int _ov_open1(void *f,OggVorbis_File *vf,char *initial,
+		     long ibytes, ov_callbacks callbacks){
+  int offsettest=(f?callbacks.seek_func(f,0,SEEK_CUR):-1);
+  int ret;
+
+  memset(vf,0,sizeof(*vf));
+
+  /* Tremor assumes in multiple places that right shift of a signed
+     integer is an arithmetic shift */
+  if( (-1>>1) != -1) return OV_EIMPL;
+
+  vf->datasource=f;
+  vf->callbacks = callbacks;
+
+  /* init the framing state */
+  vf->oy=ogg_sync_create();
+
+  /* perhaps some data was previously read into a buffer for testing
+     against other stream types.  Allow initialization from this
+     previously read data (as we may be reading from a non-seekable
+     stream) */
+  if(initial){
+    unsigned char *buffer=ogg_sync_bufferin(vf->oy,ibytes);
+    memcpy(buffer,initial,ibytes);
+    ogg_sync_wrote(vf->oy,ibytes);
+  }
+
+  /* can we seek? Stevens suggests the seek test was portable */
+  if(offsettest!=-1)vf->seekable=1;
+
+  /* No seeking yet; Set up a 'single' (current) logical bitstream
+     entry for partial open */
+  vf->links=1;
+  vf->os=ogg_stream_create(-1); /* fill in the serialno later */
+
+  /* Try to fetch the headers, maintaining all the storage */
+  if((ret=_fetch_headers(vf,&vf->vi,&vf->vc,&vf->current_serialno,NULL))<0){
+    vf->datasource=NULL;
+    ov_clear(vf);
+  }else if(vf->ready_state < PARTOPEN)
+    vf->ready_state=PARTOPEN;
+  return ret;
+}
+
+static int _ov_open2(OggVorbis_File *vf){
+  if(vf->ready_state < OPENED)
+    vf->ready_state=OPENED;
+  if(vf->seekable){
+    int ret=_open_seekable2(vf);
+    if(ret){
+      vf->datasource=NULL;
+      ov_clear(vf);
+    }
+    return ret;
+  }
+  return 0;
+}
+
+
+/* clear out the OggVorbis_File struct */
+int ov_clear(OggVorbis_File *vf){
+  if(vf){
+    vorbis_dsp_destroy(vf->vd);
+    vf->vd=0;
+    ogg_stream_destroy(vf->os);
+    vorbis_info_clear(&vf->vi);
+    vorbis_comment_clear(&vf->vc);
+    if(vf->dataoffsets)_ogg_free(vf->dataoffsets);
+    if(vf->pcmlengths)_ogg_free(vf->pcmlengths);
+    if(vf->serialnos)_ogg_free(vf->serialnos);
+    if(vf->offsets)_ogg_free(vf->offsets);
+    ogg_sync_destroy(vf->oy);
+
+    if(vf->datasource)(vf->callbacks.close_func)(vf->datasource);
+    memset(vf,0,sizeof(*vf));
+  }
+#ifdef DEBUG_LEAKS
+  _VDBG_dump();
+#endif
+  return 0;
+}
+
+/* inspects the OggVorbis file and finds/documents all the logical
+   bitstreams contained in it.  Tries to be tolerant of logical
+   bitstream sections that are truncated/woogie. 
+
+   return: -1) error
+            0) OK
+*/
+
+int ov_open_callbacks(void *f,OggVorbis_File *vf,char *initial,long ibytes,
+    ov_callbacks callbacks){
+  int ret=_ov_open1(f,vf,initial,ibytes,callbacks);
+  if(ret)return ret;
+  return _ov_open2(vf);
+}
+
+int ov_open(FILE *f,OggVorbis_File *vf,char *initial,long ibytes){
+  ov_callbacks callbacks = {
+    (size_t (*)(void *, size_t, size_t, void *))  fread,
+    (int (*)(void *, ogg_int64_t, int))              _fseek64_wrap,
+    (int (*)(void *))                             fclose,
+    (long (*)(void *))                            ftell
+  };
+
+  return ov_open_callbacks((void *)f, vf, initial, ibytes, callbacks);
+}
+  
+/* Only partially open the vorbis file; test for Vorbisness, and load
+   the headers for the first chain.  Do not seek (although test for
+   seekability).  Use ov_test_open to finish opening the file, else
+   ov_clear to close/free it. Same return codes as open. */
+
+int ov_test_callbacks(void *f,OggVorbis_File *vf,char *initial,long ibytes,
+    ov_callbacks callbacks)
+{
+  return _ov_open1(f,vf,initial,ibytes,callbacks);
+}
+
+int ov_test(FILE *f,OggVorbis_File *vf,char *initial,long ibytes){
+  ov_callbacks callbacks = {
+    (size_t (*)(void *, size_t, size_t, void *))  fread,
+    (int (*)(void *, ogg_int64_t, int))              _fseek64_wrap,
+    (int (*)(void *))                             fclose,
+    (long (*)(void *))                            ftell
+  };
+
+  return ov_test_callbacks((void *)f, vf, initial, ibytes, callbacks);
+}
+  
+int ov_test_open(OggVorbis_File *vf){
+  if(vf->ready_state!=PARTOPEN)return OV_EINVAL;
+  return _ov_open2(vf);
+}
+
+/* How many logical bitstreams in this physical bitstream? */
+long ov_streams(OggVorbis_File *vf){
+  return vf->links;
+}
+
+/* Is the FILE * associated with vf seekable? */
+long ov_seekable(OggVorbis_File *vf){
+  return vf->seekable;
+}
+
+/* returns the bitrate for a given logical bitstream or the entire
+   physical bitstream.  If the file is open for random access, it will
+   find the *actual* average bitrate.  If the file is streaming, it
+   returns the nominal bitrate (if set) else the average of the
+   upper/lower bounds (if set) else -1 (unset).
+
+   If you want the actual bitrate field settings, get them from the
+   vorbis_info structs */
+
+long ov_bitrate(OggVorbis_File *vf,int i){
+  if(vf->ready_state<OPENED)return OV_EINVAL;
+  if(i>=vf->links)return OV_EINVAL;
+  if(!vf->seekable && i!=0)return ov_bitrate(vf,0);
+  if(i<0){
+    ogg_int64_t bits=0;
+    int i;
+    for(i=0;i<vf->links;i++)
+      bits+=(vf->offsets[i+1]-vf->dataoffsets[i])*8;
+    /* This once read: return(rint(bits/ov_time_total(vf,-1)));
+     * gcc 3.x on x86 miscompiled this at optimisation level 2 and above,
+     * so this is slightly transformed to make it work.
+     */
+    return bits*1000/ov_time_total(vf,-1);
+  }else{
+    if(vf->seekable){
+      /* return the actual bitrate */
+      return (vf->offsets[i+1]-vf->dataoffsets[i])*8000/ov_time_total(vf,i);
+    }else{
+      /* return nominal if set */
+      if(vf->vi.bitrate_nominal>0){
+	return vf->vi.bitrate_nominal;
+      }else{
+	if(vf->vi.bitrate_upper>0){
+	  if(vf->vi.bitrate_lower>0){
+	    return (vf->vi.bitrate_upper+vf->vi.bitrate_lower)/2;
+	  }else{
+	    return vf->vi.bitrate_upper;
+	  }
+	}
+	return OV_FALSE;
+      }
+    }
+  }
+}
+
+/* returns the actual bitrate since last call.  returns -1 if no
+   additional data to offer since last call (or at beginning of stream),
+   EINVAL if stream is only partially open 
+*/
+long ov_bitrate_instant(OggVorbis_File *vf){
+  long ret;
+  if(vf->ready_state<OPENED)return OV_EINVAL;
+  if(vf->samptrack==0)return OV_FALSE;
+  ret=vf->bittrack/vf->samptrack*vf->vi.rate;
+  vf->bittrack=0;
+  vf->samptrack=0;
+  return ret;
+}
+
+/* Guess */
+long ov_serialnumber(OggVorbis_File *vf,int i){
+  if(i>=vf->links)return ov_serialnumber(vf,vf->links-1);
+  if(!vf->seekable && i>=0)return ov_serialnumber(vf,-1);
+  if(i<0){
+    return vf->current_serialno;
+  }else{
+    return vf->serialnos[i];
+  }
+}
+
+/* returns: total raw (compressed) length of content if i==-1
+            raw (compressed) length of that logical bitstream for i==0 to n
+	    OV_EINVAL if the stream is not seekable (we can't know the length)
+	    or if stream is only partially open
+*/
+ogg_int64_t ov_raw_total(OggVorbis_File *vf,int i){
+  if(vf->ready_state<OPENED)return OV_EINVAL;
+  if(!vf->seekable || i>=vf->links)return OV_EINVAL;
+  if(i<0){
+    ogg_int64_t acc=0;
+    int i;
+    for(i=0;i<vf->links;i++)
+      acc+=ov_raw_total(vf,i);
+    return acc;
+  }else{
+    return vf->offsets[i+1]-vf->offsets[i];
+  }
+}
+
+/* returns: total PCM length (samples) of content if i==-1 PCM length
+	    (samples) of that logical bitstream for i==0 to n
+	    OV_EINVAL if the stream is not seekable (we can't know the
+	    length) or only partially open 
+*/
+ogg_int64_t ov_pcm_total(OggVorbis_File *vf,int i){
+  if(vf->ready_state<OPENED)return OV_EINVAL;
+  if(!vf->seekable || i>=vf->links)return OV_EINVAL;
+  if(i<0){
+    ogg_int64_t acc=0;
+    int i;
+    for(i=0;i<vf->links;i++)
+      acc+=ov_pcm_total(vf,i);
+    return acc;
+  }else{
+    return vf->pcmlengths[i*2+1];
+  }
+}
+
+/* returns: total milliseconds of content if i==-1
+            milliseconds in that logical bitstream for i==0 to n
+	    OV_EINVAL if the stream is not seekable (we can't know the
+	    length) or only partially open 
+*/
+ogg_int64_t ov_time_total(OggVorbis_File *vf,int i){
+  if(vf->ready_state<OPENED)return OV_EINVAL;
+  if(!vf->seekable || i>=vf->links)return OV_EINVAL;
+  if(i<0){
+    ogg_int64_t acc=0;
+    int i;
+    for(i=0;i<vf->links;i++)
+      acc+=ov_time_total(vf,i);
+    return acc;
+  }else{
+    return ((ogg_int64_t)vf->pcmlengths[i*2+1])*1000/vf->vi.rate;
+  }
+}
+
+/* seek to an offset relative to the *compressed* data. This also
+   scans packets to update the PCM cursor. It will cross a logical
+   bitstream boundary, but only if it can't get any packets out of the
+   tail of the bitstream we seek to (so no surprises).
+
+   returns zero on success, nonzero on failure */
+
+int ov_raw_seek(OggVorbis_File *vf,ogg_int64_t pos){
+  ogg_stream_state *work_os=NULL;
+  ogg_page og={0,0,0,0};
+  ogg_packet op={0,0,0,0,0,0};
+  
+  if(vf->ready_state<OPENED)return OV_EINVAL;
+  if(!vf->seekable)
+    return OV_ENOSEEK; /* don't dump machine if we can't seek */
+
+  if(pos<0 || pos>vf->end)return OV_EINVAL;
+
+  /* don't yet clear out decoding machine (if it's initialized), in
+     the case we're in the same link.  Restart the decode lapping, and
+     let _fetch_and_process_packet deal with a potential bitstream
+     boundary */
+  vf->pcm_offset=-1;
+  ogg_stream_reset_serialno(vf->os,
+			    vf->current_serialno); /* must set serialno */
+  vorbis_dsp_restart(vf->vd);
+    
+  _seek_helper(vf,pos);
+
+  /* we need to make sure the pcm_offset is set, but we don't want to
+     advance the raw cursor past good packets just to get to the first
+     with a granulepos.  That's not equivalent behavior to beginning
+     decoding as immediately after the seek position as possible.
+
+     So, a hack.  We use two stream states; a local scratch state and
+     the shared vf->os stream state.  We use the local state to
+     scan, and the shared state as a buffer for later decode. 
+
+     Unfortuantely, on the last page we still advance to last packet
+     because the granulepos on the last page is not necessarily on a
+     packet boundary, and we need to make sure the granpos is
+     correct. 
+  */
+
+  {
+    int lastblock=0;
+    int accblock=0;
+    int thisblock;
+    int eosflag;
+
+    work_os=ogg_stream_create(vf->current_serialno); /* get the memory ready */
+    while(1){
+      if(vf->ready_state>=STREAMSET){
+	/* snarf/scan a packet if we can */
+	int result=ogg_stream_packetout(work_os,&op);
+      
+	if(result>0){
+
+	  if(vf->vi.codec_setup){
+	    thisblock=vorbis_packet_blocksize(&vf->vi,&op);
+	    if(thisblock<0){
+	      ogg_stream_packetout(vf->os,NULL);
+	      thisblock=0;
+	    }else{
+	      
+	      if(eosflag)
+		ogg_stream_packetout(vf->os,NULL);
+	      else
+		if(lastblock)accblock+=(lastblock+thisblock)>>2;
+	    }	    
+
+	    if(op.granulepos!=-1){
+	      int i,link=vf->current_link;
+	      ogg_int64_t granulepos=op.granulepos-vf->pcmlengths[link*2];
+	      if(granulepos<0)granulepos=0;
+	      
+	      for(i=0;i<link;i++)
+		granulepos+=vf->pcmlengths[i*2+1];
+	      vf->pcm_offset=granulepos-accblock;
+	      break;
+	    }
+	    lastblock=thisblock;
+	    continue;
+	  }else
+	    ogg_stream_packetout(vf->os,NULL);
+	}
+      }
+      
+      if(!lastblock){
+	if(_get_next_page(vf,&og,-1)<0){
+	  vf->pcm_offset=ov_pcm_total(vf,-1);
+	  break;
+	}
+      }else{
+	/* huh?  Bogus stream with packets but no granulepos */
+	vf->pcm_offset=-1;
+	break;
+      }
+      
+      /* did we just grab a page from other than current link? */
+      if(vf->ready_state>=STREAMSET)
+	if(vf->current_serialno!=ogg_page_serialno(&og)){
+	  _decode_clear(vf); /* clear out stream state */
+	  ogg_stream_destroy(work_os);
+	}
+
+      if(vf->ready_state<STREAMSET){
+	int link;
+	
+	vf->current_serialno=ogg_page_serialno(&og);
+	for(link=0;link<vf->links;link++)
+	  if(vf->serialnos[link]==vf->current_serialno)break;
+	if(link==vf->links)
+	  goto seek_error; /* sign of a bogus stream.  error out,
+			      leave machine uninitialized */
+ 
+	/* need to initialize machine to this link */
+	{
+	  int ret=_set_link_number_preserve_pos(vf,link);
+	  if(ret) goto seek_error;
+	}
+	ogg_stream_reset_serialno(vf->os,vf->current_serialno);
+	ogg_stream_reset_serialno(work_os,vf->current_serialno); 
+	
+	
+      }
+    
+      {
+	ogg_page dup;
+	ogg_page_dup(&dup,&og);
+	eosflag=ogg_page_eos(&og);
+	ogg_stream_pagein(vf->os,&og);
+	ogg_stream_pagein(work_os,&dup);
+      }
+    }
+  }
+
+  ogg_packet_release(&op);
+  ogg_page_release(&og);
+  ogg_stream_destroy(work_os);
+  vf->bittrack=0;
+  vf->samptrack=0;
+  return 0;
+
+ seek_error:
+  ogg_packet_release(&op);
+  ogg_page_release(&og);
+
+  /* dump the machine so we're in a known state */
+  vf->pcm_offset=-1;
+  ogg_stream_destroy(work_os);
+  _decode_clear(vf);
+  return OV_EBADLINK;
+}
+
+/* Page granularity seek (faster than sample granularity because we
+   don't do the last bit of decode to find a specific sample).
+
+   Seek to the last [granule marked] page preceeding the specified pos
+   location, such that decoding past the returned point will quickly
+   arrive at the requested position. */
+int ov_pcm_seek_page(OggVorbis_File *vf,ogg_int64_t pos){
+  int link=-1;
+  ogg_int64_t result=0;
+  ogg_int64_t total=ov_pcm_total(vf,-1);
+  ogg_page og={0,0,0,0};
+  ogg_packet op={0,0,0,0,0,0};
+
+  if(vf->ready_state<OPENED)return OV_EINVAL;
+  if(!vf->seekable)return OV_ENOSEEK;
+  if(pos<0 || pos>total)return OV_EINVAL;
+ 
+  /* which bitstream section does this pcm offset occur in? */
+  for(link=vf->links-1;link>=0;link--){
+    total-=vf->pcmlengths[link*2+1];
+    if(pos>=total)break;
+  }
+
+
+  if(link!=vf->current_link){
+    int ret=_set_link_number(vf,link);
+    if(ret) goto seek_error;
+  }else{
+    vorbis_dsp_restart(vf->vd);
+  }
+
+  ogg_stream_reset_serialno(vf->os,vf->serialnos[link]);
+
+  /* search within the logical bitstream for the page with the highest
+     pcm_pos preceeding (or equal to) pos.  There is a danger here;
+     missing pages or incorrect frame number information in the
+     bitstream could make our task impossible.  Account for that (it
+     would be an error condition) */
+
+  /* new search algorithm by HB (Nicholas Vinen) */
+  {
+    ogg_int64_t end=vf->offsets[link+1];
+    ogg_int64_t begin=vf->offsets[link];
+    ogg_int64_t begintime = vf->pcmlengths[link*2];
+    ogg_int64_t endtime = vf->pcmlengths[link*2+1]+begintime;
+    ogg_int64_t target=pos-total+begintime;
+    ogg_int64_t best=begin;
+    
+    while(begin<end){
+      ogg_int64_t bisect;
+      
+      if(end-begin<CHUNKSIZE){
+	bisect=begin;
+      }else{
+	/* take a (pretty decent) guess. */
+	bisect=begin + 
+	  (target-begintime)*(end-begin)/(endtime-begintime) - CHUNKSIZE;
+	if(bisect<=begin)
+	  bisect=begin+1;
+      }
+      
+      _seek_helper(vf,bisect);
+    
+      while(begin<end){
+	result=_get_next_page(vf,&og,end-vf->offset);
+	if(result==OV_EREAD) goto seek_error;
+	if(result<0){
+	  if(bisect<=begin+1)
+	    end=begin; /* found it */
+	  else{
+	    if(bisect==0) goto seek_error;
+	    bisect-=CHUNKSIZE;
+	    if(bisect<=begin)bisect=begin+1;
+	    _seek_helper(vf,bisect);
+	  }
+	}else{
+	  ogg_int64_t granulepos=ogg_page_granulepos(&og);
+	  if(granulepos==-1)continue;
+	  if(granulepos<target){
+	    best=result;  /* raw offset of packet with granulepos */ 
+	    begin=vf->offset; /* raw offset of next page */
+	    begintime=granulepos;
+	    
+	    if(target-begintime>44100)break;
+	    bisect=begin; /* *not* begin + 1 */
+	  }else{
+	    if(bisect<=begin+1)
+	      end=begin;  /* found it */
+	    else{
+	      if(end==vf->offset){ /* we're pretty close - we'd be stuck in */
+		end=result;
+		bisect-=CHUNKSIZE; /* an endless loop otherwise. */
+		if(bisect<=begin)bisect=begin+1;
+		_seek_helper(vf,bisect);
+	      }else{
+		end=result;
+		endtime=granulepos;
+		break;
+	      }
+	    }
+	  }
+	}
+      }
+    }
+
+    /* found our page. seek to it, update pcm offset. Easier case than
+       raw_seek, don't keep packets preceeding granulepos. */
+    {
+      
+      /* seek */
+      _seek_helper(vf,best);
+      vf->pcm_offset=-1;
+      
+      if(_get_next_page(vf,&og,-1)<0){
+	ogg_page_release(&og);
+	return OV_EOF; /* shouldn't happen */
+      }
+
+      ogg_stream_pagein(vf->os,&og);
+
+      /* pull out all but last packet; the one with granulepos */
+      while(1){
+	result=ogg_stream_packetpeek(vf->os,&op);
+	if(result==0){
+	  /* !!! the packet finishing this page originated on a
+             preceeding page. Keep fetching previous pages until we
+             get one with a granulepos or without the 'continued' flag
+             set.  Then just use raw_seek for simplicity. */
+	  
+	  _seek_helper(vf,best);
+	  
+	  while(1){
+	    result=_get_prev_page(vf,&og);
+	    if(result<0) goto seek_error;
+	    if(ogg_page_granulepos(&og)>-1 ||
+	       !ogg_page_continued(&og)){
+	      return ov_raw_seek(vf,result);
+	    }
+	    vf->offset=result;
+	  }
+	}
+	if(result<0){
+	  result = OV_EBADPACKET; 
+	  goto seek_error;
+	}
+	if(op.granulepos!=-1){
+	  vf->pcm_offset=op.granulepos-vf->pcmlengths[vf->current_link*2];
+	  if(vf->pcm_offset<0)vf->pcm_offset=0;
+	  vf->pcm_offset+=total;
+	  break;
+	}else
+	  result=ogg_stream_packetout(vf->os,NULL);
+      }
+    }
+  }
+  
+  /* verify result */
+  if(vf->pcm_offset>pos || pos>ov_pcm_total(vf,-1)){
+    result=OV_EFAULT;
+    goto seek_error;
+  }
+  vf->bittrack=0;
+  vf->samptrack=0;
+
+  ogg_page_release(&og);
+  ogg_packet_release(&op);
+  return 0;
+  
+ seek_error:
+
+  ogg_page_release(&og);
+  ogg_packet_release(&op);
+
+  /* dump machine so we're in a known state */
+  vf->pcm_offset=-1;
+  _decode_clear(vf);
+  return (int)result;
+}
+
+/* seek to a sample offset relative to the decompressed pcm stream 
+   returns zero on success, nonzero on failure */
+
+int ov_pcm_seek(OggVorbis_File *vf,ogg_int64_t pos){
+  ogg_packet op={0,0,0,0,0,0};
+  ogg_page og={0,0,0,0};
+  int thisblock,lastblock=0;
+  int ret=ov_pcm_seek_page(vf,pos);
+  if(ret<0)return ret;
+  if(_make_decode_ready(vf))return OV_EBADLINK;
+
+  /* discard leading packets we don't need for the lapping of the
+     position we want; don't decode them */
+
+  while(1){
+
+    int ret=ogg_stream_packetpeek(vf->os,&op);
+    if(ret>0){
+      thisblock=vorbis_packet_blocksize(&vf->vi,&op);
+      if(thisblock<0){
+	ogg_stream_packetout(vf->os,NULL);
+	continue; /* non audio packet */
+      }
+      if(lastblock)vf->pcm_offset+=(lastblock+thisblock)>>2;
+      
+      if(vf->pcm_offset+((thisblock+
+			  vorbis_info_blocksize(&vf->vi,1))>>2)>=pos)break;
+      
+      /* remove the packet from packet queue and track its granulepos */
+      ogg_stream_packetout(vf->os,NULL);
+      vorbis_dsp_synthesis(vf->vd,&op,0);  /* set up a vb with
+					      only tracking, no
+					      pcm_decode */
+      
+      /* end of logical stream case is hard, especially with exact
+	 length positioning. */
+      
+      if(op.granulepos>-1){
+	int i;
+	/* always believe the stream markers */
+	vf->pcm_offset=op.granulepos-vf->pcmlengths[vf->current_link*2];
+	if(vf->pcm_offset<0)vf->pcm_offset=0;
+	for(i=0;i<vf->current_link;i++)
+	  vf->pcm_offset+=vf->pcmlengths[i*2+1];
+      }
+	
+      lastblock=thisblock;
+      
+    }else{
+      if(ret<0 && ret!=OV_HOLE)break;
+      
+      /* suck in a new page */
+      if(_get_next_page(vf,&og,-1)<0)break;
+      if(vf->current_serialno!=ogg_page_serialno(&og))_decode_clear(vf);
+      
+      if(vf->ready_state<STREAMSET){
+	int link,ret;
+	
+	vf->current_serialno=ogg_page_serialno(&og);
+	for(link=0;link<vf->links;link++)
+	  if(vf->serialnos[link]==vf->current_serialno)break;
+	if(link==vf->links){
+	  ogg_page_release(&og);
+	  ogg_packet_release(&op);
+	  return OV_EBADLINK;
+	}
+
+
+	vf->current_link=link;
+	ret=_fetch_headers(vf,&vf->vi,&vf->vc,&vf->current_serialno,&og);
+	if(ret) return ret;
+	if(_make_decode_ready(vf))return OV_EBADLINK;
+	lastblock=0;
+      }
+
+      ogg_stream_pagein(vf->os,&og);
+    }
+  }
+
+  vf->bittrack=0;
+  vf->samptrack=0;
+  /* discard samples until we reach the desired position. Crossing a
+     logical bitstream boundary with abandon is OK. */
+  while(vf->pcm_offset<pos){
+    ogg_int64_t target=pos-vf->pcm_offset;
+    long samples=vorbis_dsp_pcmout(vf->vd,NULL,0);
+
+    if(samples>target)samples=target;
+    vorbis_dsp_read(vf->vd,samples);
+    vf->pcm_offset+=samples;
+    
+    if(samples<target)
+      if(_fetch_and_process_packet(vf,1,1)<=0)
+	vf->pcm_offset=ov_pcm_total(vf,-1); /* eof */
+  }
+
+  ogg_page_release(&og);
+  ogg_packet_release(&op);
+  return 0;
+}
+
+/* seek to a playback time relative to the decompressed pcm stream 
+   returns zero on success, nonzero on failure */
+int ov_time_seek(OggVorbis_File *vf,ogg_int64_t milliseconds){
+  /* translate time to PCM position and call ov_pcm_seek */
+
+  int link=-1;
+  ogg_int64_t pcm_total=ov_pcm_total(vf,-1);
+  ogg_int64_t time_total=ov_time_total(vf,-1);
+
+  if(vf->ready_state<OPENED)return OV_EINVAL;
+  if(!vf->seekable)return OV_ENOSEEK;
+  if(milliseconds<0 || milliseconds>time_total)return OV_EINVAL;
+  
+  /* which bitstream section does this time offset occur in? */
+  for(link=vf->links-1;link>=0;link--){
+    pcm_total-=vf->pcmlengths[link*2+1];
+    time_total-=ov_time_total(vf,link);
+    if(milliseconds>=time_total)break;
+  }
+
+  /* enough information to convert time offset to pcm offset */
+  {
+    int ret=_set_link_number(vf,link);
+    if(ret)return ret;
+    return 
+      ov_pcm_seek(vf,pcm_total+(milliseconds-time_total)*
+		  vf->vi.rate/1000);
+  }
+}
+
+/* page-granularity version of ov_time_seek 
+   returns zero on success, nonzero on failure */
+int ov_time_seek_page(OggVorbis_File *vf,ogg_int64_t milliseconds){
+  /* translate time to PCM position and call ov_pcm_seek */
+
+  int link=-1;
+  ogg_int64_t pcm_total=ov_pcm_total(vf,-1);
+  ogg_int64_t time_total=ov_time_total(vf,-1);
+
+  if(vf->ready_state<OPENED)return OV_EINVAL;
+  if(!vf->seekable)return OV_ENOSEEK;
+  if(milliseconds<0 || milliseconds>time_total)return OV_EINVAL;
+  
+  /* which bitstream section does this time offset occur in? */
+  for(link=vf->links-1;link>=0;link--){
+    pcm_total-=vf->pcmlengths[link*2+1];
+    time_total-=ov_time_total(vf,link);
+    if(milliseconds>=time_total)break;
+  }
+
+  /* enough information to convert time offset to pcm offset */
+  {
+    int ret=_set_link_number(vf,link);
+    if(ret)return ret;
+    return 
+      ov_pcm_seek_page(vf,pcm_total+(milliseconds-time_total)*
+		       vf->vi.rate/1000);
+  }
+}
+
+/* tell the current stream offset cursor.  Note that seek followed by
+   tell will likely not give the set offset due to caching */
+ogg_int64_t ov_raw_tell(OggVorbis_File *vf){
+  if(vf->ready_state<OPENED)return OV_EINVAL;
+  return vf->offset;
+}
+
+/* return PCM offset (sample) of next PCM sample to be read */
+ogg_int64_t ov_pcm_tell(OggVorbis_File *vf){
+  if(vf->ready_state<OPENED)return OV_EINVAL;
+  return vf->pcm_offset;
+}
+
+/* return time offset (milliseconds) of next PCM sample to be read */
+ogg_int64_t ov_time_tell(OggVorbis_File *vf){
+  int link=0;
+  ogg_int64_t pcm_total=0;
+  ogg_int64_t time_total=0;
+  
+  if(vf->ready_state<OPENED)return OV_EINVAL;
+  if(vf->seekable){
+    pcm_total=ov_pcm_total(vf,-1);
+    time_total=ov_time_total(vf,-1);
+  
+    /* which bitstream section does this time offset occur in? */
+    for(link=vf->links-1;link>=0;link--){
+      pcm_total-=vf->pcmlengths[link*2+1];
+      time_total-=ov_time_total(vf,link);
+      if(vf->pcm_offset>=pcm_total)break;
+    }
+  }
+
+  return time_total+(1000*vf->pcm_offset-pcm_total)/vf->vi.rate;
+}
+
+/*  link:   -1) return the vorbis_info struct for the bitstream section
+                currently being decoded
+           0-n) to request information for a specific bitstream section
+    
+    In the case of a non-seekable bitstream, any call returns the
+    current bitstream.  NULL in the case that the machine is not
+    initialized */
+
+vorbis_info *ov_info(OggVorbis_File *vf,int link){
+  if(vf->seekable){
+    if(link>=vf->links)return NULL;
+    if(link>=0){
+      int ret=_set_link_number_preserve_pos(vf,link);
+      if(ret)return NULL;
+    }
+  }
+  return &vf->vi;
+}
+
+/* grr, strong typing, grr, no templates/inheritence, grr */
+vorbis_comment *ov_comment(OggVorbis_File *vf,int link){
+  if(vf->seekable){
+    if(link>=vf->links)return NULL;
+    if(link>=0){
+      int ret=_set_link_number_preserve_pos(vf,link);
+      if(ret)return NULL;
+    }
+  }
+  return &vf->vc;
+}
+
+/* up to this point, everything could more or less hide the multiple
+   logical bitstream nature of chaining from the toplevel application
+   if the toplevel application didn't particularly care.  However, at
+   the point that we actually read audio back, the multiple-section
+   nature must surface: Multiple bitstream sections do not necessarily
+   have to have the same number of channels or sampling rate.
+
+   ov_read returns the sequential logical bitstream number currently
+   being decoded along with the PCM data in order that the toplevel
+   application can take action on channel/sample rate changes.  This
+   number will be incremented even for streamed (non-seekable) streams
+   (for seekable streams, it represents the actual logical bitstream
+   index within the physical bitstream.  Note that the accessor
+   functions above are aware of this dichotomy).
+
+   input values: buffer) a buffer to hold packed PCM data for return
+		 length) the byte length requested to be placed into buffer
+
+   return values: <0) error/hole in data (OV_HOLE), partial open (OV_EINVAL)
+                   0) EOF
+		   n) number of bytes of PCM actually returned.  The
+		   below works on a packet-by-packet basis, so the
+		   return length is not related to the 'length' passed
+		   in, just guaranteed to fit.
+
+	    *section) set to the logical bitstream number */
+
+long ov_read(OggVorbis_File *vf,void *buffer,int bytes_req,int *bitstream){
+
+  long samples;
+  long channels;
+
+  if(vf->ready_state<OPENED)return OV_EINVAL;
+
+  while(1){
+    if(vf->ready_state==INITSET){
+      channels=vf->vi.channels;
+      samples=vorbis_dsp_pcmout(vf->vd,buffer,(bytes_req>>1)/channels);
+      if(samples){
+	if(samples>0){
+	  vorbis_dsp_read(vf->vd,samples);
+	  vf->pcm_offset+=samples;
+	  if(bitstream)*bitstream=vf->current_link;
+	  return samples*2*channels;
+	}
+	return samples;
+      }
+    }
+
+    /* suck in another packet */
+    {
+      int ret=_fetch_and_process_packet(vf,1,1);
+      if(ret==OV_EOF)
+	return 0;
+      if(ret<=0)
+	return ret;
+    }
+
+  }
+}
diff --git a/Tremor/window_lookup.h b/Tremor/window_lookup.h
new file mode 100644
index 0000000..1fd171b
--- /dev/null
+++ b/Tremor/window_lookup.h
@@ -0,0 +1,2087 @@
+/********************************************************************
+ *                                                   *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE.   *
+ *                                                                  *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002    *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************
+
+ function: window lookup tables
+
+ ********************************************************************/
+
+
+#include "os_types.h"
+
+static LOOKUP_T vwin64[32] = {
+  X(0x001f0003), X(0x01168c98), X(0x030333c8), X(0x05dfe3a4),
+  X(0x09a49562), X(0x0e45df18), X(0x13b47ef2), X(0x19dcf676),
+  X(0x20a74d83), X(0x27f7137c), X(0x2fabb05a), X(0x37a1105a),
+  X(0x3fb0ab28), X(0x47b2dcd1), X(0x4f807bc6), X(0x56f48e70),
+  X(0x5dedfc79), X(0x64511653), X(0x6a08cfff), X(0x6f079328),
+  X(0x734796f4), X(0x76cab7f2), X(0x7999d6e8), X(0x7bc3cf9f),
+  X(0x7d5c20c1), X(0x7e7961df), X(0x7f33a567), X(0x7fa2e1d0),
+  X(0x7fdd78a5), X(0x7ff6ec6d), X(0x7ffed0e9), X(0x7ffffc3f),
+};
+
+static LOOKUP_T vwin128[64] = {
+  X(0x0007c04d), X(0x0045bb89), X(0x00c18b87), X(0x017ae294),
+  X(0x02714a4e), X(0x03a4217a), X(0x05129952), X(0x06bbb24f),
+  X(0x089e38a1), X(0x0ab8c073), X(0x0d09a228), X(0x0f8ef6bd),
+  X(0x12469488), X(0x152e0c7a), X(0x1842a81c), X(0x1b81686d),
+  X(0x1ee705d9), X(0x226ff15d), X(0x26185705), X(0x29dc21cc),
+  X(0x2db700fe), X(0x31a46f08), X(0x359fb9c1), X(0x39a40c0c),
+  X(0x3dac78b6), X(0x41b40674), X(0x45b5bcb0), X(0x49acb109),
+  X(0x4d94152b), X(0x516744bd), X(0x5521d320), X(0x58bf98a5),
+  X(0x5c3cbef4), X(0x5f95cc5d), X(0x62c7add7), X(0x65cfbf64),
+  X(0x68abd2ba), X(0x6b5a3405), X(0x6dd9acab), X(0x7029840d),
+  X(0x72497e38), X(0x7439d8ac), X(0x75fb4532), X(0x778ee30a),
+  X(0x78f6367e), X(0x7a331f1a), X(0x7b47cccd), X(0x7c36b416),
+  X(0x7d028192), X(0x7dae0d18), X(0x7e3c4caa), X(0x7eb04763),
+  X(0x7f0d08a7), X(0x7f5593b7), X(0x7f8cd7d5), X(0x7fb5a513),
+  X(0x7fd2a1fc), X(0x7fe64212), X(0x7ff2bd4c), X(0x7ffa0890),
+  X(0x7ffdcf39), X(0x7fff6dac), X(0x7fffed01), X(0x7fffffc4),
+};
+
+static LOOKUP_T vwin256[128] = {
+  X(0x0001f018), X(0x00117066), X(0x00306e9e), X(0x005ee5f1),
+  X(0x009ccf26), X(0x00ea208b), X(0x0146cdea), X(0x01b2c87f),
+  X(0x022dfedf), X(0x02b85ced), X(0x0351cbbd), X(0x03fa317f),
+  X(0x04b17167), X(0x05776b90), X(0x064bfcdc), X(0x072efedd),
+  X(0x082047b4), X(0x091fa9f1), X(0x0a2cf477), X(0x0b47f25d),
+  X(0x0c706ad2), X(0x0da620ff), X(0x0ee8d3ef), X(0x10383e75),
+  X(0x11941716), X(0x12fc0ff6), X(0x146fd6c8), X(0x15ef14c2),
+  X(0x17796e8e), X(0x190e844f), X(0x1aadf196), X(0x1c574d6e),
+  X(0x1e0a2a62), X(0x1fc61688), X(0x218a9b9c), X(0x23573f12),
+  X(0x252b823d), X(0x2706e269), X(0x28e8d913), X(0x2ad0dc0e),
+  X(0x2cbe5dc1), X(0x2eb0cd60), X(0x30a79733), X(0x32a224d5),
+  X(0x349fdd8b), X(0x36a02690), X(0x38a2636f), X(0x3aa5f65e),
+  X(0x3caa409e), X(0x3eaea2df), X(0x40b27da6), X(0x42b531b8),
+  X(0x44b62086), X(0x46b4ac99), X(0x48b03a05), X(0x4aa82ed5),
+  X(0x4c9bf37d), X(0x4e8af349), X(0x50749ccb), X(0x52586246),
+  X(0x5435ba1c), X(0x560c1f31), X(0x57db1152), X(0x59a21591),
+  X(0x5b60b6a3), X(0x5d168535), X(0x5ec31839), X(0x60660d36),
+  X(0x61ff0886), X(0x638db595), X(0x6511c717), X(0x668af734),
+  X(0x67f907b0), X(0x695bc207), X(0x6ab2f787), X(0x6bfe815a),
+  X(0x6d3e4090), X(0x6e721e16), X(0x6f9a0ab5), X(0x70b5fef8),
+  X(0x71c5fb16), X(0x72ca06cd), X(0x73c2313d), X(0x74ae90b2),
+  X(0x758f4275), X(0x76646a85), X(0x772e335c), X(0x77eccda0),
+  X(0x78a06fd7), X(0x79495613), X(0x79e7c19c), X(0x7a7bf894),
+  X(0x7b064596), X(0x7b86f757), X(0x7bfe6044), X(0x7c6cd615),
+  X(0x7cd2b16e), X(0x7d304d71), X(0x7d860756), X(0x7dd43e06),
+  X(0x7e1b51ad), X(0x7e5ba355), X(0x7e95947e), X(0x7ec986bb),
+  X(0x7ef7db4a), X(0x7f20f2b9), X(0x7f452c7f), X(0x7f64e6a7),
+  X(0x7f807d71), X(0x7f984aff), X(0x7faca700), X(0x7fbde662),
+  X(0x7fcc5b04), X(0x7fd85372), X(0x7fe21a99), X(0x7fe9f791),
+  X(0x7ff02d58), X(0x7ff4fa9e), X(0x7ff89990), X(0x7ffb3faa),
+  X(0x7ffd1d8b), X(0x7ffe5ecc), X(0x7fff29e0), X(0x7fff9ff3),
+  X(0x7fffdcd2), X(0x7ffff6d6), X(0x7ffffed0), X(0x7ffffffc),
+};
+
+static LOOKUP_T vwin512[256] = {
+  X(0x00007c06), X(0x00045c32), X(0x000c1c62), X(0x0017bc4c),
+  X(0x00273b7a), X(0x003a9955), X(0x0051d51c), X(0x006cede7),
+  X(0x008be2a9), X(0x00aeb22a), X(0x00d55b0d), X(0x00ffdbcc),
+  X(0x012e32b6), X(0x01605df5), X(0x01965b85), X(0x01d02939),
+  X(0x020dc4ba), X(0x024f2b83), X(0x02945ae6), X(0x02dd5004),
+  X(0x032a07d3), X(0x037a7f19), X(0x03ceb26e), X(0x04269e37),
+  X(0x04823eab), X(0x04e18fcc), X(0x05448d6d), X(0x05ab3329),
+  X(0x06157c68), X(0x0683645e), X(0x06f4e607), X(0x0769fc25),
+  X(0x07e2a146), X(0x085ecfbc), X(0x08de819f), X(0x0961b0cc),
+  X(0x09e856e3), X(0x0a726d46), X(0x0affed1d), X(0x0b90cf4c),
+  X(0x0c250c79), X(0x0cbc9d0b), X(0x0d577926), X(0x0df598aa),
+  X(0x0e96f337), X(0x0f3b8026), X(0x0fe3368f), X(0x108e0d42),
+  X(0x113bfaca), X(0x11ecf56b), X(0x12a0f324), X(0x1357e9ac),
+  X(0x1411ce70), X(0x14ce9698), X(0x158e3702), X(0x1650a444),
+  X(0x1715d2aa), X(0x17ddb638), X(0x18a842aa), X(0x19756b72),
+  X(0x1a4523b9), X(0x1b175e62), X(0x1bec0e04), X(0x1cc324f0),
+  X(0x1d9c9532), X(0x1e78508a), X(0x1f564876), X(0x20366e2e),
+  X(0x2118b2a2), X(0x21fd0681), X(0x22e35a37), X(0x23cb9dee),
+  X(0x24b5c18e), X(0x25a1b4c0), X(0x268f66f1), X(0x277ec74e),
+  X(0x286fc4cc), X(0x29624e23), X(0x2a5651d7), X(0x2b4bbe34),
+  X(0x2c428150), X(0x2d3a8913), X(0x2e33c332), X(0x2f2e1d35),
+  X(0x30298478), X(0x3125e62d), X(0x32232f61), X(0x33214cfc),
+  X(0x34202bc2), X(0x351fb85a), X(0x361fdf4f), X(0x37208d10),
+  X(0x3821adf7), X(0x39232e49), X(0x3a24fa3c), X(0x3b26fdf6),
+  X(0x3c292593), X(0x3d2b5d29), X(0x3e2d90c8), X(0x3f2fac7f),
+  X(0x40319c5f), X(0x41334c81), X(0x4234a905), X(0x43359e16),
+  X(0x443617f3), X(0x453602eb), X(0x46354b65), X(0x4733dde1),
+  X(0x4831a6ff), X(0x492e937f), X(0x4a2a9045), X(0x4b258a5f),
+  X(0x4c1f6f06), X(0x4d182ba2), X(0x4e0fadce), X(0x4f05e35b),
+  X(0x4ffaba53), X(0x50ee20fd), X(0x51e005e1), X(0x52d057ca),
+  X(0x53bf05ca), X(0x54abff3b), X(0x559733c7), X(0x56809365),
+  X(0x57680e62), X(0x584d955d), X(0x59311952), X(0x5a128b96),
+  X(0x5af1dddd), X(0x5bcf023a), X(0x5ca9eb27), X(0x5d828b81),
+  X(0x5e58d68d), X(0x5f2cbffc), X(0x5ffe3be9), X(0x60cd3edf),
+  X(0x6199bdda), X(0x6263ae45), X(0x632b0602), X(0x63efbb66),
+  X(0x64b1c53f), X(0x65711ad0), X(0x662db3d7), X(0x66e7888d),
+  X(0x679e91a5), X(0x6852c84e), X(0x69042635), X(0x69b2a582),
+  X(0x6a5e40dd), X(0x6b06f36c), X(0x6bacb8d2), X(0x6c4f8d30),
+  X(0x6cef6d26), X(0x6d8c55d4), X(0x6e2644d4), X(0x6ebd3840),
+  X(0x6f512ead), X(0x6fe2272e), X(0x7070214f), X(0x70fb1d17),
+  X(0x71831b06), X(0x72081c16), X(0x728a21b5), X(0x73092dc8),
+  X(0x738542a6), X(0x73fe631b), X(0x74749261), X(0x74e7d421),
+  X(0x75582c72), X(0x75c59fd5), X(0x76303333), X(0x7697ebdd),
+  X(0x76fccf85), X(0x775ee443), X(0x77be308a), X(0x781abb2e),
+  X(0x78748b59), X(0x78cba88e), X(0x79201aa7), X(0x7971e9cd),
+  X(0x79c11e79), X(0x7a0dc170), X(0x7a57dbc2), X(0x7a9f76c1),
+  X(0x7ae49c07), X(0x7b27556b), X(0x7b67ad02), X(0x7ba5ad1b),
+  X(0x7be1603a), X(0x7c1ad118), X(0x7c520a9e), X(0x7c8717e1),
+  X(0x7cba0421), X(0x7ceadac3), X(0x7d19a74f), X(0x7d46756e),
+  X(0x7d7150e5), X(0x7d9a4592), X(0x7dc15f69), X(0x7de6aa71),
+  X(0x7e0a32c0), X(0x7e2c0479), X(0x7e4c2bc7), X(0x7e6ab4db),
+  X(0x7e87abe9), X(0x7ea31d24), X(0x7ebd14be), X(0x7ed59edd),
+  X(0x7eecc7a3), X(0x7f029b21), X(0x7f17255a), X(0x7f2a723f),
+  X(0x7f3c8daa), X(0x7f4d835d), X(0x7f5d5f00), X(0x7f6c2c1b),
+  X(0x7f79f617), X(0x7f86c83a), X(0x7f92ada2), X(0x7f9db146),
+  X(0x7fa7ddf3), X(0x7fb13e46), X(0x7fb9dcb0), X(0x7fc1c36c),
+  X(0x7fc8fc83), X(0x7fcf91c7), X(0x7fd58cd2), X(0x7fdaf702),
+  X(0x7fdfd979), X(0x7fe43d1c), X(0x7fe82a8b), X(0x7febaa29),
+  X(0x7feec412), X(0x7ff1801c), X(0x7ff3e5d6), X(0x7ff5fc86),
+  X(0x7ff7cb29), X(0x7ff9586f), X(0x7ffaaaba), X(0x7ffbc81e),
+  X(0x7ffcb660), X(0x7ffd7af3), X(0x7ffe1afa), X(0x7ffe9b42),
+  X(0x7fff0047), X(0x7fff4e2f), X(0x7fff88c9), X(0x7fffb390),
+  X(0x7fffd1a6), X(0x7fffe5d7), X(0x7ffff296), X(0x7ffff9fd),
+  X(0x7ffffdcd), X(0x7fffff6d), X(0x7fffffed), X(0x7fffffff),
+};
+
+static LOOKUP_T vwin1024[512] = {
+  X(0x00001f02), X(0x0001170e), X(0x00030724), X(0x0005ef40),
+  X(0x0009cf59), X(0x000ea767), X(0x0014775e), X(0x001b3f2e),
+  X(0x0022fec8), X(0x002bb618), X(0x00356508), X(0x00400b81),
+  X(0x004ba968), X(0x00583ea0), X(0x0065cb0a), X(0x00744e84),
+  X(0x0083c8ea), X(0x00943a14), X(0x00a5a1da), X(0x00b80010),
+  X(0x00cb5488), X(0x00df9f10), X(0x00f4df76), X(0x010b1584),
+  X(0x01224101), X(0x013a61b2), X(0x01537759), X(0x016d81b6),
+  X(0x01888087), X(0x01a47385), X(0x01c15a69), X(0x01df34e6),
+  X(0x01fe02b1), X(0x021dc377), X(0x023e76e7), X(0x02601ca9),
+  X(0x0282b466), X(0x02a63dc1), X(0x02cab85d), X(0x02f023d6),
+  X(0x03167fcb), X(0x033dcbd3), X(0x03660783), X(0x038f3270),
+  X(0x03b94c29), X(0x03e4543a), X(0x04104a2e), X(0x043d2d8b),
+  X(0x046afdd5), X(0x0499ba8c), X(0x04c9632d), X(0x04f9f734),
+  X(0x052b7615), X(0x055ddf46), X(0x05913237), X(0x05c56e53),
+  X(0x05fa9306), X(0x06309fb6), X(0x066793c5), X(0x069f6e93),
+  X(0x06d82f7c), X(0x0711d5d9), X(0x074c60fe), X(0x0787d03d),
+  X(0x07c422e4), X(0x0801583e), X(0x083f6f91), X(0x087e681f),
+  X(0x08be4129), X(0x08fef9ea), X(0x0940919a), X(0x0983076d),
+  X(0x09c65a92), X(0x0a0a8a38), X(0x0a4f9585), X(0x0a957b9f),
+  X(0x0adc3ba7), X(0x0b23d4b9), X(0x0b6c45ee), X(0x0bb58e5a),
+  X(0x0bffad0f), X(0x0c4aa11a), X(0x0c966982), X(0x0ce3054d),
+  X(0x0d30737b), X(0x0d7eb308), X(0x0dcdc2eb), X(0x0e1da21a),
+  X(0x0e6e4f83), X(0x0ebfca11), X(0x0f1210ad), X(0x0f652238),
+  X(0x0fb8fd91), X(0x100da192), X(0x10630d11), X(0x10b93ee0),
+  X(0x111035cb), X(0x1167f09a), X(0x11c06e13), X(0x1219acf5),
+  X(0x1273abfb), X(0x12ce69db), X(0x1329e54a), X(0x13861cf3),
+  X(0x13e30f80), X(0x1440bb97), X(0x149f1fd8), X(0x14fe3ade),
+  X(0x155e0b40), X(0x15be8f92), X(0x161fc662), X(0x1681ae38),
+  X(0x16e4459b), X(0x17478b0b), X(0x17ab7d03), X(0x181019fb),
+  X(0x18756067), X(0x18db4eb3), X(0x1941e34a), X(0x19a91c92),
+  X(0x1a10f8ea), X(0x1a7976af), X(0x1ae29439), X(0x1b4c4fda),
+  X(0x1bb6a7e2), X(0x1c219a9a), X(0x1c8d2649), X(0x1cf9492e),
+  X(0x1d660188), X(0x1dd34d8e), X(0x1e412b74), X(0x1eaf996a),
+  X(0x1f1e959b), X(0x1f8e1e2f), X(0x1ffe3146), X(0x206ecd01),
+  X(0x20dfef78), X(0x215196c2), X(0x21c3c0f0), X(0x22366c10),
+  X(0x22a9962a), X(0x231d3d45), X(0x23915f60), X(0x2405fa7a),
+  X(0x247b0c8c), X(0x24f09389), X(0x25668d65), X(0x25dcf80c),
+  X(0x2653d167), X(0x26cb175e), X(0x2742c7d0), X(0x27bae09e),
+  X(0x28335fa2), X(0x28ac42b3), X(0x292587a5), X(0x299f2c48),
+  X(0x2a192e69), X(0x2a938bd1), X(0x2b0e4247), X(0x2b894f8d),
+  X(0x2c04b164), X(0x2c806588), X(0x2cfc69b2), X(0x2d78bb9a),
+  X(0x2df558f4), X(0x2e723f6f), X(0x2eef6cbb), X(0x2f6cde83),
+  X(0x2fea9270), X(0x30688627), X(0x30e6b74e), X(0x31652385),
+  X(0x31e3c86b), X(0x3262a39e), X(0x32e1b2b8), X(0x3360f352),
+  X(0x33e06303), X(0x345fff5e), X(0x34dfc5f8), X(0x355fb462),
+  X(0x35dfc82a), X(0x365ffee0), X(0x36e0560f), X(0x3760cb43),
+  X(0x37e15c05), X(0x386205df), X(0x38e2c657), X(0x39639af5),
+  X(0x39e4813e), X(0x3a6576b6), X(0x3ae678e3), X(0x3b678547),
+  X(0x3be89965), X(0x3c69b2c1), X(0x3ceacedc), X(0x3d6beb37),
+  X(0x3ded0557), X(0x3e6e1abb), X(0x3eef28e6), X(0x3f702d5a),
+  X(0x3ff1259a), X(0x40720f29), X(0x40f2e789), X(0x4173ac3f),
+  X(0x41f45ad0), X(0x4274f0c2), X(0x42f56b9a), X(0x4375c8e0),
+  X(0x43f6061d), X(0x447620db), X(0x44f616a5), X(0x4575e509),
+  X(0x45f58994), X(0x467501d6), X(0x46f44b62), X(0x477363cb),
+  X(0x47f248a6), X(0x4870f78e), X(0x48ef6e1a), X(0x496da9e8),
+  X(0x49eba897), X(0x4a6967c8), X(0x4ae6e521), X(0x4b641e47),
+  X(0x4be110e5), X(0x4c5dbaa7), X(0x4cda193f), X(0x4d562a5f),
+  X(0x4dd1ebbd), X(0x4e4d5b15), X(0x4ec87623), X(0x4f433aa9),
+  X(0x4fbda66c), X(0x5037b734), X(0x50b16acf), X(0x512abf0e),
+  X(0x51a3b1c5), X(0x521c40ce), X(0x52946a06), X(0x530c2b50),
+  X(0x53838292), X(0x53fa6db8), X(0x5470eab3), X(0x54e6f776),
+  X(0x555c91fc), X(0x55d1b844), X(0x56466851), X(0x56baa02f),
+  X(0x572e5deb), X(0x57a19f98), X(0x58146352), X(0x5886a737),
+  X(0x58f8696d), X(0x5969a81c), X(0x59da6177), X(0x5a4a93b4),
+  X(0x5aba3d0f), X(0x5b295bcb), X(0x5b97ee30), X(0x5c05f28d),
+  X(0x5c736738), X(0x5ce04a8d), X(0x5d4c9aed), X(0x5db856c1),
+  X(0x5e237c78), X(0x5e8e0a89), X(0x5ef7ff6f), X(0x5f6159b0),
+  X(0x5fca17d4), X(0x6032386e), X(0x6099ba15), X(0x61009b69),
+  X(0x6166db11), X(0x61cc77b9), X(0x62317017), X(0x6295c2e7),
+  X(0x62f96eec), X(0x635c72f1), X(0x63becdc8), X(0x64207e4b),
+  X(0x6481835a), X(0x64e1dbde), X(0x654186c8), X(0x65a0830e),
+  X(0x65fecfb1), X(0x665c6bb7), X(0x66b95630), X(0x67158e30),
+  X(0x677112d7), X(0x67cbe34b), X(0x6825feb9), X(0x687f6456),
+  X(0x68d81361), X(0x69300b1e), X(0x69874ada), X(0x69ddd1ea),
+  X(0x6a339fab), X(0x6a88b382), X(0x6add0cdb), X(0x6b30ab2a),
+  X(0x6b838dec), X(0x6bd5b4a6), X(0x6c271ee2), X(0x6c77cc36),
+  X(0x6cc7bc3d), X(0x6d16ee9b), X(0x6d6562fb), X(0x6db31911),
+  X(0x6e001099), X(0x6e4c4955), X(0x6e97c311), X(0x6ee27d9f),
+  X(0x6f2c78d9), X(0x6f75b4a2), X(0x6fbe30e4), X(0x7005ed91),
+  X(0x704ceaa1), X(0x70932816), X(0x70d8a5f8), X(0x711d6457),
+  X(0x7161634b), X(0x71a4a2f3), X(0x71e72375), X(0x7228e500),
+  X(0x7269e7c8), X(0x72aa2c0a), X(0x72e9b209), X(0x73287a12),
+  X(0x73668476), X(0x73a3d18f), X(0x73e061bc), X(0x741c3566),
+  X(0x74574cfa), X(0x7491a8ee), X(0x74cb49be), X(0x75042fec),
+  X(0x753c5c03), X(0x7573ce92), X(0x75aa882f), X(0x75e08979),
+  X(0x7615d313), X(0x764a65a7), X(0x767e41e5), X(0x76b16884),
+  X(0x76e3da40), X(0x771597dc), X(0x7746a221), X(0x7776f9dd),
+  X(0x77a69fe6), X(0x77d59514), X(0x7803da49), X(0x7831706a),
+  X(0x785e5861), X(0x788a9320), X(0x78b6219c), X(0x78e104cf),
+  X(0x790b3dbb), X(0x7934cd64), X(0x795db4d5), X(0x7985f51d),
+  X(0x79ad8f50), X(0x79d48486), X(0x79fad5de), X(0x7a208478),
+  X(0x7a45917b), X(0x7a69fe12), X(0x7a8dcb6c), X(0x7ab0fabb),
+  X(0x7ad38d36), X(0x7af5841a), X(0x7b16e0a3), X(0x7b37a416),
+  X(0x7b57cfb8), X(0x7b7764d4), X(0x7b9664b6), X(0x7bb4d0b0),
+  X(0x7bd2aa14), X(0x7beff23b), X(0x7c0caa7f), X(0x7c28d43c),
+  X(0x7c4470d2), X(0x7c5f81a5), X(0x7c7a081a), X(0x7c940598),
+  X(0x7cad7b8b), X(0x7cc66b5e), X(0x7cded680), X(0x7cf6be64),
+  X(0x7d0e247b), X(0x7d250a3c), X(0x7d3b711c), X(0x7d515a95),
+  X(0x7d66c822), X(0x7d7bbb3c), X(0x7d903563), X(0x7da43814),
+  X(0x7db7c4d0), X(0x7dcadd16), X(0x7ddd826a), X(0x7defb64d),
+  X(0x7e017a44), X(0x7e12cfd3), X(0x7e23b87f), X(0x7e3435cc),
+  X(0x7e444943), X(0x7e53f467), X(0x7e6338c0), X(0x7e7217d5),
+  X(0x7e80932b), X(0x7e8eac49), X(0x7e9c64b7), X(0x7ea9bdf8),
+  X(0x7eb6b994), X(0x7ec35910), X(0x7ecf9def), X(0x7edb89b6),
+  X(0x7ee71de9), X(0x7ef25c09), X(0x7efd4598), X(0x7f07dc16),
+  X(0x7f122103), X(0x7f1c15dc), X(0x7f25bc1f), X(0x7f2f1547),
+  X(0x7f3822cd), X(0x7f40e62b), X(0x7f4960d6), X(0x7f519443),
+  X(0x7f5981e7), X(0x7f612b31), X(0x7f689191), X(0x7f6fb674),
+  X(0x7f769b45), X(0x7f7d416c), X(0x7f83aa51), X(0x7f89d757),
+  X(0x7f8fc9df), X(0x7f958348), X(0x7f9b04ef), X(0x7fa0502e),
+  X(0x7fa56659), X(0x7faa48c7), X(0x7faef8c7), X(0x7fb377a7),
+  X(0x7fb7c6b3), X(0x7fbbe732), X(0x7fbfda67), X(0x7fc3a196),
+  X(0x7fc73dfa), X(0x7fcab0ce), X(0x7fcdfb4a), X(0x7fd11ea0),
+  X(0x7fd41c00), X(0x7fd6f496), X(0x7fd9a989), X(0x7fdc3bff),
+  X(0x7fdead17), X(0x7fe0fdee), X(0x7fe32f9d), X(0x7fe54337),
+  X(0x7fe739ce), X(0x7fe9146c), X(0x7fead41b), X(0x7fec79dd),
+  X(0x7fee06b2), X(0x7fef7b94), X(0x7ff0d97b), X(0x7ff22158),
+  X(0x7ff35417), X(0x7ff472a3), X(0x7ff57de0), X(0x7ff676ac),
+  X(0x7ff75de3), X(0x7ff8345a), X(0x7ff8fae4), X(0x7ff9b24b),
+  X(0x7ffa5b58), X(0x7ffaf6cd), X(0x7ffb8568), X(0x7ffc07e2),
+  X(0x7ffc7eed), X(0x7ffceb38), X(0x7ffd4d6d), X(0x7ffda631),
+  X(0x7ffdf621), X(0x7ffe3dd8), X(0x7ffe7dea), X(0x7ffeb6e7),
+  X(0x7ffee959), X(0x7fff15c4), X(0x7fff3ca9), X(0x7fff5e80),
+  X(0x7fff7bc0), X(0x7fff94d6), X(0x7fffaa2d), X(0x7fffbc29),
+  X(0x7fffcb29), X(0x7fffd786), X(0x7fffe195), X(0x7fffe9a3),
+  X(0x7fffeffa), X(0x7ffff4dd), X(0x7ffff889), X(0x7ffffb37),
+  X(0x7ffffd1a), X(0x7ffffe5d), X(0x7fffff29), X(0x7fffffa0),
+  X(0x7fffffdd), X(0x7ffffff7), X(0x7fffffff), X(0x7fffffff),
+};
+
+static LOOKUP_T vwin2048[1024] = {
+  X(0x000007c0), X(0x000045c4), X(0x0000c1ca), X(0x00017bd3),
+  X(0x000273de), X(0x0003a9eb), X(0x00051df9), X(0x0006d007),
+  X(0x0008c014), X(0x000aee1e), X(0x000d5a25), X(0x00100428),
+  X(0x0012ec23), X(0x00161216), X(0x001975fe), X(0x001d17da),
+  X(0x0020f7a8), X(0x00251564), X(0x0029710c), X(0x002e0a9e),
+  X(0x0032e217), X(0x0037f773), X(0x003d4ab0), X(0x0042dbca),
+  X(0x0048aabe), X(0x004eb788), X(0x00550224), X(0x005b8a8f),
+  X(0x006250c5), X(0x006954c1), X(0x0070967e), X(0x007815f9),
+  X(0x007fd32c), X(0x0087ce13), X(0x009006a9), X(0x00987ce9),
+  X(0x00a130cc), X(0x00aa224f), X(0x00b3516b), X(0x00bcbe1a),
+  X(0x00c66856), X(0x00d0501a), X(0x00da755f), X(0x00e4d81f),
+  X(0x00ef7853), X(0x00fa55f4), X(0x010570fc), X(0x0110c963),
+  X(0x011c5f22), X(0x01283232), X(0x0134428c), X(0x01409027),
+  X(0x014d1afb), X(0x0159e302), X(0x0166e831), X(0x01742a82),
+  X(0x0181a9ec), X(0x018f6665), X(0x019d5fe5), X(0x01ab9663),
+  X(0x01ba09d6), X(0x01c8ba34), X(0x01d7a775), X(0x01e6d18d),
+  X(0x01f63873), X(0x0205dc1e), X(0x0215bc82), X(0x0225d997),
+  X(0x02363350), X(0x0246c9a3), X(0x02579c86), X(0x0268abed),
+  X(0x0279f7cc), X(0x028b801a), X(0x029d44c9), X(0x02af45ce),
+  X(0x02c1831d), X(0x02d3fcaa), X(0x02e6b269), X(0x02f9a44c),
+  X(0x030cd248), X(0x03203c4f), X(0x0333e255), X(0x0347c44b),
+  X(0x035be225), X(0x03703bd5), X(0x0384d14d), X(0x0399a280),
+  X(0x03aeaf5e), X(0x03c3f7d9), X(0x03d97be4), X(0x03ef3b6e),
+  X(0x0405366a), X(0x041b6cc8), X(0x0431de78), X(0x04488b6c),
+  X(0x045f7393), X(0x047696dd), X(0x048df53b), X(0x04a58e9b),
+  X(0x04bd62ee), X(0x04d57223), X(0x04edbc28), X(0x050640ed),
+  X(0x051f0060), X(0x0537fa70), X(0x05512f0a), X(0x056a9e1e),
+  X(0x05844798), X(0x059e2b67), X(0x05b84978), X(0x05d2a1b8),
+  X(0x05ed3414), X(0x06080079), X(0x062306d3), X(0x063e470f),
+  X(0x0659c119), X(0x067574dd), X(0x06916247), X(0x06ad8941),
+  X(0x06c9e9b8), X(0x06e68397), X(0x070356c8), X(0x07206336),
+  X(0x073da8cb), X(0x075b2772), X(0x0778df15), X(0x0796cf9c),
+  X(0x07b4f8f3), X(0x07d35b01), X(0x07f1f5b1), X(0x0810c8eb),
+  X(0x082fd497), X(0x084f189e), X(0x086e94e9), X(0x088e495e),
+  X(0x08ae35e6), X(0x08ce5a68), X(0x08eeb6cc), X(0x090f4af8),
+  X(0x093016d3), X(0x09511a44), X(0x09725530), X(0x0993c77f),
+  X(0x09b57115), X(0x09d751d8), X(0x09f969ae), X(0x0a1bb87c),
+  X(0x0a3e3e26), X(0x0a60fa91), X(0x0a83eda2), X(0x0aa7173c),
+  X(0x0aca7743), X(0x0aee0d9b), X(0x0b11da28), X(0x0b35dccc),
+  X(0x0b5a156a), X(0x0b7e83e5), X(0x0ba3281f), X(0x0bc801fa),
+  X(0x0bed1159), X(0x0c12561c), X(0x0c37d025), X(0x0c5d7f55),
+  X(0x0c83638d), X(0x0ca97cae), X(0x0ccfca97), X(0x0cf64d2a),
+  X(0x0d1d0444), X(0x0d43efc7), X(0x0d6b0f92), X(0x0d926383),
+  X(0x0db9eb79), X(0x0de1a752), X(0x0e0996ee), X(0x0e31ba29),
+  X(0x0e5a10e2), X(0x0e829af6), X(0x0eab5841), X(0x0ed448a2),
+  X(0x0efd6bf4), X(0x0f26c214), X(0x0f504ade), X(0x0f7a062e),
+  X(0x0fa3f3df), X(0x0fce13cd), X(0x0ff865d2), X(0x1022e9ca),
+  X(0x104d9f8e), X(0x107886f9), X(0x10a39fe5), X(0x10ceea2c),
+  X(0x10fa65a6), X(0x1126122d), X(0x1151ef9a), X(0x117dfdc5),
+  X(0x11aa3c87), X(0x11d6abb6), X(0x12034b2c), X(0x12301ac0),
+  X(0x125d1a48), X(0x128a499b), X(0x12b7a891), X(0x12e536ff),
+  X(0x1312f4bb), X(0x1340e19c), X(0x136efd75), X(0x139d481e),
+  X(0x13cbc16a), X(0x13fa692f), X(0x14293f40), X(0x14584371),
+  X(0x14877597), X(0x14b6d585), X(0x14e6630d), X(0x15161e04),
+  X(0x1546063b), X(0x15761b85), X(0x15a65db3), X(0x15d6cc99),
+  X(0x16076806), X(0x16382fcd), X(0x166923bf), X(0x169a43ab),
+  X(0x16cb8f62), X(0x16fd06b5), X(0x172ea973), X(0x1760776b),
+  X(0x1792706e), X(0x17c49449), X(0x17f6e2cb), X(0x18295bc3),
+  X(0x185bfeff), X(0x188ecc4c), X(0x18c1c379), X(0x18f4e452),
+  X(0x19282ea4), X(0x195ba23c), X(0x198f3ee6), X(0x19c3046e),
+  X(0x19f6f2a1), X(0x1a2b094a), X(0x1a5f4833), X(0x1a93af28),
+  X(0x1ac83df3), X(0x1afcf460), X(0x1b31d237), X(0x1b66d744),
+  X(0x1b9c034e), X(0x1bd15621), X(0x1c06cf84), X(0x1c3c6f40),
+  X(0x1c72351e), X(0x1ca820e6), X(0x1cde3260), X(0x1d146953),
+  X(0x1d4ac587), X(0x1d8146c3), X(0x1db7eccd), X(0x1deeb76c),
+  X(0x1e25a667), X(0x1e5cb982), X(0x1e93f085), X(0x1ecb4b33),
+  X(0x1f02c953), X(0x1f3a6aaa), X(0x1f722efb), X(0x1faa160b),
+  X(0x1fe21f9e), X(0x201a4b79), X(0x2052995d), X(0x208b0910),
+  X(0x20c39a53), X(0x20fc4cea), X(0x21352097), X(0x216e151c),
+  X(0x21a72a3a), X(0x21e05fb5), X(0x2219b54d), X(0x22532ac3),
+  X(0x228cbfd8), X(0x22c6744d), X(0x230047e2), X(0x233a3a58),
+  X(0x23744b6d), X(0x23ae7ae3), X(0x23e8c878), X(0x242333ec),
+  X(0x245dbcfd), X(0x24986369), X(0x24d326f1), X(0x250e0750),
+  X(0x25490446), X(0x25841d90), X(0x25bf52ec), X(0x25faa417),
+  X(0x263610cd), X(0x267198cc), X(0x26ad3bcf), X(0x26e8f994),
+  X(0x2724d1d6), X(0x2760c451), X(0x279cd0c0), X(0x27d8f6e0),
+  X(0x2815366a), X(0x28518f1b), X(0x288e00ac), X(0x28ca8ad8),
+  X(0x29072d5a), X(0x2943e7eb), X(0x2980ba45), X(0x29bda422),
+  X(0x29faa53c), X(0x2a37bd4a), X(0x2a74ec07), X(0x2ab2312b),
+  X(0x2aef8c6f), X(0x2b2cfd8b), X(0x2b6a8437), X(0x2ba8202c),
+  X(0x2be5d120), X(0x2c2396cc), X(0x2c6170e7), X(0x2c9f5f29),
+  X(0x2cdd6147), X(0x2d1b76fa), X(0x2d599ff7), X(0x2d97dbf5),
+  X(0x2dd62aab), X(0x2e148bcf), X(0x2e52ff16), X(0x2e918436),
+  X(0x2ed01ae5), X(0x2f0ec2d9), X(0x2f4d7bc6), X(0x2f8c4562),
+  X(0x2fcb1f62), X(0x300a097a), X(0x3049035f), X(0x30880cc6),
+  X(0x30c72563), X(0x31064cea), X(0x3145830f), X(0x3184c786),
+  X(0x31c41a03), X(0x32037a39), X(0x3242e7dc), X(0x3282629f),
+  X(0x32c1ea36), X(0x33017e53), X(0x33411ea9), X(0x3380caec),
+  X(0x33c082ce), X(0x34004602), X(0x34401439), X(0x347fed27),
+  X(0x34bfd07e), X(0x34ffbdf0), X(0x353fb52e), X(0x357fb5ec),
+  X(0x35bfbfda), X(0x35ffd2aa), X(0x363fee0f), X(0x368011b9),
+  X(0x36c03d5a), X(0x370070a4), X(0x3740ab48), X(0x3780ecf7),
+  X(0x37c13562), X(0x3801843a), X(0x3841d931), X(0x388233f7),
+  X(0x38c2943d), X(0x3902f9b4), X(0x3943640d), X(0x3983d2f8),
+  X(0x39c44626), X(0x3a04bd48), X(0x3a45380e), X(0x3a85b62a),
+  X(0x3ac6374a), X(0x3b06bb20), X(0x3b47415c), X(0x3b87c9ae),
+  X(0x3bc853c7), X(0x3c08df57), X(0x3c496c0f), X(0x3c89f99f),
+  X(0x3cca87b6), X(0x3d0b1605), X(0x3d4ba43d), X(0x3d8c320e),
+  X(0x3dccbf27), X(0x3e0d4b3a), X(0x3e4dd5f6), X(0x3e8e5f0c),
+  X(0x3ecee62b), X(0x3f0f6b05), X(0x3f4fed49), X(0x3f906ca8),
+  X(0x3fd0e8d2), X(0x40116177), X(0x4051d648), X(0x409246f6),
+  X(0x40d2b330), X(0x41131aa7), X(0x41537d0c), X(0x4193da10),
+  X(0x41d43162), X(0x421482b4), X(0x4254cdb7), X(0x4295121b),
+  X(0x42d54f91), X(0x431585ca), X(0x4355b477), X(0x4395db49),
+  X(0x43d5f9f1), X(0x44161021), X(0x44561d8a), X(0x449621dd),
+  X(0x44d61ccc), X(0x45160e08), X(0x4555f544), X(0x4595d230),
+  X(0x45d5a47f), X(0x46156be3), X(0x4655280e), X(0x4694d8b2),
+  X(0x46d47d82), X(0x4714162f), X(0x4753a26d), X(0x479321ef),
+  X(0x47d29466), X(0x4811f987), X(0x48515104), X(0x48909a91),
+  X(0x48cfd5e1), X(0x490f02a7), X(0x494e2098), X(0x498d2f66),
+  X(0x49cc2ec7), X(0x4a0b1e6f), X(0x4a49fe11), X(0x4a88cd62),
+  X(0x4ac78c18), X(0x4b0639e6), X(0x4b44d683), X(0x4b8361a2),
+  X(0x4bc1dafa), X(0x4c004241), X(0x4c3e972c), X(0x4c7cd970),
+  X(0x4cbb08c5), X(0x4cf924e1), X(0x4d372d7a), X(0x4d752247),
+  X(0x4db30300), X(0x4df0cf5a), X(0x4e2e870f), X(0x4e6c29d6),
+  X(0x4ea9b766), X(0x4ee72f78), X(0x4f2491c4), X(0x4f61de02),
+  X(0x4f9f13ec), X(0x4fdc333b), X(0x50193ba8), X(0x50562ced),
+  X(0x509306c3), X(0x50cfc8e5), X(0x510c730d), X(0x514904f6),
+  X(0x51857e5a), X(0x51c1def5), X(0x51fe2682), X(0x523a54bc),
+  X(0x52766961), X(0x52b2642c), X(0x52ee44d9), X(0x532a0b26),
+  X(0x5365b6d0), X(0x53a14793), X(0x53dcbd2f), X(0x54181760),
+  X(0x545355e5), X(0x548e787d), X(0x54c97ee6), X(0x550468e1),
+  X(0x553f362c), X(0x5579e687), X(0x55b479b3), X(0x55eeef70),
+  X(0x5629477f), X(0x566381a1), X(0x569d9d97), X(0x56d79b24),
+  X(0x57117a0a), X(0x574b3a0a), X(0x5784dae9), X(0x57be5c69),
+  X(0x57f7be4d), X(0x5831005a), X(0x586a2254), X(0x58a32400),
+  X(0x58dc0522), X(0x5914c57f), X(0x594d64de), X(0x5985e305),
+  X(0x59be3fba), X(0x59f67ac3), X(0x5a2e93e9), X(0x5a668af2),
+  X(0x5a9e5fa6), X(0x5ad611ce), X(0x5b0da133), X(0x5b450d9d),
+  X(0x5b7c56d7), X(0x5bb37ca9), X(0x5bea7ede), X(0x5c215d41),
+  X(0x5c58179d), X(0x5c8eadbe), X(0x5cc51f6f), X(0x5cfb6c7c),
+  X(0x5d3194b2), X(0x5d6797de), X(0x5d9d75cf), X(0x5dd32e51),
+  X(0x5e08c132), X(0x5e3e2e43), X(0x5e737551), X(0x5ea8962d),
+  X(0x5edd90a7), X(0x5f12648e), X(0x5f4711b4), X(0x5f7b97ea),
+  X(0x5faff702), X(0x5fe42ece), X(0x60183f20), X(0x604c27cc),
+  X(0x607fe8a6), X(0x60b38180), X(0x60e6f22f), X(0x611a3a89),
+  X(0x614d5a62), X(0x61805190), X(0x61b31fe9), X(0x61e5c545),
+  X(0x62184179), X(0x624a945d), X(0x627cbdca), X(0x62aebd98),
+  X(0x62e0939f), X(0x63123fba), X(0x6343c1c1), X(0x6375198f),
+  X(0x63a646ff), X(0x63d749ec), X(0x64082232), X(0x6438cfad),
+  X(0x64695238), X(0x6499a9b3), X(0x64c9d5f9), X(0x64f9d6ea),
+  X(0x6529ac63), X(0x65595643), X(0x6588d46a), X(0x65b826b8),
+  X(0x65e74d0e), X(0x6616474b), X(0x66451552), X(0x6673b704),
+  X(0x66a22c44), X(0x66d074f4), X(0x66fe90f8), X(0x672c8033),
+  X(0x675a428a), X(0x6787d7e1), X(0x67b5401f), X(0x67e27b27),
+  X(0x680f88e1), X(0x683c6934), X(0x68691c05), X(0x6895a13e),
+  X(0x68c1f8c7), X(0x68ee2287), X(0x691a1e68), X(0x6945ec54),
+  X(0x69718c35), X(0x699cfdf5), X(0x69c8417f), X(0x69f356c0),
+  X(0x6a1e3da3), X(0x6a48f615), X(0x6a738002), X(0x6a9ddb5a),
+  X(0x6ac80808), X(0x6af205fd), X(0x6b1bd526), X(0x6b457575),
+  X(0x6b6ee6d8), X(0x6b982940), X(0x6bc13c9f), X(0x6bea20e5),
+  X(0x6c12d605), X(0x6c3b5bf1), X(0x6c63b29c), X(0x6c8bd9fb),
+  X(0x6cb3d200), X(0x6cdb9aa0), X(0x6d0333d0), X(0x6d2a9d86),
+  X(0x6d51d7b7), X(0x6d78e25a), X(0x6d9fbd67), X(0x6dc668d3),
+  X(0x6dece498), X(0x6e1330ad), X(0x6e394d0c), X(0x6e5f39ae),
+  X(0x6e84f68d), X(0x6eaa83a2), X(0x6ecfe0ea), X(0x6ef50e5e),
+  X(0x6f1a0bfc), X(0x6f3ed9bf), X(0x6f6377a4), X(0x6f87e5a8),
+  X(0x6fac23c9), X(0x6fd03206), X(0x6ff4105c), X(0x7017becc),
+  X(0x703b3d54), X(0x705e8bf5), X(0x7081aaaf), X(0x70a49984),
+  X(0x70c75874), X(0x70e9e783), X(0x710c46b2), X(0x712e7605),
+  X(0x7150757f), X(0x71724523), X(0x7193e4f6), X(0x71b554fd),
+  X(0x71d6953e), X(0x71f7a5bd), X(0x72188681), X(0x72393792),
+  X(0x7259b8f5), X(0x727a0ab2), X(0x729a2cd2), X(0x72ba1f5d),
+  X(0x72d9e25c), X(0x72f975d8), X(0x7318d9db), X(0x73380e6f),
+  X(0x735713a0), X(0x7375e978), X(0x73949003), X(0x73b3074c),
+  X(0x73d14f61), X(0x73ef684f), X(0x740d5222), X(0x742b0ce9),
+  X(0x744898b1), X(0x7465f589), X(0x74832381), X(0x74a022a8),
+  X(0x74bcf30e), X(0x74d994c3), X(0x74f607d8), X(0x75124c5f),
+  X(0x752e6268), X(0x754a4a05), X(0x7566034b), X(0x75818e4a),
+  X(0x759ceb16), X(0x75b819c4), X(0x75d31a66), X(0x75eded12),
+  X(0x760891dc), X(0x762308da), X(0x763d5221), X(0x76576dc8),
+  X(0x76715be4), X(0x768b1c8c), X(0x76a4afd9), X(0x76be15e0),
+  X(0x76d74ebb), X(0x76f05a82), X(0x7709394d), X(0x7721eb35),
+  X(0x773a7054), X(0x7752c8c4), X(0x776af49f), X(0x7782f400),
+  X(0x779ac701), X(0x77b26dbd), X(0x77c9e851), X(0x77e136d8),
+  X(0x77f8596f), X(0x780f5032), X(0x78261b3f), X(0x783cbab2),
+  X(0x78532eaa), X(0x78697745), X(0x787f94a0), X(0x789586db),
+  X(0x78ab4e15), X(0x78c0ea6d), X(0x78d65c03), X(0x78eba2f7),
+  X(0x7900bf68), X(0x7915b179), X(0x792a7949), X(0x793f16fb),
+  X(0x79538aaf), X(0x7967d488), X(0x797bf4a8), X(0x798feb31),
+  X(0x79a3b846), X(0x79b75c0a), X(0x79cad6a1), X(0x79de282e),
+  X(0x79f150d5), X(0x7a0450bb), X(0x7a172803), X(0x7a29d6d3),
+  X(0x7a3c5d50), X(0x7a4ebb9f), X(0x7a60f1e6), X(0x7a73004a),
+  X(0x7a84e6f2), X(0x7a96a604), X(0x7aa83da7), X(0x7ab9ae01),
+  X(0x7acaf73a), X(0x7adc1979), X(0x7aed14e6), X(0x7afde9a8),
+  X(0x7b0e97e8), X(0x7b1f1fcd), X(0x7b2f8182), X(0x7b3fbd2d),
+  X(0x7b4fd2f9), X(0x7b5fc30f), X(0x7b6f8d98), X(0x7b7f32bd),
+  X(0x7b8eb2a9), X(0x7b9e0d85), X(0x7bad437d), X(0x7bbc54b9),
+  X(0x7bcb4166), X(0x7bda09ae), X(0x7be8adbc), X(0x7bf72dbc),
+  X(0x7c0589d8), X(0x7c13c23d), X(0x7c21d716), X(0x7c2fc88f),
+  X(0x7c3d96d5), X(0x7c4b4214), X(0x7c58ca78), X(0x7c66302d),
+  X(0x7c737362), X(0x7c809443), X(0x7c8d92fc), X(0x7c9a6fbc),
+  X(0x7ca72aaf), X(0x7cb3c404), X(0x7cc03be8), X(0x7ccc9288),
+  X(0x7cd8c814), X(0x7ce4dcb9), X(0x7cf0d0a5), X(0x7cfca406),
+  X(0x7d08570c), X(0x7d13e9e5), X(0x7d1f5cbf), X(0x7d2aafca),
+  X(0x7d35e335), X(0x7d40f72e), X(0x7d4bebe4), X(0x7d56c188),
+  X(0x7d617848), X(0x7d6c1054), X(0x7d7689db), X(0x7d80e50e),
+  X(0x7d8b221b), X(0x7d954133), X(0x7d9f4286), X(0x7da92643),
+  X(0x7db2ec9b), X(0x7dbc95bd), X(0x7dc621da), X(0x7dcf9123),
+  X(0x7dd8e3c6), X(0x7de219f6), X(0x7deb33e2), X(0x7df431ba),
+  X(0x7dfd13af), X(0x7e05d9f2), X(0x7e0e84b4), X(0x7e171424),
+  X(0x7e1f8874), X(0x7e27e1d4), X(0x7e302074), X(0x7e384487),
+  X(0x7e404e3c), X(0x7e483dc4), X(0x7e501350), X(0x7e57cf11),
+  X(0x7e5f7138), X(0x7e66f9f4), X(0x7e6e6979), X(0x7e75bff5),
+  X(0x7e7cfd9a), X(0x7e842298), X(0x7e8b2f22), X(0x7e922366),
+  X(0x7e98ff97), X(0x7e9fc3e4), X(0x7ea6707f), X(0x7ead0598),
+  X(0x7eb38360), X(0x7eb9ea07), X(0x7ec039bf), X(0x7ec672b7),
+  X(0x7ecc9521), X(0x7ed2a12c), X(0x7ed8970a), X(0x7ede76ea),
+  X(0x7ee440fd), X(0x7ee9f573), X(0x7eef947d), X(0x7ef51e4b),
+  X(0x7efa930d), X(0x7efff2f2), X(0x7f053e2b), X(0x7f0a74e8),
+  X(0x7f0f9758), X(0x7f14a5ac), X(0x7f19a013), X(0x7f1e86bc),
+  X(0x7f2359d8), X(0x7f281995), X(0x7f2cc623), X(0x7f315fb1),
+  X(0x7f35e66e), X(0x7f3a5a8a), X(0x7f3ebc33), X(0x7f430b98),
+  X(0x7f4748e7), X(0x7f4b7450), X(0x7f4f8e01), X(0x7f539629),
+  X(0x7f578cf5), X(0x7f5b7293), X(0x7f5f4732), X(0x7f630b00),
+  X(0x7f66be2b), X(0x7f6a60df), X(0x7f6df34b), X(0x7f71759b),
+  X(0x7f74e7fe), X(0x7f784aa0), X(0x7f7b9daf), X(0x7f7ee156),
+  X(0x7f8215c3), X(0x7f853b22), X(0x7f88519f), X(0x7f8b5967),
+  X(0x7f8e52a6), X(0x7f913d87), X(0x7f941a36), X(0x7f96e8df),
+  X(0x7f99a9ad), X(0x7f9c5ccb), X(0x7f9f0265), X(0x7fa19aa5),
+  X(0x7fa425b5), X(0x7fa6a3c1), X(0x7fa914f3), X(0x7fab7974),
+  X(0x7fadd16f), X(0x7fb01d0d), X(0x7fb25c78), X(0x7fb48fd9),
+  X(0x7fb6b75a), X(0x7fb8d323), X(0x7fbae35d), X(0x7fbce831),
+  X(0x7fbee1c7), X(0x7fc0d047), X(0x7fc2b3d9), X(0x7fc48ca5),
+  X(0x7fc65ad3), X(0x7fc81e88), X(0x7fc9d7ee), X(0x7fcb872a),
+  X(0x7fcd2c63), X(0x7fcec7bf), X(0x7fd05966), X(0x7fd1e17c),
+  X(0x7fd36027), X(0x7fd4d58d), X(0x7fd641d3), X(0x7fd7a51e),
+  X(0x7fd8ff94), X(0x7fda5157), X(0x7fdb9a8e), X(0x7fdcdb5b),
+  X(0x7fde13e2), X(0x7fdf4448), X(0x7fe06caf), X(0x7fe18d3b),
+  X(0x7fe2a60e), X(0x7fe3b74b), X(0x7fe4c114), X(0x7fe5c38b),
+  X(0x7fe6bed2), X(0x7fe7b30a), X(0x7fe8a055), X(0x7fe986d4),
+  X(0x7fea66a7), X(0x7feb3ff0), X(0x7fec12cd), X(0x7fecdf5f),
+  X(0x7feda5c5), X(0x7fee6620), X(0x7fef208d), X(0x7fefd52c),
+  X(0x7ff0841c), X(0x7ff12d7a), X(0x7ff1d164), X(0x7ff26ff9),
+  X(0x7ff30955), X(0x7ff39d96), X(0x7ff42cd9), X(0x7ff4b739),
+  X(0x7ff53cd4), X(0x7ff5bdc5), X(0x7ff63a28), X(0x7ff6b217),
+  X(0x7ff725af), X(0x7ff7950a), X(0x7ff80043), X(0x7ff86773),
+  X(0x7ff8cab4), X(0x7ff92a21), X(0x7ff985d1), X(0x7ff9dddf),
+  X(0x7ffa3262), X(0x7ffa8374), X(0x7ffad12c), X(0x7ffb1ba1),
+  X(0x7ffb62ec), X(0x7ffba723), X(0x7ffbe85c), X(0x7ffc26b0),
+  X(0x7ffc6233), X(0x7ffc9afb), X(0x7ffcd11e), X(0x7ffd04b1),
+  X(0x7ffd35c9), X(0x7ffd647b), X(0x7ffd90da), X(0x7ffdbafa),
+  X(0x7ffde2f0), X(0x7ffe08ce), X(0x7ffe2ca7), X(0x7ffe4e8e),
+  X(0x7ffe6e95), X(0x7ffe8cce), X(0x7ffea94a), X(0x7ffec41b),
+  X(0x7ffedd52), X(0x7ffef4ff), X(0x7fff0b33), X(0x7fff1ffd),
+  X(0x7fff336e), X(0x7fff4593), X(0x7fff567d), X(0x7fff663a),
+  X(0x7fff74d8), X(0x7fff8265), X(0x7fff8eee), X(0x7fff9a81),
+  X(0x7fffa52b), X(0x7fffaef8), X(0x7fffb7f5), X(0x7fffc02d),
+  X(0x7fffc7ab), X(0x7fffce7c), X(0x7fffd4a9), X(0x7fffda3e),
+  X(0x7fffdf44), X(0x7fffe3c6), X(0x7fffe7cc), X(0x7fffeb60),
+  X(0x7fffee8a), X(0x7ffff153), X(0x7ffff3c4), X(0x7ffff5e3),
+  X(0x7ffff7b8), X(0x7ffff94b), X(0x7ffffaa1), X(0x7ffffbc1),
+  X(0x7ffffcb2), X(0x7ffffd78), X(0x7ffffe19), X(0x7ffffe9a),
+  X(0x7ffffeff), X(0x7fffff4e), X(0x7fffff89), X(0x7fffffb3),
+  X(0x7fffffd2), X(0x7fffffe6), X(0x7ffffff3), X(0x7ffffffa),
+  X(0x7ffffffe), X(0x7fffffff), X(0x7fffffff), X(0x7fffffff),
+};
+
+static LOOKUP_T vwin4096[2048] = {
+  X(0x000001f0), X(0x00001171), X(0x00003072), X(0x00005ef5),
+  X(0x00009cf8), X(0x0000ea7c), X(0x00014780), X(0x0001b405),
+  X(0x0002300b), X(0x0002bb91), X(0x00035698), X(0x0004011e),
+  X(0x0004bb25), X(0x000584ac), X(0x00065db3), X(0x0007463a),
+  X(0x00083e41), X(0x000945c7), X(0x000a5ccc), X(0x000b8350),
+  X(0x000cb954), X(0x000dfed7), X(0x000f53d8), X(0x0010b857),
+  X(0x00122c55), X(0x0013afd1), X(0x001542ca), X(0x0016e541),
+  X(0x00189735), X(0x001a58a7), X(0x001c2995), X(0x001e09ff),
+  X(0x001ff9e6), X(0x0021f948), X(0x00240826), X(0x00262680),
+  X(0x00285454), X(0x002a91a3), X(0x002cde6c), X(0x002f3aaf),
+  X(0x0031a66b), X(0x003421a0), X(0x0036ac4f), X(0x00394675),
+  X(0x003bf014), X(0x003ea92a), X(0x004171b7), X(0x004449bb),
+  X(0x00473135), X(0x004a2824), X(0x004d2e8a), X(0x00504463),
+  X(0x005369b2), X(0x00569e74), X(0x0059e2aa), X(0x005d3652),
+  X(0x0060996d), X(0x00640bf9), X(0x00678df7), X(0x006b1f66),
+  X(0x006ec045), X(0x00727093), X(0x00763051), X(0x0079ff7d),
+  X(0x007dde16), X(0x0081cc1d), X(0x0085c991), X(0x0089d671),
+  X(0x008df2bc), X(0x00921e71), X(0x00965991), X(0x009aa41a),
+  X(0x009efe0c), X(0x00a36766), X(0x00a7e028), X(0x00ac6850),
+  X(0x00b0ffde), X(0x00b5a6d1), X(0x00ba5d28), X(0x00bf22e4),
+  X(0x00c3f802), X(0x00c8dc83), X(0x00cdd065), X(0x00d2d3a8),
+  X(0x00d7e64a), X(0x00dd084c), X(0x00e239ac), X(0x00e77a69),
+  X(0x00ecca83), X(0x00f229f9), X(0x00f798ca), X(0x00fd16f5),
+  X(0x0102a479), X(0x01084155), X(0x010ded89), X(0x0113a913),
+  X(0x011973f3), X(0x011f4e27), X(0x012537af), X(0x012b308a),
+  X(0x013138b7), X(0x01375035), X(0x013d7702), X(0x0143ad1f),
+  X(0x0149f289), X(0x01504741), X(0x0156ab44), X(0x015d1e92),
+  X(0x0163a12a), X(0x016a330b), X(0x0170d433), X(0x017784a3),
+  X(0x017e4458), X(0x01851351), X(0x018bf18e), X(0x0192df0d),
+  X(0x0199dbcd), X(0x01a0e7cd), X(0x01a8030c), X(0x01af2d89),
+  X(0x01b66743), X(0x01bdb038), X(0x01c50867), X(0x01cc6fd0),
+  X(0x01d3e670), X(0x01db6c47), X(0x01e30153), X(0x01eaa593),
+  X(0x01f25907), X(0x01fa1bac), X(0x0201ed81), X(0x0209ce86),
+  X(0x0211beb8), X(0x0219be17), X(0x0221cca2), X(0x0229ea56),
+  X(0x02321733), X(0x023a5337), X(0x02429e60), X(0x024af8af),
+  X(0x02536220), X(0x025bdab3), X(0x02646267), X(0x026cf93a),
+  X(0x02759f2a), X(0x027e5436), X(0x0287185d), X(0x028feb9d),
+  X(0x0298cdf4), X(0x02a1bf62), X(0x02aabfe5), X(0x02b3cf7b),
+  X(0x02bcee23), X(0x02c61bdb), X(0x02cf58a2), X(0x02d8a475),
+  X(0x02e1ff55), X(0x02eb693e), X(0x02f4e230), X(0x02fe6a29),
+  X(0x03080127), X(0x0311a729), X(0x031b5c2d), X(0x03252031),
+  X(0x032ef334), X(0x0338d534), X(0x0342c630), X(0x034cc625),
+  X(0x0356d512), X(0x0360f2f6), X(0x036b1fce), X(0x03755b99),
+  X(0x037fa655), X(0x038a0001), X(0x0394689a), X(0x039ee020),
+  X(0x03a9668f), X(0x03b3fbe6), X(0x03bea024), X(0x03c95347),
+  X(0x03d4154d), X(0x03dee633), X(0x03e9c5f9), X(0x03f4b49b),
+  X(0x03ffb219), X(0x040abe71), X(0x0415d9a0), X(0x042103a5),
+  X(0x042c3c7d), X(0x04378428), X(0x0442daa2), X(0x044e3fea),
+  X(0x0459b3fd), X(0x046536db), X(0x0470c880), X(0x047c68eb),
+  X(0x0488181a), X(0x0493d60b), X(0x049fa2bc), X(0x04ab7e2a),
+  X(0x04b76854), X(0x04c36137), X(0x04cf68d1), X(0x04db7f21),
+  X(0x04e7a424), X(0x04f3d7d8), X(0x05001a3b), X(0x050c6b4a),
+  X(0x0518cb04), X(0x05253966), X(0x0531b66e), X(0x053e421a),
+  X(0x054adc68), X(0x05578555), X(0x05643cdf), X(0x05710304),
+  X(0x057dd7c1), X(0x058abb15), X(0x0597acfd), X(0x05a4ad76),
+  X(0x05b1bc7f), X(0x05beda14), X(0x05cc0635), X(0x05d940dd),
+  X(0x05e68a0b), X(0x05f3e1bd), X(0x060147f0), X(0x060ebca1),
+  X(0x061c3fcf), X(0x0629d176), X(0x06377194), X(0x06452027),
+  X(0x0652dd2c), X(0x0660a8a2), X(0x066e8284), X(0x067c6ad1),
+  X(0x068a6186), X(0x069866a1), X(0x06a67a1e), X(0x06b49bfc),
+  X(0x06c2cc38), X(0x06d10acf), X(0x06df57bf), X(0x06edb304),
+  X(0x06fc1c9d), X(0x070a9487), X(0x07191abe), X(0x0727af40),
+  X(0x0736520b), X(0x0745031c), X(0x0753c270), X(0x07629004),
+  X(0x07716bd6), X(0x078055e2), X(0x078f4e26), X(0x079e549f),
+  X(0x07ad694b), X(0x07bc8c26), X(0x07cbbd2e), X(0x07dafc5f),
+  X(0x07ea49b7), X(0x07f9a533), X(0x08090ed1), X(0x0818868c),
+  X(0x08280c62), X(0x0837a051), X(0x08474255), X(0x0856f26b),
+  X(0x0866b091), X(0x08767cc3), X(0x088656fe), X(0x08963f3f),
+  X(0x08a63584), X(0x08b639c8), X(0x08c64c0a), X(0x08d66c45),
+  X(0x08e69a77), X(0x08f6d69d), X(0x090720b3), X(0x091778b7),
+  X(0x0927dea5), X(0x0938527a), X(0x0948d433), X(0x095963cc),
+  X(0x096a0143), X(0x097aac94), X(0x098b65bb), X(0x099c2cb6),
+  X(0x09ad0182), X(0x09bde41a), X(0x09ced47d), X(0x09dfd2a5),
+  X(0x09f0de90), X(0x0a01f83b), X(0x0a131fa3), X(0x0a2454c3),
+  X(0x0a359798), X(0x0a46e820), X(0x0a584656), X(0x0a69b237),
+  X(0x0a7b2bc0), X(0x0a8cb2ec), X(0x0a9e47ba), X(0x0aafea24),
+  X(0x0ac19a29), X(0x0ad357c3), X(0x0ae522ef), X(0x0af6fbab),
+  X(0x0b08e1f1), X(0x0b1ad5c0), X(0x0b2cd712), X(0x0b3ee5e5),
+  X(0x0b510234), X(0x0b632bfd), X(0x0b75633b), X(0x0b87a7eb),
+  X(0x0b99fa08), X(0x0bac5990), X(0x0bbec67e), X(0x0bd140cf),
+  X(0x0be3c87e), X(0x0bf65d89), X(0x0c08ffeb), X(0x0c1bafa1),
+  X(0x0c2e6ca6), X(0x0c4136f6), X(0x0c540e8f), X(0x0c66f36c),
+  X(0x0c79e588), X(0x0c8ce4e1), X(0x0c9ff172), X(0x0cb30b37),
+  X(0x0cc6322c), X(0x0cd9664d), X(0x0ceca797), X(0x0cfff605),
+  X(0x0d135193), X(0x0d26ba3d), X(0x0d3a2fff), X(0x0d4db2d5),
+  X(0x0d6142ba), X(0x0d74dfac), X(0x0d8889a5), X(0x0d9c40a1),
+  X(0x0db0049d), X(0x0dc3d593), X(0x0dd7b380), X(0x0deb9e60),
+  X(0x0dff962f), X(0x0e139ae7), X(0x0e27ac85), X(0x0e3bcb05),
+  X(0x0e4ff662), X(0x0e642e98), X(0x0e7873a2), X(0x0e8cc57d),
+  X(0x0ea12423), X(0x0eb58f91), X(0x0eca07c2), X(0x0ede8cb1),
+  X(0x0ef31e5b), X(0x0f07bcba), X(0x0f1c67cb), X(0x0f311f88),
+  X(0x0f45e3ee), X(0x0f5ab4f7), X(0x0f6f92a0), X(0x0f847ce3),
+  X(0x0f9973bc), X(0x0fae7726), X(0x0fc3871e), X(0x0fd8a39d),
+  X(0x0fedcca1), X(0x10030223), X(0x1018441f), X(0x102d9291),
+  X(0x1042ed74), X(0x105854c3), X(0x106dc879), X(0x10834892),
+  X(0x1098d508), X(0x10ae6dd8), X(0x10c412fc), X(0x10d9c46f),
+  X(0x10ef822d), X(0x11054c30), X(0x111b2274), X(0x113104f5),
+  X(0x1146f3ac), X(0x115cee95), X(0x1172f5ab), X(0x118908e9),
+  X(0x119f284a), X(0x11b553ca), X(0x11cb8b62), X(0x11e1cf0f),
+  X(0x11f81ecb), X(0x120e7a90), X(0x1224e25a), X(0x123b5624),
+  X(0x1251d5e9), X(0x126861a3), X(0x127ef94e), X(0x12959ce3),
+  X(0x12ac4c5f), X(0x12c307bb), X(0x12d9cef2), X(0x12f0a200),
+  X(0x130780df), X(0x131e6b8a), X(0x133561fa), X(0x134c642c),
+  X(0x1363721a), X(0x137a8bbe), X(0x1391b113), X(0x13a8e214),
+  X(0x13c01eba), X(0x13d76702), X(0x13eebae5), X(0x14061a5e),
+  X(0x141d8567), X(0x1434fbfb), X(0x144c7e14), X(0x14640bae),
+  X(0x147ba4c1), X(0x14934949), X(0x14aaf941), X(0x14c2b4a2),
+  X(0x14da7b67), X(0x14f24d8a), X(0x150a2b06), X(0x152213d5),
+  X(0x153a07f1), X(0x15520755), X(0x156a11fb), X(0x158227dd),
+  X(0x159a48f5), X(0x15b2753d), X(0x15caacb1), X(0x15e2ef49),
+  X(0x15fb3d01), X(0x161395d2), X(0x162bf9b6), X(0x164468a8),
+  X(0x165ce2a1), X(0x1675679c), X(0x168df793), X(0x16a69280),
+  X(0x16bf385c), X(0x16d7e922), X(0x16f0a4cc), X(0x17096b54),
+  X(0x17223cb4), X(0x173b18e5), X(0x1753ffe2), X(0x176cf1a5),
+  X(0x1785ee27), X(0x179ef562), X(0x17b80750), X(0x17d123eb),
+  X(0x17ea4b2d), X(0x18037d10), X(0x181cb98d), X(0x1836009e),
+  X(0x184f523c), X(0x1868ae63), X(0x1882150a), X(0x189b862c),
+  X(0x18b501c4), X(0x18ce87c9), X(0x18e81836), X(0x1901b305),
+  X(0x191b582f), X(0x193507ad), X(0x194ec17a), X(0x1968858f),
+  X(0x198253e5), X(0x199c2c75), X(0x19b60f3a), X(0x19cffc2d),
+  X(0x19e9f347), X(0x1a03f482), X(0x1a1dffd7), X(0x1a381540),
+  X(0x1a5234b5), X(0x1a6c5e31), X(0x1a8691ac), X(0x1aa0cf21),
+  X(0x1abb1687), X(0x1ad567da), X(0x1aefc311), X(0x1b0a2826),
+  X(0x1b249712), X(0x1b3f0fd0), X(0x1b599257), X(0x1b741ea1),
+  X(0x1b8eb4a7), X(0x1ba95462), X(0x1bc3fdcd), X(0x1bdeb0de),
+  X(0x1bf96d91), X(0x1c1433dd), X(0x1c2f03bc), X(0x1c49dd27),
+  X(0x1c64c017), X(0x1c7fac85), X(0x1c9aa269), X(0x1cb5a1be),
+  X(0x1cd0aa7c), X(0x1cebbc9c), X(0x1d06d816), X(0x1d21fce4),
+  X(0x1d3d2aff), X(0x1d586260), X(0x1d73a2fe), X(0x1d8eecd4),
+  X(0x1daa3fda), X(0x1dc59c09), X(0x1de1015a), X(0x1dfc6fc5),
+  X(0x1e17e743), X(0x1e3367cd), X(0x1e4ef15b), X(0x1e6a83e7),
+  X(0x1e861f6a), X(0x1ea1c3da), X(0x1ebd7133), X(0x1ed9276b),
+  X(0x1ef4e67c), X(0x1f10ae5e), X(0x1f2c7f0a), X(0x1f485879),
+  X(0x1f643aa2), X(0x1f80257f), X(0x1f9c1908), X(0x1fb81536),
+  X(0x1fd41a00), X(0x1ff02761), X(0x200c3d4f), X(0x20285bc3),
+  X(0x204482b7), X(0x2060b221), X(0x207ce9fb), X(0x20992a3e),
+  X(0x20b572e0), X(0x20d1c3dc), X(0x20ee1d28), X(0x210a7ebe),
+  X(0x2126e895), X(0x21435aa6), X(0x215fd4ea), X(0x217c5757),
+  X(0x2198e1e8), X(0x21b57493), X(0x21d20f51), X(0x21eeb21b),
+  X(0x220b5ce7), X(0x22280fb0), X(0x2244ca6c), X(0x22618d13),
+  X(0x227e579f), X(0x229b2a06), X(0x22b80442), X(0x22d4e649),
+  X(0x22f1d015), X(0x230ec19d), X(0x232bbad9), X(0x2348bbc1),
+  X(0x2365c44c), X(0x2382d474), X(0x239fec30), X(0x23bd0b78),
+  X(0x23da3244), X(0x23f7608b), X(0x24149646), X(0x2431d36c),
+  X(0x244f17f5), X(0x246c63da), X(0x2489b711), X(0x24a71193),
+  X(0x24c47358), X(0x24e1dc57), X(0x24ff4c88), X(0x251cc3e2),
+  X(0x253a425e), X(0x2557c7f4), X(0x2575549a), X(0x2592e848),
+  X(0x25b082f7), X(0x25ce249e), X(0x25ebcd34), X(0x26097cb2),
+  X(0x2627330e), X(0x2644f040), X(0x2662b441), X(0x26807f07),
+  X(0x269e5089), X(0x26bc28c1), X(0x26da07a4), X(0x26f7ed2b),
+  X(0x2715d94d), X(0x2733cc02), X(0x2751c540), X(0x276fc500),
+  X(0x278dcb39), X(0x27abd7e2), X(0x27c9eaf3), X(0x27e80463),
+  X(0x28062429), X(0x28244a3e), X(0x28427697), X(0x2860a92d),
+  X(0x287ee1f7), X(0x289d20eb), X(0x28bb6603), X(0x28d9b134),
+  X(0x28f80275), X(0x291659c0), X(0x2934b709), X(0x29531a49),
+  X(0x29718378), X(0x298ff28b), X(0x29ae677b), X(0x29cce23e),
+  X(0x29eb62cb), X(0x2a09e91b), X(0x2a287523), X(0x2a4706dc),
+  X(0x2a659e3c), X(0x2a843b39), X(0x2aa2ddcd), X(0x2ac185ec),
+  X(0x2ae0338f), X(0x2afee6ad), X(0x2b1d9f3c), X(0x2b3c5d33),
+  X(0x2b5b208b), X(0x2b79e939), X(0x2b98b734), X(0x2bb78a74),
+  X(0x2bd662ef), X(0x2bf5409d), X(0x2c142374), X(0x2c330b6b),
+  X(0x2c51f87a), X(0x2c70ea97), X(0x2c8fe1b9), X(0x2caeddd6),
+  X(0x2ccddee7), X(0x2cece4e1), X(0x2d0befbb), X(0x2d2aff6d),
+  X(0x2d4a13ec), X(0x2d692d31), X(0x2d884b32), X(0x2da76de4),
+  X(0x2dc69540), X(0x2de5c13d), X(0x2e04f1d0), X(0x2e2426f0),
+  X(0x2e436095), X(0x2e629eb4), X(0x2e81e146), X(0x2ea1283f),
+  X(0x2ec07398), X(0x2edfc347), X(0x2eff1742), X(0x2f1e6f80),
+  X(0x2f3dcbf8), X(0x2f5d2ca0), X(0x2f7c916f), X(0x2f9bfa5c),
+  X(0x2fbb675d), X(0x2fdad869), X(0x2ffa4d76), X(0x3019c67b),
+  X(0x3039436f), X(0x3058c448), X(0x307848fc), X(0x3097d183),
+  X(0x30b75dd3), X(0x30d6ede2), X(0x30f681a6), X(0x31161917),
+  X(0x3135b42b), X(0x315552d8), X(0x3174f514), X(0x31949ad7),
+  X(0x31b44417), X(0x31d3f0ca), X(0x31f3a0e6), X(0x32135462),
+  X(0x32330b35), X(0x3252c555), X(0x327282b7), X(0x32924354),
+  X(0x32b20720), X(0x32d1ce13), X(0x32f19823), X(0x33116546),
+  X(0x33313573), X(0x3351089f), X(0x3370dec2), X(0x3390b7d1),
+  X(0x33b093c3), X(0x33d0728f), X(0x33f05429), X(0x3410388a),
+  X(0x34301fa7), X(0x34500977), X(0x346ff5ef), X(0x348fe506),
+  X(0x34afd6b3), X(0x34cfcaeb), X(0x34efc1a5), X(0x350fbad7),
+  X(0x352fb678), X(0x354fb47d), X(0x356fb4dd), X(0x358fb78e),
+  X(0x35afbc86), X(0x35cfc3bc), X(0x35efcd25), X(0x360fd8b8),
+  X(0x362fe66c), X(0x364ff636), X(0x3670080c), X(0x36901be5),
+  X(0x36b031b7), X(0x36d04978), X(0x36f0631e), X(0x37107ea0),
+  X(0x37309bf3), X(0x3750bb0e), X(0x3770dbe6), X(0x3790fe73),
+  X(0x37b122aa), X(0x37d14881), X(0x37f16fee), X(0x381198e8),
+  X(0x3831c365), X(0x3851ef5a), X(0x38721cbe), X(0x38924b87),
+  X(0x38b27bac), X(0x38d2ad21), X(0x38f2dfde), X(0x391313d8),
+  X(0x39334906), X(0x39537f5d), X(0x3973b6d4), X(0x3993ef60),
+  X(0x39b428f9), X(0x39d46393), X(0x39f49f25), X(0x3a14dba6),
+  X(0x3a35190a), X(0x3a555748), X(0x3a759657), X(0x3a95d62c),
+  X(0x3ab616be), X(0x3ad65801), X(0x3af699ed), X(0x3b16dc78),
+  X(0x3b371f97), X(0x3b576341), X(0x3b77a76c), X(0x3b97ec0d),
+  X(0x3bb8311b), X(0x3bd8768b), X(0x3bf8bc55), X(0x3c19026d),
+  X(0x3c3948ca), X(0x3c598f62), X(0x3c79d62b), X(0x3c9a1d1b),
+  X(0x3cba6428), X(0x3cdaab48), X(0x3cfaf271), X(0x3d1b3999),
+  X(0x3d3b80b6), X(0x3d5bc7be), X(0x3d7c0ea8), X(0x3d9c5569),
+  X(0x3dbc9bf7), X(0x3ddce248), X(0x3dfd2852), X(0x3e1d6e0c),
+  X(0x3e3db36c), X(0x3e5df866), X(0x3e7e3cf2), X(0x3e9e8106),
+  X(0x3ebec497), X(0x3edf079b), X(0x3eff4a09), X(0x3f1f8bd7),
+  X(0x3f3fccfa), X(0x3f600d69), X(0x3f804d1a), X(0x3fa08c02),
+  X(0x3fc0ca19), X(0x3fe10753), X(0x400143a7), X(0x40217f0a),
+  X(0x4041b974), X(0x4061f2da), X(0x40822b32), X(0x40a26272),
+  X(0x40c29891), X(0x40e2cd83), X(0x41030140), X(0x412333bd),
+  X(0x414364f1), X(0x416394d2), X(0x4183c355), X(0x41a3f070),
+  X(0x41c41c1b), X(0x41e4464a), X(0x42046ef4), X(0x42249610),
+  X(0x4244bb92), X(0x4264df72), X(0x428501a5), X(0x42a52222),
+  X(0x42c540de), X(0x42e55dd0), X(0x430578ed), X(0x4325922d),
+  X(0x4345a985), X(0x4365beeb), X(0x4385d255), X(0x43a5e3ba),
+  X(0x43c5f30f), X(0x43e6004b), X(0x44060b65), X(0x44261451),
+  X(0x44461b07), X(0x44661f7c), X(0x448621a7), X(0x44a6217d),
+  X(0x44c61ef6), X(0x44e61a07), X(0x450612a6), X(0x452608ca),
+  X(0x4545fc69), X(0x4565ed79), X(0x4585dbf1), X(0x45a5c7c6),
+  X(0x45c5b0ef), X(0x45e59761), X(0x46057b15), X(0x46255bfe),
+  X(0x46453a15), X(0x4665154f), X(0x4684eda2), X(0x46a4c305),
+  X(0x46c4956e), X(0x46e464d3), X(0x4704312b), X(0x4723fa6c),
+  X(0x4743c08d), X(0x47638382), X(0x47834344), X(0x47a2ffc9),
+  X(0x47c2b906), X(0x47e26ef2), X(0x48022183), X(0x4821d0b1),
+  X(0x48417c71), X(0x486124b9), X(0x4880c981), X(0x48a06abe),
+  X(0x48c00867), X(0x48dfa272), X(0x48ff38d6), X(0x491ecb8a),
+  X(0x493e5a84), X(0x495de5b9), X(0x497d6d22), X(0x499cf0b4),
+  X(0x49bc7066), X(0x49dbec2e), X(0x49fb6402), X(0x4a1ad7db),
+  X(0x4a3a47ad), X(0x4a59b370), X(0x4a791b1a), X(0x4a987ea1),
+  X(0x4ab7ddfd), X(0x4ad73924), X(0x4af6900c), X(0x4b15e2ad),
+  X(0x4b3530fc), X(0x4b547af1), X(0x4b73c082), X(0x4b9301a6),
+  X(0x4bb23e53), X(0x4bd17681), X(0x4bf0aa25), X(0x4c0fd937),
+  X(0x4c2f03ae), X(0x4c4e297f), X(0x4c6d4aa3), X(0x4c8c670f),
+  X(0x4cab7eba), X(0x4cca919c), X(0x4ce99fab), X(0x4d08a8de),
+  X(0x4d27ad2c), X(0x4d46ac8b), X(0x4d65a6f3), X(0x4d849c5a),
+  X(0x4da38cb7), X(0x4dc27802), X(0x4de15e31), X(0x4e003f3a),
+  X(0x4e1f1b16), X(0x4e3df1ba), X(0x4e5cc31e), X(0x4e7b8f3a),
+  X(0x4e9a5603), X(0x4eb91771), X(0x4ed7d37b), X(0x4ef68a18),
+  X(0x4f153b3f), X(0x4f33e6e7), X(0x4f528d08), X(0x4f712d97),
+  X(0x4f8fc88e), X(0x4fae5de1), X(0x4fcced8a), X(0x4feb777f),
+  X(0x5009fbb6), X(0x50287a28), X(0x5046f2cc), X(0x50656598),
+  X(0x5083d284), X(0x50a23988), X(0x50c09a9a), X(0x50def5b1),
+  X(0x50fd4ac7), X(0x511b99d0), X(0x5139e2c5), X(0x5158259e),
+  X(0x51766251), X(0x519498d6), X(0x51b2c925), X(0x51d0f334),
+  X(0x51ef16fb), X(0x520d3473), X(0x522b4b91), X(0x52495c4e),
+  X(0x526766a2), X(0x52856a83), X(0x52a367e9), X(0x52c15ecd),
+  X(0x52df4f24), X(0x52fd38e8), X(0x531b1c10), X(0x5338f892),
+  X(0x5356ce68), X(0x53749d89), X(0x539265eb), X(0x53b02788),
+  X(0x53cde257), X(0x53eb964f), X(0x54094369), X(0x5426e99c),
+  X(0x544488df), X(0x5462212c), X(0x547fb279), X(0x549d3cbe),
+  X(0x54babff4), X(0x54d83c12), X(0x54f5b110), X(0x55131ee7),
+  X(0x5530858d), X(0x554de4fc), X(0x556b3d2a), X(0x55888e11),
+  X(0x55a5d7a8), X(0x55c319e7), X(0x55e054c7), X(0x55fd883f),
+  X(0x561ab447), X(0x5637d8d8), X(0x5654f5ea), X(0x56720b75),
+  X(0x568f1971), X(0x56ac1fd7), X(0x56c91e9e), X(0x56e615c0),
+  X(0x57030534), X(0x571fecf2), X(0x573cccf3), X(0x5759a530),
+  X(0x577675a0), X(0x57933e3c), X(0x57affefd), X(0x57ccb7db),
+  X(0x57e968ce), X(0x580611cf), X(0x5822b2d6), X(0x583f4bdd),
+  X(0x585bdcdb), X(0x587865c9), X(0x5894e69f), X(0x58b15f57),
+  X(0x58cdcfe9), X(0x58ea384e), X(0x5906987d), X(0x5922f071),
+  X(0x593f4022), X(0x595b8788), X(0x5977c69c), X(0x5993fd57),
+  X(0x59b02bb2), X(0x59cc51a6), X(0x59e86f2c), X(0x5a04843c),
+  X(0x5a2090d0), X(0x5a3c94e0), X(0x5a589065), X(0x5a748359),
+  X(0x5a906db4), X(0x5aac4f70), X(0x5ac82884), X(0x5ae3f8ec),
+  X(0x5affc09f), X(0x5b1b7f97), X(0x5b3735cd), X(0x5b52e33a),
+  X(0x5b6e87d8), X(0x5b8a239f), X(0x5ba5b689), X(0x5bc1408f),
+  X(0x5bdcc1aa), X(0x5bf839d5), X(0x5c13a907), X(0x5c2f0f3b),
+  X(0x5c4a6c6a), X(0x5c65c08d), X(0x5c810b9e), X(0x5c9c4d97),
+  X(0x5cb78670), X(0x5cd2b623), X(0x5ceddcaa), X(0x5d08f9ff),
+  X(0x5d240e1b), X(0x5d3f18f8), X(0x5d5a1a8f), X(0x5d7512da),
+  X(0x5d9001d3), X(0x5daae773), X(0x5dc5c3b5), X(0x5de09692),
+  X(0x5dfb6004), X(0x5e162004), X(0x5e30d68d), X(0x5e4b8399),
+  X(0x5e662721), X(0x5e80c11f), X(0x5e9b518e), X(0x5eb5d867),
+  X(0x5ed055a4), X(0x5eeac940), X(0x5f053334), X(0x5f1f937b),
+  X(0x5f39ea0f), X(0x5f5436ea), X(0x5f6e7a06), X(0x5f88b35d),
+  X(0x5fa2e2e9), X(0x5fbd08a6), X(0x5fd7248d), X(0x5ff13698),
+  X(0x600b3ec2), X(0x60253d05), X(0x603f315b), X(0x60591bc0),
+  X(0x6072fc2d), X(0x608cd29e), X(0x60a69f0b), X(0x60c06171),
+  X(0x60da19ca), X(0x60f3c80f), X(0x610d6c3d), X(0x6127064d),
+  X(0x6140963a), X(0x615a1bff), X(0x61739797), X(0x618d08fc),
+  X(0x61a67029), X(0x61bfcd1a), X(0x61d91fc8), X(0x61f2682f),
+  X(0x620ba64a), X(0x6224da13), X(0x623e0386), X(0x6257229d),
+  X(0x62703754), X(0x628941a6), X(0x62a2418e), X(0x62bb3706),
+  X(0x62d4220a), X(0x62ed0296), X(0x6305d8a3), X(0x631ea42f),
+  X(0x63376533), X(0x63501bab), X(0x6368c793), X(0x638168e5),
+  X(0x6399ff9e), X(0x63b28bb8), X(0x63cb0d2f), X(0x63e383ff),
+  X(0x63fbf022), X(0x64145195), X(0x642ca853), X(0x6444f457),
+  X(0x645d359e), X(0x64756c22), X(0x648d97e0), X(0x64a5b8d3),
+  X(0x64bdcef6), X(0x64d5da47), X(0x64eddabf), X(0x6505d05c),
+  X(0x651dbb19), X(0x65359af2), X(0x654d6fe3), X(0x656539e7),
+  X(0x657cf8fb), X(0x6594ad1b), X(0x65ac5643), X(0x65c3f46e),
+  X(0x65db8799), X(0x65f30fc0), X(0x660a8ce0), X(0x6621fef3),
+  X(0x663965f7), X(0x6650c1e7), X(0x666812c1), X(0x667f5880),
+  X(0x66969320), X(0x66adc29e), X(0x66c4e6f7), X(0x66dc0026),
+  X(0x66f30e28), X(0x670a10fa), X(0x67210898), X(0x6737f4ff),
+  X(0x674ed62b), X(0x6765ac19), X(0x677c76c5), X(0x6793362c),
+  X(0x67a9ea4b), X(0x67c0931f), X(0x67d730a3), X(0x67edc2d6),
+  X(0x680449b3), X(0x681ac538), X(0x68313562), X(0x68479a2d),
+  X(0x685df396), X(0x6874419b), X(0x688a8438), X(0x68a0bb6a),
+  X(0x68b6e72e), X(0x68cd0782), X(0x68e31c63), X(0x68f925cd),
+  X(0x690f23be), X(0x69251633), X(0x693afd29), X(0x6950d89e),
+  X(0x6966a88f), X(0x697c6cf8), X(0x699225d9), X(0x69a7d32d),
+  X(0x69bd74f3), X(0x69d30b27), X(0x69e895c8), X(0x69fe14d2),
+  X(0x6a138844), X(0x6a28f01b), X(0x6a3e4c54), X(0x6a539ced),
+  X(0x6a68e1e4), X(0x6a7e1b37), X(0x6a9348e3), X(0x6aa86ae6),
+  X(0x6abd813d), X(0x6ad28be7), X(0x6ae78ae2), X(0x6afc7e2b),
+  X(0x6b1165c0), X(0x6b26419f), X(0x6b3b11c7), X(0x6b4fd634),
+  X(0x6b648ee6), X(0x6b793bda), X(0x6b8ddd0e), X(0x6ba27281),
+  X(0x6bb6fc31), X(0x6bcb7a1b), X(0x6bdfec3e), X(0x6bf45299),
+  X(0x6c08ad29), X(0x6c1cfbed), X(0x6c313ee4), X(0x6c45760a),
+  X(0x6c59a160), X(0x6c6dc0e4), X(0x6c81d493), X(0x6c95dc6d),
+  X(0x6ca9d86f), X(0x6cbdc899), X(0x6cd1acea), X(0x6ce5855f),
+  X(0x6cf951f7), X(0x6d0d12b1), X(0x6d20c78c), X(0x6d347087),
+  X(0x6d480da0), X(0x6d5b9ed6), X(0x6d6f2427), X(0x6d829d94),
+  X(0x6d960b1a), X(0x6da96cb9), X(0x6dbcc270), X(0x6dd00c3c),
+  X(0x6de34a1f), X(0x6df67c16), X(0x6e09a221), X(0x6e1cbc3f),
+  X(0x6e2fca6e), X(0x6e42ccaf), X(0x6e55c300), X(0x6e68ad60),
+  X(0x6e7b8bd0), X(0x6e8e5e4d), X(0x6ea124d8), X(0x6eb3df70),
+  X(0x6ec68e13), X(0x6ed930c3), X(0x6eebc77d), X(0x6efe5242),
+  X(0x6f10d111), X(0x6f2343e9), X(0x6f35aacb), X(0x6f4805b5),
+  X(0x6f5a54a8), X(0x6f6c97a2), X(0x6f7ecea4), X(0x6f90f9ae),
+  X(0x6fa318be), X(0x6fb52bd6), X(0x6fc732f4), X(0x6fd92e19),
+  X(0x6feb1d44), X(0x6ffd0076), X(0x700ed7ad), X(0x7020a2eb),
+  X(0x7032622f), X(0x7044157a), X(0x7055bcca), X(0x70675821),
+  X(0x7078e77e), X(0x708a6ae2), X(0x709be24c), X(0x70ad4dbd),
+  X(0x70bead36), X(0x70d000b5), X(0x70e1483d), X(0x70f283cc),
+  X(0x7103b363), X(0x7114d704), X(0x7125eead), X(0x7136fa60),
+  X(0x7147fa1c), X(0x7158ede4), X(0x7169d5b6), X(0x717ab193),
+  X(0x718b817d), X(0x719c4573), X(0x71acfd76), X(0x71bda988),
+  X(0x71ce49a8), X(0x71deddd7), X(0x71ef6617), X(0x71ffe267),
+  X(0x721052ca), X(0x7220b73e), X(0x72310fc6), X(0x72415c62),
+  X(0x72519d14), X(0x7261d1db), X(0x7271faba), X(0x728217b1),
+  X(0x729228c0), X(0x72a22dea), X(0x72b22730), X(0x72c21491),
+  X(0x72d1f611), X(0x72e1cbaf), X(0x72f1956c), X(0x7301534c),
+  X(0x7311054d), X(0x7320ab72), X(0x733045bc), X(0x733fd42d),
+  X(0x734f56c5), X(0x735ecd86), X(0x736e3872), X(0x737d9789),
+  X(0x738ceacf), X(0x739c3243), X(0x73ab6de7), X(0x73ba9dbe),
+  X(0x73c9c1c8), X(0x73d8da08), X(0x73e7e67f), X(0x73f6e72e),
+  X(0x7405dc17), X(0x7414c53c), X(0x7423a29f), X(0x74327442),
+  X(0x74413a26), X(0x744ff44d), X(0x745ea2b9), X(0x746d456c),
+  X(0x747bdc68), X(0x748a67ae), X(0x7498e741), X(0x74a75b23),
+  X(0x74b5c356), X(0x74c41fdb), X(0x74d270b6), X(0x74e0b5e7),
+  X(0x74eeef71), X(0x74fd1d57), X(0x750b3f9a), X(0x7519563c),
+  X(0x75276140), X(0x753560a8), X(0x75435477), X(0x75513cae),
+  X(0x755f1951), X(0x756cea60), X(0x757aafdf), X(0x758869d1),
+  X(0x75961837), X(0x75a3bb14), X(0x75b1526a), X(0x75bede3c),
+  X(0x75cc5e8d), X(0x75d9d35f), X(0x75e73cb5), X(0x75f49a91),
+  X(0x7601ecf6), X(0x760f33e6), X(0x761c6f65), X(0x76299f74),
+  X(0x7636c417), X(0x7643dd51), X(0x7650eb24), X(0x765ded93),
+  X(0x766ae4a0), X(0x7677d050), X(0x7684b0a4), X(0x7691859f),
+  X(0x769e4f45), X(0x76ab0d98), X(0x76b7c09c), X(0x76c46852),
+  X(0x76d104bf), X(0x76dd95e6), X(0x76ea1bc9), X(0x76f6966b),
+  X(0x770305d0), X(0x770f69fb), X(0x771bc2ef), X(0x772810af),
+  X(0x7734533e), X(0x77408aa0), X(0x774cb6d7), X(0x7758d7e8),
+  X(0x7764edd5), X(0x7770f8a2), X(0x777cf852), X(0x7788ece8),
+  X(0x7794d668), X(0x77a0b4d5), X(0x77ac8833), X(0x77b85085),
+  X(0x77c40dce), X(0x77cfc013), X(0x77db6756), X(0x77e7039b),
+  X(0x77f294e6), X(0x77fe1b3b), X(0x7809969c), X(0x7815070e),
+  X(0x78206c93), X(0x782bc731), X(0x783716ea), X(0x78425bc3),
+  X(0x784d95be), X(0x7858c4e1), X(0x7863e92d), X(0x786f02a8),
+  X(0x787a1156), X(0x78851539), X(0x78900e56), X(0x789afcb1),
+  X(0x78a5e04d), X(0x78b0b92f), X(0x78bb875b), X(0x78c64ad4),
+  X(0x78d1039e), X(0x78dbb1be), X(0x78e65537), X(0x78f0ee0e),
+  X(0x78fb7c46), X(0x7905ffe4), X(0x791078ec), X(0x791ae762),
+  X(0x79254b4a), X(0x792fa4a7), X(0x7939f380), X(0x794437d7),
+  X(0x794e71b0), X(0x7958a111), X(0x7962c5fd), X(0x796ce078),
+  X(0x7976f087), X(0x7980f62f), X(0x798af173), X(0x7994e258),
+  X(0x799ec8e2), X(0x79a8a515), X(0x79b276f7), X(0x79bc3e8b),
+  X(0x79c5fbd6), X(0x79cfaedc), X(0x79d957a2), X(0x79e2f62c),
+  X(0x79ec8a7f), X(0x79f6149f), X(0x79ff9492), X(0x7a090a5a),
+  X(0x7a1275fe), X(0x7a1bd781), X(0x7a252ee9), X(0x7a2e7c39),
+  X(0x7a37bf77), X(0x7a40f8a7), X(0x7a4a27ce), X(0x7a534cf0),
+  X(0x7a5c6813), X(0x7a65793b), X(0x7a6e806d), X(0x7a777dad),
+  X(0x7a807100), X(0x7a895a6b), X(0x7a9239f4), X(0x7a9b0f9e),
+  X(0x7aa3db6f), X(0x7aac9d6b), X(0x7ab55597), X(0x7abe03f9),
+  X(0x7ac6a895), X(0x7acf4370), X(0x7ad7d48f), X(0x7ae05bf6),
+  X(0x7ae8d9ac), X(0x7af14db5), X(0x7af9b815), X(0x7b0218d2),
+  X(0x7b0a6ff2), X(0x7b12bd78), X(0x7b1b016a), X(0x7b233bce),
+  X(0x7b2b6ca7), X(0x7b3393fc), X(0x7b3bb1d1), X(0x7b43c62c),
+  X(0x7b4bd111), X(0x7b53d286), X(0x7b5bca90), X(0x7b63b935),
+  X(0x7b6b9e78), X(0x7b737a61), X(0x7b7b4cf3), X(0x7b831634),
+  X(0x7b8ad629), X(0x7b928cd8), X(0x7b9a3a45), X(0x7ba1de77),
+  X(0x7ba97972), X(0x7bb10b3c), X(0x7bb893d9), X(0x7bc01350),
+  X(0x7bc789a6), X(0x7bcef6e0), X(0x7bd65b03), X(0x7bddb616),
+  X(0x7be5081c), X(0x7bec511c), X(0x7bf3911b), X(0x7bfac81f),
+  X(0x7c01f62c), X(0x7c091b49), X(0x7c10377b), X(0x7c174ac7),
+  X(0x7c1e5532), X(0x7c2556c4), X(0x7c2c4f80), X(0x7c333f6c),
+  X(0x7c3a268e), X(0x7c4104ec), X(0x7c47da8a), X(0x7c4ea76f),
+  X(0x7c556ba1), X(0x7c5c2724), X(0x7c62d9fe), X(0x7c698435),
+  X(0x7c7025cf), X(0x7c76bed0), X(0x7c7d4f40), X(0x7c83d723),
+  X(0x7c8a567f), X(0x7c90cd5a), X(0x7c973bb9), X(0x7c9da1a2),
+  X(0x7ca3ff1b), X(0x7caa542a), X(0x7cb0a0d3), X(0x7cb6e51e),
+  X(0x7cbd210f), X(0x7cc354ac), X(0x7cc97ffc), X(0x7ccfa304),
+  X(0x7cd5bdc9), X(0x7cdbd051), X(0x7ce1daa3), X(0x7ce7dcc3),
+  X(0x7cedd6b8), X(0x7cf3c888), X(0x7cf9b238), X(0x7cff93cf),
+  X(0x7d056d51), X(0x7d0b3ec5), X(0x7d110830), X(0x7d16c99a),
+  X(0x7d1c8306), X(0x7d22347c), X(0x7d27de00), X(0x7d2d7f9a),
+  X(0x7d33194f), X(0x7d38ab24), X(0x7d3e351f), X(0x7d43b748),
+  X(0x7d4931a2), X(0x7d4ea435), X(0x7d540f06), X(0x7d59721b),
+  X(0x7d5ecd7b), X(0x7d64212a), X(0x7d696d2f), X(0x7d6eb190),
+  X(0x7d73ee53), X(0x7d79237e), X(0x7d7e5117), X(0x7d837723),
+  X(0x7d8895a9), X(0x7d8dacae), X(0x7d92bc3a), X(0x7d97c451),
+  X(0x7d9cc4f9), X(0x7da1be39), X(0x7da6b017), X(0x7dab9a99),
+  X(0x7db07dc4), X(0x7db5599e), X(0x7dba2e2f), X(0x7dbefb7b),
+  X(0x7dc3c189), X(0x7dc8805e), X(0x7dcd3802), X(0x7dd1e879),
+  X(0x7dd691ca), X(0x7ddb33fb), X(0x7ddfcf12), X(0x7de46315),
+  X(0x7de8f00a), X(0x7ded75f8), X(0x7df1f4e3), X(0x7df66cd3),
+  X(0x7dfaddcd), X(0x7dff47d7), X(0x7e03aaf8), X(0x7e080735),
+  X(0x7e0c5c95), X(0x7e10ab1e), X(0x7e14f2d5), X(0x7e1933c1),
+  X(0x7e1d6de8), X(0x7e21a150), X(0x7e25cdff), X(0x7e29f3fc),
+  X(0x7e2e134c), X(0x7e322bf5), X(0x7e363dfd), X(0x7e3a496b),
+  X(0x7e3e4e45), X(0x7e424c90), X(0x7e464454), X(0x7e4a3595),
+  X(0x7e4e205a), X(0x7e5204aa), X(0x7e55e289), X(0x7e59b9ff),
+  X(0x7e5d8b12), X(0x7e6155c7), X(0x7e651a24), X(0x7e68d831),
+  X(0x7e6c8ff2), X(0x7e70416e), X(0x7e73ecac), X(0x7e7791b0),
+  X(0x7e7b3082), X(0x7e7ec927), X(0x7e825ba6), X(0x7e85e804),
+  X(0x7e896e48), X(0x7e8cee77), X(0x7e906899), X(0x7e93dcb2),
+  X(0x7e974aca), X(0x7e9ab2e5), X(0x7e9e150b), X(0x7ea17141),
+  X(0x7ea4c78e), X(0x7ea817f7), X(0x7eab6283), X(0x7eaea737),
+  X(0x7eb1e61a), X(0x7eb51f33), X(0x7eb85285), X(0x7ebb8019),
+  X(0x7ebea7f4), X(0x7ec1ca1d), X(0x7ec4e698), X(0x7ec7fd6d),
+  X(0x7ecb0ea1), X(0x7ece1a3a), X(0x7ed1203f), X(0x7ed420b6),
+  X(0x7ed71ba4), X(0x7eda110f), X(0x7edd00ff), X(0x7edfeb78),
+  X(0x7ee2d081), X(0x7ee5b01f), X(0x7ee88a5a), X(0x7eeb5f36),
+  X(0x7eee2eba), X(0x7ef0f8ed), X(0x7ef3bdd3), X(0x7ef67d73),
+  X(0x7ef937d3), X(0x7efbecf9), X(0x7efe9ceb), X(0x7f0147ae),
+  X(0x7f03ed4a), X(0x7f068dc4), X(0x7f092922), X(0x7f0bbf69),
+  X(0x7f0e50a1), X(0x7f10dcce), X(0x7f1363f7), X(0x7f15e622),
+  X(0x7f186355), X(0x7f1adb95), X(0x7f1d4ee9), X(0x7f1fbd57),
+  X(0x7f2226e4), X(0x7f248b96), X(0x7f26eb74), X(0x7f294683),
+  X(0x7f2b9cc9), X(0x7f2dee4d), X(0x7f303b13), X(0x7f328322),
+  X(0x7f34c680), X(0x7f370533), X(0x7f393f40), X(0x7f3b74ad),
+  X(0x7f3da581), X(0x7f3fd1c1), X(0x7f41f972), X(0x7f441c9c),
+  X(0x7f463b43), X(0x7f48556d), X(0x7f4a6b21), X(0x7f4c7c64),
+  X(0x7f4e893c), X(0x7f5091ae), X(0x7f5295c1), X(0x7f54957a),
+  X(0x7f5690e0), X(0x7f5887f7), X(0x7f5a7ac5), X(0x7f5c6951),
+  X(0x7f5e53a0), X(0x7f6039b8), X(0x7f621b9e), X(0x7f63f958),
+  X(0x7f65d2ed), X(0x7f67a861), X(0x7f6979ba), X(0x7f6b46ff),
+  X(0x7f6d1034), X(0x7f6ed560), X(0x7f709687), X(0x7f7253b1),
+  X(0x7f740ce1), X(0x7f75c21f), X(0x7f777370), X(0x7f7920d8),
+  X(0x7f7aca5f), X(0x7f7c7008), X(0x7f7e11db), X(0x7f7fafdd),
+  X(0x7f814a13), X(0x7f82e082), X(0x7f847331), X(0x7f860224),
+  X(0x7f878d62), X(0x7f8914f0), X(0x7f8a98d4), X(0x7f8c1912),
+  X(0x7f8d95b0), X(0x7f8f0eb5), X(0x7f908425), X(0x7f91f605),
+  X(0x7f93645c), X(0x7f94cf2f), X(0x7f963683), X(0x7f979a5d),
+  X(0x7f98fac4), X(0x7f9a57bb), X(0x7f9bb14a), X(0x7f9d0775),
+  X(0x7f9e5a41), X(0x7f9fa9b4), X(0x7fa0f5d3), X(0x7fa23ea4),
+  X(0x7fa3842b), X(0x7fa4c66f), X(0x7fa60575), X(0x7fa74141),
+  X(0x7fa879d9), X(0x7fa9af42), X(0x7faae182), X(0x7fac109e),
+  X(0x7fad3c9a), X(0x7fae657d), X(0x7faf8b4c), X(0x7fb0ae0b),
+  X(0x7fb1cdc0), X(0x7fb2ea70), X(0x7fb40420), X(0x7fb51ad5),
+  X(0x7fb62e95), X(0x7fb73f64), X(0x7fb84d48), X(0x7fb95846),
+  X(0x7fba6062), X(0x7fbb65a2), X(0x7fbc680c), X(0x7fbd67a3),
+  X(0x7fbe646d), X(0x7fbf5e70), X(0x7fc055af), X(0x7fc14a31),
+  X(0x7fc23bf9), X(0x7fc32b0d), X(0x7fc41773), X(0x7fc5012e),
+  X(0x7fc5e844), X(0x7fc6ccba), X(0x7fc7ae94), X(0x7fc88dd8),
+  X(0x7fc96a8a), X(0x7fca44af), X(0x7fcb1c4c), X(0x7fcbf167),
+  X(0x7fccc403), X(0x7fcd9425), X(0x7fce61d3), X(0x7fcf2d11),
+  X(0x7fcff5e3), X(0x7fd0bc4f), X(0x7fd1805a), X(0x7fd24207),
+  X(0x7fd3015c), X(0x7fd3be5d), X(0x7fd47910), X(0x7fd53178),
+  X(0x7fd5e79b), X(0x7fd69b7c), X(0x7fd74d21), X(0x7fd7fc8e),
+  X(0x7fd8a9c8), X(0x7fd954d4), X(0x7fd9fdb5), X(0x7fdaa471),
+  X(0x7fdb490b), X(0x7fdbeb89), X(0x7fdc8bef), X(0x7fdd2a42),
+  X(0x7fddc685), X(0x7fde60be), X(0x7fdef8f0), X(0x7fdf8f20),
+  X(0x7fe02353), X(0x7fe0b58d), X(0x7fe145d3), X(0x7fe1d428),
+  X(0x7fe26091), X(0x7fe2eb12), X(0x7fe373b0), X(0x7fe3fa6f),
+  X(0x7fe47f53), X(0x7fe50260), X(0x7fe5839b), X(0x7fe60308),
+  X(0x7fe680ab), X(0x7fe6fc88), X(0x7fe776a4), X(0x7fe7ef02),
+  X(0x7fe865a7), X(0x7fe8da97), X(0x7fe94dd6), X(0x7fe9bf68),
+  X(0x7fea2f51), X(0x7fea9d95), X(0x7feb0a39), X(0x7feb7540),
+  X(0x7febdeae), X(0x7fec4687), X(0x7fecaccf), X(0x7fed118b),
+  X(0x7fed74be), X(0x7fedd66c), X(0x7fee3698), X(0x7fee9548),
+  X(0x7feef27e), X(0x7fef4e3f), X(0x7fefa88e), X(0x7ff0016f),
+  X(0x7ff058e7), X(0x7ff0aef8), X(0x7ff103a6), X(0x7ff156f6),
+  X(0x7ff1a8eb), X(0x7ff1f988), X(0x7ff248d2), X(0x7ff296cc),
+  X(0x7ff2e37a), X(0x7ff32edf), X(0x7ff378ff), X(0x7ff3c1de),
+  X(0x7ff4097e), X(0x7ff44fe5), X(0x7ff49515), X(0x7ff4d911),
+  X(0x7ff51bde), X(0x7ff55d7f), X(0x7ff59df7), X(0x7ff5dd4a),
+  X(0x7ff61b7b), X(0x7ff6588d), X(0x7ff69485), X(0x7ff6cf65),
+  X(0x7ff70930), X(0x7ff741eb), X(0x7ff77998), X(0x7ff7b03b),
+  X(0x7ff7e5d7), X(0x7ff81a6f), X(0x7ff84e06), X(0x7ff880a1),
+  X(0x7ff8b241), X(0x7ff8e2ea), X(0x7ff912a0), X(0x7ff94165),
+  X(0x7ff96f3d), X(0x7ff99c2b), X(0x7ff9c831), X(0x7ff9f354),
+  X(0x7ffa1d95), X(0x7ffa46f9), X(0x7ffa6f81), X(0x7ffa9731),
+  X(0x7ffabe0d), X(0x7ffae416), X(0x7ffb0951), X(0x7ffb2dbf),
+  X(0x7ffb5164), X(0x7ffb7442), X(0x7ffb965d), X(0x7ffbb7b8),
+  X(0x7ffbd854), X(0x7ffbf836), X(0x7ffc175f), X(0x7ffc35d3),
+  X(0x7ffc5394), X(0x7ffc70a5), X(0x7ffc8d09), X(0x7ffca8c2),
+  X(0x7ffcc3d4), X(0x7ffcde3f), X(0x7ffcf809), X(0x7ffd1132),
+  X(0x7ffd29be), X(0x7ffd41ae), X(0x7ffd5907), X(0x7ffd6fc9),
+  X(0x7ffd85f9), X(0x7ffd9b97), X(0x7ffdb0a7), X(0x7ffdc52b),
+  X(0x7ffdd926), X(0x7ffdec99), X(0x7ffdff88), X(0x7ffe11f4),
+  X(0x7ffe23e0), X(0x7ffe354f), X(0x7ffe4642), X(0x7ffe56bc),
+  X(0x7ffe66bf), X(0x7ffe764e), X(0x7ffe856a), X(0x7ffe9416),
+  X(0x7ffea254), X(0x7ffeb026), X(0x7ffebd8e), X(0x7ffeca8f),
+  X(0x7ffed72a), X(0x7ffee362), X(0x7ffeef38), X(0x7ffefaaf),
+  X(0x7fff05c9), X(0x7fff1087), X(0x7fff1aec), X(0x7fff24f9),
+  X(0x7fff2eb1), X(0x7fff3816), X(0x7fff4128), X(0x7fff49eb),
+  X(0x7fff5260), X(0x7fff5a88), X(0x7fff6266), X(0x7fff69fc),
+  X(0x7fff714b), X(0x7fff7854), X(0x7fff7f1a), X(0x7fff859f),
+  X(0x7fff8be3), X(0x7fff91ea), X(0x7fff97b3), X(0x7fff9d41),
+  X(0x7fffa296), X(0x7fffa7b3), X(0x7fffac99), X(0x7fffb14b),
+  X(0x7fffb5c9), X(0x7fffba15), X(0x7fffbe31), X(0x7fffc21d),
+  X(0x7fffc5dc), X(0x7fffc96f), X(0x7fffccd8), X(0x7fffd016),
+  X(0x7fffd32d), X(0x7fffd61c), X(0x7fffd8e7), X(0x7fffdb8d),
+  X(0x7fffde0f), X(0x7fffe071), X(0x7fffe2b1), X(0x7fffe4d2),
+  X(0x7fffe6d5), X(0x7fffe8bb), X(0x7fffea85), X(0x7fffec34),
+  X(0x7fffedc9), X(0x7fffef45), X(0x7ffff0aa), X(0x7ffff1f7),
+  X(0x7ffff330), X(0x7ffff453), X(0x7ffff562), X(0x7ffff65f),
+  X(0x7ffff749), X(0x7ffff823), X(0x7ffff8ec), X(0x7ffff9a6),
+  X(0x7ffffa51), X(0x7ffffaee), X(0x7ffffb7e), X(0x7ffffc02),
+  X(0x7ffffc7a), X(0x7ffffce7), X(0x7ffffd4a), X(0x7ffffda3),
+  X(0x7ffffdf4), X(0x7ffffe3c), X(0x7ffffe7c), X(0x7ffffeb6),
+  X(0x7ffffee8), X(0x7fffff15), X(0x7fffff3c), X(0x7fffff5e),
+  X(0x7fffff7b), X(0x7fffff95), X(0x7fffffaa), X(0x7fffffbc),
+  X(0x7fffffcb), X(0x7fffffd7), X(0x7fffffe2), X(0x7fffffea),
+  X(0x7ffffff0), X(0x7ffffff5), X(0x7ffffff9), X(0x7ffffffb),
+  X(0x7ffffffd), X(0x7ffffffe), X(0x7fffffff), X(0x7fffffff),
+  X(0x7fffffff), X(0x7fffffff), X(0x7fffffff), X(0x7fffffff),
+};
+
+#ifndef LIMIT_TO_64kHz
+
+static LOOKUP_T vwin8192[4096] = {
+  X(0x0000007c), X(0x0000045c), X(0x00000c1d), X(0x000017bd),
+  X(0x0000273e), X(0x00003a9f), X(0x000051e0), X(0x00006d02),
+  X(0x00008c03), X(0x0000aee5), X(0x0000d5a7), X(0x00010049),
+  X(0x00012ecb), X(0x0001612d), X(0x00019770), X(0x0001d193),
+  X(0x00020f96), X(0x00025178), X(0x0002973c), X(0x0002e0df),
+  X(0x00032e62), X(0x00037fc5), X(0x0003d509), X(0x00042e2c),
+  X(0x00048b30), X(0x0004ec13), X(0x000550d7), X(0x0005b97a),
+  X(0x000625fe), X(0x00069661), X(0x00070aa4), X(0x000782c8),
+  X(0x0007fecb), X(0x00087eae), X(0x00090271), X(0x00098a14),
+  X(0x000a1597), X(0x000aa4f9), X(0x000b383b), X(0x000bcf5d),
+  X(0x000c6a5f), X(0x000d0941), X(0x000dac02), X(0x000e52a3),
+  X(0x000efd23), X(0x000fab84), X(0x00105dc3), X(0x001113e3),
+  X(0x0011cde2), X(0x00128bc0), X(0x00134d7e), X(0x0014131b),
+  X(0x0014dc98), X(0x0015a9f4), X(0x00167b30), X(0x0017504a),
+  X(0x00182945), X(0x0019061e), X(0x0019e6d7), X(0x001acb6f),
+  X(0x001bb3e6), X(0x001ca03c), X(0x001d9071), X(0x001e8485),
+  X(0x001f7c79), X(0x0020784b), X(0x002177fc), X(0x00227b8c),
+  X(0x002382fb), X(0x00248e49), X(0x00259d76), X(0x0026b081),
+  X(0x0027c76b), X(0x0028e234), X(0x002a00dc), X(0x002b2361),
+  X(0x002c49c6), X(0x002d7409), X(0x002ea22a), X(0x002fd42a),
+  X(0x00310a08), X(0x003243c5), X(0x00338160), X(0x0034c2d9),
+  X(0x00360830), X(0x00375165), X(0x00389e78), X(0x0039ef6a),
+  X(0x003b4439), X(0x003c9ce6), X(0x003df971), X(0x003f59da),
+  X(0x0040be20), X(0x00422645), X(0x00439247), X(0x00450226),
+  X(0x004675e3), X(0x0047ed7e), X(0x004968f5), X(0x004ae84b),
+  X(0x004c6b7d), X(0x004df28d), X(0x004f7d7a), X(0x00510c44),
+  X(0x00529eeb), X(0x00543570), X(0x0055cfd1), X(0x00576e0f),
+  X(0x00591029), X(0x005ab621), X(0x005c5ff5), X(0x005e0da6),
+  X(0x005fbf33), X(0x0061749d), X(0x00632de4), X(0x0064eb06),
+  X(0x0066ac05), X(0x006870e0), X(0x006a3998), X(0x006c062b),
+  X(0x006dd69b), X(0x006faae6), X(0x0071830d), X(0x00735f10),
+  X(0x00753eef), X(0x007722a9), X(0x00790a3f), X(0x007af5b1),
+  X(0x007ce4fe), X(0x007ed826), X(0x0080cf29), X(0x0082ca08),
+  X(0x0084c8c2), X(0x0086cb57), X(0x0088d1c7), X(0x008adc11),
+  X(0x008cea37), X(0x008efc37), X(0x00911212), X(0x00932bc7),
+  X(0x00954957), X(0x00976ac2), X(0x00999006), X(0x009bb925),
+  X(0x009de61e), X(0x00a016f1), X(0x00a24b9e), X(0x00a48425),
+  X(0x00a6c086), X(0x00a900c0), X(0x00ab44d4), X(0x00ad8cc2),
+  X(0x00afd889), X(0x00b22829), X(0x00b47ba2), X(0x00b6d2f5),
+  X(0x00b92e21), X(0x00bb8d26), X(0x00bdf004), X(0x00c056ba),
+  X(0x00c2c149), X(0x00c52fb1), X(0x00c7a1f1), X(0x00ca180a),
+  X(0x00cc91fb), X(0x00cf0fc5), X(0x00d19166), X(0x00d416df),
+  X(0x00d6a031), X(0x00d92d5a), X(0x00dbbe5b), X(0x00de5333),
+  X(0x00e0ebe3), X(0x00e3886b), X(0x00e628c9), X(0x00e8ccff),
+  X(0x00eb750c), X(0x00ee20f0), X(0x00f0d0ab), X(0x00f3843d),
+  X(0x00f63ba5), X(0x00f8f6e4), X(0x00fbb5fa), X(0x00fe78e5),
+  X(0x01013fa7), X(0x01040a3f), X(0x0106d8ae), X(0x0109aaf2),
+  X(0x010c810c), X(0x010f5afb), X(0x011238c0), X(0x01151a5b),
+  X(0x0117ffcb), X(0x011ae910), X(0x011dd62a), X(0x0120c719),
+  X(0x0123bbdd), X(0x0126b476), X(0x0129b0e4), X(0x012cb126),
+  X(0x012fb53c), X(0x0132bd27), X(0x0135c8e6), X(0x0138d879),
+  X(0x013bebdf), X(0x013f031a), X(0x01421e28), X(0x01453d0a),
+  X(0x01485fbf), X(0x014b8648), X(0x014eb0a4), X(0x0151ded2),
+  X(0x015510d4), X(0x015846a8), X(0x015b8050), X(0x015ebdc9),
+  X(0x0161ff15), X(0x01654434), X(0x01688d24), X(0x016bd9e6),
+  X(0x016f2a7b), X(0x01727ee1), X(0x0175d718), X(0x01793321),
+  X(0x017c92fc), X(0x017ff6a7), X(0x01835e24), X(0x0186c972),
+  X(0x018a3890), X(0x018dab7f), X(0x0191223f), X(0x01949ccf),
+  X(0x01981b2f), X(0x019b9d5f), X(0x019f235f), X(0x01a2ad2f),
+  X(0x01a63acf), X(0x01a9cc3e), X(0x01ad617c), X(0x01b0fa8a),
+  X(0x01b49767), X(0x01b83813), X(0x01bbdc8d), X(0x01bf84d6),
+  X(0x01c330ee), X(0x01c6e0d4), X(0x01ca9488), X(0x01ce4c0b),
+  X(0x01d2075b), X(0x01d5c679), X(0x01d98964), X(0x01dd501d),
+  X(0x01e11aa3), X(0x01e4e8f6), X(0x01e8bb17), X(0x01ec9104),
+  X(0x01f06abd), X(0x01f44844), X(0x01f82996), X(0x01fc0eb5),
+  X(0x01fff7a0), X(0x0203e456), X(0x0207d4d9), X(0x020bc926),
+  X(0x020fc140), X(0x0213bd24), X(0x0217bcd4), X(0x021bc04e),
+  X(0x021fc793), X(0x0223d2a3), X(0x0227e17d), X(0x022bf421),
+  X(0x02300a90), X(0x023424c8), X(0x023842ca), X(0x023c6495),
+  X(0x02408a2a), X(0x0244b389), X(0x0248e0b0), X(0x024d11a0),
+  X(0x02514659), X(0x02557eda), X(0x0259bb24), X(0x025dfb35),
+  X(0x02623f0f), X(0x026686b1), X(0x026ad21a), X(0x026f214b),
+  X(0x02737443), X(0x0277cb02), X(0x027c2588), X(0x028083d5),
+  X(0x0284e5e9), X(0x02894bc2), X(0x028db562), X(0x029222c8),
+  X(0x029693f4), X(0x029b08e6), X(0x029f819d), X(0x02a3fe19),
+  X(0x02a87e5b), X(0x02ad0261), X(0x02b18a2c), X(0x02b615bb),
+  X(0x02baa50f), X(0x02bf3827), X(0x02c3cf03), X(0x02c869a3),
+  X(0x02cd0807), X(0x02d1aa2d), X(0x02d65017), X(0x02daf9c4),
+  X(0x02dfa734), X(0x02e45866), X(0x02e90d5b), X(0x02edc612),
+  X(0x02f2828b), X(0x02f742c6), X(0x02fc06c3), X(0x0300ce80),
+  X(0x030599ff), X(0x030a6940), X(0x030f3c40), X(0x03141302),
+  X(0x0318ed84), X(0x031dcbc6), X(0x0322adc8), X(0x0327938a),
+  X(0x032c7d0c), X(0x03316a4c), X(0x03365b4d), X(0x033b500c),
+  X(0x03404889), X(0x034544c6), X(0x034a44c0), X(0x034f4879),
+  X(0x03544ff0), X(0x03595b24), X(0x035e6a16), X(0x03637cc5),
+  X(0x03689331), X(0x036dad5a), X(0x0372cb40), X(0x0377ece2),
+  X(0x037d1240), X(0x03823b5a), X(0x03876830), X(0x038c98c1),
+  X(0x0391cd0e), X(0x03970516), X(0x039c40d8), X(0x03a18055),
+  X(0x03a6c38d), X(0x03ac0a7f), X(0x03b1552b), X(0x03b6a390),
+  X(0x03bbf5af), X(0x03c14b88), X(0x03c6a519), X(0x03cc0263),
+  X(0x03d16366), X(0x03d6c821), X(0x03dc3094), X(0x03e19cc0),
+  X(0x03e70ca2), X(0x03ec803d), X(0x03f1f78e), X(0x03f77296),
+  X(0x03fcf155), X(0x040273cb), X(0x0407f9f7), X(0x040d83d9),
+  X(0x04131170), X(0x0418a2bd), X(0x041e37c0), X(0x0423d077),
+  X(0x04296ce4), X(0x042f0d04), X(0x0434b0da), X(0x043a5863),
+  X(0x044003a0), X(0x0445b290), X(0x044b6534), X(0x04511b8b),
+  X(0x0456d595), X(0x045c9352), X(0x046254c1), X(0x046819e1),
+  X(0x046de2b4), X(0x0473af39), X(0x04797f6e), X(0x047f5355),
+  X(0x04852aec), X(0x048b0635), X(0x0490e52d), X(0x0496c7d6),
+  X(0x049cae2e), X(0x04a29836), X(0x04a885ed), X(0x04ae7753),
+  X(0x04b46c68), X(0x04ba652b), X(0x04c0619d), X(0x04c661bc),
+  X(0x04cc658a), X(0x04d26d04), X(0x04d8782c), X(0x04de8701),
+  X(0x04e49983), X(0x04eaafb0), X(0x04f0c98a), X(0x04f6e710),
+  X(0x04fd0842), X(0x05032d1e), X(0x050955a6), X(0x050f81d8),
+  X(0x0515b1b5), X(0x051be53d), X(0x05221c6e), X(0x05285748),
+  X(0x052e95cd), X(0x0534d7fa), X(0x053b1dd0), X(0x0541674e),
+  X(0x0547b475), X(0x054e0544), X(0x055459bb), X(0x055ab1d9),
+  X(0x05610d9e), X(0x05676d0a), X(0x056dd01c), X(0x057436d5),
+  X(0x057aa134), X(0x05810f38), X(0x058780e2), X(0x058df631),
+  X(0x05946f25), X(0x059aebbe), X(0x05a16bfa), X(0x05a7efdb),
+  X(0x05ae775f), X(0x05b50287), X(0x05bb9152), X(0x05c223c0),
+  X(0x05c8b9d0), X(0x05cf5382), X(0x05d5f0d6), X(0x05dc91cc),
+  X(0x05e33663), X(0x05e9de9c), X(0x05f08a75), X(0x05f739ee),
+  X(0x05fded07), X(0x0604a3c0), X(0x060b5e19), X(0x06121c11),
+  X(0x0618dda8), X(0x061fa2dd), X(0x06266bb1), X(0x062d3822),
+  X(0x06340831), X(0x063adbde), X(0x0641b328), X(0x06488e0e),
+  X(0x064f6c91), X(0x06564eaf), X(0x065d346a), X(0x06641dc0),
+  X(0x066b0ab1), X(0x0671fb3d), X(0x0678ef64), X(0x067fe724),
+  X(0x0686e27f), X(0x068de173), X(0x0694e400), X(0x069bea27),
+  X(0x06a2f3e6), X(0x06aa013d), X(0x06b1122c), X(0x06b826b3),
+  X(0x06bf3ed1), X(0x06c65a86), X(0x06cd79d1), X(0x06d49cb3),
+  X(0x06dbc32b), X(0x06e2ed38), X(0x06ea1adb), X(0x06f14c13),
+  X(0x06f880df), X(0x06ffb940), X(0x0706f535), X(0x070e34bd),
+  X(0x071577d9), X(0x071cbe88), X(0x072408c9), X(0x072b569d),
+  X(0x0732a802), X(0x0739fcf9), X(0x07415582), X(0x0748b19b),
+  X(0x07501145), X(0x0757747f), X(0x075edb49), X(0x076645a3),
+  X(0x076db38c), X(0x07752503), X(0x077c9a09), X(0x0784129e),
+  X(0x078b8ec0), X(0x07930e70), X(0x079a91ac), X(0x07a21876),
+  X(0x07a9a2cc), X(0x07b130ad), X(0x07b8c21b), X(0x07c05714),
+  X(0x07c7ef98), X(0x07cf8ba6), X(0x07d72b3f), X(0x07dece62),
+  X(0x07e6750e), X(0x07ee1f43), X(0x07f5cd01), X(0x07fd7e48),
+  X(0x08053316), X(0x080ceb6d), X(0x0814a74a), X(0x081c66af),
+  X(0x0824299a), X(0x082bf00c), X(0x0833ba03), X(0x083b8780),
+  X(0x08435882), X(0x084b2d09), X(0x08530514), X(0x085ae0a3),
+  X(0x0862bfb6), X(0x086aa24c), X(0x08728865), X(0x087a7201),
+  X(0x08825f1e), X(0x088a4fbe), X(0x089243de), X(0x089a3b80),
+  X(0x08a236a2), X(0x08aa3545), X(0x08b23767), X(0x08ba3d09),
+  X(0x08c2462a), X(0x08ca52c9), X(0x08d262e7), X(0x08da7682),
+  X(0x08e28d9c), X(0x08eaa832), X(0x08f2c645), X(0x08fae7d4),
+  X(0x09030cdf), X(0x090b3566), X(0x09136168), X(0x091b90e5),
+  X(0x0923c3dc), X(0x092bfa4d), X(0x09343437), X(0x093c719b),
+  X(0x0944b277), X(0x094cf6cc), X(0x09553e99), X(0x095d89dd),
+  X(0x0965d899), X(0x096e2acb), X(0x09768073), X(0x097ed991),
+  X(0x09873625), X(0x098f962e), X(0x0997f9ac), X(0x09a0609e),
+  X(0x09a8cb04), X(0x09b138dd), X(0x09b9aa29), X(0x09c21ee8),
+  X(0x09ca9719), X(0x09d312bc), X(0x09db91d0), X(0x09e41456),
+  X(0x09ec9a4b), X(0x09f523b1), X(0x09fdb087), X(0x0a0640cc),
+  X(0x0a0ed47f), X(0x0a176ba2), X(0x0a200632), X(0x0a28a42f),
+  X(0x0a31459a), X(0x0a39ea72), X(0x0a4292b5), X(0x0a4b3e65),
+  X(0x0a53ed80), X(0x0a5ca006), X(0x0a6555f7), X(0x0a6e0f51),
+  X(0x0a76cc16), X(0x0a7f8c44), X(0x0a884fda), X(0x0a9116d9),
+  X(0x0a99e140), X(0x0aa2af0e), X(0x0aab8043), X(0x0ab454df),
+  X(0x0abd2ce1), X(0x0ac60849), X(0x0acee716), X(0x0ad7c948),
+  X(0x0ae0aedf), X(0x0ae997d9), X(0x0af28437), X(0x0afb73f7),
+  X(0x0b04671b), X(0x0b0d5da0), X(0x0b165788), X(0x0b1f54d0),
+  X(0x0b285579), X(0x0b315983), X(0x0b3a60ec), X(0x0b436bb5),
+  X(0x0b4c79dd), X(0x0b558b63), X(0x0b5ea048), X(0x0b67b88a),
+  X(0x0b70d429), X(0x0b79f324), X(0x0b83157c), X(0x0b8c3b30),
+  X(0x0b95643f), X(0x0b9e90a8), X(0x0ba7c06c), X(0x0bb0f38a),
+  X(0x0bba2a01), X(0x0bc363d1), X(0x0bcca0f9), X(0x0bd5e17a),
+  X(0x0bdf2552), X(0x0be86c81), X(0x0bf1b706), X(0x0bfb04e2),
+  X(0x0c045613), X(0x0c0daa99), X(0x0c170274), X(0x0c205da3),
+  X(0x0c29bc25), X(0x0c331dfb), X(0x0c3c8323), X(0x0c45eb9e),
+  X(0x0c4f576a), X(0x0c58c688), X(0x0c6238f6), X(0x0c6baeb5),
+  X(0x0c7527c3), X(0x0c7ea421), X(0x0c8823cd), X(0x0c91a6c8),
+  X(0x0c9b2d10), X(0x0ca4b6a6), X(0x0cae4389), X(0x0cb7d3b8),
+  X(0x0cc16732), X(0x0ccafdf8), X(0x0cd49809), X(0x0cde3564),
+  X(0x0ce7d609), X(0x0cf179f7), X(0x0cfb212e), X(0x0d04cbad),
+  X(0x0d0e7974), X(0x0d182a83), X(0x0d21ded8), X(0x0d2b9673),
+  X(0x0d355154), X(0x0d3f0f7b), X(0x0d48d0e6), X(0x0d529595),
+  X(0x0d5c5d88), X(0x0d6628be), X(0x0d6ff737), X(0x0d79c8f2),
+  X(0x0d839dee), X(0x0d8d762c), X(0x0d9751aa), X(0x0da13068),
+  X(0x0dab1266), X(0x0db4f7a3), X(0x0dbee01e), X(0x0dc8cbd8),
+  X(0x0dd2bace), X(0x0ddcad02), X(0x0de6a272), X(0x0df09b1e),
+  X(0x0dfa9705), X(0x0e049627), X(0x0e0e9883), X(0x0e189e19),
+  X(0x0e22a6e8), X(0x0e2cb2f0), X(0x0e36c230), X(0x0e40d4a8),
+  X(0x0e4aea56), X(0x0e55033b), X(0x0e5f1f56), X(0x0e693ea7),
+  X(0x0e73612c), X(0x0e7d86e5), X(0x0e87afd3), X(0x0e91dbf3),
+  X(0x0e9c0b47), X(0x0ea63dcc), X(0x0eb07383), X(0x0ebaac6b),
+  X(0x0ec4e883), X(0x0ecf27cc), X(0x0ed96a44), X(0x0ee3afea),
+  X(0x0eedf8bf), X(0x0ef844c2), X(0x0f0293f2), X(0x0f0ce64e),
+  X(0x0f173bd6), X(0x0f21948a), X(0x0f2bf069), X(0x0f364f72),
+  X(0x0f40b1a5), X(0x0f4b1701), X(0x0f557f86), X(0x0f5feb32),
+  X(0x0f6a5a07), X(0x0f74cc02), X(0x0f7f4124), X(0x0f89b96b),
+  X(0x0f9434d8), X(0x0f9eb369), X(0x0fa9351e), X(0x0fb3b9f7),
+  X(0x0fbe41f3), X(0x0fc8cd11), X(0x0fd35b51), X(0x0fddecb2),
+  X(0x0fe88134), X(0x0ff318d6), X(0x0ffdb397), X(0x10085177),
+  X(0x1012f275), X(0x101d9691), X(0x10283dca), X(0x1032e81f),
+  X(0x103d9591), X(0x1048461e), X(0x1052f9c5), X(0x105db087),
+  X(0x10686a62), X(0x10732756), X(0x107de763), X(0x1088aa87),
+  X(0x109370c2), X(0x109e3a14), X(0x10a9067c), X(0x10b3d5f9),
+  X(0x10bea88b), X(0x10c97e31), X(0x10d456eb), X(0x10df32b8),
+  X(0x10ea1197), X(0x10f4f387), X(0x10ffd889), X(0x110ac09b),
+  X(0x1115abbe), X(0x112099ef), X(0x112b8b2f), X(0x11367f7d),
+  X(0x114176d9), X(0x114c7141), X(0x11576eb6), X(0x11626f36),
+  X(0x116d72c1), X(0x11787957), X(0x118382f6), X(0x118e8f9e),
+  X(0x11999f4f), X(0x11a4b208), X(0x11afc7c7), X(0x11bae08e),
+  X(0x11c5fc5a), X(0x11d11b2c), X(0x11dc3d02), X(0x11e761dd),
+  X(0x11f289ba), X(0x11fdb49b), X(0x1208e27e), X(0x12141362),
+  X(0x121f4748), X(0x122a7e2d), X(0x1235b812), X(0x1240f4f6),
+  X(0x124c34d9), X(0x125777b9), X(0x1262bd96), X(0x126e0670),
+  X(0x12795245), X(0x1284a115), X(0x128ff2e0), X(0x129b47a5),
+  X(0x12a69f63), X(0x12b1fa19), X(0x12bd57c7), X(0x12c8b86c),
+  X(0x12d41c08), X(0x12df829a), X(0x12eaec21), X(0x12f6589d),
+  X(0x1301c80c), X(0x130d3a6f), X(0x1318afc4), X(0x1324280b),
+  X(0x132fa344), X(0x133b216d), X(0x1346a286), X(0x1352268e),
+  X(0x135dad85), X(0x1369376a), X(0x1374c43c), X(0x138053fb),
+  X(0x138be6a5), X(0x13977c3b), X(0x13a314bc), X(0x13aeb026),
+  X(0x13ba4e79), X(0x13c5efb5), X(0x13d193d9), X(0x13dd3ae4),
+  X(0x13e8e4d6), X(0x13f491ad), X(0x1400416a), X(0x140bf40b),
+  X(0x1417a98f), X(0x142361f7), X(0x142f1d41), X(0x143adb6d),
+  X(0x14469c7a), X(0x14526067), X(0x145e2734), X(0x1469f0df),
+  X(0x1475bd69), X(0x14818cd0), X(0x148d5f15), X(0x14993435),
+  X(0x14a50c31), X(0x14b0e708), X(0x14bcc4b8), X(0x14c8a542),
+  X(0x14d488a5), X(0x14e06edf), X(0x14ec57f1), X(0x14f843d9),
+  X(0x15043297), X(0x1510242b), X(0x151c1892), X(0x15280fcd),
+  X(0x153409dc), X(0x154006bc), X(0x154c066e), X(0x155808f1),
+  X(0x15640e44), X(0x15701666), X(0x157c2157), X(0x15882f16),
+  X(0x15943fa2), X(0x15a052fb), X(0x15ac691f), X(0x15b8820f),
+  X(0x15c49dc8), X(0x15d0bc4c), X(0x15dcdd98), X(0x15e901ad),
+  X(0x15f52888), X(0x1601522b), X(0x160d7e93), X(0x1619adc1),
+  X(0x1625dfb3), X(0x16321469), X(0x163e4be2), X(0x164a861d),
+  X(0x1656c31a), X(0x166302d8), X(0x166f4555), X(0x167b8a92),
+  X(0x1687d28e), X(0x16941d47), X(0x16a06abe), X(0x16acbaf0),
+  X(0x16b90ddf), X(0x16c56388), X(0x16d1bbeb), X(0x16de1708),
+  X(0x16ea74dd), X(0x16f6d56a), X(0x170338ae), X(0x170f9ea8),
+  X(0x171c0758), X(0x172872bd), X(0x1734e0d6), X(0x174151a2),
+  X(0x174dc520), X(0x175a3b51), X(0x1766b432), X(0x17732fc4),
+  X(0x177fae05), X(0x178c2ef4), X(0x1798b292), X(0x17a538dd),
+  X(0x17b1c1d4), X(0x17be4d77), X(0x17cadbc5), X(0x17d76cbc),
+  X(0x17e4005e), X(0x17f096a7), X(0x17fd2f98), X(0x1809cb31),
+  X(0x1816696f), X(0x18230a53), X(0x182faddc), X(0x183c5408),
+  X(0x1848fcd8), X(0x1855a849), X(0x1862565d), X(0x186f0711),
+  X(0x187bba64), X(0x18887057), X(0x189528e9), X(0x18a1e418),
+  X(0x18aea1e3), X(0x18bb624b), X(0x18c8254e), X(0x18d4eaeb),
+  X(0x18e1b321), X(0x18ee7df1), X(0x18fb4b58), X(0x19081b57),
+  X(0x1914edec), X(0x1921c317), X(0x192e9ad6), X(0x193b7529),
+  X(0x19485210), X(0x19553189), X(0x19621393), X(0x196ef82e),
+  X(0x197bdf59), X(0x1988c913), X(0x1995b55c), X(0x19a2a432),
+  X(0x19af9595), X(0x19bc8983), X(0x19c97ffd), X(0x19d67900),
+  X(0x19e3748e), X(0x19f072a3), X(0x19fd7341), X(0x1a0a7665),
+  X(0x1a177c10), X(0x1a248440), X(0x1a318ef4), X(0x1a3e9c2c),
+  X(0x1a4babe7), X(0x1a58be24), X(0x1a65d2e2), X(0x1a72ea20),
+  X(0x1a8003de), X(0x1a8d201a), X(0x1a9a3ed5), X(0x1aa7600c),
+  X(0x1ab483bf), X(0x1ac1a9ee), X(0x1aced297), X(0x1adbfdba),
+  X(0x1ae92b56), X(0x1af65b69), X(0x1b038df4), X(0x1b10c2f5),
+  X(0x1b1dfa6b), X(0x1b2b3456), X(0x1b3870b5), X(0x1b45af87),
+  X(0x1b52f0ca), X(0x1b60347f), X(0x1b6d7aa4), X(0x1b7ac339),
+  X(0x1b880e3c), X(0x1b955bad), X(0x1ba2ab8b), X(0x1baffdd5),
+  X(0x1bbd528a), X(0x1bcaa9a9), X(0x1bd80332), X(0x1be55f24),
+  X(0x1bf2bd7d), X(0x1c001e3d), X(0x1c0d8164), X(0x1c1ae6ef),
+  X(0x1c284edf), X(0x1c35b932), X(0x1c4325e7), X(0x1c5094fe),
+  X(0x1c5e0677), X(0x1c6b7a4f), X(0x1c78f086), X(0x1c86691b),
+  X(0x1c93e40d), X(0x1ca1615c), X(0x1caee107), X(0x1cbc630c),
+  X(0x1cc9e76b), X(0x1cd76e23), X(0x1ce4f733), X(0x1cf2829a),
+  X(0x1d001057), X(0x1d0da06a), X(0x1d1b32d1), X(0x1d28c78c),
+  X(0x1d365e9a), X(0x1d43f7f9), X(0x1d5193a9), X(0x1d5f31aa),
+  X(0x1d6cd1f9), X(0x1d7a7497), X(0x1d881982), X(0x1d95c0ba),
+  X(0x1da36a3d), X(0x1db1160a), X(0x1dbec422), X(0x1dcc7482),
+  X(0x1dda272b), X(0x1de7dc1a), X(0x1df59350), X(0x1e034ccb),
+  X(0x1e11088a), X(0x1e1ec68c), X(0x1e2c86d1), X(0x1e3a4958),
+  X(0x1e480e20), X(0x1e55d527), X(0x1e639e6d), X(0x1e7169f1),
+  X(0x1e7f37b2), X(0x1e8d07b0), X(0x1e9ad9e8), X(0x1ea8ae5b),
+  X(0x1eb68507), X(0x1ec45dec), X(0x1ed23908), X(0x1ee0165b),
+  X(0x1eedf5e4), X(0x1efbd7a1), X(0x1f09bb92), X(0x1f17a1b6),
+  X(0x1f258a0d), X(0x1f337494), X(0x1f41614b), X(0x1f4f5032),
+  X(0x1f5d4147), X(0x1f6b3489), X(0x1f7929f7), X(0x1f872192),
+  X(0x1f951b56), X(0x1fa31744), X(0x1fb1155b), X(0x1fbf159a),
+  X(0x1fcd17ff), X(0x1fdb1c8b), X(0x1fe9233b), X(0x1ff72c0f),
+  X(0x20053706), X(0x20134420), X(0x2021535a), X(0x202f64b4),
+  X(0x203d782e), X(0x204b8dc6), X(0x2059a57c), X(0x2067bf4e),
+  X(0x2075db3b), X(0x2083f943), X(0x20921964), X(0x20a03b9e),
+  X(0x20ae5fef), X(0x20bc8657), X(0x20caaed5), X(0x20d8d967),
+  X(0x20e7060e), X(0x20f534c7), X(0x21036592), X(0x2111986e),
+  X(0x211fcd59), X(0x212e0454), X(0x213c3d5d), X(0x214a7873),
+  X(0x2158b594), X(0x2166f4c1), X(0x217535f8), X(0x21837938),
+  X(0x2191be81), X(0x21a005d0), X(0x21ae4f26), X(0x21bc9a81),
+  X(0x21cae7e0), X(0x21d93743), X(0x21e788a8), X(0x21f5dc0e),
+  X(0x22043174), X(0x221288da), X(0x2220e23e), X(0x222f3da0),
+  X(0x223d9afe), X(0x224bfa58), X(0x225a5bac), X(0x2268bef9),
+  X(0x2277243f), X(0x22858b7d), X(0x2293f4b0), X(0x22a25fda),
+  X(0x22b0ccf8), X(0x22bf3c09), X(0x22cdad0d), X(0x22dc2002),
+  X(0x22ea94e8), X(0x22f90bbe), X(0x23078482), X(0x2315ff33),
+  X(0x23247bd1), X(0x2332fa5b), X(0x23417acf), X(0x234ffd2c),
+  X(0x235e8173), X(0x236d07a0), X(0x237b8fb4), X(0x238a19ae),
+  X(0x2398a58c), X(0x23a7334d), X(0x23b5c2f1), X(0x23c45477),
+  X(0x23d2e7dd), X(0x23e17d22), X(0x23f01446), X(0x23fead47),
+  X(0x240d4825), X(0x241be4dd), X(0x242a8371), X(0x243923dd),
+  X(0x2447c622), X(0x24566a3e), X(0x24651031), X(0x2473b7f8),
+  X(0x24826194), X(0x24910d03), X(0x249fba44), X(0x24ae6957),
+  X(0x24bd1a39), X(0x24cbccea), X(0x24da816a), X(0x24e937b7),
+  X(0x24f7efcf), X(0x2506a9b3), X(0x25156560), X(0x252422d6),
+  X(0x2532e215), X(0x2541a31a), X(0x255065e4), X(0x255f2a74),
+  X(0x256df0c7), X(0x257cb8dd), X(0x258b82b4), X(0x259a4e4c),
+  X(0x25a91ba4), X(0x25b7eaba), X(0x25c6bb8e), X(0x25d58e1e),
+  X(0x25e46269), X(0x25f3386e), X(0x2602102d), X(0x2610e9a4),
+  X(0x261fc4d3), X(0x262ea1b7), X(0x263d8050), X(0x264c609e),
+  X(0x265b429e), X(0x266a2650), X(0x26790bb3), X(0x2687f2c6),
+  X(0x2696db88), X(0x26a5c5f7), X(0x26b4b213), X(0x26c39fda),
+  X(0x26d28f4c), X(0x26e18067), X(0x26f0732b), X(0x26ff6796),
+  X(0x270e5da7), X(0x271d555d), X(0x272c4eb7), X(0x273b49b5),
+  X(0x274a4654), X(0x27594495), X(0x27684475), X(0x277745f4),
+  X(0x27864910), X(0x27954dc9), X(0x27a4541e), X(0x27b35c0d),
+  X(0x27c26596), X(0x27d170b7), X(0x27e07d6f), X(0x27ef8bbd),
+  X(0x27fe9ba0), X(0x280dad18), X(0x281cc022), X(0x282bd4be),
+  X(0x283aeaeb), X(0x284a02a7), X(0x28591bf2), X(0x286836cb),
+  X(0x28775330), X(0x28867120), X(0x2895909b), X(0x28a4b19e),
+  X(0x28b3d42a), X(0x28c2f83d), X(0x28d21dd5), X(0x28e144f3),
+  X(0x28f06d94), X(0x28ff97b8), X(0x290ec35d), X(0x291df082),
+  X(0x292d1f27), X(0x293c4f4a), X(0x294b80eb), X(0x295ab407),
+  X(0x2969e89e), X(0x29791eaf), X(0x29885639), X(0x29978f3b),
+  X(0x29a6c9b3), X(0x29b605a0), X(0x29c54302), X(0x29d481d7),
+  X(0x29e3c21e), X(0x29f303d6), X(0x2a0246fd), X(0x2a118b94),
+  X(0x2a20d198), X(0x2a301909), X(0x2a3f61e6), X(0x2a4eac2c),
+  X(0x2a5df7dc), X(0x2a6d44f4), X(0x2a7c9374), X(0x2a8be359),
+  X(0x2a9b34a2), X(0x2aaa8750), X(0x2ab9db60), X(0x2ac930d1),
+  X(0x2ad887a3), X(0x2ae7dfd3), X(0x2af73962), X(0x2b06944e),
+  X(0x2b15f096), X(0x2b254e38), X(0x2b34ad34), X(0x2b440d89),
+  X(0x2b536f34), X(0x2b62d236), X(0x2b72368d), X(0x2b819c38),
+  X(0x2b910336), X(0x2ba06b86), X(0x2bafd526), X(0x2bbf4015),
+  X(0x2bceac53), X(0x2bde19de), X(0x2bed88b5), X(0x2bfcf8d7),
+  X(0x2c0c6a43), X(0x2c1bdcf7), X(0x2c2b50f3), X(0x2c3ac635),
+  X(0x2c4a3cbd), X(0x2c59b488), X(0x2c692d97), X(0x2c78a7e7),
+  X(0x2c882378), X(0x2c97a049), X(0x2ca71e58), X(0x2cb69da4),
+  X(0x2cc61e2c), X(0x2cd59ff0), X(0x2ce522ed), X(0x2cf4a723),
+  X(0x2d042c90), X(0x2d13b334), X(0x2d233b0d), X(0x2d32c41a),
+  X(0x2d424e5a), X(0x2d51d9cc), X(0x2d61666e), X(0x2d70f440),
+  X(0x2d808340), X(0x2d90136e), X(0x2d9fa4c7), X(0x2daf374c),
+  X(0x2dbecafa), X(0x2dce5fd1), X(0x2dddf5cf), X(0x2ded8cf4),
+  X(0x2dfd253d), X(0x2e0cbeab), X(0x2e1c593b), X(0x2e2bf4ed),
+  X(0x2e3b91c0), X(0x2e4b2fb1), X(0x2e5acec1), X(0x2e6a6eee),
+  X(0x2e7a1037), X(0x2e89b29b), X(0x2e995618), X(0x2ea8faad),
+  X(0x2eb8a05a), X(0x2ec8471c), X(0x2ed7eef4), X(0x2ee797df),
+  X(0x2ef741dc), X(0x2f06eceb), X(0x2f16990a), X(0x2f264639),
+  X(0x2f35f475), X(0x2f45a3bd), X(0x2f555412), X(0x2f650570),
+  X(0x2f74b7d8), X(0x2f846b48), X(0x2f941fbe), X(0x2fa3d53a),
+  X(0x2fb38bbb), X(0x2fc3433f), X(0x2fd2fbc5), X(0x2fe2b54c),
+  X(0x2ff26fd3), X(0x30022b58), X(0x3011e7db), X(0x3021a55a),
+  X(0x303163d4), X(0x30412348), X(0x3050e3b5), X(0x3060a519),
+  X(0x30706773), X(0x30802ac3), X(0x308fef06), X(0x309fb43d),
+  X(0x30af7a65), X(0x30bf417d), X(0x30cf0985), X(0x30ded27a),
+  X(0x30ee9c5d), X(0x30fe672b), X(0x310e32e3), X(0x311dff85),
+  X(0x312dcd0f), X(0x313d9b80), X(0x314d6ad7), X(0x315d3b12),
+  X(0x316d0c30), X(0x317cde31), X(0x318cb113), X(0x319c84d4),
+  X(0x31ac5974), X(0x31bc2ef1), X(0x31cc054b), X(0x31dbdc7f),
+  X(0x31ebb48e), X(0x31fb8d74), X(0x320b6733), X(0x321b41c7),
+  X(0x322b1d31), X(0x323af96e), X(0x324ad67e), X(0x325ab45f),
+  X(0x326a9311), X(0x327a7291), X(0x328a52e0), X(0x329a33fb),
+  X(0x32aa15e1), X(0x32b9f892), X(0x32c9dc0c), X(0x32d9c04d),
+  X(0x32e9a555), X(0x32f98b22), X(0x330971b4), X(0x33195909),
+  X(0x3329411f), X(0x333929f6), X(0x3349138c), X(0x3358fde1),
+  X(0x3368e8f2), X(0x3378d4c0), X(0x3388c147), X(0x3398ae89),
+  X(0x33a89c82), X(0x33b88b32), X(0x33c87a98), X(0x33d86ab2),
+  X(0x33e85b80), X(0x33f84d00), X(0x34083f30), X(0x34183210),
+  X(0x3428259f), X(0x343819db), X(0x34480ec3), X(0x34580455),
+  X(0x3467fa92), X(0x3477f176), X(0x3487e902), X(0x3497e134),
+  X(0x34a7da0a), X(0x34b7d384), X(0x34c7cda0), X(0x34d7c85e),
+  X(0x34e7c3bb), X(0x34f7bfb7), X(0x3507bc50), X(0x3517b985),
+  X(0x3527b756), X(0x3537b5c0), X(0x3547b4c3), X(0x3557b45d),
+  X(0x3567b48d), X(0x3577b552), X(0x3587b6aa), X(0x3597b895),
+  X(0x35a7bb12), X(0x35b7be1e), X(0x35c7c1b9), X(0x35d7c5e1),
+  X(0x35e7ca96), X(0x35f7cfd6), X(0x3607d5a0), X(0x3617dbf3),
+  X(0x3627e2cd), X(0x3637ea2d), X(0x3647f212), X(0x3657fa7b),
+  X(0x36680366), X(0x36780cd2), X(0x368816bf), X(0x3698212b),
+  X(0x36a82c14), X(0x36b83779), X(0x36c8435a), X(0x36d84fb4),
+  X(0x36e85c88), X(0x36f869d2), X(0x37087793), X(0x371885c9),
+  X(0x37289473), X(0x3738a38f), X(0x3748b31d), X(0x3758c31a),
+  X(0x3768d387), X(0x3778e461), X(0x3788f5a7), X(0x37990759),
+  X(0x37a91975), X(0x37b92bf9), X(0x37c93ee4), X(0x37d95236),
+  X(0x37e965ed), X(0x37f97a08), X(0x38098e85), X(0x3819a363),
+  X(0x3829b8a2), X(0x3839ce3f), X(0x3849e43a), X(0x3859fa91),
+  X(0x386a1143), X(0x387a284f), X(0x388a3fb4), X(0x389a5770),
+  X(0x38aa6f83), X(0x38ba87ea), X(0x38caa0a5), X(0x38dab9b2),
+  X(0x38ead311), X(0x38faecbf), X(0x390b06bc), X(0x391b2107),
+  X(0x392b3b9e), X(0x393b5680), X(0x394b71ac), X(0x395b8d20),
+  X(0x396ba8dc), X(0x397bc4dd), X(0x398be124), X(0x399bfdae),
+  X(0x39ac1a7a), X(0x39bc3788), X(0x39cc54d5), X(0x39dc7261),
+  X(0x39ec902a), X(0x39fcae2f), X(0x3a0ccc70), X(0x3a1ceaea),
+  X(0x3a2d099c), X(0x3a3d2885), X(0x3a4d47a5), X(0x3a5d66f9),
+  X(0x3a6d8680), X(0x3a7da63a), X(0x3a8dc625), X(0x3a9de63f),
+  X(0x3aae0688), X(0x3abe26fe), X(0x3ace47a0), X(0x3ade686d),
+  X(0x3aee8963), X(0x3afeaa82), X(0x3b0ecbc7), X(0x3b1eed32),
+  X(0x3b2f0ec2), X(0x3b3f3075), X(0x3b4f524a), X(0x3b5f7440),
+  X(0x3b6f9656), X(0x3b7fb889), X(0x3b8fdada), X(0x3b9ffd46),
+  X(0x3bb01fce), X(0x3bc0426e), X(0x3bd06526), X(0x3be087f6),
+  X(0x3bf0aada), X(0x3c00cdd4), X(0x3c10f0e0), X(0x3c2113fe),
+  X(0x3c31372d), X(0x3c415a6b), X(0x3c517db7), X(0x3c61a110),
+  X(0x3c71c475), X(0x3c81e7e4), X(0x3c920b5c), X(0x3ca22edc),
+  X(0x3cb25262), X(0x3cc275ee), X(0x3cd2997e), X(0x3ce2bd11),
+  X(0x3cf2e0a6), X(0x3d03043b), X(0x3d1327cf), X(0x3d234b61),
+  X(0x3d336ef0), X(0x3d43927a), X(0x3d53b5ff), X(0x3d63d97c),
+  X(0x3d73fcf1), X(0x3d84205c), X(0x3d9443bd), X(0x3da46711),
+  X(0x3db48a58), X(0x3dc4ad91), X(0x3dd4d0ba), X(0x3de4f3d1),
+  X(0x3df516d7), X(0x3e0539c9), X(0x3e155ca6), X(0x3e257f6d),
+  X(0x3e35a21d), X(0x3e45c4b4), X(0x3e55e731), X(0x3e660994),
+  X(0x3e762bda), X(0x3e864e03), X(0x3e96700d), X(0x3ea691f7),
+  X(0x3eb6b3bf), X(0x3ec6d565), X(0x3ed6f6e8), X(0x3ee71845),
+  X(0x3ef7397c), X(0x3f075a8c), X(0x3f177b73), X(0x3f279c30),
+  X(0x3f37bcc2), X(0x3f47dd27), X(0x3f57fd5f), X(0x3f681d68),
+  X(0x3f783d40), X(0x3f885ce7), X(0x3f987c5c), X(0x3fa89b9c),
+  X(0x3fb8baa7), X(0x3fc8d97c), X(0x3fd8f819), X(0x3fe9167e),
+  X(0x3ff934a8), X(0x40095296), X(0x40197049), X(0x40298dbd),
+  X(0x4039aaf2), X(0x4049c7e7), X(0x4059e49a), X(0x406a010a),
+  X(0x407a1d36), X(0x408a391d), X(0x409a54bd), X(0x40aa7015),
+  X(0x40ba8b25), X(0x40caa5ea), X(0x40dac063), X(0x40eada90),
+  X(0x40faf46e), X(0x410b0dfe), X(0x411b273d), X(0x412b402a),
+  X(0x413b58c4), X(0x414b710a), X(0x415b88fa), X(0x416ba093),
+  X(0x417bb7d5), X(0x418bcebe), X(0x419be54c), X(0x41abfb7e),
+  X(0x41bc1153), X(0x41cc26ca), X(0x41dc3be2), X(0x41ec5099),
+  X(0x41fc64ef), X(0x420c78e1), X(0x421c8c6f), X(0x422c9f97),
+  X(0x423cb258), X(0x424cc4b2), X(0x425cd6a2), X(0x426ce827),
+  X(0x427cf941), X(0x428d09ee), X(0x429d1a2c), X(0x42ad29fb),
+  X(0x42bd3959), X(0x42cd4846), X(0x42dd56bf), X(0x42ed64c3),
+  X(0x42fd7252), X(0x430d7f6a), X(0x431d8c0a), X(0x432d9831),
+  X(0x433da3dd), X(0x434daf0d), X(0x435db9c0), X(0x436dc3f5),
+  X(0x437dcdab), X(0x438dd6df), X(0x439ddf92), X(0x43ade7c1),
+  X(0x43bdef6c), X(0x43cdf691), X(0x43ddfd2f), X(0x43ee0345),
+  X(0x43fe08d2), X(0x440e0dd4), X(0x441e124b), X(0x442e1634),
+  X(0x443e198f), X(0x444e1c5a), X(0x445e1e95), X(0x446e203e),
+  X(0x447e2153), X(0x448e21d5), X(0x449e21c0), X(0x44ae2115),
+  X(0x44be1fd1), X(0x44ce1df4), X(0x44de1b7d), X(0x44ee186a),
+  X(0x44fe14ba), X(0x450e106b), X(0x451e0b7e), X(0x452e05ef),
+  X(0x453dffbf), X(0x454df8eb), X(0x455df173), X(0x456de956),
+  X(0x457de092), X(0x458dd726), X(0x459dcd10), X(0x45adc251),
+  X(0x45bdb6e5), X(0x45cdaacd), X(0x45dd9e06), X(0x45ed9091),
+  X(0x45fd826a), X(0x460d7392), X(0x461d6407), X(0x462d53c8),
+  X(0x463d42d4), X(0x464d3129), X(0x465d1ec6), X(0x466d0baa),
+  X(0x467cf7d3), X(0x468ce342), X(0x469ccdf3), X(0x46acb7e7),
+  X(0x46bca11c), X(0x46cc8990), X(0x46dc7143), X(0x46ec5833),
+  X(0x46fc3e5f), X(0x470c23c6), X(0x471c0867), X(0x472bec40),
+  X(0x473bcf50), X(0x474bb196), X(0x475b9311), X(0x476b73c0),
+  X(0x477b53a1), X(0x478b32b4), X(0x479b10f6), X(0x47aaee67),
+  X(0x47bacb06), X(0x47caa6d1), X(0x47da81c7), X(0x47ea5be7),
+  X(0x47fa3530), X(0x480a0da1), X(0x4819e537), X(0x4829bbf3),
+  X(0x483991d3), X(0x484966d6), X(0x48593afb), X(0x48690e3f),
+  X(0x4878e0a3), X(0x4888b225), X(0x489882c4), X(0x48a8527e),
+  X(0x48b82153), X(0x48c7ef41), X(0x48d7bc47), X(0x48e78863),
+  X(0x48f75396), X(0x49071ddc), X(0x4916e736), X(0x4926afa2),
+  X(0x4936771f), X(0x49463dac), X(0x49560347), X(0x4965c7ef),
+  X(0x49758ba4), X(0x49854e63), X(0x4995102c), X(0x49a4d0fe),
+  X(0x49b490d7), X(0x49c44fb6), X(0x49d40d9a), X(0x49e3ca82),
+  X(0x49f3866c), X(0x4a034159), X(0x4a12fb45), X(0x4a22b430),
+  X(0x4a326c19), X(0x4a4222ff), X(0x4a51d8e1), X(0x4a618dbd),
+  X(0x4a714192), X(0x4a80f45f), X(0x4a90a623), X(0x4aa056dd),
+  X(0x4ab0068b), X(0x4abfb52c), X(0x4acf62c0), X(0x4adf0f44),
+  X(0x4aeebab9), X(0x4afe651c), X(0x4b0e0e6c), X(0x4b1db6a9),
+  X(0x4b2d5dd1), X(0x4b3d03e2), X(0x4b4ca8dd), X(0x4b5c4cbf),
+  X(0x4b6bef88), X(0x4b7b9136), X(0x4b8b31c8), X(0x4b9ad13d),
+  X(0x4baa6f93), X(0x4bba0ccb), X(0x4bc9a8e2), X(0x4bd943d7),
+  X(0x4be8dda9), X(0x4bf87658), X(0x4c080de1), X(0x4c17a444),
+  X(0x4c27397f), X(0x4c36cd92), X(0x4c46607b), X(0x4c55f239),
+  X(0x4c6582cb), X(0x4c75122f), X(0x4c84a065), X(0x4c942d6c),
+  X(0x4ca3b942), X(0x4cb343e6), X(0x4cc2cd57), X(0x4cd25594),
+  X(0x4ce1dc9c), X(0x4cf1626d), X(0x4d00e707), X(0x4d106a68),
+  X(0x4d1fec8f), X(0x4d2f6d7a), X(0x4d3eed2a), X(0x4d4e6b9d),
+  X(0x4d5de8d1), X(0x4d6d64c5), X(0x4d7cdf79), X(0x4d8c58eb),
+  X(0x4d9bd11a), X(0x4dab4804), X(0x4dbabdaa), X(0x4dca3209),
+  X(0x4dd9a520), X(0x4de916ef), X(0x4df88774), X(0x4e07f6ae),
+  X(0x4e17649c), X(0x4e26d13c), X(0x4e363c8f), X(0x4e45a692),
+  X(0x4e550f44), X(0x4e6476a4), X(0x4e73dcb2), X(0x4e83416c),
+  X(0x4e92a4d1), X(0x4ea206df), X(0x4eb16796), X(0x4ec0c6f5),
+  X(0x4ed024fa), X(0x4edf81a5), X(0x4eeedcf3), X(0x4efe36e5),
+  X(0x4f0d8f79), X(0x4f1ce6ad), X(0x4f2c3c82), X(0x4f3b90f4),
+  X(0x4f4ae405), X(0x4f5a35b1), X(0x4f6985fa), X(0x4f78d4dc),
+  X(0x4f882257), X(0x4f976e6a), X(0x4fa6b914), X(0x4fb60254),
+  X(0x4fc54a28), X(0x4fd49090), X(0x4fe3d58b), X(0x4ff31917),
+  X(0x50025b33), X(0x50119bde), X(0x5020db17), X(0x503018dd),
+  X(0x503f552f), X(0x504e900b), X(0x505dc971), X(0x506d0160),
+  X(0x507c37d7), X(0x508b6cd3), X(0x509aa055), X(0x50a9d25b),
+  X(0x50b902e4), X(0x50c831ef), X(0x50d75f7b), X(0x50e68b87),
+  X(0x50f5b612), X(0x5104df1a), X(0x5114069f), X(0x51232ca0),
+  X(0x5132511a), X(0x5141740f), X(0x5150957b), X(0x515fb55f),
+  X(0x516ed3b8), X(0x517df087), X(0x518d0bca), X(0x519c257f),
+  X(0x51ab3da7), X(0x51ba543f), X(0x51c96947), X(0x51d87cbd),
+  X(0x51e78ea1), X(0x51f69ef1), X(0x5205adad), X(0x5214bad3),
+  X(0x5223c662), X(0x5232d05a), X(0x5241d8b9), X(0x5250df7d),
+  X(0x525fe4a7), X(0x526ee835), X(0x527dea26), X(0x528cea78),
+  X(0x529be92c), X(0x52aae63f), X(0x52b9e1b0), X(0x52c8db80),
+  X(0x52d7d3ac), X(0x52e6ca33), X(0x52f5bf15), X(0x5304b251),
+  X(0x5313a3e5), X(0x532293d0), X(0x53318212), X(0x53406ea8),
+  X(0x534f5993), X(0x535e42d2), X(0x536d2a62), X(0x537c1043),
+  X(0x538af475), X(0x5399d6f6), X(0x53a8b7c4), X(0x53b796e0),
+  X(0x53c67447), X(0x53d54ffa), X(0x53e429f6), X(0x53f3023b),
+  X(0x5401d8c8), X(0x5410ad9c), X(0x541f80b5), X(0x542e5213),
+  X(0x543d21b5), X(0x544bef9a), X(0x545abbc0), X(0x54698627),
+  X(0x54784ece), X(0x548715b3), X(0x5495dad6), X(0x54a49e35),
+  X(0x54b35fd0), X(0x54c21fa6), X(0x54d0ddb5), X(0x54df99fd),
+  X(0x54ee547c), X(0x54fd0d32), X(0x550bc41d), X(0x551a793d),
+  X(0x55292c91), X(0x5537de16), X(0x55468dce), X(0x55553bb6),
+  X(0x5563e7cd), X(0x55729213), X(0x55813a87), X(0x558fe127),
+  X(0x559e85f2), X(0x55ad28e9), X(0x55bbca08), X(0x55ca6950),
+  X(0x55d906c0), X(0x55e7a257), X(0x55f63c13), X(0x5604d3f4),
+  X(0x561369f8), X(0x5621fe1f), X(0x56309067), X(0x563f20d1),
+  X(0x564daf5a), X(0x565c3c02), X(0x566ac6c7), X(0x56794faa),
+  X(0x5687d6a8), X(0x56965bc1), X(0x56a4def4), X(0x56b36040),
+  X(0x56c1dfa4), X(0x56d05d1f), X(0x56ded8af), X(0x56ed5255),
+  X(0x56fbca0f), X(0x570a3fdc), X(0x5718b3bc), X(0x572725ac),
+  X(0x573595ad), X(0x574403bd), X(0x57526fdb), X(0x5760da07),
+  X(0x576f423f), X(0x577da883), X(0x578c0cd1), X(0x579a6f29),
+  X(0x57a8cf8a), X(0x57b72df2), X(0x57c58a61), X(0x57d3e4d6),
+  X(0x57e23d50), X(0x57f093cd), X(0x57fee84e), X(0x580d3ad1),
+  X(0x581b8b54), X(0x5829d9d8), X(0x5838265c), X(0x584670dd),
+  X(0x5854b95c), X(0x5862ffd8), X(0x5871444f), X(0x587f86c1),
+  X(0x588dc72c), X(0x589c0591), X(0x58aa41ed), X(0x58b87c40),
+  X(0x58c6b489), X(0x58d4eac7), X(0x58e31ef9), X(0x58f1511f),
+  X(0x58ff8137), X(0x590daf40), X(0x591bdb3a), X(0x592a0524),
+  X(0x59382cfc), X(0x594652c2), X(0x59547675), X(0x59629815),
+  X(0x5970b79f), X(0x597ed513), X(0x598cf071), X(0x599b09b7),
+  X(0x59a920e5), X(0x59b735f9), X(0x59c548f4), X(0x59d359d2),
+  X(0x59e16895), X(0x59ef753b), X(0x59fd7fc4), X(0x5a0b882d),
+  X(0x5a198e77), X(0x5a2792a0), X(0x5a3594a9), X(0x5a43948e),
+  X(0x5a519251), X(0x5a5f8df0), X(0x5a6d876a), X(0x5a7b7ebe),
+  X(0x5a8973ec), X(0x5a9766f2), X(0x5aa557d0), X(0x5ab34685),
+  X(0x5ac1330f), X(0x5acf1d6f), X(0x5add05a3), X(0x5aeaebaa),
+  X(0x5af8cf84), X(0x5b06b12f), X(0x5b1490ab), X(0x5b226df7),
+  X(0x5b304912), X(0x5b3e21fc), X(0x5b4bf8b2), X(0x5b59cd35),
+  X(0x5b679f84), X(0x5b756f9e), X(0x5b833d82), X(0x5b91092e),
+  X(0x5b9ed2a3), X(0x5bac99e0), X(0x5bba5ee3), X(0x5bc821ac),
+  X(0x5bd5e23a), X(0x5be3a08c), X(0x5bf15ca1), X(0x5bff1679),
+  X(0x5c0cce12), X(0x5c1a836c), X(0x5c283686), X(0x5c35e760),
+  X(0x5c4395f7), X(0x5c51424c), X(0x5c5eec5e), X(0x5c6c942b),
+  X(0x5c7a39b4), X(0x5c87dcf7), X(0x5c957df3), X(0x5ca31ca8),
+  X(0x5cb0b915), X(0x5cbe5338), X(0x5ccbeb12), X(0x5cd980a1),
+  X(0x5ce713e5), X(0x5cf4a4dd), X(0x5d023387), X(0x5d0fbfe4),
+  X(0x5d1d49f2), X(0x5d2ad1b1), X(0x5d38571f), X(0x5d45da3c),
+  X(0x5d535b08), X(0x5d60d981), X(0x5d6e55a7), X(0x5d7bcf78),
+  X(0x5d8946f5), X(0x5d96bc1c), X(0x5da42eec), X(0x5db19f65),
+  X(0x5dbf0d86), X(0x5dcc794e), X(0x5dd9e2bd), X(0x5de749d1),
+  X(0x5df4ae8a), X(0x5e0210e7), X(0x5e0f70e7), X(0x5e1cce8a),
+  X(0x5e2a29ce), X(0x5e3782b4), X(0x5e44d93a), X(0x5e522d5f),
+  X(0x5e5f7f23), X(0x5e6cce85), X(0x5e7a1b85), X(0x5e876620),
+  X(0x5e94ae58), X(0x5ea1f42a), X(0x5eaf3797), X(0x5ebc789d),
+  X(0x5ec9b73c), X(0x5ed6f372), X(0x5ee42d41), X(0x5ef164a5),
+  X(0x5efe999f), X(0x5f0bcc2f), X(0x5f18fc52), X(0x5f262a09),
+  X(0x5f335553), X(0x5f407e2f), X(0x5f4da49d), X(0x5f5ac89b),
+  X(0x5f67ea29), X(0x5f750946), X(0x5f8225f2), X(0x5f8f402b),
+  X(0x5f9c57f2), X(0x5fa96d44), X(0x5fb68023), X(0x5fc3908c),
+  X(0x5fd09e7f), X(0x5fdda9fc), X(0x5feab302), X(0x5ff7b990),
+  X(0x6004bda5), X(0x6011bf40), X(0x601ebe62), X(0x602bbb09),
+  X(0x6038b534), X(0x6045ace4), X(0x6052a216), X(0x605f94cb),
+  X(0x606c8502), X(0x607972b9), X(0x60865df2), X(0x609346aa),
+  X(0x60a02ce1), X(0x60ad1096), X(0x60b9f1c9), X(0x60c6d079),
+  X(0x60d3aca5), X(0x60e0864d), X(0x60ed5d70), X(0x60fa320d),
+  X(0x61070424), X(0x6113d3b4), X(0x6120a0bc), X(0x612d6b3c),
+  X(0x613a3332), X(0x6146f89f), X(0x6153bb82), X(0x61607bd9),
+  X(0x616d39a5), X(0x6179f4e5), X(0x6186ad98), X(0x619363bd),
+  X(0x61a01753), X(0x61acc85b), X(0x61b976d3), X(0x61c622bc),
+  X(0x61d2cc13), X(0x61df72d8), X(0x61ec170c), X(0x61f8b8ad),
+  X(0x620557ba), X(0x6211f434), X(0x621e8e18), X(0x622b2568),
+  X(0x6237ba21), X(0x62444c44), X(0x6250dbd0), X(0x625d68c4),
+  X(0x6269f320), X(0x62767ae2), X(0x6283000b), X(0x628f829a),
+  X(0x629c028e), X(0x62a87fe6), X(0x62b4faa2), X(0x62c172c2),
+  X(0x62cde844), X(0x62da5b29), X(0x62e6cb6e), X(0x62f33915),
+  X(0x62ffa41c), X(0x630c0c83), X(0x63187248), X(0x6324d56d),
+  X(0x633135ef), X(0x633d93ce), X(0x6349ef0b), X(0x635647a3),
+  X(0x63629d97), X(0x636ef0e6), X(0x637b418f), X(0x63878f92),
+  X(0x6393daef), X(0x63a023a4), X(0x63ac69b1), X(0x63b8ad15),
+  X(0x63c4edd1), X(0x63d12be3), X(0x63dd674b), X(0x63e9a008),
+  X(0x63f5d61a), X(0x64020980), X(0x640e3a39), X(0x641a6846),
+  X(0x642693a5), X(0x6432bc56), X(0x643ee258), X(0x644b05ab),
+  X(0x6457264e), X(0x64634441), X(0x646f5f83), X(0x647b7814),
+  X(0x64878df3), X(0x6493a120), X(0x649fb199), X(0x64abbf5f),
+  X(0x64b7ca71), X(0x64c3d2ce), X(0x64cfd877), X(0x64dbdb69),
+  X(0x64e7dba6), X(0x64f3d92b), X(0x64ffd3fa), X(0x650bcc11),
+  X(0x6517c16f), X(0x6523b415), X(0x652fa402), X(0x653b9134),
+  X(0x65477bad), X(0x6553636a), X(0x655f486d), X(0x656b2ab3),
+  X(0x65770a3d), X(0x6582e70a), X(0x658ec11a), X(0x659a986d),
+  X(0x65a66d00), X(0x65b23ed5), X(0x65be0deb), X(0x65c9da41),
+  X(0x65d5a3d7), X(0x65e16aac), X(0x65ed2ebf), X(0x65f8f011),
+  X(0x6604aea1), X(0x66106a6e), X(0x661c2377), X(0x6627d9be),
+  X(0x66338d40), X(0x663f3dfd), X(0x664aebf5), X(0x66569728),
+  X(0x66623f95), X(0x666de53b), X(0x6679881b), X(0x66852833),
+  X(0x6690c583), X(0x669c600b), X(0x66a7f7ca), X(0x66b38cc0),
+  X(0x66bf1eec), X(0x66caae4f), X(0x66d63ae6), X(0x66e1c4b3),
+  X(0x66ed4bb4), X(0x66f8cfea), X(0x67045153), X(0x670fcfef),
+  X(0x671b4bbe), X(0x6726c4bf), X(0x67323af3), X(0x673dae58),
+  X(0x67491eee), X(0x67548cb5), X(0x675ff7ab), X(0x676b5fd2),
+  X(0x6776c528), X(0x678227ad), X(0x678d8761), X(0x6798e443),
+  X(0x67a43e52), X(0x67af958f), X(0x67bae9f9), X(0x67c63b8f),
+  X(0x67d18a52), X(0x67dcd640), X(0x67e81f59), X(0x67f3659d),
+  X(0x67fea90c), X(0x6809e9a5), X(0x68152768), X(0x68206254),
+  X(0x682b9a68), X(0x6836cfa6), X(0x6842020b), X(0x684d3199),
+  X(0x68585e4d), X(0x68638829), X(0x686eaf2b), X(0x6879d354),
+  X(0x6884f4a2), X(0x68901316), X(0x689b2eb0), X(0x68a6476d),
+  X(0x68b15d50), X(0x68bc7056), X(0x68c78080), X(0x68d28dcd),
+  X(0x68dd983e), X(0x68e89fd0), X(0x68f3a486), X(0x68fea65d),
+  X(0x6909a555), X(0x6914a16f), X(0x691f9aa9), X(0x692a9104),
+  X(0x69358480), X(0x6940751b), X(0x694b62d5), X(0x69564daf),
+  X(0x696135a7), X(0x696c1abe), X(0x6976fcf3), X(0x6981dc46),
+  X(0x698cb8b6), X(0x69979243), X(0x69a268ed), X(0x69ad3cb4),
+  X(0x69b80d97), X(0x69c2db96), X(0x69cda6b0), X(0x69d86ee5),
+  X(0x69e33436), X(0x69edf6a1), X(0x69f8b626), X(0x6a0372c5),
+  X(0x6a0e2c7e), X(0x6a18e350), X(0x6a23973c), X(0x6a2e4840),
+  X(0x6a38f65d), X(0x6a43a191), X(0x6a4e49de), X(0x6a58ef42),
+  X(0x6a6391be), X(0x6a6e3151), X(0x6a78cdfa), X(0x6a8367ba),
+  X(0x6a8dfe90), X(0x6a98927c), X(0x6aa3237d), X(0x6aadb194),
+  X(0x6ab83cc0), X(0x6ac2c500), X(0x6acd4a55), X(0x6ad7ccbf),
+  X(0x6ae24c3c), X(0x6aecc8cd), X(0x6af74271), X(0x6b01b929),
+  X(0x6b0c2cf4), X(0x6b169dd1), X(0x6b210bc1), X(0x6b2b76c2),
+  X(0x6b35ded6), X(0x6b4043fc), X(0x6b4aa632), X(0x6b55057a),
+  X(0x6b5f61d3), X(0x6b69bb3d), X(0x6b7411b7), X(0x6b7e6541),
+  X(0x6b88b5db), X(0x6b930385), X(0x6b9d4e3f), X(0x6ba79607),
+  X(0x6bb1dadf), X(0x6bbc1cc6), X(0x6bc65bbb), X(0x6bd097bf),
+  X(0x6bdad0d0), X(0x6be506f0), X(0x6bef3a1d), X(0x6bf96a58),
+  X(0x6c0397a0), X(0x6c0dc1f5), X(0x6c17e957), X(0x6c220dc6),
+  X(0x6c2c2f41), X(0x6c364dc9), X(0x6c40695c), X(0x6c4a81fc),
+  X(0x6c5497a7), X(0x6c5eaa5d), X(0x6c68ba1f), X(0x6c72c6eb),
+  X(0x6c7cd0c3), X(0x6c86d7a6), X(0x6c90db92), X(0x6c9adc8a),
+  X(0x6ca4da8b), X(0x6caed596), X(0x6cb8cdab), X(0x6cc2c2ca),
+  X(0x6cccb4f2), X(0x6cd6a424), X(0x6ce0905e), X(0x6cea79a1),
+  X(0x6cf45fee), X(0x6cfe4342), X(0x6d0823a0), X(0x6d120105),
+  X(0x6d1bdb73), X(0x6d25b2e8), X(0x6d2f8765), X(0x6d3958ea),
+  X(0x6d432777), X(0x6d4cf30a), X(0x6d56bba5), X(0x6d608147),
+  X(0x6d6a43f0), X(0x6d7403a0), X(0x6d7dc056), X(0x6d877a13),
+  X(0x6d9130d6), X(0x6d9ae4a0), X(0x6da4956f), X(0x6dae4345),
+  X(0x6db7ee20), X(0x6dc19601), X(0x6dcb3ae7), X(0x6dd4dcd3),
+  X(0x6dde7bc4), X(0x6de817bb), X(0x6df1b0b6), X(0x6dfb46b7),
+  X(0x6e04d9bc), X(0x6e0e69c7), X(0x6e17f6d5), X(0x6e2180e9),
+  X(0x6e2b0801), X(0x6e348c1d), X(0x6e3e0d3d), X(0x6e478b62),
+  X(0x6e51068a), X(0x6e5a7eb7), X(0x6e63f3e7), X(0x6e6d661b),
+  X(0x6e76d552), X(0x6e80418e), X(0x6e89aacc), X(0x6e93110f),
+  X(0x6e9c7454), X(0x6ea5d49d), X(0x6eaf31e9), X(0x6eb88c37),
+  X(0x6ec1e389), X(0x6ecb37de), X(0x6ed48936), X(0x6eddd790),
+  X(0x6ee722ee), X(0x6ef06b4d), X(0x6ef9b0b0), X(0x6f02f315),
+  X(0x6f0c327c), X(0x6f156ee6), X(0x6f1ea852), X(0x6f27dec1),
+  X(0x6f311232), X(0x6f3a42a5), X(0x6f43701a), X(0x6f4c9a91),
+  X(0x6f55c20a), X(0x6f5ee686), X(0x6f680803), X(0x6f712682),
+  X(0x6f7a4203), X(0x6f835a86), X(0x6f8c700b), X(0x6f958291),
+  X(0x6f9e921a), X(0x6fa79ea4), X(0x6fb0a830), X(0x6fb9aebd),
+  X(0x6fc2b24c), X(0x6fcbb2dd), X(0x6fd4b06f), X(0x6fddab03),
+  X(0x6fe6a299), X(0x6fef9730), X(0x6ff888c9), X(0x70017763),
+  X(0x700a62ff), X(0x70134b9c), X(0x701c313b), X(0x702513dc),
+  X(0x702df37e), X(0x7036d021), X(0x703fa9c6), X(0x7048806d),
+  X(0x70515415), X(0x705a24bf), X(0x7062f26b), X(0x706bbd17),
+  X(0x707484c6), X(0x707d4976), X(0x70860b28), X(0x708ec9dc),
+  X(0x70978591), X(0x70a03e48), X(0x70a8f400), X(0x70b1a6bb),
+  X(0x70ba5677), X(0x70c30335), X(0x70cbacf5), X(0x70d453b6),
+  X(0x70dcf77a), X(0x70e59840), X(0x70ee3607), X(0x70f6d0d1),
+  X(0x70ff689d), X(0x7107fd6b), X(0x71108f3b), X(0x71191e0d),
+  X(0x7121a9e2), X(0x712a32b9), X(0x7132b892), X(0x713b3b6e),
+  X(0x7143bb4c), X(0x714c382d), X(0x7154b211), X(0x715d28f7),
+  X(0x71659ce0), X(0x716e0dcc), X(0x71767bbb), X(0x717ee6ac),
+  X(0x71874ea1), X(0x718fb399), X(0x71981594), X(0x71a07493),
+  X(0x71a8d094), X(0x71b1299a), X(0x71b97fa2), X(0x71c1d2af),
+  X(0x71ca22bf), X(0x71d26fd2), X(0x71dab9ea), X(0x71e30106),
+  X(0x71eb4526), X(0x71f3864a), X(0x71fbc472), X(0x7203ff9e),
+  X(0x720c37cf), X(0x72146d05), X(0x721c9f3f), X(0x7224ce7e),
+  X(0x722cfac2), X(0x7235240b), X(0x723d4a59), X(0x72456dad),
+  X(0x724d8e05), X(0x7255ab63), X(0x725dc5c7), X(0x7265dd31),
+  X(0x726df1a0), X(0x72760315), X(0x727e1191), X(0x72861d12),
+  X(0x728e259a), X(0x72962b28), X(0x729e2dbd), X(0x72a62d59),
+  X(0x72ae29fc), X(0x72b623a5), X(0x72be1a56), X(0x72c60e0e),
+  X(0x72cdfece), X(0x72d5ec95), X(0x72ddd764), X(0x72e5bf3b),
+  X(0x72eda41a), X(0x72f58601), X(0x72fd64f1), X(0x730540e9),
+  X(0x730d19e9), X(0x7314eff3), X(0x731cc305), X(0x73249321),
+  X(0x732c6046), X(0x73342a75), X(0x733bf1ad), X(0x7343b5ef),
+  X(0x734b773b), X(0x73533591), X(0x735af0f2), X(0x7362a95d),
+  X(0x736a5ed3), X(0x73721153), X(0x7379c0df), X(0x73816d76),
+  X(0x73891719), X(0x7390bdc7), X(0x73986181), X(0x73a00247),
+  X(0x73a7a01a), X(0x73af3af8), X(0x73b6d2e4), X(0x73be67dc),
+  X(0x73c5f9e1), X(0x73cd88f3), X(0x73d51513), X(0x73dc9e40),
+  X(0x73e4247c), X(0x73eba7c5), X(0x73f3281c), X(0x73faa582),
+  X(0x74021ff7), X(0x7409977b), X(0x74110c0d), X(0x74187daf),
+  X(0x741fec61), X(0x74275822), X(0x742ec0f3), X(0x743626d5),
+  X(0x743d89c7), X(0x7444e9c9), X(0x744c46dd), X(0x7453a101),
+  X(0x745af837), X(0x74624c7f), X(0x74699dd8), X(0x7470ec44),
+  X(0x747837c2), X(0x747f8052), X(0x7486c5f5), X(0x748e08ac),
+  X(0x74954875), X(0x749c8552), X(0x74a3bf43), X(0x74aaf648),
+  X(0x74b22a62), X(0x74b95b90), X(0x74c089d2), X(0x74c7b52a),
+  X(0x74cedd97), X(0x74d6031a), X(0x74dd25b2), X(0x74e44561),
+  X(0x74eb6226), X(0x74f27c02), X(0x74f992f5), X(0x7500a6ff),
+  X(0x7507b820), X(0x750ec659), X(0x7515d1aa), X(0x751cda14),
+  X(0x7523df96), X(0x752ae231), X(0x7531e1e5), X(0x7538deb2),
+  X(0x753fd89a), X(0x7546cf9b), X(0x754dc3b7), X(0x7554b4ed),
+  X(0x755ba33e), X(0x75628eaa), X(0x75697732), X(0x75705cd5),
+  X(0x75773f95), X(0x757e1f71), X(0x7584fc6a), X(0x758bd67f),
+  X(0x7592adb2), X(0x75998203), X(0x75a05371), X(0x75a721fe),
+  X(0x75adeda9), X(0x75b4b673), X(0x75bb7c5c), X(0x75c23f65),
+  X(0x75c8ff8d), X(0x75cfbcd6), X(0x75d6773f), X(0x75dd2ec8),
+  X(0x75e3e373), X(0x75ea953f), X(0x75f1442d), X(0x75f7f03d),
+  X(0x75fe996f), X(0x76053fc5), X(0x760be33d), X(0x761283d8),
+  X(0x76192197), X(0x761fbc7b), X(0x76265482), X(0x762ce9af),
+  X(0x76337c01), X(0x763a0b78), X(0x76409814), X(0x764721d7),
+  X(0x764da8c1), X(0x76542cd1), X(0x765aae08), X(0x76612c67),
+  X(0x7667a7ee), X(0x766e209d), X(0x76749675), X(0x767b0975),
+  X(0x7681799f), X(0x7687e6f3), X(0x768e5170), X(0x7694b918),
+  X(0x769b1deb), X(0x76a17fe9), X(0x76a7df13), X(0x76ae3b68),
+  X(0x76b494ea), X(0x76baeb98), X(0x76c13f74), X(0x76c7907c),
+  X(0x76cddeb3), X(0x76d42a18), X(0x76da72ab), X(0x76e0b86d),
+  X(0x76e6fb5e), X(0x76ed3b7f), X(0x76f378d0), X(0x76f9b352),
+  X(0x76ffeb05), X(0x77061fe8), X(0x770c51fe), X(0x77128145),
+  X(0x7718adbf), X(0x771ed76c), X(0x7724fe4c), X(0x772b225f),
+  X(0x773143a7), X(0x77376223), X(0x773d7dd3), X(0x774396ba),
+  X(0x7749acd5), X(0x774fc027), X(0x7755d0af), X(0x775bde6f),
+  X(0x7761e965), X(0x7767f193), X(0x776df6fa), X(0x7773f998),
+  X(0x7779f970), X(0x777ff681), X(0x7785f0cd), X(0x778be852),
+  X(0x7791dd12), X(0x7797cf0d), X(0x779dbe43), X(0x77a3aab6),
+  X(0x77a99465), X(0x77af7b50), X(0x77b55f79), X(0x77bb40e0),
+  X(0x77c11f85), X(0x77c6fb68), X(0x77ccd48a), X(0x77d2aaec),
+  X(0x77d87e8d), X(0x77de4f6f), X(0x77e41d92), X(0x77e9e8f5),
+  X(0x77efb19b), X(0x77f57782), X(0x77fb3aad), X(0x7800fb1a),
+  X(0x7806b8ca), X(0x780c73bf), X(0x78122bf7), X(0x7817e175),
+  X(0x781d9438), X(0x78234440), X(0x7828f18f), X(0x782e9c25),
+  X(0x78344401), X(0x7839e925), X(0x783f8b92), X(0x78452b46),
+  X(0x784ac844), X(0x7850628b), X(0x7855fa1c), X(0x785b8ef8),
+  X(0x7861211e), X(0x7866b090), X(0x786c3d4d), X(0x7871c757),
+  X(0x78774ead), X(0x787cd351), X(0x78825543), X(0x7887d483),
+  X(0x788d5111), X(0x7892caef), X(0x7898421c), X(0x789db69a),
+  X(0x78a32868), X(0x78a89787), X(0x78ae03f8), X(0x78b36dbb),
+  X(0x78b8d4d1), X(0x78be393a), X(0x78c39af6), X(0x78c8fa06),
+  X(0x78ce566c), X(0x78d3b026), X(0x78d90736), X(0x78de5b9c),
+  X(0x78e3ad58), X(0x78e8fc6c), X(0x78ee48d7), X(0x78f3929b),
+  X(0x78f8d9b7), X(0x78fe1e2c), X(0x79035ffb), X(0x79089f24),
+  X(0x790ddba8), X(0x79131587), X(0x79184cc2), X(0x791d8159),
+  X(0x7922b34d), X(0x7927e29e), X(0x792d0f4d), X(0x7932395a),
+  X(0x793760c6), X(0x793c8591), X(0x7941a7bd), X(0x7946c749),
+  X(0x794be435), X(0x7950fe84), X(0x79561634), X(0x795b2b47),
+  X(0x79603dbc), X(0x79654d96), X(0x796a5ad4), X(0x796f6576),
+  X(0x79746d7e), X(0x797972eb), X(0x797e75bf), X(0x798375f9),
+  X(0x7988739b), X(0x798d6ea5), X(0x79926717), X(0x79975cf2),
+  X(0x799c5037), X(0x79a140e6), X(0x79a62f00), X(0x79ab1a85),
+  X(0x79b00376), X(0x79b4e9d3), X(0x79b9cd9d), X(0x79beaed4),
+  X(0x79c38d79), X(0x79c8698d), X(0x79cd4310), X(0x79d21a03),
+  X(0x79d6ee66), X(0x79dbc03a), X(0x79e08f7f), X(0x79e55c36),
+  X(0x79ea265f), X(0x79eeedfc), X(0x79f3b30c), X(0x79f87590),
+  X(0x79fd3589), X(0x7a01f2f7), X(0x7a06addc), X(0x7a0b6636),
+  X(0x7a101c08), X(0x7a14cf52), X(0x7a198013), X(0x7a1e2e4d),
+  X(0x7a22da01), X(0x7a27832f), X(0x7a2c29d7), X(0x7a30cdfa),
+  X(0x7a356f99), X(0x7a3a0eb4), X(0x7a3eab4c), X(0x7a434561),
+  X(0x7a47dcf5), X(0x7a4c7207), X(0x7a510498), X(0x7a5594a9),
+  X(0x7a5a223a), X(0x7a5ead4d), X(0x7a6335e0), X(0x7a67bbf6),
+  X(0x7a6c3f8f), X(0x7a70c0ab), X(0x7a753f4b), X(0x7a79bb6f),
+  X(0x7a7e3519), X(0x7a82ac48), X(0x7a8720fe), X(0x7a8b933b),
+  X(0x7a9002ff), X(0x7a94704b), X(0x7a98db20), X(0x7a9d437e),
+  X(0x7aa1a967), X(0x7aa60cd9), X(0x7aaa6dd7), X(0x7aaecc61),
+  X(0x7ab32877), X(0x7ab7821b), X(0x7abbd94b), X(0x7ac02e0a),
+  X(0x7ac48058), X(0x7ac8d035), X(0x7acd1da3), X(0x7ad168a1),
+  X(0x7ad5b130), X(0x7ad9f751), X(0x7ade3b05), X(0x7ae27c4c),
+  X(0x7ae6bb27), X(0x7aeaf796), X(0x7aef319a), X(0x7af36934),
+  X(0x7af79e64), X(0x7afbd12c), X(0x7b00018a), X(0x7b042f81),
+  X(0x7b085b10), X(0x7b0c8439), X(0x7b10aafc), X(0x7b14cf5a),
+  X(0x7b18f153), X(0x7b1d10e8), X(0x7b212e1a), X(0x7b2548e9),
+  X(0x7b296155), X(0x7b2d7761), X(0x7b318b0b), X(0x7b359c55),
+  X(0x7b39ab3f), X(0x7b3db7cb), X(0x7b41c1f8), X(0x7b45c9c8),
+  X(0x7b49cf3b), X(0x7b4dd251), X(0x7b51d30b), X(0x7b55d16b),
+  X(0x7b59cd70), X(0x7b5dc71b), X(0x7b61be6d), X(0x7b65b366),
+  X(0x7b69a608), X(0x7b6d9653), X(0x7b718447), X(0x7b756fe5),
+  X(0x7b79592e), X(0x7b7d4022), X(0x7b8124c3), X(0x7b850710),
+  X(0x7b88e70a), X(0x7b8cc4b3), X(0x7b90a00a), X(0x7b947911),
+  X(0x7b984fc8), X(0x7b9c242f), X(0x7b9ff648), X(0x7ba3c612),
+  X(0x7ba79390), X(0x7bab5ec1), X(0x7baf27a5), X(0x7bb2ee3f),
+  X(0x7bb6b28e), X(0x7bba7493), X(0x7bbe344e), X(0x7bc1f1c1),
+  X(0x7bc5acec), X(0x7bc965cf), X(0x7bcd1c6c), X(0x7bd0d0c3),
+  X(0x7bd482d4), X(0x7bd832a1), X(0x7bdbe02a), X(0x7bdf8b70),
+  X(0x7be33473), X(0x7be6db34), X(0x7bea7fb4), X(0x7bee21f4),
+  X(0x7bf1c1f3), X(0x7bf55fb3), X(0x7bf8fb35), X(0x7bfc9479),
+  X(0x7c002b7f), X(0x7c03c04a), X(0x7c0752d8), X(0x7c0ae32b),
+  X(0x7c0e7144), X(0x7c11fd23), X(0x7c1586c9), X(0x7c190e36),
+  X(0x7c1c936c), X(0x7c20166b), X(0x7c239733), X(0x7c2715c6),
+  X(0x7c2a9224), X(0x7c2e0c4e), X(0x7c318444), X(0x7c34fa07),
+  X(0x7c386d98), X(0x7c3bdef8), X(0x7c3f4e26), X(0x7c42bb25),
+  X(0x7c4625f4), X(0x7c498e95), X(0x7c4cf507), X(0x7c50594c),
+  X(0x7c53bb65), X(0x7c571b51), X(0x7c5a7913), X(0x7c5dd4aa),
+  X(0x7c612e17), X(0x7c64855b), X(0x7c67da76), X(0x7c6b2d6a),
+  X(0x7c6e7e37), X(0x7c71ccdd), X(0x7c75195e), X(0x7c7863ba),
+  X(0x7c7babf1), X(0x7c7ef206), X(0x7c8235f7), X(0x7c8577c6),
+  X(0x7c88b774), X(0x7c8bf502), X(0x7c8f306f), X(0x7c9269bd),
+  X(0x7c95a0ec), X(0x7c98d5fe), X(0x7c9c08f2), X(0x7c9f39cb),
+  X(0x7ca26887), X(0x7ca59528), X(0x7ca8bfb0), X(0x7cabe81d),
+  X(0x7caf0e72), X(0x7cb232af), X(0x7cb554d4), X(0x7cb874e2),
+  X(0x7cbb92db), X(0x7cbeaebe), X(0x7cc1c88d), X(0x7cc4e047),
+  X(0x7cc7f5ef), X(0x7ccb0984), X(0x7cce1b08), X(0x7cd12a7b),
+  X(0x7cd437dd), X(0x7cd74330), X(0x7cda4c74), X(0x7cdd53aa),
+  X(0x7ce058d3), X(0x7ce35bef), X(0x7ce65cff), X(0x7ce95c04),
+  X(0x7cec58ff), X(0x7cef53f0), X(0x7cf24cd7), X(0x7cf543b7),
+  X(0x7cf8388f), X(0x7cfb2b60), X(0x7cfe1c2b), X(0x7d010af1),
+  X(0x7d03f7b2), X(0x7d06e26f), X(0x7d09cb29), X(0x7d0cb1e0),
+  X(0x7d0f9696), X(0x7d12794b), X(0x7d1559ff), X(0x7d1838b4),
+  X(0x7d1b156a), X(0x7d1df022), X(0x7d20c8dd), X(0x7d239f9b),
+  X(0x7d26745e), X(0x7d294725), X(0x7d2c17f1), X(0x7d2ee6c4),
+  X(0x7d31b39f), X(0x7d347e81), X(0x7d37476b), X(0x7d3a0e5f),
+  X(0x7d3cd35d), X(0x7d3f9665), X(0x7d425779), X(0x7d451699),
+  X(0x7d47d3c6), X(0x7d4a8f01), X(0x7d4d484b), X(0x7d4fffa3),
+  X(0x7d52b50c), X(0x7d556885), X(0x7d581a0f), X(0x7d5ac9ac),
+  X(0x7d5d775c), X(0x7d60231f), X(0x7d62ccf6), X(0x7d6574e3),
+  X(0x7d681ae6), X(0x7d6abeff), X(0x7d6d612f), X(0x7d700178),
+  X(0x7d729fd9), X(0x7d753c54), X(0x7d77d6e9), X(0x7d7a6f9a),
+  X(0x7d7d0666), X(0x7d7f9b4f), X(0x7d822e55), X(0x7d84bf79),
+  X(0x7d874ebc), X(0x7d89dc1e), X(0x7d8c67a1), X(0x7d8ef144),
+  X(0x7d91790a), X(0x7d93fef2), X(0x7d9682fd), X(0x7d99052d),
+  X(0x7d9b8581), X(0x7d9e03fb), X(0x7da0809b), X(0x7da2fb62),
+  X(0x7da57451), X(0x7da7eb68), X(0x7daa60a8), X(0x7dacd413),
+  X(0x7daf45a9), X(0x7db1b56a), X(0x7db42357), X(0x7db68f71),
+  X(0x7db8f9b9), X(0x7dbb6230), X(0x7dbdc8d6), X(0x7dc02dac),
+  X(0x7dc290b3), X(0x7dc4f1eb), X(0x7dc75156), X(0x7dc9aef4),
+  X(0x7dcc0ac5), X(0x7dce64cc), X(0x7dd0bd07), X(0x7dd31379),
+  X(0x7dd56821), X(0x7dd7bb01), X(0x7dda0c1a), X(0x7ddc5b6b),
+  X(0x7ddea8f7), X(0x7de0f4bd), X(0x7de33ebe), X(0x7de586fc),
+  X(0x7de7cd76), X(0x7dea122e), X(0x7dec5525), X(0x7dee965a),
+  X(0x7df0d5d0), X(0x7df31386), X(0x7df54f7e), X(0x7df789b8),
+  X(0x7df9c235), X(0x7dfbf8f5), X(0x7dfe2dfa), X(0x7e006145),
+  X(0x7e0292d5), X(0x7e04c2ac), X(0x7e06f0cb), X(0x7e091d32),
+  X(0x7e0b47e1), X(0x7e0d70db), X(0x7e0f981f), X(0x7e11bdaf),
+  X(0x7e13e18a), X(0x7e1603b3), X(0x7e182429), X(0x7e1a42ed),
+  X(0x7e1c6001), X(0x7e1e7b64), X(0x7e209518), X(0x7e22ad1d),
+  X(0x7e24c375), X(0x7e26d81f), X(0x7e28eb1d), X(0x7e2afc70),
+  X(0x7e2d0c17), X(0x7e2f1a15), X(0x7e31266a), X(0x7e333115),
+  X(0x7e353a1a), X(0x7e374177), X(0x7e39472e), X(0x7e3b4b3f),
+  X(0x7e3d4dac), X(0x7e3f4e75), X(0x7e414d9a), X(0x7e434b1e),
+  X(0x7e4546ff), X(0x7e474140), X(0x7e4939e0), X(0x7e4b30e2),
+  X(0x7e4d2644), X(0x7e4f1a09), X(0x7e510c30), X(0x7e52fcbc),
+  X(0x7e54ebab), X(0x7e56d900), X(0x7e58c4bb), X(0x7e5aaedd),
+  X(0x7e5c9766), X(0x7e5e7e57), X(0x7e6063b2), X(0x7e624776),
+  X(0x7e6429a5), X(0x7e660a3f), X(0x7e67e945), X(0x7e69c6b8),
+  X(0x7e6ba299), X(0x7e6d7ce7), X(0x7e6f55a5), X(0x7e712cd3),
+  X(0x7e730272), X(0x7e74d682), X(0x7e76a904), X(0x7e7879f9),
+  X(0x7e7a4962), X(0x7e7c173f), X(0x7e7de392), X(0x7e7fae5a),
+  X(0x7e817799), X(0x7e833f50), X(0x7e85057f), X(0x7e86ca27),
+  X(0x7e888d49), X(0x7e8a4ee5), X(0x7e8c0efd), X(0x7e8dcd91),
+  X(0x7e8f8aa1), X(0x7e914630), X(0x7e93003c), X(0x7e94b8c8),
+  X(0x7e966fd4), X(0x7e982560), X(0x7e99d96e), X(0x7e9b8bfe),
+  X(0x7e9d3d10), X(0x7e9eeca7), X(0x7ea09ac2), X(0x7ea24762),
+  X(0x7ea3f288), X(0x7ea59c35), X(0x7ea7446a), X(0x7ea8eb27),
+  X(0x7eaa906c), X(0x7eac343c), X(0x7eadd696), X(0x7eaf777b),
+  X(0x7eb116ed), X(0x7eb2b4eb), X(0x7eb45177), X(0x7eb5ec91),
+  X(0x7eb7863b), X(0x7eb91e74), X(0x7ebab53e), X(0x7ebc4a99),
+  X(0x7ebdde87), X(0x7ebf7107), X(0x7ec1021b), X(0x7ec291c3),
+  X(0x7ec42001), X(0x7ec5acd5), X(0x7ec7383f), X(0x7ec8c241),
+  X(0x7eca4adb), X(0x7ecbd20d), X(0x7ecd57da), X(0x7ecedc41),
+  X(0x7ed05f44), X(0x7ed1e0e2), X(0x7ed3611d), X(0x7ed4dff6),
+  X(0x7ed65d6d), X(0x7ed7d983), X(0x7ed95438), X(0x7edacd8f),
+  X(0x7edc4586), X(0x7eddbc20), X(0x7edf315c), X(0x7ee0a53c),
+  X(0x7ee217c1), X(0x7ee388ea), X(0x7ee4f8b9), X(0x7ee6672f),
+  X(0x7ee7d44c), X(0x7ee94012), X(0x7eeaaa80), X(0x7eec1397),
+  X(0x7eed7b59), X(0x7eeee1c6), X(0x7ef046df), X(0x7ef1aaa5),
+  X(0x7ef30d18), X(0x7ef46e39), X(0x7ef5ce09), X(0x7ef72c88),
+  X(0x7ef889b8), X(0x7ef9e599), X(0x7efb402c), X(0x7efc9972),
+  X(0x7efdf16b), X(0x7eff4818), X(0x7f009d79), X(0x7f01f191),
+  X(0x7f03445f), X(0x7f0495e4), X(0x7f05e620), X(0x7f073516),
+  X(0x7f0882c5), X(0x7f09cf2d), X(0x7f0b1a51), X(0x7f0c6430),
+  X(0x7f0daccc), X(0x7f0ef425), X(0x7f103a3b), X(0x7f117f11),
+  X(0x7f12c2a5), X(0x7f1404fa), X(0x7f15460f), X(0x7f1685e6),
+  X(0x7f17c47f), X(0x7f1901db), X(0x7f1a3dfb), X(0x7f1b78e0),
+  X(0x7f1cb28a), X(0x7f1deafa), X(0x7f1f2231), X(0x7f20582f),
+  X(0x7f218cf5), X(0x7f22c085), X(0x7f23f2de), X(0x7f252401),
+  X(0x7f2653f0), X(0x7f2782ab), X(0x7f28b032), X(0x7f29dc87),
+  X(0x7f2b07aa), X(0x7f2c319c), X(0x7f2d5a5e), X(0x7f2e81f0),
+  X(0x7f2fa853), X(0x7f30cd88), X(0x7f31f18f), X(0x7f33146a),
+  X(0x7f343619), X(0x7f35569c), X(0x7f3675f6), X(0x7f379425),
+  X(0x7f38b12c), X(0x7f39cd0a), X(0x7f3ae7c0), X(0x7f3c0150),
+  X(0x7f3d19ba), X(0x7f3e30fe), X(0x7f3f471e), X(0x7f405c1a),
+  X(0x7f416ff3), X(0x7f4282a9), X(0x7f43943e), X(0x7f44a4b2),
+  X(0x7f45b405), X(0x7f46c239), X(0x7f47cf4e), X(0x7f48db45),
+  X(0x7f49e61f), X(0x7f4aefdc), X(0x7f4bf87e), X(0x7f4d0004),
+  X(0x7f4e0670), X(0x7f4f0bc2), X(0x7f500ffb), X(0x7f51131c),
+  X(0x7f521525), X(0x7f531618), X(0x7f5415f4), X(0x7f5514bb),
+  X(0x7f56126e), X(0x7f570f0c), X(0x7f580a98), X(0x7f590511),
+  X(0x7f59fe78), X(0x7f5af6ce), X(0x7f5bee14), X(0x7f5ce44a),
+  X(0x7f5dd972), X(0x7f5ecd8b), X(0x7f5fc097), X(0x7f60b296),
+  X(0x7f61a389), X(0x7f629370), X(0x7f63824e), X(0x7f647021),
+  X(0x7f655ceb), X(0x7f6648ad), X(0x7f673367), X(0x7f681d19),
+  X(0x7f6905c6), X(0x7f69ed6d), X(0x7f6ad40f), X(0x7f6bb9ad),
+  X(0x7f6c9e48), X(0x7f6d81e0), X(0x7f6e6475), X(0x7f6f460a),
+  X(0x7f70269d), X(0x7f710631), X(0x7f71e4c6), X(0x7f72c25c),
+  X(0x7f739ef4), X(0x7f747a8f), X(0x7f75552e), X(0x7f762ed1),
+  X(0x7f770779), X(0x7f77df27), X(0x7f78b5db), X(0x7f798b97),
+  X(0x7f7a605a), X(0x7f7b3425), X(0x7f7c06fa), X(0x7f7cd8d9),
+  X(0x7f7da9c2), X(0x7f7e79b7), X(0x7f7f48b8), X(0x7f8016c5),
+  X(0x7f80e3e0), X(0x7f81b009), X(0x7f827b40), X(0x7f834588),
+  X(0x7f840edf), X(0x7f84d747), X(0x7f859ec1), X(0x7f86654d),
+  X(0x7f872aec), X(0x7f87ef9e), X(0x7f88b365), X(0x7f897641),
+  X(0x7f8a3832), X(0x7f8af93a), X(0x7f8bb959), X(0x7f8c7890),
+  X(0x7f8d36df), X(0x7f8df448), X(0x7f8eb0ca), X(0x7f8f6c67),
+  X(0x7f90271e), X(0x7f90e0f2), X(0x7f9199e2), X(0x7f9251f0),
+  X(0x7f93091b), X(0x7f93bf65), X(0x7f9474ce), X(0x7f952958),
+  X(0x7f95dd01), X(0x7f968fcd), X(0x7f9741ba), X(0x7f97f2ca),
+  X(0x7f98a2fd), X(0x7f995254), X(0x7f9a00d0), X(0x7f9aae71),
+  X(0x7f9b5b38), X(0x7f9c0726), X(0x7f9cb23b), X(0x7f9d5c78),
+  X(0x7f9e05de), X(0x7f9eae6e), X(0x7f9f5627), X(0x7f9ffd0b),
+  X(0x7fa0a31b), X(0x7fa14856), X(0x7fa1ecbf), X(0x7fa29054),
+  X(0x7fa33318), X(0x7fa3d50b), X(0x7fa4762c), X(0x7fa5167e),
+  X(0x7fa5b601), X(0x7fa654b5), X(0x7fa6f29b), X(0x7fa78fb3),
+  X(0x7fa82bff), X(0x7fa8c77f), X(0x7fa96234), X(0x7fa9fc1e),
+  X(0x7faa953e), X(0x7fab2d94), X(0x7fabc522), X(0x7fac5be8),
+  X(0x7facf1e6), X(0x7fad871d), X(0x7fae1b8f), X(0x7faeaf3b),
+  X(0x7faf4222), X(0x7fafd445), X(0x7fb065a4), X(0x7fb0f641),
+  X(0x7fb1861b), X(0x7fb21534), X(0x7fb2a38c), X(0x7fb33124),
+  X(0x7fb3bdfb), X(0x7fb44a14), X(0x7fb4d56f), X(0x7fb5600c),
+  X(0x7fb5e9ec), X(0x7fb6730f), X(0x7fb6fb76), X(0x7fb78323),
+  X(0x7fb80a15), X(0x7fb8904d), X(0x7fb915cc), X(0x7fb99a92),
+  X(0x7fba1ea0), X(0x7fbaa1f7), X(0x7fbb2497), X(0x7fbba681),
+  X(0x7fbc27b5), X(0x7fbca835), X(0x7fbd2801), X(0x7fbda719),
+  X(0x7fbe257e), X(0x7fbea331), X(0x7fbf2032), X(0x7fbf9c82),
+  X(0x7fc01821), X(0x7fc09311), X(0x7fc10d52), X(0x7fc186e4),
+  X(0x7fc1ffc8), X(0x7fc277ff), X(0x7fc2ef89), X(0x7fc36667),
+  X(0x7fc3dc9a), X(0x7fc45221), X(0x7fc4c6ff), X(0x7fc53b33),
+  X(0x7fc5aebe), X(0x7fc621a0), X(0x7fc693db), X(0x7fc7056f),
+  X(0x7fc7765c), X(0x7fc7e6a3), X(0x7fc85645), X(0x7fc8c542),
+  X(0x7fc9339b), X(0x7fc9a150), X(0x7fca0e63), X(0x7fca7ad3),
+  X(0x7fcae6a2), X(0x7fcb51cf), X(0x7fcbbc5c), X(0x7fcc2649),
+  X(0x7fcc8f97), X(0x7fccf846), X(0x7fcd6058), X(0x7fcdc7cb),
+  X(0x7fce2ea2), X(0x7fce94dd), X(0x7fcefa7b), X(0x7fcf5f7f),
+  X(0x7fcfc3e8), X(0x7fd027b7), X(0x7fd08aed), X(0x7fd0ed8b),
+  X(0x7fd14f90), X(0x7fd1b0fd), X(0x7fd211d4), X(0x7fd27214),
+  X(0x7fd2d1bf), X(0x7fd330d4), X(0x7fd38f55), X(0x7fd3ed41),
+  X(0x7fd44a9a), X(0x7fd4a761), X(0x7fd50395), X(0x7fd55f37),
+  X(0x7fd5ba48), X(0x7fd614c9), X(0x7fd66eba), X(0x7fd6c81b),
+  X(0x7fd720ed), X(0x7fd77932), X(0x7fd7d0e8), X(0x7fd82812),
+  X(0x7fd87eae), X(0x7fd8d4bf), X(0x7fd92a45), X(0x7fd97f40),
+  X(0x7fd9d3b0), X(0x7fda2797), X(0x7fda7af5), X(0x7fdacdca),
+  X(0x7fdb2018), X(0x7fdb71dd), X(0x7fdbc31c), X(0x7fdc13d5),
+  X(0x7fdc6408), X(0x7fdcb3b6), X(0x7fdd02df), X(0x7fdd5184),
+  X(0x7fdd9fa5), X(0x7fdded44), X(0x7fde3a60), X(0x7fde86fb),
+  X(0x7fded314), X(0x7fdf1eac), X(0x7fdf69c4), X(0x7fdfb45d),
+  X(0x7fdffe76), X(0x7fe04811), X(0x7fe0912e), X(0x7fe0d9ce),
+  X(0x7fe121f0), X(0x7fe16996), X(0x7fe1b0c1), X(0x7fe1f770),
+  X(0x7fe23da4), X(0x7fe2835f), X(0x7fe2c89f), X(0x7fe30d67),
+  X(0x7fe351b5), X(0x7fe3958c), X(0x7fe3d8ec), X(0x7fe41bd4),
+  X(0x7fe45e46), X(0x7fe4a042), X(0x7fe4e1c8), X(0x7fe522da),
+  X(0x7fe56378), X(0x7fe5a3a1), X(0x7fe5e358), X(0x7fe6229b),
+  X(0x7fe6616d), X(0x7fe69fcc), X(0x7fe6ddbb), X(0x7fe71b39),
+  X(0x7fe75847), X(0x7fe794e5), X(0x7fe7d114), X(0x7fe80cd5),
+  X(0x7fe84827), X(0x7fe8830c), X(0x7fe8bd84), X(0x7fe8f78f),
+  X(0x7fe9312f), X(0x7fe96a62), X(0x7fe9a32b), X(0x7fe9db8a),
+  X(0x7fea137e), X(0x7fea4b09), X(0x7fea822b), X(0x7feab8e5),
+  X(0x7feaef37), X(0x7feb2521), X(0x7feb5aa4), X(0x7feb8fc1),
+  X(0x7febc478), X(0x7febf8ca), X(0x7fec2cb6), X(0x7fec603e),
+  X(0x7fec9363), X(0x7fecc623), X(0x7fecf881), X(0x7fed2a7c),
+  X(0x7fed5c16), X(0x7fed8d4e), X(0x7fedbe24), X(0x7fedee9b),
+  X(0x7fee1eb1), X(0x7fee4e68), X(0x7fee7dc0), X(0x7feeacb9),
+  X(0x7feedb54), X(0x7fef0991), X(0x7fef3771), X(0x7fef64f5),
+  X(0x7fef921d), X(0x7fefbee8), X(0x7fefeb59), X(0x7ff0176f),
+  X(0x7ff0432a), X(0x7ff06e8c), X(0x7ff09995), X(0x7ff0c444),
+  X(0x7ff0ee9c), X(0x7ff1189b), X(0x7ff14243), X(0x7ff16b94),
+  X(0x7ff1948e), X(0x7ff1bd32), X(0x7ff1e581), X(0x7ff20d7b),
+  X(0x7ff2351f), X(0x7ff25c70), X(0x7ff2836d), X(0x7ff2aa17),
+  X(0x7ff2d06d), X(0x7ff2f672), X(0x7ff31c24), X(0x7ff34185),
+  X(0x7ff36695), X(0x7ff38b55), X(0x7ff3afc4), X(0x7ff3d3e4),
+  X(0x7ff3f7b4), X(0x7ff41b35), X(0x7ff43e69), X(0x7ff4614e),
+  X(0x7ff483e6), X(0x7ff4a631), X(0x7ff4c82f), X(0x7ff4e9e1),
+  X(0x7ff50b47), X(0x7ff52c62), X(0x7ff54d33), X(0x7ff56db9),
+  X(0x7ff58df5), X(0x7ff5ade7), X(0x7ff5cd90), X(0x7ff5ecf1),
+  X(0x7ff60c09), X(0x7ff62ada), X(0x7ff64963), X(0x7ff667a5),
+  X(0x7ff685a1), X(0x7ff6a357), X(0x7ff6c0c7), X(0x7ff6ddf1),
+  X(0x7ff6fad7), X(0x7ff71778), X(0x7ff733d6), X(0x7ff74fef),
+  X(0x7ff76bc6), X(0x7ff78759), X(0x7ff7a2ab), X(0x7ff7bdba),
+  X(0x7ff7d888), X(0x7ff7f315), X(0x7ff80d61), X(0x7ff8276c),
+  X(0x7ff84138), X(0x7ff85ac4), X(0x7ff87412), X(0x7ff88d20),
+  X(0x7ff8a5f0), X(0x7ff8be82), X(0x7ff8d6d7), X(0x7ff8eeef),
+  X(0x7ff906c9), X(0x7ff91e68), X(0x7ff935cb), X(0x7ff94cf2),
+  X(0x7ff963dd), X(0x7ff97a8f), X(0x7ff99105), X(0x7ff9a742),
+  X(0x7ff9bd45), X(0x7ff9d30f), X(0x7ff9e8a0), X(0x7ff9fdf9),
+  X(0x7ffa131a), X(0x7ffa2803), X(0x7ffa3cb4), X(0x7ffa512f),
+  X(0x7ffa6573), X(0x7ffa7981), X(0x7ffa8d59), X(0x7ffaa0fc),
+  X(0x7ffab46a), X(0x7ffac7a3), X(0x7ffadaa8), X(0x7ffaed78),
+  X(0x7ffb0015), X(0x7ffb127f), X(0x7ffb24b6), X(0x7ffb36bb),
+  X(0x7ffb488d), X(0x7ffb5a2e), X(0x7ffb6b9d), X(0x7ffb7cdb),
+  X(0x7ffb8de9), X(0x7ffb9ec6), X(0x7ffbaf73), X(0x7ffbbff1),
+  X(0x7ffbd03f), X(0x7ffbe05e), X(0x7ffbf04f), X(0x7ffc0012),
+  X(0x7ffc0fa6), X(0x7ffc1f0d), X(0x7ffc2e47), X(0x7ffc3d54),
+  X(0x7ffc4c35), X(0x7ffc5ae9), X(0x7ffc6971), X(0x7ffc77ce),
+  X(0x7ffc8600), X(0x7ffc9407), X(0x7ffca1e4), X(0x7ffcaf96),
+  X(0x7ffcbd1f), X(0x7ffcca7e), X(0x7ffcd7b4), X(0x7ffce4c1),
+  X(0x7ffcf1a5), X(0x7ffcfe62), X(0x7ffd0af6), X(0x7ffd1763),
+  X(0x7ffd23a9), X(0x7ffd2fc8), X(0x7ffd3bc1), X(0x7ffd4793),
+  X(0x7ffd533f), X(0x7ffd5ec5), X(0x7ffd6a27), X(0x7ffd7563),
+  X(0x7ffd807a), X(0x7ffd8b6e), X(0x7ffd963d), X(0x7ffda0e8),
+  X(0x7ffdab70), X(0x7ffdb5d5), X(0x7ffdc017), X(0x7ffdca36),
+  X(0x7ffdd434), X(0x7ffdde0f), X(0x7ffde7c9), X(0x7ffdf161),
+  X(0x7ffdfad8), X(0x7ffe042f), X(0x7ffe0d65), X(0x7ffe167b),
+  X(0x7ffe1f71), X(0x7ffe2848), X(0x7ffe30ff), X(0x7ffe3997),
+  X(0x7ffe4211), X(0x7ffe4a6c), X(0x7ffe52a9), X(0x7ffe5ac8),
+  X(0x7ffe62c9), X(0x7ffe6aae), X(0x7ffe7275), X(0x7ffe7a1f),
+  X(0x7ffe81ad), X(0x7ffe891f), X(0x7ffe9075), X(0x7ffe97b0),
+  X(0x7ffe9ece), X(0x7ffea5d2), X(0x7ffeacbb), X(0x7ffeb38a),
+  X(0x7ffeba3e), X(0x7ffec0d8), X(0x7ffec758), X(0x7ffecdbf),
+  X(0x7ffed40d), X(0x7ffeda41), X(0x7ffee05d), X(0x7ffee660),
+  X(0x7ffeec4b), X(0x7ffef21f), X(0x7ffef7da), X(0x7ffefd7e),
+  X(0x7fff030b), X(0x7fff0881), X(0x7fff0de0), X(0x7fff1328),
+  X(0x7fff185b), X(0x7fff1d77), X(0x7fff227e), X(0x7fff276f),
+  X(0x7fff2c4b), X(0x7fff3112), X(0x7fff35c4), X(0x7fff3a62),
+  X(0x7fff3eeb), X(0x7fff4360), X(0x7fff47c2), X(0x7fff4c0f),
+  X(0x7fff504a), X(0x7fff5471), X(0x7fff5885), X(0x7fff5c87),
+  X(0x7fff6076), X(0x7fff6452), X(0x7fff681d), X(0x7fff6bd6),
+  X(0x7fff6f7d), X(0x7fff7313), X(0x7fff7698), X(0x7fff7a0c),
+  X(0x7fff7d6f), X(0x7fff80c2), X(0x7fff8404), X(0x7fff8736),
+  X(0x7fff8a58), X(0x7fff8d6b), X(0x7fff906e), X(0x7fff9362),
+  X(0x7fff9646), X(0x7fff991c), X(0x7fff9be3), X(0x7fff9e9c),
+  X(0x7fffa146), X(0x7fffa3e2), X(0x7fffa671), X(0x7fffa8f1),
+  X(0x7fffab65), X(0x7fffadca), X(0x7fffb023), X(0x7fffb26f),
+  X(0x7fffb4ae), X(0x7fffb6e0), X(0x7fffb906), X(0x7fffbb20),
+  X(0x7fffbd2e), X(0x7fffbf30), X(0x7fffc126), X(0x7fffc311),
+  X(0x7fffc4f1), X(0x7fffc6c5), X(0x7fffc88f), X(0x7fffca4d),
+  X(0x7fffcc01), X(0x7fffcdab), X(0x7fffcf4a), X(0x7fffd0e0),
+  X(0x7fffd26b), X(0x7fffd3ec), X(0x7fffd564), X(0x7fffd6d2),
+  X(0x7fffd838), X(0x7fffd993), X(0x7fffdae6), X(0x7fffdc31),
+  X(0x7fffdd72), X(0x7fffdeab), X(0x7fffdfdb), X(0x7fffe104),
+  X(0x7fffe224), X(0x7fffe33c), X(0x7fffe44d), X(0x7fffe556),
+  X(0x7fffe657), X(0x7fffe751), X(0x7fffe844), X(0x7fffe930),
+  X(0x7fffea15), X(0x7fffeaf3), X(0x7fffebca), X(0x7fffec9b),
+  X(0x7fffed66), X(0x7fffee2a), X(0x7fffeee8), X(0x7fffefa0),
+  X(0x7ffff053), X(0x7ffff0ff), X(0x7ffff1a6), X(0x7ffff247),
+  X(0x7ffff2e4), X(0x7ffff37a), X(0x7ffff40c), X(0x7ffff499),
+  X(0x7ffff520), X(0x7ffff5a3), X(0x7ffff621), X(0x7ffff69b),
+  X(0x7ffff710), X(0x7ffff781), X(0x7ffff7ee), X(0x7ffff857),
+  X(0x7ffff8bb), X(0x7ffff91c), X(0x7ffff979), X(0x7ffff9d2),
+  X(0x7ffffa27), X(0x7ffffa79), X(0x7ffffac8), X(0x7ffffb13),
+  X(0x7ffffb5b), X(0x7ffffba0), X(0x7ffffbe2), X(0x7ffffc21),
+  X(0x7ffffc5d), X(0x7ffffc96), X(0x7ffffccd), X(0x7ffffd01),
+  X(0x7ffffd32), X(0x7ffffd61), X(0x7ffffd8e), X(0x7ffffdb8),
+  X(0x7ffffde0), X(0x7ffffe07), X(0x7ffffe2b), X(0x7ffffe4d),
+  X(0x7ffffe6d), X(0x7ffffe8b), X(0x7ffffea8), X(0x7ffffec3),
+  X(0x7ffffedc), X(0x7ffffef4), X(0x7fffff0a), X(0x7fffff1f),
+  X(0x7fffff33), X(0x7fffff45), X(0x7fffff56), X(0x7fffff66),
+  X(0x7fffff75), X(0x7fffff82), X(0x7fffff8f), X(0x7fffff9a),
+  X(0x7fffffa5), X(0x7fffffaf), X(0x7fffffb8), X(0x7fffffc0),
+  X(0x7fffffc8), X(0x7fffffce), X(0x7fffffd5), X(0x7fffffda),
+  X(0x7fffffdf), X(0x7fffffe4), X(0x7fffffe8), X(0x7fffffeb),
+  X(0x7fffffef), X(0x7ffffff1), X(0x7ffffff4), X(0x7ffffff6),
+  X(0x7ffffff8), X(0x7ffffff9), X(0x7ffffffb), X(0x7ffffffc),
+  X(0x7ffffffd), X(0x7ffffffd), X(0x7ffffffe), X(0x7fffffff),
+  X(0x7fffffff), X(0x7fffffff), X(0x7fffffff), X(0x7fffffff),
+  X(0x7fffffff), X(0x7fffffff), X(0x7fffffff), X(0x7fffffff),
+  X(0x7fffffff), X(0x7fffffff), X(0x7fffffff), X(0x7fffffff),
+};
+
+#endif
