diff -rNu old/accuracy.h new/accuracy.h --- old/accuracy.h 1970-01-01 01:00:00.000000000 +0100 +++ new/accuracy.h 2003-11-27 11:17:10.000000000 +0100 @@ -0,0 +1,4 @@ +#ifndef _accuracy_H_ +#define _accuracy_H_ +#define _MULT_32_16 +#endif diff -rNu old/cfft.c new/cfft.c --- old/cfft.c 1970-01-01 01:00:00.000000000 +0100 +++ new/cfft.c 2003-11-27 11:18:01.000000000 +0100 @@ -0,0 +1,109 @@ +/***************************************************************************** + * + * 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. + * + * + * Copyright (C) 2003 Johannes Sandvall, Erik Montnemery + ****************************************************************************/ + +#include +#include +#include "misc.h" +#include "cfft.h" +#include "jmisc.h" + +#define ONE 2147483648.0 + +void cfft_last2(int nbr_blocks, LDATA *fftdata) +{ + LDATA *vr = fftdata; + LDATA *vi = fftdata+1; + + LDATA r1, r2, r3, r4; + LDATA i1, i2, i3, i4; + int i; + int index = 0; + + for (i=0; i 256 points +void cfft_butterflies(int point_n2, LDATA *fftdata) +{ + int i; + LDATA r1,r2,i1,i2; + LDATA tr,ti; + LDATA tcos,tsin; + LDATA ttcos, ttsin; + + LDATA *vr = fftdata; + LDATA *vi = fftdata+1; + + int nbr_pass = point_n2 - 2; // last 2 stages + int pass; + int nbr_blocks= 1; + int block; + int nbr_points = 1 << point_n2; + int block_offset = nbr_blocks; + int bs = 0; /* block start */ + int be = 1 << (point_n2-1); + int lookup_step = (CLEN / nbr_points) << 1; /* two value in lookup */ + + // pass loop + for (pass=0; pass>1);i++) { + /* 2-radix butterfly */ + r1 = vr[(bs+i)*2] + vr[(be+i)*2]; + i1 = vi[(bs+i)*2] + vi[(be+i)*2]; + /* lookup table */ + tcos = fft_cossin_lookup[i*lookup_step]; + tsin = fft_cossin_lookup[i*lookup_step+1]; + tr = vr[(bs+i)*2] - vr[(be+i)*2]; + ti = vi[(bs+i)*2] - vi[(be+i)*2]; + r2 = JMULT(tr, tcos) + JMULT(ti, tsin); + i2 = JMULT(ti, tcos) - JMULT(tr, tsin); + + vr[(bs+i)*2] = r1; vr[(be+i)*2] = r2; + vi[(bs+i)*2] = i1; vi[(be+i)*2] = i2; + } + bs += nbr_points; + be += nbr_points; + } + nbr_blocks <<= 1; + nbr_points >>= 1; + bs = 0; + be = nbr_points >> 1; + lookup_step <<= 1; + } +} + +void cfft(int points_n2, LDATA *fftdata) +{ + int points = 1 << points_n2; + + cfft_butterflies(points_n2, fftdata); + cfft_last2(1 << (points_n2-2), fftdata); +} + + diff -rNu old/cfft.h new/cfft.h --- old/cfft.h 1970-01-01 01:00:00.000000000 +0100 +++ new/cfft.h 2003-11-27 11:18:01.000000000 +0100 @@ -0,0 +1,22 @@ +/***************************************************************************** + * + * 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. + * + * + * Copyright (C) 2003 Johannes Sandvall, Erik Montnemery + ****************************************************************************/ +#ifndef _CFFT_H +#define _CFFT_H + +#include "jmisc.h" + +void cfft(int points_n2, LDATA *fftdata); +void cfft_last2(int nbr_blocks, LDATA *fftdata); +void cfft_butterflies(int point_n2, LDATA *fftdata); +void cifft3216_NOSCALE (LDATA *x, unsigned int nx); + +#endif /* _CFFT_H */ diff -rNu old/dsp.c new/dsp.c --- old/dsp.c 2003-11-27 11:15:20.000000000 +0100 +++ new/dsp.c 2003-11-27 11:17:10.000000000 +0100 @@ -18,10 +18,12 @@ #include #include "ogg.h" #include "mdct.h" +#include "imdct.h" #include "ivorbiscodec.h" #include "codec_internal.h" #include "misc.h" #include "window_lookup.h" +#define MDCT_FFT int vorbis_dsp_restart(vorbis_dsp_state *v){ if(!v)return -1; @@ -122,12 +124,21 @@ int i; if(n>samples)n=samples; for(i=0;ichannels;i++) - mdct_unroll_lap(ci->blocksizes[0],ci->blocksizes[1], +#ifdef MDCT_FFT + imdct_sort_pcmout(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); +#else + 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); +#endif /* MDCT_FFT */ } return(n); } @@ -198,7 +209,11 @@ vd->lW=vd->W; vd->W=ci->mode_param[mode].blockflag; for(i=0;ichannels;i++) +#ifdef MDCT_FFT + imdct_shift_right(ci->blocksizes[vd->lW],vd->work[i],vd->mdctright[i]); +#else mdct_shift_right(ci->blocksizes[vd->lW],vd->work[i],vd->mdctright[i]); +#endif /* MDCT_FFT */ if(vd->W){ int temp; diff -rNu old/imdct_55xx.c new/imdct_55xx.c --- old/imdct_55xx.c 1970-01-01 01:00:00.000000000 +0100 +++ new/imdct_55xx.c 2003-11-27 11:18:07.000000000 +0100 @@ -0,0 +1,256 @@ +/***************************************************************************** + * + * 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. + * + * + * Copyright (C) 2003 Johannes Sandvall, Erik Montnemery + ***************************************************************************** + + TI 55xx version + + Algorithm based on R. Gluth, Regular FFT-related transform kernels for + DCT/DST-based polyphase filter banks, In ICASSP, 1991, + pp. 2205-8 vol 3 + + IMDCT steps: + 1. Re-organize input (here, the sorting is done after the pre-rotate) + 2. Pre-rotate + 3. Complex FFT + 4. Bitreverse + 5. Post-rotate + 6. Re-organize output (not done, sorting code:) + + for (i=0; i +#include "misc.h" +#include "imdct.h" +#include "cfft.h" +#include "jmisc.h" +#include +#include + +#define ONE 2147483648.0 + +void prerot(LDATA *fftdata, LOOKUP_T *lookup_table, ogg_int16_t length2); +void postrot(LDATA *fftdata, LOOKUP_T *lookup_table, ogg_int16_t length2); +void sort_prelap(LDATA *right, ogg_int16_t *out, int loop_count, int step); +void sort_postlap(LDATA *fftdata1, LDATA *fftdata2, ogg_int16_t *out, + int loop_count, int step); +void sort_crosslap1(LDATA *fftdata1, LDATA *fftdata2, + LDATA *right, const unsigned short *wl, const unsigned short *wr, + ogg_int16_t *out, int loop_count, int dir, int step); + +void imdct(int n, LDATA *fftdata) +{ + int i; + int length = n; + int length2 = length >> 1; /* length / 2 */ + int length4 = length >> 2; /* length / 4 */ + int length8 = length >> 3; /* length / 8 */ + LDATA ur_r, ur_i; + LOOKUP_T *w_r; + + LOOKUP_T *lookup_table; + + switch (length4) { + case 8: + lookup_table = fft_cossin_lookup8; + break; + case 16: + lookup_table = fft_cossin_lookup16; + break; + case 32: + lookup_table = fft_cossin_lookup32; + break; + case 64: + lookup_table = fft_cossin_lookup64; + break; + case 128: + lookup_table = fft_cossin_lookup128; + break; + case 256: + lookup_table = fft_cossin_lookup256; + break; + case 512: + lookup_table = fft_cossin_lookup512; + break; + case 1024: + lookup_table = fft_cossin_lookup1024; + break; + } + prerot(fftdata, lookup_table, length2); + + for (i=0;i>2); + + /* bit reverse */ + cbrev32(fftdata,fftdata,n>>2); + + /* complex post-rotation */ + postrot(fftdata, lookup_table, length2); +} +/*void sort_pcm_out(int n0, int n1, int lW, int W, LDATA *fftdata, LDATA *right, + LOOKUP_T *w0, LOOKUP_T *w1, ogg_int16_t *out, + int step, int start, int end);*/ +void imdct_sort_pcmout(int n0, int n1, int lW, int W, LDATA *fftdata, LDATA *right, + LOOKUP_T *w0, LOOKUP_T *w1, ogg_int16_t *out, + int step, int start, int end) +{ + unsigned int length, length2, length4; + unsigned int i; + static int debugctr = 0; + + LOOKUP_T *w_r = (W && lW ? w1+(n1>>1) : w0+(n0>>1)); + LOOKUP_T *w_l = (W && lW ? w1 : w0 ); + LDATA *l0 = fftdata; + LDATA *l1 = fftdata; + LDATA *r0 = right; + + unsigned int pre_lap = (lW && !W ? (n1>>2)-(n0>>2) : 0); + unsigned int half_lap = (lW && W ? (n1>>2):(n0>>2)); + unsigned int post_lap = (!lW && W ? (n1>>2)-(n0>>2) : 0); + + int blockstart, blockend, blocklen; + + length = (W == 1 ? n1 : n0); + length2 = length >> 1; + length4 = length >> 2; + + /* preceeding direct-copy lapping from previous frame, if any */ + if (pre_lap) { + blockstart = (start> 2; + LDATA *r0 = fftdata+length4+1; + LDATA *r1 = fftdata+length4-2; + + for (i=1; i<=length4; i++) { + *right++ = *r0; + *right++ = -*r1; + r0+=2; + r1-=2; + i++; + } + +} + +#ifndef __TMS320C55X__ +static unsigned char bitrev[16]={0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15}; + +static inline int bitrev12(int x){ + return bitrev[x>>8]|(bitrev[(x&0x0f0)>>4]<<4)|(((int)bitrev[x&0x00f])<<8); +} + +void imdct_bitreverse(int point_n2, LDATA *x) +{ + int i; + int rev_i; + int n = 1 << point_n2; + int shift = 12 - point_n2; + + for (i=0; i> shift; + if (rev_i > i) { + LDATA t; + t = x[i*2]; + x[i*2] = x[rev_i*2]; + x[rev_i*2] = t; + t = x[i*2+1]; + x[i*2+1] = x[rev_i*2+1]; + x[rev_i*2+1] = t; + } + } +} +#endif diff -rNu old/imdct.c new/imdct.c --- old/imdct.c 1970-01-01 01:00:00.000000000 +0100 +++ new/imdct.c 2003-11-27 11:18:07.000000000 +0100 @@ -0,0 +1,271 @@ +/***************************************************************************** + * + * 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. + * + * + * Copyright (C) 2003 Johannes Sandvall, Erik Montnemery + ***************************************************************************** + + Algorithm based on R. Gluth, Regular FFT-related transform kernels for + DCT/DST-based polyphase filter banks, In ICASSP, 1991, + pp. 2205-8 vol 3 + + IMDCT steps: + 1. Re-organize input (here, the sorting is done after the pre-rotate) + 2. Pre-rotate + 3. Complex FFT + 4. Bitreverse + 5. Post-rotate + 6. Re-organize output (not done, sorting code:) + + for (i=0; i +#include "misc.h" +#include "imdct.h" +#include "cfft.h" +#include "jmisc.h" +#include + +#define ONE 2147483648.0 + +void imdct(int n, LDATA *fftdata) +{ + int i; + int length = n >> 0; + int length2 = length >> 1; /* length / 2 */ + int length4 = length >> 2; /* length / 4 */ + int length8 = length >> 3; /* length / 8 */ + int point_n2 = 0; + LDATA ur_r, ur_i; + LOOKUP_T *w_r; + + LOOKUP_T *lookup_table; + + switch (length4) { + case 8: + lookup_table = fft_cossin_lookup8; + break; + case 16: + lookup_table = fft_cossin_lookup16; + break; + case 32: + lookup_table = fft_cossin_lookup32; + break; + case 64: + lookup_table = fft_cossin_lookup64; + break; + case 128: + lookup_table = fft_cossin_lookup128; + break; + case 256: + lookup_table = fft_cossin_lookup256; + break; + case 512: + lookup_table = fft_cossin_lookup512; + break; + case 1024: + lookup_table = fft_cossin_lookup1024; + break; + } + w_r = lookup_table; + /* complex pre-rotation */ + for (i=0;i> 1; + ur_i = fftdata[length2 - 1 - 2*i];// >> 1; + fftdata[2*i] = MULT31(ur_r, *w_r) + MULT31(ur_i, *(w_r+1)); + fftdata[length2 - 1 - 2*i] = MULT31(ur_i, *w_r) - MULT31(ur_r, *(w_r+1)); + w_r+=2; + } + + for (i=0;i>=1) + point_n2++; + + /* complex inverse FFT N/4*/ + cfft(point_n2-2, fftdata); + + /* bit reverse */ + imdct_bitreverse(point_n2-2, fftdata); + + w_r = lookup_table; + /* complex post-rotation */ + for (i=0; i>1) : w0+(n0>>1)); + LOOKUP_T *w_l = (W && lW ? w1 : w0 ); + LDATA *l0 = fftdata; + LDATA *l1 = fftdata; + LDATA *r0 = right; + + unsigned int pre_lap = (lW && !W ? (n1>>2)-(n0>>2) : 0); + unsigned int half_lap = (lW && W ? (n1>>2):(n0>>2)); + unsigned int post_lap = (!lW && W ? (n1>>2)-(n0>>2) : 0); + + int blockstart, blockend; + + length = (W == 1 ? n1 : n0); + length2 = length >> 1; + length4 = length >> 2; + + /* preceeding direct-copy lapping from previous frame, if any */ + if (pre_lap) { + blockstart = (start> 9); + out += step; + } + } + + blockstart = (start>9); /* even, Re2 */ + l0+=2; + i++; + out += step; + *out = CLIP_TO_15((-MULT31(*l1, *w_l++) + MULT31(*r0++, *w_r--))>>9); /* odd, rev Im1 */ + l1-=2; + out += step; + } + w_r++; + + blockstart = (start>9); /* even, Im1 */ + l0+=2; + out += step; + i++; + *out = CLIP_TO_15((MULT31(-*l1, *w_l++) + MULT31(*--r0, *--w_r))>>9); /* odd, - rev Re2 */ + l1-=2; + out += step; + } + + if(post_lap) { + blockstart = (start> 9); + l0+=2; + i++; + out += step; + *out = CLIP_TO_15(-(*l1) >> 9); + l1-=2; + out += step; + } + } +} + +/* imdct_shift_right: + * fftdata: Re1, Re2, Im1, Im2, real and image value interleaved (Re1(0),Im1(0),Re1(1)...Re2(0),Im2(0)... + * stores right side of "imdct" to right + * right: Re1, Im2 + */ +void imdct_shift_right(int W, LDATA *fftdata, LDATA *right) +{ + unsigned int i; + unsigned int length4 = W >> 2; + LDATA *r0 = fftdata+length4+1; + LDATA *r1 = fftdata+length4-2; + + for (i=1; i<=length4; i++) { + *right++ = *r0; + *right++ = -*r1; + r0+=2; + r1-=2; + i++; + } + +} + +static unsigned char bitrev[16]={0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15}; + +static inline int bitrev12(int x){ + return bitrev[x>>8]|(bitrev[(x&0x0f0)>>4]<<4)|(((int)bitrev[x&0x00f])<<8); +} + +void imdct_bitreverse(int point_n2, LDATA *x) +{ + int i; + int rev_i; + int n = 1 << point_n2; + int shift = 12 - point_n2; + + for (i=0; i> shift; + if (rev_i > i) { + LDATA t; + t = x[i*2]; + x[i*2] = x[rev_i*2]; + x[rev_i*2] = t; + t = x[i*2+1]; + x[i*2+1] = x[rev_i*2+1]; + x[rev_i*2+1] = t; + } + } +} diff -rNu old/imdct_const1.h new/imdct_const1.h --- old/imdct_const1.h 1970-01-01 01:00:00.000000000 +0100 +++ new/imdct_const1.h 2003-11-27 11:18:07.000000000 +0100 @@ -0,0 +1,1037 @@ +/* cos, sin, 2*pi*(i+1/8) / 32 */ +static LOOKUP_T fft_cossin_lookup8[2*8] = { + X(0x7ff62182), X(0x3242abe), X(0x7ce3ceb1), X(0x1c0b826a), + X(0x7504d345), X(0x33def287), X(0x68a69e81), X(0x49b41533), + X(0x5842dd54), X(0x5cb420df), X(0x447acd50), X(0x6c242960), + X(0x2e110a61), X(0x776c4edb), X(0x15e21444), X(0x7e1d93e9),}; +/* cos, sin, 2*pi*(i+1/8) / 64 */ +static LOOKUP_T fft_cossin_lookup16[2*16] = { + X(0x7ffd885a), X(0x1921d1f), X(0x7f3857f5), X(0xe1bc2e3), + X(0x7d3980ec), X(0x1a82a025), X(0x7a05eead), X(0x26a82185), + X(0x75a585cf), X(0x326e54c7), X(0x70231099), X(0x3db832a5), + X(0x698c246c), X(0x4869e664), X(0x61f1003e), X(0x5269126e), + X(0x59646497), X(0x5b9d1153), X(0x4ffb654d), X(0x63ef328f), + X(0x45cd358f), X(0x6b4af278), X(0x3af2eeb7), X(0x719e2cd2), + X(0x2f875262), X(0x76d94988), X(0x23a6887e), X(0x7aef6323), + X(0x176dd9de), X(0x7dd6668e), X(0xafb6805), X(0x7f872bf2),}; +/* cos, sin, 2*pi*(i+1/8) / 128 */ +static LOOKUP_T fft_cossin_lookup32[2*32] = { + X(0x7fff6216), X(0xc90f87), X(0x7fce0c3e), X(0x710a344), + X(0x7f4de450), X(0xd53db92), X(0x7e7f3956), X(0x138edbb0), + X(0x7d628ac5), X(0x19bdcbf2), X(0x7bf88830), X(0x1fdcdc1a), + X(0x7a4210d8), X(0x25e845b5), X(0x78403328), X(0x2bdc4e6f), + X(0x75f42c0a), X(0x31b54a5d), X(0x735f6626), X(0x376f9e46), + X(0x708378fe), X(0x3d07c1d5), X(0x6d6227fa), X(0x427a41d0), + X(0x69fd614a), X(0x47c3c22e), X(0x66573cbb), X(0x4ce10034), + X(0x6271fa69), X(0x51ced46e), X(0x5e50015d), X(0x568a34a9), + X(0x59f3de12), X(0x5b1035cf), X(0x556040e2), X(0x5f5e0db3), + X(0x5097fc5e), X(0x637114cc), X(0x4b9e038f), X(0x6746c7d7), + X(0x46756827), X(0x6adcc964), X(0x4121589a), X(0x6e30e349), + X(0x3ba51e29), X(0x71410804), X(0x36041ad8), X(0x740b53fa), + X(0x3041c760), X(0x768e0ea5), X(0x2a61b101), X(0x78c7aba1), + X(0x24677757), X(0x7ab6cba3), X(0x1e56ca1e), X(0x7c5a3d4f), + X(0x183366e8), X(0x7db0fdf7), X(0x120116d4), X(0x7eba3a39), + X(0xbc3ac35), X(0x7f754e7f), X(0x57f0034), X(0x7fe1c76b),}; +/* cos, sin, 2*pi*(i+1/8) / 256 */ +static LOOKUP_T fft_cossin_lookup64[2*64] = { + X(0x7fffd885), X(0x6487e2), X(0x7ff38273), X(0x388a9e9), + X(0x7fd37152), X(0x6ac406f), X(0x7f9faa15), X(0x9cecf89), + X(0x7f5834b6), X(0xcefdb75), X(0x7efd1c3c), X(0x100ee8ad), + X(0x7e8e6eb1), X(0x132b7bf9), X(0x7e0c3d29), X(0x16451a83), + X(0x7d769bb5), X(0x195b49e9), X(0x7ccda168), X(0x1c6d9053), + X(0x7c116853), X(0x1f7b7480), X(0x7b420d7a), X(0x22847ddf), + X(0x7a5fb0d8), X(0x2588349d), X(0x796a7554), X(0x288621b9), + X(0x786280bf), X(0x2b7dcf17), X(0x7747fbce), X(0x2e6ec792), + X(0x761b1211), X(0x3158970d), X(0x74dbf1ef), X(0x343aca87), + X(0x738acc9e), X(0x3714f029), X(0x7227d61c), X(0x39e6975d), + X(0x70b34524), X(0x3caf50da), X(0x6f2d532c), X(0x3f6eaeb8), + X(0x6d963c53), X(0x42244480), X(0x6bee3f62), X(0x44cfa73f), + X(0x6a359db9), X(0x47706d93), X(0x686c9b4b), X(0x4a062fbd), + X(0x66937e90), X(0x4c9087b1), X(0x64aa907f), X(0x4f0f1126), + X(0x62b21c7b), X(0x518169a4), X(0x60aa704f), X(0x53e73097), + X(0x5e93dc1e), X(0x56400757), X(0x5c6eb258), X(0x588b913f), + X(0x5a3b47aa), X(0x5ac973b4), X(0x57f9f2f7), X(0x5cf95638), + X(0x55ab0d46), X(0x5f1ae273), X(0x534ef1b5), X(0x612dc446), + X(0x50e5fd6c), X(0x6331a9d4), X(0x4e708f8f), X(0x6526438e), + X(0x4bef092d), X(0x670b4443), X(0x4961cd32), X(0x68e06129), + X(0x46c9405c), X(0x6aa551e8), X(0x4425c923), X(0x6c59d0a9), + X(0x4177cfb0), X(0x6dfd9a1b), X(0x3ebfbdcc), X(0x6f906d84), + X(0x3bfdfecd), X(0x71120cc5), X(0x3932ff87), X(0x72823c66), + X(0x365f2e3b), X(0x73e0c3a3), X(0x3382fa88), X(0x752d6c6c), + X(0x309ed555), X(0x76680376), X(0x2db330c7), X(0x7790583d), + X(0x2ac08025), X(0x78a63d10), X(0x27c737d2), X(0x79a98715), + X(0x24c7cd32), X(0x7a9a0e4f), X(0x21c2b69c), X(0x7b77ada8), + X(0x1eb86b46), X(0x7c4242f2), X(0x1ba96334), X(0x7cf9aef0), + X(0x18961727), X(0x7d9dd55a), X(0x157f0086), X(0x7e2e9cdf), + X(0x1264994d), X(0x7eabef2c), X(0xf475bfe), X(0x7f15b8ed), + X(0xc27c389), X(0x7f6be9d4), X(0x9064b3a), X(0x7fae7494), + X(0x5e36ea9), X(0x7fdd4eec), X(0x2bfa9a4), X(0x7ff871a1),}; +/* cos, sin, 2*pi*(i+1/8) / 512 */ +static LOOKUP_T fft_cossin_lookup128[2*128] = { + X(0x7ffff621), X(0x3243f5), X(0x7ffce093), X(0x1c45ffe), + X(0x7ff4dbd8), X(0x3566a96), X(0x7fe7e840), X(0x4e8543d), + X(0x7fd6064b), X(0x67a0d75), X(0x7fbf36a9), X(0x80b86c1), + X(0x7fa37a3c), X(0x99cb0a7), X(0x7f82d214), X(0xb2d7bae), + X(0x7f5d3f75), X(0xcbdd865), X(0x7f32c3d0), X(0xe4db75b), + X(0x7f0360ca), X(0xfdd0925), X(0x7ecf1837), X(0x116bbe5f), + X(0x7e95ec19), X(0x12f9c7aa), X(0x7e57dea6), X(0x148715ad), + X(0x7e14f242), X(0x16139917), X(0x7dcd2981), X(0x179f429f), + X(0x7d808727), X(0x192a0303), X(0x7d2f0e2a), X(0x1ab3cb0c), + X(0x7cd8c1ad), X(0x1c3c8b8c), X(0x7c7da504), X(0x1dc4355d), + X(0x7c1dbbb2), X(0x1f4ab967), X(0x7bb9096a), X(0x20d0089b), + X(0x7b4f920e), X(0x225413f8), X(0x7ae159ae), X(0x23d6cc86), + X(0x7a6e648a), X(0x2558235e), X(0x79f6b711), X(0x26d809a4), + X(0x797a55e0), X(0x2856708c), X(0x78f945c3), X(0x29d34958), + X(0x78738bb3), X(0x2b4e8558), X(0x77e92cd8), X(0x2cc815ed), + X(0x775a2e88), X(0x2e3fec8b), X(0x76c69646), X(0x2fb5fab2), + X(0x762e69c3), X(0x312a31f7), X(0x7591aedd), X(0x329c8402), + X(0x74f06b9e), X(0x340ce28a), X(0x744aa63e), X(0x357b3f5d), + X(0x73a06522), X(0x36e78c5a), X(0x72f1aed8), X(0x3851bb76), + X(0x723e8a1f), X(0x39b9bebb), X(0x7186fddd), X(0x3b1f8847), + X(0x70cb1127), X(0x3c830a4f), X(0x700acb3b), X(0x3de4371f), + X(0x6f463383), X(0x3f430118), X(0x6e7d5193), X(0x409f5ab6), + X(0x6db02d29), X(0x41f93688), X(0x6cdece2e), X(0x4350873c), + X(0x6c093cb5), X(0x44a53f93), X(0x6b2f80fa), X(0x45f7526b), + X(0x6a51a361), X(0x4746b2bc), X(0x696fac78), X(0x48935397), + X(0x6889a4f5), X(0x49dd282a), X(0x679f95b7), X(0x4b2423bd), + X(0x66b187c3), X(0x4c6839b6), X(0x65bf8447), X(0x4da95d96), + X(0x64c99498), X(0x4ee782fa), X(0x63cfc230), X(0x50229da0), + X(0x62d216b2), X(0x515aa162), X(0x61d09be5), X(0x528f8237), + X(0x60cb5bb6), X(0x53c13438), X(0x5fc26038), X(0x54efab9c), + X(0x5eb5b3a1), X(0x561adcb8), X(0x5da5604e), X(0x5742bc05), + X(0x5c9170bf), X(0x58673e1b), X(0x5b79ef96), X(0x598857b1), + X(0x5a5ee79a), X(0x5aa5fda4), X(0x594063b4), X(0x5bc024f0), + X(0x581e6ef1), X(0x5cd6c2b4), X(0x56f9147e), X(0x5de9cc32), + X(0x55d05faa), X(0x5ef936d1), X(0x54a45be5), X(0x6004f818), + X(0x537514c1), X(0x610d05b7), X(0x524295ef), X(0x6211557d), + X(0x510ceb40), X(0x6311dd63), X(0x4fd420a3), X(0x640e9385), + X(0x4e984229), X(0x65076e24), X(0x4d595bfe), X(0x65fc63a9), + X(0x4c177a6e), X(0x66ed6aa1), X(0x4ad2a9e1), X(0x67da79c2), + X(0x498af6de), X(0x68c387e9), X(0x48406e07), X(0x69a88c18), + X(0x46f31c1a), X(0x6a897d7d), X(0x45a30df0), X(0x6b66536a), + X(0x4450507e), X(0x6c3f055d), X(0x42faf0d3), X(0x6d138afa), + X(0x41a2fc1a), X(0x6de3dc11), X(0x40487f93), X(0x6eaff098), + X(0x3eeb889c), X(0x6f77c0b3), X(0x3d8c24a7), X(0x703b44ac), + X(0x3c2a6142), X(0x70fa74fb), X(0x3ac64c0f), X(0x71b54a40), + X(0x395ff2c9), X(0x726bbd48), X(0x37f76340), X(0x731dc709), + X(0x368cab5c), X(0x73cb60a7), X(0x351fd917), X(0x74748371), + X(0x33b0fa84), X(0x751928e0), X(0x32401dc5), X(0x75b94a9c), + X(0x30cd5114), X(0x7654e279), X(0x2f58a2bd), X(0x76ebea77), + X(0x2de2211e), X(0x777e5cc3), X(0x2c69daa6), X(0x780c33b8), + X(0x2aefddd8), X(0x789569de), X(0x29743945), X(0x7919f9eb), + X(0x27f6fb92), X(0x7999dec3), X(0x26783370), X(0x7a151377), + X(0x24f7efa1), X(0x7a8b9348), X(0x23763ef7), X(0x7afd59a3), + X(0x21f3304e), X(0x7b6a6226), X(0x206ed295), X(0x7bd2a89e), + X(0x1ee934c2), X(0x7c362904), X(0x1d6265dd), X(0x7c94df82), + X(0x1bda74f5), X(0x7ceec873), X(0x1a517127), X(0x7d43e05e), + X(0x18c7699b), X(0x7d9423fb), X(0x173c6d80), X(0x7ddf9034), + X(0x15b08c11), X(0x7e26221e), X(0x1423d492), X(0x7e67d702), + X(0x1296564d), X(0x7ea4ac58), X(0x11082095), X(0x7edc9fc6), + X(0xf7942c6), X(0x7f0faf24), X(0xde9cc3f), X(0x7f3dd87c), + X(0xc59cc67), X(0x7f671a04), X(0xac952aa), X(0x7f8b7226), + X(0x9386e77), X(0x7faadf7c), X(0x7a72f45), X(0x7fc560ce), + X(0x615a48a), X(0x7fdaf518), X(0x483ddc3), X(0x7feb9b85), + X(0x2f1ea6b), X(0x7ff7536f), X(0x15fda03), X(0x7ffe1c64),}; +/* cos, sin, 2*pi*(i+1/8) / 1024 */ +static LOOKUP_T fft_cossin_lookup256[2*256] = { + X(0x7ffffd88), X(0x1921fb), X(0x7fff3824), X(0xe23160), + X(0x7ffd36ee), X(0x1ab3e97), X(0x7ff9f9eb), X(0x27447af), + X(0x7ff58124), X(0x33d4aba), X(0x7fefcca3), X(0x40645c6), + X(0x7fe8dc77), X(0x4cf36e5), X(0x7fe0b0b0), X(0x5981c25), + X(0x7fd74963), X(0x660f398), X(0x7fcca6a7), X(0x729bb4e), + X(0x7fc0c896), X(0x7f27157), X(0x7fb3af4d), X(0x8bb13c4), + X(0x7fa55aed), X(0x983a0a7), X(0x7f95cb9a), X(0xa4c1610), + X(0x7f850178), X(0xb147210), X(0x7f72fcb3), X(0xbdcb2ba), + X(0x7f5fbd76), X(0xca4d620), X(0x7f4b43f1), X(0xd6cda52), + X(0x7f359057), X(0xe34bd65), X(0x7f1ea2dc), X(0xefc7d6a), + X(0x7f067bba), X(0xfc41876), X(0x7eed1b2c), X(0x108b8c9a), + X(0x7ed28170), X(0x1152d7ec), X(0x7eb6aec9), X(0x1219f880), + X(0x7e99a37b), X(0x12e0ec69), X(0x7e7b5fce), X(0x13a7b1be), + X(0x7e5be40c), X(0x146e4694), X(0x7e3b3083), X(0x1534a900), + X(0x7e194584), X(0x15fad71a), X(0x7df62362), X(0x16c0cef8), + X(0x7dd1ca74), X(0x17868eb2), X(0x7dac3b14), X(0x184c1461), + X(0x7d85759f), X(0x19115e1b), X(0x7d5d7a73), X(0x19d669fc), + X(0x7d3449f5), X(0x1a9b361c), X(0x7d09e489), X(0x1b5fc096), + X(0x7cde4a97), X(0x1c240786), X(0x7cb17c8d), X(0x1ce80906), + X(0x7c837ad7), X(0x1dabc333), X(0x7c5445e8), X(0x1e6f342b), + X(0x7c23de35), X(0x1f325a0b), X(0x7bf24433), X(0x1ff532f1), + X(0x7bbf785f), X(0x20b7bcfd), X(0x7b8b7b35), X(0x2179f64f), + X(0x7b564d36), X(0x223bdd07), X(0x7b1feee4), X(0x22fd6f48), + X(0x7ae860c7), X(0x23beab32), X(0x7aafa366), X(0x247f8eeb), + X(0x7a75b74e), X(0x25401895), X(0x7a3a9d0f), X(0x26004657), + X(0x79fe5539), X(0x26c01654), X(0x79c0e061), X(0x277f86b5), + X(0x79823f20), X(0x283e95a1), X(0x7942720f), X(0x28fd4140), + X(0x790179cd), X(0x29bb87bc), X(0x78bf56f8), X(0x2a796740), + X(0x787c0a36), X(0x2b36ddf6), X(0x7837942b), X(0x2bf3ea0d), + X(0x77f1f580), X(0x2cb089b0), X(0x77ab2ee2), X(0x2d6cbb0f), + X(0x776340ff), X(0x2e287c5a), X(0x771a2c88), X(0x2ee3cbc0), + X(0x76cff232), X(0x2f9ea775), X(0x768492b3), X(0x30590daa), + X(0x76380ec7), X(0x3112fc94), X(0x75ea672a), X(0x31cc7269), + X(0x759b9c9a), X(0x32856d5e), X(0x754bafdb), X(0x333debab), + X(0x74faa1b3), X(0x33f5eb89), X(0x74a872e8), X(0x34ad6b32), + X(0x74552445), X(0x356468e1), X(0x7400b699), X(0x361ae2d3), + X(0x73ab2ab4), X(0x36d0d745), X(0x73548168), X(0x37864477), + X(0x72fcbb8b), X(0x383b28a8), X(0x72a3d9f7), X(0x38ef821b), + X(0x7249dd86), X(0x39a34f13), X(0x71eec716), X(0x3a568dd3), + X(0x71929788), X(0x3b093ca2), X(0x71354fc0), X(0x3bbb59c7), + X(0x70d6f0a3), X(0x3c6ce38a), X(0x70777b1b), X(0x3d1dd835), + X(0x7016f013), X(0x3dce3613), X(0x6fb5507a), X(0x3e7dfb72), + X(0x6f529d3f), X(0x3f2d26a0), X(0x6eeed758), X(0x3fdbb5ec), + X(0x6e89ffb9), X(0x4089a7a8), X(0x6e24175c), X(0x4136fa26), + X(0x6dbd1f3c), X(0x41e3abbb), X(0x6d551857), X(0x428fbabe), + X(0x6cec03ae), X(0x433b2584), X(0x6c81e245), X(0x43e5ea68), + X(0x6c16b520), X(0x449007c4), X(0x6baa7d49), X(0x45397bf4), + X(0x6b3d3bca), X(0x45e24556), X(0x6acef1b2), X(0x468a624a), + X(0x6a5fa00f), X(0x4731d130), X(0x69ef47f6), X(0x47d8906d), + X(0x697dea7a), X(0x487e9e63), X(0x690b88b5), X(0x4923f97b), + X(0x689823bf), X(0x49c8a01b), X(0x6823bcb6), X(0x4a6c90ad), + X(0x67ae54b9), X(0x4b0fc99d), X(0x6737ecea), X(0x4bb24958), + X(0x66c0866c), X(0x4c540e4d), X(0x66482267), X(0x4cf516ed), + X(0x65cec203), X(0x4d9561ab), X(0x6554666c), X(0x4e34ecfc), + X(0x64d910d0), X(0x4ed3b754), X(0x645cc260), X(0x4f71bf2d), + X(0x63df7c4d), X(0x500f0302), X(0x63613fcd), X(0x50ab814c), + X(0x62e20e17), X(0x5147388c), X(0x6261e866), X(0x51e22740), + X(0x61e0cff5), X(0x527c4bea), X(0x615ec603), X(0x5315a50d), + X(0x60dbcbd1), X(0x53ae3131), X(0x6057e2a2), X(0x5445eedb), + X(0x5fd30bbb), X(0x54dcdc96), X(0x5f4d4865), X(0x5572f8ed), + X(0x5ec699e9), X(0x5608426d), X(0x5e3f0194), X(0x569cb7a8), + X(0x5db680b3), X(0x5730572d), X(0x5d2d1899), X(0x57c31f92), + X(0x5ca2ca98), X(0x58550f6b), X(0x5c179805), X(0x58e62551), + X(0x5b8b8238), X(0x59765fde), X(0x5afe8a8a), X(0x5a05bdad), + X(0x5a70b258), X(0x5a943d5e), X(0x59e1faff), X(0x5b21dd90), + X(0x595265de), X(0x5bae9ce6), X(0x58c1f45a), X(0x5c3a7a05), + X(0x5830a7d6), X(0x5cc57393), X(0x579e81b8), X(0x5d4f883b), + X(0x570b8369), X(0x5dd8b6a6), X(0x5677ae54), X(0x5e60fd83), + X(0x55e303e6), X(0x5ee85b81), X(0x554d858c), X(0x5f6ecf53), + X(0x54b734ba), X(0x5ff457ac), X(0x542012e0), X(0x6078f343), + X(0x53882174), X(0x60fca0d2), X(0x52ef61ee), X(0x617f5f12), + X(0x5255d5c5), X(0x62012cc1), X(0x51bb7e75), X(0x628208a0), + X(0x51205d7a), X(0x6301f170), X(0x50847454), X(0x6380e5f6), + X(0x4fe7c482), X(0x63fee4f8), X(0x4f4a4f88), X(0x647bed3f), + X(0x4eac16eb), X(0x64f7fd97), X(0x4e0d1c2f), X(0x657314ce), + X(0x4d6d60df), X(0x65ed31b5), X(0x4ccce683), X(0x6666531d), + X(0x4c2baea8), X(0x66de77dc), X(0x4b89badc), X(0x67559ec9), + X(0x4ae70cae), X(0x67cbc6bf), X(0x4a43a5b0), X(0x6840ee9a), + X(0x499f8774), X(0x68b51539), X(0x48fab390), X(0x6928397e), + X(0x48552b9b), X(0x699a5a4b), X(0x47aef12c), X(0x6a0b7688), + X(0x470805de), X(0x6a7b8d1e), X(0x46606b4e), X(0x6aea9cf7), + X(0x45b82317), X(0x6b58a503), X(0x450f2edb), X(0x6bc5a431), + X(0x44659038), X(0x6c319974), X(0x43bb48d3), X(0x6c9c83c3), + X(0x43105a4f), X(0x6d066215), X(0x4264c652), X(0x6d6f3365), + X(0x41b88e83), X(0x6dd6f6b0), X(0x410bb48c), X(0x6e3daaf7), + X(0x405e3a16), X(0x6ea34f3c), X(0x3fb020cd), X(0x6f07e285), + X(0x3f016a61), X(0x6f6b63d8), X(0x3e52187e), X(0x6fcdd241), + X(0x3da22cd6), X(0x702f2ccc), X(0x3cf1a91c), X(0x708f728b), + X(0x3c408f02), X(0x70eea28e), X(0x3b8ee03e), X(0x714cbbeb), + X(0x3adc9e85), X(0x71a9bdba), X(0x3a29cb91), X(0x7205a715), + X(0x39766919), X(0x7260771b), X(0x38c278d9), X(0x72ba2ce9), + X(0x380dfc8c), X(0x7312c7a4), X(0x3758f5f1), X(0x736a4671), + X(0x36a366c5), X(0x73c0a877), X(0x35ed50c9), X(0x7415ece2), + X(0x3536b5bd), X(0x746a12df), X(0x347f9765), X(0x74bd199f), + X(0x33c7f785), X(0x750f0054), X(0x330fd7e0), X(0x755fc635), + X(0x32573a3e), X(0x75af6a7a), X(0x319e2067), X(0x75fdec5f), + X(0x30e48c22), X(0x764b4b22), X(0x302a7f3a), X(0x76978605), + X(0x2f6ffb7a), X(0x76e29c4a), X(0x2eb502ad), X(0x772c8d39), + X(0x2df996a2), X(0x7775581c), X(0x2d3db927), X(0x77bcfc3f), + X(0x2c816c0c), X(0x780378f0), X(0x2bc4b120), X(0x7848cd83), + X(0x2b078a36), X(0x788cf94c), X(0x2a49f920), X(0x78cffba2), + X(0x298bffb2), X(0x7911d3e1), X(0x28cd9fc1), X(0x79528166), + X(0x280edb22), X(0x79920392), X(0x274fb3ad), X(0x79d059c7), + X(0x26902b39), X(0x7a0d836c), X(0x25d0439e), X(0x7a497feb), + X(0x250ffeb6), X(0x7a844eae), X(0x244f5e5c), X(0x7abdef25), + X(0x238e646a), X(0x7af660c2), X(0x22cd12bd), X(0x7b2da2f9), + X(0x220b6b32), X(0x7b63b543), X(0x21496fa6), X(0x7b989719), + X(0x208721f9), X(0x7bcc47f9), X(0x1fc48409), X(0x7bfec764), + X(0x1f0197b7), X(0x7c3014de), X(0x1e3e5ee5), X(0x7c602feb), + X(0x1d7adb72), X(0x7c8f1816), X(0x1cb70f43), X(0x7cbcccec), + X(0x1bf2fc39), X(0x7ce94dfa), X(0x1b2ea43a), X(0x7d149ad4), + X(0x1a6a0929), X(0x7d3eb30f), X(0x19a52ceb), X(0x7d679642), + X(0x18e01166), X(0x7d8f4409), X(0x181ab881), X(0x7db5bc02), + X(0x17552422), X(0x7ddafdce), X(0x168f5631), X(0x7dff0911), + X(0x15c95096), X(0x7e21dd72), X(0x1503153a), X(0x7e437a9b), + X(0x143ca605), X(0x7e63e03a), X(0x137604e2), X(0x7e830dfe), + X(0x12af33ba), X(0x7ea1039a), X(0x11e83478), X(0x7ebdc0c5), + X(0x11210906), X(0x7ed94538), X(0x1059b352), X(0x7ef390ae), + X(0xf923545), X(0x7f0ca2e7), X(0xeca90cd), X(0x7f247ba4), + X(0xe02c7d6), X(0x7f3b1aac), X(0xd3adc4d), X(0x7f507fc6), + X(0xc72d020), X(0x7f64aabe), X(0xbaaa53b), X(0x7f779b61), + X(0xae25d8d), X(0x7f895182), X(0xa19fb04), X(0x7f99ccf3), + X(0x9517f8e), X(0x7fa90d8e), X(0x888ed1a), X(0x7fb7132b), + X(0x7c04598), X(0x7fc3dda9), X(0x6f78af5), X(0x7fcf6ce7), + X(0x62ebf22), X(0x7fd9c0ca), X(0x565e40d), X(0x7fe2d937), + X(0x49cfba7), X(0x7feab619), X(0x3d407de), X(0x7ff1575c), + X(0x30b0aa4), X(0x7ff6bcf0), X(0x24205e7), X(0x7ffae6c7), + X(0x178fb98), X(0x7ffdd4d7), X(0xafeda7), X(0x7fff8718),}; +/* cos, sin, 2*pi*(i+1/8) / 2048 */ +static LOOKUP_T fft_cossin_lookup512[2*512] = { + X(0x7fffff62), X(0xc90fd), X(0x7fffce09), X(0x7118dc), + X(0x7fff4dbb), X(0xd5a075), X(0x7ffe7e78), X(0x13a278a), + X(0x7ffd6042), X(0x19eaddd), X(0x7ffbf318), X(0x2033330), + X(0x7ffa36fc), X(0x267b746), X(0x7ff82bee), X(0x2cc39e0), + X(0x7ff5d1f1), X(0x330bac0), X(0x7ff32905), X(0x39539a8), + X(0x7ff0312b), X(0x3f9b65b), X(0x7fecea67), X(0x45e309a), + X(0x7fe954b9), X(0x4c2a827), X(0x7fe57025), X(0x5271cc4), + X(0x7fe13cab), X(0x58b8e33), X(0x7fdcba50), X(0x5effc37), + X(0x7fd7e916), X(0x6546692), X(0x7fd2c900), X(0x6b8cd04), + X(0x7fcd5a10), X(0x71d2f52), X(0x7fc79c4b), X(0x7818d3c), + X(0x7fc18fb3), X(0x7e5e684), X(0x7fbb344e), X(0x84a3aed), + X(0x7fb48a1d), X(0x8ae8a3a), X(0x7fad9127), X(0x912d42b), + X(0x7fa6496e), X(0x9771883), X(0x7f9eb2f8), X(0x9db5705), + X(0x7f96cdc8), X(0xa3f8f72), X(0x7f8e99e5), X(0xaa3c18d), + X(0x7f861753), X(0xb07ed18), X(0x7f7d4617), X(0xb6c11d5), + X(0x7f742636), X(0xbd02f86), X(0x7f6ab7b7), X(0xc3445ee), + X(0x7f60faa0), X(0xc9854ce), X(0x7f56eef5), X(0xcfc5bea), + X(0x7f4c94be), X(0xd605b02), X(0x7f41ec00), X(0xdc451db), + X(0x7f36f4c3), X(0xe284036), X(0x7f2baf0d), X(0xe8c25d5), + X(0x7f201ae4), X(0xef0027a), X(0x7f143851), X(0xf53d5e9), + X(0x7f08075b), X(0xfb79fe4), X(0x7efb8809), X(0x101b602c), + X(0x7eeeba62), X(0x107f1685), X(0x7ee19e6f), X(0x10e2c2b1), + X(0x7ed43437), X(0x11466473), X(0x7ec67bc4), X(0x11a9fb8c), + X(0x7eb8751d), X(0x120d87c0), X(0x7eaa204b), X(0x127108d2), + X(0x7e9b7d58), X(0x12d47e83), X(0x7e8c8c4b), X(0x1337e897), + X(0x7e7d4d2e), X(0x139b46cf), X(0x7e6dc00b), X(0x13fe98f0), + X(0x7e5de4eb), X(0x1461debb), X(0x7e4dbbd8), X(0x14c517f4), + X(0x7e3d44dc), X(0x1528445d), X(0x7e2c8001), X(0x158b63b8), + X(0x7e1b6d52), X(0x15ee75ca), X(0x7e0a0cd9), X(0x16517a54), + X(0x7df85ea0), X(0x16b4711a), X(0x7de662b3), X(0x171759df), + X(0x7dd4191c), X(0x177a3465), X(0x7dc181e8), X(0x17dd0070), + X(0x7dae9d21), X(0x183fbdc2), X(0x7d9b6ad3), X(0x18a26c1f), + X(0x7d87eb0a), X(0x19050b4a), X(0x7d741dd2), X(0x19679b07), + X(0x7d600337), X(0x19ca1b17), X(0x7d4b9b46), X(0x1a2c8b3f), + X(0x7d36e60b), X(0x1a8eeb41), X(0x7d21e393), X(0x1af13ae2), + X(0x7d0c93ea), X(0x1b5379e4), X(0x7cf6f71f), X(0x1bb5a80b), + X(0x7ce10d3e), X(0x1c17c51b), X(0x7ccad655), X(0x1c79d0d6), + X(0x7cb45272), X(0x1cdbcb00), X(0x7c9d81a2), X(0x1d3db35d), + X(0x7c8663f4), X(0x1d9f89b1), X(0x7c6ef975), X(0x1e014dbe), + X(0x7c574235), X(0x1e62ff4a), X(0x7c3f3e42), X(0x1ec49e17), + X(0x7c26edaa), X(0x1f2629e9), X(0x7c0e507d), X(0x1f87a285), + X(0x7bf566ca), X(0x1fe907ad), X(0x7bdc30a1), X(0x204a5927), + X(0x7bc2ae10), X(0x20ab96b5), X(0x7ba8df27), X(0x210cc01c), + X(0x7b8ec3f8), X(0x216dd520), X(0x7b745c90), X(0x21ced586), + X(0x7b59a902), X(0x222fc110), X(0x7b3ea95d), X(0x22909784), + X(0x7b235db1), X(0x22f158a6), X(0x7b07c611), X(0x2352043a), + X(0x7aebe28d), X(0x23b29a04), X(0x7acfb335), X(0x241319ca), + X(0x7ab3381c), X(0x2473834e), X(0x7a967153), X(0x24d3d656), + X(0x7a795eec), X(0x253412a7), X(0x7a5c00f8), X(0x25943805), + X(0x7a3e578a), X(0x25f44635), X(0x7a2062b4), X(0x26543cfb), + X(0x7a022289), X(0x26b41c1c), X(0x79e3971b), X(0x2713e35e), + X(0x79c4c07d), X(0x27739285), X(0x79a59ec3), X(0x27d32956), + X(0x798631fe), X(0x2832a796), X(0x79667a43), X(0x28920d0a), + X(0x794677a6), X(0x28f15978), X(0x79262a39), X(0x29508ca4), + X(0x79059212), X(0x29afa654), X(0x78e4af43), X(0x2a0ea64d), + X(0x78c381e2), X(0x2a6d8c55), X(0x78a20a02), X(0x2acc5830), + X(0x788047b9), X(0x2b2b09a6), X(0x785e3b1b), X(0x2b89a07b), + X(0x783be43e), X(0x2be81c74), X(0x78194336), X(0x2c467d58), + X(0x77f65818), X(0x2ca4c2ec), X(0x77d322fb), X(0x2d02ecf7), + X(0x77afa3f4), X(0x2d60fb3d), X(0x778bdb19), X(0x2dbeed86), + X(0x7767c880), X(0x2e1cc397), X(0x77436c3f), X(0x2e7a7d35), + X(0x771ec66d), X(0x2ed81a29), X(0x76f9d720), X(0x2f359a37), + X(0x76d49e70), X(0x2f92fd26), X(0x76af1c72), X(0x2ff042bc), + X(0x7689513f), X(0x304d6ac1), X(0x76633ced), X(0x30aa74f9), + X(0x763cdf94), X(0x3107612d), X(0x7616394b), X(0x31642f22), + X(0x75ef4a2b), X(0x31c0dea0), X(0x75c8124c), X(0x321d6f6d), + X(0x75a091c6), X(0x3279e151), X(0x7578c8b0), X(0x32d63411), + X(0x7550b724), X(0x33326776), X(0x75285d3a), X(0x338e7b46), + X(0x74ffbb0c), X(0x33ea6f48), X(0x74d6d0b2), X(0x34464344), + X(0x74ad9e45), X(0x34a1f702), X(0x748423e0), X(0x34fd8a48), + X(0x745a619a), X(0x3558fcde), X(0x74305790), X(0x35b44e8b), + X(0x740605d9), X(0x360f7f18), X(0x73db6c91), X(0x366a8e4d), + X(0x73b08bd1), X(0x36c57bf0), X(0x738563b4), X(0x372047ca), + X(0x7359f455), X(0x377af1a3), X(0x732e3dce), X(0x37d57942), + X(0x7302403b), X(0x382fde71), X(0x72d5fbb7), X(0x388a20f7), + X(0x72a9705c), X(0x38e4409d), X(0x727c9e46), X(0x393e3d2b), + X(0x724f8592), X(0x39981669), X(0x7222265a), X(0x39f1cc21), + X(0x71f480bc), X(0x3a4b5e1a), X(0x71c694d2), X(0x3aa4cc1e), + X(0x719862b9), X(0x3afe15f5), X(0x7169ea8e), X(0x3b573b69), + X(0x713b2c6e), X(0x3bb03c41), X(0x710c2875), X(0x3c091848), + X(0x70dcdec0), X(0x3c61cf47), X(0x70ad4f6c), X(0x3cba6107), + X(0x707d7a98), X(0x3d12cd50), X(0x704d605f), X(0x3d6b13ee), + X(0x701d00e1), X(0x3dc334a8), X(0x6fec5c3a), X(0x3e1b2f4a), + X(0x6fbb7289), X(0x3e73039c), X(0x6f8a43ec), X(0x3ecab169), + X(0x6f58d082), X(0x3f223879), X(0x6f271868), X(0x3f799899), + X(0x6ef51bbe), X(0x3fd0d190), X(0x6ec2daa2), X(0x4027e32b), + X(0x6e905533), X(0x407ecd32), X(0x6e5d8b91), X(0x40d58f70), + X(0x6e2a7ddb), X(0x412c29b1), X(0x6df72c2f), X(0x41829bbd), + X(0x6dc396af), X(0x41d8e561), X(0x6d8fbd7a), X(0x422f0667), + X(0x6d5ba0af), X(0x4284fe99), X(0x6d274070), X(0x42dacdc3), + X(0x6cf29cdb), X(0x433073af), X(0x6cbdb612), X(0x4385f02a), + X(0x6c888c36), X(0x43db42fe), X(0x6c531f67), X(0x44306bf6), + X(0x6c1d6fc5), X(0x44856ade), X(0x6be77d73), X(0x44da3f82), + X(0x6bb14892), X(0x452ee9ad), X(0x6b7ad142), X(0x4583692b), + X(0x6b4417a5), X(0x45d7bdc9), X(0x6b0d1bde), X(0x462be750), + X(0x6ad5de0f), X(0x467fe58f), X(0x6a9e5e58), X(0x46d3b851), + X(0x6a669cdd), X(0x47275f63), X(0x6a2e99bf), X(0x477ada90), + X(0x69f65523), X(0x47ce29a6), X(0x69bdcf29), X(0x48214c71), + X(0x698507f5), X(0x487442bd), X(0x694bffaa), X(0x48c70c58), + X(0x6912b66c), X(0x4919a90e), X(0x68d92c5d), X(0x496c18ad), + X(0x689f61a1), X(0x49be5b02), X(0x6865565c), X(0x4a106fd9), + X(0x682b0ab1), X(0x4a625701), X(0x67f07ec4), X(0x4ab41046), + X(0x67b5b2bb), X(0x4b059b77), X(0x677aa6b8), X(0x4b56f860), + X(0x673f5ae0), X(0x4ba826d1), X(0x6703cf58), X(0x4bf92696), + X(0x66c80445), X(0x4c49f77e), X(0x668bf9cb), X(0x4c9a9957), + X(0x664fb00f), X(0x4ceb0bef), X(0x66132737), X(0x4d3b4f15), + X(0x65d65f69), X(0x4d8b6297), X(0x659958c8), X(0x4ddb4644), + X(0x655c137c), X(0x4e2af9ea), X(0x651e8faa), X(0x4e7a7d58), + X(0x64e0cd78), X(0x4ec9d05d), X(0x64a2cd0b), X(0x4f18f2c9), + X(0x64648e8b), X(0x4f67e46a), X(0x6426121e), X(0x4fb6a510), + X(0x63e757e9), X(0x5005348a), X(0x63a86015), X(0x505392a7), + X(0x63692ac7), X(0x50a1bf39), X(0x6329b827), X(0x50efba0d), + X(0x62ea085b), X(0x513d82f4), X(0x62aa1b8c), X(0x518b19be), + X(0x6269f1e1), X(0x51d87e3c), X(0x62298b80), X(0x5225b03d), + X(0x61e8e892), X(0x5272af91), X(0x61a8093f), X(0x52bf7c0b), + X(0x6166edaf), X(0x530c1579), X(0x6125960a), X(0x53587bad), + X(0x60e40278), X(0x53a4ae77), X(0x60a23321), X(0x53f0ada9), + X(0x6060282f), X(0x543c7914), X(0x601de1ca), X(0x54881088), + X(0x5fdb601a), X(0x54d373d8), X(0x5f98a34a), X(0x551ea2d5), + X(0x5f55ab81), X(0x55699d51), X(0x5f1278ea), X(0x55b4631c), + X(0x5ecf0bae), X(0x55fef40a), X(0x5e8b63f6), X(0x56494feb), + X(0x5e4781ec), X(0x56937693), X(0x5e0365bb), X(0x56dd67d4), + X(0x5dbf0f8b), X(0x5727237f), X(0x5d7a7f88), X(0x5770a967), + X(0x5d35b5db), X(0x57b9f960), X(0x5cf0b2af), X(0x5803133b), + X(0x5cab762e), X(0x584bf6cc), X(0x5c660084), X(0x5894a3e6), + X(0x5c2051da), X(0x58dd1a5c), X(0x5bda6a5d), X(0x59255a01), + X(0x5b944a37), X(0x596d62a9), X(0x5b4df193), X(0x59b53427), + X(0x5b07609d), X(0x59fcce4f), X(0x5ac09780), X(0x5a4430f4), + X(0x5a799668), X(0x5a8b5beb), X(0x5a325d81), X(0x5ad24f08), + X(0x59eaecf7), X(0x5b190a20), X(0x59a344f6), X(0x5b5f8d05), + X(0x595b65a9), X(0x5ba5d78e), X(0x59134f3e), X(0x5bebe98e), + X(0x58cb01e1), X(0x5c31c2da), X(0x58827dbe), X(0x5c776348), + X(0x5839c302), X(0x5cbccaac), X(0x57f0d1da), X(0x5d01f8db), + X(0x57a7aa73), X(0x5d46edac), X(0x575e4cfa), X(0x5d8ba8f2), + X(0x5714b99c), X(0x5dd02a85), X(0x56caf088), X(0x5e147239), + X(0x5680f1e9), X(0x5e587fe4), X(0x5636bdef), X(0x5e9c535d), + X(0x55ec54c6), X(0x5edfec7a), X(0x55a1b69c), X(0x5f234b11), + X(0x5556e3a0), X(0x5f666ef8), X(0x550bdc00), X(0x5fa95807), + X(0x54c09fea), X(0x5fec0613), X(0x54752f8d), X(0x602e78f4), + X(0x54298b16), X(0x6070b080), X(0x53ddb2b5), X(0x60b2ac8f), + X(0x5391a699), X(0x60f46cf8), X(0x534566f0), X(0x6135f193), + X(0x52f8f3e9), X(0x61773a37), X(0x52ac4db4), X(0x61b846bb), + X(0x525f747f), X(0x61f916f9), X(0x5212687b), X(0x6239aac7), + X(0x51c529d6), X(0x627a01fe), X(0x5177b8c1), X(0x62ba1c76), + X(0x512a156b), X(0x62f9fa08), X(0x50dc4004), X(0x63399a8c), + X(0x508e38bc), X(0x6378fddc), X(0x503fffc3), X(0x63b823cf), + X(0x4ff1954a), X(0x63f70c3f), X(0x4fa2f981), X(0x6435b705), + X(0x4f542c97), X(0x647423fb), X(0x4f052ebf), X(0x64b252fa), + X(0x4eb60028), X(0x64f043db), X(0x4e66a104), X(0x652df679), + X(0x4e171184), X(0x656b6aad), X(0x4dc751d7), X(0x65a8a052), + X(0x4d776231), X(0x65e59741), X(0x4d2742c1), X(0x66224f56), + X(0x4cd6f3ba), X(0x665ec86a), X(0x4c86754d), X(0x669b0259), + X(0x4c35c7ac), X(0x66d6fcfc), X(0x4be4eb08), X(0x6712b830), + X(0x4b93df93), X(0x674e33d0), X(0x4b42a57f), X(0x67896fb6), + X(0x4af13cff), X(0x67c46bbe), X(0x4a9fa645), X(0x67ff27c4), + X(0x4a4de182), X(0x6839a3a3), X(0x49fbeeea), X(0x6873df38), + X(0x49a9ceae), X(0x68adda5e), X(0x49578103), X(0x68e794f2), + X(0x49050619), X(0x69210ed0), X(0x48b25e25), X(0x695a47d5), + X(0x485f8959), X(0x69933fde), X(0x480c87e8), X(0x69cbf6c6), + X(0x47b95a06), X(0x6a046c6c), X(0x4765ffe5), X(0x6a3ca0ac), + X(0x471279ba), X(0x6a749364), X(0x46bec7b7), X(0x6aac4471), + X(0x466aea11), X(0x6ae3b3b1), X(0x4616e0fb), X(0x6b1ae102), + X(0x45c2aca9), X(0x6b51cc42), X(0x456e4d4f), X(0x6b88754e), + X(0x4519c321), X(0x6bbedc06), X(0x44c50e52), X(0x6bf50046), + X(0x44702f19), X(0x6c2ae1f0), X(0x441b25a7), X(0x6c6080df), + X(0x43c5f233), X(0x6c95dcf5), X(0x437094f1), X(0x6ccaf610), + X(0x431b0e15), X(0x6cffcc0f), X(0x42c55dd4), X(0x6d345ed1), + X(0x426f8463), X(0x6d68ae36), X(0x421981f7), X(0x6d9cba1f), + X(0x41c356c5), X(0x6dd0826a), X(0x416d0302), X(0x6e0406f7), + X(0x411686e3), X(0x6e3747a8), X(0x40bfe29e), X(0x6e6a445d), + X(0x40691669), X(0x6e9cfcf5), X(0x40122278), X(0x6ecf7152), + X(0x3fbb0701), X(0x6f01a154), X(0x3f63c43a), X(0x6f338cdd), + X(0x3f0c5a5a), X(0x6f6533ce), X(0x3eb4c995), X(0x6f969608), + X(0x3e5d1222), X(0x6fc7b36d), X(0x3e053437), X(0x6ff88bde), + X(0x3dad300a), X(0x70291f3d), X(0x3d5505d2), X(0x70596d6d), + X(0x3cfcb5c4), X(0x7089764f), X(0x3ca44018), X(0x70b939c6), + X(0x3c4ba503), X(0x70e8b7b5), X(0x3bf2e4bd), X(0x7117effe), + X(0x3b99ff7d), X(0x7146e283), X(0x3b40f578), X(0x71758f29), + X(0x3ae7c6e7), X(0x71a3f5d2), X(0x3a8e73ff), X(0x71d21662), + X(0x3a34fcf9), X(0x71fff0bb), X(0x39db620b), X(0x722d84c3), + X(0x3981a36c), X(0x725ad25d), X(0x3927c155), X(0x7287d96c), + X(0x38cdbbfc), X(0x72b499d5), X(0x38739399), X(0x72e1137d), + X(0x38194863), X(0x730d4648), X(0x37beda93), X(0x7339321a), + X(0x37644a60), X(0x7364d6da), X(0x37099801), X(0x7390346b), + X(0x36aec3b0), X(0x73bb4ab3), X(0x3653cda3), X(0x73e61997), + X(0x35f8b613), X(0x7410a0fd), X(0x359d7d39), X(0x743ae0cb), + X(0x3542234c), X(0x7464d8e7), X(0x34e6a884), X(0x748e8937), + X(0x348b0d1b), X(0x74b7f1a1), X(0x342f5149), X(0x74e1120b), + X(0x33d37546), X(0x7509ea5d), X(0x3377794b), X(0x75327a7c), + X(0x331b5d90), X(0x755ac251), X(0x32bf224f), X(0x7582c1c1), + X(0x3262c7c1), X(0x75aa78b6), X(0x32064e1e), X(0x75d1e715), + X(0x31a9b59f), X(0x75f90cc6), X(0x314cfe7e), X(0x761fe9b2), + X(0x30f028f4), X(0x76467dc1), X(0x30933539), X(0x766cc8db), + X(0x30362388), X(0x7692cae7), X(0x2fd8f41a), X(0x76b883cf), + X(0x2f7ba728), X(0x76ddf37c), X(0x2f1e3cec), X(0x770319d6), + X(0x2ec0b59f), X(0x7727f6c6), X(0x2e63117c), X(0x774c8a36), + X(0x2e0550bb), X(0x7770d40f), X(0x2da77397), X(0x7794d43a), + X(0x2d497a49), X(0x77b88aa3), X(0x2ceb650c), X(0x77dbf731), + X(0x2c8d341a), X(0x77ff19d0), X(0x2c2ee7ac), X(0x7821f26a), + X(0x2bd07ffd), X(0x784480ea), X(0x2b71fd48), X(0x7866c53a), + X(0x2b135fc5), X(0x7888bf44), X(0x2ab4a7b1), X(0x78aa6ef5), + X(0x2a55d545), X(0x78cbd437), X(0x29f6e8bb), X(0x78eceef5), + X(0x2997e24e), X(0x790dbf1c), X(0x2938c23a), X(0x792e4497), + X(0x28d988b8), X(0x794e7f51), X(0x287a3603), X(0x796e6f38), + X(0x281aca57), X(0x798e1437), X(0x27bb45ed), X(0x79ad6e3b), + X(0x275ba901), X(0x79cc7d30), X(0x26fbf3ce), X(0x79eb4104), + X(0x269c268f), X(0x7a09b9a3), X(0x263c417f), X(0x7a27e6fb), + X(0x25dc44d8), X(0x7a45c8f8), X(0x257c30d8), X(0x7a635f89), + X(0x251c05b7), X(0x7a80aa9b), X(0x24bbc3b3), X(0x7a9daa1d), + X(0x245b6b06), X(0x7aba5dfb), X(0x23fafbec), X(0x7ad6c626), + X(0x239a76a0), X(0x7af2e28a), X(0x2339db5e), X(0x7b0eb317), + X(0x22d92a61), X(0x7b2a37bc), X(0x227863e5), X(0x7b457067), + X(0x22178825), X(0x7b605d08), X(0x21b6975e), X(0x7b7afd8e), + X(0x215591cc), X(0x7b9551e9), X(0x20f477a9), X(0x7baf5a09), + X(0x20934933), X(0x7bc915dd), X(0x203206a4), X(0x7be28555), + X(0x1fd0b039), X(0x7bfba863), X(0x1f6f462e), X(0x7c147ef6), + X(0x1f0dc8bf), X(0x7c2d08ff), X(0x1eac3829), X(0x7c45466f), + X(0x1e4a94a6), X(0x7c5d3737), X(0x1de8de75), X(0x7c74db48), + X(0x1d8715d0), X(0x7c8c3294), X(0x1d253af4), X(0x7ca33d0c), + X(0x1cc34e1e), X(0x7cb9faa2), X(0x1c614f8a), X(0x7cd06b48), + X(0x1bff3f74), X(0x7ce68ef0), X(0x1b9d1e19), X(0x7cfc658c), + X(0x1b3aebb6), X(0x7d11ef10), X(0x1ad8a886), X(0x7d272b6e), + X(0x1a7654c8), X(0x7d3c1a98), X(0x1a13f0b6), X(0x7d50bc82), + X(0x19b17c8e), X(0x7d65111e), X(0x194ef88d), X(0x7d791862), + X(0x18ec64f0), X(0x7d8cd23f), X(0x1889c1f2), X(0x7da03eaa), + X(0x18270fd2), X(0x7db35d98), X(0x17c44ecc), X(0x7dc62efb), + X(0x17617f1d), X(0x7dd8b2c9), X(0x16fea101), X(0x7deae8f6), + X(0x169bb4b7), X(0x7dfcd177), X(0x1638ba7a), X(0x7e0e6c41), + X(0x15d5b288), X(0x7e1fb949), X(0x15729d1e), X(0x7e30b885), + X(0x150f7a79), X(0x7e4169e9), X(0x14ac4ad7), X(0x7e51cd6b), + X(0x14490e74), X(0x7e61e302), X(0x13e5c58d), X(0x7e71aaa4), + X(0x13827061), X(0x7e812446), X(0x131f0f2c), X(0x7e904fe0), + X(0x12bba22b), X(0x7e9f2d67), X(0x1258299c), X(0x7eadbcd3), + X(0x11f4a5bc), X(0x7ebbfe1b), X(0x119116c9), X(0x7ec9f136), + X(0x112d7d00), X(0x7ed7961b), X(0x10c9d89e), X(0x7ee4ecc2), + X(0x106629e1), X(0x7ef1f523), X(0x10027106), X(0x7efeaf35), + X(0xf9eae4b), X(0x7f0b1af2), X(0xf3ae1ee), X(0x7f173850), + X(0xed70c2c), X(0x7f230749), X(0xe732d42), X(0x7f2e87d5), + X(0xe0f456e), X(0x7f39b9ee), X(0xdab54ee), X(0x7f449d8c), + X(0xd475c00), X(0x7f4f32a8), X(0xce35ae1), X(0x7f59793d), + X(0xc7f51ce), X(0x7f637144), X(0xc1b4106), X(0x7f6d1ab6), + X(0xbb728c6), X(0x7f76758e), X(0xb53094c), X(0x7f7f81c5), + X(0xaeee2d6), X(0x7f883f57), X(0xa8ab5a2), X(0x7f90ae3e), + X(0xa2681ec), X(0x7f98ce75), X(0x9c247f4), X(0x7fa09ff7), + X(0x95e07f7), X(0x7fa822be), X(0x8f9c233), X(0x7faf56c7), + X(0x89576e5), X(0x7fb63c0c), X(0x831264b), X(0x7fbcd28a), + X(0x7ccd0a4), X(0x7fc31a3d), X(0x768762e), X(0x7fc91320), + X(0x7041725), X(0x7fcebd30), X(0x69fb3c9), X(0x7fd4186a), + X(0x63b4c56), X(0x7fd924c9), X(0x5d6e10c), X(0x7fdde24c), + X(0x5727227), X(0x7fe250ef), X(0x50dffe6), X(0x7fe670af), + X(0x4a98a87), X(0x7fea418a), X(0x4451248), X(0x7fedc37e), + X(0x3e09767), X(0x7ff0f688), X(0x37c1a21), X(0x7ff3daa6), + X(0x3179ab5), X(0x7ff66fd7), X(0x2b31961), X(0x7ff8b618), + X(0x24e9662), X(0x7ffaad6a), X(0x1ea11f7), X(0x7ffc55c9), + X(0x1858c5e), X(0x7ffdaf36), X(0x12105d4), X(0x7ffeb9b0), + X(0xbc7e98), X(0x7fff7535), X(0x57f6e8), X(0x7fffe1c6),}; +/* cos, sin, 2*pi*(i+1/8) / 4096 */ +static LOOKUP_T fft_cossin_lookup1024[2*1024] = { + X(0x7fffffd8), X(0x6487e), X(0x7ffff382), X(0x388c73), + X(0x7fffd36e), X(0x6ad05f), X(0x7fff9f9e), X(0x9d143b), + X(0x7fff5810), X(0xcf57fe), X(0x7ffefcc5), X(0x1019ba2), + X(0x7ffe8dbd), X(0x133df1d), X(0x7ffe0af7), X(0x166226a), + X(0x7ffd7475), X(0x198657f), X(0x7ffcca36), X(0x1caa855), + X(0x7ffc0c3b), X(0x1fceae4), X(0x7ffb3a83), X(0x22f2d25), + X(0x7ffa550e), X(0x2616f0f), X(0x7ff95bdd), X(0x293b09c), + X(0x7ff84eef), X(0x2c5f1c3), X(0x7ff72e46), X(0x2f8327c), + X(0x7ff5f9e1), X(0x32a72c0), X(0x7ff4b1c0), X(0x35cb287), + X(0x7ff355e3), X(0x38ef1ca), X(0x7ff1e64c), X(0x3c13080), + X(0x7ff062f9), X(0x3f36ea2), X(0x7feecbeb), X(0x425ac27), + X(0x7fed2123), X(0x457e909), X(0x7feb62a0), X(0x48a2540), + X(0x7fe99064), X(0x4bc60c3), X(0x7fe7aa6d), X(0x4ee9b8c), + X(0x7fe5b0be), X(0x520d591), X(0x7fe3a354), X(0x5530ecc), + X(0x7fe18233), X(0x5854736), X(0x7fdf4d58), X(0x5b77ec5), + X(0x7fdd04c6), X(0x5e9b572), X(0x7fdaa87b), X(0x61beb36), + X(0x7fd83879), X(0x64e2009), X(0x7fd5b4c0), X(0x68053e3), + X(0x7fd31d50), X(0x6b286bc), X(0x7fd0722a), X(0x6e4b88c), + X(0x7fcdb34e), X(0x716e94d), X(0x7fcae0bd), X(0x74918f6), + X(0x7fc7fa76), X(0x77b477f), X(0x7fc5007b), X(0x7ad74e1), + X(0x7fc1f2cc), X(0x7dfa113), X(0x7fbed169), X(0x811cc0f), + X(0x7fbb9c53), X(0x843f5cd), X(0x7fb8538a), X(0x8761e44), + X(0x7fb4f70f), X(0x8a8456d), X(0x7fb186e3), X(0x8da6b40), + X(0x7fae0305), X(0x90c8fb5), X(0x7faa6b77), X(0x93eb2c6), + X(0x7fa6c038), X(0x970d469), X(0x7fa3014a), X(0x9a2f498), + X(0x7f9f2ead), X(0x9d5134a), X(0x7f9b4862), X(0xa073078), + X(0x7f974e6a), X(0xa394c1a), X(0x7f9340c4), X(0xa6b6629), + X(0x7f8f1f71), X(0xa9d7e9c), X(0x7f8aea73), X(0xacf956c), + X(0x7f86a1ca), X(0xb01aa92), X(0x7f824576), X(0xb33be05), + X(0x7f7dd578), X(0xb65cfbd), X(0x7f7951d2), X(0xb97dfb4), + X(0x7f74ba82), X(0xbc9ede1), X(0x7f700f8b), X(0xbfbfa3d), + X(0x7f6b50ed), X(0xc2e04bf), X(0x7f667ea8), X(0xc600d61), + X(0x7f6198be), X(0xc92141a), X(0x7f5c9f30), X(0xcc418e3), + X(0x7f5791fd), X(0xcf61bb3), X(0x7f527127), X(0xd281c84), + X(0x7f4d3cae), X(0xd5a1b4e), X(0x7f47f494), X(0xd8c1809), + X(0x7f4298d9), X(0xdbe12ad), X(0x7f3d297e), X(0xdf00b32), + X(0x7f37a683), X(0xe220191), X(0x7f320feb), X(0xe53f5c2), + X(0x7f2c65b4), X(0xe85e7bd), X(0x7f26a7e2), X(0xeb7d77b), + X(0x7f20d673), X(0xee9c4f4), X(0x7f1af16a), X(0xf1bb021), + X(0x7f14f8c7), X(0xf4d98f9), X(0x7f0eec8a), X(0xf7f7f74), + X(0x7f08ccb6), X(0xfb1638c), X(0x7f02994b), X(0xfe34538), + X(0x7efc5249), X(0x10152472), X(0x7ef5f7b3), X(0x10470130), + X(0x7eef8988), X(0x1078db6b), X(0x7ee907c9), X(0x10aab31d), + X(0x7ee27279), X(0x10dc883c), X(0x7edbc998), X(0x110e5ac2), + X(0x7ed50d26), X(0x11402aa6), X(0x7ece3d25), X(0x1171f7e1), + X(0x7ec75996), X(0x11a3c26c), X(0x7ec0627a), X(0x11d58a3e), + X(0x7eb957d2), X(0x12074f50), X(0x7eb2399f), X(0x1239119a), + X(0x7eab07e3), X(0x126ad115), X(0x7ea3c29d), X(0x129c8db9), + X(0x7e9c69d1), X(0x12ce477e), X(0x7e94fd7e), X(0x12fffe5d), + X(0x7e8d7da5), X(0x1331b24e), X(0x7e85ea49), X(0x13636348), + X(0x7e7e4369), X(0x13951146), X(0x7e768908), X(0x13c6bc3e), + X(0x7e6ebb26), X(0x13f8642a), X(0x7e66d9c5), X(0x142a0901), + X(0x7e5ee4e6), X(0x145baabc), X(0x7e56dc8a), X(0x148d4954), + X(0x7e4ec0b2), X(0x14bee4c0), X(0x7e469160), X(0x14f07cf9), + X(0x7e3e4e94), X(0x152211f7), X(0x7e35f851), X(0x1553a3b4), + X(0x7e2d8e97), X(0x15853226), X(0x7e251168), X(0x15b6bd46), + X(0x7e1c80c5), X(0x15e8450e), X(0x7e13dcaf), X(0x1619c974), + X(0x7e0b2527), X(0x164b4a72), X(0x7e025a30), X(0x167cc800), + X(0x7df97bca), X(0x16ae4216), X(0x7df089f7), X(0x16dfb8ad), + X(0x7de784b8), X(0x17112bbd), X(0x7dde6c0f), X(0x17429b3e), + X(0x7dd53ffc), X(0x17740729), X(0x7dcc0082), X(0x17a56f76), + X(0x7dc2ada1), X(0x17d6d41d), X(0x7db9475c), X(0x18083517), + X(0x7dafcdb3), X(0x1839925d), X(0x7da640a8), X(0x186aebe6), + X(0x7d9ca03d), X(0x189c41ab), X(0x7d92ec73), X(0x18cd93a5), + X(0x7d89254b), X(0x18fee1cb), X(0x7d7f4ac8), X(0x19302c17), + X(0x7d755cea), X(0x19617280), X(0x7d6b5bb3), X(0x1992b4ff), + X(0x7d614725), X(0x19c3f38d), X(0x7d571f41), X(0x19f52e21), + X(0x7d4ce409), X(0x1a2664b5), X(0x7d42957e), X(0x1a579740), + X(0x7d3833a2), X(0x1a88c5bb), X(0x7d2dbe76), X(0x1ab9f01f), + X(0x7d2335fd), X(0x1aeb1664), X(0x7d189a38), X(0x1b1c3882), + X(0x7d0deb27), X(0x1b4d5672), X(0x7d0328ce), X(0x1b7e702c), + X(0x7cf8532e), X(0x1baf85a8), X(0x7ced6a48), X(0x1be096e0), + X(0x7ce26e1e), X(0x1c11a3cb), X(0x7cd75eb2), X(0x1c42ac62), + X(0x7ccc3c05), X(0x1c73b09d), X(0x7cc1061a), X(0x1ca4b075), + X(0x7cb5bcf1), X(0x1cd5abe2), X(0x7caa608d), X(0x1d06a2dd), + X(0x7c9ef0f0), X(0x1d37955e), X(0x7c936e1a), X(0x1d68835d), + X(0x7c87d80f), X(0x1d996cd4), X(0x7c7c2ecf), X(0x1dca51ba), + X(0x7c70725d), X(0x1dfb3208), X(0x7c64a2ba), X(0x1e2c0db6), + X(0x7c58bfe9), X(0x1e5ce4bd), X(0x7c4cc9ea), X(0x1e8db715), + X(0x7c40c0c0), X(0x1ebe84b8), X(0x7c34a46d), X(0x1eef4d9c), + X(0x7c2874f2), X(0x1f2011bb), X(0x7c1c3252), X(0x1f50d10e), + X(0x7c0fdc8e), X(0x1f818b8c), X(0x7c0373a9), X(0x1fb2412f), + X(0x7bf6f7a3), X(0x1fe2f1ee), X(0x7bea6880), X(0x20139dc2), + X(0x7bddc641), X(0x204444a4), X(0x7bd110e7), X(0x2074e68c), + X(0x7bc44876), X(0x20a58372), X(0x7bb76cee), X(0x20d61b50), + X(0x7baa7e52), X(0x2106ae1e), X(0x7b9d7ca4), X(0x21373bd4), + X(0x7b9067e6), X(0x2167c46a), X(0x7b83401a), X(0x219847da), + X(0x7b760542), X(0x21c8c61b), X(0x7b68b760), X(0x21f93f27), + X(0x7b5b5675), X(0x2229b2f5), X(0x7b4de285), X(0x225a217f), + X(0x7b405b91), X(0x228a8abc), X(0x7b32c19b), X(0x22baeea6), + X(0x7b2514a6), X(0x22eb4d35), X(0x7b1754b3), X(0x231ba661), + X(0x7b0981c4), X(0x234bfa24), X(0x7afb9bdd), X(0x237c4874), + X(0x7aeda2fe), X(0x23ac914c), X(0x7adf972a), X(0x23dcd4a4), + X(0x7ad17863), X(0x240d1273), X(0x7ac346ab), X(0x243d4ab4), + X(0x7ab50205), X(0x246d7d5e), X(0x7aa6aa73), X(0x249daa69), + X(0x7a983ff7), X(0x24cdd1d0), X(0x7a89c293), X(0x24fdf389), + X(0x7a7b3249), X(0x252e0f8e), X(0x7a6c8f1c), X(0x255e25d7), + X(0x7a5dd90e), X(0x258e365c), X(0x7a4f1020), X(0x25be4118), + X(0x7a403457), X(0x25ee4601), X(0x7a3145b3), X(0x261e4510), + X(0x7a224437), X(0x264e3e3f), X(0x7a132fe5), X(0x267e3186), + X(0x7a0408c1), X(0x26ae1edd), X(0x79f4cecb), X(0x26de063d), + X(0x79e58206), X(0x270de79e), X(0x79d62276), X(0x273dc2fa), + X(0x79c6b01b), X(0x276d9848), X(0x79b72af9), X(0x279d6782), + X(0x79a79311), X(0x27cd30a0), X(0x7997e867), X(0x27fcf39b), + X(0x79882afd), X(0x282cb06b), X(0x79785ad5), X(0x285c6709), + X(0x796877f1), X(0x288c176e), X(0x79588254), X(0x28bbc192), + X(0x79487a01), X(0x28eb656d), X(0x79385efa), X(0x291b02fa), + X(0x79283141), X(0x294a9a2f), X(0x7917f0d9), X(0x297a2b07), + X(0x79079dc4), X(0x29a9b579), X(0x78f73806), X(0x29d9397e), + X(0x78e6bf9f), X(0x2a08b70f), X(0x78d63494), X(0x2a382e25), + X(0x78c596e7), X(0x2a679eb8), X(0x78b4e699), X(0x2a9708c1), + X(0x78a423af), X(0x2ac66c38), X(0x78934e29), X(0x2af5c917), + X(0x7882660b), X(0x2b251f56), X(0x78716b58), X(0x2b546eed), + X(0x78605e12), X(0x2b83b7d6), X(0x784f3e3c), X(0x2bb2fa09), + X(0x783e0bd8), X(0x2be2357f), X(0x782cc6e9), X(0x2c116a30), + X(0x781b6f72), X(0x2c409816), X(0x780a0575), X(0x2c6fbf29), + X(0x77f888f5), X(0x2c9edf61), X(0x77e6f9f5), X(0x2ccdf8b8), + X(0x77d55877), X(0x2cfd0b26), X(0x77c3a47f), X(0x2d2c16a4), + X(0x77b1de0e), X(0x2d5b1b2a), X(0x77a00529), X(0x2d8a18b2), + X(0x778e19d0), X(0x2db90f34), X(0x777c1c08), X(0x2de7fea9), + X(0x776a0bd2), X(0x2e16e70a), X(0x7757e932), X(0x2e45c84f), + X(0x7745b42b), X(0x2e74a272), X(0x77336cbf), X(0x2ea3756a), + X(0x772112f2), X(0x2ed24132), X(0x770ea6c5), X(0x2f0105c1), + X(0x76fc283c), X(0x2f2fc310), X(0x76e99759), X(0x2f5e7918), + X(0x76d6f421), X(0x2f8d27d3), X(0x76c43e94), X(0x2fbbcf38), + X(0x76b176b7), X(0x2fea6f40), X(0x769e9c8c), X(0x301907e5), + X(0x768bb016), X(0x3047991f), X(0x7678b159), X(0x307622e7), + X(0x7665a056), X(0x30a4a536), X(0x76527d11), X(0x30d32005), + X(0x763f478c), X(0x3101934c), X(0x762bffcc), X(0x312fff04), + X(0x7618a5d2), X(0x315e6327), X(0x760539a2), X(0x318cbfad), + X(0x75f1bb3f), X(0x31bb148e), X(0x75de2aac), X(0x31e961c4), + X(0x75ca87eb), X(0x3217a748), X(0x75b6d300), X(0x3245e512), + X(0x75a30bee), X(0x32741b1b), X(0x758f32b8), X(0x32a2495d), + X(0x757b4761), X(0x32d06fd0), X(0x756749ec), X(0x32fe8e6c), + X(0x75533a5c), X(0x332ca52c), X(0x753f18b4), X(0x335ab407), + X(0x752ae4f7), X(0x3388baf6), X(0x75169f29), X(0x33b6b9f4), + X(0x7502474c), X(0x33e4b0f7), X(0x74eddd64), X(0x34129ffa), + X(0x74d96174), X(0x344086f6), X(0x74c4d37f), X(0x346e65e2), + X(0x74b03388), X(0x349c3cb9), X(0x749b8192), X(0x34ca0b72), + X(0x7486bda1), X(0x34f7d208), X(0x7471e7b8), X(0x35259072), + X(0x745cffd9), X(0x355346aa), X(0x74480609), X(0x3580f4a9), + X(0x7432fa4a), X(0x35ae9a68), X(0x741ddca0), X(0x35dc37e0), + X(0x7408ad0d), X(0x3609cd09), X(0x73f36b96), X(0x363759dd), + X(0x73de183d), X(0x3664de55), X(0x73c8b306), X(0x36925a69), + X(0x73b33bf4), X(0x36bfce12), X(0x739db30b), X(0x36ed394b), + X(0x7388184d), X(0x371a9c0b), X(0x73726bbe), X(0x3747f64b), + X(0x735cad61), X(0x37754805), X(0x7346dd3a), X(0x37a29132), + X(0x7330fb4c), X(0x37cfd1ca), X(0x731b079b), X(0x37fd09c7), + X(0x73050229), X(0x382a3922), X(0x72eeeafa), X(0x38575fd3), + X(0x72d8c213), X(0x38847dd4), X(0x72c28775), X(0x38b1931e), + X(0x72ac3b24), X(0x38de9fa9), X(0x7295dd25), X(0x390ba370), + X(0x727f6d7a), X(0x39389e6a), X(0x7268ec26), X(0x39659092), + X(0x7252592e), X(0x399279df), X(0x723bb495), X(0x39bf5a4c), + X(0x7224fe5e), X(0x39ec31d1), X(0x720e368d), X(0x3a190067), + X(0x71f75d25), X(0x3a45c608), X(0x71e0722a), X(0x3a7282ac), + X(0x71c9759f), X(0x3a9f364c), X(0x71b26788), X(0x3acbe0e3), + X(0x719b47e8), X(0x3af88268), X(0x718416c4), X(0x3b251ad5), + X(0x716cd41e), X(0x3b51aa23), X(0x71557ffa), X(0x3b7e304c), + X(0x713e1a5c), X(0x3baaad47), X(0x7126a347), X(0x3bd7210f), + X(0x710f1abf), X(0x3c038b9d), X(0x70f780c8), X(0x3c2fecea), + X(0x70dfd565), X(0x3c5c44ee), X(0x70c8189a), X(0x3c8893a3), + X(0x70b04a6b), X(0x3cb4d903), X(0x70986adb), X(0x3ce11506), + X(0x708079ee), X(0x3d0d47a6), X(0x706877a7), X(0x3d3970db), + X(0x7050640a), X(0x3d6590a0), X(0x70383f1c), X(0x3d91a6ec), + X(0x702008e0), X(0x3dbdb3ba), X(0x7007c158), X(0x3de9b702), + X(0x6fef688b), X(0x3e15b0bf), X(0x6fd6fe7a), X(0x3e41a0e8), + X(0x6fbe8329), X(0x3e6d8777), X(0x6fa5f69e), X(0x3e996466), + X(0x6f8d58da), X(0x3ec537ae), X(0x6f74a9e3), X(0x3ef10147), + X(0x6f5be9bc), X(0x3f1cc12c), X(0x6f431868), X(0x3f487755), + X(0x6f2a35ec), X(0x3f7423bc), X(0x6f11424b), X(0x3f9fc65a), + X(0x6ef83d8a), X(0x3fcb5f27), X(0x6edf27ac), X(0x3ff6ee1f), + X(0x6ec600b4), X(0x40227339), X(0x6eacc8a8), X(0x404dee6f), + X(0x6e937f8a), X(0x40795fbb), X(0x6e7a255f), X(0x40a4c715), + X(0x6e60ba2a), X(0x40d02478), X(0x6e473df0), X(0x40fb77db), + X(0x6e2db0b4), X(0x4126c139), X(0x6e14127a), X(0x4152008c), + X(0x6dfa6347), X(0x417d35cb), X(0x6de0a31e), X(0x41a860f1), + X(0x6dc6d203), X(0x41d381f7), X(0x6daceffb), X(0x41fe98d6), + X(0x6d92fd09), X(0x4229a588), X(0x6d78f930), X(0x4254a806), + X(0x6d5ee476), X(0x427fa049), X(0x6d44bedf), X(0x42aa8e4b), + X(0x6d2a886d), X(0x42d57205), X(0x6d104126), X(0x43004b70), + X(0x6cf5e90d), X(0x432b1a87), X(0x6cdb8026), X(0x4355df42), + X(0x6cc10676), X(0x4380999a), X(0x6ca67c01), X(0x43ab498a), + X(0x6c8be0ca), X(0x43d5ef0a), X(0x6c7134d6), X(0x44008a14), + X(0x6c567829), X(0x442b1aa1), X(0x6c3baac7), X(0x4455a0ac), + X(0x6c20ccb4), X(0x44801c2c), X(0x6c05ddf4), X(0x44aa8d1c), + X(0x6beade8c), X(0x44d4f376), X(0x6bcfce7f), X(0x44ff4f32), + X(0x6bb4add2), X(0x4529a04a), X(0x6b997c89), X(0x4553e6b8), + X(0x6b7e3aa8), X(0x457e2275), X(0x6b62e834), X(0x45a8537a), + X(0x6b478530), X(0x45d279c1), X(0x6b2c11a1), X(0x45fc9544), + X(0x6b108d8a), X(0x4626a5fc), X(0x6af4f8f2), X(0x4650abe3), + X(0x6ad953da), X(0x467aa6f1), X(0x6abd9e49), X(0x46a49721), + X(0x6aa1d841), X(0x46ce7c6c), X(0x6a8601c8), X(0x46f856cc), + X(0x6a6a1ae1), X(0x4722263b), X(0x6a4e2391), X(0x474beab0), + X(0x6a321bdd), X(0x4775a428), X(0x6a1603c8), X(0x479f529a), + X(0x69f9db57), X(0x47c8f600), X(0x69dda28e), X(0x47f28e55), + X(0x69c15972), X(0x481c1b91), X(0x69a50007), X(0x48459daf), + X(0x69889651), X(0x486f14a7), X(0x696c1c55), X(0x48988074), + X(0x694f9217), X(0x48c1e10f), X(0x6932f79b), X(0x48eb3671), + X(0x69164ce6), X(0x49148095), X(0x68f991fd), X(0x493dbf73), + X(0x68dcc6e3), X(0x4966f306), X(0x68bfeb9e), X(0x49901b48), + X(0x68a30031), X(0x49b93831), X(0x688604a1), X(0x49e249bc), + X(0x6868f8f3), X(0x4a0b4fe2), X(0x684bdd2b), X(0x4a344a9c), + X(0x682eb14e), X(0x4a5d39e6), X(0x6811755f), X(0x4a861db7), + X(0x67f42964), X(0x4aaef60b), X(0x67d6cd62), X(0x4ad7c2da), + X(0x67b9615b), X(0x4b00841e), X(0x679be556), X(0x4b2939d2), + X(0x677e5957), X(0x4b51e3ee), X(0x6760bd62), X(0x4b7a826c), + X(0x6743117b), X(0x4ba31547), X(0x672555a8), X(0x4bcb9c78), + X(0x670789ed), X(0x4bf417f9), X(0x66e9ae4f), X(0x4c1c87c3), + X(0x66cbc2d2), X(0x4c44ebd0), X(0x66adc77a), X(0x4c6d441a), + X(0x668fbc4d), X(0x4c95909c), X(0x6671a14f), X(0x4cbdd14d), + X(0x66537685), X(0x4ce60629), X(0x66353bf3), X(0x4d0e2f2a), + X(0x6616f19d), X(0x4d364c48), X(0x65f8978a), X(0x4d5e5d7e), + X(0x65da2dbd), X(0x4d8662c5), X(0x65bbb43b), X(0x4dae5c18), + X(0x659d2b09), X(0x4dd64971), X(0x657e922b), X(0x4dfe2ac8), + X(0x655fe9a6), X(0x4e260018), X(0x6541317f), X(0x4e4dc95c), + X(0x652269bb), X(0x4e75868c), X(0x6503925e), X(0x4e9d37a2), + X(0x64e4ab6e), X(0x4ec4dc99), X(0x64c5b4ee), X(0x4eec756a), + X(0x64a6aee4), X(0x4f140210), X(0x64879954), X(0x4f3b8283), + X(0x64687444), X(0x4f62f6bf), X(0x64493fb8), X(0x4f8a5ebc), + X(0x6429fbb4), X(0x4fb1ba76), X(0x640aa83e), X(0x4fd909e5), + X(0x63eb455b), X(0x50004d04), X(0x63cbd30f), X(0x502783cc), + X(0x63ac515f), X(0x504eae39), X(0x638cc051), X(0x5075cc43), + X(0x636d1fe8), X(0x509cdde4), X(0x634d702a), X(0x50c3e317), + X(0x632db11c), X(0x50eadbd5), X(0x630de2c2), X(0x5111c819), + X(0x62ee0522), X(0x5138a7dd), X(0x62ce1840), X(0x515f7b1a), + X(0x62ae1c22), X(0x518641ca), X(0x628e10cc), X(0x51acfbe8), + X(0x626df643), X(0x51d3a96e), X(0x624dcc8c), X(0x51fa4a55), + X(0x622d93ad), X(0x5220de98), X(0x620d4ba9), X(0x52476631), + X(0x61ecf487), X(0x526de119), X(0x61cc8e4a), X(0x52944f4b), + X(0x61ac18f9), X(0x52bab0c1), X(0x618b9497), X(0x52e10575), + X(0x616b012b), X(0x53074d62), X(0x614a5eb9), X(0x532d8880), + X(0x6129ad46), X(0x5353b6ca), X(0x6108ecd7), X(0x5379d83b), + X(0x60e81d71), X(0x539feccd), X(0x60c73f1a), X(0x53c5f479), + X(0x60a651d6), X(0x53ebef3a), X(0x608555aa), X(0x5411dd09), + X(0x60644a9c), X(0x5437bde2), X(0x604330b1), X(0x545d91be), + X(0x602207ed), X(0x54835898), X(0x6000d056), X(0x54a91269), + X(0x5fdf89f1), X(0x54cebf2b), X(0x5fbe34c3), X(0x54f45eda), + X(0x5f9cd0d2), X(0x5519f16f), X(0x5f7b5e21), X(0x553f76e4), + X(0x5f59dcb7), X(0x5564ef34), X(0x5f384c99), X(0x558a5a58), + X(0x5f16adcc), X(0x55afb84b), X(0x5ef50055), X(0x55d50908), + X(0x5ed34439), X(0x55fa4c88), X(0x5eb1797d), X(0x561f82c6), + X(0x5e8fa028), X(0x5644abbc), X(0x5e6db83d), X(0x5669c764), + X(0x5e4bc1c2), X(0x568ed5b9), X(0x5e29bcbc), X(0x56b3d6b4), + X(0x5e07a931), X(0x56d8ca51), X(0x5de58726), X(0x56fdb089), + X(0x5dc356a0), X(0x57228957), X(0x5da117a5), X(0x574754b5), + X(0x5d7eca39), X(0x576c129d), X(0x5d5c6e62), X(0x5790c30a), + X(0x5d3a0425), X(0x57b565f6), X(0x5d178b88), X(0x57d9fb5b), + X(0x5cf50490), X(0x57fe8334), X(0x5cd26f42), X(0x5822fd7c), + X(0x5cafcba3), X(0x58476a2b), X(0x5c8d19ba), X(0x586bc93e), + X(0x5c6a598a), X(0x58901aae), X(0x5c478b1a), X(0x58b45e76), + X(0x5c24ae6f), X(0x58d8948f), X(0x5c01c38f), X(0x58fcbcf6), + X(0x5bdeca7e), X(0x5920d7a3), X(0x5bbbc342), X(0x5944e491), + X(0x5b98ade1), X(0x5968e3bc), X(0x5b758a60), X(0x598cd51c), + X(0x5b5258c4), X(0x59b0b8ad), X(0x5b2f1913), X(0x59d48e6a), + X(0x5b0bcb52), X(0x59f8564c), X(0x5ae86f86), X(0x5a1c104e), + X(0x5ac505b6), X(0x5a3fbc6b), X(0x5aa18de6), X(0x5a635a9d), + X(0x5a7e081d), X(0x5a86eade), X(0x5a5a745f), X(0x5aaa6d2a), + X(0x5a36d2b1), X(0x5acde17a), X(0x5a13231b), X(0x5af147ca), + X(0x59ef65a0), X(0x5b14a013), X(0x59cb9a47), X(0x5b37ea51), + X(0x59a7c115), X(0x5b5b267d), X(0x5983da0f), X(0x5b7e5493), + X(0x595fe53c), X(0x5ba1748d), X(0x593be2a0), X(0x5bc48665), + X(0x5917d241), X(0x5be78a17), X(0x58f3b425), X(0x5c0a7f9c), + X(0x58cf8852), X(0x5c2d66ef), X(0x58ab4ecc), X(0x5c50400c), + X(0x5887079a), X(0x5c730aec), X(0x5862b2c1), X(0x5c95c78b), + X(0x583e5046), X(0x5cb875e2), X(0x5819e030), X(0x5cdb15ed), + X(0x57f56284), X(0x5cfda7a6), X(0x57d0d747), X(0x5d202b08), + X(0x57ac3e7f), X(0x5d42a00e), X(0x57879832), X(0x5d6506b1), + X(0x5762e466), X(0x5d875eee), X(0x573e2320), X(0x5da9a8be), + X(0x57195466), X(0x5dcbe41d), X(0x56f4783d), X(0x5dee1105), + X(0x56cf8eab), X(0x5e102f70), X(0x56aa97b6), X(0x5e323f5a), + X(0x56859364), X(0x5e5440be), X(0x566081ba), X(0x5e763395), + X(0x563b62be), X(0x5e9817db), X(0x56163675), X(0x5eb9ed8b), + X(0x55f0fce6), X(0x5edbb49f), X(0x55cbb616), X(0x5efd6d12), + X(0x55a6620b), X(0x5f1f16df), X(0x558100cb), X(0x5f40b201), + X(0x555b925b), X(0x5f623e73), X(0x553616c2), X(0x5f83bc2f), + X(0x55108e04), X(0x5fa52b30), X(0x54eaf829), X(0x5fc68b71), + X(0x54c55534), X(0x5fe7dced), X(0x549fa52e), X(0x60091f9f), + X(0x5479e81a), X(0x602a5382), X(0x54541dff), X(0x604b7890), + X(0x542e46e4), X(0x606c8ec5), X(0x540862cc), X(0x608d961b), + X(0x53e271c0), X(0x60ae8e8d), X(0x53bc73c4), X(0x60cf7816), + X(0x539668de), X(0x60f052b2), X(0x53705114), X(0x61111e5a), + X(0x534a2c6c), X(0x6131db0b), X(0x5323faec), X(0x615288be), + X(0x52fdbc9a), X(0x6173276f), X(0x52d7717b), X(0x6193b719), + X(0x52b11996), X(0x61b437b7), X(0x528ab4f0), X(0x61d4a943), + X(0x52644390), X(0x61f50bba), X(0x523dc57b), X(0x62155f15), + X(0x52173ab7), X(0x6235a350), X(0x51f0a34b), X(0x6255d866), + X(0x51c9ff3b), X(0x6275fe52), X(0x51a34e8f), X(0x6296150e), + X(0x517c914c), X(0x62b61c97), X(0x5155c778), X(0x62d614e7), + X(0x512ef118), X(0x62f5fdf8), X(0x51080e34), X(0x6315d7c7), + X(0x50e11ed1), X(0x6335a24f), X(0x50ba22f5), X(0x63555d89), + X(0x50931aa6), X(0x63750972), X(0x506c05ea), X(0x6394a605), + X(0x5044e4c7), X(0x63b4333c), X(0x501db743), X(0x63d3b114), + X(0x4ff67d64), X(0x63f31f86), X(0x4fcf3730), X(0x64127e8e), + X(0x4fa7e4ae), X(0x6431ce28), X(0x4f8085e3), X(0x64510e4e), + X(0x4f591ad5), X(0x64703efc), X(0x4f31a38b), X(0x648f602c), + X(0x4f0a200b), X(0x64ae71db), X(0x4ee2905a), X(0x64cd7403), + X(0x4ebaf47f), X(0x64ec66a0), X(0x4e934c7f), X(0x650b49ac), + X(0x4e6b9862), X(0x652a1d23), X(0x4e43d82c), X(0x6548e100), + X(0x4e1c0be5), X(0x6567953f), X(0x4df43393), X(0x658639da), + X(0x4dcc4f3a), X(0x65a4cece), X(0x4da45ee3), X(0x65c35414), + X(0x4d7c6292), X(0x65e1c9a9), X(0x4d545a4e), X(0x66002f88), + X(0x4d2c461e), X(0x661e85ad), X(0x4d042606), X(0x663ccc11), + X(0x4cdbfa0f), X(0x665b02b2), X(0x4cb3c23d), X(0x6679298a), + X(0x4c8b7e96), X(0x66974094), X(0x4c632f23), X(0x66b547cc), + X(0x4c3ad3e7), X(0x66d33f2e), X(0x4c126cea), X(0x66f126b4), + X(0x4be9fa32), X(0x670efe5a), X(0x4bc17bc4), X(0x672cc61b), + X(0x4b98f1a8), X(0x674a7df3), X(0x4b705be4), X(0x676825de), + X(0x4b47ba7d), X(0x6785bdd6), X(0x4b1f0d7b), X(0x67a345d7), + X(0x4af654e2), X(0x67c0bddd), X(0x4acd90bb), X(0x67de25e3), + X(0x4aa4c10a), X(0x67fb7de4), X(0x4a7be5d6), X(0x6818c5dc), + X(0x4a52ff26), X(0x6835fdc7), X(0x4a2a0d00), X(0x6853259f), + X(0x4a010f6a), X(0x68703d61), X(0x49d8066a), X(0x688d4508), + X(0x49aef207), X(0x68aa3c90), X(0x4985d248), X(0x68c723f3), + X(0x495ca731), X(0x68e3fb2e), X(0x493370ca), X(0x6900c23c), + X(0x490a2f1a), X(0x691d7919), X(0x48e0e226), X(0x693a1fbf), + X(0x48b789f5), X(0x6956b62c), X(0x488e268d), X(0x69733c5a), + X(0x4864b7f5), X(0x698fb245), X(0x483b3e33), X(0x69ac17e9), + X(0x4811b94d), X(0x69c86d41), X(0x47e8294a), X(0x69e4b248), + X(0x47be8e30), X(0x6a00e6fc), X(0x4794e806), X(0x6a1d0b56), + X(0x476b36d2), X(0x6a391f53), X(0x47417a9b), X(0x6a5522ef), + X(0x4717b366), X(0x6a711625), X(0x46ede13b), X(0x6a8cf8f0), + X(0x46c4041f), X(0x6aa8cb4e), X(0x469a1c1a), X(0x6ac48d38), + X(0x46702932), X(0x6ae03eac), X(0x46462b6d), X(0x6afbdfa4), + X(0x461c22d1), X(0x6b17701c), X(0x45f20f66), X(0x6b32f011), + X(0x45c7f132), X(0x6b4e5f7e), X(0x459dc83a), X(0x6b69be5f), + X(0x45739486), X(0x6b850caf), X(0x4549561d), X(0x6ba04a6a), + X(0x451f0d04), X(0x6bbb778c), X(0x44f4b942), X(0x6bd69412), + X(0x44ca5ade), X(0x6bf19ff6), X(0x449ff1de), X(0x6c0c9b34), + X(0x44757e49), X(0x6c2785c9), X(0x444b0026), X(0x6c425fb0), + X(0x4420777a), X(0x6c5d28e5), X(0x43f5e44d), X(0x6c77e165), + X(0x43cb46a5), X(0x6c92892a), X(0x43a09e88), X(0x6cad2031), + X(0x4375ebfe), X(0x6cc7a675), X(0x434b2f0c), X(0x6ce21bf3), + X(0x432067ba), X(0x6cfc80a7), X(0x42f5960d), X(0x6d16d48b), + X(0x42caba0d), X(0x6d31179e), X(0x429fd3c1), X(0x6d4b49d9), + X(0x4274e32e), X(0x6d656b3a), X(0x4249e85b), X(0x6d7f7bbc), + X(0x421ee350), X(0x6d997b5b), X(0x41f3d412), X(0x6db36a13), + X(0x41c8baa9), X(0x6dcd47e1), X(0x419d971a), X(0x6de714bf), + X(0x4172696d), X(0x6e00d0ab), X(0x414731a9), X(0x6e1a7ba0), + X(0x411befd3), X(0x6e34159b), X(0x40f0a3f3), X(0x6e4d9e97), + X(0x40c54e0f), X(0x6e671690), X(0x4099ee2e), X(0x6e807d82), + X(0x406e8457), X(0x6e99d36b), X(0x40431090), X(0x6eb31845), + X(0x401792e0), X(0x6ecc4c0c), X(0x3fec0b4e), X(0x6ee56ebe), + X(0x3fc079e0), X(0x6efe8055), X(0x3f94de9d), X(0x6f1780cf), + X(0x3f69398d), X(0x6f307027), X(0x3f3d8ab5), X(0x6f494e59), + X(0x3f11d21c), X(0x6f621b62), X(0x3ee60fca), X(0x6f7ad73e), + X(0x3eba43c4), X(0x6f9381e8), X(0x3e8e6e12), X(0x6fac1b5e), + X(0x3e628eba), X(0x6fc4a39b), X(0x3e36a5c4), X(0x6fdd1a9c), + X(0x3e0ab335), X(0x6ff5805c), X(0x3ddeb715), X(0x700dd4d9), + X(0x3db2b16b), X(0x7026180e), X(0x3d86a23d), X(0x703e49f7), + X(0x3d5a8991), X(0x70566a91), X(0x3d2e6770), X(0x706e79d9), + X(0x3d023be0), X(0x708677c9), X(0x3cd606e6), X(0x709e6460), + X(0x3ca9c88c), X(0x70b63f98), X(0x3c7d80d6), X(0x70ce096f), + X(0x3c512fcc), X(0x70e5c1e0), X(0x3c24d575), X(0x70fd68e8), + X(0x3bf871d8), X(0x7114fe84), X(0x3bcc04fb), X(0x712c82af), + X(0x3b9f8ee5), X(0x7143f567), X(0x3b730f9d), X(0x715b56a7), + X(0x3b46872b), X(0x7172a66b), X(0x3b19f594), X(0x7189e4b1), + X(0x3aed5ae1), X(0x71a11175), X(0x3ac0b717), X(0x71b82cb3), + X(0x3a940a3d), X(0x71cf3667), X(0x3a67545b), X(0x71e62e8e), + X(0x3a3a9577), X(0x71fd1525), X(0x3a0dcd98), X(0x7213ea27), + X(0x39e0fcc6), X(0x722aad93), X(0x39b42306), X(0x72415f62), + X(0x39874061), X(0x7257ff94), X(0x395a54dc), X(0x726e8e23), + X(0x392d607f), X(0x72850b0c), X(0x39006351), X(0x729b764d), + X(0x38d35d59), X(0x72b1cfe1), X(0x38a64e9d), X(0x72c817c5), + X(0x38793725), X(0x72de4df6), X(0x384c16f7), X(0x72f47270), + X(0x381eee1b), X(0x730a852f), X(0x37f1bc97), X(0x73208631), + X(0x37c48272), X(0x73367572), X(0x37973fb4), X(0x734c52ef), + X(0x3769f464), X(0x73621ea3), X(0x373ca087), X(0x7377d88d), + X(0x370f4426), X(0x738d80a8), X(0x36e1df48), X(0x73a316f1), + X(0x36b471f2), X(0x73b89b65), X(0x3686fc2d), X(0x73ce0e01), + X(0x36597e00), X(0x73e36ec1), X(0x362bf770), X(0x73f8bda1), + X(0x35fe6887), X(0x740dfaa0), X(0x35d0d149), X(0x742325b8), + X(0x35a331bf), X(0x74383ee8), X(0x357589ef), X(0x744d462c), + X(0x3547d9e1), X(0x74623b80), X(0x351a219c), X(0x74771ee1), + X(0x34ec6126), X(0x748bf04d), X(0x34be9887), X(0x74a0afc0), + X(0x3490c7c5), X(0x74b55d36), X(0x3462eee9), X(0x74c9f8ad), + X(0x34350df8), X(0x74de8221), X(0x340724fa), X(0x74f2f98f), + X(0x33d933f6), X(0x75075ef5), X(0x33ab3af4), X(0x751bb24e), + X(0x337d39f9), X(0x752ff398), X(0x334f310e), X(0x754422d0), + X(0x33212039), X(0x75583ff2), X(0x32f30782), X(0x756c4afc), + X(0x32c4e6ef), X(0x758043ea), X(0x3296be88), X(0x75942ab9), + X(0x32688e53), X(0x75a7ff66), X(0x323a5659), X(0x75bbc1ef), + X(0x320c16a0), X(0x75cf724f), X(0x31ddcf2f), X(0x75e31085), + X(0x31af800d), X(0x75f69c8d), X(0x31812942), X(0x760a1663), + X(0x3152cad5), X(0x761d7e06), X(0x312464cc), X(0x7630d372), + X(0x30f5f72f), X(0x764416a3), X(0x30c78206), X(0x76574798), + X(0x30990556), X(0x766a664d), X(0x306a8128), X(0x767d72bf), + X(0x303bf583), X(0x76906ceb), X(0x300d626e), X(0x76a354ce), + X(0x2fdec7ef), X(0x76b62a66), X(0x2fb0260f), X(0x76c8edaf), + X(0x2f817cd4), X(0x76db9ea7), X(0x2f52cc45), X(0x76ee3d4a), + X(0x2f24146a), X(0x7700c997), X(0x2ef5554b), X(0x77134389), + X(0x2ec68eed), X(0x7725ab1e), X(0x2e97c159), X(0x77380054), + X(0x2e68ec95), X(0x774a4327), X(0x2e3a10a9), X(0x775c7394), + X(0x2e0b2d9c), X(0x776e919a), X(0x2ddc4376), X(0x77809d34), + X(0x2dad523d), X(0x77929661), X(0x2d7e59f8), X(0x77a47d1d), + X(0x2d4f5ab0), X(0x77b65166), X(0x2d20546b), X(0x77c81338), + X(0x2cf14730), X(0x77d9c292), X(0x2cc23307), X(0x77eb5f71), + X(0x2c9317f8), X(0x77fce9d1), X(0x2c63f608), X(0x780e61b1), + X(0x2c34cd40), X(0x781fc70c), X(0x2c059da7), X(0x783119e2), + X(0x2bd66744), X(0x78425a2e), X(0x2ba72a1e), X(0x785387ef), + X(0x2b77e63d), X(0x7864a321), X(0x2b489ba7), X(0x7875abc3), + X(0x2b194a65), X(0x7886a1d1), X(0x2ae9f27e), X(0x78978549), + X(0x2aba93f8), X(0x78a85628), X(0x2a8b2edc), X(0x78b9146c), + X(0x2a5bc330), X(0x78c9c011), X(0x2a2c50fb), X(0x78da5916), + X(0x29fcd846), X(0x78eadf79), X(0x29cd5917), X(0x78fb5335), + X(0x299dd376), X(0x790bb449), X(0x296e476a), X(0x791c02b3), + X(0x293eb4fb), X(0x792c3e70), X(0x290f1c2f), X(0x793c677c), + X(0x28df7d0e), X(0x794c7dd7), X(0x28afd79f), X(0x795c817d), + X(0x28802bea), X(0x796c726b), X(0x285079f7), X(0x797c50a0), + X(0x2820c1cb), X(0x798c1c19), X(0x27f10370), X(0x799bd4d4), + X(0x27c13eec), X(0x79ab7ace), X(0x27917446), X(0x79bb0e04), + X(0x2761a386), X(0x79ca8e74), X(0x2731ccb4), X(0x79d9fc1d), + X(0x2701efd6), X(0x79e956fb), X(0x26d20cf4), X(0x79f89f0c), + X(0x26a22416), X(0x7a07d44e), X(0x26723542), X(0x7a16f6be), + X(0x26424081), X(0x7a26065a), X(0x261245d9), X(0x7a350320), + X(0x25e24553), X(0x7a43ed0e), X(0x25b23ef4), X(0x7a52c420), + X(0x258232c6), X(0x7a618856), X(0x255220ce), X(0x7a7039ac), + X(0x25220916), X(0x7a7ed821), X(0x24f1eba3), X(0x7a8d63b1), + X(0x24c1c87e), X(0x7a9bdc5c), X(0x24919fae), X(0x7aaa421e), + X(0x2461713a), X(0x7ab894f5), X(0x24313d2a), X(0x7ac6d4e0), + X(0x24010385), X(0x7ad501db), X(0x23d0c452), X(0x7ae31be6), + X(0x23a07f9a), X(0x7af122fc), X(0x23703563), X(0x7aff171e), + X(0x233fe5b5), X(0x7b0cf848), X(0x230f9098), X(0x7b1ac677), + X(0x22df3612), X(0x7b2881ab), X(0x22aed62c), X(0x7b3629e1), + X(0x227e70ec), X(0x7b43bf17), X(0x224e065b), X(0x7b51414a), + X(0x221d9680), X(0x7b5eb079), X(0x21ed2161), X(0x7b6c0ca1), + X(0x21bca707), X(0x7b7955c1), X(0x218c277a), X(0x7b868bd6), + X(0x215ba2c0), X(0x7b93aedf), X(0x212b18e1), X(0x7ba0bed9), + X(0x20fa89e4), X(0x7badbbc3), X(0x20c9f5d2), X(0x7bbaa59a), + X(0x20995cb1), X(0x7bc77c5c), X(0x2068be8a), X(0x7bd44008), + X(0x20381b62), X(0x7be0f09b), X(0x20077343), X(0x7bed8e13), + X(0x1fd6c634), X(0x7bfa1870), X(0x1fa6143b), X(0x7c068fad), + X(0x1f755d61), X(0x7c12f3cb), X(0x1f44a1ad), X(0x7c1f44c6), + X(0x1f13e127), X(0x7c2b829d), X(0x1ee31bd5), X(0x7c37ad4e), + X(0x1eb251c1), X(0x7c43c4d7), X(0x1e8182f0), X(0x7c4fc936), + X(0x1e50af6b), X(0x7c5bba69), X(0x1e1fd73a), X(0x7c67986f), + X(0x1deefa63), X(0x7c736346), X(0x1dbe18ee), X(0x7c7f1aec), + X(0x1d8d32e3), X(0x7c8abf5f), X(0x1d5c484a), X(0x7c96509d), + X(0x1d2b5929), X(0x7ca1cea4), X(0x1cfa6589), X(0x7cad3974), + X(0x1cc96d71), X(0x7cb89109), X(0x1c9870e9), X(0x7cc3d563), + X(0x1c676ff7), X(0x7ccf067e), X(0x1c366aa4), X(0x7cda245b), + X(0x1c0560f8), X(0x7ce52ef7), X(0x1bd452f9), X(0x7cf02650), + X(0x1ba340af), X(0x7cfb0a65), X(0x1b722a23), X(0x7d05db33), + X(0x1b410f5b), X(0x7d1098ba), X(0x1b0ff05f), X(0x7d1b42f8), + X(0x1adecd36), X(0x7d25d9eb), X(0x1aada5e9), X(0x7d305d91), + X(0x1a7c7a7f), X(0x7d3acde8), X(0x1a4b4afe), X(0x7d452af0), + X(0x1a1a1770), X(0x7d4f74a7), X(0x19e8dfdc), X(0x7d59ab0a), + X(0x19b7a448), X(0x7d63ce19), X(0x198664bd), X(0x7d6dddd1), + X(0x19552143), X(0x7d77da32), X(0x1923d9e1), X(0x7d81c339), + X(0x18f28e9e), X(0x7d8b98e6), X(0x18c13f82), X(0x7d955b36), + X(0x188fec94), X(0x7d9f0a29), X(0x185e95de), X(0x7da8a5bc), + X(0x182d3b65), X(0x7db22dee), X(0x17fbdd31), X(0x7dbba2be), + X(0x17ca7b4b), X(0x7dc5042b), X(0x179915ba), X(0x7dce5232), + X(0x1767ac84), X(0x7dd78cd2), X(0x17363fb3), X(0x7de0b40b), + X(0x1704cf4e), X(0x7de9c7da), X(0x16d35b5c), X(0x7df2c83e), + X(0x16a1e3e5), X(0x7dfbb536), X(0x167068f0), X(0x7e048ec0), + X(0x163eea85), X(0x7e0d54dc), X(0x160d68ac), X(0x7e160787), + X(0x15dbe36d), X(0x7e1ea6c0), X(0x15aa5ace), X(0x7e273287), + X(0x1578ced9), X(0x7e2faad9), X(0x15473f93), X(0x7e380fb5), + X(0x1515ad06), X(0x7e40611a), X(0x14e41738), X(0x7e489f08), + X(0x14b27e31), X(0x7e50c97b), X(0x1480e1fa), X(0x7e58e074), + X(0x144f4299), X(0x7e60e3f1), X(0x141da016), X(0x7e68d3f1), + X(0x13ebfa79), X(0x7e70b073), X(0x13ba51c9), X(0x7e787974), + X(0x1388a60f), X(0x7e802ef5), X(0x1356f751), X(0x7e87d0f4), + X(0x13254598), X(0x7e8f5f70), X(0x12f390eb), X(0x7e96da67), + X(0x12c1d952), X(0x7e9e41d9), X(0x12901ed5), X(0x7ea595c3), + X(0x125e617a), X(0x7eacd627), X(0x122ca14b), X(0x7eb40301), + X(0x11fade4e), X(0x7ebb1c51), X(0x11c9188b), X(0x7ec22216), + X(0x1197500a), X(0x7ec9144f), X(0x116584d3), X(0x7ecff2fa), + X(0x1133b6ec), X(0x7ed6be18), X(0x1101e65f), X(0x7edd75a5), + X(0x10d01332), X(0x7ee419a3), X(0x109e3d6e), X(0x7eeaaa0f), + X(0x106c6519), X(0x7ef126e8), X(0x103a8a3c), X(0x7ef7902e), + X(0x1008acde), X(0x7efde5e0), X(0xfd6cd08), X(0x7f0427fc), + X(0xfa4eac0), X(0x7f0a5681), X(0xf73060e), X(0x7f107170), + X(0xf411efb), X(0x7f1678c6), X(0xf0f358d), X(0x7f1c6c83), + X(0xedd49cd), X(0x7f224ca5), X(0xeab5bc2), X(0x7f28192d), + X(0xe796b74), X(0x7f2dd219), X(0xe4778ea), X(0x7f337768), + X(0xe15842d), X(0x7f390919), X(0xde38d44), X(0x7f3e872b), + X(0xdb19436), X(0x7f43f19f), X(0xd7f990c), X(0x7f494872), + X(0xd4d9bcd), X(0x7f4e8ba3), X(0xd1b9c81), X(0x7f53bb33), + X(0xce99b2f), X(0x7f58d721), X(0xcb797df), X(0x7f5ddf6b), + X(0xc85929a), X(0x7f62d410), X(0xc538b66), X(0x7f67b511), + X(0xc21824b), X(0x7f6c826c), X(0xbef7752), X(0x7f713c21), + X(0xbbd6a81), X(0x7f75e22e), X(0xb8b5be1), X(0x7f7a7493), + X(0xb594b79), X(0x7f7ef350), X(0xb273951), X(0x7f835e63), + X(0xaf52571), X(0x7f87b5cc), X(0xac30fe0), X(0x7f8bf98b), + X(0xa90f8a6), X(0x7f90299e), X(0xa5edfcc), X(0x7f944605), + X(0xa2cc557), X(0x7f984ec0), X(0x9faa952), X(0x7f9c43cd), + X(0x9c88bc2), X(0x7fa0252d), X(0x9966cb0), X(0x7fa3f2de), + X(0x9644c23), X(0x7fa7ace0), X(0x9322a24), X(0x7fab5333), + X(0x90006b9), X(0x7faee5d5), X(0x8cde1eb), X(0x7fb264c6), + X(0x89bbbc2), X(0x7fb5d007), X(0x8699445), X(0x7fb92795), + X(0x8376b7c), X(0x7fbc6b71), X(0x805416e), X(0x7fbf9b9b), + X(0x7d31624), X(0x7fc2b811), X(0x7a0e9a4), X(0x7fc5c0d3), + X(0x76ebbf8), X(0x7fc8b5e1), X(0x73c8d26), X(0x7fcb973a), + X(0x70a5d37), X(0x7fce64de), X(0x6d82c31), X(0x7fd11ecd), + X(0x6a5fa1e), X(0x7fd3c505), X(0x673c704), X(0x7fd65787), + X(0x64192eb), X(0x7fd8d653), X(0x60f5ddb), X(0x7fdb4167), + X(0x5dd27dc), X(0x7fdd98c3), X(0x5aaf0f6), X(0x7fdfdc68), + X(0x578b92f), X(0x7fe20c54), X(0x5468091), X(0x7fe42888), + X(0x5144723), X(0x7fe63103), X(0x4e20ceb), X(0x7fe825c4), + X(0x4afd1f4), X(0x7fea06cc), X(0x47d9643), X(0x7febd41a), + X(0x44b59e1), X(0x7fed8dae), X(0x4191cd5), X(0x7fef3388), + X(0x3e6df27), X(0x7ff0c5a7), X(0x3b4a0e0), X(0x7ff2440b), + X(0x3826206), X(0x7ff3aeb4), X(0x35022a2), X(0x7ff505a2), + X(0x31de2bb), X(0x7ff648d4), X(0x2eba258), X(0x7ff7784a), + X(0x2b96183), X(0x7ff89404), X(0x2872042), X(0x7ff99c03), + X(0x254de9d), X(0x7ffa9045), X(0x2229c9c), X(0x7ffb70ca), + X(0x1f05a47), X(0x7ffc3d93), X(0x1be17a5), X(0x7ffcf6a0), + X(0x18bd4bf), X(0x7ffd9bf0), X(0x159919b), X(0x7ffe2d82), + X(0x1274e43), X(0x7ffeab58), X(0xf50abc), X(0x7fff1571), + X(0xc2c710), X(0x7fff6bcd), X(0x908346), X(0x7fffae6b), + X(0x5e3f65), X(0x7fffdd4d), X(0x2bfb76), X(0x7ffff871),}; + diff -rNu old/imdct_const.h new/imdct_const.h --- old/imdct_const.h 1970-01-01 01:00:00.000000000 +0100 +++ new/imdct_const.h 2003-11-27 11:18:07.000000000 +0100 @@ -0,0 +1,258 @@ +/* cos, sin, 2*pi*i / 512 */ +static CDATA fft_cossin_lookup[2*512] = { + 0x7fffffff, 0x0, 0x7ffd885a, 0x1921d1f, + 0x7ff62182, 0x3242abe, 0x7fe9cbbf, 0x4b6195d, + 0x7fd8878d, 0x647d97c, 0x7fc25596, 0x7d95b9e, + 0x7fa736b4, 0x96a9049, 0x7f872bf2, 0xafb6805, + 0x7f62368f, 0xc8bd35e, 0x7f3857f5, 0xe1bc2e3, + 0x7f0991c3, 0xfab272b, 0x7ed5e5c6, 0x1139f0ce, + 0x7e9d55fc, 0x12c8106e, 0x7e5fe493, 0x145576b1, + 0x7e1d93e9, 0x15e21444, 0x7dd6668e, 0x176dd9de, + 0x7d8a5f3f, 0x18f8b83c, 0x7d3980ec, 0x1a82a025, + 0x7ce3ceb1, 0x1c0b826a, 0x7c894bdd, 0x1d934fe5, + 0x7c29fbee, 0x1f19f97b, 0x7bc5e28f, 0x209f701c, + 0x7b5d039d, 0x2223a4c5, 0x7aef6323, 0x23a6887e, + 0x7a7d055b, 0x25280c5d, 0x7a05eead, 0x26a82185, + 0x798a23b1, 0x2826b928, 0x7909a92c, 0x29a3c484, + 0x78848413, 0x2b1f34eb, 0x77fab988, 0x2c98fbba, + 0x776c4edb, 0x2e110a61, 0x76d94988, 0x2f875262, + 0x7641af3c, 0x30fbc54d, 0x75a585cf, 0x326e54c7, + 0x7504d345, 0x33def287, 0x745f9dd0, 0x354d9056, + 0x73b5ebd0, 0x36ba2013, 0x7307c3cf, 0x382493b0, + 0x72552c84, 0x398cdd32, 0x719e2cd2, 0x3af2eeb7, + 0x70e2cbc6, 0x3c56ba70, 0x70231099, 0x3db832a5, + 0x6f5f02b1, 0x3f1749b7, 0x6e96a99c, 0x4073f21d, + 0x6dca0d14, 0x41ce1e64, 0x6cf934fb, 0x4325c135, + 0x6c242960, 0x447acd50, 0x6b4af278, 0x45cd358f, + 0x6a6d98a4, 0x471cece6, 0x698c246c, 0x4869e664, + 0x68a69e81, 0x49b41533, 0x67bd0fbc, 0x4afb6c97, + 0x66cf811f, 0x4c3fdff3, 0x65ddfbd3, 0x4d8162c4, + 0x64e88926, 0x4ebfe8a4, 0x63ef328f, 0x4ffb654d, + 0x62f201ac, 0x5133cc94, 0x61f1003e, 0x5269126e, + 0x60ec382f, 0x539b2aef, 0x5fe3b38d, 0x54ca0a4a, + 0x5ed77c89, 0x55f5a4d2, 0x5dc79d7c, 0x571deef9, + 0x5cb420df, 0x5842dd54, 0x5b9d1153, 0x59646497, + 0x5a827999, 0x5a827999, 0x59646497, 0x5b9d1153, + 0x5842dd54, 0x5cb420df, 0x571deef9, 0x5dc79d7c, + 0x55f5a4d2, 0x5ed77c89, 0x54ca0a4a, 0x5fe3b38d, + 0x539b2aef, 0x60ec382f, 0x5269126e, 0x61f1003e, + 0x5133cc94, 0x62f201ac, 0x4ffb654d, 0x63ef328f, + 0x4ebfe8a4, 0x64e88926, 0x4d8162c4, 0x65ddfbd3, + 0x4c3fdff3, 0x66cf811f, 0x4afb6c97, 0x67bd0fbc, + 0x49b41533, 0x68a69e81, 0x4869e664, 0x698c246c, + 0x471cece6, 0x6a6d98a4, 0x45cd358f, 0x6b4af278, + 0x447acd50, 0x6c242960, 0x4325c135, 0x6cf934fb, + 0x41ce1e64, 0x6dca0d14, 0x4073f21d, 0x6e96a99c, + 0x3f1749b7, 0x6f5f02b1, 0x3db832a5, 0x70231099, + 0x3c56ba70, 0x70e2cbc6, 0x3af2eeb7, 0x719e2cd2, + 0x398cdd32, 0x72552c84, 0x382493b0, 0x7307c3cf, + 0x36ba2013, 0x73b5ebd0, 0x354d9056, 0x745f9dd0, + 0x33def287, 0x7504d345, 0x326e54c7, 0x75a585cf, + 0x30fbc54d, 0x7641af3c, 0x2f875262, 0x76d94988, + 0x2e110a61, 0x776c4edb, 0x2c98fbba, 0x77fab988, + 0x2b1f34eb, 0x78848413, 0x29a3c484, 0x7909a92c, + 0x2826b928, 0x798a23b1, 0x26a82185, 0x7a05eead, + 0x25280c5d, 0x7a7d055b, 0x23a6887e, 0x7aef6323, + 0x2223a4c5, 0x7b5d039d, 0x209f701c, 0x7bc5e28f, + 0x1f19f97b, 0x7c29fbee, 0x1d934fe5, 0x7c894bdd, + 0x1c0b826a, 0x7ce3ceb1, 0x1a82a025, 0x7d3980ec, + 0x18f8b83c, 0x7d8a5f3f, 0x176dd9de, 0x7dd6668e, + 0x15e21444, 0x7e1d93e9, 0x145576b1, 0x7e5fe493, + 0x12c8106e, 0x7e9d55fc, 0x1139f0ce, 0x7ed5e5c6, + 0xfab272b, 0x7f0991c3, 0xe1bc2e3, 0x7f3857f5, + 0xc8bd35e, 0x7f62368f, 0xafb6805, 0x7f872bf2, + 0x96a9049, 0x7fa736b4, 0x7d95b9e, 0x7fc25596, + 0x647d97c, 0x7fd8878d, 0x4b6195d, 0x7fe9cbbf, + 0x3242abe, 0x7ff62182, 0x1921d1f, 0x7ffd885a, + 0x0, 0x7fffffff, 0xfe6de2e1, 0x7ffd885a, + 0xfcdbd542, 0x7ff62182, 0xfb49e6a3, 0x7fe9cbbf, + 0xf9b82684, 0x7fd8878d, 0xf826a462, 0x7fc25596, + 0xf6956fb7, 0x7fa736b4, 0xf50497fb, 0x7f872bf2, + 0xf3742ca2, 0x7f62368f, 0xf1e43d1d, 0x7f3857f5, + 0xf054d8d5, 0x7f0991c3, 0xeec60f32, 0x7ed5e5c6, + 0xed37ef92, 0x7e9d55fc, 0xebaa894f, 0x7e5fe493, + 0xea1debbc, 0x7e1d93e9, 0xe8922622, 0x7dd6668e, + 0xe70747c4, 0x7d8a5f3f, 0xe57d5fdb, 0x7d3980ec, + 0xe3f47d96, 0x7ce3ceb1, 0xe26cb01b, 0x7c894bdd, + 0xe0e60685, 0x7c29fbee, 0xdf608fe4, 0x7bc5e28f, + 0xdddc5b3b, 0x7b5d039d, 0xdc597782, 0x7aef6323, + 0xdad7f3a3, 0x7a7d055b, 0xd957de7b, 0x7a05eead, + 0xd7d946d8, 0x798a23b1, 0xd65c3b7c, 0x7909a92c, + 0xd4e0cb15, 0x78848413, 0xd3670446, 0x77fab988, + 0xd1eef59f, 0x776c4edb, 0xd078ad9e, 0x76d94988, + 0xcf043ab3, 0x7641af3c, 0xcd91ab39, 0x75a585cf, + 0xcc210d79, 0x7504d345, 0xcab26faa, 0x745f9dd0, + 0xc945dfed, 0x73b5ebd0, 0xc7db6c50, 0x7307c3cf, + 0xc67322ce, 0x72552c84, 0xc50d1149, 0x719e2cd2, + 0xc3a94590, 0x70e2cbc6, 0xc247cd5b, 0x70231099, + 0xc0e8b649, 0x6f5f02b1, 0xbf8c0de3, 0x6e96a99c, + 0xbe31e19c, 0x6dca0d14, 0xbcda3ecb, 0x6cf934fb, + 0xbb8532b0, 0x6c242960, 0xba32ca71, 0x6b4af278, + 0xb8e3131a, 0x6a6d98a4, 0xb796199c, 0x698c246c, + 0xb64beacd, 0x68a69e81, 0xb5049369, 0x67bd0fbc, + 0xb3c0200d, 0x66cf811f, 0xb27e9d3c, 0x65ddfbd3, + 0xb140175c, 0x64e88926, 0xb0049ab3, 0x63ef328f, + 0xaecc336c, 0x62f201ac, 0xad96ed92, 0x61f1003e, + 0xac64d511, 0x60ec382f, 0xab35f5b6, 0x5fe3b38d, + 0xaa0a5b2e, 0x5ed77c89, 0xa8e21107, 0x5dc79d7c, + 0xa7bd22ac, 0x5cb420df, 0xa69b9b69, 0x5b9d1153, + 0xa57d8667, 0x5a827999, 0xa462eead, 0x59646497, + 0xa34bdf21, 0x5842dd54, 0xa2386284, 0x571deef9, + 0xa1288377, 0x55f5a4d2, 0xa01c4c73, 0x54ca0a4a, + 0x9f13c7d1, 0x539b2aef, 0x9e0effc2, 0x5269126e, + 0x9d0dfe54, 0x5133cc94, 0x9c10cd71, 0x4ffb654d, + 0x9b1776da, 0x4ebfe8a4, 0x9a22042d, 0x4d8162c4, + 0x99307ee1, 0x4c3fdff3, 0x9842f044, 0x4afb6c97, + 0x9759617f, 0x49b41533, 0x9673db94, 0x4869e664, + 0x9592675c, 0x471cece6, 0x94b50d88, 0x45cd358f, + 0x93dbd6a0, 0x447acd50, 0x9306cb05, 0x4325c135, + 0x9235f2ec, 0x41ce1e64, 0x91695664, 0x4073f21d, + 0x90a0fd4f, 0x3f1749b7, 0x8fdcef67, 0x3db832a5, + 0x8f1d343a, 0x3c56ba70, 0x8e61d32e, 0x3af2eeb7, + 0x8daad37c, 0x398cdd32, 0x8cf83c31, 0x382493b0, + 0x8c4a1430, 0x36ba2013, 0x8ba06230, 0x354d9056, + 0x8afb2cbb, 0x33def287, 0x8a5a7a31, 0x326e54c7, + 0x89be50c4, 0x30fbc54d, 0x8926b678, 0x2f875262, + 0x8893b125, 0x2e110a61, 0x88054678, 0x2c98fbba, + 0x877b7bed, 0x2b1f34eb, 0x86f656d4, 0x29a3c484, + 0x8675dc4f, 0x2826b928, 0x85fa1153, 0x26a82185, + 0x8582faa5, 0x25280c5d, 0x85109cdd, 0x23a6887e, + 0x84a2fc63, 0x2223a4c5, 0x843a1d71, 0x209f701c, + 0x83d60412, 0x1f19f97b, 0x8376b423, 0x1d934fe5, + 0x831c314f, 0x1c0b826a, 0x82c67f14, 0x1a82a025, + 0x8275a0c1, 0x18f8b83c, 0x82299972, 0x176dd9de, + 0x81e26c17, 0x15e21444, 0x81a01b6d, 0x145576b1, + 0x8162aa04, 0x12c8106e, 0x812a1a3a, 0x1139f0ce, + 0x80f66e3d, 0xfab272b, 0x80c7a80b, 0xe1bc2e3, + 0x809dc971, 0xc8bd35e, 0x8078d40e, 0xafb6805, + 0x8058c94c, 0x96a9049, 0x803daa6a, 0x7d95b9e, + 0x80277873, 0x647d97c, 0x80163441, 0x4b6195d, + 0x8009de7e, 0x3242abe, 0x800277a6, 0x1921d1f, + 0x80000000, 0x0, 0x800277a6, 0xfe6de2e1, + 0x8009de7e, 0xfcdbd542, 0x80163441, 0xfb49e6a3, + 0x80277873, 0xf9b82684, 0x803daa6a, 0xf826a462, + 0x8058c94c, 0xf6956fb7, 0x8078d40e, 0xf50497fb, + 0x809dc971, 0xf3742ca2, 0x80c7a80b, 0xf1e43d1d, + 0x80f66e3d, 0xf054d8d5, 0x812a1a3a, 0xeec60f32, + 0x8162aa04, 0xed37ef92, 0x81a01b6d, 0xebaa894f, + 0x81e26c17, 0xea1debbc, 0x82299972, 0xe8922622, + 0x8275a0c1, 0xe70747c4, 0x82c67f14, 0xe57d5fdb, + 0x831c314f, 0xe3f47d96, 0x8376b423, 0xe26cb01b, + 0x83d60412, 0xe0e60685, 0x843a1d71, 0xdf608fe4, + 0x84a2fc63, 0xdddc5b3b, 0x85109cdd, 0xdc597782, + 0x8582faa5, 0xdad7f3a3, 0x85fa1153, 0xd957de7b, + 0x8675dc4f, 0xd7d946d8, 0x86f656d4, 0xd65c3b7c, + 0x877b7bed, 0xd4e0cb15, 0x88054678, 0xd3670446, + 0x8893b125, 0xd1eef59f, 0x8926b678, 0xd078ad9e, + 0x89be50c4, 0xcf043ab3, 0x8a5a7a31, 0xcd91ab39, + 0x8afb2cbb, 0xcc210d79, 0x8ba06230, 0xcab26faa, + 0x8c4a1430, 0xc945dfed, 0x8cf83c31, 0xc7db6c50, + 0x8daad37c, 0xc67322ce, 0x8e61d32e, 0xc50d1149, + 0x8f1d343a, 0xc3a94590, 0x8fdcef67, 0xc247cd5b, + 0x90a0fd4f, 0xc0e8b649, 0x91695664, 0xbf8c0de3, + 0x9235f2ec, 0xbe31e19c, 0x9306cb05, 0xbcda3ecb, + 0x93dbd6a0, 0xbb8532b0, 0x94b50d88, 0xba32ca71, + 0x9592675c, 0xb8e3131a, 0x9673db94, 0xb796199c, + 0x9759617f, 0xb64beacd, 0x9842f044, 0xb5049369, + 0x99307ee1, 0xb3c0200d, 0x9a22042d, 0xb27e9d3c, + 0x9b1776da, 0xb140175c, 0x9c10cd71, 0xb0049ab3, + 0x9d0dfe54, 0xaecc336c, 0x9e0effc2, 0xad96ed92, + 0x9f13c7d1, 0xac64d511, 0xa01c4c73, 0xab35f5b6, + 0xa1288377, 0xaa0a5b2e, 0xa2386284, 0xa8e21107, + 0xa34bdf21, 0xa7bd22ac, 0xa462eead, 0xa69b9b69, + 0xa57d8667, 0xa57d8667, 0xa69b9b69, 0xa462eead, + 0xa7bd22ac, 0xa34bdf21, 0xa8e21107, 0xa2386284, + 0xaa0a5b2e, 0xa1288377, 0xab35f5b6, 0xa01c4c73, + 0xac64d511, 0x9f13c7d1, 0xad96ed92, 0x9e0effc2, + 0xaecc336c, 0x9d0dfe54, 0xb0049ab3, 0x9c10cd71, + 0xb140175c, 0x9b1776da, 0xb27e9d3c, 0x9a22042d, + 0xb3c0200d, 0x99307ee1, 0xb5049369, 0x9842f044, + 0xb64beacd, 0x9759617f, 0xb796199c, 0x9673db94, + 0xb8e3131a, 0x9592675c, 0xba32ca71, 0x94b50d88, + 0xbb8532b0, 0x93dbd6a0, 0xbcda3ecb, 0x9306cb05, + 0xbe31e19c, 0x9235f2ec, 0xbf8c0de3, 0x91695664, + 0xc0e8b649, 0x90a0fd4f, 0xc247cd5b, 0x8fdcef67, + 0xc3a94590, 0x8f1d343a, 0xc50d1149, 0x8e61d32e, + 0xc67322ce, 0x8daad37c, 0xc7db6c50, 0x8cf83c31, + 0xc945dfed, 0x8c4a1430, 0xcab26faa, 0x8ba06230, + 0xcc210d79, 0x8afb2cbb, 0xcd91ab39, 0x8a5a7a31, + 0xcf043ab3, 0x89be50c4, 0xd078ad9e, 0x8926b678, + 0xd1eef59f, 0x8893b125, 0xd3670446, 0x88054678, + 0xd4e0cb15, 0x877b7bed, 0xd65c3b7c, 0x86f656d4, + 0xd7d946d8, 0x8675dc4f, 0xd957de7b, 0x85fa1153, + 0xdad7f3a3, 0x8582faa5, 0xdc597782, 0x85109cdd, + 0xdddc5b3b, 0x84a2fc63, 0xdf608fe4, 0x843a1d71, + 0xe0e60685, 0x83d60412, 0xe26cb01b, 0x8376b423, + 0xe3f47d96, 0x831c314f, 0xe57d5fdb, 0x82c67f14, + 0xe70747c4, 0x8275a0c1, 0xe8922622, 0x82299972, + 0xea1debbc, 0x81e26c17, 0xebaa894f, 0x81a01b6d, + 0xed37ef92, 0x8162aa04, 0xeec60f32, 0x812a1a3a, + 0xf054d8d5, 0x80f66e3d, 0xf1e43d1d, 0x80c7a80b, + 0xf3742ca2, 0x809dc971, 0xf50497fb, 0x8078d40e, + 0xf6956fb7, 0x8058c94c, 0xf826a462, 0x803daa6a, + 0xf9b82684, 0x80277873, 0xfb49e6a3, 0x80163441, + 0xfcdbd542, 0x8009de7e, 0xfe6de2e1, 0x800277a6, + 0x0, 0x80000000, 0x1921d1f, 0x800277a6, + 0x3242abe, 0x8009de7e, 0x4b6195d, 0x80163441, + 0x647d97c, 0x80277873, 0x7d95b9e, 0x803daa6a, + 0x96a9049, 0x8058c94c, 0xafb6805, 0x8078d40e, + 0xc8bd35e, 0x809dc971, 0xe1bc2e3, 0x80c7a80b, + 0xfab272b, 0x80f66e3d, 0x1139f0ce, 0x812a1a3a, + 0x12c8106e, 0x8162aa04, 0x145576b1, 0x81a01b6d, + 0x15e21444, 0x81e26c17, 0x176dd9de, 0x82299972, + 0x18f8b83c, 0x8275a0c1, 0x1a82a025, 0x82c67f14, + 0x1c0b826a, 0x831c314f, 0x1d934fe5, 0x8376b423, + 0x1f19f97b, 0x83d60412, 0x209f701c, 0x843a1d71, + 0x2223a4c5, 0x84a2fc63, 0x23a6887e, 0x85109cdd, + 0x25280c5d, 0x8582faa5, 0x26a82185, 0x85fa1153, + 0x2826b928, 0x8675dc4f, 0x29a3c484, 0x86f656d4, + 0x2b1f34eb, 0x877b7bed, 0x2c98fbba, 0x88054678, + 0x2e110a61, 0x8893b125, 0x2f875262, 0x8926b678, + 0x30fbc54d, 0x89be50c4, 0x326e54c7, 0x8a5a7a31, + 0x33def287, 0x8afb2cbb, 0x354d9056, 0x8ba06230, + 0x36ba2013, 0x8c4a1430, 0x382493b0, 0x8cf83c31, + 0x398cdd32, 0x8daad37c, 0x3af2eeb7, 0x8e61d32e, + 0x3c56ba70, 0x8f1d343a, 0x3db832a5, 0x8fdcef67, + 0x3f1749b7, 0x90a0fd4f, 0x4073f21d, 0x91695664, + 0x41ce1e64, 0x9235f2ec, 0x4325c135, 0x9306cb05, + 0x447acd50, 0x93dbd6a0, 0x45cd358f, 0x94b50d88, + 0x471cece6, 0x9592675c, 0x4869e664, 0x9673db94, + 0x49b41533, 0x9759617f, 0x4afb6c97, 0x9842f044, + 0x4c3fdff3, 0x99307ee1, 0x4d8162c4, 0x9a22042d, + 0x4ebfe8a4, 0x9b1776da, 0x4ffb654d, 0x9c10cd71, + 0x5133cc94, 0x9d0dfe54, 0x5269126e, 0x9e0effc2, + 0x539b2aef, 0x9f13c7d1, 0x54ca0a4a, 0xa01c4c73, + 0x55f5a4d2, 0xa1288377, 0x571deef9, 0xa2386284, + 0x5842dd54, 0xa34bdf21, 0x59646497, 0xa462eead, + 0x5a827999, 0xa57d8667, 0x5b9d1153, 0xa69b9b69, + 0x5cb420df, 0xa7bd22ac, 0x5dc79d7c, 0xa8e21107, + 0x5ed77c89, 0xaa0a5b2e, 0x5fe3b38d, 0xab35f5b6, + 0x60ec382f, 0xac64d511, 0x61f1003e, 0xad96ed92, + 0x62f201ac, 0xaecc336c, 0x63ef328f, 0xb0049ab3, + 0x64e88926, 0xb140175c, 0x65ddfbd3, 0xb27e9d3c, + 0x66cf811f, 0xb3c0200d, 0x67bd0fbc, 0xb5049369, + 0x68a69e81, 0xb64beacd, 0x698c246c, 0xb796199c, + 0x6a6d98a4, 0xb8e3131a, 0x6b4af278, 0xba32ca71, + 0x6c242960, 0xbb8532b0, 0x6cf934fb, 0xbcda3ecb, + 0x6dca0d14, 0xbe31e19c, 0x6e96a99c, 0xbf8c0de3, + 0x6f5f02b1, 0xc0e8b649, 0x70231099, 0xc247cd5b, + 0x70e2cbc6, 0xc3a94590, 0x719e2cd2, 0xc50d1149, + 0x72552c84, 0xc67322ce, 0x7307c3cf, 0xc7db6c50, + 0x73b5ebd0, 0xc945dfed, 0x745f9dd0, 0xcab26faa, + 0x7504d345, 0xcc210d79, 0x75a585cf, 0xcd91ab39, + 0x7641af3c, 0xcf043ab3, 0x76d94988, 0xd078ad9e, + 0x776c4edb, 0xd1eef59f, 0x77fab988, 0xd3670446, + 0x78848413, 0xd4e0cb15, 0x7909a92c, 0xd65c3b7c, + 0x798a23b1, 0xd7d946d8, 0x7a05eead, 0xd957de7b, + 0x7a7d055b, 0xdad7f3a3, 0x7aef6323, 0xdc597782, + 0x7b5d039d, 0xdddc5b3b, 0x7bc5e28f, 0xdf608fe4, + 0x7c29fbee, 0xe0e60685, 0x7c894bdd, 0xe26cb01b, + 0x7ce3ceb1, 0xe3f47d96, 0x7d3980ec, 0xe57d5fdb, + 0x7d8a5f3f, 0xe70747c4, 0x7dd6668e, 0xe8922622, + 0x7e1d93e9, 0xea1debbc, 0x7e5fe493, 0xebaa894f, + 0x7e9d55fc, 0xed37ef92, 0x7ed5e5c6, 0xeec60f32, + 0x7f0991c3, 0xf054d8d5, 0x7f3857f5, 0xf1e43d1d, + 0x7f62368f, 0xf3742ca2, 0x7f872bf2, 0xf50497fb, + 0x7fa736b4, 0xf6956fb7, 0x7fc25596, 0xf826a462, + 0x7fd8878d, 0xf9b82684, 0x7fe9cbbf, 0xfb49e6a3, + 0x7ff62182, 0xfcdbd542, 0x7ffd885a, 0xfe6de2e1,}; diff -rNu old/imdct.h new/imdct.h --- old/imdct.h 1970-01-01 01:00:00.000000000 +0100 +++ new/imdct.h 2003-11-27 11:18:07.000000000 +0100 @@ -0,0 +1,24 @@ +/***************************************************************************** + * + * 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. + * + * + * Copyright (C) 2003 Johannes Sandvall, Erik Montnemery + ****************************************************************************/ +#ifndef _IMDCT_H +#define _IMDCT_H + +#include "jmisc.h" + +void imdct(int point_n2, LDATA *fftdata); +void imdct_sort_pcmout(int n0, int n1, int lW, int W, LDATA *fftdata, + LDATA *right,LOOKUP_T *w0, LOOKUP_T *w1, + ogg_int16_t *out,int step, int start, int end); +void imdct_bitreverse(int point_n2, LDATA *fftdata); +void imdct_shift_right(int W, LDATA *fftdata, LDATA *right); + +#endif /* _IMDCT_H */ diff -rNu old/jmisc.h new/jmisc.h --- old/jmisc.h 1970-01-01 01:00:00.000000000 +0100 +++ new/jmisc.h 2003-11-27 11:17:10.000000000 +0100 @@ -0,0 +1,48 @@ +#ifndef _JMISC_H +#define _JMISC_H + +#include "os_types.h" + +#define LLDATA ogg_int64_t +#define CLEN 512 + +#define LDATA ogg_int32_t +#define CDATA ogg_int32_t +#ifndef __TMS320C55X__ +#include "imdct_const.h" +#endif +#include "imdct_const1.h" + +#if BYTE_ORDER==LITTLE_ENDIAN +union magic32 { + struct { + ogg_int16_t lo; + ogg_int16_t hi; + } halves; + ogg_int32_t whole; +}; +#endif + +#if BYTE_ORDER==BIG_ENDIAN +union magic32 { + struct { + ogg_int16_t hi; + ogg_int16_t lo; + } halves; + ogg_int32_t whole; +}; +#endif + +static inline LDATA JMULT(LDATA x, LDATA y) +{ + union magic32 magic32; + ogg_int32_t res; + magic32.whole=x; + res = ((long)(magic32.halves.lo&0xffff)*(y>>16))>>16; + return (res +((long)magic32.halves.hi*(y>>16))) << 1; +} + +#endif /* JMISC_H */ + + + diff -rNu old/mapping0.c new/mapping0.c --- old/mapping0.c 2003-11-27 11:15:20.000000000 +0100 +++ new/mapping0.c 2003-11-27 11:17:10.000000000 +0100 @@ -21,10 +21,12 @@ #include #include "ogg.h" #include "ivorbiscodec.h" +#include "imdct.h" #include "mdct.h" #include "codec_internal.h" #include "codebook.h" #include "misc.h" +#define MDCT_FFT void mapping_clear_info(vorbis_info_mapping *info){ if(info){ @@ -230,7 +232,11 @@ /* transform the PCM data; takes PCM vector, vb; modifies PCM vector */ /* only MDCT right now.... */ for(i=0;ichannels;i++) - mdct_backward(n,vd->work[i]); + #ifdef MDCT_FFT + imdct(n, vd->work[i]); + #else + mdct_backward(n,vd->work[i]); + #endif /* MDCT_FFT */ //for(j=0;jchannels;j++) //_analysis_output("imdct",seq+j,vb->pcm[j],-24,n,0,0); diff -rNu old/misc.c new/misc.c --- old/misc.c 2003-11-27 11:15:20.000000000 +0100 +++ new/misc.c 2003-11-27 11:17:10.000000000 +0100 @@ -14,7 +14,7 @@ #include #include #include -#include "vorbis/codec.h" +//#include "vorbis/codec.h" #define MISC_C #include "misc.h" #include diff -rNu old/postrot.s55 new/postrot.s55 --- old/postrot.s55 1970-01-01 01:00:00.000000000 +0100 +++ new/postrot.s55 2003-11-27 11:17:10.000000000 +0100 @@ -0,0 +1,87 @@ +;***************************************************************************** +; Version 1.0 +;***************************************************************************** +; Function: postrot +; Processor: C55xx +; Description: Post-FFT rotation +; +; Usage: postrot(LDATA *fftdata, +; DATA *lookup_table +; ushort length2) +; +; Ogg/Vorbis +; 2003, Johannes Sandvall, Erik Montnemery +;***************************************************************************** + + .mmregs + + .asg ar0, ur_r + .asg ar1, w_r + .asg ar2, ur_i + .asg t0, length2 + +;***************************************************************************** + .ARMS_off ; enable assembler for ARMS=0 + .CPL_on ; enable assembler for CPL=1 + .mmregs ; enable mem mapped register names + + .def _postrot + .text + +_postrot + + PSH mmap(ST0_55) + PSH mmap(ST1_55) + PSH mmap(ST2_55) + PSH mmap(ST3_55) + + ; Status registers + AND #01FFh,mmap(ST0_55) ; clear all ACOVx,TC1, TC2, C + OR #4140h,mmap(ST1_55) ; set CPL, SXMD, FRCT + AND #0F9DFh,mmap(ST1_55) ; clear M40, SATD, 54CM + AND #07A00h,mmap(ST2_55) ; clear ARMS, RDM, CDPLC, AR[0-7]LC + AND #0FFDDh,mmap(ST3_55) ; clear SATA, SMUL + + MOV ur_r, ur_i ; ur_i = fftdata + 1 + ADD #3, ur_i + ADD #1, ur_r + MOV XAR1, XCDP ; xcdp = w_r + + MOV T0, T1 ; T0 = length2 + SFTS T1, #-1 ; T1 = length4 + SUB #1, T1 ; + MOV T1, BRC0 + +_start: + rptblocal eloop-1 + + mpy uns(*ur_r-), *cdp, ac0 ; ac0 = ur_rl * wr_rh (1,0) +:: mpy uns(*ur_i-), *cdp, ac1 ; ac1 = ur_il * wr_rh (1,0) + + mac *ur_r+, *cdp+, ac0>>#16 ; ac0 += ur_rh * wr_rh (0,0) +:: mac *ur_i+, *cdp+, ac1>>#16 ; ac1 += ui_rh * wr_rh (0,0) + + mpy uns(*ur_i-), *cdp, ac2 ; ac2 = ur_il * wr_ih (1,0) +:: mpy uns(*ur_r-), *cdp, ac3 ; ac3 = ur_rl * wr_ih (1,0) + + mac *ur_i, *cdp+, ac2>>#16 ; ac2 += ur_ih * wr_ih (0,0) + incr +:: mac *ur_r, *cdp+, ac3>>#16 ; ac3 += ur_rh * wr_ih (0,0) + incr + + add ac2, ac0 + sub ac3, ac1 +|| mov ac0, dbl(*ur_r) ; store and increment + + mov ac1, dbl(*ur_i) ; store and decrement + mar *+ur_r(5) + mar *+ur_i(5) +eloop + +; Loop: 9 cycles + +_end: + POP mmap(ST3_55) + POP mmap(ST2_55) + POP mmap(ST1_55) + POP mmap(ST0_55) + RET + diff -rNu old/prerot.s55 new/prerot.s55 --- old/prerot.s55 1970-01-01 01:00:00.000000000 +0100 +++ new/prerot.s55 2003-11-27 11:17:10.000000000 +0100 @@ -0,0 +1,89 @@ +;***************************************************************************** +; Version 1.0 +;***************************************************************************** +; Function: prerot +; Processor: C55xx +; Description: Pre-FFT rotation +; +; Usage: prerot(LDATA *fftdata, +; DATA *lookup_table +; ushort length2) +; +; Ogg/Vorbis +; 2003, Johannes Sandvall, Erik Montnemery +;***************************************************************************** + + .mmregs + + .asg ar0, ur_r + .asg ar1, w_r + .asg ar2, ur_i + .asg t0, length2 + +;***************************************************************************** + .ARMS_off ; enable assembler for ARMS=0 + .CPL_on ; enable assembler for CPL=1 + .mmregs ; enable mem mapped register names + + .def _prerot + .text + +_prerot + + PSH mmap(ST0_55) + PSH mmap(ST1_55) + PSH mmap(ST2_55) + PSH mmap(ST3_55) + + ; Status registers + AND #01FFh,mmap(ST0_55) ; clear all ACOVx,TC1, TC2, C + OR #4140h,mmap(ST1_55) ; set CPL, SXMD, FRCT + AND #0F9DFh,mmap(ST1_55) ; clear M40, SATD, 54CM + AND #07A00h,mmap(ST2_55) ; clear ARMS, RDM, CDPLC, AR[0-7]LC + AND #0FFDDh,mmap(ST3_55) ; clear SATA, SMUL + + MOV ur_r, ur_i ; ur_i = fftdata + length2 - 1 + ADD T0, ur_i + ADD T0, ur_i + SUB #1, ur_i + ADD #1,ur_r + MOV XAR1, XCDP ; xcdp = w_r + + MOV T0, T1 ; T0 = length2 + SFTS T1, #-1 ; T1 = length4 + SUB #1, T1 ; + MOV T1, BRC0 + +_start: + rptblocal eloop-1 + + mpy uns(*ur_r-), *cdp, ac0 ; ac0 = ur_rl * wr_rh (1,0) +:: mpy uns(*ur_i-), *cdp, ac1 ; ac1 = ur_il * wr_rh (1,0) + + mac *ur_r+, *cdp+, ac0>>#16 ; ac0 += ur_rh * wr_rh (0,0) +:: mac *ur_i+, *cdp+, ac1>>#16 ; ac1 += ui_rh * wr_rh (0,0) + + mpy uns(*ur_i-), *cdp, ac2 ; ac2 = ur_il * wr_ih (1,0) +:: mpy uns(*ur_r-), *cdp, ac3 ; ac3 = ur_rl * wr_ih (1,0) + + mac *ur_i, *cdp+, ac2>>#16 ; ac2 += ur_ih * wr_ih (0,0) + incr +:: mac *ur_r, *cdp+, ac3>>#16 ; ac3 += ur_rh * wr_ih (0,0) + incr + + add ac2, ac0 + sub ac3, ac1 +|| mov ac0, dbl(*ur_r) ; store and increment + + mov ac1, dbl(*ur_i) ; store and decrement + mar *+ur_r(5) + mar *+ur_i(-3) +eloop + +; Loop: 9 cycles + +_end: + POP mmap(ST3_55) + POP mmap(ST2_55) + POP mmap(ST1_55) + POP mmap(ST0_55) + RET + diff -rNu old/sortpcmout.s55 new/sortpcmout.s55 --- old/sortpcmout.s55 1970-01-01 01:00:00.000000000 +0100 +++ new/sortpcmout.s55 2003-11-27 11:17:10.000000000 +0100 @@ -0,0 +1,226 @@ +;***************************************************************************** +; Version 1.0 +;***************************************************************************** +; Function: sort_prelap +; Processor: C55xx +; Description: PCM sort and output + windowing, prelap +; +; Usage: sort_prelap(LDATA *right, DATA *out, int loop_count, int step) +; +; +; Ogg/Vorbis +; 2003, Johannes Sandvall, Erik Montnemery +;***************************************************************************** + .ARMS_off ; enable assembler for ARMS=0 + .CPL_on ; enable assembler for CPL=1 + .mmregs + + .asg ar0, right + .asg ar1, out + .asg t0, loop_count + .asg t1, step + .def _sort_prelap + .text + + +;***************************************************************************** + +_sort_prelap + + PSH mmap(ST0_55) + PSH mmap(ST1_55) + PSH mmap(ST2_55) + PSH mmap(ST3_55) + +; Status registers + AND #01FFh,mmap(ST0_55) ; clear all ACOVx,TC1, TC2, C + OR #4140h,mmap(ST1_55) ; set CPL, SXMD, FRCT + AND #0F9DFh,mmap(ST1_55) ; clear M40, SATD, 54CM + AND #07A00h,mmap(ST2_55) ; clear ARMS, RDM, CDPLC, AR[0-7]LC + AND #0FFDDh,mmap(ST3_55) ; clear SATA, SMUL + + BCC pre_loop, t0 == #0 + + sub #1, t0 ; loop loop_count times + mov t0, brc0 + rptblocal pre_loop-1 + + mov dbl(*right+), ac0 + sfts ac0, #7 + satr ac0 ; saturated and round + mov hi(ac0), *out ; PCM-sample + add step, out +pre_loop + + POP mmap(ST3_55) + POP mmap(ST2_55) + POP mmap(ST1_55) + POP mmap(ST0_55) + RET + +;***************************************************************************** +; Version 1.0 +;***************************************************************************** +; Function: sort_crosslap1 +; Processor: C55xx +; Description: PCM sort and output + windowing, prelap +; +; Usage: sort_crosslap1(LDATA *fftdata1, LDATA *fftdata2, +; LDATA *right, LDATA *wl, LDATA *wr, +; LDATA *out, int loop_count, int step) +; +; Ogg/Vorbis +; 2003, Johannes Sandvall, Erik Montnemery +;***************************************************************************** + .mmregs + + .asg ar0, l0 + .asg ar1, l1 + .asg ar2, right + .asg ar3, wl + .asg ar4, wr + .asg ar5, out ; passed on stack + .asg t0, loop_coun + .asg t2, step + + .def _sort_crosslap1 + + +;***************************************************************************** + +_sort_crosslap1 + + PSH mmap(ST0_55) + PSH mmap(ST1_55) + PSH mmap(ST2_55) + PSH mmap(ST3_55) + PSH T2 + PSHBOTH XAR5 + +; Status registers + AND #01FFh,mmap(ST0_55) ; clear all ACOVx,TC1, TC2, C + OR #4140h,mmap(ST1_55) ; set CPL, SXMD, FRCT + AND #0F9DFh,mmap(ST1_55) ; clear M40, SATD, 54CM + AND #07A00h,mmap(ST2_55) ; clear ARMS, RDM, CDPLC, AR[0-7]LC + AND #0FFDDh,mmap(ST3_55) ; clear SATA, SMUL + + mov dbl(*sp(#7)), xar5 ; stack parameter + mov *sp(#9), step + + bcc cross_loop1, t0==#0 + sfts t0, #-1 ; loop loop_count/2 times + + sub #1, t0 ; loop loop_count times + mov t0, brc0 + + mov #1, t0 ; lowpart of 32-bit + + sub #1, wr ; adjust window for initial step + mov xar3, xcdp + + rptb cross_loop1-1 + + mpym uns(*l0(t0)), *wl, ac0 + macm *l0, *wl+, ac0>>#16 + mpym uns(*right(t0)), *wr, ac1 + macm *(right+t1), *wr-, ac1>>#16 + add ac1, ac0 + sfts ac0, #7 + satr ac0 ; saturate and round + mov hi(ac0), *out ; PCM-sample + add step, out + add #4, l0 + + mpym uns(*l1(t0)), *wl, ac0 + macm *l1, *wl+, ac0>>#16 + neg ac0 ; ac0=-*l1*wl + mpym uns(*right(t0)), *wr, ac1 + macm *(right+t1), *wr-, ac1>>#16 + add ac1, ac0 + sfts ac0, #7 + satr ac0 ; saturate and round + mov hi(ac0), *out ; PCM-sample + add step, out + add #-4, l1 + +cross_loop1 + + + POPBOTH XAR5 + POP T2 + POP mmap(ST3_55) + POP mmap(ST2_55) + POP mmap(ST1_55) + POP mmap(ST0_55) + RET + +;***************************************************************************** +; Version 1.0 +;***************************************************************************** +; Function: sort_postlap +; Processor: C55xx +; Description: PCM sort and output + windowing, prelap +; +; Usage: sort_postlap(LDATA *fftdata1, LDATA *fftdata2, DATA *out, +; int loop_count, int step) +; +; +; Ogg/Vorbis +; 2003, Johannes Sandvall, Erik Montnemery +;***************************************************************************** + + .mmregs + + .asg ar0, l0 + .asg ar1, l1 + .asg ar2, out + .asg t0, loop_count + .asg t1, step + .def _sort_postlap + + +;***************************************************************************** + +_sort_postlap + + PSH mmap(ST0_55) + PSH mmap(ST1_55) + PSH mmap(ST2_55) + PSH mmap(ST3_55) + +; Status registers + AND #01FFh,mmap(ST0_55) ; clear all ACOVx,TC1, TC2, C + OR #4140h,mmap(ST1_55) ; set CPL, SXMD, FRCT + AND #0F9DFh,mmap(ST1_55) ; clear M40, SATD, 54CM + AND #07A00h,mmap(ST2_55) ; clear ARMS, RDM, CDPLC, AR[0-7]LC + AND #0FFDDh,mmap(ST3_55) ; clear SATA, SMUL + + bcc post_loop, t0==#0 + sfts t0, #-1 ; loop loop_count/2 times + + sub #1, t0 ; loop loop_count times + mov t0, brc0 + rptblocal post_loop-1 + + mov dbl(*l0), ac0 + sfts ac0, #7 + satr ac0 ; saturate and round + mov hi(ac0), *out ; PCM-sample + add step, out ; next sample + + mov dbl(*l1), ac0 + neg ac0 + sfts ac0, #7 + satr ac0 ; saturate and round + mov hi(ac0), *out ; PCM-sample + add step, out ; next sample + add #4, l0 + sub #4, l1 + +post_loop + + POP mmap(ST3_55) + POP mmap(ST2_55) + POP mmap(ST1_55) + POP mmap(ST0_55) + RET