diff --git a/src/WolfDec/3rdParty/CharCode.cpp b/src/WolfDec/3rdParty/CharCode.cpp new file mode 100644 index 0000000..fde1d9a --- /dev/null +++ b/src/WolfDec/3rdParty/CharCode.cpp @@ -0,0 +1,6575 @@ +// ============================================================================ +// +// キャラクタコード関係のライブラリ +// +// Creator : 山田 巧 +// Creation Data : 09/17/2004 +// +// ============================================================================ + +// include -------------------------------------- + +#include "DataType.h" +#include "CharCode.h" +#include "FileLib.h" +#include +#include +#include +#include +#include + +#if defined(_WIN32) || defined(_WIN64) +#include +#endif + +// define --------------------------------------- + +// 書式文字列のサイズ指定プレフィックス +#define PRINTF_SIZE_PREFIX_h (0) +#define PRINTF_SIZE_PREFIX_l (1) +#define PRINTF_SIZE_PREFIX_ll (2) +#define PRINTF_SIZE_PREFIX_w (3) +#define PRINTF_SIZE_PREFIX_I (4) +#define PRINTF_SIZE_PREFIX_I32 (5) +#define PRINTF_SIZE_PREFIX_I64 (6) + +// 書式文字列の型指定 +#define PRINTF_TYPE_c (0) +#define PRINTF_TYPE_C (1) +#define PRINTF_TYPE_d (2) +#define PRINTF_TYPE_i (3) +#define PRINTF_TYPE_o (4) +#define PRINTF_TYPE_u (5) +#define PRINTF_TYPE_x (6) +#define PRINTF_TYPE_X (7) +#define PRINTF_TYPE_e (8) +#define PRINTF_TYPE_E (9) +#define PRINTF_TYPE_f (10) +#define PRINTF_TYPE_g (11) +#define PRINTF_TYPE_G (12) +#define PRINTF_TYPE_a (13) +#define PRINTF_TYPE_A (14) +#define PRINTF_TYPE_n (15) +#define PRINTF_TYPE_p (16) +#define PRINTF_TYPE_s (17) +#define PRINTF_TYPE_S (18) +#define PRINTF_TYPE_Z (19) +#define PRINTF_TYPE_NUM (20) + +#define MIN_COMPRESS (4) // 最低圧縮バイト数 +#define MAX_SEARCHLISTNUM (64) // 最大一致長を探す為のリストを辿る最大数 +#define MAX_SUBLISTNUM (65536) // 圧縮時間短縮のためのサブリストの最大数 +#define MAX_COPYSIZE (0x1fff + MIN_COMPRESS) // 参照アドレスからコピー出切る最大サイズ( 圧縮コードが表現できるコピーサイズの最大値 + 最低圧縮バイト数 ) +#define MAX_ADDRESSLISTNUM (1024 * 1024 * 1) // スライド辞書の最大サイズ +#define MAX_POSITION (1 << 24) // 参照可能な最大相対アドレス( 16MB ) + +// 初期化チェック +#define CHARCODETABLE_INITCHECK( CharCodeFormat ) \ + switch( (CharCodeFormat) )\ + {\ + case CHARCODEFORMAT_SHIFTJIS :\ + if( g_CharCodeSystem.InitializeCharCodeCP932InfoFlag == FALSE )\ + {\ + SetupCharCodeCP932TableInfo() ;\ + }\ + break ;\ +\ + case CHARCODEFORMAT_GB2312 :\ + if( g_CharCodeSystem.InitializeCharCodeCP936InfoFlag == FALSE )\ + {\ + SetupCharCodeCP936TableInfo() ;\ + }\ + break ;\ +\ + case CHARCODEFORMAT_UHC :\ + if( g_CharCodeSystem.InitializeCharCodeCP949InfoFlag == FALSE )\ + {\ + SetupCharCodeCP949TableInfo() ;\ + }\ + break ;\ +\ + case CHARCODEFORMAT_BIG5 :\ + if( g_CharCodeSystem.InitializeCharCodeCP950InfoFlag == FALSE )\ + {\ + SetupCharCodeCP950TableInfo() ;\ + }\ + break ;\ +\ + case CHARCODEFORMAT_WINDOWS_1252 :\ + if( g_CharCodeSystem.InitializeCharCodeCP1252InfoFlag == FALSE )\ + {\ + SetupCharCodeCP1252TableInfo() ;\ + }\ + break ;\ +\ + case CHARCODEFORMAT_ISO_IEC_8859_15 :\ + if( g_CharCodeSystem.InitializeCharCodeISO_IEC_8859_15InfoFlag == FALSE )\ + {\ + SetupCharCodeISO_IEC_8859_15TableInfo() ;\ + }\ + break ;\ + } + +// data type ------------------------------------ + +// UTF-16と各文字コードの対応表の情報 +struct CHARCODETABLEINFO +{ + u16 MultiByteToUTF16[ 0x10000 ] ; // 各文字コードからUTF-16に変換するためのテーブル + u16 UTF16ToMultiByte[ 0x10000 ] ; // UTF-16から各文字コードに変換するためのテーブル +} ; + +// 標準関数の互換関数で使用する情報 +struct CHARCODESYSTEM +{ + int InitializeFlag ; // 初期化処理を行ったかどうか( TRUE:行った FALSE:行っていない ) + + int InitializeCharCodeCP932InfoFlag ; // Shift-JISの文字コード情報の初期化処理を行ったかどうか( TRUE:行った FALSE:行っていない ) + CHARCODETABLEINFO CharCodeCP932Info ; // Shift-JISの文字コード情報 + + int InitializeCharCodeCP936InfoFlag ; // GB2312の文字コード情報の初期化処理を行ったかどうか( TRUE:行った FALSE:行っていない ) + CHARCODETABLEINFO CharCodeCP936Info ; // GB2312の文字コード情報 + + int InitializeCharCodeCP949InfoFlag ; // UHCの文字コード情報の初期化処理を行ったかどうか( TRUE:行った FALSE:行っていない ) + CHARCODETABLEINFO CharCodeCP949Info ; // UHCの文字コード情報 + + int InitializeCharCodeCP950InfoFlag ; // BIG5の文字コード情報の初期化処理を行ったかどうか( TRUE:行った FALSE:行っていない ) + CHARCODETABLEINFO CharCodeCP950Info ; // BIG5の文字コード情報 + + int InitializeCharCodeCP1252InfoFlag ; // 欧文(ラテン文字の文字コード)の文字コード情報の初期化処理を行ったかどうか( TRUE:行った FALSE:行っていない ) + CHARCODETABLEINFO CharCodeCP1252Info ; // 欧文(ラテン文字の文字コード)の文字コード情報 + + int InitializeCharCodeISO_IEC_8859_15InfoFlag ; // 欧文(ラテン文字の文字コード)の文字コード情報の初期化処理を行ったかどうか( TRUE:行った FALSE:行っていない ) + CHARCODETABLEINFO CharCodeISO_IEC_8859_15Info ; // 欧文(ラテン文字の文字コード)の文字コード情報 +} ; + +// data ----------------------------------------- + +static u8 NumberToCharTable[ 2 ][ 16 ] = +{ + { + '0', '1', '2', '3', '4', '5', '6', '7', + '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', + }, + + { + '0', '1', '2', '3', '4', '5', '6', '7', + '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', + } +} ; + +static u8 FloatErrorStr_QNAN[ 7 ][ 7 ] = +{ + { '1', 0, 0, 0, 0, 0, 0 }, + { '1', '.', 0, 0, 0, 0, 0 }, + { '1', '.', '$', 0, 0, 0, 0 }, + { '1', '.', '#', 'R', 0, 0, 0 }, + { '1', '.', '#', 'Q', 'O', 0, 0 }, + { '1', '.', '#', 'Q', 'N', 'B', 0 }, + { '1', '.', '#', 'Q', 'N', 'A', 'N' }, +} ; + +static u8 FloatErrorStr_INF[ 6 ][ 7 ] = +{ + { '1', 0, 0, 0, 0, 0, 0 }, + { '1', '.', 0, 0, 0, 0, 0 }, + { '1', '.', '$', 0, 0, 0, 0 }, + { '1', '.', '#', 'J', 0, 0, 0 }, + { '1', '.', '#', 'I', 'O', 0, 0 }, + { '1', '.', '#', 'I', 'N', 'F', 0 }, +} ; + +static u8 FloatErrorStr_IND[ 6 ][ 7 ] = +{ + { '1', 0, 0, 0, 0, 0, 0 }, + { '1', '.', 0, 0, 0, 0, 0 }, + { '1', '.', '$', 0, 0, 0, 0 }, + { '1', '.', '#', 'J', 0, 0, 0 }, + { '1', '.', '#', 'I', 'O', 0, 0 }, + { '1', '.', '#', 'I', 'N', 'D', 0 }, +} ; + +#if !( defined(_WIN32) || defined(_WIN64) ) + +extern u8 CP932ToUTF16Table[] ; +extern u8 CP936ToUTF16Table[] ; +extern u8 CP949ToUTF16Table[] ; +extern u8 CP950ToUTF16Table[] ; +extern u8 CP1252ToUTF16Table[] ; +extern u8 ISO_IEC_8859_15ToUTF16Table[] ; + +#endif + +CHARCODESYSTEM g_CharCodeSystem ; + +// function proto type -------------------------- + +#if !( defined(_WIN32) || defined(_WIN64) ) + +// UTF-16と各文字コードの対応表のセットアップを行う +static void SetupCharCodeTableInfo( CHARCODETABLEINFO *TableInfo, u8 *PressTable, int IsSingleCharType = FALSE ) ; + +#else + +static void SetupCharCodeCP932TableInfo( void ) ; // UTF-16とShift-JISの対応表のセットアップを行う +static void SetupCharCodeCP936TableInfo( void ) ; // UTF-16とGB2312の対応表のセットアップを行う +static void SetupCharCodeCP949TableInfo( void ) ; // UTF-16とUHCの対応表のセットアップを行う +static void SetupCharCodeCP950TableInfo( void ) ; // UTF-16とBIG5の対応表のセットアップを行う +static void SetupCharCodeCP1252TableInfo( void ) ; // UTF-16と欧文(ラテン文字の文字コード)の対応表のセットアップを行う +static void SetupCharCodeISO_IEC_8859_15TableInfo( void ) ; // UTF-16と欧文(ラテン文字の文字コード)の対応表のセットアップを行う + +#endif + +// デコード( 戻り値:解凍後のサイズ -1 はエラー Dest に NULL を入れることも可能 ) +static int LzDecode( void *Src, void *Dest ) ; + +// function code -------------------------------- + +// デコード( 戻り値:解凍後のサイズ -1 はエラー Dest に NULL を入れることも可能 ) +int LzDecode( void *Src, void *Dest ) +{ + u32 srcsize, destsize, code, indexsize, keycode, conbo, index ; + u8 *srcp, *destp, *dp, *sp ; + + destp = (u8 *)Dest ; + srcp = (u8 *)Src ; + + // 解凍後のデータサイズを得る + destsize = *((u32 *)&srcp[0]) ; + + // 圧縮データのサイズを得る + srcsize = *((u32 *)&srcp[4]) - 9 ; + + // キーコード + keycode = srcp[8] ; + + // 出力先がない場合はサイズだけ返す + if( Dest == NULL ) + return destsize ; + + // 展開開始 + sp = srcp + 9 ; + dp = destp ; + while( srcsize ) + { + // キーコードか同かで処理を分岐 + if( sp[0] != keycode ) + { + // 非圧縮コードの場合はそのまま出力 + *dp = *sp ; + dp ++ ; + sp ++ ; + srcsize -- ; + continue ; + } + + // キーコードが連続していた場合はキーコード自体を出力 + if( sp[1] == keycode ) + { + *dp = (u8)keycode ; + dp ++ ; + sp += 2 ; + srcsize -= 2 ; + + continue ; + } + + // 第一バイトを得る + code = sp[1] ; + + // もしキーコードよりも大きな値だった場合はキーコード + // とのバッティング防止の為に+1しているので-1する + if( code > keycode ) code -- ; + + sp += 2 ; + srcsize -= 2 ; + + // 連続長を取得する + conbo = code >> 3 ; + if( code & ( 0x1 << 2 ) ) + { + conbo |= *sp << 5 ; + sp ++ ; + srcsize -- ; + } + conbo += MIN_COMPRESS ; // 保存時に減算した最小圧縮バイト数を足す + + // 参照相対アドレスを取得する + indexsize = code & 0x3 ; + switch( indexsize ) + { + case 0 : + index = *sp ; + sp ++ ; + srcsize -- ; + break ; + + case 1 : + index = *((u16 *)sp) ; + sp += 2 ; + srcsize -= 2 ; + break ; + + case 2 : + index = *((u16 *)sp) | ( sp[2] << 16 ) ; + sp += 3 ; + srcsize -= 3 ; + break ; + } + index ++ ; // 保存時に-1しているので+1する + + // 展開 + if( index < conbo ) + { + u32 num ; + + num = index ; + while( conbo > num ) + { + memcpy( dp, dp - num, num ) ; + dp += num ; + conbo -= num ; + num += num ; + } + if( conbo != 0 ) + { + memcpy( dp, dp - num, conbo ) ; + dp += conbo ; + } + } + else + { + memcpy( dp, dp - index, conbo ) ; + dp += conbo ; + } + } + + // 解凍後のサイズを返す + return (int)destsize ; +} + +#if !( defined(_WIN32) || defined(_WIN64) ) + +// UTF-16と各文字コードの対応表のセットアップを行う +static void SetupCharCodeTableInfo( CHARCODETABLEINFO *TableInfo, u8 *PressTable, int IsSingleCharType ) +{ + u32 i ; + + Char128ToBin( PressTable, PressTable ) ; + LzDecode( PressTable, TableInfo->MultiByteToUTF16 ) ; + + if( IsSingleCharType ) + { + for( i = 0 ; i < 0x100 ; i ++ ) + { + TableInfo->UTF16ToMultiByte[ TableInfo->MultiByteToUTF16[ i ] ] = ( u16 )i ; + } + } + else + { + for( i = 0 ; i < 0x10000 ; i ++ ) + { + TableInfo->UTF16ToMultiByte[ TableInfo->MultiByteToUTF16[ i ] ] = ( u16 )i ; + } + } +} + +#else + +// UTF-16とShift-JISの対応表のセットアップを行う +static void SetupCharCodeCP932TableInfo( void ) +{ + wchar_t Dest[ 8 ] ; + char Src[ 8 ] ; + unsigned int i ; + unsigned int Code ; + CHARCODETABLEINFO *Info = &g_CharCodeSystem.CharCodeCP932Info ; + + if( g_CharCodeSystem.InitializeCharCodeCP932InfoFlag ) + { + return ; + } + + for( i = 0 ; i < 0x10000 ; i ++ ) + { + u32 result ; + + Code = i ; + if( i < 0x100 ) + { + Src[ 0 ] = ( char )i ; + Src[ 1 ] = 0 ; + } + else + { + Src[ 0 ] = ( char )( ( i & 0xff00 ) >> 8 ) ; + Src[ 1 ] = ( char )( i & 0xff ) ; + Src[ 2 ] = 0 ; + if( ( ( u8 )( ( ( ( u8 )Src[ 0 ] ) ^ 0x20) - ( u8 )0xa1 ) < 0x3c ) == false ) + { + continue ; + } + } + + result = MultiByteToWideChar( 932, MB_ERR_INVALID_CHARS, Src, -1, Dest, 8 ) ; + if( result != 0 ) + { + Info->MultiByteToUTF16[ i ] = ( WORD )Dest[ 0 ] ; + Info->UTF16ToMultiByte[ Dest[ 0 ] ] = ( WORD )i ; + } + } + + g_CharCodeSystem.InitializeCharCodeCP932InfoFlag = TRUE ; +} + +// UTF-16とGB2312の対応表のセットアップを行う +static void SetupCharCodeCP936TableInfo( void ) +{ + wchar_t Dest[ 8 ] ; + char Src[ 8 ] ; + unsigned int i ; + unsigned int Code ; + CHARCODETABLEINFO *Info = &g_CharCodeSystem.CharCodeCP936Info ; + + if( g_CharCodeSystem.InitializeCharCodeCP936InfoFlag ) + { + return ; + } + + for( i = 0 ; i < 0x10000 ; i ++ ) + { + u32 result ; + + Code = i ; + if( i < 0x100 ) + { + Src[ 0 ] = ( char )i ; + Src[ 1 ] = 0 ; + } + else + { + Src[ 0 ] = ( char )( ( i & 0xff00 ) >> 8 ) ; + Src[ 1 ] = ( char )( i & 0xff ) ; + Src[ 2 ] = 0 ; +// if( ( ( u8 )Src[ 0 ] & 80 ) == 0 ) +// { +// continue ; +// } + } + + result = MultiByteToWideChar( 936, MB_ERR_INVALID_CHARS, Src, -1, Dest, 8 ) ; + if( result != 0 ) + { + Info->MultiByteToUTF16[ i ] = ( WORD )Dest[ 0 ] ; + Info->UTF16ToMultiByte[ Dest[ 0 ] ] = ( WORD )i ; + } + } + + g_CharCodeSystem.InitializeCharCodeCP936InfoFlag = TRUE ; +} + +// UTF-16とUHCの対応表のセットアップを行う +static void SetupCharCodeCP949TableInfo( void ) +{ + wchar_t Dest[ 8 ] ; + char Src[ 8 ] ; + unsigned int i ; + unsigned int Code ; + CHARCODETABLEINFO *Info = &g_CharCodeSystem.CharCodeCP949Info ; + + if( g_CharCodeSystem.InitializeCharCodeCP949InfoFlag ) + { + return ; + } + + for( i = 0 ; i < 0x10000 ; i ++ ) + { + u32 result ; + + Code = i ; + if( i < 0x100 ) + { + Src[ 0 ] = ( char )i ; + Src[ 1 ] = 0 ; + } + else + { + Src[ 0 ] = ( char )( ( i & 0xff00 ) >> 8 ) ; + Src[ 1 ] = ( char )( i & 0xff ) ; + Src[ 2 ] = 0 ; +// if( ( ( u8 )Src[ 0 ] & 80 ) == 0 ) +// { +// continue ; +// } + } + + result = MultiByteToWideChar( 949, MB_ERR_INVALID_CHARS, Src, -1, Dest, 8 ) ; + if( result != 0 ) + { + Info->MultiByteToUTF16[ i ] = ( WORD )Dest[ 0 ] ; + Info->UTF16ToMultiByte[ Dest[ 0 ] ] = ( WORD )i ; + } + } + + g_CharCodeSystem.InitializeCharCodeCP949InfoFlag = TRUE ; +} + +// UTF-16とBIG5の対応表のセットアップを行う +static void SetupCharCodeCP950TableInfo( void ) +{ + wchar_t Dest[ 8 ] ; + char Src[ 8 ] ; + unsigned int i ; + unsigned int Code ; + CHARCODETABLEINFO *Info = &g_CharCodeSystem.CharCodeCP950Info ; + + if( g_CharCodeSystem.InitializeCharCodeCP950InfoFlag ) + { + return ; + } + + for( i = 0 ; i < 0x10000 ; i ++ ) + { + u32 result ; + + Code = i ; + if( i < 0x100 ) + { + Src[ 0 ] = ( char )i ; + Src[ 1 ] = 0 ; + } + else + { + Src[ 0 ] = ( char )( ( i & 0xff00 ) >> 8 ) ; + Src[ 1 ] = ( char )( i & 0xff ) ; + Src[ 2 ] = 0 ; +// if( ( ( u8 )Src[ 0 ] & 80 ) == 0 ) +// { +// continue ; +// } + } + + result = MultiByteToWideChar( 950, MB_ERR_INVALID_CHARS, Src, -1, Dest, 8 ) ; + if( result != 0 ) + { + Info->MultiByteToUTF16[ i ] = ( WORD )Dest[ 0 ] ; + Info->UTF16ToMultiByte[ Dest[ 0 ] ] = ( WORD )i ; + } + } + + g_CharCodeSystem.InitializeCharCodeCP950InfoFlag = TRUE ; +} + +// UTF-16と欧文(ラテン文字の文字コード)の対応表のセットアップを行う +static void SetupCharCodeCP1252TableInfo( void ) +{ + wchar_t Dest[ 8 ] ; + char Src[ 8 ] ; + unsigned int i ; + unsigned int Code ; + CHARCODETABLEINFO *Info = &g_CharCodeSystem.CharCodeCP1252Info ; + + if( g_CharCodeSystem.InitializeCharCodeCP1252InfoFlag ) + { + return ; + } + + for( i = 0 ; i < 0x100 ; i ++ ) + { + u32 result ; + + Code = i ; + Src[ 0 ] = ( char )i ; + Src[ 1 ] = 0 ; + + result = MultiByteToWideChar( 1252, MB_ERR_INVALID_CHARS, Src, -1, Dest, 8 ) ; + if( result != 0 ) + { + Info->MultiByteToUTF16[ i ] = ( WORD )Dest[ 0 ] ; + Info->UTF16ToMultiByte[ Dest[ 0 ] ] = ( WORD )i ; + } + } + + g_CharCodeSystem.InitializeCharCodeCP1252InfoFlag = TRUE ; +} + +// UTF-16と欧文(ラテン文字の文字コード)の対応表のセットアップを行う +static void SetupCharCodeISO_IEC_8859_15TableInfo( void ) +{ + wchar_t Dest[ 8 ] ; + char Src[ 8 ] ; + unsigned int i ; + unsigned int Code ; + CHARCODETABLEINFO *Info = &g_CharCodeSystem.CharCodeISO_IEC_8859_15Info ; + + if( g_CharCodeSystem.InitializeCharCodeISO_IEC_8859_15InfoFlag ) + { + return ; + } + + for( i = 0 ; i < 0x100 ; i ++ ) + { + u32 result ; + + Code = i ; + Src[ 0 ] = ( char )i ; + Src[ 1 ] = 0 ; + + result = MultiByteToWideChar( 1252, MB_ERR_INVALID_CHARS, Src, -1, Dest, 8 ) ; + if( result != 0 ) + { + Info->MultiByteToUTF16[ i ] = ( WORD )Dest[ 0 ] ; + Info->UTF16ToMultiByte[ Dest[ 0 ] ] = ( WORD )i ; + } + } + Info->MultiByteToUTF16[ 0xA4 ] = 0x20AC ; + Info->UTF16ToMultiByte[ 0x20AC ] = 0xA4 ; + + Info->MultiByteToUTF16[ 0xA6 ] = 0x0160 ; + Info->UTF16ToMultiByte[ 0x0160 ] = 0xA6 ; + + Info->MultiByteToUTF16[ 0xA8 ] = 0x0161 ; + Info->UTF16ToMultiByte[ 0x0161 ] = 0xA8 ; + + Info->MultiByteToUTF16[ 0xB4 ] = 0x017D ; + Info->UTF16ToMultiByte[ 0x017D ] = 0xB4 ; + + Info->MultiByteToUTF16[ 0xB8 ] = 0x017E ; + Info->UTF16ToMultiByte[ 0x017E ] = 0xB8 ; + + Info->MultiByteToUTF16[ 0xBC ] = 0x0152 ; + Info->UTF16ToMultiByte[ 0x0152 ] = 0xBC ; + + Info->MultiByteToUTF16[ 0xBD ] = 0x0153 ; + Info->UTF16ToMultiByte[ 0x0153 ] = 0xBD ; + + Info->MultiByteToUTF16[ 0xBE ] = 0x0178 ; + Info->UTF16ToMultiByte[ 0x0178 ] = 0xBE ; + + g_CharCodeSystem.InitializeCharCodeISO_IEC_8859_15InfoFlag = TRUE ; +} + +#endif + +// 文字コードライブラリの初期化 +extern int InitCharCode( void ) +{ + // 既に初期化済みの場合は何もせず終了 + if( g_CharCodeSystem.InitializeFlag ) + { + return 0 ; + } + +#if !( defined(_WIN32) || defined(_WIN64) ) + + // キャラクタコード対応表セットアップ + SetupCharCodeTableInfo( &g_CharCodeSystem.CharCodeCP932Info, CP932ToUTF16Table ) ; + SetupCharCodeTableInfo( &g_CharCodeSystem.CharCodeCP936Info, CP936ToUTF16Table ) ; + SetupCharCodeTableInfo( &g_CharCodeSystem.CharCodeCP949Info, CP949ToUTF16Table ) ; + SetupCharCodeTableInfo( &g_CharCodeSystem.CharCodeCP950Info, CP950ToUTF16Table ) ; + SetupCharCodeTableInfo( &g_CharCodeSystem.CharCodeCP1252Info, CP1252ToUTF16Table, TRUE ) ; + SetupCharCodeTableInfo( &g_CharCodeSystem.CharCodeISO_IEC_8859_15Info, ISO_IEC_8859_15ToUTF16Table, TRUE ) ; + +#endif + + // 初期化フラグを立てる + g_CharCodeSystem.InitializeFlag = TRUE ; + + // 正常終了 + return 0 ; +} + +// 指定のコードページの情報最少サイズを取得する( 戻り値:バイト数 ) +__inline int GetCharCodeFormatUnitSize_inline( int CharCodeFormat ) +{ + // 対応していないコードページの場合は何もせず終了 + switch( CharCodeFormat ) + { + case CHARCODEFORMAT_SHIFTJIS : + case CHARCODEFORMAT_GB2312 : + case CHARCODEFORMAT_WINDOWS_1252 : + case CHARCODEFORMAT_ISO_IEC_8859_15 : + case CHARCODEFORMAT_UHC : + case CHARCODEFORMAT_BIG5 : + case CHARCODEFORMAT_ASCII : + return 1 ; + + case CHARCODEFORMAT_UTF16LE : + case CHARCODEFORMAT_UTF16BE : + return 2 ; + + case CHARCODEFORMAT_UTF8 : + return 1 ; + + case CHARCODEFORMAT_UTF32LE : + case CHARCODEFORMAT_UTF32BE : + return 4 ; + + default : + return -1 ; + } +} + +// 指定のコードページの情報最少サイズを取得する( 戻り値:バイト数 ) +extern int GetCharCodeFormatUnitSize( int CharCodeFormat ) +{ + return GetCharCodeFormatUnitSize_inline( CharCodeFormat ) ; +} + +// 1文字のバイト数を取得する( 戻り値:1文字のバイト数 ) +__inline int GetCharBytes_inline( const char *CharCode, int CharCodeFormat ) +{ + switch( CharCodeFormat ) + { + case CHARCODEFORMAT_SHIFTJIS : + return CHECK_SHIFTJIS_2BYTE( ( ( u8 * )CharCode )[ 0 ] ) ? 2 : 1 ; + // return ( ( ( u8 * )CharCode )[ 0 ] >= 0x81 && ( ( u8 * )CharCode )[ 0 ] <= 0x9F ) || ( ( ( u8 * )CharCode )[ 0 ] >= 0xE0 && ( ( u8 * )CharCode )[ 0 ] <= 0xFC ) ; + break ; + + case CHARCODEFORMAT_ASCII : + case CHARCODEFORMAT_WINDOWS_1252 : + case CHARCODEFORMAT_ISO_IEC_8859_15 : + return 1 ; + + case CHARCODEFORMAT_GB2312 : + case CHARCODEFORMAT_UHC : + case CHARCODEFORMAT_BIG5 : + return ( ( ( ( u8 * )CharCode )[ 0 ] & 0x80 ) != 0 ) ? 2 : 1 ; + + case CHARCODEFORMAT_UTF16LE : + return ( ( ( ( u8 * )CharCode )[ 0 ] | ( ( ( u8 * )CharCode )[ 1 ] << 8 ) ) & 0xfc00 ) == 0xd800 ? 4 : 2 ; + + case CHARCODEFORMAT_UTF16BE : + return ( ( ( ( ( u8 * )CharCode )[ 0 ] << 8 ) | ( ( u8 * )CharCode )[ 1 ] ) & 0xfc00 ) == 0xd800 ? 4 : 2 ; + + case CHARCODEFORMAT_UTF8 : + if( ( ( ( u8 * )CharCode )[ 0 ] & 0x80 ) == 0x00 ) + { + return 1 ; + } + + if( ( ( ( u8 * )CharCode )[ 0 ] & 0xe0 ) == 0xc0 ) + { + return 2 ; + } + + if( ( ( ( u8 * )CharCode )[ 0 ] & 0xf0 ) == 0xe0 ) + { + return 3 ; + } + + if( ( ( ( u8 * )CharCode )[ 0 ] & 0xf8 ) == 0xf0 ) + { + return 4 ; + } + + if( ( ( ( u8 * )CharCode )[ 0 ] & 0xfc ) == 0xf8 ) + { + return 5 ; + } + + if( ( ( ( u8 * )CharCode )[ 0 ] & 0xfe ) == 0xfc ) + { + return 6 ; + } + break ; + + case CHARCODEFORMAT_UTF32LE : + case CHARCODEFORMAT_UTF32BE : + return 4 ; + } + + return -1 ; +} + +// 1文字のバイト数を取得する( 戻り値:1文字のバイト数 ) +extern int GetCharBytes( const char *CharCode, int CharCodeFormat ) +{ + return GetCharBytes_inline( CharCode, CharCodeFormat ) ; +} + +// 1文字の文字コードと文字のバイト数を取得する +__inline u32 GetCharCode_inline( const char *CharCode, int CharCodeFormat, int *CharBytes ) +{ + int UseSrcSize ; + u32 DestCode ; + + switch( GetCharCodeFormatUnitSize_inline( CharCodeFormat ) ) + { + case 1 : + if( ( ( u8 * )CharCode )[ 0 ] == 0 ) + { + if( CharBytes != NULL ) + { + *CharBytes = 1 ; + } + return 0 ; + } + break ; + + case 2 : + if( *( ( u16 * )CharCode ) == 0 ) + { + if( CharBytes != NULL ) + { + *CharBytes = 2 ; + } + return 0 ; + } + break ; + + case 4 : + if( *( ( u32 * )CharCode ) == 0 ) + { + if( CharBytes != NULL ) + { + *CharBytes = 4 ; + } + return 0 ; + } + break ; + } + + UseSrcSize = GetCharBytes_inline( CharCode, CharCodeFormat ) ; + + switch( CharCodeFormat ) + { + case CHARCODEFORMAT_SHIFTJIS : + case CHARCODEFORMAT_GB2312 : + case CHARCODEFORMAT_UHC : + case CHARCODEFORMAT_BIG5 : + if( UseSrcSize == 2 ) + { + DestCode = ( ( ( u8 * )CharCode )[ 0 ] << 8 ) | ( ( u8 * )CharCode )[ 1 ] ; + } + else + { + DestCode = ( ( u8 * )CharCode )[ 0 ] ; + } + break ; + + case CHARCODEFORMAT_ASCII : + case CHARCODEFORMAT_WINDOWS_1252 : + case CHARCODEFORMAT_ISO_IEC_8859_15 : + DestCode = ( ( u8 * )CharCode )[ 0 ] ; + break ; + + case CHARCODEFORMAT_UTF16LE : + case CHARCODEFORMAT_UTF16BE : + { + u32 SrcCode1 ; + u32 SrcCode2 ; + + if( CharCodeFormat == CHARCODEFORMAT_UTF16BE ) + { + SrcCode1 = ( ( ( u8 * )CharCode )[ 0 ] << 8 ) | ( ( u8 * )CharCode )[ 1 ] ; + } + else + { + SrcCode1 = ( ( u8 * )CharCode )[ 0 ] | ( ( ( u8 * )CharCode )[ 1 ] << 8 ) ; + } + + if( UseSrcSize == 4 ) + { + if( CharCodeFormat == CHARCODEFORMAT_UTF16BE ) + { + SrcCode2 = ( ( ( u8 * )CharCode )[ 2 ] << 8 ) | ( ( u8 * )CharCode )[ 3 ] ; + } + else + { + SrcCode2 = ( ( u8 * )CharCode )[ 2 ] | ( ( ( u8 * )CharCode )[ 3 ] << 8 ) ; + } + + DestCode = ( ( ( SrcCode1 & 0x3ff ) << 10 ) | ( SrcCode2 & 0x3ff ) ) + 0x10000 ; + } + else + { + DestCode = SrcCode1 ; + } + } + break ; + + case CHARCODEFORMAT_UTF8 : + switch( UseSrcSize ) + { + case 1 : + DestCode = ( ( u8 * )CharCode )[ 0 ] ; + break ; + + case 2 : + DestCode = ( ( ( ( u8 * )CharCode )[ 0 ] & 0x1f ) << 6 ) | ( ( ( u8 * )CharCode )[ 1 ] & 0x3f ) ; + break ; + + case 3 : + DestCode = ( ( ( ( u8 * )CharCode )[ 0 ] & 0x0f ) << 12 ) | ( ( ( ( u8 * )CharCode )[ 1 ] & 0x3f ) << 6 ) | ( ( ( u8 * )CharCode )[ 2 ] & 0x3f ) ; + break ; + + case 4 : + DestCode = ( ( ( ( u8 * )CharCode )[ 0 ] & 0x07 ) << 18 ) | ( ( ( ( u8 * )CharCode )[ 1 ] & 0x3f ) << 12 ) | ( ( ( ( u8 * )CharCode )[ 2 ] & 0x3f ) << 6 ) | ( ( ( u8 * )CharCode )[ 3 ] & 0x3f ) ; + break ; + + case 5 : + DestCode = ( ( ( ( u8 * )CharCode )[ 0 ] & 0x03 ) << 24 ) | ( ( ( ( u8 * )CharCode )[ 1 ] & 0x3f ) << 18 ) | ( ( ( ( u8 * )CharCode )[ 2 ] & 0x3f ) << 12 ) | ( ( ( ( u8 * )CharCode )[ 3 ] & 0x3f ) << 6 ) | ( ( ( u8 * )CharCode )[ 4 ] & 0x3f ) ; + break ; + + case 6 : + DestCode = ( ( ( ( u8 * )CharCode )[ 0 ] & 0x01 ) << 30 ) | ( ( ( ( u8 * )CharCode )[ 1 ] & 0x3f ) << 24 ) | ( ( ( ( u8 * )CharCode )[ 2 ] & 0x3f ) << 18 ) | ( ( ( ( u8 * )CharCode )[ 3 ] & 0x3f ) << 12 ) | ( ( ( ( u8 * )CharCode )[ 4 ] & 0x3f ) << 6 ) | ( ( ( u8 * )CharCode )[ 5 ] & 0x3f ) ; + break ; + } + break ; + + case CHARCODEFORMAT_UTF32LE : + DestCode = ( ( u8 * )CharCode )[ 0 ] | ( ( ( u8 * )CharCode )[ 1 ] << 8 ) | ( ( ( u8 * )CharCode )[ 2 ] << 16 ) | ( ( ( u8 * )CharCode )[ 3 ] << 24 ) ; + break ; + + case CHARCODEFORMAT_UTF32BE : + DestCode = ( ( ( u8 * )CharCode )[ 0 ] << 24 ) | ( ( ( u8 * )CharCode )[ 1 ] << 16 ) | ( ( ( u8 * )CharCode )[ 2 ] << 8 ) | ( ( u8 * )CharCode )[ 3 ] ; + break ; + + default : + return 0 ; + } + + if( CharBytes != NULL ) + { + *CharBytes = UseSrcSize ; + } + + return DestCode ; +} + +// 1文字の文字コードと文字のバイト数を取得する +extern u32 GetCharCode( const char *CharCode, int CharCodeFormat, int *CharBytes ) +{ + return GetCharCode_inline( CharCode, CharCodeFormat, CharBytes ) ; +} + +// 文字コードを通常の文字列に変換する、終端にヌル文字は書き込まない( 戻り値:書き込んだバイト数 ) +__inline int PutCharCode_inline( u32 CharCode, int CharCodeFormat, char *Dest ) +{ + switch( CharCodeFormat ) + { + case CHARCODEFORMAT_SHIFTJIS : + case CHARCODEFORMAT_GB2312 : + case CHARCODEFORMAT_UHC : + case CHARCODEFORMAT_BIG5 : + if( CharCode >= 0x100 ) + { + if( Dest != NULL ) + { + ( ( u8 * )Dest )[ 0 ] = ( u8 )( CharCode >> 8 ) ; + ( ( u8 * )Dest )[ 1 ] = ( u8 )( CharCode ) ; + } + return 2; + } + else + { + if( Dest != NULL ) + { + ( ( u8 * )Dest )[ 0 ] = ( u8 )CharCode ; + } + return 1 ; + } + + case CHARCODEFORMAT_ASCII : + case CHARCODEFORMAT_WINDOWS_1252 : + case CHARCODEFORMAT_ISO_IEC_8859_15 : + if( Dest != NULL ) + { + ( ( u8 * )Dest )[ 0 ] = ( u8 )CharCode ; + } + return 1 ; + + case CHARCODEFORMAT_UTF16LE : + case CHARCODEFORMAT_UTF16BE : + { + u32 DestCode1 ; + u32 DestCode2 ; + u32 DestSize ; + + // UTF-16 で表現できない値の場合はキャンセル + if( CharCode > 0x10ffff ) + { + return 0 ; + } + + if( CharCode > 0xffff ) + { + DestCode1 = 0xd800 | ( ( ( CharCode - 0x10000 ) >> 10 ) & 0x3ff ) ; + DestCode2 = 0xdc00 | ( ( CharCode - 0x10000 ) & 0x3ff ) ; + + DestSize = 4 ; + } + else + { + DestCode1 = CharCode ; + DestCode2 = 0 ; + + DestSize = 2 ; + } + + if( Dest != NULL ) + { + if( CharCodeFormat == CHARCODEFORMAT_UTF16BE ) + { + ( ( u8 * )Dest )[ 0 ] = ( u8 )( DestCode1 >> 8 ) ; + ( ( u8 * )Dest )[ 1 ] = ( u8 )( DestCode1 ) ; + + if( DestCode2 != 0 ) + { + ( ( u8 * )Dest )[ 2 ] = ( u8 )( DestCode2 >> 8 ) ; + ( ( u8 * )Dest )[ 3 ] = ( u8 )( DestCode2 ) ; + } + } + else + { + ( ( u8 * )Dest )[ 0 ] = ( u8 )( DestCode1 ) ; + ( ( u8 * )Dest )[ 1 ] = ( u8 )( DestCode1 >> 8 ) ; + + if( DestCode2 != 0 ) + { + ( ( u8 * )Dest )[ 2 ] = ( u8 )( DestCode2 ) ; + ( ( u8 * )Dest )[ 3 ] = ( u8 )( DestCode2 >> 8 ) ; + } + } + } + + return DestSize ; + } + + case CHARCODEFORMAT_UTF8 : + if( CharCode <= 0x7f ) + { + if( Dest != NULL ) + { + ( ( u8 * )Dest )[ 0 ] = ( u8 )( CharCode ) ; + } + + return 1 ; + } + else + if( CharCode <= 0x7ff ) + { + if( Dest != NULL ) + { + ( ( u8 * )Dest )[ 0 ] = ( u8 )( 0xc0 | ( ( CharCode >> 6 ) & 0x1f ) ) ; + ( ( u8 * )Dest )[ 1 ] = ( u8 )( 0x80 | ( ( CharCode ) & 0x3f ) ) ; + } + + return 2 ; + } + else + if( CharCode <= 0xffff ) + { + if( Dest != NULL ) + { + ( ( u8 * )Dest )[ 0 ] = ( u8 )( 0xe0 | ( ( CharCode >> 12 ) & 0x0f ) ) ; + ( ( u8 * )Dest )[ 1 ] = ( u8 )( 0x80 | ( ( CharCode >> 6 ) & 0x3f ) ) ; + ( ( u8 * )Dest )[ 2 ] = ( u8 )( 0x80 | ( ( CharCode ) & 0x3f ) ) ; + } + + return 3 ; + } + else + if( CharCode <= 0x1fffff ) + { + if( Dest != NULL ) + { + ( ( u8 * )Dest )[ 0 ] = ( u8 )( 0xf0 | ( ( CharCode >> 18 ) & 0x07 ) ) ; + ( ( u8 * )Dest )[ 1 ] = ( u8 )( 0x80 | ( ( CharCode >> 12 ) & 0x3f ) ) ; + ( ( u8 * )Dest )[ 2 ] = ( u8 )( 0x80 | ( ( CharCode >> 6 ) & 0x3f ) ) ; + ( ( u8 * )Dest )[ 3 ] = ( u8 )( 0x80 | ( ( CharCode ) & 0x3f ) ) ; + } + + return 4 ; + } + else + if( CharCode <= 0x3ffffff ) + { + if( Dest != NULL ) + { + ( ( u8 * )Dest )[ 0 ] = ( u8 )( 0xf8 | ( ( CharCode >> 24 ) & 0x03 ) ) ; + ( ( u8 * )Dest )[ 1 ] = ( u8 )( 0x80 | ( ( CharCode >> 18 ) & 0x3f ) ) ; + ( ( u8 * )Dest )[ 2 ] = ( u8 )( 0x80 | ( ( CharCode >> 12 ) & 0x3f ) ) ; + ( ( u8 * )Dest )[ 3 ] = ( u8 )( 0x80 | ( ( CharCode >> 6 ) & 0x3f ) ) ; + ( ( u8 * )Dest )[ 4 ] = ( u8 )( 0x80 | ( ( CharCode ) & 0x3f ) ) ; + } + + return 5 ; + } + else + if( CharCode <= 0x7fffffff ) + { + if( Dest != NULL ) + { + ( ( u8 * )Dest )[ 0 ] = ( u8 )( 0xfc | ( ( CharCode >> 30 ) & 0x01 ) ) ; + ( ( u8 * )Dest )[ 1 ] = ( u8 )( 0x80 | ( ( CharCode >> 24 ) & 0x3f ) ) ; + ( ( u8 * )Dest )[ 2 ] = ( u8 )( 0x80 | ( ( CharCode >> 18 ) & 0x3f ) ) ; + ( ( u8 * )Dest )[ 3 ] = ( u8 )( 0x80 | ( ( CharCode >> 12 ) & 0x3f ) ) ; + ( ( u8 * )Dest )[ 4 ] = ( u8 )( 0x80 | ( ( CharCode >> 6 ) & 0x3f ) ) ; + ( ( u8 * )Dest )[ 5 ] = ( u8 )( 0x80 | ( ( CharCode ) & 0x3f ) ) ; + } + + return 6 ; + } + else + { + return 0 ; + } + + case CHARCODEFORMAT_UTF32LE : + if( Dest != NULL ) + { + ( ( u8 * )Dest )[ 0 ] = ( u8 )( CharCode ) ; + ( ( u8 * )Dest )[ 1 ] = ( u8 )( CharCode >> 8 ) ; + ( ( u8 * )Dest )[ 2 ] = ( u8 )( CharCode >> 16 ) ; + ( ( u8 * )Dest )[ 3 ] = ( u8 )( CharCode >> 24 ) ; + } + return 4 ; + + case CHARCODEFORMAT_UTF32BE : + if( Dest != NULL ) + { + ( ( u8 * )Dest )[ 0 ] = ( u8 )( CharCode >> 24 ) ; + ( ( u8 * )Dest )[ 1 ] = ( u8 )( CharCode >> 16 ) ; + ( ( u8 * )Dest )[ 2 ] = ( u8 )( CharCode >> 8 ) ; + ( ( u8 * )Dest )[ 3 ] = ( u8 )( CharCode ) ; + } + return 4 ; + + default : + return 0 ; + } + + return 0 ; +} + +// 文字コードを通常の文字列に変換する、終端にヌル文字は書き込まない( 戻り値:書き込んだバイト数 ) +extern int PutCharCode( u32 CharCode, int CharCodeFormat, char *Dest ) +{ + return PutCharCode_inline( CharCode, CharCodeFormat, Dest ) ; +} + +// 文字コードを指定のコードページの文字に変換する +__inline u32 ConvCharCode_inline( u32 SrcCharCode, int SrcCharCodeFormat, int DestCharCodeFormat ) +{ + // キャラクターコードテーブルが初期化されていなかったら初期化 + if( g_CharCodeSystem.InitializeFlag == FALSE ) + { + InitCharCode() ; + } + + if( SrcCharCodeFormat == DestCharCodeFormat ) + { + return SrcCharCode ; + } + + switch( SrcCharCodeFormat ) + { + case CHARCODEFORMAT_SHIFTJIS : + case CHARCODEFORMAT_GB2312 : + case CHARCODEFORMAT_WINDOWS_1252 : + case CHARCODEFORMAT_ISO_IEC_8859_15 : + case CHARCODEFORMAT_UHC : + case CHARCODEFORMAT_BIG5 : + { + u32 Unicode ; + + if( DestCharCodeFormat == CHARCODEFORMAT_ASCII ) + { + if( SrcCharCode > 0xff ) + { + return 0 ; + } + return SrcCharCode ; + } + + switch( SrcCharCodeFormat ) + { + case CHARCODEFORMAT_SHIFTJIS : + Unicode = g_CharCodeSystem.CharCodeCP932Info.MultiByteToUTF16[ SrcCharCode ] ; + break ; + + case CHARCODEFORMAT_GB2312 : + Unicode = g_CharCodeSystem.CharCodeCP936Info.MultiByteToUTF16[ SrcCharCode ] ; + break ; + + case CHARCODEFORMAT_UHC : + Unicode = g_CharCodeSystem.CharCodeCP949Info.MultiByteToUTF16[ SrcCharCode ] ; + break ; + + case CHARCODEFORMAT_BIG5 : + Unicode = g_CharCodeSystem.CharCodeCP950Info.MultiByteToUTF16[ SrcCharCode ] ; + break ; + + case CHARCODEFORMAT_WINDOWS_1252 : + Unicode = g_CharCodeSystem.CharCodeCP1252Info.MultiByteToUTF16[ SrcCharCode ] ; + break ; + + case CHARCODEFORMAT_ISO_IEC_8859_15 : + Unicode = g_CharCodeSystem.CharCodeISO_IEC_8859_15Info.MultiByteToUTF16[ SrcCharCode ] ; + break ; + + default : + return 0 ; + } + + switch( DestCharCodeFormat ) + { + case CHARCODEFORMAT_SHIFTJIS : + return g_CharCodeSystem.CharCodeCP932Info.UTF16ToMultiByte[ Unicode ] ; + + case CHARCODEFORMAT_GB2312 : + return g_CharCodeSystem.CharCodeCP936Info.UTF16ToMultiByte[ Unicode ] ; + + case CHARCODEFORMAT_UHC : + return g_CharCodeSystem.CharCodeCP949Info.UTF16ToMultiByte[ Unicode ] ; + + case CHARCODEFORMAT_BIG5 : + return g_CharCodeSystem.CharCodeCP950Info.UTF16ToMultiByte[ Unicode ] ; + + case CHARCODEFORMAT_WINDOWS_1252 : + return g_CharCodeSystem.CharCodeCP1252Info.UTF16ToMultiByte[ Unicode ] ; + + case CHARCODEFORMAT_ISO_IEC_8859_15 : + return g_CharCodeSystem.CharCodeISO_IEC_8859_15Info.UTF16ToMultiByte[ Unicode ] ; + + case CHARCODEFORMAT_UTF16LE : + case CHARCODEFORMAT_UTF16BE : + case CHARCODEFORMAT_UTF8 : + case CHARCODEFORMAT_UTF32LE : + case CHARCODEFORMAT_UTF32BE : + return Unicode ; + + default : + return 0 ; + } + } + return 0; + + case CHARCODEFORMAT_ASCII : + return SrcCharCode ; + + case CHARCODEFORMAT_UTF16LE : + case CHARCODEFORMAT_UTF16BE : + case CHARCODEFORMAT_UTF8 : + case CHARCODEFORMAT_UTF32LE : + case CHARCODEFORMAT_UTF32BE : + switch( DestCharCodeFormat ) + { + case CHARCODEFORMAT_SHIFTJIS : + if( SrcCharCode > 0xffff ) + { + return 0 ; + } + return g_CharCodeSystem.CharCodeCP932Info.UTF16ToMultiByte[ SrcCharCode ] ; + + case CHARCODEFORMAT_GB2312 : + if( SrcCharCode > 0xffff ) + { + return 0 ; + } + return g_CharCodeSystem.CharCodeCP936Info.UTF16ToMultiByte[ SrcCharCode ] ; + + case CHARCODEFORMAT_UHC : + if( SrcCharCode > 0xffff ) + { + return 0 ; + } + return g_CharCodeSystem.CharCodeCP949Info.UTF16ToMultiByte[ SrcCharCode ] ; + + case CHARCODEFORMAT_BIG5 : + if( SrcCharCode > 0xffff ) + { + return 0 ; + } + return g_CharCodeSystem.CharCodeCP950Info.UTF16ToMultiByte[ SrcCharCode ] ; + + case CHARCODEFORMAT_WINDOWS_1252 : + if( SrcCharCode > 0xffff ) + { + return 0 ; + } + return g_CharCodeSystem.CharCodeCP1252Info.UTF16ToMultiByte[ SrcCharCode ] ; + + case CHARCODEFORMAT_ISO_IEC_8859_15 : + if( SrcCharCode > 0xffff ) + { + return 0 ; + } + return g_CharCodeSystem.CharCodeISO_IEC_8859_15Info.UTF16ToMultiByte[ SrcCharCode ] ; + + case CHARCODEFORMAT_UTF16LE : + case CHARCODEFORMAT_UTF16BE : + case CHARCODEFORMAT_UTF8 : + case CHARCODEFORMAT_UTF32LE : + case CHARCODEFORMAT_UTF32BE : + return SrcCharCode ; + + default : + return 0 ; + } + return 0 ; + + default : + return 0 ; + } + + return 0 ; +} + +// 文字コードを指定のコードページの文字に変換する +extern u32 ConvCharCode( u32 SrcCharCode, int SrcCharCodeFormat, int DestCharCodeFormat ) +{ + CHARCODETABLE_INITCHECK( SrcCharCodeFormat ) + CHARCODETABLE_INITCHECK( DestCharCodeFormat ) + + return ConvCharCode_inline( SrcCharCode, SrcCharCodeFormat, DestCharCodeFormat ) ; +} + +// 1文字4バイトの配列を、別コードページの1文字4バイトの配列に変換する( 戻り値:変換後のサイズ、ヌル文字含む( 単位:バイト ) ) +extern int ConvCharCodeString( const u32 *Src, int SrcCharCodeFormat, u32 *Dest, int DestCharCodeFormat ) +{ + int DestSize ; + u32 DestCode ; + + CHARCODETABLE_INITCHECK( SrcCharCodeFormat ) + CHARCODETABLE_INITCHECK( DestCharCodeFormat ) + + DestSize = 0 ; + for(;;) + { + if( *Src == 0 ) + { + break ; + } + + DestCode = ConvCharCode_inline( *Src, SrcCharCodeFormat, DestCharCodeFormat ) ; + Src ++ ; + + if( DestCode != 0 ) + { + if( Dest != NULL ) + { + *Dest = DestCode ; + Dest ++ ; + } + + DestSize += 4 ; + } + } + + if( Dest != NULL ) + { + *Dest = 0 ; + Dest ++ ; + } + DestSize += 4 ; + + return DestSize ; +} + +// 文字列を1文字4バイトの配列に変換する( 戻り値:変換後のサイズ、ヌル文字含む( 単位:バイト ) ) +__inline int StringToCharCodeString_inline( const char *Src, int SrcCharCodeFormat, u32 *Dest ) +{ + int DestSize ; + u32 SrcCode ; + const u8 *SrcStr ; + int UseSrcSize ; + + SrcStr = ( u8 * )Src ; + DestSize = 0 ; + for(;;) + { + SrcCode = GetCharCode_inline( ( const char * )SrcStr, SrcCharCodeFormat, &UseSrcSize ) ; + SrcStr += UseSrcSize ; + if( SrcCode == 0 ) + { + break ; + } + + if( Dest != NULL ) + { + *Dest = SrcCode ; + Dest ++ ; + } + DestSize += 4 ; + } + + if( Dest != NULL ) + { + *Dest = 0 ; + Dest ++ ; + } + DestSize += 4 ; + + return DestSize ; +} + +// 文字列を1文字4バイトの配列に変換する( 戻り値:変換後のサイズ、ヌル文字含む( 単位:バイト ) ) +extern int StringToCharCodeString( const char *Src, int SrcCharCodeFormat, u32 *Dest ) +{ + return StringToCharCodeString_inline( Src, SrcCharCodeFormat, Dest ) ; +} + +// 1文字4バイトの配列を文字列に変換する( 戻り値:変換後のサイズ、ヌル文字含む( 単位:バイト ) ) +extern int CharCodeStringToString( const u32 *Src, char *Dest, int DestCharCodeFormat ) +{ + int DestSize ; + u8 *DestStr ; + int WriteSize ; + + DestStr = ( u8 * )Dest ; + DestSize = 0 ; + for(;;) + { + if( *Src == 0 ) + { + break ; + } + + WriteSize = PutCharCode_inline( *Src, DestCharCodeFormat, ( char * )DestStr ) ; + if( DestStr != NULL ) + { + DestStr += WriteSize ; + } + DestSize += WriteSize ; + Src ++ ; + } + + switch( DestCharCodeFormat ) + { + case 1 : + if( DestStr != NULL ) + { + ( ( u8 * )DestStr )[ 0 ] = 0 ; + DestStr += 1; + } + DestSize += 1 ; + break ; + + case 2 : + if( DestStr != NULL ) + { + ( ( u16 * )DestStr )[ 0 ] = 0 ; + DestStr += 2; + } + DestSize += 2 ; + break ; + + case 4 : + if( DestStr != NULL ) + { + ( ( u32 * )DestStr )[ 0 ] = 0 ; + DestStr += 4 ; + } + DestSize += 4 ; + break ; + } + + return DestSize ; +} + +// ConvString の冒頭部分のマクロ +#define CONVSTRING_BEGIN \ + int DestSize ; \ + u32 Unicode ; \ + const u8 * SrcStr ; \ + u8 * DestStr ; \ + \ + SrcStr = ( u8 * )Src ; \ + DestStr = ( u8 * )Dest ; \ + DestSize = 0 ; + + +// ConvString の ShiftJISからUnicodeを取得するまでの処理 +__inline bool ConvString_SrcCode_SHIFTJIS( const u8 *( &SrcStr ), u32 &Unicode ) +{ + u32 SrcCode ; + + if( CHECK_SHIFTJIS_2BYTE( ( ( u8 * )SrcStr )[ 0 ] ) ) + { + SrcCode = ( ( ( u8 * )SrcStr )[ 0 ] << 8 ) | ( ( u8 * )SrcStr )[ 1 ] ; + SrcStr += 2 ; + } + else + { + SrcCode = ( ( u8 * )SrcStr )[ 0 ] ; + if( SrcCode == 0 ) + { + return false; + } + SrcStr ++ ; + } + + Unicode = g_CharCodeSystem.CharCodeCP932Info.MultiByteToUTF16[ SrcCode ] ; + + return true; +} + +// ConvString の UTF16LEからUnicodeを取得するまでの処理 +__inline bool ConvString_SrcCode_UTF16LE( const u8 *( &SrcStr ), u32 &Unicode ) +{ + if( ( ( ( ( u8 * )SrcStr )[ 0 ] | ( ( ( u8 * )SrcStr )[ 1 ] << 8 ) ) & 0xfc00 ) == 0xd800 ) + { + u32 SrcCode1 ; + u32 SrcCode2 ; + + SrcCode1 = ( ( u8 * )SrcStr )[ 0 ] | ( ( ( u8 * )SrcStr )[ 1 ] << 8 ) ; + SrcCode2 = ( ( u8 * )SrcStr )[ 2 ] | ( ( ( u8 * )SrcStr )[ 3 ] << 8 ) ; + + Unicode = ( ( ( SrcCode1 & 0x3ff ) << 10 ) | ( SrcCode2 & 0x3ff ) ) + 0x10000 ; + SrcStr += 4 ; + } + else + { + Unicode = ( ( u8 * )SrcStr )[ 0 ] | ( ( ( u8 * )SrcStr )[ 1 ] << 8 ) ; + if( Unicode == 0 ) + { + return false ; + } + SrcStr += 2 ; + } + + return true ; +} + +// ConvString の UTF16BEからUnicodeを取得するまでの処理 +__inline bool ConvString_SrcCode_UTF16BE( const u8 *( &SrcStr ), u32 &Unicode ) +{ + if( ( ( ( ( ( u8 * )SrcStr )[ 0 ] << 8 ) | ( ( u8 * )SrcStr )[ 1 ] ) & 0xfc00 ) == 0xd800 ) + { + u32 SrcCode1 ; + u32 SrcCode2 ; + + SrcCode1 = ( ( ( u8 * )SrcStr )[ 0 ] << 8 ) | ( ( u8 * )SrcStr )[ 1 ] ; + SrcCode2 = ( ( ( u8 * )SrcStr )[ 2 ] << 8 ) | ( ( u8 * )SrcStr )[ 3 ] ; + + Unicode = ( ( ( SrcCode1 & 0x3ff ) << 10 ) | ( SrcCode2 & 0x3ff ) ) + 0x10000 ; + SrcStr += 4 ; + } + else + { + Unicode = ( ( ( u8 * )SrcStr )[ 0 ] << 8 ) | ( ( u8 * )SrcStr )[ 1 ] ; + if( Unicode == 0 ) + { + return false ; + } + SrcStr += 2 ; + } + + return true ; +} + +// ConvString の UTF8からUnicodeを取得するまでの処理 +__inline bool ConvString_SrcCode_UTF8( const u8 *( &SrcStr ), u32 &Unicode ) +{ + if( ( ( ( u8 * )SrcStr )[ 0 ] & 0x80 ) == 0x00 ) + { + Unicode = ( ( u8 * )SrcStr )[ 0 ] ; + if( Unicode == 0 ) + { + return false ; + } + SrcStr += 1 ; + } + else + if( ( ( ( u8 * )SrcStr )[ 0 ] & 0xe0 ) == 0xc0 ) + { + Unicode = ( ( ( ( u8 * )SrcStr )[ 0 ] & 0x1f ) << 6 ) | ( ( ( u8 * )SrcStr )[ 1 ] & 0x3f ) ; + SrcStr += 2 ; + } + else + if( ( ( ( u8 * )SrcStr )[ 0 ] & 0xf0 ) == 0xe0 ) + { + Unicode = ( ( ( ( u8 * )SrcStr )[ 0 ] & 0x0f ) << 12 ) | ( ( ( ( u8 * )SrcStr )[ 1 ] & 0x3f ) << 6 ) | ( ( ( u8 * )SrcStr )[ 2 ] & 0x3f ) ; + SrcStr += 3 ; + } + else + if( ( ( ( u8 * )SrcStr )[ 0 ] & 0xf8 ) == 0xf0 ) + { + Unicode = ( ( ( ( u8 * )SrcStr )[ 0 ] & 0x07 ) << 18 ) | ( ( ( ( u8 * )SrcStr )[ 1 ] & 0x3f ) << 12 ) | ( ( ( ( u8 * )SrcStr )[ 2 ] & 0x3f ) << 6 ) | ( ( ( u8 * )SrcStr )[ 3 ] & 0x3f ) ; + SrcStr += 4 ; + } + else + if( ( ( ( u8 * )SrcStr )[ 0 ] & 0xfc ) == 0xf8 ) + { + Unicode = ( ( ( ( u8 * )SrcStr )[ 0 ] & 0x03 ) << 24 ) | ( ( ( ( u8 * )SrcStr )[ 1 ] & 0x3f ) << 18 ) | ( ( ( ( u8 * )SrcStr )[ 2 ] & 0x3f ) << 12 ) | ( ( ( ( u8 * )SrcStr )[ 3 ] & 0x3f ) << 6 ) | ( ( ( u8 * )SrcStr )[ 4 ] & 0x3f ) ; + SrcStr += 5 ; + } + else + if( ( ( ( u8 * )SrcStr )[ 0 ] & 0xfe ) == 0xfc ) + { + Unicode = ( ( ( ( u8 * )SrcStr )[ 0 ] & 0x01 ) << 30 ) | ( ( ( ( u8 * )SrcStr )[ 1 ] & 0x3f ) << 24 ) | ( ( ( ( u8 * )SrcStr )[ 2 ] & 0x3f ) << 18 ) | ( ( ( ( u8 * )SrcStr )[ 3 ] & 0x3f ) << 12 ) | ( ( ( ( u8 * )SrcStr )[ 4 ] & 0x3f ) << 6 ) | ( ( ( u8 * )SrcStr )[ 5 ] & 0x3f ) ; + SrcStr += 6 ; + } + else + { + return false ; + } + + return true ; +} + +// ConvString の UTF32LEからUnicodeを取得するまでの処理 +__inline bool ConvString_SrcCode_UTF32LE( const u8 *( &SrcStr ), u32 &Unicode ) +{ + Unicode = ( ( u8 * )SrcStr )[ 0 ] | ( ( ( u8 * )SrcStr )[ 1 ] << 8 ) | ( ( ( u8 * )SrcStr )[ 2 ] << 16 ) | ( ( ( u8 * )SrcStr )[ 3 ] << 24 ) ; + return Unicode != 0 ; +} + +// ConvString の UTF32BEからUnicodeを取得するまでの処理 +__inline bool ConvString_SrcCode_UTF32BE( const u8 *( &SrcStr ), u32 &Unicode ) +{ + Unicode = ( ( ( u8 * )SrcStr )[ 0 ] << 24 ) | ( ( ( u8 * )SrcStr )[ 1 ] << 16 ) | ( ( ( u8 * )SrcStr )[ 2 ] << 8 ) | ( ( u8 * )SrcStr )[ 3 ] ; + return Unicode != 0 ; +} + +// ConvString の Unicodeから ShiftJISとして書き込むまでの処理 +__inline void ConvString_DestCode_SHIFTJIS( u8 *&DestStr, u32 &DestCode, int &DestSize ) +{ + u32 CharCode ; + + // テーブル値 で表現できない値の場合はキャンセル + if( DestCode > 0xffff ) + { + return ; + } + + CharCode = g_CharCodeSystem.CharCodeCP932Info.UTF16ToMultiByte[ DestCode ] ; + + if( CharCode >= 0x100 ) + { + if( DestStr != NULL ) + { + ( ( u8 * )DestStr )[ 0 ] = ( u8 )( CharCode >> 8 ) ; + ( ( u8 * )DestStr )[ 1 ] = ( u8 )( CharCode ) ; + DestStr += 2 ; + } + DestSize += 2 ; + } + else + { + if( DestStr != NULL ) + { + ( ( u8 * )DestStr )[ 0 ] = ( u8 )CharCode ; + DestStr += 1 ; + } + DestSize += 1 ; + } +} + +// ConvString の UnicodeからUTF16LEとして書き込むまでの処理 +__inline void ConvString_DestCode_UTF16LE( u8 *&DestStr, u32 &DestCode, int &DestSize ) +{ + // UTF-16 で表現できない値の場合はキャンセル + if( DestCode > 0x10ffff ) + { + return ; + } + + if( DestCode > 0xffff ) + { + if( DestStr != NULL ) + { + u32 DestCode1 ; + u32 DestCode2 ; + + DestCode1 = 0xd800 | ( ( ( DestCode - 0x10000 ) >> 10 ) & 0x3ff ) ; + DestCode2 = 0xdc00 | ( ( DestCode - 0x10000 ) & 0x3ff ) ; + + ( ( u8 * )DestStr )[ 0 ] = ( u8 )( DestCode1 ) ; + ( ( u8 * )DestStr )[ 1 ] = ( u8 )( DestCode1 >> 8 ) ; + + ( ( u8 * )DestStr )[ 2 ] = ( u8 )( DestCode2 ) ; + ( ( u8 * )DestStr )[ 3 ] = ( u8 )( DestCode2 >> 8 ) ; + + DestStr += 4 ; + } + + DestSize += 4 ; + } + else + { + if( DestStr != NULL ) + { + ( ( u8 * )DestStr )[ 0 ] = ( u8 )( DestCode ) ; + ( ( u8 * )DestStr )[ 1 ] = ( u8 )( DestCode >> 8 ) ; + + DestStr += 2 ; + } + + DestSize += 2 ; + } +} + +// ConvString の UnicodeからUTF16BEとして書き込むまでの処理 +__inline void ConvString_DestCode_UTF16BE( u8 *&DestStr, u32 &DestCode, int &DestSize ) +{ + // UTF-16 で表現できない値の場合はキャンセル + if( DestCode > 0x10ffff ) + { + return ; + } + + if( DestCode > 0xffff ) + { + if( DestStr != NULL ) + { + u32 DestCode1 ; + u32 DestCode2 ; + + DestCode1 = 0xd800 | ( ( ( DestCode - 0x10000 ) >> 10 ) & 0x3ff ) ; + DestCode2 = 0xdc00 | ( ( DestCode - 0x10000 ) & 0x3ff ) ; + + ( ( u8 * )DestStr )[ 0 ] = ( u8 )( DestCode1 >> 8 ) ; + ( ( u8 * )DestStr )[ 1 ] = ( u8 )( DestCode1 ) ; + + ( ( u8 * )DestStr )[ 2 ] = ( u8 )( DestCode2 >> 8 ) ; + ( ( u8 * )DestStr )[ 3 ] = ( u8 )( DestCode2 ) ; + + DestStr += 4 ; + } + + DestSize += 4 ; + } + else + { + if( DestStr != NULL ) + { + ( ( u8 * )DestStr )[ 0 ] = ( u8 )( DestCode >> 8 ) ; + ( ( u8 * )DestStr )[ 1 ] = ( u8 )( DestCode ) ; + + DestStr += 2 ; + } + + DestSize += 2 ; + } +} + +// ConvString の UnicodeからUTF8として書き込むまでの処理 +__inline void ConvString_DestCode_UTF8( u8 *&DestStr, u32 &DestCode, int &DestSize ) +{ + if( DestCode <= 0x7f ) + { + if( DestStr != NULL ) + { + ( ( u8 * )DestStr )[ 0 ] = ( u8 )( DestCode ) ; + DestStr ++ ; + } + + DestSize ++ ; + } + else + if( DestCode <= 0x7ff ) + { + if( DestStr != NULL ) + { + ( ( u8 * )DestStr )[ 0 ] = ( u8 )( 0xc0 | ( ( DestCode >> 6 ) & 0x1f ) ) ; + ( ( u8 * )DestStr )[ 1 ] = ( u8 )( 0x80 | ( ( DestCode ) & 0x3f ) ) ; + DestStr += 2 ; + } + + DestSize += 2 ; + } + else + if( DestCode <= 0xffff ) + { + if( DestStr != NULL ) + { + ( ( u8 * )DestStr )[ 0 ] = ( u8 )( 0xe0 | ( ( DestCode >> 12 ) & 0x0f ) ) ; + ( ( u8 * )DestStr )[ 1 ] = ( u8 )( 0x80 | ( ( DestCode >> 6 ) & 0x3f ) ) ; + ( ( u8 * )DestStr )[ 2 ] = ( u8 )( 0x80 | ( ( DestCode ) & 0x3f ) ) ; + DestStr += 3 ; + } + + DestSize += 3 ; + } + else + if( DestCode <= 0x1fffff ) + { + if( DestStr != NULL ) + { + ( ( u8 * )DestStr )[ 0 ] = ( u8 )( 0xf0 | ( ( DestCode >> 18 ) & 0x07 ) ) ; + ( ( u8 * )DestStr )[ 1 ] = ( u8 )( 0x80 | ( ( DestCode >> 12 ) & 0x3f ) ) ; + ( ( u8 * )DestStr )[ 2 ] = ( u8 )( 0x80 | ( ( DestCode >> 6 ) & 0x3f ) ) ; + ( ( u8 * )DestStr )[ 3 ] = ( u8 )( 0x80 | ( ( DestCode ) & 0x3f ) ) ; + DestStr += 4 ; + } + + DestSize += 4 ; + } + else + if( DestCode <= 0x3ffffff ) + { + if( DestStr != NULL ) + { + ( ( u8 * )DestStr )[ 0 ] = ( u8 )( 0xf8 | ( ( DestCode >> 24 ) & 0x03 ) ) ; + ( ( u8 * )DestStr )[ 1 ] = ( u8 )( 0x80 | ( ( DestCode >> 18 ) & 0x3f ) ) ; + ( ( u8 * )DestStr )[ 2 ] = ( u8 )( 0x80 | ( ( DestCode >> 12 ) & 0x3f ) ) ; + ( ( u8 * )DestStr )[ 3 ] = ( u8 )( 0x80 | ( ( DestCode >> 6 ) & 0x3f ) ) ; + ( ( u8 * )DestStr )[ 4 ] = ( u8 )( 0x80 | ( ( DestCode ) & 0x3f ) ) ; + DestStr += 5 ; + } + + DestSize += 5 ; + } + else + if( DestCode <= 0x7fffffff ) + { + if( DestStr != NULL ) + { + ( ( u8 * )DestStr )[ 0 ] = ( u8 )( 0xfc | ( ( DestCode >> 30 ) & 0x01 ) ) ; + ( ( u8 * )DestStr )[ 1 ] = ( u8 )( 0x80 | ( ( DestCode >> 24 ) & 0x3f ) ) ; + ( ( u8 * )DestStr )[ 2 ] = ( u8 )( 0x80 | ( ( DestCode >> 18 ) & 0x3f ) ) ; + ( ( u8 * )DestStr )[ 3 ] = ( u8 )( 0x80 | ( ( DestCode >> 12 ) & 0x3f ) ) ; + ( ( u8 * )DestStr )[ 4 ] = ( u8 )( 0x80 | ( ( DestCode >> 6 ) & 0x3f ) ) ; + ( ( u8 * )DestStr )[ 5 ] = ( u8 )( 0x80 | ( ( DestCode ) & 0x3f ) ) ; + DestStr += 6 ; + } + + DestSize += 6 ; + } + else + { + DestSize += 0 ; + } +} + +// ConvString の UnicodeからUTF32LEとして書き込むまでの処理 +__inline void ConvString_DestCode_UTF32LE( u8 *&DestStr, u32 &DestCode, int &DestSize ) +{ + if( DestStr != NULL ) + { + ( ( u8 * )DestStr )[ 0 ] = ( u8 )( DestCode ) ; + ( ( u8 * )DestStr )[ 1 ] = ( u8 )( DestCode >> 8 ) ; + ( ( u8 * )DestStr )[ 2 ] = ( u8 )( DestCode >> 16 ) ; + ( ( u8 * )DestStr )[ 3 ] = ( u8 )( DestCode >> 24 ) ; + DestStr += 4 ; + } + + DestSize += 4 ; +} + +// ConvString の UnicodeからUTF32BEとして書き込むまでの処理 +__inline void ConvString_DestCode_UTF32BE( u8 *&DestStr, u32 &DestCode, int &DestSize ) +{ + if( DestStr != NULL ) + { + ( ( u8 * )DestStr )[ 0 ] = ( u8 )( DestCode >> 24 ) ; + ( ( u8 * )DestStr )[ 1 ] = ( u8 )( DestCode >> 16 ) ; + ( ( u8 * )DestStr )[ 2 ] = ( u8 )( DestCode >> 8 ) ; + ( ( u8 * )DestStr )[ 3 ] = ( u8 )( DestCode ) ; + DestStr += 4 ; + } + + DestSize += 4 ; +} + +// ConvString の 1バイト単位コードの終端文字を書き込む処理 +__inline void ConvString_1BYTE_NULL_CHAR( u8 *&DestStr, int &DestSize ) +{ + if( DestStr != NULL ) + { + ( ( u8 * )DestStr )[ 0 ] = 0 ; + DestStr += 1 ; + } + DestSize += 1 ; +} + +// ConvString の 2バイト単位コードの終端文字を書き込む処理 +__inline void ConvString_2BYTE_NULL_CHAR( u8 *&DestStr, int &DestSize ) +{ + if( DestStr != NULL ) + { + ( ( u16 * )DestStr )[ 0 ] = 0 ; + DestStr += 2 ; + } + DestSize += 2 ; +} + +// ConvString の 4バイト単位コードの終端文字を書き込む処理 +__inline void ConvString_4BYTE_NULL_CHAR( u8 *&DestStr, int &DestSize ) +{ + if( DestStr != NULL ) + { + ( ( u32 * )DestStr )[ 0 ] = 0 ; + DestStr += 4 ; + } + DestSize += 4 ; +} + + +// ConvString の UTF16LE → UTF16BE 高速処理用 +__inline int ConvString_UTF16LE_TO_UTF16BE( const char *Src, char *Dest ) +{ + CONVSTRING_BEGIN + while( ConvString_SrcCode_UTF16LE( SrcStr, Unicode ) ) + ConvString_DestCode_UTF16BE( DestStr, Unicode, DestSize ) ; + ConvString_2BYTE_NULL_CHAR( DestStr, DestSize ) ; + return DestSize ; +} + +// ConvString の UTF16LE → UTF8 高速処理用 +__inline int ConvString_UTF16LE_TO_UTF8( const char *Src, char *Dest ) +{ + CONVSTRING_BEGIN + while( ConvString_SrcCode_UTF16LE( SrcStr, Unicode ) ) + ConvString_DestCode_UTF8( DestStr, Unicode, DestSize ) ; + ConvString_1BYTE_NULL_CHAR( DestStr, DestSize ) ; + return DestSize ; +} + +// ConvString の UTF16LE → UTF32LE 高速処理用 +__inline int ConvString_UTF16LE_TO_UTF32LE( const char *Src, char *Dest ) +{ + CONVSTRING_BEGIN + while( ConvString_SrcCode_UTF16LE( SrcStr, Unicode ) ) + ConvString_DestCode_UTF32LE( DestStr, Unicode, DestSize ) ; + ConvString_4BYTE_NULL_CHAR( DestStr, DestSize ) ; + return DestSize ; +} + +// ConvString の UTF16LE → UTF32BE 高速処理用 +__inline int ConvString_UTF16LE_TO_UTF32BE( const char *Src, char *Dest ) +{ + CONVSTRING_BEGIN + while( ConvString_SrcCode_UTF16LE( SrcStr, Unicode ) ) + ConvString_DestCode_UTF32BE( DestStr, Unicode, DestSize ) ; + ConvString_4BYTE_NULL_CHAR( DestStr, DestSize ) ; + return DestSize ; +} + + +// ConvString の UTF16BE → UTF16LE 高速処理用 +__inline int ConvString_UTF16BE_TO_UTF16LE( const char *Src, char *Dest ) +{ + CONVSTRING_BEGIN + while( ConvString_SrcCode_UTF16BE( SrcStr, Unicode ) ) + ConvString_DestCode_UTF16LE( DestStr, Unicode, DestSize ) ; + ConvString_2BYTE_NULL_CHAR( DestStr, DestSize ) ; + return DestSize ; +} + +// ConvString の UTF16BE → UTF8 高速処理用 +__inline int ConvString_UTF16BE_TO_UTF8( const char *Src, char *Dest ) +{ + CONVSTRING_BEGIN + while( ConvString_SrcCode_UTF16BE( SrcStr, Unicode ) ) + ConvString_DestCode_UTF8( DestStr, Unicode, DestSize ) ; + ConvString_1BYTE_NULL_CHAR( DestStr, DestSize ) ; + return DestSize ; +} + +// ConvString の UTF16BE → UTF32LE 高速処理用 +__inline int ConvString_UTF16BE_TO_UTF32LE( const char *Src, char *Dest ) +{ + CONVSTRING_BEGIN + while( ConvString_SrcCode_UTF16BE( SrcStr, Unicode ) ) + ConvString_DestCode_UTF32LE( DestStr, Unicode, DestSize ) ; + ConvString_4BYTE_NULL_CHAR( DestStr, DestSize ) ; + return DestSize ; +} + +// ConvString の UTF16BE → UTF32BE 高速処理用 +__inline int ConvString_UTF16BE_TO_UTF32BE( const char *Src, char *Dest ) +{ + CONVSTRING_BEGIN + while( ConvString_SrcCode_UTF16BE( SrcStr, Unicode ) ) + ConvString_DestCode_UTF32BE( DestStr, Unicode, DestSize ) ; + ConvString_4BYTE_NULL_CHAR( DestStr, DestSize ) ; + return DestSize ; +} + + +// ConvString の UTF8 → UTF16LE 高速処理用 +__inline int ConvString_UTF8_TO_UTF16LE( const char *Src, char *Dest ) +{ + CONVSTRING_BEGIN + while( ConvString_SrcCode_UTF8( SrcStr, Unicode ) ) + ConvString_DestCode_UTF16LE( DestStr, Unicode, DestSize ) ; + ConvString_2BYTE_NULL_CHAR( DestStr, DestSize ) ; + return DestSize ; +} + +// ConvString の UTF8 → UTF16BE 高速処理用 +__inline int ConvString_UTF8_TO_UTF16BE( const char *Src, char *Dest ) +{ + CONVSTRING_BEGIN + while( ConvString_SrcCode_UTF8( SrcStr, Unicode ) ) + ConvString_DestCode_UTF16BE( DestStr, Unicode, DestSize ) ; + ConvString_2BYTE_NULL_CHAR( DestStr, DestSize ) ; + return DestSize ; +} + +// ConvString の UTF8 → UTF32LE 高速処理用 +__inline int ConvString_UTF8_TO_UTF32LE( const char *Src, char *Dest ) +{ + CONVSTRING_BEGIN + while( ConvString_SrcCode_UTF8( SrcStr, Unicode ) ) + ConvString_DestCode_UTF32LE( DestStr, Unicode, DestSize ) ; + ConvString_4BYTE_NULL_CHAR( DestStr, DestSize ) ; + return DestSize ; +} + +// ConvString の UTF8 → UTF32BE 高速処理用 +__inline int ConvString_UTF8_TO_UTF32BE( const char *Src, char *Dest ) +{ + CONVSTRING_BEGIN + while( ConvString_SrcCode_UTF8( SrcStr, Unicode ) ) + ConvString_DestCode_UTF32BE( DestStr, Unicode, DestSize ) ; + ConvString_4BYTE_NULL_CHAR( DestStr, DestSize ) ; + return DestSize ; +} + + +// ConvString の UTF32LE → UTF16LE 高速処理用 +__inline int ConvString_UTF32LE_TO_UTF16LE( const char *Src, char *Dest ) +{ + CONVSTRING_BEGIN + while( ConvString_SrcCode_UTF32LE( SrcStr, Unicode ) ) + ConvString_DestCode_UTF16LE( DestStr, Unicode, DestSize ) ; + ConvString_2BYTE_NULL_CHAR( DestStr, DestSize ) ; + return DestSize ; +} + +// ConvString の UTF32LE → UTF16BE 高速処理用 +__inline int ConvString_UTF32LE_TO_UTF16BE( const char *Src, char *Dest ) +{ + CONVSTRING_BEGIN + while( ConvString_SrcCode_UTF32LE( SrcStr, Unicode ) ) + ConvString_DestCode_UTF16BE( DestStr, Unicode, DestSize ) ; + ConvString_2BYTE_NULL_CHAR( DestStr, DestSize ) ; + return DestSize ; +} + +// ConvString の UTF32LE → UTF8 高速処理用 +__inline int ConvString_UTF32LE_TO_UTF8( const char *Src, char *Dest ) +{ + CONVSTRING_BEGIN + while( ConvString_SrcCode_UTF32LE( SrcStr, Unicode ) ) + ConvString_DestCode_UTF8( DestStr, Unicode, DestSize ) ; + ConvString_1BYTE_NULL_CHAR( DestStr, DestSize ) ; + return DestSize ; +} + +// ConvString の UTF32LE → UTF32BE 高速処理用 +__inline int ConvString_UTF32LE_TO_UTF32BE( const char *Src, char *Dest ) +{ + CONVSTRING_BEGIN + while( ConvString_SrcCode_UTF32LE( SrcStr, Unicode ) ) + ConvString_DestCode_UTF32BE( DestStr, Unicode, DestSize ) ; + ConvString_4BYTE_NULL_CHAR( DestStr, DestSize ) ; + return DestSize ; +} + + +// ConvString の UTF32BE → UTF16LE 高速処理用 +__inline int ConvString_UTF32BE_TO_UTF16LE( const char *Src, char *Dest ) +{ + CONVSTRING_BEGIN + while( ConvString_SrcCode_UTF32BE( SrcStr, Unicode ) ) + ConvString_DestCode_UTF16LE( DestStr, Unicode, DestSize ) ; + ConvString_2BYTE_NULL_CHAR( DestStr, DestSize ) ; + return DestSize ; +} + +// ConvString の UTF32BE → UTF16BE 高速処理用 +__inline int ConvString_UTF32BE_TO_UTF16BE( const char *Src, char *Dest ) +{ + CONVSTRING_BEGIN + while( ConvString_SrcCode_UTF32BE( SrcStr, Unicode ) ) + ConvString_DestCode_UTF16BE( DestStr, Unicode, DestSize ) ; + ConvString_2BYTE_NULL_CHAR( DestStr, DestSize ) ; + return DestSize ; +} + +// ConvString の UTF32BE → UTF8 高速処理用 +__inline int ConvString_UTF32BE_TO_UTF8( const char *Src, char *Dest ) +{ + CONVSTRING_BEGIN + while( ConvString_SrcCode_UTF32BE( SrcStr, Unicode ) ) + ConvString_DestCode_UTF8( DestStr, Unicode, DestSize ) ; + ConvString_1BYTE_NULL_CHAR( DestStr, DestSize ) ; + return DestSize ; +} + +// ConvString の UTF32BE → UTF32LE 高速処理用 +__inline int ConvString_UTF32BE_TO_UTF32LE( const char *Src, char *Dest ) +{ + CONVSTRING_BEGIN + while( ConvString_SrcCode_UTF32BE( SrcStr, Unicode ) ) + ConvString_DestCode_UTF32LE( DestStr, Unicode, DestSize ) ; + ConvString_4BYTE_NULL_CHAR( DestStr, DestSize ) ; + return DestSize ; +} + + +// ConvString の ShiftJIS → UTF16LE 高速処理用 +__inline int ConvString_SHIFTJIS_TO_UTF16LE( const char *Src, char *Dest ) +{ + CONVSTRING_BEGIN + while( ConvString_SrcCode_SHIFTJIS( SrcStr, Unicode ) ) + ConvString_DestCode_UTF16LE( DestStr, Unicode, DestSize ) ; + ConvString_2BYTE_NULL_CHAR( DestStr, DestSize ) ; + return DestSize ; +} + +// ConvString の ShiftJIS → UTF16BE 高速処理用 +__inline int ConvString_SHIFTJIS_TO_UTF16BE( const char *Src, char *Dest ) +{ + CONVSTRING_BEGIN + while( ConvString_SrcCode_SHIFTJIS( SrcStr, Unicode ) ) + ConvString_DestCode_UTF16BE( DestStr, Unicode, DestSize ) ; + ConvString_2BYTE_NULL_CHAR( DestStr, DestSize ) ; + return DestSize ; +} + +// ConvString の ShiftJIS → UTF8 高速処理用 +__inline int ConvString_SHIFTJIS_TO_UTF8( const char *Src, char *Dest ) +{ + CONVSTRING_BEGIN + while( ConvString_SrcCode_SHIFTJIS( SrcStr, Unicode ) ) + ConvString_DestCode_UTF8( DestStr, Unicode, DestSize ) ; + ConvString_1BYTE_NULL_CHAR( DestStr, DestSize ) ; + return DestSize ; +} + +// ConvString の ShiftJIS → UTF32LE 高速処理用 +__inline int ConvString_SHIFTJIS_TO_UTF32LE( const char *Src, char *Dest ) +{ + CONVSTRING_BEGIN + while( ConvString_SrcCode_SHIFTJIS( SrcStr, Unicode ) ) + ConvString_DestCode_UTF32LE( DestStr, Unicode, DestSize ) ; + ConvString_4BYTE_NULL_CHAR( DestStr, DestSize ) ; + return DestSize ; +} + +// ConvString の ShiftJIS → UTF32BE 高速処理用 +__inline int ConvString_SHIFTJIS_TO_UTF32BE( const char *Src, char *Dest ) +{ + CONVSTRING_BEGIN + while( ConvString_SrcCode_SHIFTJIS( SrcStr, Unicode ) ) + ConvString_DestCode_UTF32BE( DestStr, Unicode, DestSize ) ; + ConvString_4BYTE_NULL_CHAR( DestStr, DestSize ) ; + return DestSize ; +} + + +// ConvString の UTF16LE → ShiftJIS 高速処理用 +__inline int ConvString_UTF16LE_TO_SHIFTJIS( const char *Src, char *Dest ) +{ + CONVSTRING_BEGIN + while( ConvString_SrcCode_UTF16LE( SrcStr, Unicode ) ) + ConvString_DestCode_SHIFTJIS( DestStr, Unicode, DestSize ) ; + ConvString_1BYTE_NULL_CHAR( DestStr, DestSize ) ; + return DestSize ; +} + +// ConvString の UTF16BE → ShiftJIS 高速処理用 +__inline int ConvString_UTF16BE_TO_SHIFTJIS( const char *Src, char *Dest ) +{ + CONVSTRING_BEGIN + while( ConvString_SrcCode_UTF16BE( SrcStr, Unicode ) ) + ConvString_DestCode_SHIFTJIS( DestStr, Unicode, DestSize ) ; + ConvString_1BYTE_NULL_CHAR( DestStr, DestSize ) ; + return DestSize ; +} + +// ConvString の UTF8 → ShiftJIS 高速処理用 +__inline int ConvString_UTF8_TO_SHIFTJIS( const char *Src, char *Dest ) +{ + CONVSTRING_BEGIN + while( ConvString_SrcCode_UTF8( SrcStr, Unicode ) ) + ConvString_DestCode_SHIFTJIS( DestStr, Unicode, DestSize ) ; + ConvString_1BYTE_NULL_CHAR( DestStr, DestSize ) ; + return DestSize ; +} + +// ConvString の UTF32LE → ShiftJIS 高速処理用 +__inline int ConvString_UTF32LE_TO_SHIFTJIS( const char *Src, char *Dest ) +{ + CONVSTRING_BEGIN + while( ConvString_SrcCode_UTF32LE( SrcStr, Unicode ) ) + ConvString_DestCode_SHIFTJIS( DestStr, Unicode, DestSize ) ; + ConvString_1BYTE_NULL_CHAR( DestStr, DestSize ) ; + return DestSize ; +} + +// ConvString の UTF32BE → ShiftJIS 高速処理用 +__inline int ConvString_UTF32BE_TO_SHIFTJIS( const char *Src, char *Dest ) +{ + CONVSTRING_BEGIN + while( ConvString_SrcCode_UTF32BE( SrcStr, Unicode ) ) + ConvString_DestCode_SHIFTJIS( DestStr, Unicode, DestSize ) ; + ConvString_1BYTE_NULL_CHAR( DestStr, DestSize ) ; + return DestSize ; +} + +// 文字列を指定のコードページの文字列に変換する( 戻り値:変換後のサイズ、ヌル文字含む( 単位:バイト ) ) +extern int ConvString( const char *Src, int SrcCharCodeFormat, char *Dest, int DestCharCodeFormat ) +{ + // キャラクターコードテーブルが初期化されていなかったら初期化 + if( g_CharCodeSystem.InitializeFlag == FALSE ) + { + InitCharCode() ; + } + + CHARCODETABLE_INITCHECK( SrcCharCodeFormat ) + CHARCODETABLE_INITCHECK( DestCharCodeFormat ) + + // 高速処理用の関数がある場合はそちらを使用する + switch( SrcCharCodeFormat ) + { + case CHARCODEFORMAT_SHIFTJIS : + switch( DestCharCodeFormat ) + { + case CHARCODEFORMAT_UTF16LE : return ConvString_SHIFTJIS_TO_UTF16LE( Src, Dest ) ; + case CHARCODEFORMAT_UTF16BE : return ConvString_SHIFTJIS_TO_UTF16BE( Src, Dest ) ; + case CHARCODEFORMAT_UTF8 : return ConvString_SHIFTJIS_TO_UTF8( Src, Dest ) ; + case CHARCODEFORMAT_UTF32LE : return ConvString_SHIFTJIS_TO_UTF32LE( Src, Dest ) ; + case CHARCODEFORMAT_UTF32BE : return ConvString_SHIFTJIS_TO_UTF32BE( Src, Dest ) ; + } + break ; + + case CHARCODEFORMAT_UTF16LE : + switch( DestCharCodeFormat ) + { + case CHARCODEFORMAT_SHIFTJIS : return ConvString_UTF16LE_TO_SHIFTJIS( Src, Dest ) ; + case CHARCODEFORMAT_UTF16BE : return ConvString_UTF16LE_TO_UTF16BE( Src, Dest ) ; + case CHARCODEFORMAT_UTF8 : return ConvString_UTF16LE_TO_UTF8( Src, Dest ) ; + case CHARCODEFORMAT_UTF32LE : return ConvString_UTF16LE_TO_UTF32LE( Src, Dest ) ; + case CHARCODEFORMAT_UTF32BE : return ConvString_UTF16LE_TO_UTF32BE( Src, Dest ) ; + } + break ; + + case CHARCODEFORMAT_UTF16BE : + switch( DestCharCodeFormat ) + { + case CHARCODEFORMAT_SHIFTJIS : return ConvString_UTF16BE_TO_SHIFTJIS( Src, Dest ) ; + case CHARCODEFORMAT_UTF16LE : return ConvString_UTF16BE_TO_UTF16LE( Src, Dest ) ; + case CHARCODEFORMAT_UTF8 : return ConvString_UTF16BE_TO_UTF8( Src, Dest ) ; + case CHARCODEFORMAT_UTF32LE : return ConvString_UTF16BE_TO_UTF32LE( Src, Dest ) ; + case CHARCODEFORMAT_UTF32BE : return ConvString_UTF16BE_TO_UTF32BE( Src, Dest ) ; + } + break ; + + case CHARCODEFORMAT_UTF8 : + switch( DestCharCodeFormat ) + { + case CHARCODEFORMAT_SHIFTJIS : return ConvString_UTF8_TO_SHIFTJIS( Src, Dest ) ; + case CHARCODEFORMAT_UTF16LE : return ConvString_UTF8_TO_UTF16LE( Src, Dest ) ; + case CHARCODEFORMAT_UTF16BE : return ConvString_UTF8_TO_UTF16BE( Src, Dest ) ; + case CHARCODEFORMAT_UTF32LE : return ConvString_UTF8_TO_UTF32LE( Src, Dest ) ; + case CHARCODEFORMAT_UTF32BE : return ConvString_UTF8_TO_UTF32BE( Src, Dest ) ; + } + break ; + + case CHARCODEFORMAT_UTF32LE : + switch( DestCharCodeFormat ) + { + case CHARCODEFORMAT_SHIFTJIS : return ConvString_UTF32LE_TO_SHIFTJIS( Src, Dest ) ; + case CHARCODEFORMAT_UTF16LE : return ConvString_UTF32LE_TO_UTF16LE( Src, Dest ) ; + case CHARCODEFORMAT_UTF16BE : return ConvString_UTF32LE_TO_UTF16BE( Src, Dest ) ; + case CHARCODEFORMAT_UTF8 : return ConvString_UTF32LE_TO_UTF8( Src, Dest ) ; + case CHARCODEFORMAT_UTF32BE : return ConvString_UTF32LE_TO_UTF32BE( Src, Dest ) ; + } + break ; + + case CHARCODEFORMAT_UTF32BE : + switch( DestCharCodeFormat ) + { + case CHARCODEFORMAT_SHIFTJIS : return ConvString_UTF32BE_TO_SHIFTJIS( Src, Dest ) ; + case CHARCODEFORMAT_UTF16LE : return ConvString_UTF32BE_TO_UTF16LE( Src, Dest ) ; + case CHARCODEFORMAT_UTF16BE : return ConvString_UTF32BE_TO_UTF16BE( Src, Dest ) ; + case CHARCODEFORMAT_UTF8 : return ConvString_UTF32BE_TO_UTF8( Src, Dest ) ; + case CHARCODEFORMAT_UTF32LE : return ConvString_UTF32BE_TO_UTF32LE( Src, Dest ) ; + } + break ; + } + + // 無かった場合は共通の処理を行う + { + int DestSize ; + u32 SrcCode ; + u32 DestCode ; + u8 *DestStr ; + const u8 *SrcStr ; + int UseSrcSize ; + int WriteSize ; + + SrcStr = ( u8 * )Src ; + DestStr = ( u8 * )Dest ; + DestSize = 0 ; + for(;;) + { + SrcCode = GetCharCode_inline( ( const char * )SrcStr, SrcCharCodeFormat, &UseSrcSize ) ; + if( SrcCode == 0 ) + { + break ; + } + SrcStr += UseSrcSize ; + + DestCode = ConvCharCode_inline( SrcCode, SrcCharCodeFormat, DestCharCodeFormat ) ; + + WriteSize = PutCharCode_inline( DestCode, DestCharCodeFormat, ( char * )DestStr ) ; + if( DestStr != NULL ) + { + DestStr += WriteSize ; + } + DestSize += WriteSize ; + } + + switch( GetCharCodeFormatUnitSize_inline( DestCharCodeFormat ) ) + { + case 1 : + if( DestStr != NULL ) + { + ( ( u8 * )DestStr )[ 0 ] = 0 ; + DestStr += 1; + } + DestSize += 1 ; + break ; + + case 2 : + if( DestStr != NULL ) + { + ( ( u16 * )DestStr )[ 0 ] = 0 ; + DestStr += 2; + } + DestSize += 2 ; + break ; + + case 4 : + if( DestStr != NULL ) + { + ( ( u32 * )DestStr )[ 0 ] = 0 ; + DestStr += 4 ; + } + DestSize += 4 ; + break ; + } + + return DestSize ; + } +} + +// 文字列に含まれる文字数を取得する +extern int GetStringCharNum( const char *String, int CharCodeFormat ) +{ + u32 CharCode ; + int CharBytes ; + int Count ; + int Address ; + + Address = 0 ; + Count = 0 ; + for(;;) + { + CharCode = GetCharCode_inline( ( const char * )&( ( u8 * )String )[ Address ], CharCodeFormat, &CharBytes ) ; + if( CharCode == 0 ) + { + break ; + } + + Address += CharBytes ; + Count ++ ; + } + + return Count ; +} + +// 指定番号の文字のアドレスを取得する +extern const char *GetStringCharAddress( const char *String, int CharCodeFormat, int Index ) +{ + u32 CharCode ; + int CharBytes ; + int Count ; + int Address ; + + Address = 0 ; + Count = 0 ; + for(;;) + { + if( Count == Index ) + { + return ( const char * )&( ( u8 * )String )[ Address ] ; + } + + CharCode = GetCharCode_inline( ( const char * )&( ( u8 * )String )[ Address ], CharCodeFormat, &CharBytes ) ; + if( CharCode == 0 ) + { + break ; + } + + Address += CharBytes ; + Count ++ ; + } + + return NULL ; +} + +// 指定番号の文字のコードを取得する +extern u32 GetStringCharCode( const char *String, int CharCodeFormat, int Index ) +{ + u32 CharCode ; + int CharBytes ; + int Count ; + int Address ; + + Address = 0 ; + Count = 0 ; + for(;;) + { + CharCode = GetCharCode_inline( ( const char * )&( ( u8 * )String )[ Address ], CharCodeFormat, &CharBytes ) ; + if( CharCode == 0 || Count == Index ) + { + break ; + } + + Address += CharBytes ; + Count ++ ; + } + + return CharCode ; +} + + + + + + + + + + + + + + + + + + + + + + +extern void CL_strcpy( int CharCodeFormat, char *Dest, const char *Src ) +{ + int i ; + + switch( GetCharCodeFormatUnitSize_inline( CharCodeFormat ) ) + { + case 1 : + for( i = 0 ; ( ( u8 * )Src )[ i ] != 0 ; i ++ ) + { + ( ( u8 * )Dest )[ i ] = ( ( u8 * )Src )[ i ] ; + } + ( ( u8 * )Dest )[ i ] = 0 ; + break ; + + case 2 : + for( i = 0 ; ( ( u16 * )Src )[ i ] != 0 ; i ++ ) + { + ( ( u16 * )Dest )[ i ] = ( ( u16 * )Src )[ i ] ; + } + ( ( u16 * )Dest )[ i ] = 0 ; + break ; + + case 4 : + for( i = 0 ; ( ( u32 * )Src )[ i ] != 0 ; i ++ ) + { + ( ( u32 * )Dest )[ i ] = ( ( u32 * )Src )[ i ] ; + } + ( ( u32 * )Dest )[ i ] = 0 ; + break ; + } +} + +extern void CL_strcpy_s( int CharCodeFormat, char *Dest, size_t BufferBytes, const char *Src ) +{ + size_t i ; + + switch( GetCharCodeFormatUnitSize_inline( CharCodeFormat ) ) + { + case 1 : + if( BufferBytes < 1 ) + { + return ; + } + for( i = 0 ; i * 1 < BufferBytes - 1 && ( ( u8 * )Src )[ i ] != 0 ; i ++ ) + { + ( ( u8 * )Dest )[ i ] = ( ( u8 * )Src )[ i ] ; + } + ( ( u8 * )Dest )[ i ] = 0 ; + break ; + + case 2 : + if( BufferBytes < 2 ) + { + return ; + } + for( i = 0 ; i * 2 < BufferBytes - 2 && ( ( u16 * )Src )[ i ] != 0 ; i ++ ) + { + ( ( u16 * )Dest )[ i ] = ( ( u16 * )Src )[ i ] ; + } + ( ( u16 * )Dest )[ i ] = 0 ; + break ; + + case 4 : + if( BufferBytes < 4 ) + { + return ; + } + for( i = 0 ; i * 4 < BufferBytes - 4 && ( ( u32 * )Src )[ i ] != 0 ; i ++ ) + { + ( ( u32 * )Dest )[ i ] = ( ( u32 * )Src )[ i ] ; + } + ( ( u32 * )Dest )[ i ] = 0 ; + break ; + } +} + +extern void CL_strncpy( int CharCodeFormat, char *Dest, const char *Src, int Num ) +{ + int i ; + + switch( GetCharCodeFormatUnitSize_inline( CharCodeFormat ) ) + { + case 1 : + for( i = 0 ; i < Num && ( ( u8 * )Src )[ i ] != 0 ; i ++ ) + { + ( ( u8 * )Dest )[ i ] = ( ( u8 * )Src )[ i ] ; + } + for( ; i < Num ; i ++ ) + { + ( ( u8 * )Dest )[ i ] = 0 ; + } + break ; + + case 2 : + for( i = 0 ; i < Num && ( ( u16 * )Src )[ i ] != 0 ; i ++ ) + { + ( ( u16 * )Dest )[ i ] = ( ( u16 * )Src )[ i ] ; + } + for( ; i < Num ; i ++ ) + { + ( ( u16 * )Dest )[ i ] = 0 ; + } + break ; + + case 4 : + for( i = 0 ; i < Num && ( ( u32 * )Src )[ i ] != 0 ; i ++ ) + { + ( ( u32 * )Dest )[ i ] = ( ( u32 * )Src )[ i ] ; + } + for( ; i < Num ; i ++ ) + { + ( ( u32 * )Dest )[ i ] = 0 ; + } + break ; + } +} + +extern void CL_strncpy_s( int CharCodeFormat, char *Dest, size_t BufferBytes, const char *Src, int Num ) +{ + int i ; + + switch( GetCharCodeFormatUnitSize_inline( CharCodeFormat ) ) + { + case 1 : + if( BufferBytes < 1 ) + { + return ; + } + if( Num > ( int )BufferBytes ) + { + Num = ( int )BufferBytes ; + } + for( i = 0 ; i < Num && ( ( u8 * )Src )[ i ] != 0 ; i ++ ) + { + ( ( u8 * )Dest )[ i ] = ( ( u8 * )Src )[ i ] ; + } + for( ; i < Num ; i ++ ) + { + ( ( u8 * )Dest )[ i ] = 0 ; + } + break ; + + case 2 : + if( BufferBytes < 2 ) + { + return ; + } + if( Num > ( int )( BufferBytes / 2 ) ) + { + Num = ( int )( BufferBytes / 2 ) ; + } + for( i = 0 ; i < Num && ( ( u16 * )Src )[ i ] != 0 ; i ++ ) + { + ( ( u16 * )Dest )[ i ] = ( ( u16 * )Src )[ i ] ; + } + for( ; i < Num ; i ++ ) + { + ( ( u16 * )Dest )[ i ] = 0 ; + } + break ; + + case 4 : + if( BufferBytes < 4 ) + { + return ; + } + if( Num > ( int )( BufferBytes / 4 ) ) + { + Num = ( int )( BufferBytes / 4 ) ; + } + for( i = 0 ; i < Num && ( ( u32 * )Src )[ i ] != 0 ; i ++ ) + { + ( ( u32 * )Dest )[ i ] = ( ( u32 * )Src )[ i ] ; + } + for( ; i < Num ; i ++ ) + { + ( ( u32 * )Dest )[ i ] = 0 ; + } + break ; + } +} + +extern void CL_strcat( int CharCodeFormat, char *Dest, const char *Src ) +{ + int i ; + + switch( GetCharCodeFormatUnitSize_inline( CharCodeFormat ) ) + { + case 1 : + for( i = 0 ; ( ( u8 * )Dest )[ i ] != 0 ; i ++ ){} + CL_strcpy( CharCodeFormat, ( char * )&( ( u8 * )Dest )[ i ], Src ) ; + break ; + + case 2 : + for( i = 0 ; ( ( u16 * )Dest )[ i ] != 0 ; i ++ ){} + CL_strcpy( CharCodeFormat, ( char * )&( ( u16 * )Dest )[ i ], Src ) ; + break ; + + case 4 : + for( i = 0 ; ( ( u32 * )Dest )[ i ] != 0 ; i ++ ){} + CL_strcpy( CharCodeFormat, ( char * )&( ( u32 * )Dest )[ i ], Src ) ; + break ; + } +} + +extern void CL_strcat_s( int CharCodeFormat, char *Dest, size_t BufferBytes, const char *Src ) +{ + size_t i ; + + switch( GetCharCodeFormatUnitSize_inline( CharCodeFormat ) ) + { + case 1 : + for( i = 0 ; ( ( u8 * )Dest )[ i ] != 0 ; i ++ ){} + if( i >= BufferBytes - 1 ) + { + return ; + } + CL_strcpy_s( CharCodeFormat, ( char * )&( ( u8 * )Dest )[ i ], BufferBytes - i, Src ) ; + break ; + + case 2 : + for( i = 0 ; ( ( u16 * )Dest )[ i ] != 0 ; i ++ ){} + if( i * 2 >= BufferBytes - 2 ) + { + return ; + } + CL_strcpy_s( CharCodeFormat, ( char * )&( ( u16 * )Dest )[ i ], BufferBytes - i * 2, Src ) ; + break ; + + case 4 : + for( i = 0 ; ( ( u32 * )Dest )[ i ] != 0 ; i ++ ){} + if( i * 4 >= BufferBytes - 4 ) + { + return ; + } + CL_strcpy_s( CharCodeFormat, ( char * )&( ( u32 * )Dest )[ i ], BufferBytes - i * 4, Src ) ; + break ; + } +} + +extern const char *CL_strstr( int CharCodeFormat, const char *Str1, const char *Str2 ) +{ + int i, j ; + + switch( GetCharCodeFormatUnitSize_inline( CharCodeFormat ) ) + { + case 1 : + for( i = 0 ; ( ( u8 * )Str1 )[ i ] != 0 ; i ++ ) + { + for( j = 0 ; ( ( u8 * )Str2 )[ j ] != 0 && + ( ( u8 * )Str1 )[ i + j ] != 0 && + ( ( u8 * )Str1 )[ i + j ] == ( ( u8 * )Str2 )[ j ] ; j ++ ){} + + if( ( ( u8 * )Str2 )[ j ] == 0 ) + { + return ( const char * )&( ( u8 * )Str1 )[ i ] ; + } + + if( ( ( u8 * )Str1 )[ i + j ] == 0 ) + { + return NULL ; + } + } + break ; + + case 2 : + for( i = 0 ; ( ( u16 * )Str1 )[ i ] != 0 ; i ++ ) + { + for( j = 0 ; ( ( u16 * )Str2 )[ j ] != 0 && + ( ( u16 * )Str1 )[ i + j ] != 0 && + ( ( u16 * )Str1 )[ i + j ] == ( ( u16 * )Str2 )[ j ] ; j ++ ){} + + if( ( ( u16 * )Str2 )[ j ] == 0 ) + { + return ( const char * )&( ( u16 * )Str1 )[ i ] ; + } + + if( ( ( u16 * )Str1 )[ i + j ] == 0 ) + { + return NULL ; + } + } + break ; + + case 4 : + for( i = 0 ; ( ( u32 * )Str1 )[ i ] != 0 ; i ++ ) + { + for( j = 0 ; ( ( u32 * )Str2 )[ j ] != 0 && + ( ( u32 * )Str1 )[ i + j ] != 0 && + ( ( u32 * )Str1 )[ i + j ] == ( ( u32 * )Str2 )[ j ] ; j ++ ){} + + if( ( ( u32 * )Str2 )[ j ] == 0 ) + { + return ( const char * )&( ( u32 * )Str1 )[ i ] ; + } + + if( ( ( u32 * )Str1 )[ i + j ] == 0 ) + { + return NULL ; + } + } + break ; + } + + return NULL ; +} + +extern int CL_strlen( int CharCodeFormat, const char *Str ) +{ + int i ; + + switch( GetCharCodeFormatUnitSize_inline( CharCodeFormat ) ) + { + case 1 : + for( i = 0 ; ( ( u8 * )Str )[ i ] != 0 ; i ++ ){} + return i ; + + case 2 : + for( i = 0 ; ( ( u16 * )Str )[ i ] != 0 ; i ++ ){} + return i ; + + case 4 : + for( i = 0 ; ( ( u32 * )Str )[ i ] != 0 ; i ++ ){} + return i ; + } + + return 0 ; +} + +extern int CL_strcmp( int CharCodeFormat, const char *Str1, const char *Str2 ) +{ + int i ; + + switch( GetCharCodeFormatUnitSize_inline( CharCodeFormat ) ) + { + case 1 : + for( i = 0 ; ( ( u8 * )Str1 )[ i ] != 0 && + ( ( u8 * )Str2 )[ i ] != 0 && + ( ( u8 * )Str1 )[ i ] == ( ( u8 * )Str2 )[ i ] ; i ++ ){} + if( ( ( u8 * )Str1 )[ i ] == 0 && + ( ( u8 * )Str2 )[ i ] == 0 ) + { + return 0 ; + } + return ( ( u8 * )Str1 )[ i ] < ( ( u8 * )Str2 )[ i ] ? -1 : 1 ; + + case 2 : + for( i = 0 ; ( ( u16 * )Str1 )[ i ] != 0 && + ( ( u16 * )Str2 )[ i ] != 0 && + ( ( u16 * )Str1 )[ i ] == ( ( u16 * )Str2 )[ i ] ; i ++ ){} + if( ( ( u16 * )Str1 )[ i ] == 0 && + ( ( u16 * )Str2 )[ i ] == 0 ) + { + return 0 ; + } + return ( ( u16 * )Str1 )[ i ] < ( ( u16 * )Str2 )[ i ] ? -1 : 1 ; + + case 4 : + for( i = 0 ; ( ( u32 * )Str1 )[ i ] != 0 && + ( ( u32 * )Str2 )[ i ] != 0 && + ( ( u32 * )Str1 )[ i ] == ( ( u32 * )Str2 )[ i ] ; i ++ ){} + if( ( ( u32 * )Str1 )[ i ] == 0 && + ( ( u32 * )Str2 )[ i ] == 0 ) + { + return 0 ; + } + return ( ( u32 * )Str1 )[ i ] < ( ( u32 * )Str2 )[ i ] ? -1 : 1 ; + } + + return 0 ; +} + +extern int CL_strcmp_str2_ascii( int CharCodeFormat, const char *Str1, const char *Str2 ) +{ + int i ; + + switch( GetCharCodeFormatUnitSize_inline( CharCodeFormat ) ) + { + case 1 : + for( i = 0 ; ( ( u8 * )Str1 )[ i ] != 0 && + ( ( u8 * )Str2 )[ i ] != 0 && + ( ( u8 * )Str1 )[ i ] == ( ( u8 * )Str2 )[ i ] ; i ++ ){} + if( ( ( u8 * )Str1 )[ i ] == 0 && + ( ( u8 * )Str2 )[ i ] == 0 ) + { + return 0 ; + } + return ( ( u8 * )Str1 )[ i ] < ( ( u8 * )Str2 )[ i ] ? -1 : 1 ; + + case 2 : + for( i = 0 ; ( ( u16 * )Str1 )[ i ] != 0 && + ( ( u8 * )Str2 )[ i ] != 0 && + ( ( u16 * )Str1 )[ i ] == ( ( u8 * )Str2 )[ i ] ; i ++ ){} + if( ( ( u16 * )Str1 )[ i ] == 0 && + ( ( u8 * )Str2 )[ i ] == 0 ) + { + return 0 ; + } + return ( ( u16 * )Str1 )[ i ] < ( ( u8 * )Str2 )[ i ] ? -1 : 1 ; + + case 4 : + for( i = 0 ; ( ( u32 * )Str1 )[ i ] != 0 && + ( ( u8 * )Str2 )[ i ] != 0 && + ( ( u32 * )Str1 )[ i ] == ( ( u8 * )Str2 )[ i ] ; i ++ ){} + if( ( ( u32 * )Str1 )[ i ] == 0 && + ( ( u8 * )Str2 )[ i ] == 0 ) + { + return 0 ; + } + return ( ( u32 * )Str1 )[ i ] < ( ( u8 * )Str2 )[ i ] ? -1 : 1 ; + } + + return 0 ; +} + +extern int CL_stricmp( int CharCodeFormat, const char *Str1, const char *Str2 ) +{ + int i ; + u32 Str1Code ; + u32 Str2Code ; + int Str1CodeBytes ; + int Str2CodeBytes ; + + for( i = 0 ;; i += Str1CodeBytes ) + { + Str1Code = GetCharCode_inline( ( const char * )&( ( u8 * )Str1 )[ i ], CharCodeFormat, &Str1CodeBytes ) ; + Str2Code = GetCharCode_inline( ( const char * )&( ( u8 * )Str2 )[ i ], CharCodeFormat, &Str2CodeBytes ) ; + + if( Str1Code >= 0x61 && Str1Code <= 0x7a ) + { + Str1Code = Str1Code - 0x61 + 0x41 ; + } + + if( Str2Code >= 0x61 && Str2Code <= 0x7a ) + { + Str2Code = Str2Code - 0x61 + 0x41 ; + } + + if( Str1Code != Str2Code || + Str1CodeBytes != Str2CodeBytes || + Str1Code == 0 || + Str2Code == 0 ) + { + break ; + } + } + + if( Str1CodeBytes != Str2CodeBytes ) + { + return Str1CodeBytes < Str2CodeBytes ? -1 : 1 ; + } + + return Str1Code == Str2Code ? 0 : ( Str1Code < Str2Code ? -1 : 1 ) ; +} + +extern int CL_strncmp( int CharCodeFormat, const char *Str1, const char *Str2, int Size ) +{ + int i ; + + switch( GetCharCodeFormatUnitSize_inline( CharCodeFormat ) ) + { + case 1 : + for( i = 0 ; i < Size && ( ( u8 * )Str1 )[ i ] == ( ( u8 * )Str2 )[ i ] ; i ++ ){} + return i == Size ? 0 : ( ( ( u8 * )Str1 )[ i ] < ( ( u8 * )Str2 )[ i ] ? -1 : 1 ) ; + + case 2 : + for( i = 0 ; i < Size && ( ( u16 * )Str1 )[ i ] == ( ( u16 * )Str2 )[ i ] ; i ++ ){} + return i == Size ? 0 : ( ( ( u16 * )Str1 )[ i ] < ( ( u16 * )Str2 )[ i ] ? -1 : 1 ) ; + + case 3 : + for( i = 0 ; i < Size && ( ( u32 * )Str1 )[ i ] == ( ( u32 * )Str2 )[ i ] ; i ++ ){} + return i == Size ? 0 : ( ( ( u32 * )Str1 )[ i ] < ( ( u32 * )Str2 )[ i ] ? -1 : 1 ) ; + } + + return 0 ; +} + +extern const char *CL_strchr( int CharCodeFormat, const char *Str, u32 CharCode ) +{ + int i ; + u32 StrCharCode ; + int CodeBytes ; + + switch( GetCharCodeFormatUnitSize_inline( CharCodeFormat ) ) + { + case 1 : + for( i = 0 ; ( ( u8 * )Str )[ i ] != 0 ; i ++ ) + { + StrCharCode = GetCharCode_inline( ( const char * )&( ( u8 * )Str )[ i ], CharCodeFormat, &CodeBytes ) ; + if( StrCharCode == CharCode ) + { + return ( const char * )&( ( u8 * )Str )[ i ] ; + } + + if( CodeBytes > 1 ) + { + i ++ ; + } + } + return NULL ; + + case 2 : + for( i = 0 ; ( ( u16 * )Str )[ i ] != 0 ; i ++ ) + { + StrCharCode = GetCharCode_inline( ( const char * )&( ( u16 * )Str )[ i ], CharCodeFormat, &CodeBytes ) ; + if( StrCharCode == CharCode ) + { + return ( const char * )&( ( u16 * )Str )[ i ] ; + } + + if( CodeBytes > 2 ) + { + i ++ ; + } + } + return NULL ; + + case 4 : + for( i = 0 ; ( ( u32 * )Str )[ i ] != 0 ; i ++ ) + { + StrCharCode = GetCharCode_inline( ( const char * )&( ( u32 * )Str )[ i ], CharCodeFormat, &CodeBytes ) ; + if( StrCharCode == CharCode ) + { + return ( const char * )&( ( u32 * )Str )[ i ] ; + } + } + return NULL ; + } + + return NULL ; +} + +extern const char *CL_strrchr( int CharCodeFormat, const char *Str, u32 CharCode ) +{ + const char *lastp ; + u32 StrCharCode ; + int CodeBytes ; + int i ; + + lastp = NULL; + + switch( GetCharCodeFormatUnitSize_inline( CharCodeFormat ) ) + { + case 1 : + for( i = 0 ; ( ( u8 * )Str )[ i ] != 0 ; i ++ ) + { + StrCharCode = GetCharCode_inline( ( const char * )&( ( u8 * )Str )[ i ], CharCodeFormat, &CodeBytes ) ; + if( StrCharCode == CharCode ) + { + lastp = ( const char * )&( ( u8 * )Str )[ i ] ; + } + + if( CodeBytes > 1 ) + { + i ++ ; + } + } + break ; + + case 2 : + for( i = 0 ; ( ( u16 * )Str )[ i ] != 0 ; i ++ ) + { + StrCharCode = GetCharCode_inline( ( const char * )&( ( u16 * )Str )[ i ], CharCodeFormat, &CodeBytes ) ; + if( StrCharCode == CharCode ) + { + lastp = ( const char * )&( ( u16 * )Str )[ i ] ; + } + + if( CodeBytes > 2 ) + { + i ++ ; + } + } + break ; + + case 4 : + for( i = 0 ; ( ( u32 * )Str )[ i ] != 0 ; i ++ ) + { + StrCharCode = GetCharCode_inline( ( const char * )&( ( u32 * )Str )[ i ], CharCodeFormat, &CodeBytes ) ; + if( StrCharCode == CharCode ) + { + lastp = ( const char * )&( ( u32 * )Str )[ i ] ; + } + } + break ; + } + + return lastp ; +} + +extern char * CL_strupr( int CharCodeFormat, char *Str ) +{ + u32 StrCharCode ; + int CodeBytes ; + int i ; + + switch( GetCharCodeFormatUnitSize_inline( CharCodeFormat ) ) + { + case 1 : + for( i = 0 ; ( ( u8 * )Str )[ i ] != 0 ; i ++ ) + { + StrCharCode = GetCharCode_inline( ( const char * )&( ( u8 * )Str )[ i ], CharCodeFormat, &CodeBytes ) ; + if( StrCharCode >= 0x61 && StrCharCode <= 0x7a ) + { + StrCharCode = StrCharCode - 0x61 + 0x41 ; + PutCharCode_inline( StrCharCode, CharCodeFormat, ( char * )&( ( u8 * )Str )[ i ] ) ; + } + + if( CodeBytes > 1 ) + { + i ++ ; + } + } + break ; + + case 2 : + for( i = 0 ; ( ( u16 * )Str )[ i ] != 0 ; i ++ ) + { + StrCharCode = GetCharCode_inline( ( const char * )&( ( u16 * )Str )[ i ], CharCodeFormat, &CodeBytes ) ; + if( StrCharCode >= 0x61 && StrCharCode <= 0x7a ) + { + StrCharCode = StrCharCode - 0x61 + 0x41 ; + PutCharCode_inline( StrCharCode, CharCodeFormat, ( char * )&( ( u16 * )Str )[ i ] ) ; + } + + if( CodeBytes > 2 ) + { + i ++ ; + } + } + break ; + + case 4 : + for( i = 0 ; ( ( u32 * )Str )[ i ] != 0 ; i ++ ) + { + StrCharCode = GetCharCode_inline( ( const char * )&( ( u32 * )Str )[ i ], CharCodeFormat, &CodeBytes ) ; + if( StrCharCode >= 0x61 && StrCharCode <= 0x7a ) + { + StrCharCode = StrCharCode - 0x61 + 0x41 ; + PutCharCode_inline( StrCharCode, CharCodeFormat, ( char * )&( ( u32 * )Str )[ i ] ) ; + } + } + break ; + } + + return Str ; +} + +static u32 CL_vsprintf_help_getnumber( const u32 *CharCode, int *UseCharNum ) +{ + u32 Result ; + u32 AddNum ; + int i ; + u32 NumberNum ; + u32 NumberStr[ 256 ] ; + + for( NumberNum = 0 ; CharCode[ NumberNum ] >= '0' && CharCode[ NumberNum ] <= '9' ; NumberNum ++ ) + { + NumberStr[ NumberNum ] = CharCode[ NumberNum ] ; + } + + Result = 0 ; + AddNum = 1 ; + for( i = ( int )( NumberNum - 1 ) ; i >= 0 ; i -- ) + { + Result += AddNum * ( NumberStr[ i ] - '0' ) ; + AddNum *= 10 ; + } + + if( UseCharNum != NULL ) + { + *UseCharNum = ( int )NumberNum ; + } + + return Result ; +} + +// 指定の文字を指定数書き込む、戻り値は書き込んだバイト数 +static int CL_vsprintf_help_set_char( u64 Num, u32 CharCode, char *Dest, int DestCharCodeFormat ) +{ + u32 i ; + int DestSize ; + + DestSize = 0 ; + for( i = 0 ; i < Num ; i ++ ) + { + DestSize += PutCharCode_inline( CharCode, DestCharCodeFormat, ( char * )&( ( u8 * )Dest )[ DestSize ] ) ; + } + + return DestSize ; +} + +// f タイプ用の NaN 文字列化を行う、戻り値は文字数 +static int CL_vsprintf_help_ftoa_NaN_f( + int FPClass, + int Flag_Sharp, + int ZeroAdd, + int Precision, + u8 *NumberStrBuffer +) +{ + int DestSize ; + + // 精度がマイナスの場合は既定値をセット + if( Precision < 0 ) + { + Precision = 6 ; + } + + DestSize = 0 ; + // 精度が 0 の場合は Flag_Sharp があれば . を付ける + if( Precision == 0 ) + { + NumberStrBuffer[ DestSize ] = '1' ; + DestSize ++ ; + + if( Flag_Sharp ) + { + NumberStrBuffer[ DestSize ] = '.' ; + DestSize ++ ; + } + + Precision = 0 ; + } + else + { + int SetNum ; + int i ; + u8 ( *Table )[ 7 ] = NULL ; + int MaxLength = 0 ; + + // 使用するテーブルと最大使用精度長をセット + switch( FPClass ) + { + case _FPCLASS_SNAN : + case _FPCLASS_QNAN : + Table = FloatErrorStr_QNAN ; + MaxLength = 5 ; + break ; + + case _FPCLASS_NINF : + case _FPCLASS_PINF : + Table = FloatErrorStr_INF ; + MaxLength = 4 ; + break ; + } + + // 精度が文字列の最大長以上の場合は文字列を全て転送 + if( Precision >= MaxLength ) + { + SetNum = MaxLength + 2 ; + } + else + // それ以外の場合は精度 + 2 の分だけ転送 + { + SetNum = Precision + 2 ; + } + + // 書き込み + for( i = 0 ; i < SetNum ; i ++ ) + { + NumberStrBuffer[ DestSize ] = Table[ SetNum - 1 ][ i ] ; + DestSize ++ ; + } + + // 使用した分の精度を引く + Precision -= SetNum - 2 ; + + // 精度に残りがあったら 0 で埋める + if( ZeroAdd ) + { + for( i = 0 ; i < Precision ; i ++ ) + { + NumberStrBuffer[ DestSize ] = '0' ; + DestSize ++ ; + } + } + } + + return DestSize ; +} + +// e タイプ用の NaN 文字列化を行う、戻り値は文字数 +static int CL_vsprintf_help_ftoa_NaN_e( + int FPClass, + int Flag_Sharp, + int Precision, + int Big, + u8 *NumberStrBuffer +) +{ + int DestSize ; + + // 後に e+000 が付く以外は CL_vsprintf_help_ftoa_NaN_f と処理は同じ + DestSize = CL_vsprintf_help_ftoa_NaN_f( FPClass, Flag_Sharp, 1, Precision, NumberStrBuffer ) ; + + // 後にe+000 を付ける + NumberStrBuffer[ DestSize + 0 ] = Big ? 'E' : 'e' ; + NumberStrBuffer[ DestSize + 1 ] = '+' ; + NumberStrBuffer[ DestSize + 2 ] = '0' ; + NumberStrBuffer[ DestSize + 3 ] = '0' ; + NumberStrBuffer[ DestSize + 4 ] = '0' ; + DestSize += 5 ; + + return DestSize ; +} + +// g タイプ用の NaN 文字列化を行う、戻り値は文字数 +static int CL_vsprintf_help_ftoa_NaN_g( + int FPClass, + int Flag_Sharp, + int Precision, + u8 *NumberStrBuffer +) +{ + // 精度がマイナスの場合は既定値の 6 をセット + if( Precision < 0 ) + { + Precision = 6 ; + } + + // f 形式の扱いでは Precision が 1 少ない状態になる + if( Precision > 0 ) + { + Precision -- ; + } + + // 精度の数値の扱いが 1 少ないのと、精度が余分にあっても 0 が付かない以外は CL_vsprintf_help_ftoa_NaN_f と処理は同じ + return CL_vsprintf_help_ftoa_NaN_f( FPClass, Flag_Sharp, 0, Precision, NumberStrBuffer ) ; +} + +// a タイプ用の NaN 文字列化を行う、戻り値は文字数 +static int CL_vsprintf_help_ftoa_NaN_a( + int FPClass, + int Flag_Sharp, + int Precision, + int Big, + u8 *NumberStrBuffer +) +{ + int DestSize = 0 ; + + // 先頭に 0x、後に p+0 が付く以外は CL_vsprintf_help_ftoa_NaN_f と処理は同じ + NumberStrBuffer[ DestSize + 0 ] = '0' ; + NumberStrBuffer[ DestSize + 1 ] = '0' ; + DestSize += 2 ; + + DestSize += CL_vsprintf_help_ftoa_NaN_f( FPClass, Flag_Sharp, 1, Precision, &NumberStrBuffer[ DestSize ] ) ; + + NumberStrBuffer[ DestSize + 0 ] = Big ? 'P' : 'p' ; + NumberStrBuffer[ DestSize + 1 ] = '+' ; + NumberStrBuffer[ DestSize + 2 ] = '0' ; + DestSize += 3 ; + + return DestSize ; +} + +// a タイプの浮動小数点値の文字列化を行う、戻り値は書き込んだバイト数 +static int CL_vsprintf_help_ftoa_a( + double Number, + int Flag_Sharp, + int Precision, + int Big, + u8 *NumberStrBuffer +) +{ + double TopFigureNumber ; + double TempNumber ; + double TargetFigureOne ; + int LoopFlag ; + int TempNumberI ; + u8 NumberCharTemp ; + int TopFigure ; + int IntNumberNum ; + int FloatNumberNum ; + int i ; + int DestSize = 0 ; + int Zero = 0 ; + u8 NumberStrTemp[ 1024 ] ; + + // 精度が決まっていない場合は既定値の 6 をセット + if( Precision < 0 ) + { + Precision = 6 ; + } + + // マイナス値の場合はプラス値にする + if( Number < 0.0 ) + { + Number = -Number ; + } + + // ループしたかどうかのフラグを倒す + LoopFlag = 0 ; + + // 文字列化やり直しをする場合に飛ぶ位置 +LOOPLABEL : + DestSize = 0 ; + + // 16進数を表す 0x を出力する + NumberStrBuffer[ DestSize + 0 ] = '0' ; + NumberStrBuffer[ DestSize + 1 ] = 'x' ; + DestSize += 2 ; + + // 最上位の桁を探す + + // 0 の場合は特別処理 + TempNumber = Number ; + TargetFigureOne = 1.0 ; + if( Number == 0.0 ) + { + Zero = 1 ; + TopFigure = 0 ; + } + else + if( Number < 1.0 ) + { + for( TopFigure = 0 ; TempNumber < 1.0 ; TempNumber *= 2.0, TopFigure --, TargetFigureOne /= 2.0 ){} + } + else + { + for( TopFigure = 0 ; TempNumber >= 2.0 ; TempNumber /= 2.0, TopFigure ++, TargetFigureOne *= 2.0 ){} + } + TopFigureNumber = TempNumber ; + + // 最上位桁の出力 + NumberCharTemp = ( u8 )TempNumber ; + NumberStrBuffer[ DestSize ] = '0' + NumberCharTemp ; + DestSize ++ ; + + // 小数部を列挙する + TempNumber = fmod( TopFigureNumber, 1.0 ) ; + FloatNumberNum = 0 ; + for( i = 0 ; i < Precision ; i ++ ) + { + TargetFigureOne /= 16.0 ; + TempNumber *= 16.0 ; + NumberStrTemp[ FloatNumberNum ] = ( u8 )fmod( TempNumber, 16.0 ) ; + TempNumber -= ( double )NumberStrTemp[ FloatNumberNum ] ; + FloatNumberNum++ ; + } + + // 次の桁の値が 0.8 を超える場合は最後の桁の値に1を足して文字列化処理を最初からやり直す + if( LoopFlag == 0 ) + { + TempNumber *= 16.0 ; + if( fmod( TempNumber, 16.0 ) > 8.0 ) + { + Number += TargetFigureOne ; + LoopFlag = 1 ; + goto LOOPLABEL ; + } + } + + // 精度が 0 でも Flag_Sharp が有効な場合は . をセットする + if( Precision > 0 || Flag_Sharp ) + { + NumberStrBuffer[ DestSize ] = '.' ; + DestSize ++ ; + } + + // 最上位桁以下を出力する + for( i = 0 ; i < Precision ; i ++ ) + { + NumberStrBuffer[ DestSize ] = NumberToCharTable[ Big ][ NumberStrTemp[ i ] ] ; + DestSize ++ ; + } + + // 指数部の p 又は P をセットする + NumberStrBuffer[ DestSize ] = Big ? 'P' : 'p' ; + DestSize ++ ; + + // 指数部の + 又は - をセットする + if( TopFigure < 0 ) + { + TopFigure = -TopFigure ; + NumberStrBuffer[ DestSize ] = '-' ; + } + else + { + NumberStrBuffer[ DestSize ] = '+' ; + } + DestSize ++ ; + + // 指数部の数値を列挙する + if( TopFigure == 0 ) + { + IntNumberNum = 1 ; + NumberStrTemp[ 0 ] = 0 ; + } + else + { + TempNumberI = TopFigure ; + for( IntNumberNum = 0 ; TempNumberI != 0 ; TempNumberI /= 10, IntNumberNum ++ ) + { + NumberStrTemp[ IntNumberNum ] = TempNumberI % 10 ; + } + } + + // 指数部の出力 + for( i = IntNumberNum - 1 ; i >= 0 ; i -- ) + { + NumberStrBuffer[ DestSize ] = '0' + NumberStrTemp[ i ] ; + DestSize ++ ; + } + + // 終了 + return DestSize ; +} + +// e タイプの浮動小数点値の文字列化を行う、戻り値は文字数 +static int CL_vsprintf_help_ftoa_e( + double Number, + int Flag_Sharp, + int Precision, + int Big, + u8 *NumberStrBuffer +) +{ + double TopFigureNumber ; + double TargetFigureOne ; + double TempNumber ; + u8 NumberCharTemp ; + int TopFigure ; + int FloatNumberNum ; + int LoopFlag ; + int i ; + int DestSize ; + int Zero = 0 ; + u8 NumberStrTemp[ 1024 ] ; + + // 精度が決まっていない場合は既定値の 6 をセット + if( Precision < 0 ) + { + Precision = 6 ; + } + + // マイナス値の場合はプラス値にする + if( Number < 0.0 ) + { + Number = -Number ; + } + + // ループしたかどうかのフラグを倒す + LoopFlag = 0 ; + + // 文字列化やり直しをする場合に飛ぶ位置 +LOOPLABEL : + DestSize = 0 ; + + // 最上位の桁を探す + + // 0 の場合は特別処理 + TempNumber = Number ; + TargetFigureOne = 1.0 ; + if( Number == 0.0 ) + { + Zero = 1 ; + TopFigure = 0 ; + } + else + if( Number < 1.0 ) + { + for( TopFigure = 0 ; TempNumber < 1.0 ; TempNumber *= 10.0, TopFigure --, TargetFigureOne /= 10.0 ){} + } + else + { + for( TopFigure = 0 ; TempNumber >= 10.0 ; TempNumber /= 10.0, TopFigure ++, TargetFigureOne *= 10.0 ){} + } + TopFigureNumber = TempNumber ; + + // 小数部を列挙する + TempNumber = fmod( TopFigureNumber, 1.0 ) ; + FloatNumberNum = 0 ; + for( i = 0 ; i < Precision ; i ++ ) + { + TargetFigureOne /= 10.0 ; + TempNumber *= 10.0 ; + NumberStrTemp[ FloatNumberNum ] = ( u8 )fmod( TempNumber, 10.0 ) ; + TempNumber -= ( double )NumberStrTemp[ FloatNumberNum ] ; + FloatNumberNum++ ; + } + + // 次の桁の値が 0.5 を超える場合は最後の桁の値に1を足して文字列化処理を最初からやり直す + if( LoopFlag == 0 ) + { + TempNumber *= 10.0 ; + if( fmod( TempNumber, 10.0 ) > 5.0 ) + { + Number += TargetFigureOne ; + LoopFlag = 1 ; + goto LOOPLABEL ; + } + } + + // 最上位桁の出力 + NumberCharTemp = ( u8 )TopFigureNumber ; + NumberStrBuffer[ DestSize ] = '0' + NumberCharTemp ; + DestSize ++ ; + + // 精度が 0 でも Flag_Sharp が有効な場合は . をセットする + if( Precision > 0 || Flag_Sharp ) + { + NumberStrBuffer[ DestSize ] = '.' ; + DestSize ++ ; + } + + // 最上位桁以下を出力する + for( i = 0 ; i < Precision ; i ++ ) + { + NumberStrBuffer[ DestSize ] = '0' + NumberStrTemp[ i ] ; + DestSize ++ ; + } + + // 指数部の e 又は E をセットする + NumberStrBuffer[ DestSize ] = Big ? 'E' : 'e' ; + DestSize ++ ; + + // 指数部の + 又は - をセットする + if( TopFigure < 0 ) + { + TopFigure = -TopFigure ; + NumberStrBuffer[ DestSize ] = '-' ; + } + else + { + NumberStrBuffer[ DestSize ] = '+' ; + } + DestSize ++ ; + + // 指数部の3桁を出力 + NumberStrBuffer[ DestSize + 0 ] = '0' + ( TopFigure / 100 ) % 10 ; + NumberStrBuffer[ DestSize + 1 ] = '0' + ( TopFigure / 10 ) % 10 ; + NumberStrBuffer[ DestSize + 2 ] = '0' + TopFigure % 10 ; + DestSize += 3 ; + + // 終了 + return DestSize ; +} + +// f タイプの浮動小数点値の文字列化を行う、戻り値は文字数 +static int CL_vsprintf_help_ftoa_f( + double Number, + int Flag_Sharp, + int Precision, + u8 *NumberStrBuffer +) +{ + double TempNumber ; + double TargetFigureOne ; + int LoopFlag ; + int IntNumberNum ; + int FloatNumberNum ; + int i ; + int DestSize ; + u8 NumberStrTemp[ 1024 ] ; + + // 精度が決まっていない場合は既定値の 6 をセット + if( Precision < 0 ) + { + Precision = 6 ; + } + + // マイナス値の場合はプラス値にする + if( Number < 0.0 ) + { + Number = -Number ; + } + + // ループしたかどうかのフラグを倒す + LoopFlag = 0 ; + + // 文字列化やり直しをする場合に飛ぶ位置 +LOOPLABEL : + DestSize = 0 ; + + IntNumberNum = 0 ; + TempNumber = Number - fmod( Number, 1.0 ) ; + if( Number < 1.0 ) + { + // ゼロ以下の場合は整数部の数値は 0 のみ出力 + NumberStrBuffer[ DestSize ] = '0' ; + DestSize ++ ; + IntNumberNum ++ ; + } + else + { + // 整数部の数値を列挙する + do + { + NumberStrTemp[ IntNumberNum ] = ( u8 )fmod( TempNumber, 10.0 ) ; + TempNumber -= ( double )NumberStrTemp[ IntNumberNum ] ; + IntNumberNum ++ ; + TempNumber /= 10.0 ; + }while( TempNumber >= 1.0 ) ; + + // 整数部の数値をセットする + for( i = IntNumberNum - 1 ; i >= 0 ; i -- ) + { + NumberStrBuffer[ DestSize ] = '0' + NumberStrTemp[ i ] ; + DestSize ++ ; + } + } + + // 小数部を列挙する + TempNumber = fmod( Number, 1.0 ) ; + FloatNumberNum = 0 ; + TargetFigureOne = 1.0 ; + for( i = 0 ; i < Precision ; i ++ ) + { + TargetFigureOne /= 10.0 ; + TempNumber *= 10.0 ; + NumberStrTemp[ FloatNumberNum ] = ( u8 )fmod( TempNumber, 10.0 ) ; + TempNumber -= ( double )NumberStrTemp[ FloatNumberNum ] ; + FloatNumberNum++ ; + } + + // 次の桁の値が 0.5 を超える場合は最後の桁の値に1を足して文字列化処理を最初からやり直す + if( LoopFlag == 0 ) + { + TempNumber *= 10.0 ; + if( fmod( TempNumber, 10.0 ) > 5.0 ) + { + Number += TargetFigureOne ; + LoopFlag = 1 ; + goto LOOPLABEL ; + } + } + + // 精度が 0 で # もない場合はここで終了 + if( Precision == 0 && Flag_Sharp == 0 ) + { + return DestSize ; + } + + // . をセット + NumberStrBuffer[ DestSize ] = '.' ; + DestSize ++ ; + + // 小数部を出力 + for( i = 0 ; i < FloatNumberNum ; i ++ ) + { + NumberStrBuffer[ DestSize ] = '0' + NumberStrTemp[ i ] ; + DestSize ++ ; + } + + // 終了 + return DestSize ; +} + +// g タイプの浮動小数点値の文字列化を行う、戻り値は文字数 +static int CL_vsprintf_help_ftoa_g( + double Number, + int Flag_Sharp, + int Precision, + int Big, + u8 *NumberStrBuffer +) +{ + double TopFigureNumber ; + double TempNumber ; + double TargetFigureOne ; + int LoopFlag ; + u8 NumberCharTemp ; + int TopFigure ; + int LastNonZeroFigure ; + int FloatNumberNum ; + int i ; + int PrecisionF ; + int DestSize = 0 ; + int Zero = 0 ; + u8 NumberStrTemp[ 1024 ] ; + + // 精度が決まっていない場合は既定値の 6 をセット + if( Precision < 0 ) + { + Precision = 6 ; + } + else + // g では Precision が 0 という扱いは無いので、0 の場合は 1 にする + if( Precision == 0 ) + { + Precision = 1 ; + } + + // マイナス値の場合はプラス値にする + if( Number < 0.0 ) + { + Number = -Number ; + } + + // ループしたかどうかのフラグを倒す + LoopFlag = 0 ; + + // 文字列化やり直しをする場合に飛ぶ位置 +LOOPLABEL : + DestSize = 0 ; + + // 最上位の桁を探す + + // 0 の場合は特別処理 + TempNumber = Number ; + TargetFigureOne = 1.0 ; + if( Number == 0.0 ) + { + Zero = 1 ; + TopFigure = 0 ; + } + else + if( Number < 1.0 ) + { + for( TopFigure = 0 ; TempNumber < 1.0 ; TempNumber *= 10.0, TopFigure --, TargetFigureOne /= 10.0 ){} + } + else + { + for( TopFigure = 0 ; TempNumber >= 10.0 ; TempNumber /= 10.0, TopFigure ++, TargetFigureOne *= 10.0 ){} + } + TopFigureNumber = TempNumber ; + + // 小数部を列挙する + LastNonZeroFigure = -1 ; + TempNumber = fmod( TopFigureNumber, 1.0 ) ; + FloatNumberNum = 0 ; + for( i = 0 ; i < Precision - 1 ; i ++ ) + { + TargetFigureOne /= 10.0 ; + TempNumber *= 10.0 ; + NumberStrTemp[ FloatNumberNum ] = ( u8 )fmod( TempNumber, 10.0 ) ; + TempNumber -= ( double )NumberStrTemp[ FloatNumberNum ] ; + + // 0 ではなかったら、「0では無い桁の位置」を保存 + if( NumberStrTemp[ FloatNumberNum ] != 0 ) + { + LastNonZeroFigure = FloatNumberNum ; + } + + FloatNumberNum++ ; + } + + // 次の桁の値が 0.5 を超える場合は最後の桁の値に1を足して文字列化処理を最初からやり直す + if( LoopFlag == 0 ) + { + TempNumber *= 10.0 ; + if( fmod( TempNumber, 10.0 ) > 5.0 ) + { + Number += TargetFigureOne ; + LoopFlag = 1 ; + goto LOOPLABEL ; + } + } + + // 指数部の表示が不要かどうかを判定 + if( TopFigure >= 0 ) + { + // 最上位桁が整数の場合は精度未満の場合は指数部の表示を行わない + if( TopFigure < Precision ) + { + // 指数部の表示を行わない場合は f 用の関数を使用する + + // 小数点以下何桁まで出力するかを決定、Flag_Sharp の指定が無い場合は精度範囲内でも不要な 0 は出力しない + if( Flag_Sharp == 0 ) + { + PrecisionF = -( TopFigure - ( LastNonZeroFigure + 1 ) ) ; + } + else + { + PrecisionF = -( TopFigure - ( Precision - 1 ) ) ; + } + if( PrecisionF < 0 ) + { + PrecisionF = 0 ; + } + return CL_vsprintf_help_ftoa_f( Number, Flag_Sharp, PrecisionF, NumberStrBuffer ) ; + } + } + else + { + // 最上位桁が小数の場合は最上位桁が 0.0001 より大きい場合は指数部の表示を行わない + if( TopFigure >= -4 ) + { + // 指数部の表示を行わない場合は f 用の関数を使用する + + // 小数点以下何桁まで出力するかを決定 + PrecisionF = -TopFigure + Precision - 1 ; + + // Flag_Sharp の指定が無い場合は、精度範囲内でも不要な 0 は出力しない + if( Flag_Sharp == 0 ) + { + if( PrecisionF > -TopFigure + LastNonZeroFigure + 1 ) + { + PrecisionF = -TopFigure + LastNonZeroFigure + 1 ; + } + } + + return CL_vsprintf_help_ftoa_f( Number, Flag_Sharp, PrecisionF, NumberStrBuffer ) ; + } + } + + // 最上位桁の出力 + NumberCharTemp = ( u8 )TopFigureNumber ; + NumberStrBuffer[ DestSize ] = '0' + NumberCharTemp ; + DestSize ++ ; + + // Flag_Sharp の指定が無い場合は Precision 以内でも小数点以下で末端から続く 0 は出力しない + if( Flag_Sharp == 0 ) + { + Precision = LastNonZeroFigure + 2 ; + } + + // 精度が 1 でも Flag_Sharp が有効な場合は . をセットする + if( Precision > 1 || Flag_Sharp ) + { + NumberStrBuffer[ DestSize ] = '.' ; + DestSize ++ ; + } + + // 最上位桁以下を出力する + for( i = 0 ; i < Precision - 1 ; i ++ ) + { + NumberStrBuffer[ DestSize ] = '0' + NumberStrTemp[ i ] ; + DestSize ++ ; + } + + // 指数部の e 又は E をセットする + NumberStrBuffer[ DestSize ] = Big ? 'E' : 'e' ; + DestSize ++ ; + + // 指数部の + をセットする + if( TopFigure < 0 ) + { + TopFigure = -TopFigure ; + NumberStrBuffer[ DestSize ] = '-' ; + } + else + { + NumberStrBuffer[ DestSize ] = '+' ; + } + DestSize ++ ; + + // 指数部の3桁を出力 + NumberStrBuffer[ DestSize + 0 ] = '0' + ( TopFigure / 100 ) % 10 ; + NumberStrBuffer[ DestSize + 1 ] = '0' + ( TopFigure / 10 ) % 10 ; + NumberStrBuffer[ DestSize + 2 ] = '0' + TopFigure % 10 ; + DestSize += 3 ; + + // 終了 + return DestSize ; +} + +// 浮動小数点値を文字列化する関数、戻り値は書き込んだバイト数 +static int CL_vsprintf_help_ftoa( + double Number, + int Type, + int Flag_Sharp, + int Flag_Zero, + int Flag_Minus, + int Flag_Plus, + int Flag_Space, + int Width, + int Precision, + char *Dest, + int DestCharCodeFormat +) +{ + int DestSize ; + u32 NumberNum ; + u32 SignedCharNum ; + int NumberMinus ; + int FPClass ; + int NaN ; + int Big ; + int i ; + int Flag_Precision ; + u8 NumberStrTemp[ 1024 ] ; + + DestSize = 0 ; + + // NaNチェック + FPClass = _fpclass( Number ) ; + NaN = 0 ; + if( FPClass == _FPCLASS_SNAN || + FPClass == _FPCLASS_QNAN || + FPClass == _FPCLASS_NINF || + FPClass == _FPCLASS_PINF ) + { + NaN = 1 ; + + // NaNの値はプラス扱い + if( FPClass == _FPCLASS_SNAN || + FPClass == _FPCLASS_QNAN ) + { + NumberMinus = 0 ; + } + else + { + // それ以外は負の無限大の場合のみマイナス扱い + NumberMinus = FPClass == _FPCLASS_NINF ? 1 : 0 ; + } + } + else + { + // 通常の値の場合の処理 + + // マイナスの値はプラスにする + NumberMinus = 0 ; + if( Number < 0.0 ) + { + Number = -Number ; + NumberMinus = 1 ; + } + } + + // 幅の指定が無い場合は仮で 0 をセット + if( Width < 0 ) + { + Width = 0 ; + } + + // 大文字かどうかをセット + Big = 0 ; + if( Type == PRINTF_TYPE_E || + Type == PRINTF_TYPE_G || + Type == PRINTF_TYPE_A ) + { + Big = 1 ; + } + + // 精度の指定があるかどうかをセット + Flag_Precision = Precision >= 0 ? 1 : 0 ; + + // 左詰め指定されている場合は Flag_Zero は無効 + if( Flag_Minus ) + { + Flag_Zero = 0 ; + } + + // Flag_Plus がある場合、Flag_Space は意味を成さない + if( Flag_Plus ) + { + Flag_Space = 0 ; + } + + // 値がマイナス値の場合、Flag_Plus, Flag_Space は意味を成さない + if( NumberMinus ) + { + Flag_Space = 0 ; + Flag_Plus = 0 ; + } + + // 数値を文字列化と文字数の算出 + if( NaN ) + { + // NaN の場合 + + switch( Type ) + { + case PRINTF_TYPE_f : + NumberNum = CL_vsprintf_help_ftoa_NaN_f( FPClass, Flag_Sharp, 1, Precision, NumberStrTemp ) ; + break ; + + case PRINTF_TYPE_e : + case PRINTF_TYPE_E : + NumberNum = CL_vsprintf_help_ftoa_NaN_e( FPClass, Flag_Sharp, Precision, Type == PRINTF_TYPE_E ? 1 : 0, NumberStrTemp ) ; + break ; + + case PRINTF_TYPE_g : + case PRINTF_TYPE_G : + NumberNum = CL_vsprintf_help_ftoa_NaN_g( FPClass, Flag_Sharp, Precision, NumberStrTemp ) ; + break ; + + case PRINTF_TYPE_a : + case PRINTF_TYPE_A : + NumberNum = CL_vsprintf_help_ftoa_NaN_a( FPClass, Flag_Sharp, Precision, Type == PRINTF_TYPE_A ? 1 : 0, NumberStrTemp ) ; + break ; + } + } + else + { + // 通常数値の場合 + + switch( Type ) + { + case PRINTF_TYPE_f : + NumberNum = CL_vsprintf_help_ftoa_f( Number, Flag_Sharp, Precision, NumberStrTemp ) ; + break ; + + case PRINTF_TYPE_e : + case PRINTF_TYPE_E : + NumberNum = CL_vsprintf_help_ftoa_e( Number, Flag_Sharp, Precision, Type == PRINTF_TYPE_E ? 1 : 0, NumberStrTemp ) ; + break ; + + case PRINTF_TYPE_g : + case PRINTF_TYPE_G : + NumberNum = CL_vsprintf_help_ftoa_g( Number, Flag_Sharp, Precision, Type == PRINTF_TYPE_G ? 1 : 0, NumberStrTemp ) ; + break ; + + case PRINTF_TYPE_a : + case PRINTF_TYPE_A : + NumberNum = CL_vsprintf_help_ftoa_a( Number, Flag_Sharp, Precision, Type == PRINTF_TYPE_A ? 1 : 0, NumberStrTemp ) ; + break ; + } + } + + // 符号やスペースの文字数を算出 + if( Flag_Space || Flag_Plus || NumberMinus ) + { + SignedCharNum = 1 ; + } + else + { + SignedCharNum = 0 ; + } + + // 幅から数字の文字数、符号文字、進数付属文字を引く + Width -= NumberNum + SignedCharNum ; + + // 左詰め指定があるかどうかで処理を分岐 + if( Flag_Minus ) + { + // 左詰め指定がある場合 + + // 符号系文字がある場合はセットする + if( NumberMinus || Flag_Plus || Flag_Space ) + { + DestSize += PutCharCode_inline( NumberMinus ? '-' : ( Flag_Plus ? '+' : ' ' ), DestCharCodeFormat, ( char * )&( ( u8 * )Dest )[ DestSize ] ) ; + } + + // 数値をセットする + for( i = 0 ; i < ( int )NumberNum ; i++ ) + { + DestSize += PutCharCode_inline( NumberStrTemp[ i ], DestCharCodeFormat, ( char * )&( ( u8 * )Dest )[ DestSize ] ) ; + } + + // 余剰幅がある場合は、スペースをセットする + if( Width > 0 ) + { + DestSize += CL_vsprintf_help_set_char( Width, ' ', ( char * )&( ( u8 * )Dest )[ DestSize ], DestCharCodeFormat ) ; + } + } + else + { + // 0詰め指定があるかどうかで処理を分岐 + if( Flag_Zero ) + { + // 符号系文字がある場合はセットする + if( NumberMinus || Flag_Plus || Flag_Space ) + { + DestSize += PutCharCode_inline( NumberMinus ? '-' : ( Flag_Plus ? '+' : ' ' ), DestCharCodeFormat, ( char * )&( ( u8 * )Dest )[ DestSize ] ) ; + } + + // 余剰幅がある場合は、0をセットする + if( Width > 0 ) + { + DestSize += CL_vsprintf_help_set_char( Width, '0', ( char * )&( ( u8 * )Dest )[ DestSize ], DestCharCodeFormat ) ; + } + } + else + { + // 余剰幅がある場合は、スペースをセットする + if( Width > 0 ) + { + DestSize += CL_vsprintf_help_set_char( Width, ' ', ( char * )&( ( u8 * )Dest )[ DestSize ], DestCharCodeFormat ) ; + } + + // 符号系文字がある場合はセットする + if( NumberMinus || Flag_Plus || Flag_Space ) + { + DestSize += PutCharCode_inline( NumberMinus ? '-' : ( Flag_Plus ? '+' : ' ' ), DestCharCodeFormat, ( char * )&( ( u8 * )Dest )[ DestSize ] ) ; + } + } + + // 数値をセットする + for( i = 0 ; i < ( int )NumberNum ; i++ ) + { + DestSize += PutCharCode_inline( NumberStrTemp[ i ], DestCharCodeFormat, ( char * )&( ( u8 * )Dest )[ DestSize ] ) ; + } + } + + return DestSize ; +} + +// 整数値を文字列化する関数、戻り値は書き込んだバイト数 +static int CL_vsprintf_help_itoa( + u64 Number, + int NumberMinus, + int Signed, + u32 Decimal, + int Flag_Sharp, + int Flag_Zero, + int Flag_Minus, + int Flag_Plus, + int Flag_Space, + int Width, + int Precision, + int Big, + char *Dest, + int DestCharCodeFormat +) +{ + int DestSize ; + u32 NumberNum ; + u32 SignedCharNum ; + u32 SharpCharNum ; + u32 PrecisionCharNum ; + int i ; + int Flag_Precision ; + u8 NumberStrTemp[ 1024 ] ; + + DestSize = 0 ; + + // 幅の指定が無い場合は仮で 0 をセット + if( Width < 0 ) + { + Width = 0 ; + } + + // 精度の指定が無い場合は既定の 1 をセット + if( Precision < 0 ) + { + Precision = 1 ; + Flag_Precision = 0 ; + } + else + { + Flag_Precision = 1 ; + } + + // 10進数以外は符号無し + if( Decimal != 10 ) + { + Signed = 0 ; + } + + // 左詰め指定されているか、精度指定がある場合は Flag_Zero は無効 + if( Flag_Minus || Flag_Precision ) + { + Flag_Zero = 0 ; + } + + // 符号が無い場合は マイナス値、Flag_Plus, Flag_Space は意味を成さない + if( Signed == 0 ) + { + NumberMinus = 0 ; + Flag_Plus = 0 ; + Flag_Space = 0 ; + } + else + { + // 符号がある場合は # は意味を成さない + Flag_Sharp = 0 ; + + // Flag_Plus がある場合、Flag_Space は意味を成さない + if( Flag_Plus ) + { + Flag_Space = 0 ; + } + + // 値がマイナス値の場合、Flag_Plus, Flag_Space は意味を成さない + if( NumberMinus ) + { + Flag_Space = 0 ; + Flag_Plus = 0 ; + } + } + + // 数値を文字列化と文字数の算出 + NumberNum = 0 ; + if( Number == 0 ) + { + // 数値が 0 でも精度が 0 ではなければ 0 の1文字を出力する + if( Precision == 0 ) + { + NumberStrTemp[ NumberNum ] = '0' ; + NumberNum ++ ; + } + } + else + { + while( Number > 0 ) + { + NumberStrTemp[ NumberNum ] = NumberToCharTable[ Big ][ Number % Decimal ] ; + NumberNum ++ ; + Number /= Decimal ; + } + } + + // 精度による文字数を算出 + if( NumberNum < ( u32 )Precision ) + { + PrecisionCharNum = Precision - NumberNum ; + } + else + { + PrecisionCharNum = 0 ; + } + + // # がある場合の文字数を算出 + SharpCharNum = 0 ; + if( Flag_Sharp ) + { + switch( Decimal ) + { + case 8 : + SharpCharNum = 1 ; + break ; + + case 16 : + SharpCharNum = 2 ; + break ; + } + } + + // 符号やスペースの文字数を算出 + if( Flag_Space || Flag_Plus || NumberMinus ) + { + SignedCharNum = 1 ; + } + else + { + SignedCharNum = 0 ; + } + + // 幅から数字の文字数、符号文字、進数付属文字を引く + Width -= NumberNum + PrecisionCharNum + SignedCharNum + SharpCharNum ; + + // 左詰め指定があるかどうかで処理を分岐 + if( Flag_Minus ) + { + // 左詰め指定がある場合 + + // 符号系文字がある場合はセットする + if( NumberMinus || Flag_Plus || Flag_Space ) + { + DestSize += PutCharCode_inline( NumberMinus ? '-' : ( Flag_Plus ? '+' : ' ' ), DestCharCodeFormat, ( char * )&( ( u8 * )Dest )[ DestSize ] ) ; + } + + // 進数付属文字がある場合は記号をセットする + if( Flag_Sharp ) + { + if( Decimal == 8 ) + { + DestSize += PutCharCode_inline( '0', DestCharCodeFormat, ( char * )&( ( u8 * )Dest )[ DestSize ] ) ; + } + else + { + DestSize += PutCharCode_inline( '0', DestCharCodeFormat, ( char * )&( ( u8 * )Dest )[ DestSize ] ) ; + DestSize += PutCharCode_inline( Big ? 'X' : 'x', DestCharCodeFormat, ( char * )&( ( u8 * )Dest )[ DestSize ] ) ; + } + } + + // 精度に足りない分の 0 をセットする + if( PrecisionCharNum > 0 ) + { + DestSize += CL_vsprintf_help_set_char( PrecisionCharNum, '0', ( char * )&( ( u8 * )Dest )[ DestSize ], DestCharCodeFormat ) ; + } + + // 数値をセットする + for( i = NumberNum - 1 ; i >= 0 ; i-- ) + { + DestSize += PutCharCode_inline( NumberStrTemp[ i ], DestCharCodeFormat, ( char * )&( ( u8 * )Dest )[ DestSize ] ) ; + } + + // 余剰幅がある場合は、スペースをセットする + if( Width > 0 ) + { + DestSize += CL_vsprintf_help_set_char( Width, ' ', ( char * )&( ( u8 * )Dest )[ DestSize ], DestCharCodeFormat ) ; + } + } + else + { + // 0詰め指定があるかどうかで処理を分岐 + if( Flag_Zero ) + { + // 符号系文字がある場合はセットする + if( NumberMinus || Flag_Plus || Flag_Space ) + { + DestSize += PutCharCode_inline( NumberMinus ? '-' : ( Flag_Plus ? '+' : ' ' ), DestCharCodeFormat, ( char * )&( ( u8 * )Dest )[ DestSize ] ) ; + } + + // 進数付属文字がある場合は記号をセットする + if( Flag_Sharp ) + { + if( Decimal == 8 ) + { + DestSize += PutCharCode_inline( '0', DestCharCodeFormat, ( char * )&( ( u8 * )Dest )[ DestSize ] ) ; + } + else + { + DestSize += PutCharCode_inline( '0', DestCharCodeFormat, ( char * )&( ( u8 * )Dest )[ DestSize ] ) ; + DestSize += PutCharCode_inline( Big ? 'X' : 'x', DestCharCodeFormat, ( char * )&( ( u8 * )Dest )[ DestSize ] ) ; + } + } + + // 余剰幅がある場合は、0をセットする + if( Width > 0 ) + { + DestSize += CL_vsprintf_help_set_char( Width, '0', ( char * )&( ( u8 * )Dest )[ DestSize ], DestCharCodeFormat ) ; + } + } + else + { + // 余剰幅がある場合は、スペースをセットする + if( Width > 0 ) + { + DestSize += CL_vsprintf_help_set_char( Width, ' ', ( char * )&( ( u8 * )Dest )[ DestSize ], DestCharCodeFormat ) ; + } + + // 符号系文字がある場合はセットする + if( NumberMinus || Flag_Plus || Flag_Space ) + { + DestSize += PutCharCode_inline( NumberMinus ? '-' : ( Flag_Plus ? '+' : ' ' ), DestCharCodeFormat, ( char * )&( ( u8 * )Dest )[ DestSize ] ) ; + } + + // 進数付属文字がある場合は記号をセットする + if( Flag_Sharp ) + { + if( Decimal == 8 ) + { + DestSize += PutCharCode_inline( '0', DestCharCodeFormat, ( char * )&( ( u8 * )Dest )[ DestSize ] ) ; + } + else + { + DestSize += PutCharCode_inline( '0', DestCharCodeFormat, ( char * )&( ( u8 * )Dest )[ DestSize ] ) ; + DestSize += PutCharCode_inline( Big ? 'X' : 'x', DestCharCodeFormat, ( char * )&( ( u8 * )Dest )[ DestSize ] ) ; + } + } + } + + // 精度に足りない分の 0 をセットする + if( PrecisionCharNum > 0 ) + { + DestSize += CL_vsprintf_help_set_char( PrecisionCharNum, '0', ( char * )&( ( u8 * )Dest )[ DestSize ], DestCharCodeFormat ) ; + } + + // 数値をセットする + for( i = NumberNum - 1 ; i >= 0 ; i-- ) + { + DestSize += PutCharCode_inline( NumberStrTemp[ i ], DestCharCodeFormat, ( char * )&( ( u8 * )Dest )[ DestSize ] ) ; + } + } + + return DestSize ; +} + +// s と S を処理する関数、戻り値は書き込んだバイト数 +static int CL_vsprintf_help_s( + char *String, + int Flag_Zero, + int Flag_Minus, + int Width, + int Precision, + char *Dest, + int DestCharCodeFormat +) +{ + int DestSize ; + u8 NullBuffer[ 128 ] ; + int StrLength ; + + DestSize = 0 ; + + // NULL の場合は(null)をセット + if( String == NULL ) + { + int TempAddr = 0 ; + TempAddr += PutCharCode_inline( '(', DestCharCodeFormat, ( char * )&NullBuffer[ TempAddr ] ) ; + TempAddr += PutCharCode_inline( 'n', DestCharCodeFormat, ( char * )&NullBuffer[ TempAddr ] ) ; + TempAddr += PutCharCode_inline( 'u', DestCharCodeFormat, ( char * )&NullBuffer[ TempAddr ] ) ; + TempAddr += PutCharCode_inline( 'l', DestCharCodeFormat, ( char * )&NullBuffer[ TempAddr ] ) ; + TempAddr += PutCharCode_inline( 'l', DestCharCodeFormat, ( char * )&NullBuffer[ TempAddr ] ) ; + TempAddr += PutCharCode_inline( ')', DestCharCodeFormat, ( char * )&NullBuffer[ TempAddr ] ) ; + TempAddr += PutCharCode_inline( 0, DestCharCodeFormat, ( char * )&NullBuffer[ TempAddr ] ) ; + + String = ( char * )NullBuffer ; + } + + // 文字列の長さを取得 + StrLength = CL_strlen( DestCharCodeFormat, String ) ; + + // 幅の指定が無い場合は仮で 0 をセット + if( Width < 0 ) + { + Width = 0 ; + } + + // 精度の指定が無い場合は文字列の長さをセット + if( Precision < 0 ) + { + Precision = StrLength ; + } + else + { + // 精度が文字列長以下の場合は精度を文字列長にする + if( Precision > StrLength ) + { + Precision = StrLength ; + } + } + + // 左詰め指定されている場合は Flag_Zero は無効 + if( Flag_Minus ) + { + Flag_Zero = 0 ; + } + + // 幅から精度を引く + Width -= Precision ; + + // 左詰め指定があるかどうかで処理を分岐 + if( Flag_Minus ) + { + // 左詰め指定がある場合 + + // 文字列をコピーする + CL_strncpy( DestCharCodeFormat, ( char * )&( ( u8 * )Dest )[ DestSize ], String, Precision ) ; + DestSize += GetCharCodeFormatUnitSize_inline( DestCharCodeFormat ) * Precision ; + + // 余剰幅がある場合は、スペースをセットする + if( Width > 0 ) + { + DestSize += CL_vsprintf_help_set_char( Width, ' ', ( char * )&( ( u8 * )Dest )[ DestSize ], DestCharCodeFormat ) ; + } + } + else + { + // 0詰め指定があるかどうかで処理を分岐 + if( Flag_Zero ) + { + // 余剰幅がある場合は、0をセットする + if( Width > 0 ) + { + DestSize += CL_vsprintf_help_set_char( Width, '0', ( char * )&( ( u8 * )Dest )[ DestSize ], DestCharCodeFormat ) ; + } + } + else + { + // 余剰幅がある場合は、スペースをセットする + if( Width > 0 ) + { + DestSize += CL_vsprintf_help_set_char( Width, ' ', ( char * )&( ( u8 * )Dest )[ DestSize ], DestCharCodeFormat ) ; + } + } + + // 文字列をコピーする + CL_strncpy( DestCharCodeFormat, ( char * )&( ( u8 * )Dest )[ DestSize ], String, Precision ) ; + DestSize += GetCharCodeFormatUnitSize_inline( DestCharCodeFormat ) * Precision ; + } + + return DestSize ; +} + +// c と C を処理する関数、戻り値は書き込んだバイト数 +static int CL_vsprintf_help_c( + u32 CharCode, + int Flag_Zero, + int Flag_Minus, + int Width, + char *Dest, + int DestCharCodeFormat +) +{ + int DestSize ; + + DestSize = 0 ; + + // 幅の指定が無い場合は仮で 1 をセット + if( Width < 0 ) + { + Width = 1 ; + } + + // 左詰め指定されている場合は Flag_Zero は無効 + if( Flag_Minus ) + { + Flag_Zero = 0 ; + } + + // 幅から1文字を引く + Width -= 1 ; + + // 左詰め指定があるかどうかで処理を分岐 + if( Flag_Minus ) + { + // 左詰め指定がある場合 + + // 文字をセットする + DestSize += PutCharCode_inline( CharCode, DestCharCodeFormat, ( char * )&( ( u8 * )Dest )[ DestSize ] ) ; + + // 余剰幅がある場合は、スペースをセットする + if( Width > 0 ) + { + DestSize += CL_vsprintf_help_set_char( Width, ' ', ( char * )&( ( u8 * )Dest )[ DestSize ], DestCharCodeFormat ) ; + } + } + else + { + // 0詰め指定があるかどうかで処理を分岐 + if( Flag_Zero ) + { + // 余剰幅がある場合は、0をセットする + if( Width > 0 ) + { + DestSize += CL_vsprintf_help_set_char( Width, '0', ( char * )&( ( u8 * )Dest )[ DestSize ], DestCharCodeFormat ) ; + } + } + else + { + // 余剰幅がある場合は、スペースをセットする + if( Width > 0 ) + { + DestSize += CL_vsprintf_help_set_char( Width, ' ', ( char * )&( ( u8 * )Dest )[ DestSize ], DestCharCodeFormat ) ; + } + } + + // 文字をセットする + DestSize += PutCharCode_inline( CharCode, DestCharCodeFormat, ( char * )&( ( u8 * )Dest )[ DestSize ] ) ; + } + + return DestSize ; +} + +extern int CL_vsprintf( int CharCodeFormat, char *Buffer, const char *FormatString, va_list Arg ) +{ + int i ; + int DestSize ; + int WriteBytes ; + u32 BaseBuffer[ 1024 ] ; + u32 *TempBuffer = NULL ; + u32 *FCode ; + int FormatStringSize ; + + // 1文字4バイト形式に変換する + FormatStringSize = StringToCharCodeString_inline( FormatString, CharCodeFormat, NULL ) ; + if( FormatStringSize + sizeof( u32 ) * 16 > sizeof( BaseBuffer ) ) + { + TempBuffer = ( u32 * )malloc( FormatStringSize + sizeof( u32 ) * 16 ) ; + if( TempBuffer == NULL ) + { + return -1 ; + } + + FCode = TempBuffer ; + } + else + { + FCode = BaseBuffer ; + } + memset( FCode, 0, FormatStringSize + sizeof( u32 ) * 16 ) ; + StringToCharCodeString_inline( FormatString, CharCodeFormat, FCode ) ; + + DestSize = 0 ; + for( i = 0 ; FCode[ i ] != 0 ; ) + { + if( FCode[ i ] == 0x25 && FCode[ i + 1 ] == 0x25 ) + { + WriteBytes = PutCharCode_inline( 0x25, CharCodeFormat, ( char * )&( ( u8 * )Buffer )[ DestSize ] ) ; + DestSize += WriteBytes ; + i += 2 ; + } + else + if( FCode[ i ] != 0x25 || FCode[ i + 1 ] == 0x25 ) + { + WriteBytes = PutCharCode_inline( FCode[ i ], CharCodeFormat, ( char * )&( ( u8 * )Buffer )[ DestSize ] ) ; + DestSize += WriteBytes ; + i ++ ; + } + else + { + int Flag_Sharp = 0 ; + int Flag_Zero = 0 ; + int Flag_Space = 0 ; + int Flag_Plus = 0 ; + int Flag_Minus = 0 ; + int FlagEnd = 0 ; + int Width = -1 ; + int Dot = 0 ; + int Precision = -1 ; + int PrecisionEnd = 0 ; + int Prefix = -1 ; + int Type = -1 ; + int LoopEnd = 0 ; + int UseCharNum ; + + i ++ ; + do + { + switch( FCode[ i ] ) + { + default : + LoopEnd = 1 ; + break ; + + case '#': + case '-': + case '+': + case ' ': + // フラグディレクティブは、フラグディレクティブを指定できる範囲から外れていたらエラーとなる + if( FlagEnd ) + { + LoopEnd = 1 ; + } + else + { + switch( FCode[ i ] ) + { + case '#': Flag_Sharp = 1 ; break ; + case '-': Flag_Minus = 1 ; break ; + case '+': Flag_Plus = 1 ; break ; + case ' ': Flag_Space = 1 ; break ; + } + i ++ ; + } + break ; + + case '.': + // 既に . があった場合、二つ以上の . はエラーとなる + if( Dot ) + { + LoopEnd = 1 ; + } + else + { + // . は精度指定の開始と共に、フラグディレクティブと文字幅指定できる範囲の終了でもある + FlagEnd = 1 ; + Dot = 1 ; + Precision = 0 ; + i ++ ; + } + break ; + + // * は . の前か後かで処理が分かれる + case '*': + // 精度指定の範囲外で数値があったらエラーとなる + if( PrecisionEnd ) + { + LoopEnd = 1 ; + } + else + { + // . の後の場合は精度、前の場合は文字幅指定 + if( Dot ) + { + Precision = va_arg( Arg, int ) ; + i ++ ; + } + else + { + Width = va_arg( Arg, int ) ; + i ++ ; + } + } + break ; + + // 数字は . の前か後かで処理が分かれる + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + // 精度指定の範囲外で数値があったらエラーとなる + if( PrecisionEnd ) + { + LoopEnd = 1 ; + } + else + { + // . の後の場合は精度、前の場合は文字幅指定 + if( Dot ) + { + Precision = ( int )CL_vsprintf_help_getnumber( &FCode[ i ], &UseCharNum ) ; + i += UseCharNum ; + } + else + { + // . の前でフラグディレクティブ指定できる範囲で '0' であった場合はフラグディレクティブとしての '0' と判断する + if( FlagEnd == 0 && FCode[ i ] == '0' ) + { + Flag_Zero = 1 ; + i ++ ; + } + else + { + // それ以外の場合は文字幅指定、文字幅指定はフラグディレクティブ範囲の終了でもある + FlagEnd = 1 ; + Width = ( int )CL_vsprintf_help_getnumber( &FCode[ i ], &UseCharNum ) ; + i += UseCharNum ; + } + } + } + break ; + + case 'h': + case 'w': + case 'l': + case 'I': + // プレフィックス指定はフラグディレクティブ、文字幅指定、ドット、精度指定範囲の終了でもある + FlagEnd = 1 ; + Dot = 1 ; + PrecisionEnd = 1 ; + switch( FCode[ i ] ) + { + case 'h': Prefix = PRINTF_SIZE_PREFIX_h ; i ++ ; break ; + case 'w': Prefix = PRINTF_SIZE_PREFIX_w ; i ++ ; break ; + case 'l': + if( FCode[ i + 1 ] == 'l' ) + { + Prefix = PRINTF_SIZE_PREFIX_ll ; + i += 2 ; + } + else + { + Prefix = PRINTF_SIZE_PREFIX_l ; + i ++ ; + } + break ; + + case 'I': + if( FCode[ i + 1 ] == '3' && FCode[ i + 2 ] == '2' ) + { + Prefix = PRINTF_SIZE_PREFIX_I32 ; + i += 3 ; + } + else + if( FCode[ i + 1 ] == '6' && FCode[ i + 2 ] == '4' ) + { + Prefix = PRINTF_SIZE_PREFIX_I64 ; + i += 3 ; + } + else + { + Prefix = PRINTF_SIZE_PREFIX_I ; + i ++ ; + } + break ; + } + break ; + + // 型指定は、型指定であると共に書式指定構文の終了でもある + case 'c': Type = PRINTF_TYPE_c ; i ++ ; LoopEnd = 1 ; break ; + case 'C': Type = PRINTF_TYPE_C ; i ++ ; LoopEnd = 1 ; break ; + case 'd': Type = PRINTF_TYPE_d ; i ++ ; LoopEnd = 1 ; break ; + case 'i': Type = PRINTF_TYPE_i ; i ++ ; LoopEnd = 1 ; break ; + case 'o': Type = PRINTF_TYPE_o ; i ++ ; LoopEnd = 1 ; break ; + case 'u': Type = PRINTF_TYPE_u ; i ++ ; LoopEnd = 1 ; break ; + case 'x': Type = PRINTF_TYPE_x ; i ++ ; LoopEnd = 1 ; break ; + case 'X': Type = PRINTF_TYPE_X ; i ++ ; LoopEnd = 1 ; break ; + case 'e': Type = PRINTF_TYPE_e ; i ++ ; LoopEnd = 1 ; break ; + case 'E': Type = PRINTF_TYPE_E ; i ++ ; LoopEnd = 1 ; break ; + case 'f': Type = PRINTF_TYPE_f ; i ++ ; LoopEnd = 1 ; break ; + case 'g': Type = PRINTF_TYPE_g ; i ++ ; LoopEnd = 1 ; break ; + case 'G': Type = PRINTF_TYPE_G ; i ++ ; LoopEnd = 1 ; break ; + case 'a': Type = PRINTF_TYPE_a ; i ++ ; LoopEnd = 1 ; break ; + case 'A': Type = PRINTF_TYPE_A ; i ++ ; LoopEnd = 1 ; break ; + case 'n': Type = PRINTF_TYPE_n ; i ++ ; LoopEnd = 1 ; break ; + case 'p': Type = PRINTF_TYPE_p ; i ++ ; LoopEnd = 1 ; break ; + case 's': Type = PRINTF_TYPE_s ; i ++ ; LoopEnd = 1 ; break ; + case 'S': Type = PRINTF_TYPE_S ; i ++ ; LoopEnd = 1 ; break ; + case 'Z': Type = PRINTF_TYPE_Z ; i ++ ; LoopEnd = 1 ; break ; + } + }while( LoopEnd == 0 ) ; + + // 型指定が無い場合はエラーなのでなにも処理しない + if( Type != -1 ) + { + switch( Type ) + { + // wchar には非対応なので c と C は同じ扱い + case PRINTF_TYPE_c : + case PRINTF_TYPE_C : + { + u32 ParamC ; + + switch( GetCharCodeFormatUnitSize_inline( CharCodeFormat ) ) + { + case 1 : + ParamC = va_arg( Arg, u8 ) ; + break ; + + case 2 : + ParamC = va_arg( Arg, u16 ) ; + break ; + + case 4 : + ParamC = va_arg( Arg, u32 ) ; + break ; + } + + WriteBytes = CL_vsprintf_help_c( + ParamC, + Flag_Zero, Flag_Minus, + Width, + ( char * )&( ( u8 * )Buffer )[ DestSize ], + CharCodeFormat + ) ; + DestSize += WriteBytes ; + } + break ; + + case PRINTF_TYPE_d : + case PRINTF_TYPE_i : + { + s64 ParamI ; + int NumberMinus ; + + switch( Prefix ) + { + default : + case PRINTF_SIZE_PREFIX_l : + case PRINTF_SIZE_PREFIX_I : + case PRINTF_SIZE_PREFIX_I32 : + ParamI = va_arg( Arg, int ) ; + break ; + + case PRINTF_SIZE_PREFIX_h : + ParamI = ( short )va_arg( Arg, int ) ; + break ; + + case PRINTF_SIZE_PREFIX_ll : + case PRINTF_SIZE_PREFIX_I64 : + ParamI = va_arg( Arg, s64 ) ; + break ; + } + + NumberMinus = 0 ; + if( ParamI < 0 ) + { + NumberMinus = 1 ; + ParamI = -ParamI ; + } + + WriteBytes = CL_vsprintf_help_itoa( + ( u64 )ParamI, + NumberMinus, + 1, // Signed + 10, // Decimal + Flag_Sharp, Flag_Zero, Flag_Minus, Flag_Plus, Flag_Space, + Width, Precision, + 0, // Big + ( char * )&( ( u8 * )Buffer )[ DestSize ], + CharCodeFormat + ) ; + DestSize += WriteBytes ; + } + break ; + + case PRINTF_TYPE_u : + case PRINTF_TYPE_o : + case PRINTF_TYPE_x : + case PRINTF_TYPE_X : + { + u64 ParamU ; + u32 Decimal ; + + switch( Type ) + { + case PRINTF_TYPE_u : + Decimal = 10 ; + break ; + + case PRINTF_TYPE_o : + Decimal = 8 ; + break ; + + case PRINTF_TYPE_x : + case PRINTF_TYPE_X : + Decimal = 16 ; + break ; + } + + switch( Prefix ) + { + default : + case PRINTF_SIZE_PREFIX_l : + case PRINTF_SIZE_PREFIX_I32 : + ParamU = va_arg( Arg, u32 ) ; + break ; + + case PRINTF_SIZE_PREFIX_I : + if( sizeof( void * ) > 4 ) + { + ParamU = va_arg( Arg, u64 ) ; + } + else + { + ParamU = va_arg( Arg, u32 ) ; + } + break ; + + case PRINTF_SIZE_PREFIX_h : + ParamU = ( u16 )va_arg( Arg, u32 ) ; + break ; + + case PRINTF_SIZE_PREFIX_ll : + case PRINTF_SIZE_PREFIX_I64 : + ParamU = va_arg( Arg, u64 ) ; + break ; + } + + WriteBytes = CL_vsprintf_help_itoa( + ParamU, + 0, // NumberMinus + 0, // Signed + Decimal, + Flag_Sharp, Flag_Zero, Flag_Minus, Flag_Plus, Flag_Space, + Width, Precision, + Type == PRINTF_TYPE_X, // Big + ( char * )&( ( u8 * )Buffer )[ DestSize ], + CharCodeFormat + ) ; + DestSize += WriteBytes ; + } + break ; + + case PRINTF_TYPE_e : + case PRINTF_TYPE_E : + case PRINTF_TYPE_f : + case PRINTF_TYPE_g : + case PRINTF_TYPE_G : + case PRINTF_TYPE_a : + case PRINTF_TYPE_A : + { + double ParamF ; + + ParamF = va_arg( Arg, double ) ; + + WriteBytes = CL_vsprintf_help_ftoa( + ParamF, + Type, + Flag_Sharp, Flag_Zero, Flag_Minus, Flag_Plus, Flag_Space, + Width, Precision, + ( char * )&( ( u8 * )Buffer )[ DestSize ], + CharCodeFormat + ) ; + DestSize += WriteBytes ; + } + break ; + + case PRINTF_TYPE_n : + // 非対応 + break ; + + case PRINTF_TYPE_p : + { + void *ParamP ; + + // 精度は強制変更 + ParamP = va_arg( Arg, void * ) ; + if( sizeof( void * ) > 4 ) + { + Precision = 16 ; + } + else + { + Precision = 8 ; + } + + WriteBytes = CL_vsprintf_help_itoa( + ( u64 )ParamP, + 0, // NumberMinus + 0, // Signed + 16, + Flag_Sharp, Flag_Zero, Flag_Minus, Flag_Plus, Flag_Space, + Width, Precision, + 1, // Big + ( char * )&( ( u8 * )Buffer )[ DestSize ], + CharCodeFormat + ) ; + DestSize += WriteBytes ; + } + break ; + + // wchar には非対応なので s と S は同じ扱い + case PRINTF_TYPE_s : + case PRINTF_TYPE_S : + { + char *ParamP ; + + ParamP = va_arg( Arg, char * ) ; + + WriteBytes = CL_vsprintf_help_s( + ParamP, + Flag_Zero, Flag_Minus, + Width, Precision, + ( char * )&( ( u8 * )Buffer )[ DestSize ], + CharCodeFormat + ) ; + DestSize += WriteBytes ; + } + break ; + + case PRINTF_TYPE_Z : + // 非対応 + break ; + } + } + } + } + + // 終端文字をセット + DestSize += PutCharCode_inline( 0, CharCodeFormat, ( char * )&( ( u8 * )Buffer )[ DestSize ] ) ; + + if( TempBuffer != NULL ) + { + free( TempBuffer ) ; + TempBuffer = NULL ; + } + + return 0 ; +} + +extern int CL_sprintf( int CharCodeFormat, char *Buffer, const char *FormatString, ... ) +{ + int Result ; + va_list VaList ; + + va_start( VaList, FormatString ) ; + + Result = CL_vsprintf( CharCodeFormat, Buffer, FormatString, VaList ) ; + + va_end( VaList ) ; + + return Result ; +} + +extern char *CL_itoa( int CharCodeFormat, int Value, char *Buffer, int Radix ) +{ + int i ; + u8 Number[ 512 ] ; + int NumberNum ; + int DestSize ; + + DestSize = 0 ; + + // 数値が 0 の場合は 0 のみセット + if( Value == 0 ) + { + DestSize += PutCharCode_inline( '0', CharCodeFormat, ( char * )&( ( u8 * )Buffer )[ DestSize ] ) ; + } + else + { + // 数値がマイナスの場合は - 記号を追加した上で値をプラスにする + if( Value < 0 ) + { + DestSize += PutCharCode_inline( '-', CharCodeFormat, ( char * )&( ( u8 * )Buffer )[ DestSize ] ) ; + Value = -Value ; + } + + // 各桁の数値に変換 + for( NumberNum = 0 ; Value != 0 ; NumberNum ++, Value /= Radix ) + { + Number[ NumberNum ] = Value % Radix ; + } + + // 数値を文字列化 + for( i = NumberNum - 1 ; i >= 0 ; i -- ) + { + DestSize += PutCharCode_inline( Number[ i ] <= 9 ? '0' + Number[ i ] : 'a' + Number[ i ] - 10, CharCodeFormat, ( char * )&( ( u8 * )Buffer )[ DestSize ] ) ; + } + } + + // 終端文字をセット + DestSize += PutCharCode_inline( 0, CharCodeFormat, ( char * )&( ( u8 * )Buffer )[ DestSize ] ) ; + + return Buffer ; +} + +extern int CL_atoi( int CharCodeFormat, const char *Str ) +{ + int i ; + int AddNum ; + int NumCharNum ; + int Number[ 256 ] ; + int Total = 0 ; + int Minus ; + u32 BaseBuffer[ 1024 ] ; + u32 *TempBuffer = NULL ; + u32 *FCode ; + int StringSize ; + + // NULL のアドレスが渡されたら 0 を返す + if( Str == NULL ) + { + return 0 ; + } + + // 1文字4バイト形式に変換する + StringSize = StringToCharCodeString_inline( Str, CharCodeFormat, NULL ) ; + if( StringSize + sizeof( u32 ) * 16 > sizeof( BaseBuffer ) ) + { + TempBuffer = ( u32 * )malloc( StringSize + sizeof( u32 ) * 16 ) ; + if( TempBuffer == NULL ) + { + return -1 ; + } + + FCode = TempBuffer ; + } + else + { + FCode = BaseBuffer ; + } + memset( FCode, 0, StringSize + sizeof( u32 ) * 16 ) ; + StringToCharCodeString_inline( Str, CharCodeFormat, FCode ) ; + + // 数字を探す + while( *FCode != '\0' ) + { + if( ( *FCode >= '0' && *FCode <= '9' ) || *FCode == '-' ) + { + break ; + } + FCode ++ ; + } + + // いきなり終端文字の場合はエラーなので 0 を返す + if( *FCode == '\0' ) + { + goto END ; + } + + // 最初の文字がマイナス記号の場合はマイナスフラグを立てる + if( *FCode == '-' ) + { + Minus = 1 ; + FCode ++ ; + } + else + { + Minus = 0 ; + } + + // 数字を取得 + for( NumCharNum = 0 ; *FCode != '\0' && ( *FCode >= '0' && *FCode <= '9' ) ; NumCharNum ++, FCode ++ ) + { + Number[ NumCharNum ] = *FCode - '0' ; + } + + // 数値に変換 + AddNum = 1 ; + Total = 0 ; + for( i = NumCharNum - 1 ; i >= 0 ; i --, AddNum *= 10 ) + { + Total += Number[ i ] * AddNum ; + } + + // マイナスフラグが立っていたらマイナス値にする + if( Minus == 1 ) + { + Total = -Total ; + } + +END : + + if( TempBuffer != NULL ) + { + free( TempBuffer ) ; + TempBuffer = NULL ; + } + + // 数値を返す + return Total ; +} + +extern double CL_atof( int CharCodeFormat, const char *Str ) +{ + int MinusFlag ; + int DotFlag ; + int IndexFlag ; + int IndexMinusFlag ; + int i ; + u32 IntNumStr[ 256 ] ; + u32 FloatNumStr[ 256 ] ; + u32 IndexNumStr[ 256 ] ; + int IntNumberNum ; + int FloatNumberNum ; + int IndexNumberNum ; + double IntNum ; + double FloatNum ; + double IndexNum ; + double AddNum ; + s64 int64Num, int64Count ; + u32 BaseBuffer[ 1024 ] ; + u32 *TempBuffer = NULL ; + u32 *FCode ; + int StringSize ; + double Result = 0.0 ; + + MinusFlag = 0 ; + DotFlag = 0 ; + IndexFlag = 0 ; + IndexMinusFlag = 0 ; + + // NULL のアドレスが渡されたら 0.0 を返す + if( Str == NULL ) + { + return 0.0 ; + } + + // 1文字4バイト形式に変換する + StringSize = StringToCharCodeString_inline( Str, CharCodeFormat, NULL ) ; + if( StringSize + sizeof( u32 ) * 16 > sizeof( BaseBuffer ) ) + { + TempBuffer = ( u32 * )malloc( StringSize + sizeof( u32 ) * 16 ) ; + if( TempBuffer == NULL ) + { + return -1.0 ; + } + + FCode = TempBuffer ; + } + else + { + FCode = BaseBuffer ; + } + memset( FCode, 0, StringSize + sizeof( u32 ) * 16 ) ; + StringToCharCodeString_inline( Str, CharCodeFormat, FCode ) ; + + // いきなり終端文字の場合は 0.0 を返す + if( *FCode == '\0' ) + { + goto END ; + } + + // マイナス記号が最初にあったらマイナスフラグを立てる + if( *FCode == '-' ) + { + FCode ++ ; + + // マイナス記号の直後に終端文字の場合は 0.0 を返す + if( *FCode == '\0' ) + { + goto END ; + } + MinusFlag = 1 ; + } + + IntNumberNum = 0 ; + FloatNumberNum = 0 ; + IndexNumberNum = 0 ; + for( ; *FCode != '\0' ; FCode ++ ) + { + // 小数点の処理 + if( *FCode == '.' ) + { + // 既に小数点があったらエラーなので 0.0 を返す + if( DotFlag ) + { + goto END ; + } + + // 点フラグを立てる + DotFlag = 1 ; + } + else + // 指数値指定文字判定 + if( *FCode == 'e' || *FCode == 'E' ) + { + // 既に指数値指定があったらエラーなので 0.0 を返す + if( IndexFlag ) + { + goto END ; + } + + // 指数値指定フラグを立てる + IndexFlag = 1 ; + } + else + // 指数値指定用のマイナス記号又はプラス記号の処理 + if( *FCode == '-' || *FCode == '+' ) + { + // 指数値指定が無くいきなり - や + があった場合や、 + // e や E の文字の直後に - や + が無かった場合はエラーなので 0.0 を返す + if( IndexFlag == 0 || IndexNumberNum != 0 ) + { + goto END ; + } + + // マイナス記号の場合は指数値がマイナスのフラグを立てる + if( *FCode == '-' ) + { + IndexMinusFlag = 1 ; + } + } + else + // 数字の処理 + if( *FCode >= '0' && *FCode <= '9' ) + { + // 指数値指定の後の場合は指数値 + if( IndexFlag ) + { + // 256 文字以上指数値の文字列が続いたらエラーなので 0 を返す + if( IndexNumberNum >= 255 ) + { + goto END ; + } + IndexNumStr[ IndexNumberNum ] = *FCode - '0'; + IndexNumberNum ++ ; + } + else + if( DotFlag ) + { + // 256 文字以上小数点以下の値が続いたらエラーなので 0 を返す + if( FloatNumberNum >= 255 ) + { + goto END ; + } + FloatNumStr[ FloatNumberNum ] = *FCode - '0'; + FloatNumberNum ++ ; + } + else + { + // 256 文字以上整数値の文字列が続いたらエラーなので 0 を返す + if( IntNumberNum >= 255 ) + { + goto END ; + } + IntNumStr[ IntNumberNum ] = *FCode - '0'; + IntNumberNum ++ ; + } + } + else + // 上記以外の文字だった場合はエラーなので 0.0 を返す + { + goto END ; + } + } + + // 整数部も小数部も文字列の長さ0だった場合はエラーなので 0.0 を返す + if( IntNumberNum == 0 && FloatNumberNum == 0 ) + { + goto END ; + } + + // 整数値を算出 + AddNum = 1.0 ; + IntNum = 0 ; + for( i = IntNumberNum - 1 ; i >= 0; i --, AddNum *= 10.0 ) + { + if( IntNumStr[ i ] != 0 ) + { + IntNum += IntNumStr[ i ] * AddNum ; + } + } + if( MinusFlag ) + { + IntNum = -IntNum ; + } + + // 小数値を算出 + AddNum = 0.1 ; + FloatNum = 0 ; + for( i = 0 ; i < FloatNumberNum ; i ++, AddNum /= 10.0 ) + { + if( FloatNumStr[ i ] != 0 ) + { + FloatNum += FloatNumStr[i] * AddNum ; + } + } + if( MinusFlag ) + { + FloatNum = -FloatNum ; + } + + // 指数値文字列を数値化 + int64Count = 1 ; + int64Num = 0 ; + for( i = IndexNumberNum - 1; i >= 0; i --, int64Count *= 10 ) + { + int64Num += IndexNumStr[ i ] * int64Count ; + } + if( IndexMinusFlag ) + { + int64Num = -int64Num ; + } + + // 指数値に従って乗算値を準備 + IndexNum = 1.0 ; + if( int64Num != 0 ) + { + if( int64Num < 0 ) + { + int64Num = -int64Num ; + for( i = 0 ; i < int64Num ; i ++ ) + { + IndexNum /= 10.0 ; + } + } + else + { + for( i = 0 ; i < int64Num ; i++ ) + { + IndexNum *= 10.0 ; + } + } + } + + // 戻り値を算出 + Result = ( IntNum + FloatNum ) * IndexNum ; + +END : + + if( TempBuffer != NULL ) + { + free( TempBuffer ) ; + TempBuffer = NULL ; + } + + return Result ; +} + +static int CL_vsscanf_skipspace( u32 *String ) +{ + int AddSize = 0 ; + + for( AddSize = 0 ; + String[ AddSize ] == ' ' || + String[ AddSize ] == '\n' || + String[ AddSize ] == '\r' || + String[ AddSize ] == '\t' ; + AddSize ++ ){} + + return AddSize ; +} + +extern int CL_vsscanf( int CharCodeFormat, const char *String, const char *FormatString, va_list Arg ) +{ + u32 c ; + u32 Number[ 256 ] ; + u32 VStr[ 1024 ] ; + int ReadNum = 0 ; + int Width ; + int i, j, k ; + int num, num2 ; + int SkipFlag ; + int VStrRFlag ; + int I64Flag ; + int lFlag ; + int hFlag ; + int Eof ; + int MinusFlag ; + int UIntFlag ; + s64 int64Num ; + s64 int64Count ; + int UseCharNum ; + u8 *pStr ; + int UnitSize ; + int CharBytes ; + u8 TempBuffer[ 64 ] ; + + u32 FormatStringBaseBuffer[ 1024 ] ; + u32 *FormatStringTempBuffer = NULL ; + int FormatStringSize ; + u32 *FCode ; + + u32 StringBaseBuffer[ 1024 ] ; + u32 *StringTempBuffer = NULL ; + int StringSize ; + u32 *SCode ; + + UnitSize = GetCharCodeFormatUnitSize_inline( CharCodeFormat ) ; + + // 1文字4バイト形式に変換する + { + StringSize = StringToCharCodeString_inline( String, CharCodeFormat, NULL ) ; + if( StringSize + sizeof( u32 ) * 16 > sizeof( StringBaseBuffer ) ) + { + StringTempBuffer = ( u32 * )malloc( StringSize + sizeof( u32 ) * 16 ) ; + if( StringTempBuffer == NULL ) + { + return 0 ; + } + + SCode = StringTempBuffer ; + } + else + { + SCode = StringBaseBuffer ; + } + memset( SCode, 0, StringSize + sizeof( u32 ) * 16 ) ; + StringToCharCodeString_inline( String, CharCodeFormat, SCode ) ; + + + FormatStringSize = StringToCharCodeString_inline( FormatString, CharCodeFormat, NULL ) ; + if( FormatStringSize + sizeof( u32 ) * 16 > sizeof( FormatStringBaseBuffer ) ) + { + FormatStringTempBuffer = ( u32 * )malloc( FormatStringSize + sizeof( u32 ) * 16 ) ; + if( FormatStringTempBuffer == NULL ) + { + if( StringTempBuffer != NULL ) + { + free( StringTempBuffer ) ; + StringTempBuffer = NULL ; + } + return 0 ; + } + + FCode = FormatStringTempBuffer ; + } + else + { + FCode = FormatStringBaseBuffer ; + } + memset( FCode, 0, FormatStringSize + sizeof( u32 ) * 16 ) ; + StringToCharCodeString_inline( FormatString, CharCodeFormat, FCode ) ; + } + + // いきなり終端文字の場合は 0 を返す + if( *FCode == '\0' ) + { + goto END ; + } + + ReadNum = 0; + Eof = FALSE ; + while( *FCode != '\0' ) + { + // % かどうかで処理を分岐 + if( FCode[ 0 ] == '%' && FCode[ 1 ] != '%' ) + { + Width = -1; + I64Flag = FALSE; + lFlag = FALSE; + hFlag = FALSE; + UIntFlag = FALSE; + SkipFlag = FALSE; + + FCode ++ ; + if( *FCode == '\0' ) + { + break; + } + + if( *FCode == '*' ) + { + SkipFlag = TRUE; + FCode ++ ; + if( *FCode == '\0' ) + { + break; + } + } + + if( *FCode >= '0' && *FCode <= '9' ) + { + Width = ( int )CL_vsprintf_help_getnumber( FCode, &UseCharNum ) ; + FCode += UseCharNum ; + if( *FCode == '\0' ) + { + break; + } + if( Width == 0 ) + { + break; + } + } + + switch( *FCode ) + { + case 'l': + case 'L': + lFlag = TRUE ; + FCode++ ; + break ; + + case 'h': + case 'H': + hFlag = TRUE ; + FCode++ ; + break ; + + case 'I': + if( FCode[ 1 ] == '6' && FCode[ 2 ] == '4' ) + { + I64Flag = TRUE; + FCode += 3; + } + break; + } + if( *FCode == '\0' ) + { + break; + } + + if( *FCode == '[' ) + { + if( lFlag || hFlag || I64Flag ) + { + break; + } + + FCode ++ ; + VStrRFlag = FALSE ; + if( *FCode == '^' ) + { + VStrRFlag = TRUE; + FCode++; + } + j = 0; + memset( VStr, 0, sizeof( VStr ) ) ; + + c = '['; + while( *FCode != '\0' && *FCode != ']' ) + { + if( *FCode == '-' && c != '[' && FCode[ 1 ] != '\0' && FCode[ 1 ] != ']' ) + { + num = ( int )( u8 )c ; + num2 = ( int )( u8 )FCode[ 1 ] ; + if( num2 < num ) + { + k = num2 ; + num2 = num ; + num = k ; + } + for( k = num; k <= num2; k++ ) + { + if( c != k ) + { + *( ( u8 *)&VStr[ j ] ) = ( u8 )k ; + j++ ; + } + } + FCode += 2 ; + c = '[' ; + } + else + { + VStr[ j ] = *FCode ; + c = *FCode ; + j ++ ; + FCode ++ ; + } + } + if( *FCode == '\0' ) + { + break; + } + + FCode ++ ; + pStr = NULL; + if( SkipFlag == FALSE ) + { + pStr = va_arg( Arg, u8 * ) ; + } + + SCode += CL_vsscanf_skipspace( SCode ) ; + if( *SCode == '\0' ) + { + Eof = TRUE ; + break; + } + + i = 0; + for(;;) + { + if( *SCode == 0 ) + { + Eof = TRUE ; + break ; + } + c = *SCode ; + SCode ++ ; + j = 0 ; + while( VStr[ j ] != '\0' ) + { + if( VStr[ j ] == c ) + { + break ; + } + j ++ ; + } + + if( ( VStrRFlag == TRUE && VStr[ j ] != '\0' ) || + ( VStrRFlag == FALSE && VStr[ j ] == '\0' ) ) + { + break ; + } + + if( pStr ) + { + pStr += PutCharCode_inline( c, CharCodeFormat, ( char * )pStr ) ; + } + i ++ ; + if( Width != 0 && Width == i ) + { + break ; + } + } + + if( pStr ) + { + pStr += PutCharCode_inline( '\0', CharCodeFormat, ( char * )pStr ) ; + } + + if( Eof == FALSE && Width != i ) + { + SCode -- ; + } + } + else + if( *FCode == 'd' || *FCode == 'D' || *FCode == 'u' || *FCode == 'U' ) + { + SCode += CL_vsscanf_skipspace( SCode ) ; + if( *SCode == '\0' ) + { + Eof = TRUE ; + break; + } + + FCode ++ ; + UIntFlag = *FCode == 'u' || *FCode == 'U' ; + MinusFlag = FALSE ; + c = *SCode ; + SCode ++ ; + if( c == '-' ) + { + MinusFlag = TRUE; + if( Width != -1 ) + { + Width -- ; + if( Width == 0 ) + { + break; + } + } + if( *SCode == '\0' ) + { + Eof = TRUE ; + break ; + } + c = *SCode ; + SCode ++ ; + } +STR_10INT : + for( i = 0; i < 255 && ( Width == -1 || Width != i ) && c >= '0' && c <= '9'; i ++ ) + { + Number[ i ] = c - '0'; + if( *SCode == '\0' ) + { + Eof = TRUE ; + break ; + } + c = *SCode ; + SCode ++ ; + } + if( Eof == FALSE ) + { + SCode -- ; + } + num = i ; + if( num == 0 ) + { + break ; + } + int64Count = 1 ; + int64Num = 0 ; + for( i = num - 1 ; i >= 0 ; i --, int64Count *= 10 ) + { + if( UIntFlag ) + { + int64Num = ( s64 )( ( u64 )int64Num + ( u64 )Number[ i ] * ( u64 )int64Count ) ; + } + else + { + int64Num += ( s64 )Number[i] * int64Count ; + } + } + if( MinusFlag ) + { + int64Num = -int64Num ; + } + if( SkipFlag == FALSE ) + { + if( I64Flag ) + { + if( UIntFlag ) + { + *va_arg( Arg, u64 * ) = ( u64 )int64Num ; + } + else + { + *va_arg( Arg, s64 * ) = ( s64 )int64Num ; + } + } + else if( hFlag ) + { + if( UIntFlag ) + { + *va_arg( Arg, u16 * ) = ( u16 )int64Num ; + } + else + { + *va_arg( Arg, short * ) = ( short )int64Num ; + } + } + else + { + if( UIntFlag ) + { + *va_arg( Arg, u32 * ) = ( u32 )int64Num ; + } + else + { + *va_arg( Arg, int * ) = ( int )int64Num ; + } + } + } + } + else + if( *FCode == 'x' || *FCode == 'X' ) + { + SCode += CL_vsscanf_skipspace( SCode ) ; + if( *SCode == '\0' ) + { + Eof = TRUE ; + break; + } + + FCode ++ ; + MinusFlag = FALSE ; + c = *SCode ; + SCode ++ ; + if( c == '-' ) + { + MinusFlag = TRUE ; + if( Width != -1 ) + { + Width -- ; + if( Width == 0 ) + { + break ; + } + } + if( *SCode == '\0' ) + { + Eof = TRUE ; + break ; + } + c = *SCode ; + SCode ++ ; + } +STR_16INT : + i = 0; + for(;;) + { + if( i >= 255 ) + { + break ; + } + + if( Width != -1 && Width == i ) + { + break ; + } + else + if( c >= '0' && c <= '9' ) + { + Number[ i ] = c - '0' ; + } + else + if( c >= 'a' && c <= 'f' ) + { + Number[ i ] = c - 'a' + 10 ; + } + else + if( c >= 'A' && c <= 'F' ) + { + Number[ i ] = c - 'A' + 10 ; + } + else + { + break; + } + + i ++ ; + if( *SCode == '\0' ) + { + Eof = TRUE ; + break ; + } + c = *SCode ; + SCode ++ ; + } + if( Eof == FALSE ) + { + SCode -- ; + } + num = i ; + if( num == 0 ) + { + break ; + } + int64Count = 1 ; + int64Num = 0 ; + for( i = num - 1; i >= 0; i --, int64Count *= 16 ) + { + int64Num = ( s64 )( ( u64 )int64Num + ( u64 )Number[ i ] * ( u64 )int64Count ) ; + } + if( MinusFlag ) + { + int64Num = -int64Num ; + } + if( SkipFlag == FALSE ) + { + if( I64Flag ) + { + *va_arg( Arg, u64 * ) = ( u64 )int64Num ; + } + else + if( hFlag ) + { + *va_arg( Arg, u16 * ) = ( u16 )int64Num ; + } + else + { + *va_arg( Arg, u32 * ) = ( u32 )int64Num ; + } + } + } + else + if( *FCode == 'o' || *FCode == 'O' ) + { + SCode += CL_vsscanf_skipspace( SCode ) ; + if( *SCode == '\0' ) + { + Eof = TRUE ; + break; + } + + FCode ++ ; + MinusFlag = FALSE; + c = *SCode ; + SCode ++ ; + if( c == '-' ) + { + MinusFlag = TRUE ; + if( Width != -1 ) + { + Width -- ; + if( Width == 0 ) + { + break ; + } + } + if( *SCode == '\0' ) + { + Eof = TRUE ; + break ; + } + c = *SCode ; + SCode ++ ; + } +STR_8INT: + for( i = 0; i < 255 && ( Width == -1 || Width != i ) && c >= '0' && c <= '7'; i ++ ) + { + Number[ i ] = c - '0'; + if( *SCode == '\0' ) + { + Eof = TRUE ; + break ; + } + c = *SCode ; + SCode ++ ; + } + if( Eof == FALSE ) + { + SCode -- ; + } + num = i ; + if( num == 0 ) + { + break ; + } + int64Count = 1 ; + int64Num = 0 ; + for( i = num - 1; i >= 0; i --, int64Count *= 8 ) + { + int64Num = ( s64 )( ( u64 )int64Num + ( u64 )Number[ i ] * ( u64 )int64Count ) ; + } + if( MinusFlag ) + { + int64Num = -int64Num ; + } + if( SkipFlag == FALSE ) + { + if( I64Flag ) + { + *va_arg( Arg, u64 * ) = ( u64 )int64Num ; + } + else + if( hFlag ) + { + *va_arg( Arg, u16 * ) = ( u16 )int64Num ; + } + else + { + *va_arg( Arg, u32 * ) = ( u32 )int64Num ; + } + } + } + else + if( *FCode == 'i' || *FCode == 'I' ) + { + SCode += CL_vsscanf_skipspace( SCode ) ; + if( *SCode == '\0' ) + { + Eof = TRUE ; + break; + } + + FCode ++ ; + MinusFlag = FALSE; + c = *SCode ; + SCode ++ ; + if( c == '-' ) + { + MinusFlag = TRUE; + if( Width != -1 ) + { + Width -- ; + if( Width == 0 ) + { + break ; + } + } + if( *SCode == '\0' ) + { + Eof = TRUE ; + break ; + } + c = *SCode ; + SCode ++ ; + } + if( c == '0' ) + { + if( Width != -1 ) + { + Width -- ; + if( Width == 0 ) + { + break ; + } + } + if( *SCode == '\0' ) + { + Eof = TRUE ; + break ; + } + c = *SCode ; + SCode ++ ; + if( c == 'x' ) + { + if( Width != -1 ) + { + Width -- ; + if( Width == 0 ) + { + break ; + } + } + if( *SCode == '\0' ) + { + Eof = TRUE ; + break ; + } + c = *SCode ; + SCode ++ ; + goto STR_16INT ; + } + else + { + goto STR_8INT ; + } + } + else + { + goto STR_10INT ; + } + } + else + if( *FCode == 'c' || *FCode == 'C' ) + { + FCode ++ ; + if( Width == -1 ) + { + Width = 1 ; + } + pStr = NULL ; + if( SkipFlag == FALSE ) + { + pStr = va_arg( Arg, u8 * ) ; + } + for( i = 0; i < Width; i += CharBytes / UnitSize ) + { + if( *SCode == '\0' ) + { + Eof = TRUE ; + break ; + } + c = *SCode ; + SCode ++ ; + + if( pStr ) + { + CharBytes = PutCharCode_inline( c, CharCodeFormat, ( char * )pStr ) ; + pStr += CharBytes ; + } + else + { + CharBytes = PutCharCode_inline( c, CharCodeFormat, ( char * )TempBuffer ) ; + } + } + } + else + if( *FCode == 's' || *FCode == 'S' ) + { + FCode ++ ; + SCode += CL_vsscanf_skipspace( SCode ) ; + if( *SCode == '\0' ) + { + Eof = TRUE ; + break; + } + + pStr = NULL ; + if( SkipFlag == FALSE ) + { + pStr = va_arg( Arg, u8 * ) ; + } + + i = 0 ; + for(;;) + { + if( *SCode == '\0' ) + { + Eof = TRUE ; + break ; + } + c = *SCode ; + SCode ++ ; + + if( c == ' ' || c == '\n' || c == '\r' || c == '\t' ) + { + SCode -- ; + break; + } + + if( pStr ) + { + CharBytes = PutCharCode_inline( c, CharCodeFormat, ( char * )pStr ) ; + pStr += CharBytes ; + } + else + { + CharBytes = PutCharCode_inline( c, CharCodeFormat, ( char * )TempBuffer ) ; + } + + i += CharBytes / UnitSize ; + if( Width != -1 && i >= Width ) + { + break ; + } + } + + if( pStr ) + { + pStr += PutCharCode_inline( '\0', CharCodeFormat, ( char * )pStr ) ; + } + } + else + if( *FCode == 'f' || *FCode == 'F' || *FCode == 'g' || *FCode == 'G' || *FCode == 'e' || *FCode == 'E' ) + { + int num3 ; + u32 Number2[ 256 ] ; + u32 Number3[ 256 ] ; + double doubleNum ; + double doubleNum2 ; + double doubleNum3 ; + double doubleCount ; + int DotFlag ; + int IndexFlag ; + int MinusFlag2 ; + + SCode += CL_vsscanf_skipspace( SCode ) ; + if( *SCode == '\0' ) + { + Eof = TRUE ; + break; + } + + FCode ++ ; + MinusFlag = FALSE ; + DotFlag = FALSE ; + IndexFlag = FALSE ; + MinusFlag2 = FALSE ; + if( *SCode == '\0' ) + { + Eof = TRUE ; + break ; + } + c = *SCode ; + SCode ++ ; + if( c == '-' ) + { + MinusFlag = TRUE ; + if( Width != -1 ) + { + Width -- ; + if( Width == 0 ) + { + break ; + } + } + if( *SCode == '\0' ) + { + Eof = TRUE ; + break ; + } + c = *SCode ; + SCode ++ ; + } + + i = 0 ; // 自然数 + j = 0 ; // 小数 + k = 0 ; // 指数 + for(;;) + { + if( c == '.' ) + { + if( DotFlag ) + { + break ; + } + DotFlag = TRUE ; + } + else + if( c == 'e' || c == 'E' ) + { + if( IndexFlag ) + { + break ; + } + IndexFlag = TRUE ; + } + else + if( c == '-' || c == '+' ) + { + if( IndexFlag == FALSE || k != 0 ) + { + break ; + } + if( c == '-' ) + { + MinusFlag2 = TRUE ; + } + } + else + if( c >= '0' && c <= '9' ) + { + if( IndexFlag ) + { + if( k >= 255 ) + { + break ; + } + Number3[ k ] = c - '0' ; + k ++ ; + } + else + if( DotFlag ) + { + if( j >= 255 ) + { + break ; + } + Number2[ j ] = c - '0' ; + j ++ ; + } + else + { + if( i >= 255 ) + { + break ; + } + Number[ i ] = c - '0'; + i ++ ; + } + } + else + { + break; + } + + if( *SCode == '\0' ) + { + Eof = TRUE ; + break ; + } + c = *SCode ; + SCode ++ ; + if( Width != -1 ) + { + Width -- ; + if( Width == 0 ) + { + break ; + } + } + } + if( Eof == FALSE ) + { + SCode -- ; + } + if( i == 0 && j == 0 ) + { + break ; + } + num = i ; + num2 = j ; + num3 = k ; + if( num == 0 && num2 == 0 ) + { + break ; + } + + doubleCount = 1.0 ; + doubleNum = 0 ; + for( i = num - 1; i >= 0; i --, doubleCount *= 10.0 ) + { + if( Number[ i ] != 0 ) + { + doubleNum += Number[ i ] * doubleCount ; + } + } + if( MinusFlag ) + { + doubleNum = -doubleNum ; + } + + doubleCount = 0.1 ; + doubleNum2 = 0 ; + for( i = 0; i < num2; i ++, doubleCount /= 10.0 ) + { + if( Number2[ i ] != 0 ) + { + doubleNum2 += Number2[ i ] * doubleCount ; + } + } + if( MinusFlag ) + { + doubleNum2 = -doubleNum2 ; + } + + int64Count = 1 ; + int64Num = 0 ; + for( i = num3 - 1; i >= 0; i --, int64Count *= 10 ) + { + int64Num += Number3[ i ] * int64Count ; + } + if( MinusFlag2 ) + { + int64Num = -int64Num ; + } + + doubleNum3 = 1.0 ; + if( int64Num != 0 ) + { + if( int64Num < 0 ) + { + int64Num = -int64Num ; + for( i = 0; i < int64Num; i++ ) + { + doubleNum3 /= 10.0 ; + } + } + else + { + for( i = 0; i < int64Num; i++ ) + { + doubleNum3 *= 10.0 ; + } + } + } + + doubleNum = ( doubleNum + doubleNum2 ) * doubleNum3 ; + + if( SkipFlag == FALSE ) + { + if( lFlag ) + { + *va_arg( Arg, double * ) = doubleNum ; + } + else + { + *va_arg( Arg, float * ) = ( float )doubleNum ; + } + } + } + if( SkipFlag == FALSE ) + { + ReadNum ++ ; + } + } + else + { + if( *FCode == ' ' || *FCode == '\n' || *FCode == '\r' || *FCode == '\t' ) + { + while( *FCode != '\0' && ( *FCode == ' ' || *FCode == '\n' || *FCode == '\r' || *FCode == '\t' ) ) + { + FCode ++ ; + } + SCode += CL_vsscanf_skipspace( SCode ) ; + if( *SCode == '\0' ) + { + Eof = TRUE ; + break; + } + } + else + { + u32 str[ 256 ] ; + + for( num = 0; *FCode != '\0' && *FCode != ' ' && *FCode != '\n' && *FCode != '\r' && *FCode != '\t' && *FCode != '%'; num++, FCode ++ ) + { + str[ num ] = *FCode ; + } + str[ num ] = '\0' ; + + for( i = 0; i < num; i ++ ) + { + if( *SCode == '\0' ) + { + Eof = TRUE ; + break ; + } + c = *SCode ; + SCode ++ ; + if( str[ i ] != c ) + { + break ; + } + } + } + } + } + +END : + + if( FormatStringTempBuffer != NULL ) + { + free( FormatStringTempBuffer ) ; + FormatStringTempBuffer = NULL ; + } + + if( StringTempBuffer != NULL ) + { + free( StringTempBuffer ) ; + StringTempBuffer = NULL ; + } + + return ReadNum; +} + +extern int CL_sscanf( int CharCodeFormat, const char *String, const char *FormatString, ... ) +{ + int Result ; + va_list VaList ; + + va_start( VaList, FormatString ) ; + + Result = CL_vsscanf( CharCodeFormat, String, FormatString, VaList ) ; + + va_end( VaList ) ; + + return Result ; +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/WolfDec/3rdParty/CharCode.h b/src/WolfDec/3rdParty/CharCode.h new file mode 100644 index 0000000..010b227 --- /dev/null +++ b/src/WolfDec/3rdParty/CharCode.h @@ -0,0 +1,102 @@ +// ============================================================================ +// +// キャラクタコード関係のライブラリ +// +// Creator : 山田 巧 +// Creation Data : 09/17/2004 +// +// ============================================================================ + +#ifndef CHARCODE_H +#define CHARCODE_H + +// include -------------------------------------- + +#include +#include "DataType.h" + + +// define --------------------------------------- + +#define CHARCODEFORMAT_SHIFTJIS (932) +#define CHARCODEFORMAT_GB2312 (936) +#define CHARCODEFORMAT_UHC (949) +#define CHARCODEFORMAT_BIG5 (950) +#define CHARCODEFORMAT_UTF16LE (1200) +#define CHARCODEFORMAT_UTF16BE (1201) +#define CHARCODEFORMAT_WINDOWS_1252 (1252) // 欧文(ラテン文字の文字コード) +#define CHARCODEFORMAT_ISO_IEC_8859_15 (32764) // 欧文(ラテン文字の文字コード) +#define CHARCODEFORMAT_UTF8 (65001) +#define CHARCODEFORMAT_ASCII (32765) // アスキー文字コード +#define CHARCODEFORMAT_UTF32LE (32766) // 正式なコードが無かったので勝手に定義 +#define CHARCODEFORMAT_UTF32BE (32767) // 正式なコードが無かったので勝手に定義 + +// シフトJIS2バイト文字判定 +#define CHECK_SHIFTJIS_2BYTE( x ) ( ( u8 )( ( ( ( u8 )(x) ) ^ 0x20) - ( u8 )0xa1 ) < 0x3c ) + +// UTF16LEサロゲートペア判定( リトルエンディアン環境用 ) +#define CHECK_CPU_LE_UTF16LE_4BYTE( x ) ( ( ( x ) & 0xfc00 ) == 0xd800 ) + +// UTF16LEサロゲートペア判定( リトルエンディアン環境用 ) +#define CHECK_CPU_LE_UTF16LE_4BYTE( x ) ( ( ( x ) & 0xfc00 ) == 0xd800 ) + +// UTF16LEサロゲートペア判定( ビッグエンディアン環境用 ) +#define CHECK_CPU_BE_UTF16LE_4BYTE( x ) ( ( ( ( ( ( ( u16 )( x ) ) >> 8 ) & 0xff ) | ( ( ( u16 )( x ) << 8 ) & 0xff00 ) ) & 0xfc00 ) == 0xd800 ) + +// UTF16BEサロゲートペア判定( リトルエンディアン環境用 ) +#define CHECK_CPU_LE_UTF16BE_4BYTE( x ) CHECK_CPU_BE_UTF16LE_4BYTE( x ) + +// UTF16BEサロゲートペア判定( ビッグエンディアン環境用 ) +#define CHECK_CPU_BE_UTF16BE_4BYTE( x ) CHECK_CPU_LE_UTF16LE_4BYTE( x ) + +#define WCHAR_T_CODEPAGE ( sizeof( wchar_t ) > 2 ? DX_CHARCODEFORMAT_UTF32LE : DX_CHARCODEFORMAT_UTF16LE ) + +// wchar_t サロゲートペア判定( UTF-32 or UTF-16 想定 ) +#ifdef WCHAR_T_BE + #define CHECK_WCHAR_T_DOUBLE( x ) ( sizeof( wchar_t ) == 2 && ( ( ( u16 )( x ) & 0x00fc ) == 0x00d8 ) ) +#else + #define CHECK_WCHAR_T_DOUBLE( x ) ( sizeof( wchar_t ) == 2 && ( ( ( u16 )( x ) & 0xfc00 ) == 0xd800 ) ) +#endif + +// function proto type -------------------------- + +extern int InitCharCode( void ) ; // 文字コードライブラリの初期化 + +extern int GetCharCodeFormatUnitSize( int CharCodeFormat ) ; // 指定のコードページの情報最少サイズを取得する( 戻り値:バイト数 ) +extern int GetCharBytes( const char *CharCode, int CharCodeFormat ) ; // 1文字のバイト数を取得する( 戻り値:1文字のバイト数 ) +extern u32 GetCharCode( const char *CharCode, int CharCodeFormat, int *CharBytes ) ; // 1文字の文字コードと文字のバイト数を取得する +extern int PutCharCode( u32 CharCode, int CharCodeFormat, char *Dest ) ; // 文字コードを通常の文字列に変換する、終端にヌル文字は書き込まない( 戻り値:書き込んだバイト数 ) +extern u32 ConvCharCode( u32 SrcCharCode, int SrcCharCodeFormat, int DestCharCodeFormat ) ; // 文字コードを指定のコードページの文字に変換する +extern int ConvCharCodeString( const u32 *Src, int SrcCharCodeFormat, u32 *Dest, int DestCharCodeFormat ) ; // 1文字4バイトの配列を、別コードページの1文字4バイトの配列に変換する( 戻り値:変換後のサイズ、ヌル文字含む( 単位:バイト ) ) +extern int StringToCharCodeString( const char *Src, int SrcCharCodeFormat, u32 *Dest ) ; // 文字列を1文字4バイトの配列に変換する( 戻り値:変換後のサイズ、ヌル文字含む( 単位:バイト ) ) +extern int CharCodeStringToString( const u32 *Src, char *Dest, int DestCharCodeFormat ) ; // 1文字4バイトの配列を文字列に変換する( 戻り値:変換後のサイズ、ヌル文字含む( 単位:バイト ) ) +extern int ConvString( const char *Src, int SrcCharCodeFormat, char *Dest, int DestCharCodeFormat ) ; // 文字列を指定のコードページの文字列に変換する( 戻り値:変換後のサイズ、ヌル文字含む( 単位:バイト ) ) +extern int GetStringCharNum( const char *String, int CharCodeFormat ) ; // 文字列に含まれる文字数を取得する +extern const char * GetStringCharAddress( const char *String, int CharCodeFormat, int Index ) ; // 指定番号の文字のアドレスを取得する +extern u32 GetStringCharCode( const char *String, int CharCodeFormat, int Index ) ; // 指定番号の文字のコードを取得する + +extern void CL_strcpy( int CharCodeFormat, char *Dest, const char *Src ) ; +extern void CL_strcpy_s( int CharCodeFormat, char *Dest, size_t BufferBytes, const char *Src ) ; +extern void CL_strncpy( int CharCodeFormat, char *Dest, const char *Src, int Num ) ; +extern void CL_strncpy_s( int CharCodeFormat, char *Dest, size_t BufferBytes, const char *Src, int Num ) ; +extern void CL_strcat( int CharCodeFormat, char *Dest, const char *Src ) ; +extern void CL_strcat_s( int CharCodeFormat, char *Dest, size_t BufferBytes, const char *Src ) ; +extern const char * CL_strstr( int CharCodeFormat, const char *Str1, const char *Str2 ) ; +extern int CL_strlen( int CharCodeFormat, const char *Str ) ; +extern int CL_strcmp( int CharCodeFormat, const char *Str1, const char *Str2 ) ; +extern int CL_stricmp( int CharCodeFormat, const char *Str1, const char *Str2 ) ; +extern int CL_strcmp_str2_ascii( int CharCodeFormat, const char *Str1, const char *Str2 ) ; +extern int CL_strncmp( int CharCodeFormat, const char *Str1, const char *Str2, int Size ) ; +extern const char * CL_strchr( int CharCodeFormat, const char *Str, u32 CharCode ) ; +extern const char * CL_strrchr( int CharCodeFormat, const char *Str, u32 CharCode ) ; +extern char * CL_strupr( int CharCodeFormat, char *Str ) ; +extern int CL_vsprintf( int CharCodeFormat, char *Buffer, const char *FormatString, va_list Arg ) ; +extern int CL_sprintf( int CharCodeFormat, char *Buffer, const char *FormatString, ... ) ; +extern char * CL_itoa( int CharCodeFormat, int Value, char *Buffer, int Radix ) ; +extern int CL_atoi( int CharCodeFormat, const char *Str ) ; +extern double CL_atof( int CharCodeFormat, const char *Str ) ; +extern int CL_vsscanf( int CharCodeFormat, const char *String, const char *FormatString, va_list Arg ) ; +extern int CL_sscanf( int CharCodeFormat, const char *String, const char *FormatString, ... ) ; + +#endif // CHARCODE_H + diff --git a/src/WolfDec/3rdParty/CharCodeTable.cpp b/src/WolfDec/3rdParty/CharCodeTable.cpp new file mode 100644 index 0000000..ca74f91 --- /dev/null +++ b/src/WolfDec/3rdParty/CharCodeTable.cpp @@ -0,0 +1,10739 @@ +// ============================================================================ +// +// キャラクタコードテーブル +// +// Creator : 山田 巧 +// Creation Data : 03/01/2015 +// +// ============================================================================ + +// include -------------------------------------- +#include "DataType.h" + +// data ----------------------------------------- + +#if !( defined(_WIN32) || defined(_WIN64) ) + +// Shift-JISとUTF-16の対応表を圧縮したもの +u8 CP932ToUTF16Table[] = +{ + 0xa4,0x43,0xa3,0x31,0x31,0x31,0x31,0x31,0x51,0x37,0x3a,0x47,0x31,0x31,0x6b,0x71, + 0x31,0x31,0x35,0x31,0x33,0x31,0x31,0xa3,0x31,0x51,0x31,0x3b,0x31,0x34,0x31,0x31, + 0xb3,0x31,0x51,0x31,0x3a,0x31,0x33,0x71,0x31,0x29,0x31,0x49,0x31,0x37,0x71,0x32, + 0xa3,0x31,0x6d,0x31,0x41,0x31,0x35,0x51,0x32,0x41,0x31,0x57,0x31,0x3b,0x31,0x33, + 0x21,0x31,0x29,0x31,0x48,0x31,0x37,0x31,0x32,0x79,0x31,0x65,0x31,0x3e,0x71,0x34, + 0x71,0x31,0xb7,0x31,0x4f,0x31,0x38,0xa3,0x33,0x31,0x31,0x73,0x31,0x42,0x31,0x35, + 0x61,0x32,0x41,0x31,0x56,0x31,0x3a,0x71,0x33,0x69,0x31,0x21,0x31,0x45,0x71,0x36, + 0x51,0x32,0x5d,0x31,0x5d,0x31,0x3c,0x51,0x33,0xb3,0x31,0x2f,0x31,0x49,0x31,0x37, + 0x41,0x32,0x79,0x31,0x64,0x31,0x3e,0x31,0x34,0x59,0x31,0xaf,0x31,0x4c,0x71,0x38, + 0x31,0x32,0xa7,0x31,0x6b,0x31,0x3f,0xa3,0x34,0xa3,0x31,0xbd,0x31,0x50,0x31,0x38, + 0xb3,0x33,0x31,0x31,0x72,0x31,0x41,0x71,0x35,0x49,0x32,0x39,0x31,0x53,0x71,0x39, + 0xa3,0x33,0x4d,0x31,0x79,0x31,0x43,0x51,0x35,0x21,0x32,0x47,0x31,0x57,0x31,0x3a, + 0x21,0x33,0x69,0x31,0xa2,0x31,0x45,0x31,0x36,0x39,0x32,0x55,0x31,0x5a,0x71,0x3b, + 0x71,0x33,0x25,0x31,0x27,0x31,0x46,0xa3,0x36,0x71,0x32,0x63,0x31,0x5e,0x31,0x3c, + 0x61,0x33,0xb3,0x31,0x2e,0x31,0x48,0x71,0x36,0xbb,0x32,0x71,0x31,0x61,0x71,0x3d, + 0x51,0x34,0x3d,0x31,0xa7,0x31,0x4a,0x51,0x37,0x61,0x32,0xa1,0x31,0x65,0x31,0x3e, + 0x41,0x34,0x59,0x31,0xae,0x31,0x4c,0x31,0x37,0xab,0x32,0x2d,0x31,0x68,0x71,0x3f, + 0x31,0x34,0x75,0x31,0xb5,0x31,0x4d,0xa3,0x38,0x51,0x32,0xad,0x31,0x6c,0x31,0x3f, + 0xb3,0x34,0xa3,0x31,0xbc,0x31,0x4f,0x71,0x38,0x29,0x32,0xbb,0x31,0x6f,0x71,0x40, + 0xa3,0x34,0xbf,0x32,0x31,0x31,0x6b,0x2d,0x71,0x39,0x32,0x74,0xc2,0x62,0x70,0xaf, + 0x70,0xbe,0x44,0xc1,0xa8,0xc2,0x2a,0x30,0xb9,0x70,0xc0,0x22,0xc2,0x65,0xc2,0xb0, + 0x60,0xbe,0x60,0xc1,0xaf,0xc2,0x2c,0x70,0xb9,0xba,0xc0,0x30,0xc2,0x69,0x70,0xb1, + 0x50,0xbe,0x7c,0xc1,0xb6,0xc2,0x2e,0x50,0xba,0x60,0xc0,0xb0,0xc2,0x6c,0xc2,0xb2, + 0x40,0xbe,0xaa,0xc1,0xbd,0xc2,0x2f,0xc2,0xba,0xaa,0xc0,0xbe,0xc2,0x70,0x70,0xb2, + 0xc2,0xbf,0x34,0xc2,0x32,0xc2,0xa3,0x30,0xbb,0x50,0xc1,0x3a,0xc2,0x73,0xc2,0xb3, + 0xb2,0xbf,0x50,0xc2,0x39,0xc2,0xa5,0x70,0xbb,0x28,0xc1,0x48,0xc2,0x77,0x70,0xb4, + 0x30,0xbf,0x6c,0xc2,0x40,0xc2,0xa7,0x50,0xbc,0x40,0xc1,0x56,0xc2,0x7a,0xc2,0xb5, + 0xa2,0xbf,0x28,0xc2,0x47,0xc2,0xa8,0xc2,0xbc,0x78,0xc1,0x64,0xc2,0x7e,0x70,0xb6, + 0x70,0xbf,0xb6,0xc2,0x4e,0xc2,0xaa,0x30,0xbc,0xc2,0xc2,0x26,0xb0,0x31,0xb2,0x2e, + 0x60,0xb2,0xbf,0x32,0xad,0xc1,0xc2,0xa3,0x3f,0x28,0xba,0xc1,0x31,0xb8,0x70,0x70, + 0xb3,0x38,0x5c,0xbe,0xc2,0x31,0x6b,0x30,0x30,0xbb,0x34,0x26,0xc0,0xc2,0x71,0x4e, + 0x60,0xb2,0xbf,0x32,0xad,0x43,0x31,0xa3,0x34,0x31,0x35,0xa3,0x33,0x49,0x34,0x50, + 0xb3,0xba,0xc2,0xb9,0x61,0x3e,0x70,0xa6,0x70,0xbb,0xc2,0xc1,0x32,0xc2,0xa9,0xa9, + 0x3a,0xa4,0x73,0xab,0x31,0x51,0x70,0xb8,0x31,0x32,0xbe,0xc2,0xa6,0xc2,0xa2,0xc2, + 0xc2,0xac,0x74,0xbf,0x61,0xa1,0x7d,0x44,0xa6,0x31,0x3d,0xa4,0x2e,0x58,0x32,0x57, + 0x31,0x62,0x71,0x3f,0x61,0xc1,0x3d,0x33,0x23,0x31,0x71,0x71,0x40,0xc2,0xa2,0x50, + 0xb8,0xba,0xbf,0x7b,0x53,0x5f,0x70,0xa7,0xa5,0x32,0x45,0x71,0x49,0x41,0x37,0x55, + 0x32,0xa4,0x31,0x6b,0x51,0x35,0x70,0xa4,0x50,0xbb,0x21,0xa3,0x46,0x49,0x3f,0xc2, + 0xb6,0xb2,0xc0,0x68,0xc2,0x5f,0xc2,0xa4,0x34,0x31,0x55,0xa3,0x3b,0x49,0x33,0xa9, + 0x31,0xa4,0x71,0x4b,0x61,0x38,0x3d,0x32,0xb6,0x31,0x71,0xa3,0x42,0x49,0x33,0xc2, + 0xb3,0xb2,0xc1,0xa5,0x31,0xae,0x71,0x31,0x31,0x38,0x2d,0x31,0x4e,0xc2,0x29,0x35, + 0x52,0xaa,0xbf,0x6e,0xc2,0x64,0x39,0x7d,0xb5,0x41,0xbb,0x75,0x65,0x42,0x41,0x75, + 0xa7,0x32,0x4b,0xa3,0x31,0x4a,0x39,0x37,0x63,0x31,0x3d,0x74,0xa8,0xc2,0x72,0x50, + 0xc1,0x38,0xc2,0x74,0xc2,0x33,0xc2,0xa3,0x70,0xbb,0x4c,0xc1,0x3b,0xc2,0x79,0x50, + 0xbd,0x69,0x31,0x3d,0x57,0x33,0x7a,0x2a,0x63,0x5f,0x6d,0x7c,0xa1,0x43,0xb4,0xa7, + 0x2d,0x62,0x47,0x73,0x56,0x21,0x3a,0x67,0x63,0x5e,0x79,0x7c,0x6e,0x43,0xb2,0x35, + 0x24,0x2a,0x31,0x55,0x61,0x7a,0x39,0x63,0x33,0x3d,0x75,0x74,0x44,0x41,0x75,0xa9, + 0x3f,0x25,0x74,0x2d,0x39,0x42,0x33,0xa7,0x59,0x62,0x3b,0x3f,0x53,0x72,0x39,0x21, + 0x63,0x42,0x59,0x75,0x5a,0x42,0x6b,0x7d,0x32,0xbc,0x4d,0x75,0x59,0x42,0x69,0x30, + 0xc0,0x42,0x38,0x59,0x52,0x31,0x39,0x71,0x6f,0x24,0x51,0x6c,0xad,0x39,0x31,0x35, + 0x33,0x46,0x45,0x75,0x43,0x42,0x71,0x75,0x51,0x6a,0x3a,0x73,0x53,0x5a,0x39,0x7e, + 0x53,0x44,0x5d,0x75,0x4b,0x42,0x40,0x55,0x52,0xac,0x39,0xad,0x53,0x46,0x79,0x76, + 0xa1,0x23,0xa3,0xa9,0x5c,0x41,0x7d,0x35,0x37,0xbc,0x4a,0x2b,0x57,0x66,0x3a,0x75, + 0x33,0x32,0x35,0x72,0x67,0xb8,0x3b,0x33,0xc1,0xbc,0x48,0x25,0x36,0x33,0x78,0x31, + 0x52,0x38,0xbf,0x54,0xc2,0x3a,0x70,0xa5,0x70,0xbb,0x24,0xc1,0x46,0xc2,0x76,0x30, + 0xb4,0x70,0xbf,0x62,0xc2,0x3d,0xbd,0x7c,0x60,0x39,0x39,0x33,0x52,0xc2,0x79,0x30, + 0xb5,0x50,0xbf,0x7a,0xc2,0x43,0xc2,0xa7,0xb2,0xbc,0x50,0xc1,0x59,0xc2,0x7b,0x70, + 0xb5,0x28,0xbf,0x28,0xc2,0x47,0x70,0xa8,0x30,0xbc,0x6c,0xc1,0x60,0xc2,0x7d,0x50, + 0xb6,0x40,0xbf,0xa8,0xc2,0x4a,0xc2,0xa9,0xa2,0xbc,0x28,0xc1,0x67,0xc2,0x7e,0xc2, + 0xb6,0x78,0xbf,0xb6,0xc2,0x4e,0x6b,0x7c,0x35,0x3b,0x38,0xc1,0x73,0xc2,0x21,0xc2, + 0xb7,0x58,0xc0,0x3c,0xc2,0x54,0x70,0xab,0xc2,0xbd,0x54,0xc1,0x7a,0xc2,0x23,0x30, + 0xb7,0x30,0xc0,0x4a,0xc2,0x57,0xc2,0xac,0xb2,0xbd,0x70,0xc1,0x21,0xc2,0x25,0x70, + 0xb8,0x48,0xc0,0x58,0xc2,0x5b,0x70,0xad,0x30,0xbd,0x2c,0xc1,0x28,0xc2,0x27,0x50, + 0xb8,0xa2,0xc0,0x66,0xad,0x45,0x41,0x59,0x44,0x33,0x39,0xa3,0x74,0x49,0x42,0x37, + 0x35,0x5a,0x72,0x3d,0x61,0x54,0x7d,0x3a,0x34,0x33,0x55,0xa3,0x7b,0x49,0x43,0xa9, + 0x35,0xa4,0x72,0x4b,0x61,0x58,0x3d,0x3a,0xb6,0x33,0x71,0xa3,0x22,0x49,0x45,0x77, + 0x36,0x4a,0x72,0x59,0x61,0x5b,0x7d,0x3b,0xa6,0x33,0x2d,0xa3,0x29,0x49,0x47,0x57, + 0x36,0x22,0x72,0x67,0x61,0x5f,0x3d,0x3c,0x24,0x33,0xbb,0xa3,0x30,0x49,0x49,0x37, + 0x37,0x3a,0x72,0x75,0x61,0x62,0x7d,0x3d,0x74,0x34,0x45,0xa3,0xa9,0x49,0x4a,0xa9, + 0x37,0x72,0x72,0x23,0x61,0x66,0x3d,0x3e,0x64,0x34,0x61,0xa3,0xb0,0x49,0x4c,0x77, + 0x37,0xbc,0x72,0xa3,0x61,0x69,0x7d,0x3f,0x54,0x34,0x7d,0xa3,0xb7,0x49,0x4e,0x57, + 0x38,0x62,0x72,0xb1,0x61,0x6d,0x3d,0x40,0x44,0x34,0xab,0xa3,0xbe,0x49,0x50,0x37, + 0x38,0xac,0x72,0xbf,0x61,0x70,0x7d,0x41,0x34,0x35,0x35,0xa4,0x33,0x49,0x51,0xa9, + 0x39,0x52,0x73,0x3b,0x61,0x74,0x3d,0x41,0xb6,0x35,0x51,0xa4,0x3a,0x49,0x53,0x77, + 0x39,0x2a,0x73,0x49,0x61,0x77,0x7d,0x42,0xa6,0x35,0x6d,0xa4,0x41,0x49,0x55,0x57, + 0x3a,0x42,0x73,0x58,0xad,0x7d,0xa5,0x51,0x5f,0x21,0x21,0x39,0x31,0x21,0x7d,0x45, + 0x54,0x36,0x3d,0xa4,0x55,0x49,0x5a,0x57,0x3b,0x62,0x73,0xa1,0x61,0x25,0x3d,0x46, + 0x44,0x36,0x59,0xa4,0x5c,0x49,0x5c,0x37,0x3b,0xac,0x73,0x2d,0x61,0x28,0x7d,0x47, + 0x34,0x36,0x75,0xa4,0x63,0x49,0x5d,0xa9,0x3c,0x52,0x73,0xad,0x61,0x2c,0x3d,0x47, + 0xb6,0x36,0xa3,0xa4,0x6a,0x49,0x5f,0x77,0x3c,0x2a,0x73,0xbb,0x61,0x2f,0x7d,0x48, + 0xa6,0x36,0xbf,0xa4,0x71,0x49,0x61,0x57,0x3d,0x42,0x74,0x37,0x61,0xa5,0x3d,0x49, + 0x24,0x37,0x49,0xa4,0x78,0x49,0x63,0x37,0x3d,0x7a,0x74,0x45,0x61,0xa8,0x7d,0x4a, + 0x74,0x37,0x65,0xa4,0xa1,0x49,0x64,0xa9,0x3e,0x32,0x74,0x53,0x61,0xac,0x3d,0x4b, + 0x64,0x37,0x21,0xa4,0x26,0x49,0x66,0x77,0x3e,0x6a,0x74,0x61,0x61,0xaf,0x7d,0x4c, + 0x54,0x37,0xaf,0xa4,0x2d,0x49,0x68,0x57,0x3e,0xb4,0x74,0x6f,0x61,0x31,0x31,0x4d, + 0x34,0x38,0x35,0xa4,0xa5,0x49,0x69,0xa9,0x3f,0x52,0x74,0x7b,0x61,0xb6,0x3d,0x4d, + 0xb6,0x38,0x51,0xa4,0xac,0x49,0x6b,0x2e,0x54,0x38,0x5d,0xa4,0xaf,0x49,0x6c,0x57, + 0x3f,0xb4,0x74,0x2f,0x61,0xbb,0x3d,0x4f,0x44,0x38,0x79,0xa4,0xb6,0x49,0x6e,0x37, + 0x40,0x5a,0x74,0xb0,0xad,0x65,0x23,0x51,0x4a,0x39,0x3f,0x55,0x34,0x7a,0x71,0xb5, + 0x71,0x4d,0x25,0x38,0x47,0x32,0xa8,0xa3,0x6a,0x71,0x3f,0x63,0x34,0x7e,0x31,0xb6, + 0x61,0x4d,0xb3,0x38,0x4e,0x32,0xaa,0x71,0x6a,0xbb,0x3f,0x71,0x34,0x21,0x71,0xb7, + 0x61,0x4e,0x41,0x38,0x56,0x32,0xac,0x71,0x6b,0x69,0x3f,0x21,0x34,0x25,0x71,0xc0, + 0x57,0x32,0xc1,0xa5,0x34,0x2a,0x31,0xb9,0x61,0x4e,0x21,0x38,0x66,0x32,0xb0,0x71, + 0x6c,0x69,0x3f,0xb3,0x34,0x2d,0x71,0xba,0x51,0x4e,0xaf,0x38,0x6d,0x32,0xb2,0x51, + 0x6c,0xb3,0x3f,0xc1,0x34,0xa3,0x31,0xbb,0x41,0x4f,0x3d,0x38,0x75,0x32,0xb4,0x51, + 0x6d,0x61,0x40,0x3f,0x34,0xa7,0x31,0xbc,0x4f,0x24,0x51,0xc2,0xad,0xbd,0x72,0x51, + 0x32,0x31,0x41,0x53,0x35,0x3a,0x32,0x33,0x61,0x51,0x21,0x39,0x46,0x33,0x31,0x51, + 0x72,0x61,0x41,0x5f,0x35,0x3d,0x32,0x34,0x41,0x51,0xab,0x39,0x4c,0x33,0x38,0x31, + 0x72,0xab,0x41,0x6d,0x35,0x40,0x72,0x35,0x31,0x52,0x35,0x39,0x53,0x33,0x39,0xa3, + 0x73,0x51,0x41,0x7b,0x35,0x44,0x32,0x35,0xb3,0x52,0x51,0x39,0x5a,0x33,0x3b,0x71, + 0x73,0x29,0x41,0x29,0x35,0x47,0x72,0x36,0xa3,0x52,0x6d,0x3a,0xad,0xab,0x48,0xa9, + 0x31,0x52,0x75,0x39,0x63,0x33,0x3d,0xa3,0x74,0x51,0x41,0xad,0x35,0x59,0x72,0x37, + 0xa3,0x52,0x2d,0x39,0x69,0x33,0x3f,0x51,0x74,0x21,0x41,0xb9,0x35,0x4f,0x32,0x38, + 0x21,0x51,0x31,0x31,0x6f,0x33,0x40,0xa3,0x75,0x31,0x42,0x33,0x35,0x52,0x32,0x39, + 0x61,0x53,0x41,0x39,0x76,0x33,0x42,0x71,0x75,0x69,0x42,0x41,0x35,0x55,0x72,0x3a, + 0x51,0x53,0x5d,0x39,0x7d,0x33,0x44,0x51,0x75,0xb3,0x42,0x50,0xad,0xa3,0x49,0x55, + 0x21,0x42,0x45,0x49,0x56,0x39,0x3a,0x54,0x33,0x59,0x21,0x7b,0x4d,0x43,0x7c,0x35, + 0x23,0x52,0x45,0xab,0x56,0x4f,0x3a,0x51,0x43,0x59,0x3d,0x7b,0x40,0x43,0x75,0xa7, + 0x22,0x2a,0x45,0x5f,0x56,0x42,0x7a,0x57,0x63,0x5a,0x5d,0x7b,0x6c,0x43,0x23,0xa7, + 0x23,0x32,0x45,0x2f,0x56,0x45,0x3a,0x57,0xb5,0x5a,0xbf,0x7b,0x4e,0x43,0x7d,0x35, + 0x23,0x5a,0x45,0xb3,0x56,0x52,0x6b,0x72,0x21,0x5d,0x3d,0x3c,0xad,0xad,0x39,0x71, + 0x37,0x32,0x42,0x73,0x55,0x62,0x3a,0x3d,0x63,0x54,0x41,0x79,0xa8,0x43,0x4a,0x75, + 0x77,0x6a,0x42,0x21,0x55,0x65,0x7a,0x3e,0x53,0x54,0x5d,0x79,0xaf,0x43,0x4c,0x55, + 0x77,0xb4,0x42,0x2f,0x55,0x69,0x3a,0x3f,0x43,0x54,0x79,0x79,0xb6,0x43,0x49,0x35, + 0x47,0x3a,0x36,0x75,0x52,0x62,0x79,0x5d,0x73,0x3c,0x45,0x73,0xa9,0x41,0x2a,0xa7, + 0x47,0x72,0x36,0x23,0x52,0x31,0x31,0x3a,0x44,0x49,0x21,0xa9,0x53,0x4a,0x24,0x57, + 0x62,0x72,0x7d,0xa1,0x64,0x32,0x7d,0xa9,0xa6,0x4b,0x75,0xa9,0x28,0x4a,0x74,0x57, + 0x63,0x62,0x7d,0x77,0x64,0x46,0x7d,0xac,0x54,0x4a,0xaf,0xaa,0x4d,0x4a,0xaa,0x57, + 0x6a,0xb4,0xa1,0x4d,0x64,0x78,0x7d,0xbb,0x74,0x4e,0x35,0xaa,0xad,0x61,0x4f,0xb2, + 0x64,0x49,0x31,0x31,0x4e,0x49,0x38,0xa9,0x32,0x62,0x38,0x4b,0x64,0x41,0x79,0x65, + 0x74,0x46,0x45,0xa8,0x57,0x4a,0x5a,0xa9,0x5b,0x72,0x79,0xa5,0x63,0x4a,0x3d,0x78, + 0x44,0x44,0xbb,0xa9,0xc0,0x4a,0x30,0x37,0x66,0x42,0x3a,0x73,0x53,0x46,0x79,0x76, + 0xa5,0x41,0x75,0x75,0x4b,0x42,0x5a,0x55,0x53,0x32,0x39,0x6f,0x53,0x30,0x79,0x77, + 0x23,0x42,0x55,0x75,0x5b,0xb8,0x57,0x64,0x61,0x30,0x5a,0x59,0x40,0x31,0x58,0x3a, + 0xa4,0x63,0x25,0x37,0x2b,0x50,0xa8,0x29,0x36,0x51,0xb0,0x73,0x59,0x62,0xc0,0x7c, + 0x43,0x45,0x72,0xae,0x35,0x3f,0x51,0xad,0x38,0x26,0x5a,0x72,0xa4,0x62,0x7a,0x5e, + 0xb1,0xae,0x46,0x7e,0x35,0x24,0x51,0x2f,0x2a,0x2d,0x7e,0x21,0x58,0x5c,0xab,0x5d, + 0x28,0x3c,0x3b,0x67,0x2c,0xab,0x47,0x60,0x69,0x68,0x23,0x61,0xa5,0x6f,0xb2,0xa2, + 0x29,0xb7,0xaf,0x5d,0xa5,0xa2,0x30,0x47,0xbb,0x75,0x56,0x68,0x66,0x60,0x33,0x5d, + 0x6a,0x6c,0x4a,0x41,0xab,0xa6,0xa8,0x62,0x2a,0x6b,0x6e,0xa2,0xa8,0x58,0x33,0x7a, + 0xb7,0xad,0x6f,0x6b,0xa2,0x55,0x25,0x4f,0x56,0x62,0x2e,0x64,0x25,0x5d,0x71,0x5c, + 0x51,0x7b,0xb6,0x6f,0xa3,0x38,0x29,0x5f,0x37,0x39,0x7e,0x7d,0x36,0x65,0xb1,0xa1, + 0x35,0xbe,0x26,0xa3,0xb8,0xc0,0x2f,0x66,0x28,0xb2,0x6e,0xbe,0x74,0x71,0x34,0x21, + 0x77,0x4d,0x51,0x36,0x3c,0x5b,0xa7,0x40,0x5a,0x32,0xb0,0x58,0x46,0x58,0x5a,0x5a, + 0xb0,0xbd,0x2f,0xa8,0x31,0xa3,0xa7,0x4e,0xba,0x71,0x32,0x4e,0xb4,0x5d,0x59,0x7e, + 0xa6,0x75,0x71,0xa7,0xbd,0x45,0x51,0xb4,0x69,0x42,0x6f,0x69,0x72,0x59,0x2d,0x3b, + 0x6c,0xad,0x24,0x73,0x25,0xb3,0x46,0x30,0x66,0x79,0x26,0x70,0xb5,0x7d,0x6b,0xb0, + 0x2f,0x55,0x31,0x2c,0x36,0xb8,0x36,0x51,0x75,0x39,0x36,0x76,0x47,0x69,0x56,0x25, + 0x3a,0x68,0xb1,0x5f,0x3c,0x5b,0x6d,0xad,0x69,0x6b,0xb2,0x4f,0xb3,0x2f,0x30,0xbb, + 0x59,0xc2,0x53,0x5d,0xb2,0x5a,0x28,0x44,0x2c,0x24,0xab,0x53,0xa1,0x7a,0x2f,0x50, + 0x79,0x3a,0x4a,0x2d,0x49,0x5c,0x32,0x3b,0x22,0xae,0x5d,0x66,0x36,0x4e,0xaa,0x4d, + 0x26,0x7e,0x56,0x57,0xa9,0x67,0xba,0x3f,0x79,0xbf,0x26,0x35,0x27,0x79,0x24,0x7a, + 0x6a,0x38,0x7b,0x5d,0xa2,0x72,0x74,0x44,0x4f,0x3b,0xa1,0xaf,0x26,0x49,0x47,0xb1, + 0x46,0xbc,0x32,0x7e,0xb6,0x64,0x32,0x3e,0x34,0x74,0x64,0xa9,0xaf,0x45,0x2c,0x5c, + 0x68,0x57,0x52,0xaf,0xa1,0x6e,0x3e,0x44,0x40,0x3d,0x3a,0x68,0x39,0x61,0x53,0x2e, + 0x2a,0x46,0x7a,0x2c,0x5c,0x6b,0xb5,0xa1,0xaf,0x5d,0xa9,0x7d,0xa3,0x31,0xa5,0xb4, + 0x59,0xb0,0x7b,0x5c,0x3f,0x65,0xae,0x5b,0x69,0x63,0x75,0x31,0x31,0x3a,0x46,0xa9, + 0x36,0x73,0x42,0x64,0x65,0x5e,0xc0,0x7c,0xa5,0x74,0x33,0x23,0xa6,0xbd,0x49,0xba, + 0xb9,0xa3,0x22,0x30,0x3f,0x69,0x36,0x3f,0x46,0x7c,0x78,0x5b,0xb4,0x50,0x2d,0xa3, + 0x48,0xb6,0x2b,0x36,0x22,0x72,0x56,0xb3,0x27,0x35,0x72,0x68,0x43,0x3e,0xaa,0x5e, + 0x46,0x76,0xb4,0x7b,0x2b,0x67,0x3a,0x5f,0x30,0x7b,0x75,0x2d,0x2a,0x63,0x27,0x61, + 0x36,0xc1,0xb4,0x70,0x6d,0x62,0x6f,0x7d,0x23,0x24,0x59,0xa1,0xae,0x2b,0x4b,0xb4, + 0x68,0x4f,0x36,0xc1,0x27,0x75,0x7c,0x44,0x21,0xb7,0xba,0x3a,0x4f,0x21,0x28,0x43, + 0xa9,0xa6,0xb1,0x37,0x35,0x59,0x23,0xae,0x7c,0x64,0x38,0x3e,0x32,0x6c,0x4b,0x3d, + 0x48,0x43,0xa8,0x4e,0xbd,0x58,0x2f,0x3b,0x67,0x7c,0x31,0x23,0xb1,0x58,0x2f,0x2f, + 0x6a,0x69,0x5e,0x4d,0x47,0x5a,0xbe,0x7a,0xa8,0x5b,0x6d,0xbd,0xa2,0x21,0x24,0xb1, + 0x65,0xc0,0x32,0x56,0xb2,0x5a,0x73,0x5b,0xa3,0xbd,0xaa,0x33,0x2b,0x2c,0x47,0xbf, + 0x46,0x2f,0x76,0xb6,0x38,0x64,0x58,0x3d,0xbe,0x64,0x4e,0x49,0xae,0x2a,0x2c,0x3e, + 0x68,0x37,0x3a,0xaa,0x3e,0x6d,0xb2,0xa2,0x44,0xa6,0xad,0x3f,0xbe,0x29,0xa3,0x2c, + 0x69,0x41,0x43,0x37,0xba,0x72,0xbe,0xb3,0x6e,0x4d,0x3e,0x7e,0x38,0x2a,0x53,0x76, + 0x46,0x66,0x53,0x4a,0xa9,0x78,0x24,0x23,0x32,0xb7,0x2f,0x46,0x37,0xa5,0x44,0xc0, + 0x36,0xa3,0x76,0x75,0x2a,0x6a,0x3f,0xb1,0x2f,0x5d,0x37,0xbe,0x33,0xc2,0x52,0x29, + 0x39,0xa9,0x47,0x5d,0x44,0x7d,0xb8,0x64,0x4d,0x2b,0x69,0x65,0xa2,0xb4,0xa5,0x6c, + 0xa8,0x63,0x5a,0x62,0x7b,0x5d,0x6f,0xae,0xb1,0x2b,0xbf,0x25,0xa3,0x7b,0x49,0x3d, + 0x57,0x37,0x72,0x73,0x43,0x62,0x65,0x3d,0x54,0x7c,0x48,0x25,0x46,0x33,0x70,0xa3, + 0x45,0x3d,0xb0,0x7d,0xa9,0x29,0x4b,0x3f,0xb9,0xae,0x72,0xa3,0x7d,0x6b,0xa4,0xa1, + 0xaa,0x5c,0xb9,0x7c,0x33,0xbf,0xa4,0xb4,0x6a,0x5d,0x6b,0x5e,0x4e,0x77,0x6d,0x5b, + 0x4c,0xb5,0x79,0x5d,0x2a,0x2a,0x26,0x47,0x66,0x29,0x2a,0x6b,0xab,0x61,0xa3,0x7e, + 0x4b,0xbe,0x67,0x4b,0xbb,0xa8,0xa4,0x3b,0xbb,0x74,0x7b,0x46,0x58,0x7a,0xb1,0x44, + 0x57,0xa6,0x67,0x22,0x4a,0xaf,0xa4,0x25,0x66,0x70,0xc0,0xa2,0xa1,0x74,0x34,0x23, + 0x59,0x4b,0x7b,0x3f,0x27,0x33,0x46,0x4b,0x66,0xba,0x36,0x76,0x6a,0x63,0x40,0x3e, + 0x34,0x74,0x53,0xb9,0xae,0x6a,0x4d,0xba,0x58,0x74,0x5e,0xb8,0x4b,0x75,0xb7,0x22, + 0x47,0x2d,0x65,0x38,0x40,0xb9,0xa7,0x45,0x6a,0x5d,0x23,0x5d,0xac,0x7c,0x2a,0x7c, + 0x6c,0x4b,0xb4,0xbd,0xac,0x57,0xa9,0x3a,0xac,0x75,0xb0,0x77,0x51,0x6e,0x7b,0xb0, + 0x51,0x31,0x32,0xc1,0xad,0x2c,0x4b,0x32,0x2a,0xa5,0xc0,0x2f,0xb5,0x5a,0x58,0x5b, + 0x28,0x34,0x34,0x29,0xa5,0x4e,0x2c,0x51,0xb9,0xb9,0x76,0x2d,0x2c,0x73,0x35,0x42, + 0x45,0x55,0x6d,0x59,0xa1,0x4d,0xaa,0x4f,0xa8,0x49,0xb0,0x23,0x6b,0x66,0x52,0x43, + 0xb5,0x24,0x52,0x69,0x22,0xa4,0x2f,0x27,0x59,0x57,0xb5,0x54,0x3d,0x7a,0x27,0xad, + 0xa5,0x75,0xb7,0x75,0xab,0x33,0xa3,0xa9,0x49,0x56,0x46,0xbb,0x39,0x5a,0x62,0x61, + 0x5f,0x64,0x22,0xbf,0xa1,0x72,0x24,0xb7,0x36,0x3f,0x7a,0x67,0x3b,0x5a,0x67,0x3b, + 0x5f,0x6b,0x7c,0xb9,0x2e,0x7e,0x46,0x56,0x56,0x78,0x4a,0x64,0x3d,0x5e,0xa9,0x3c, + 0x6e,0x2b,0xb0,0xa7,0x2f,0x6d,0x28,0x25,0x67,0x31,0xc0,0x73,0xa6,0x61,0xb2,0x7d, + 0x4e,0x2c,0x3e,0x75,0xa8,0xab,0x2a,0xad,0x67,0x78,0xac,0x21,0x6f,0x66,0x25,0xb0, + 0x66,0x6c,0x61,0x75,0xb2,0x7c,0x2c,0xab,0x27,0xc0,0x72,0xab,0x49,0x6b,0xbb,0xb1, + 0xa3,0x2c,0x30,0xc1,0xbd,0x21,0x2f,0xa7,0x48,0xaa,0x56,0xbd,0x67,0x70,0xbf,0x40, + 0xbc,0xaf,0x32,0x7e,0x33,0xa2,0x51,0xb9,0x69,0xa1,0x63,0x46,0x5c,0x77,0x52,0x43, + 0x36,0x3d,0x23,0x58,0x46,0x79,0xa8,0x65,0x5a,0x5c,0x47,0x5e,0x24,0x7c,0x7b,0x44, + 0x42,0x75,0x39,0xb3,0xa1,0x46,0x26,0x48,0x36,0xa9,0x62,0x6c,0x5a,0x6a,0x24,0x3f, + 0xa6,0xa6,0x2f,0x23,0x2d,0xb8,0x30,0xa4,0x69,0xb1,0x37,0x5d,0x42,0x7d,0x46,0x44, + 0x36,0x75,0xa3,0x33,0xa2,0x38,0x44,0xb1,0x46,0x4d,0xb4,0x5b,0xab,0x5c,0x6f,0x7b, + 0xb7,0x6b,0xa7,0x43,0x2c,0xa5,0x47,0xb5,0x36,0xa3,0x62,0x6d,0xc1,0x60,0x64,0x3c, + 0xc1,0xb6,0x3d,0xb7,0xaa,0xae,0x2a,0x6d,0x57,0x59,0xc0,0xa2,0x7c,0x65,0x62,0x3e, + 0x3f,0x21,0x25,0x3a,0xc2,0x31,0x28,0xb0,0x54,0x33,0xbe,0x3b,0xae,0x3c,0x2c,0x40, + 0x27,0xa6,0xc0,0xad,0x79,0x6d,0x29,0xae,0x61,0x34,0xab,0x31,0xc0,0x2f,0x28,0xb4, + 0xbb,0x79,0xa5,0x46,0x65,0x77,0x4e,0xb4,0x2d,0xa7,0x69,0x6c,0x40,0xb4,0x57,0x32, + 0xac,0x22,0xb5,0x68,0x31,0x58,0x50,0x5b,0x31,0x33,0x77,0x57,0x2a,0xa1,0x47,0xa8, + 0xb9,0x45,0x32,0x76,0xaf,0x63,0x3f,0x7e,0x6b,0x34,0x7b,0x53,0xb8,0x54,0x2f,0x66, + 0x48,0xc2,0xb1,0x40,0x6d,0x76,0x4d,0x42,0x6b,0xa6,0x40,0x46,0x34,0x21,0x56,0xa4, + 0x46,0x51,0x3e,0x5a,0x5c,0x5b,0x26,0x3e,0x36,0x74,0x5a,0xa4,0x3b,0x44,0x2f,0x3f, + 0x27,0x6f,0x67,0x6d,0xb7,0x5a,0xab,0x7c,0x62,0x25,0x36,0x52,0x37,0x34,0x55,0x34, + 0x35,0xb5,0x46,0x4e,0x78,0x58,0x35,0x5a,0xbf,0x23,0x7d,0xb3,0x25,0x28,0x47,0xa5, + 0x66,0xbc,0x46,0x71,0x22,0x63,0x71,0x31,0x34,0xae,0x4e,0x35,0xaf,0x6a,0x4c,0x4d, + 0x67,0xa6,0xa4,0xa3,0x34,0x6b,0x4e,0xa2,0x5b,0xb6,0xab,0x41,0xbe,0x3e,0x50,0x70, + 0xaa,0xa6,0x4a,0xbe,0xaa,0x63,0x27,0xb1,0x5c,0x2b,0x7e,0x3b,0x2d,0xb7,0x48,0x6b, + 0x57,0x48,0x32,0x75,0x4a,0x62,0x79,0x3e,0xa8,0x25,0x49,0xa6,0x3b,0xb1,0xa6,0x70, + 0x3a,0x41,0x36,0x30,0x57,0x6d,0x27,0x24,0x6b,0x73,0x6b,0x27,0xa1,0x27,0x44,0x24, + 0x65,0xc0,0x32,0x50,0x22,0x59,0x42,0xad,0x50,0x64,0xac,0xa5,0x22,0xbe,0x45,0x5b, + 0x76,0x4a,0x36,0x57,0xc2,0x5a,0xbd,0xad,0x6b,0xa5,0x27,0x37,0x29,0xb3,0x28,0x37, + 0xb8,0xbd,0x5a,0x6f,0x60,0x61,0x45,0x3d,0x37,0xae,0x31,0x6f,0xa6,0x5d,0x2a,0x5a, + 0x67,0x27,0x36,0x2a,0x73,0x6a,0x6c,0x5f,0x5f,0xbe,0x30,0xb4,0x31,0x33,0xa3,0x52, + 0x39,0x43,0x6b,0x3c,0xba,0x79,0x69,0x63,0x70,0xbf,0x2e,0x60,0x4a,0x5e,0x57,0x2f, + 0x35,0xb9,0xb8,0x53,0x5e,0x5f,0x51,0x5d,0xa9,0xae,0x56,0x31,0x2d,0xbc,0x4a,0xa1, + 0x27,0x7d,0x56,0xa9,0x21,0x65,0x51,0x60,0x7d,0x5b,0x74,0x79,0x23,0x54,0x26,0xc2, + 0xa8,0xac,0x4b,0x58,0x55,0x63,0x79,0xb0,0x64,0xae,0x5d,0xab,0xb7,0x71,0x2f,0x68, + 0x28,0x7b,0x5e,0xba,0x7b,0x6f,0xb1,0x61,0x5d,0xa7,0x3e,0xc2,0x39,0x60,0xa5,0x58, + 0x49,0x2f,0x77,0x50,0x22,0x79,0x78,0xad,0x79,0x35,0x7a,0x6b,0xa1,0x4c,0x45,0x4d, + 0x26,0x4a,0xac,0x58,0x28,0x6a,0x56,0xa1,0x6f,0x7c,0x30,0x7e,0x33,0x28,0xa6,0x29, + 0xac,0xa1,0x53,0x64,0x23,0x7d,0x2e,0xad,0x42,0x24,0x36,0x6e,0x37,0x29,0x46,0x60, + 0x58,0x24,0x2a,0x52,0x24,0x5e,0x22,0xb5,0x39,0x5d,0x29,0xa7,0xa1,0xb0,0x2b,0x2d, + 0xbc,0x3b,0x76,0x69,0x79,0x5f,0x6b,0x73,0x21,0x58,0xbf,0x34,0x49,0x62,0xaa,0xb2, + 0x5a,0x4c,0x62,0xac,0x48,0x61,0xa6,0xb8,0x58,0x25,0x5a,0xa6,0x39,0x7c,0x51,0xa2, + 0x72,0x6c,0x52,0xa3,0xc1,0x59,0x2b,0x3e,0x7a,0x50,0x7a,0x55,0x4c,0x5b,0x5b,0xb3, + 0x22,0x4d,0x5b,0x79,0xc2,0xa9,0xa6,0x2d,0x4a,0x34,0x4a,0x58,0x39,0x75,0x41,0x60, + 0x4d,0x43,0x6f,0xbf,0x21,0x39,0x25,0x79,0x76,0x3b,0x7e,0x5b,0x5e,0x5c,0xbd,0x2e, + 0x58,0x4d,0x5e,0x5f,0x22,0x5d,0x29,0x7c,0xbb,0x53,0xc0,0xad,0xa3,0x6c,0x49,0x5d, + 0xb9,0x3e,0x56,0x74,0x63,0x62,0xa1,0x7d,0x77,0xa6,0x46,0x2f,0xa9,0x52,0x4b,0x33, + 0x67,0xb6,0x4a,0xad,0x6e,0x6e,0x6f,0xb2,0x75,0xa6,0xb9,0x63,0xc0,0x56,0x30,0x7e, + 0x68,0xbb,0x6b,0x37,0x7b,0x72,0xb6,0x61,0xa3,0x75,0x5a,0x78,0x3b,0x64,0x53,0xc2, + 0x29,0xb3,0xad,0x62,0x40,0xa1,0xb1,0x41,0x5d,0xb7,0x70,0x22,0x4c,0x31,0x31,0x41, + 0xb8,0x41,0xc0,0x76,0x34,0x63,0x61,0x3e,0xbc,0x7d,0x2a,0x33,0xab,0x79,0x25,0x35, + 0x37,0x2c,0xac,0x29,0x25,0x68,0x2e,0x40,0x56,0x34,0xb8,0x32,0x39,0x42,0xa5,0x72, + 0x37,0x70,0x2a,0x4d,0x6a,0x59,0x3a,0x7b,0x37,0x5b,0x72,0xbb,0x22,0x4d,0x45,0x7d, + 0x66,0x46,0x4e,0x5b,0x40,0x5c,0x72,0x5c,0x3d,0xa5,0xae,0xb7,0x2f,0x2a,0x49,0x70, + 0x37,0x40,0x7e,0x75,0xb5,0x62,0x78,0x3e,0x43,0x7c,0x5a,0xbd,0xb5,0x27,0x4d,0x76, + 0xaa,0x49,0x22,0xb3,0xb2,0x6d,0x4f,0x60,0x21,0xa6,0x2f,0x24,0x31,0x76,0xa5,0x54, + 0x49,0x30,0x3b,0x4a,0x23,0x78,0x49,0xb5,0x38,0x5d,0x7e,0xb8,0x47,0x5b,0xa9,0x33, + 0x6a,0x24,0xa5,0x6d,0x74,0x59,0xaa,0xad,0x6c,0x4b,0x7e,0xb9,0x2f,0x44,0x48,0xa6, + 0x67,0xb7,0x72,0x2e,0x35,0x6a,0xc2,0xa1,0x65,0x4c,0xb7,0xb2,0x33,0x31,0x53,0x30, + 0x59,0x23,0x73,0x5d,0xa1,0x58,0x33,0xad,0x3f,0x53,0x7e,0xbb,0x25,0xc0,0x46,0x2b, + 0x46,0x7c,0x42,0x68,0xb4,0x5f,0xad,0xae,0xa5,0x6b,0xbf,0xb3,0xa5,0x53,0x2a,0x66, + 0xb9,0x6b,0x2a,0x2e,0x21,0x6a,0x63,0xa2,0x7c,0x55,0x53,0x74,0x31,0xb3,0xa3,0x4f, + 0x39,0x4b,0x6b,0x3e,0x38,0x76,0x6b,0x42,0x24,0x6d,0x7c,0x40,0x47,0x64,0xa9,0x33, + 0x6a,0xbf,0x22,0x4e,0x43,0x58,0x34,0x5a,0xb7,0x73,0x7e,0x43,0x25,0x50,0x46,0x36, + 0xb8,0x25,0x62,0x70,0x52,0x60,0xaa,0xaf,0x3b,0x6c,0x53,0x4d,0xad,0x5e,0x4e,0x41, + 0x48,0x75,0xbd,0x46,0x55,0x76,0x4e,0xb4,0x6a,0x35,0x76,0x6d,0xa1,0xa7,0xa9,0xb7, + 0x75,0xb6,0xb4,0x50,0x60,0x58,0x77,0x5b,0x32,0x63,0x72,0x43,0x22,0x67,0x45,0x64, + 0xb8,0x46,0xa8,0x56,0xc1,0x5a,0x57,0x7b,0x6f,0x4b,0x7d,0x53,0x25,0xb8,0x36,0x51, + 0xa2,0xbb,0x35,0x4d,0x25,0x75,0x26,0x5b,0x46,0x6e,0x3a,0x5f,0xc0,0x5d,0x26,0x3c, + 0x66,0xad,0xb1,0x4f,0x2c,0xb5,0x28,0x6d,0xb8,0xb2,0x2e,0x6b,0xbb,0x60,0x51,0xae, + 0xac,0x23,0xbd,0xb1,0x2f,0x3d,0x48,0xad,0x57,0x33,0x62,0x74,0x48,0x62,0x67,0x3d, + 0x5b,0x6c,0x3d,0xb9,0xa8,0x32,0x4a,0x79,0x67,0x68,0x22,0x7d,0xb0,0x64,0x79,0x5e, + 0x3a,0x6c,0x54,0x47,0xac,0x60,0x2c,0x36,0x57,0xae,0x56,0x2b,0x60,0x68,0x58,0x5e, + 0xa6,0x44,0x27,0x3f,0xb9,0x67,0x4f,0x38,0xba,0x28,0x32,0xbb,0x36,0x6f,0x77,0x40, + 0x26,0xb6,0xb9,0xa5,0xc0,0x3b,0xa3,0x31,0x69,0x36,0x6f,0x32,0x62,0x71,0x46,0x41, + 0x49,0xbf,0x35,0x26,0x33,0x5a,0x51,0xac,0x79,0x74,0x37,0x41,0x4c,0x76,0xab,0x22, + 0xa2,0xa7,0x64,0x46,0x41,0x6b,0xa7,0x5f,0x4a,0x42,0xc0,0xb4,0xbf,0x7a,0x5a,0x43, + 0x25,0xaf,0x29,0x31,0x31,0x33,0xa9,0x44,0x4a,0xa1,0xa5,0x65,0x6c,0xa1,0x27,0xad, + 0x5b,0x2b,0x7c,0xb1,0x24,0x35,0x46,0x4b,0x26,0x78,0x2e,0x76,0xa3,0x68,0x2b,0x22, + 0x76,0xbf,0x6f,0xb6,0x4f,0x56,0x25,0x58,0x66,0x43,0x5a,0x5a,0xc0,0x5c,0x41,0x40, + 0x58,0x6d,0x76,0x72,0x4e,0xac,0x58,0x79,0x78,0x49,0x56,0x2f,0xb3,0x71,0x75,0x5f, + 0x30,0xad,0xc2,0x65,0xa3,0x25,0x57,0x2c,0x68,0x46,0xb5,0x4f,0xa7,0x66,0x71,0xb6, + 0x3d,0x23,0x6c,0xa3,0x27,0x63,0x46,0xba,0xa8,0x73,0xac,0x65,0xab,0x61,0x62,0xaf, + 0x41,0xbe,0x49,0x3d,0xa9,0x4d,0x2b,0x47,0x47,0x78,0x2e,0x2c,0x26,0x6b,0xa1,0xa2, + 0x27,0xb7,0x3a,0x36,0x4c,0x7e,0x24,0x7b,0x35,0xc1,0x56,0x57,0x37,0x5b,0x2c,0xae, + 0x2f,0x63,0xba,0x2d,0x2e,0xc0,0x2a,0xb6,0x47,0xa6,0x7e,0xab,0x33,0x6d,0x45,0x42, + 0x5a,0x65,0xa2,0x70,0x39,0x59,0x46,0xb7,0xb8,0xb4,0x5e,0x78,0x66,0x59,0x5c,0x3b, + 0x39,0xad,0x75,0x31,0xaa,0xa7,0x26,0x3c,0xa8,0x76,0xb0,0x64,0x61,0x5e,0x2b,0x5c, + 0xb7,0xae,0x3b,0x73,0xa6,0x4f,0x2b,0x3f,0x67,0x29,0x52,0x2d,0xc0,0x69,0x62,0xb5, + 0x49,0x34,0x79,0x5b,0xbb,0x44,0x4f,0x3e,0x28,0x7d,0x6a,0x7b,0x61,0x6f,0xba,0x41, + 0x6d,0x3d,0x51,0x44,0x40,0x7e,0xa8,0x7d,0x76,0x42,0x52,0x5f,0x21,0x64,0x2b,0xa2, + 0xbd,0x3d,0x63,0xab,0x22,0x52,0x46,0xa8,0x5a,0x62,0xac,0x62,0x3b,0x65,0xb0,0x41, + 0x3c,0x43,0x21,0x4d,0x2e,0xc1,0x46,0xb5,0x28,0x78,0xad,0x6b,0x2d,0x58,0x23,0x7b, + 0x59,0x2b,0x21,0xbf,0xa7,0x45,0x4a,0x73,0x77,0x70,0x26,0xa2,0x35,0x6e,0x46,0xa2, + 0x63,0x44,0xb7,0x30,0x44,0x5f,0x4b,0x46,0x2a,0x2a,0xa8,0xb9,0x4a,0x5a,0xa5,0x7b, + 0x44,0x6b,0x7c,0x25,0x46,0x33,0x70,0xa3,0x4e,0xbd,0xb2,0xaf,0xa5,0x28,0x4a,0x4d, + 0xa9,0x52,0x66,0xa2,0x6b,0x66,0xad,0x61,0x2e,0x3d,0x2b,0x51,0xb9,0xae,0x57,0xac, + 0x77,0x49,0x4b,0x58,0x5c,0x7e,0xb2,0xb1,0xa8,0x44,0x49,0x43,0xa1,0x7d,0x45,0x49, + 0x56,0x4c,0x76,0x6a,0xab,0x61,0x55,0x7d,0x77,0x4c,0x46,0x6f,0xab,0xb6,0x4d,0x6a, + 0x58,0x4a,0x3e,0xae,0x48,0x6e,0xa3,0xa2,0xac,0x5d,0x4b,0x38,0x3c,0xb0,0xa6,0x40, + 0x3a,0x39,0x73,0x64,0x5d,0x63,0xad,0xaf,0xab,0x2c,0x60,0x5b,0xa1,0xad,0x44,0x78, + 0x55,0xbe,0xc0,0x4f,0x6b,0x5a,0x6f,0x3b,0x70,0x43,0xa2,0x77,0x26,0xb0,0x26,0x2e, + 0x66,0x77,0x5e,0x64,0x7a,0x5d,0xc2,0xae,0x46,0x33,0xb0,0x4b,0x2d,0x32,0x48,0x76, + 0x66,0xb9,0x2e,0x6f,0x4e,0x61,0x32,0xaf,0x63,0xbe,0x46,0x69,0x2c,0x28,0x2a,0x68, + 0x27,0x60,0x52,0x7c,0x4e,0x64,0x29,0x7e,0x61,0x31,0x32,0xb9,0xae,0x38,0x2c,0x39, + 0x28,0x4b,0x56,0xb6,0x72,0x6d,0xc1,0x40,0x72,0x7c,0xb7,0x27,0xc0,0x22,0x51,0x31, + 0x59,0x40,0xa1,0x34,0x47,0x75,0x28,0x22,0x57,0x7d,0x5a,0x7e,0x3b,0x77,0x53,0x2e, + 0xab,0x27,0x4f,0x4a,0x2d,0x77,0x64,0x43,0xb2,0xa7,0xa4,0x2f,0xae,0x76,0x24,0x78, + 0x75,0xbf,0x66,0x4f,0x21,0x59,0x26,0xae,0x70,0x23,0xb0,0x41,0xa4,0x31,0x29,0xab, + 0x57,0x62,0x36,0x28,0x7c,0x68,0x5f,0xb0,0x74,0xb6,0x7b,0xbd,0xb7,0xad,0x4e,0x69, + 0x48,0x72,0xac,0xb5,0x3d,0x71,0x3d,0xb3,0x3f,0x28,0x5b,0x34,0x45,0x73,0x58,0x22, + 0xb8,0x34,0x62,0xc2,0x4f,0x38,0x28,0xae,0x39,0x2a,0x5f,0x6c,0xbd,0x6e,0x6f,0x42, + 0xab,0xad,0xb2,0x28,0x47,0x32,0x24,0x2f,0x46,0x50,0x2e,0x5f,0x62,0x5d,0xb5,0x5c, + 0x5b,0x53,0xb1,0x43,0xa3,0x70,0x2c,0x71,0xa9,0xc0,0xbc,0xae,0xad,0xb8,0x54,0x44, + 0xb8,0x29,0x33,0x3c,0xa3,0x6e,0x2d,0x7b,0x40,0x54,0x4f,0x6c,0x33,0x61,0x28,0x3a, + 0x59,0x59,0xbc,0xbf,0x3f,0x72,0x57,0x5b,0x41,0x53,0xb4,0x21,0xa6,0x64,0x54,0x64, + 0x77,0x5c,0x6a,0xa5,0x6f,0x6d,0x76,0xb2,0x21,0x5d,0x31,0x6c,0x3c,0xa8,0x54,0x7e, + 0xac,0x37,0x4f,0x3e,0x5b,0x79,0x38,0xad,0x40,0x23,0x79,0xb7,0x2d,0x5a,0x2a,0xb2, + 0x78,0x32,0x26,0xa7,0x7d,0x79,0xb5,0x43,0x43,0x2d,0xa2,0x7c,0x33,0xa4,0x47,0xa9, + 0x46,0xc2,0xa8,0x71,0x6c,0x58,0x66,0x7b,0x69,0x73,0xb0,0x47,0xa5,0x49,0x2a,0xb4, + 0x57,0x30,0x56,0xa8,0xa3,0x6a,0x7c,0xa2,0x57,0x2d,0x37,0x78,0x3e,0x5a,0x55,0x63, + 0xac,0x79,0x7a,0x54,0x28,0x5a,0x2b,0x7b,0xa2,0xbd,0xb1,0x41,0xa6,0x4d,0x2b,0x26, + 0x78,0xab,0x33,0x60,0x2b,0x5c,0x64,0x7b,0x67,0x78,0x59,0x6b,0x35,0xc2,0x71,0xb5, + 0xb8,0x2a,0x76,0x6a,0x2f,0x5f,0xbe,0x7a,0xb3,0x3c,0x38,0xbf,0xa5,0x4a,0x4c,0x69, + 0x38,0xa1,0x5e,0xb5,0x73,0x6f,0x24,0x60,0xb0,0x44,0xc2,0x2c,0x32,0x40,0xa3,0x23, + 0x39,0x53,0x4b,0x41,0xb5,0x75,0xa7,0x42,0x68,0x55,0x69,0x30,0x40,0x49,0xa7,0x3a, + 0x6a,0x3c,0x63,0x54,0x77,0x7c,0x58,0x43,0x4d,0x33,0x6a,0x4f,0xa2,0x53,0x25,0x59, + 0x46,0x4d,0x7e,0x6f,0x3f,0x62,0x66,0x3d,0xb7,0x3c,0x61,0x47,0xb1,0x62,0x2d,0xa7, + 0xaa,0xb9,0x67,0x54,0x34,0x7a,0x66,0x3b,0x62,0x7b,0xa9,0xc1,0x2c,0xab,0x2c,0x5c, + 0x28,0x7a,0x6a,0xc0,0x4c,0x6f,0x50,0x7c,0x3a,0xbe,0x78,0xb7,0x22,0x5a,0xa5,0x4f, + 0x39,0xc1,0x5a,0x50,0xbe,0x5f,0x3a,0x5d,0xad,0xa6,0x30,0x77,0xbd,0x3f,0x51,0x30, + 0xbc,0xa1,0x4a,0x54,0x5b,0x60,0xbe,0x3d,0x27,0xbe,0x57,0x43,0xae,0xbc,0x2c,0x51, + 0x31,0x35,0x2a,0x2d,0xa7,0x68,0xc2,0xa1,0xa4,0x54,0xba,0x73,0x2e,0x6b,0xa7,0x41, + 0xbc,0x39,0x4b,0x62,0xa9,0x59,0x78,0x5b,0x55,0x34,0x3b,0x53,0xa9,0xaf,0x2a,0x74, + 0x57,0xb8,0x2a,0x6e,0x23,0x6f,0x2d,0xa2,0xc2,0x74,0x4b,0x30,0x36,0xbe,0xa4,0x70, + 0x39,0x26,0x56,0x56,0x2a,0x5a,0x2d,0xae,0x49,0xbd,0xbd,0x51,0x30,0x5b,0x29,0x4d, + 0x7a,0x44,0x43,0x5e,0x68,0x59,0x38,0xad,0x4e,0xad,0x79,0x71,0x24,0x54,0x25,0xc0, + 0x76,0x50,0x52,0x59,0x77,0x5b,0x7d,0x5b,0x22,0x6b,0x2a,0x21,0x2a,0x30,0x47,0x58, + 0x76,0x26,0x26,0x67,0x37,0x5f,0x34,0xae,0x72,0x3b,0xb3,0x65,0x2d,0x73,0x48,0x22, + 0x56,0xba,0x32,0x6d,0xb3,0x60,0x30,0xaf,0x59,0x54,0x3c,0x67,0xa5,0x77,0x49,0xb1, + 0xb9,0x49,0x4e,0x7d,0x3d,0x64,0x3c,0x5d,0xaa,0x64,0x4a,0xbf,0xaa,0x22,0x4b,0x34, + 0xb9,0x22,0x26,0x26,0x6d,0x67,0x53,0x3e,0x21,0x7c,0x6a,0x61,0xb1,0x4f,0x4d,0x55, + 0xaa,0x3c,0x4e,0xa6,0x78,0x6b,0x71,0x5f,0xb8,0xae,0xa3,0x33,0xbc,0x63,0x2f,0x6f, + 0x38,0xa2,0x32,0xb7,0x42,0x6e,0xac,0xb2,0x74,0x7c,0xb9,0x5e,0x31,0xae,0x51,0xb4, + 0x69,0x53,0x57,0x3b,0x2e,0x75,0x6d,0xb4,0x32,0xbf,0x59,0xbc,0x3b,0x5b,0x53,0xa1, + 0x69,0x24,0x37,0x4a,0x2f,0x77,0x5a,0x43,0x47,0x65,0x7a,0xc0,0x44,0x3d,0x56,0x44, + 0x7a,0x65,0xa5,0x5f,0x3b,0x58,0x33,0x3a,0xa4,0xb5,0x6a,0x5f,0xa1,0x7c,0x25,0x5f, + 0x36,0x47,0x6a,0x5f,0x65,0x5d,0x64,0x3c,0x33,0x43,0xaf,0xb3,0x2f,0xa5,0x29,0x50, + 0xa9,0x54,0x36,0xa1,0x27,0x64,0x22,0x3e,0x2c,0x64,0x7a,0xa9,0xb8,0x62,0x2f,0x28, + 0x39,0x54,0x7b,0x48,0x69,0x79,0x79,0x43,0x64,0x3b,0x2c,0xab,0x28,0xc2,0x57,0x4e, + 0x52,0x59,0x44,0xc1,0x32,0xb9,0x29,0x72,0x27,0x7d,0x2a,0x28,0xb0,0x69,0x26,0x40, + 0xaa,0x6d,0x32,0xa8,0x33,0xb6,0x53,0x6c,0xbc,0x73,0x27,0x40,0x62,0x78,0xa1,0xae, + 0x74,0x73,0x70,0x73,0xa2,0x2b,0x24,0xa3,0xb8,0x5a,0x32,0x66,0x2e,0x5e,0xbd,0x5c, + 0x6d,0x4b,0xc0,0x4d,0xa4,0x48,0x29,0xb9,0x37,0x5b,0x5e,0x7e,0xb1,0x65,0x57,0xb0, + 0x48,0x74,0x68,0xa5,0xb0,0x4a,0x2e,0x68,0x48,0x59,0xc0,0xb1,0x2f,0x6d,0xbc,0xa2, + 0x44,0x4c,0xba,0x78,0x32,0x28,0xa3,0x26,0x59,0x5e,0x5b,0x43,0x6b,0x76,0x5b,0xb4, + 0xac,0x2d,0x6d,0xa8,0x41,0xb1,0xa7,0x51,0xbc,0x6e,0xac,0x4e,0x72,0x58,0x31,0xad, + 0x58,0x5b,0xa6,0x29,0x29,0x36,0x28,0x34,0x58,0x5a,0xb8,0x69,0xa1,0x71,0x73,0x22, + 0x5d,0x5d,0x6e,0x78,0x47,0x67,0xa8,0xa7,0x28,0x2f,0x6f,0x45,0x39,0x7d,0x49,0x23, + 0x50,0x4b,0x2b,0x21,0x24,0x31,0x31,0x33,0xbc,0x32,0xa8,0x5a,0x33,0x5c,0x7a,0x5c, + 0xad,0x74,0x3d,0xab,0xaf,0x76,0x4d,0x3d,0x48,0x6d,0x5e,0xbc,0xa3,0x70,0x2d,0x42, + 0x35,0x45,0x72,0x5a,0x42,0x39,0x55,0xa6,0x3a,0x4d,0x6f,0x5d,0x2f,0x6b,0x62,0x44, + 0x51,0x6b,0xb8,0x23,0x2e,0x69,0x4a,0x65,0x57,0x6e,0x53,0x4c,0x2c,0x7c,0x4c,0x7d, + 0x65,0x7c,0x4d,0x63,0xac,0xa5,0xa3,0xa5,0xbc,0x77,0x33,0x5e,0xc1,0x75,0x52,0x3e, + 0xba,0x24,0x44,0xb3,0x2c,0x3c,0x44,0x76,0x78,0x33,0xb8,0xad,0x60,0x64,0x62,0x3b, + 0x44,0x63,0x7c,0x75,0x23,0xac,0x27,0x61,0x46,0xbc,0x4e,0x71,0x41,0x62,0x40,0xaf, + 0x28,0x54,0x45,0x6f,0xa9,0x6b,0x4a,0x2f,0x57,0x71,0x2a,0x21,0xa6,0x66,0x72,0x5e, + 0xaa,0x44,0x79,0x6f,0xb8,0xb0,0x2e,0x28,0xaa,0xa5,0x2b,0x32,0xb3,0x5d,0x70,0x62, + 0x38,0xbf,0x57,0x72,0x3b,0x7a,0xa5,0x2a,0x69,0x21,0xb9,0x52,0x43,0x79,0x25,0x23, + 0xb8,0x7d,0x2f,0x43,0xa8,0x38,0x4f,0x71,0xab,0x3e,0xb1,0x5d,0x5e,0x60,0x68,0x3d, + 0x32,0x24,0x3b,0x7b,0xa8,0x3b,0x4a,0x23,0x37,0x70,0x7e,0xb1,0x7e,0x6e,0x44,0x60, + 0x74,0xb6,0xbb,0x46,0x32,0x27,0x54,0x3d,0x79,0xb2,0x37,0x4b,0x30,0x78,0x5b,0x60, + 0x31,0x6b,0x7c,0x63,0xa5,0x23,0x29,0xab,0x57,0x55,0xa4,0x75,0x5e,0x76,0x51,0xb2, + 0x5d,0x34,0xb1,0x2a,0x3b,0xb8,0x6b,0x23,0xaa,0x64,0xb7,0x4a,0x33,0x55,0xa4,0xbe, + 0x45,0xb5,0x52,0x53,0x74,0x5a,0x29,0x3b,0x6b,0x4b,0xaf,0x35,0x2d,0x3c,0x48,0x4c, + 0x26,0xac,0x4a,0x75,0x78,0x62,0x5d,0x3d,0x72,0x4c,0x51,0xab,0xab,0xa7,0x2c,0x39, + 0x27,0xab,0x2e,0x2c,0x24,0x64,0x28,0x3e,0xb7,0xb6,0x76,0xbd,0xb4,0xa8,0x2a,0x60, + 0xba,0x26,0x66,0xba,0x2b,0x6f,0xbd,0x73,0x21,0x58,0xbf,0x33,0x7b,0x70,0x5b,0x40, + 0xba,0x25,0x35,0x68,0x33,0x4d,0xa3,0x25,0xab,0x5c,0x6b,0x46,0xa1,0x77,0x6e,0x62, + 0x28,0x75,0x72,0xb2,0x41,0x27,0xa7,0x23,0x4a,0x45,0x3f,0x5c,0x5f,0x7e,0x24,0x5b, + 0x59,0x53,0x25,0xb3,0xb2,0x4c,0x4d,0x5e,0x36,0x3d,0x46,0xb5,0x26,0x70,0x5d,0xb3, + 0x4d,0xb6,0xb4,0x49,0x27,0x59,0x27,0x46,0x36,0xa8,0x5a,0x78,0xc1,0x64,0x70,0x5d, + 0xa8,0x24,0x58,0x63,0xb5,0x78,0x2e,0x62,0xaa,0x59,0x6a,0xb5,0x27,0x6d,0xba,0xb2, + 0x4a,0x6c,0xb3,0x71,0xc0,0x53,0x50,0x51,0xbb,0x62,0x23,0x45,0x6c,0x7c,0x49,0x63, + 0x33,0x35,0xc2,0xa1,0x21,0x6b,0x25,0x2a,0x76,0x50,0x3a,0x57,0x3a,0x59,0x5b,0x7b, + 0x2f,0xb5,0xa4,0x4f,0x2a,0x4f,0x2d,0x22,0x66,0x2c,0x42,0x69,0x4e,0x5a,0xbb,0xaf, + 0x40,0x4c,0x32,0x69,0xa6,0x72,0x29,0xaa,0xb9,0x4e,0xb0,0x77,0x31,0x31,0x64,0x5d, + 0xa1,0x7c,0x48,0xb5,0xa9,0xb4,0x28,0x6a,0x27,0xa2,0xb8,0x23,0x46,0x68,0xbc,0x5f, + 0x49,0x7b,0x6c,0x23,0xb8,0xbf,0x4e,0x23,0x68,0x27,0xc0,0xbc,0xa2,0x6f,0xaa,0x40, + 0x27,0x3d,0x32,0x44,0x34,0x5d,0x51,0xb0,0x79,0x56,0xb5,0x3a,0xbe,0x73,0xb4,0x62, + 0x38,0x35,0x65,0x34,0x41,0x67,0xa7,0x43,0xbc,0x49,0xb5,0x5f,0x43,0x7e,0x64,0xad, + 0x3a,0x6b,0xa5,0x4d,0xa4,0xac,0xa3,0x57,0x29,0x59,0x53,0x4b,0x51,0x79,0x61,0xac, + 0xba,0x53,0x72,0x3f,0x23,0x6a,0x25,0xb0,0xb9,0x33,0x56,0x77,0x30,0x64,0x7c,0x3e, + 0xae,0x4d,0x65,0x70,0x41,0xae,0x24,0xae,0xa8,0xa9,0x5b,0x4a,0xa2,0x63,0xa9,0xa2, + 0x26,0x43,0xa1,0x5e,0x39,0x6c,0x45,0x69,0x67,0x4b,0xa4,0x67,0xae,0x5e,0x73,0x7c, + 0x71,0xae,0x42,0x53,0xaa,0x5f,0x55,0x4b,0xa7,0xb3,0xac,0x63,0x5b,0x5d,0x2d,0x3e, + 0x76,0x3d,0x59,0xbf,0x26,0x3b,0x27,0x45,0x26,0xa2,0x72,0x71,0x24,0x62,0x61,0x5d, + 0xb6,0x5d,0x3a,0x5b,0xac,0x51,0x56,0x29,0x7a,0x7a,0x53,0x65,0x24,0x58,0x72,0x7c, + 0x40,0xb5,0xaf,0x52,0x31,0x29,0x28,0x36,0xb8,0xb7,0x46,0x6f,0x51,0x61,0x43,0xaf, + 0x44,0x54,0x3c,0xc1,0xa9,0xbb,0x4c,0x4c,0xa9,0xb9,0x6b,0x31,0xc2,0x71,0xb8,0x41, + 0x59,0x2d,0x53,0xb4,0x3d,0x31,0x55,0x36,0xac,0x35,0x5b,0x5e,0x2c,0xa2,0x67,0xb6, + 0x6f,0x4b,0x6c,0xa3,0x24,0x44,0x27,0x56,0x78,0x2d,0x67,0x53,0x7d,0x7d,0x6f,0x64, + 0x2e,0xae,0x69,0xa1,0xb3,0x5a,0x25,0xab,0x76,0x5d,0x46,0x67,0x29,0x62,0x58,0x7d, + 0x5e,0x4c,0x3b,0x75,0xaf,0xba,0x2c,0xa7,0x58,0x51,0x2f,0x45,0x69,0x7b,0x61,0x5e, + 0xc2,0xb7,0x59,0xb4,0x34,0xb6,0x25,0x70,0x39,0x68,0x5c,0x25,0x24,0xb8,0x36,0x51, + 0xa2,0xbb,0x38,0x23,0x24,0x54,0x44,0xad,0x7a,0x36,0x73,0x4f,0xad,0x5d,0x7d,0x61, + 0x50,0xad,0xba,0x26,0xad,0x6e,0x60,0xb4,0xc0,0x24,0x51,0xb2,0x3d,0xbf,0x4d,0x7a, + 0x3a,0xa4,0xb8,0x26,0x61,0x76,0x3f,0x5a,0xa8,0x73,0x7d,0x3d,0x27,0x64,0x46,0xbb, + 0x27,0x46,0x3a,0x78,0xa9,0x63,0x24,0x7e,0x6f,0x3c,0x66,0x67,0xb1,0x27,0x2d,0x4e, + 0x28,0x70,0x6e,0xb8,0x5b,0x6e,0xb1,0xb2,0x24,0xaf,0x34,0x3e,0x31,0xa8,0xa4,0x23, + 0x29,0x23,0xb1,0x58,0xa6,0x5c,0x62,0xae,0x34,0xb5,0xc1,0x2b,0xa8,0x7c,0x4a,0x21, + 0x37,0x26,0x26,0x27,0x68,0x6b,0xb4,0xb4,0x53,0x53,0x74,0x7b,0xba,0x49,0x46,0xa6, + 0x66,0xbe,0x46,0x71,0xbd,0x64,0x49,0x3e,0xa2,0x54,0x25,0x65,0xbd,0x68,0x50,0xc1, + 0x79,0x39,0xa5,0x3f,0x76,0x79,0x5d,0xb6,0x4d,0x7c,0xb0,0x69,0xb8,0xbf,0x2f,0x7b, + 0x48,0x2f,0x43,0x39,0x31,0x31,0x35,0x43,0x3f,0x7c,0xa9,0x55,0xbd,0x4c,0x51,0xbf, + 0x46,0x23,0x32,0xb1,0x5e,0x58,0x6d,0x7a,0xac,0x7b,0xb2,0x71,0x30,0x2f,0x29,0x78, + 0x77,0x68,0x76,0xa2,0xab,0x67,0x4b,0xb3,0xaa,0x6d,0x51,0xba,0x3b,0x58,0x55,0x6f, + 0x6a,0x47,0x73,0x63,0x48,0x66,0x3a,0xa1,0x33,0x24,0xa2,0xa2,0x33,0x5c,0xa4,0x46, + 0xbb,0xa3,0x36,0x4d,0x77,0x59,0xb5,0xad,0x49,0x2b,0x28,0xad,0x2c,0x3c,0x48,0x77, + 0x66,0xb7,0x36,0x6d,0x45,0x60,0x7e,0x5c,0xb9,0x2b,0xc1,0xab,0x30,0xbc,0x49,0x53, + 0x47,0x4e,0x3a,0x7d,0x4e,0x64,0x2c,0x7e,0xb8,0x44,0x79,0xb7,0xb8,0x4e,0x4e,0xb1, + 0x79,0x32,0xa9,0x33,0xbb,0x71,0x2e,0x21,0xbe,0xbf,0x5c,0x6a,0x3b,0x73,0xa6,0x6f, + 0x69,0xaf,0xad,0x55,0xba,0x7b,0x71,0x24,0x3f,0x5d,0xb6,0x3b,0x23,0x5c,0x29,0xc1, + 0x78,0x61,0x26,0xa2,0x39,0x67,0x64,0x5f,0x6d,0x4d,0x63,0x2e,0x44,0x6a,0xa8,0x75, + 0x27,0xaf,0xb4,0x61,0x3f,0x65,0xb6,0x3e,0x50,0xaf,0x6f,0x66,0x44,0xb0,0x2e,0x54, + 0x5a,0x33,0xac,0x61,0x33,0x65,0x5e,0x3d,0x70,0x2c,0x56,0x37,0xa2,0x47,0x4c,0xbe, + 0x37,0x6e,0xb1,0x4f,0x57,0x73,0xb0,0x40,0x26,0x55,0x7d,0xc1,0xac,0x69,0x4c,0xb0, + 0x56,0x70,0x2e,0x61,0x5d,0x5e,0x7c,0x40,0x23,0x24,0x79,0x45,0x25,0xb4,0xa7,0x67, + 0x7a,0xb0,0x66,0x4d,0xa1,0x58,0x28,0x3b,0x38,0x5b,0x72,0x37,0x23,0xa2,0x54,0x3a, + 0x36,0x52,0x42,0x62,0x4b,0x5e,0x78,0x5c,0xac,0x5b,0xbd,0x2b,0x2f,0xbe,0x28,0x74, + 0xb8,0xbf,0x62,0x72,0x66,0x62,0x3f,0x7d,0x6e,0x34,0x3f,0x2f,0xab,0x51,0x4c,0x41, + 0xba,0x75,0x6a,0xb5,0x3c,0x6e,0x69,0x40,0x25,0x6d,0x39,0x36,0x3b,0xb6,0x53,0x79, + 0x79,0xb3,0xa1,0x52,0xad,0x3b,0x72,0x50,0xb3,0x3e,0xa5,0x51,0x5e,0x79,0xb9,0x43, + 0x41,0xb7,0xc2,0x7b,0xaf,0x5d,0x4a,0x4d,0x57,0x54,0x26,0x7c,0xb7,0x68,0x52,0x3f, + 0xa4,0x2c,0xb0,0x24,0x41,0xab,0xa7,0xba,0x57,0xba,0x7a,0x5a,0x6a,0x60,0xac,0x3d, + 0x75,0xaf,0x70,0x2c,0x40,0x53,0x55,0xa2,0x36,0x3c,0x5e,0x61,0x5a,0x5d,0x26,0x5c, + 0x7a,0x6b,0xbe,0xb9,0xb0,0x78,0x30,0x74,0x78,0x5e,0xb5,0x4a,0xa5,0x78,0x47,0xb6, + 0x3c,0x7c,0x71,0x6b,0xa2,0x30,0x2b,0xb9,0x47,0xbc,0x72,0xae,0xbe,0x7c,0x44,0x7b, + 0x42,0x33,0x21,0xad,0x29,0x5c,0x27,0x46,0x76,0x7c,0x32,0x6a,0x43,0x60,0xa8,0xaf, + 0x26,0xa6,0x4d,0x73,0xb1,0x6e,0x2e,0x2c,0xbb,0x50,0x67,0x49,0x45,0x79,0x70,0x63, + 0x35,0xaf,0x7d,0x7b,0xbb,0x4e,0x4f,0x46,0x56,0x46,0x4a,0x6d,0x50,0x5c,0x2e,0x3c, + 0x42,0x44,0x31,0x55,0x21,0x5e,0x45,0x66,0x76,0x39,0x31,0x32,0x7e,0x59,0x71,0x3b, + 0x52,0x33,0x26,0x59,0x29,0x5d,0x47,0x3b,0xb8,0x7d,0x26,0x68,0xb9,0x5f,0x53,0xae, + 0x2c,0xa6,0x33,0x5b,0xa5,0x47,0x2a,0x3f,0x47,0x6b,0x3e,0x22,0x6d,0x65,0x68,0xb0, + 0x3e,0x6c,0x2c,0x61,0xb0,0x68,0x2c,0x24,0x67,0xae,0x6e,0xa4,0x79,0x69,0x25,0xae, + 0xc0,0x74,0x26,0xb1,0xbc,0x55,0x2f,0xad,0x78,0x2b,0x7a,0xba,0x27,0x6f,0x4d,0x60, + 0x24,0x33,0x7a,0x78,0x35,0x65,0xa4,0x6d,0x79,0x59,0x6b,0x45,0x35,0x76,0x22,0x22, + 0x71,0xbf,0x69,0x38,0x41,0x38,0xa7,0x34,0x4a,0x54,0x2b,0x5d,0x5e,0x7d,0x3d,0x44, + 0x5e,0x75,0x28,0x4b,0x21,0xad,0x25,0x72,0x76,0x51,0x3a,0x61,0x3f,0x5f,0x5a,0xaf, + 0x4a,0xb6,0x41,0x6d,0xb0,0x2a,0x2e,0xbf,0x28,0x28,0x23,0x31,0x35,0x73,0x45,0xb5, + 0x39,0x5d,0x7c,0x71,0x2d,0x34,0xaa,0x58,0xb8,0x4d,0x2e,0x70,0x64,0x60,0xaa,0x3e, + 0x28,0x7c,0x7a,0x77,0xba,0x30,0x2f,0x6d,0x78,0x2f,0x7a,0x28,0xaf,0x6a,0x5c,0x62, + 0x51,0x4c,0x52,0x73,0xad,0xbf,0x45,0x61,0x48,0x22,0x22,0x23,0x7b,0x5f,0x6e,0x24, + 0xa1,0x2d,0x3c,0x3b,0x2c,0x55,0xa7,0x54,0xaa,0x34,0xa4,0x5d,0xb2,0x5f,0x62,0xaf, + 0x37,0x64,0x47,0x49,0xaf,0x5e,0x54,0x39,0x4a,0x31,0xa1,0x61,0x22,0x5b,0x62,0xaf, + 0xa3,0xaf,0x7a,0x41,0x2a,0x22,0xa7,0x41,0x26,0x3b,0x66,0x4e,0xad,0xb8,0x45,0x64, + 0x49,0x59,0x6b,0x47,0x29,0x69,0x4f,0x7d,0x65,0x2d,0x7e,0x75,0xac,0x2b,0x57,0x51, + 0x78,0xb6,0x2e,0xad,0x28,0x5a,0x29,0x3e,0x4e,0xbf,0x6c,0x78,0x47,0x5f,0x2c,0x42, + 0x75,0xb4,0xb4,0x69,0x41,0x60,0xbd,0x62,0xb3,0x43,0xa2,0x54,0x3d,0x75,0xa3,0x40, + 0x49,0x68,0xc0,0x6e,0xa8,0x63,0x2d,0xac,0xa9,0x5b,0x78,0x25,0x46,0x33,0x70,0xa3, + 0x49,0x43,0xa7,0xc1,0x2d,0xba,0x56,0xc2,0x65,0xb7,0x5a,0x64,0x7e,0x60,0xa6,0x62, + 0x5f,0x3c,0x6f,0xa3,0xbc,0x62,0x4f,0x6d,0xb8,0x2c,0x77,0x39,0x5c,0x6a,0xaf,0x5f, + 0x48,0x53,0xbe,0xad,0x30,0x6e,0x29,0xb6,0x57,0x57,0x3e,0xa6,0x49,0x6f,0x41,0xac, + 0xb2,0xa5,0xbc,0x47,0xa1,0xb1,0x46,0xb7,0x56,0x66,0x56,0x72,0x74,0x68,0x74,0x60, + 0x30,0xaf,0x31,0xaa,0x32,0x30,0xa3,0x67,0x59,0xbf,0x2f,0x44,0x55,0x74,0x6e,0x3c, + 0x29,0x24,0x3b,0x2b,0xa7,0x74,0xa5,0x5f,0xb9,0x70,0x3a,0x29,0x6f,0x67,0x7e,0xa1, + 0x74,0x54,0xa4,0x3d,0x2b,0x6b,0x30,0xb8,0x29,0x46,0x63,0x64,0xb6,0x58,0xb3,0xae, + 0xb0,0xae,0x3b,0x55,0xa6,0x5c,0x2a,0x5e,0xb9,0x6f,0x3e,0xaf,0x7d,0x6a,0x64,0x41, + 0x3c,0x25,0x31,0x24,0x40,0x57,0xa7,0x52,0x26,0x38,0xa8,0x60,0x43,0x5e,0x52,0x5e, + 0x31,0x31,0x32,0xa9,0xac,0x63,0x4d,0x70,0x28,0x46,0x2f,0x4a,0xb5,0x5d,0x69,0x42, + 0x77,0x25,0x29,0x64,0x41,0x70,0xa4,0xbf,0x78,0xa2,0x4e,0xb1,0x5a,0x73,0x3c,0xac, + 0xb9,0x5b,0x7a,0x65,0x24,0xa9,0x29,0x2a,0xb9,0x6f,0x5a,0x29,0xc0,0x6c,0x56,0x40, + 0x6a,0x5c,0xb3,0xb0,0x33,0x73,0x52,0x6e,0x69,0xc1,0xb8,0x7d,0x51,0x68,0x72,0xa1, + 0x52,0x2c,0xbd,0x28,0x34,0xa3,0xa9,0x65,0xac,0xba,0xb8,0x54,0x62,0x6e,0x2d,0xa2, + 0x3c,0x74,0xb1,0x40,0x31,0x55,0x4f,0xc0,0x37,0x24,0x36,0x6e,0x3d,0x71,0x45,0x5f, + 0x27,0x34,0x26,0x27,0x22,0x62,0x55,0x22,0x77,0xb6,0xac,0xb0,0x48,0x79,0xbd,0x2e, + 0x5a,0x21,0x72,0x4f,0xb3,0x70,0xaa,0x3d,0x55,0xbe,0xb1,0x7c,0x46,0xb7,0xaa,0x40, + 0x56,0x63,0xa8,0x62,0xa7,0x74,0x60,0x43,0xa6,0x53,0x6d,0x79,0x23,0x56,0x45,0xbc, + 0x26,0x4f,0xb0,0x57,0x37,0x60,0x3c,0x3d,0x7a,0x3c,0x46,0xc1,0xaa,0x50,0x4c,0x3a, + 0xa9,0xa5,0x52,0xa8,0x60,0x6a,0x6c,0x5f,0x66,0x54,0x26,0x33,0xc1,0x47,0x51,0x2e, + 0x49,0x5e,0x57,0x4a,0x75,0x6e,0xb4,0x23,0x47,0x7c,0x75,0x56,0x49,0xba,0xa9,0x38, + 0x27,0x4c,0x56,0x7d,0xad,0x6b,0xbc,0x3f,0xb0,0x34,0xa4,0x38,0x36,0xba,0x52,0x76, + 0x56,0x4b,0x76,0x57,0x57,0x5b,0x51,0xae,0x49,0x6b,0xbc,0xbb,0x30,0x2a,0x49,0x3a, + 0x47,0x44,0xa8,0x76,0x5c,0x62,0x55,0x3d,0x2e,0x54,0x60,0x49,0xaf,0x2a,0x4e,0x66, + 0xaa,0x65,0x76,0xb4,0x29,0x6d,0xb5,0xb2,0x28,0x6c,0xc1,0x7c,0x31,0x26,0xa5,0x48, + 0x49,0x26,0xb1,0x49,0xc2,0x79,0x48,0x23,0xc0,0x2d,0xa3,0x47,0xad,0x4d,0x50,0x44, + 0x46,0x32,0xbc,0x6a,0x5f,0x60,0xa4,0xaf,0xc0,0x74,0x5d,0xad,0xb7,0x35,0x2e,0xb4, + 0xaa,0xc2,0x59,0x5b,0x35,0xc2,0x71,0x58,0x6a,0xc1,0x5a,0xa1,0x48,0x6e,0x3f,0x5b, + 0x69,0x2c,0x28,0x2c,0x4b,0x64,0x48,0xb6,0x29,0x40,0x77,0x38,0x49,0x71,0x40,0x3c, + 0xbf,0x5b,0xc0,0x75,0xb8,0x54,0x4f,0xaa,0x7a,0x34,0x4e,0x22,0xae,0x5d,0xa9,0xae, + 0x52,0x34,0xb8,0xbf,0xb9,0x47,0x53,0xc1,0x25,0xbe,0x5a,0x6f,0x4a,0x66,0x3e,0xb0, + 0x71,0x44,0x70,0x75,0xb7,0x65,0x4f,0x5e,0x39,0x73,0x27,0x45,0xbc,0x77,0x68,0xae, + 0xaf,0xbe,0x40,0x3b,0xb8,0xac,0x4f,0x6b,0xbb,0x42,0x53,0x58,0xb5,0x7a,0x58,0x41, + 0xa1,0xaf,0x49,0x2c,0x4d,0xa3,0x26,0x3e,0x76,0xbf,0x62,0x7b,0x2d,0x67,0x76,0x5f, + 0x3b,0x6d,0x64,0x58,0x3d,0x4e,0xa9,0x3a,0xb9,0x60,0x2a,0xab,0x3e,0x58,0x67,0x3a, + 0xb1,0x33,0x2d,0x27,0x2a,0x64,0x47,0x2a,0x76,0x2e,0x52,0x53,0x34,0x60,0x58,0x3c, + 0xa4,0x64,0x32,0xaf,0xa5,0x6c,0x2a,0x51,0x31,0x36,0x4e,0x7b,0xb1,0x64,0x4c,0x7e, + 0x24,0x64,0x79,0x7d,0xbe,0x59,0x51,0x64,0x59,0x3d,0xa9,0x35,0x2d,0x76,0xab,0x42, + 0xa1,0x65,0x62,0xac,0x3e,0x3f,0x56,0x79,0x7a,0x66,0x6a,0x50,0x5c,0x63,0x4a,0x7e, + 0x62,0xb7,0x3a,0x74,0x35,0x66,0x52,0x6e,0x3a,0x31,0x36,0x69,0x24,0x65,0xad,0x44, + 0x38,0x25,0x42,0x60,0x36,0x38,0x24,0xb0,0xb8,0x46,0x56,0x6f,0x76,0x60,0x34,0x5d, + 0xbb,0xbe,0xa8,0xb6,0x32,0x34,0xa5,0x61,0xab,0xa2,0x26,0x2b,0x48,0x60,0x26,0x5d, + 0x5c,0x74,0x64,0x4f,0xa1,0x65,0x2d,0x23,0x5a,0x29,0x4a,0x55,0x6c,0x5b,0x4e,0x3b, + 0xae,0x4b,0xa5,0x79,0xa4,0x68,0x49,0x74,0x58,0x3c,0x6a,0x64,0x3a,0x6f,0x68,0xa2, + 0x72,0x2c,0xba,0xa4,0x47,0x74,0x2a,0x5c,0xab,0x31,0xa8,0x4d,0xb8,0x58,0x2e,0x5b, + 0x45,0x33,0xa4,0x77,0x2f,0x6a,0x28,0x72,0x56,0xc1,0x42,0xa1,0x57,0x58,0x40,0x61, + 0x29,0x7d,0x26,0x68,0x47,0x6a,0x30,0x31,0x4a,0x78,0xb0,0x52,0x72,0x5d,0x46,0xa1, + 0xad,0x6c,0xa3,0x7b,0x23,0x23,0x2e,0xa5,0x49,0x5d,0x4a,0xb9,0xa2,0x59,0x33,0x5c, + 0x45,0x6c,0x7c,0x3f,0xbe,0xb7,0x50,0x68,0x59,0xc1,0x23,0x4f,0x7e,0x79,0x60,0xac, + 0xbf,0x7b,0x79,0x23,0x2b,0x31,0x28,0xb8,0x2a,0x6f,0xb8,0x4f,0x48,0x72,0x6b,0x2e, + 0x5a,0x41,0x3e,0x5f,0x26,0x62,0x2b,0x5e,0x63,0x2c,0x28,0x6a,0x39,0x3b,0x54,0xab, + 0x58,0x27,0xc0,0x56,0x44,0x5d,0x46,0x5d,0x41,0x24,0x3b,0x2d,0xa9,0xa9,0x2b,0xaa, + 0xba,0xaa,0x57,0x37,0x54,0x59,0x6f,0x3a,0xb3,0x5b,0x7e,0x3d,0x25,0x49,0x27,0x3a, + 0x46,0x7d,0xb8,0x68,0xb3,0x5f,0x6c,0xae,0x73,0x7b,0xb9,0x5d,0x2f,0x29,0x29,0x7d, + 0xb9,0x4a,0xbc,0x7c,0x6a,0x63,0x73,0xaf,0xc1,0x21,0x25,0x3a,0xc2,0x31,0xb8,0x5e, + 0xa1,0x3c,0x64,0xb5,0xb3,0x4a,0x4f,0x36,0x68,0xb9,0xbd,0x32,0x64,0x72,0x34,0x41, + 0xa1,0xa7,0x41,0x36,0x38,0x3a,0x53,0x56,0x59,0x23,0x5b,0x4a,0x57,0x79,0x65,0x23, + 0x60,0xaf,0xa6,0xaa,0x4d,0x67,0x58,0x5a,0xb7,0xb8,0x36,0x4e,0x3e,0x59,0x46,0x7b, + 0x55,0x23,0x2f,0x21,0x2a,0x4f,0x28,0x2c,0x36,0xc1,0xa8,0x6f,0x70,0x62,0x5e,0x3d, + 0xa4,0x2c,0x50,0x51,0xaa,0xac,0x4b,0x43,0x56,0x3a,0x36,0xbe,0x5b,0x71,0x5b,0x41, + 0x41,0x35,0x5f,0x4a,0x3d,0x30,0xa6,0x40,0xac,0x42,0x7b,0x5d,0x51,0x5b,0x3c,0x44, + 0x32,0x6b,0xa2,0x5b,0x21,0x5f,0x45,0xb8,0x36,0x76,0x7a,0x79,0x65,0x64,0x2a,0xb1, + 0x57,0x64,0x2e,0x3d,0xbd,0xb6,0x55,0x69,0x66,0x46,0x36,0x2a,0x37,0x66,0x71,0x3c, + 0x35,0xa5,0xbc,0x59,0x2a,0x47,0x4a,0xc2,0x68,0xc2,0x36,0x54,0x77,0x6c,0x31,0x31, + 0x37,0x7c,0x44,0x21,0xbb,0x5b,0x57,0xba,0x6a,0xb9,0x5e,0x60,0x6a,0x5d,0x7a,0xaf, + 0xac,0x24,0x50,0x4d,0xae,0xb7,0x26,0x4c,0x47,0x7b,0x26,0x6e,0x4d,0x71,0xa8,0x5d, + 0xbd,0x25,0xb2,0xbf,0xaa,0x5a,0x58,0x3c,0x27,0x76,0x4a,0x4e,0xa6,0x58,0xb5,0x3b, + 0x6c,0x7c,0x39,0x27,0xaa,0x26,0x2c,0x49,0x79,0xc0,0x66,0x4f,0xb0,0x70,0x60,0xb6, + 0xa3,0x6b,0x6a,0x75,0xa4,0x71,0x4c,0x76,0x67,0xbb,0xa1,0x3b,0xb6,0x5b,0x3b,0x7d, + 0xb7,0x5d,0xb2,0xa9,0x2e,0x7b,0x2f,0xb8,0x76,0xa9,0x4a,0x67,0x4d,0x74,0x23,0x7e, + 0xb0,0x3d,0x41,0x59,0xbd,0x35,0x51,0x64,0x46,0x7d,0x66,0xbb,0x42,0x67,0x39,0x3f, + 0xc0,0x7b,0x79,0x75,0x2a,0x41,0x2d,0x5c,0xba,0x47,0xb0,0xb1,0x58,0x7c,0x29,0x64, + 0x21,0x2c,0x56,0xc1,0x2b,0x3d,0x47,0x25,0x26,0x39,0x66,0x59,0xc0,0x5b,0x34,0x7d, + 0xb0,0xbe,0x2c,0xb2,0x40,0x7d,0x55,0x2f,0x7a,0xaa,0x5c,0x25,0x2a,0x5f,0x2d,0x29, + 0x27,0xb5,0x66,0x54,0x7a,0x65,0x60,0xb2,0x2f,0xa6,0xb8,0x76,0x48,0x2e,0x58,0xa2, + 0x37,0x52,0x36,0x25,0x33,0x72,0xa4,0x3c,0x46,0xbd,0xb2,0x67,0xae,0x3e,0x2d,0xc1, + 0x58,0x66,0x7a,0xbd,0x48,0x71,0x57,0x61,0x74,0x43,0x75,0x21,0xaa,0xaf,0xaa,0x2e, + 0xaa,0x64,0x3a,0xa2,0xc2,0x5a,0x32,0x64,0x43,0x53,0xb3,0xb9,0xa5,0x70,0x50,0x47, + 0x39,0xa5,0x6e,0x5c,0x67,0x61,0x33,0xb2,0x29,0x35,0x25,0x33,0x24,0x60,0x24,0x27, + 0xa8,0x39,0xb4,0x63,0x6b,0x6a,0x3e,0x21,0x3d,0xb7,0x75,0x7b,0x30,0xb4,0x4e,0xb3, + 0x76,0x4c,0xa8,0x6f,0x35,0x6f,0xae,0x41,0x24,0x4d,0x5b,0x4c,0x3f,0x5c,0x56,0xc1, + 0x67,0x6e,0x6b,0x3b,0x24,0x7b,0x33,0x5d,0x41,0x74,0x37,0xb5,0xaf,0x5a,0x4e,0x2e, + 0x52,0xab,0x44,0xc1,0x3e,0x76,0x3f,0x42,0xb5,0xbd,0x26,0x53,0xa2,0x46,0x45,0x69, + 0xb8,0x47,0x5e,0x58,0x56,0x5e,0x30,0x5c,0xad,0x34,0x33,0x35,0xa4,0xae,0x49,0xa4, + 0x47,0x6f,0xac,0xa1,0xaa,0x68,0x54,0x3e,0x24,0x64,0x7d,0xb1,0xb6,0x49,0x2e,0x5b, + 0x38,0xa1,0x27,0x42,0x49,0x76,0x43,0x23,0x3a,0x3d,0x74,0xae,0x41,0xa5,0x56,0x22, + 0x29,0x69,0x26,0x64,0x39,0x58,0x47,0x5a,0xb3,0xb5,0x6b,0x44,0x3b,0x50,0xa6,0xa5, + 0x3a,0x76,0x66,0x51,0xbf,0x60,0x56,0x7c,0x4c,0x7b,0xb1,0xb3,0x2f,0xb0,0x49,0xc2, + 0x57,0x4f,0x36,0x7a,0x2d,0x64,0x43,0x7e,0x4e,0x74,0x55,0x47,0xb0,0x2c,0x4c,0x23, + 0x78,0x3a,0x52,0xae,0x60,0x6e,0x53,0xa2,0xb3,0x35,0x32,0x44,0x35,0xa7,0xa4,0x41, + 0x49,0x7a,0x37,0x47,0x3b,0x78,0x4a,0x63,0x38,0xaf,0x29,0x46,0x4a,0x70,0x49,0x63, + 0x47,0x42,0x7a,0x27,0x31,0x31,0x51,0xb0,0x78,0x54,0x68,0x49,0xc2,0xc1,0x50,0xbb, + 0x37,0xaf,0x46,0xc2,0x6b,0x74,0xc1,0x42,0x37,0x5c,0x4f,0xa6,0x34,0x4f,0x57,0x4f, + 0xbc,0x61,0xb0,0x2b,0xa4,0x6f,0xa2,0x61,0x77,0x25,0x76,0xa5,0xa1,0x6b,0x25,0xad, + 0x36,0xab,0x42,0x28,0xae,0x68,0xb6,0x61,0x23,0xaf,0x4b,0xa2,0x3a,0x45,0x25,0x72, + 0xb8,0x54,0x46,0x69,0xa1,0x64,0xad,0x3e,0x31,0x64,0x23,0x37,0xb7,0xb4,0x4e,0x6a, + 0xbb,0x78,0x37,0x42,0x7d,0x79,0xbb,0x23,0xaa,0x75,0x2b,0x47,0x30,0x74,0x2d,0xbc, + 0x68,0x23,0x6b,0x3a,0x51,0x62,0x2a,0x5f,0x29,0x7b,0x7a,0x33,0xb0,0xa1,0x4c,0x72, + 0x48,0x53,0xa8,0xad,0xae,0x6d,0x55,0xa2,0x79,0x65,0x2c,0x69,0xbd,0x77,0xaa,0xb9, + 0xa7,0xbe,0x6a,0x74,0x76,0x63,0x28,0x41,0xab,0x63,0x6b,0x2d,0xa1,0xb0,0x45,0x35, + 0x45,0xb9,0x62,0x54,0xb1,0x5e,0xa9,0x5d,0x29,0x3c,0x53,0xbb,0xb0,0x40,0x2d,0xab, + 0x58,0x66,0x66,0xb1,0x4d,0x6e,0x6a,0xb2,0x77,0xbf,0x3c,0x56,0x3b,0x6f,0x55,0x4a, + 0xbc,0x3c,0x27,0x5d,0x49,0x7d,0x57,0xad,0x5e,0x3c,0xb7,0x27,0x21,0x7d,0x45,0xb5, + 0xb9,0x6f,0x5e,0x2c,0x21,0x69,0x7d,0xb1,0xa1,0x75,0x35,0x26,0x40,0x22,0xa8,0x7b, + 0xbc,0xa7,0xc1,0x6d,0xa3,0x6b,0x41,0x5c,0x3a,0x7c,0x65,0x2f,0xc0,0x60,0x57,0x4d, + 0x75,0xb4,0x2a,0x50,0x3c,0x58,0xb0,0xad,0x4c,0x3b,0x7b,0xb7,0x2e,0x3f,0x49,0x47, + 0x58,0x4a,0xb4,0xb6,0x24,0x72,0x3e,0x43,0x5c,0x6d,0x2c,0xb0,0x47,0x36,0x56,0xb5, + 0xbc,0xb6,0x3b,0x70,0x57,0x64,0x4e,0x3e,0x62,0x6b,0x7b,0x77,0x23,0xa7,0x4d,0x49, + 0x59,0x77,0x56,0x6d,0x7c,0x61,0x55,0x3d,0x43,0x4c,0x6e,0x43,0xb4,0x50,0x50,0x4f, + 0x78,0xae,0x70,0x26,0xba,0x31,0xc1,0x36,0xa3,0x40,0x59,0x49,0x33,0x31,0x6c,0x21, + 0x73,0x4d,0x71,0x2a,0x44,0x52,0x46,0x3e,0xbc,0x2f,0x7e,0x26,0x3a,0x69,0x61,0x22, + 0xa1,0xbf,0x65,0xa8,0x48,0x2b,0x45,0x79,0x46,0x27,0x5a,0x6d,0x35,0x60,0x76,0xaf, + 0xba,0xa6,0x57,0x59,0xac,0x66,0x4c,0x52,0xb9,0xbe,0x3a,0xa8,0xbf,0x6a,0x6c,0x60, + 0x61,0x3d,0x32,0xc0,0x31,0x56,0xa4,0xbc,0xac,0x34,0x66,0x54,0x44,0xa2,0x52,0x40, + 0x49,0x2d,0x31,0xa8,0x44,0xae,0x53,0x76,0x26,0x35,0x62,0x59,0xb4,0x76,0x4b,0x7e, + 0x6d,0x55,0x61,0x40,0x32,0xab,0x29,0x45,0x37,0x70,0x7b,0x6c,0x4a,0x58,0x57,0x3a, + 0xa4,0x35,0xb4,0x28,0x3b,0xa3,0xa4,0x5e,0x39,0x59,0x32,0x23,0xc1,0x68,0x56,0xb2, + 0x36,0x5d,0x38,0x26,0x55,0x32,0x60,0x52,0x76,0xbb,0x72,0x4d,0x46,0x58,0x3b,0x7a, + 0xa6,0x3b,0x69,0xaf,0xa1,0x4f,0x44,0x78,0xb7,0xb5,0x3a,0x4d,0x27,0x58,0x47,0x3a, + 0xab,0x43,0x6b,0x3b,0xa1,0x66,0xa6,0x42,0x55,0xb3,0x7b,0x35,0x3e,0x60,0xa6,0x7a, + 0xac,0xb5,0x6b,0x6f,0xa1,0x21,0x44,0x25,0x55,0xb8,0x72,0x4e,0x64,0x58,0x5e,0x7a, + 0xaf,0xb5,0x6c,0x4b,0xa1,0xa5,0x44,0x29,0xa7,0xb9,0x3a,0x4e,0x28,0x58,0x68,0x7a, + 0xb1,0xad,0x6c,0x6f,0xa1,0xbe,0x24,0x72,0x45,0xbd,0xac,0x4f,0x61,0x58,0x27,0xac, + 0xb8,0xad,0x6e,0x5f,0xa2,0x54,0x24,0xb1,0xa7,0xbf,0x52,0x50,0x40,0x58,0xa9,0x3a, + 0xba,0x2b,0x6e,0x23,0xa2,0x69,0x44,0xb5,0x45,0xbe,0x6e,0x50,0x37,0x58,0xa8,0x7a, + 0xb4,0x73,0x78,0x59,0xa2,0xb2,0x24,0xbc,0xa7,0xc1,0xa4,0x50,0x2c,0x58,0xb7,0x5a, + 0xc0,0x23,0x70,0x51,0xa2,0xb5,0x44,0xbf,0x25,0xbb,0xac,0x51,0x59,0x59,0x36,0x3b, + 0x33,0x23,0x71,0x7b,0x21,0x33,0x25,0x34,0x75,0xc2,0x2a,0x4f,0x52,0x59,0x3b,0x5b, + 0x33,0xa5,0x74,0xbf,0xa2,0xba,0x24,0xa5,0x46,0x31,0x4a,0x51,0x74,0x59,0x42,0xad, + 0x31,0x4c,0x4e,0x5b,0x21,0x59,0x45,0x3a,0x36,0x33,0xac,0x51,0x27,0x59,0x4c,0x3b, + 0x38,0x73,0x73,0x31,0x21,0x7e,0x45,0x41,0x26,0x36,0x22,0x52,0x63,0x59,0x6b,0x73, + 0x21,0x58,0xbf,0x34,0x7a,0x59,0x63,0x7b,0x3c,0x4b,0x74,0x35,0x21,0xae,0x45,0x4c, + 0xa8,0x38,0x46,0x52,0xb0,0x59,0x69,0xad,0x3f,0xb5,0x74,0xb5,0x21,0xbd,0x25,0x32, + 0x46,0x39,0x36,0x53,0x33,0x59,0x76,0x7b,0x42,0x5b,0x75,0x59,0x22,0x3e,0x45,0x55, + 0x46,0x3a,0xac,0x53,0x68,0x59,0xa2,0x3b,0x44,0x2b,0x75,0xc1,0x22,0x51,0x45,0x5b, + 0x56,0x3b,0x62,0x53,0x25,0x59,0x29,0x7b,0x50,0x74,0xac,0x23,0x22,0x66,0x45,0x5e, + 0xa8,0x3d,0x32,0x54,0x33,0x59,0xb9,0x3b,0xab,0xa5,0x77,0x43,0x22,0x78,0x25,0x63, + 0x46,0x3d,0x7e,0x54,0x46,0x59,0xa8,0x7b,0x4b,0x53,0x77,0x7d,0x22,0x22,0x45,0x66, + 0x46,0x3e,0x5a,0x54,0x5c,0x59,0xaf,0xad,0x4c,0x3b,0x77,0xa7,0x22,0x29,0x45,0x67, + 0x26,0x3e,0xb8,0x54,0x76,0x59,0xb5,0x5b,0x4e,0x2b,0x78,0x71,0x22,0x5b,0xa4,0x2e, + 0x46,0x40,0x66,0x53,0x31,0x31,0x6d,0x3b,0x50,0x5b,0x78,0xbf,0x22,0x33,0x45,0x72, + 0x66,0x41,0x22,0x55,0x3f,0x5a,0x3a,0xad,0x53,0x23,0x79,0x2d,0x23,0x4a,0x25,0x78, + 0x46,0x43,0x6e,0x55,0x75,0x5a,0x43,0xad,0x55,0xa5,0x7a,0x6d,0x23,0x5b,0x45,0x7e, + 0x56,0x44,0x22,0x55,0xac,0x5a,0x4d,0xad,0x58,0xbd,0x7a,0xbd,0x23,0x77,0x25,0x23, + 0x76,0x45,0x7a,0x55,0xb4,0x5a,0x53,0x3b,0x5a,0x3b,0x7b,0x22,0x40,0x24,0xa6,0xb8, + 0x76,0x46,0x66,0x56,0x6d,0x5a,0x5e,0x5b,0x5d,0x3b,0x7c,0x4b,0x23,0xae,0x25,0x2c, + 0xa8,0x48,0x3e,0x56,0xa9,0x5a,0x6c,0x64,0x3f,0x33,0x7c,0xa9,0x23,0xbd,0x25,0x30, + 0x36,0x48,0xa8,0x55,0x37,0x5a,0x73,0x3b,0x64,0x74,0x25,0x4b,0x24,0x39,0x45,0xa4, + 0xb8,0x49,0x26,0x57,0x4b,0x5a,0x79,0xad,0x63,0xbd,0x7d,0xa5,0x24,0x4a,0x25,0xaa, + 0x36,0x4b,0x32,0x57,0x77,0x5a,0x22,0x5b,0x62,0x6b,0x6a,0x43,0x24,0x57,0x25,0xbd, + 0xa8,0x3b,0xbc,0x57,0xac,0x5a,0x2c,0x7b,0x62,0x73,0xa8,0xb9,0x24,0x6c,0x25,0xb3, + 0x56,0x4d,0x2a,0x58,0x51,0x5a,0xac,0x7b,0x6b,0x5b,0xa1,0x2d,0x24,0x29,0x45,0xb9, + 0xa8,0x4f,0x3e,0x57,0x43,0x6f,0x67,0x63,0xb0,0xbd,0xa2,0xbb,0xa9,0xba,0x4d,0x6e, + 0xa8,0x50,0x52,0x58,0xb0,0x5a,0xc1,0x7b,0x61,0x3b,0x21,0xbd,0x25,0x51,0x46,0x36, + 0x76,0x52,0x66,0x59,0x6d,0x5b,0x3c,0x7b,0x74,0x63,0x21,0x23,0x25,0x3f,0x26,0x3a, + 0xa8,0x55,0x6e,0x59,0xb8,0x5b,0x54,0x7b,0x76,0xbd,0x22,0xa5,0x25,0x6c,0x26,0x3f, + 0x36,0x55,0x7a,0x59,0xbe,0x5b,0x51,0x3b,0x78,0x63,0x23,0x39,0x25,0x79,0x46,0x41, + 0xa8,0x57,0x4e,0x5a,0x53,0x5b,0x5f,0x3b,0x7b,0x5b,0x23,0x29,0x25,0xa5,0x46,0x4a, + 0x36,0x56,0x54,0x25,0x4e,0x33,0x70,0xa5,0x2b,0x2b,0x24,0x35,0x25,0x23,0x46,0x48, + 0xa8,0x56,0xb4,0x5a,0x29,0x5b,0x6a,0x5b,0xa1,0x63,0x21,0x4f,0x26,0x3b,0x46,0x70, + 0x26,0x58,0x6a,0x5a,0xb0,0x5b,0x6f,0x7b,0xa1,0x43,0x21,0xb5,0x26,0x51,0x46,0x5d, + 0x66,0x5b,0x62,0x5b,0x5f,0x5b,0x28,0x3b,0x25,0x5b,0x26,0x5d,0x26,0x5c,0x26,0x58, + 0x36,0x5a,0x7e,0x5b,0x2e,0x5b,0xa9,0x5b,0x29,0x33,0x27,0x2f,0x25,0x76,0x46,0x64, + 0xb8,0x5c,0xb0,0x5b,0xc1,0x5b,0xa9,0x3b,0x2a,0xb5,0x27,0x2d,0x26,0x6f,0x46,0x61, + 0x66,0x5e,0x56,0x5c,0x38,0x5b,0xad,0x3b,0x2e,0x23,0x28,0x3b,0x26,0xb2,0x26,0x69, + 0x76,0x5f,0xb4,0x5c,0xa7,0x5b,0xb8,0x3b,0x22,0x53,0x2c,0xb1,0x26,0x3c,0x46,0x30, + 0xa8,0x60,0xb8,0x5b,0x4c,0x5c,0x6f,0x5b,0x25,0xb5,0x2a,0x51,0x27,0xb2,0x2d,0x57, + 0x76,0x62,0x2a,0x5d,0x63,0x5c,0x3f,0x3b,0xa3,0x31,0x32,0x27,0x27,0x63,0x46,0x76, + 0xb8,0x64,0x62,0x5d,0xad,0x5c,0x52,0x7b,0xab,0x33,0x2b,0x45,0x27,0x21,0x46,0x23, + 0x76,0x65,0x6e,0x5e,0x56,0x5c,0x5c,0x7b,0xae,0x63,0x2b,0xab,0x27,0xa4,0x46,0x28, + 0x76,0x67,0x36,0x5e,0x74,0x5c,0x61,0x3b,0xaf,0x73,0x2c,0x4d,0x27,0xab,0x26,0x2b, + 0x66,0x67,0x2e,0x5e,0xb1,0x5c,0x6f,0x5b,0xa3,0x33,0x30,0xc1,0x27,0x33,0x46,0xa4, + 0x46,0x69,0x52,0x5f,0x3c,0x5c,0x74,0x5b,0xb4,0x4b,0x2d,0x61,0x28,0x3c,0x46,0xbb, + 0xb8,0x59,0xb4,0x5f,0x57,0x5c,0x7e,0xad,0xb6,0x73,0x2e,0x4d,0x28,0x4e,0x26,0xab, + 0x36,0x6b,0x6e,0x5f,0xac,0x5c,0xb3,0x3b,0xbb,0x73,0x2e,0x73,0x28,0x70,0x26,0xb4, + 0x46,0x6d,0x7e,0x60,0x51,0x5c,0xaf,0xad,0xbd,0x53,0x2f,0x25,0x28,0x29,0x46,0xbb, + 0x66,0x6f,0x4a,0x60,0x25,0x5c,0xb7,0x7b,0xc0,0x4b,0x2d,0x45,0x29,0xae,0x46,0xbf, + 0x66,0x69,0x5e,0x61,0x4a,0x5d,0x38,0x5c,0x38,0x43,0xa3,0x73,0x29,0x62,0x47,0x3a, + 0x66,0x74,0x72,0x62,0x71,0x66,0x25,0x7c,0x34,0xad,0xa4,0xb5,0x29,0x73,0x27,0x48, + 0x46,0x75,0xc0,0x62,0x5c,0x5d,0x5f,0x7c,0x3e,0xb5,0xa5,0xb9,0x29,0x2d,0x47,0x46, + 0xa8,0x77,0x46,0x62,0x24,0x5d,0x65,0x5c,0x3e,0x6b,0xa6,0x63,0x29,0xaf,0x47,0x4d, + 0x26,0x77,0xb4,0x62,0xa7,0x5d,0x68,0xae,0x3f,0xbd,0xa6,0xb7,0x29,0xbf,0x27,0x50, + 0x66,0x78,0xb4,0x62,0xc0,0x5d,0x31,0x7c,0x41,0x23,0xa7,0x51,0x2a,0x3e,0x27,0x65, + 0xa9,0x72,0x46,0x63,0x5d,0x5d,0x7c,0x5c,0x44,0x43,0xa7,0xb3,0x2a,0x50,0x47,0x6b, + 0x58,0x23,0x26,0x63,0x21,0x5d,0x24,0x7c,0x46,0x23,0xa8,0x61,0x2a,0x62,0x47,0x5d, + 0x36,0x7c,0x4e,0x63,0xaf,0x5d,0x2b,0x5c,0x4f,0x21,0x25,0x3a,0xc2,0x31,0x2f,0x3c, + 0x49,0x3b,0xa9,0x6b,0x2a,0x60,0x44,0xb8,0x65,0xc0,0x3e,0x64,0x63,0x5d,0xb4,0x7c, + 0x4f,0x73,0xaa,0x69,0x2a,0x77,0x27,0x6c,0x46,0xa1,0xac,0x63,0x56,0x5e,0x38,0xae, + 0x52,0x3b,0xab,0x69,0x2b,0x35,0x27,0x74,0x56,0x23,0x32,0x65,0xaf,0x5e,0x43,0x5c, + 0x54,0x5b,0xab,0xaf,0x2b,0x62,0x47,0x7e,0x56,0x25,0xac,0x66,0x6d,0x5e,0x60,0x7c, + 0x5d,0x2b,0xae,0x35,0x2b,0x2f,0x27,0x2d,0x66,0x27,0x2e,0x66,0xa9,0x5e,0x6b,0x5c, + 0x5e,0x63,0xae,0xb7,0x2b,0xc0,0x27,0x72,0x76,0x29,0x5e,0x67,0x47,0x5e,0x7d,0x7c, + 0x6e,0x33,0xab,0x25,0x2c,0x4c,0x47,0xaa,0xa8,0x2b,0x3e,0x67,0x76,0x5e,0x21,0x3c, + 0x66,0x3b,0xb0,0x5b,0x2c,0x5e,0x47,0xae,0x66,0x2c,0x46,0x67,0xac,0x5e,0x2d,0x3c, + 0x68,0x4b,0xb0,0xad,0x2c,0x6d,0x47,0xb4,0x37,0x5c,0xac,0x68,0x31,0x5e,0x71,0x31, + 0x39,0x4b,0xb1,0x7d,0x2c,0x2d,0x47,0xbb,0x66,0x2f,0x4e,0x68,0x7a,0x5e,0xb8,0x3c, + 0x6e,0x33,0xb2,0x79,0x2c,0xb6,0x47,0xbf,0x56,0x2f,0xbc,0x68,0xa8,0x5e,0xbd,0xae, + 0x70,0x33,0xb2,0xaf,0x2c,0xbc,0x27,0xa3,0x26,0xa3,0x4e,0x69,0x39,0x5f,0x34,0x5c, + 0x72,0x4b,0xb3,0x71,0x2d,0x42,0x48,0x36,0x36,0xa4,0xa4,0x69,0x6a,0x5f,0x41,0x5c, + 0x75,0x63,0xb4,0x4d,0x2d,0x5a,0x28,0x3b,0x36,0xa5,0x6e,0x69,0xb4,0x5e,0x2c,0x3c, + 0x77,0xb5,0xb4,0x75,0xa1,0x6c,0x48,0x40,0x46,0xa7,0x62,0x6a,0x42,0x5f,0x56,0x3c, + 0x7a,0x2b,0xa9,0x27,0x2d,0x2e,0x28,0x47,0xa8,0xa8,0xb4,0x6a,0x68,0x5f,0x62,0x5c, + 0x7c,0xb5,0xb6,0x3f,0x2d,0xaf,0x28,0x4e,0x46,0xaa,0xb8,0x6a,0xbd,0x5f,0x6c,0x5c, + 0x79,0xa5,0xba,0x26,0xad,0x5f,0x33,0xae,0x22,0x5b,0xb7,0x5f,0x2e,0x5f,0x48,0x54, + 0xb8,0xab,0xb0,0x6b,0x42,0x5f,0x76,0x3c,0x23,0x43,0xb7,0x65,0x2e,0x3d,0x28,0x54, + 0x36,0xad,0x62,0x6b,0x23,0x5f,0x24,0x7c,0x25,0x2b,0xb8,0x29,0x2e,0x6a,0x28,0x5f, + 0xa8,0xaf,0x4e,0x6c,0x35,0x5f,0xa3,0x7c,0x2b,0x43,0xb9,0x6b,0x2e,0x27,0x48,0x66, + 0xa8,0xb0,0xb8,0x6c,0x41,0x5f,0xb0,0xae,0x2c,0xa5,0xba,0x43,0x2e,0xa9,0x28,0x6b, + 0x66,0xb1,0x7a,0x6c,0x27,0x5f,0xb9,0xae,0x2f,0x2b,0xba,0xa7,0x2e,0xbd,0x28,0x52, + 0x66,0xb3,0xac,0x6d,0x4a,0x60,0x35,0x5c,0xa4,0x2b,0xbb,0xaf,0x2f,0x4c,0x28,0x79, + 0x76,0xb5,0x3e,0x6d,0x71,0x60,0x44,0x7c,0xa8,0x6b,0xbc,0x59,0x2f,0x60,0x28,0x7d, + 0x56,0xb6,0x42,0x6d,0x78,0x60,0x4e,0x5c,0xaa,0x63,0xbc,0xb7,0x2f,0x2f,0x58,0xa2, + 0xb8,0xb8,0x32,0x6e,0x72,0x60,0x61,0x7c,0xaf,0x73,0xbe,0x51,0x2f,0xaa,0x28,0x2e, + 0x52,0x59,0x44,0xc1,0x32,0xae,0x48,0x2d,0x66,0xb9,0xb8,0x6e,0x2b,0x60,0x67,0xae, + 0xb1,0x43,0xbe,0x73,0x2f,0xb7,0x48,0x2e,0x46,0xba,0x62,0x6e,0xb4,0x60,0x6d,0xae, + 0xb2,0x33,0xbe,0xab,0x2f,0xbf,0x48,0x30,0xa8,0xb3,0x3e,0x6f,0x3a,0x60,0x28,0x5c, + 0xb8,0xa5,0xbf,0x47,0x30,0x39,0x28,0xa5,0xa8,0xbc,0x56,0x6f,0x5e,0x60,0xa1,0x3c, + 0xb7,0x3b,0xc0,0x41,0x30,0x57,0x48,0xac,0xa8,0xbc,0x6e,0x6f,0x22,0x60,0x26,0x7c, + 0xb8,0x6b,0xc0,0x63,0x30,0x61,0x28,0xb0,0x26,0xbe,0x7e,0x6f,0xba,0x60,0xa3,0xae, + 0xbb,0x43,0xc0,0xc1,0x30,0x76,0x48,0xb4,0x36,0xbf,0x76,0x70,0x38,0x60,0xaa,0x7c, + 0xbc,0x7b,0xc1,0x61,0x30,0x21,0x48,0xb8,0x36,0xc0,0x66,0x70,0x6d,0x60,0xb8,0x7c, + 0xc2,0x2b,0xc2,0x79,0x30,0xbf,0x48,0xc1,0x46,0xc1,0xb8,0x70,0x64,0x61,0x70,0xae, + 0xb5,0x3c,0x32,0x71,0xa3,0x31,0x31,0x34,0x47,0x31,0x72,0x71,0x5a,0x61,0x34,0x7d, + 0x34,0x3c,0x31,0x67,0xa3,0x3b,0x29,0x36,0x67,0x32,0x4a,0x71,0x40,0x61,0x3f,0x7d, + 0x36,0x24,0x32,0x33,0xa3,0x66,0x49,0x3f,0xb9,0x33,0xc0,0x71,0x7b,0x61,0x42,0x7d, + 0x35,0xae,0x32,0x77,0xa3,0x52,0x29,0x3d,0x77,0x33,0x3a,0x71,0xaf,0x61,0x4b,0xaf, + 0x36,0x7c,0x33,0x33,0xa3,0x77,0x29,0x4d,0xb9,0x35,0x3e,0x72,0x4b,0x61,0x52,0x3d, + 0x3a,0x2c,0x33,0x5d,0xa3,0x7c,0x29,0x43,0x57,0x36,0x4e,0x72,0x3c,0x61,0x69,0x5d, + 0x3c,0x74,0x34,0x71,0xa3,0xac,0x29,0x47,0x77,0x38,0x72,0x70,0x6e,0x61,0x62,0x7d, + 0x3c,0x5c,0x34,0x61,0xa3,0x57,0x29,0x53,0x27,0x39,0x4a,0x74,0xb9,0x61,0x6e,0xaf, + 0x31,0x34,0x38,0xab,0xa3,0xc0,0x49,0x31,0x67,0x3a,0x36,0x74,0xbe,0x61,0x6d,0x5d, + 0x31,0xae,0x35,0x4d,0xa4,0x54,0x29,0x58,0xa9,0x3a,0x52,0x73,0x58,0x61,0x23,0x7d, + 0x44,0xbe,0x35,0xbb,0xa4,0x47,0x49,0x57,0x77,0x3a,0xb8,0x73,0x73,0x61,0x22,0x3d, + 0x48,0x4c,0x36,0xb1,0xa4,0x5d,0x49,0x5c,0x47,0x3b,0xac,0x73,0xae,0x61,0x2e,0x3d, + 0x47,0xbe,0x36,0x7b,0xa4,0x69,0x29,0x5c,0xb9,0x3b,0xb8,0x73,0x24,0x61,0x2e,0x5d, + 0x4a,0x7c,0x37,0x5d,0xa4,0x74,0x29,0x66,0x77,0x3d,0x22,0x74,0x4b,0x61,0xa5,0x7d, + 0x4a,0x3c,0x37,0x27,0xa4,0x28,0x49,0x6a,0x77,0x3f,0x5a,0x74,0x7a,0x61,0xc0,0xaf, + 0x4d,0x74,0x38,0x37,0xa4,0xa6,0x49,0x68,0x57,0x3f,0x5e,0x73,0xbc,0x70,0xb6,0x5d, + 0x4f,0x64,0x38,0x77,0xa4,0xbe,0x49,0x70,0x57,0x40,0x22,0x74,0xc2,0x61,0xc2,0x5d, + 0x50,0xa6,0x38,0xbf,0xa4,0x31,0x49,0x72,0x37,0x41,0x56,0x75,0x3e,0x62,0x34,0x3d, + 0x52,0x54,0x39,0x67,0xa5,0xb8,0x36,0x51,0xa2,0xbb,0x35,0x6d,0xa5,0x41,0x29,0x76, + 0x57,0x42,0x6a,0x75,0x61,0x62,0x3d,0x7d,0x54,0x4c,0x3a,0x33,0xa5,0x58,0x49,0x7c, + 0xa9,0x44,0x3e,0x75,0x2c,0x62,0x49,0x3d,0x57,0x74,0x3a,0xbb,0xa5,0x72,0x49,0x22, + 0x47,0x44,0xbc,0x76,0x43,0x62,0x55,0xaf,0x5a,0x64,0x3c,0x59,0xa5,0x72,0x29,0x23, + 0x77,0x47,0x2e,0x76,0x22,0x62,0x5f,0xaf,0x5d,0xbe,0x3c,0xc1,0xa5,0xa6,0x49,0x2b, + 0x77,0x57,0x52,0x76,0x2d,0x62,0x64,0x3d,0x5d,0x24,0x3c,0x35,0xa5,0xa6,0x29,0x24, + 0x67,0x47,0x56,0x75,0x3d,0x62,0xbe,0x7d,0x60,0x3c,0x39,0xa1,0xa6,0x32,0x49,0xa4, + 0x37,0x50,0x6e,0x76,0xb8,0x62,0x45,0x3d,0x64,0xb6,0x3e,0x4b,0xa6,0x3f,0x4a,0x3a, + 0xb9,0x4d,0x2a,0x78,0x3f,0x62,0xa3,0x3d,0x6b,0x2c,0x3e,0xaf,0xa6,0x22,0x29,0xb4, + 0xb9,0x4d,0x56,0x78,0x50,0x62,0xb0,0x5d,0x67,0x2c,0x3d,0x31,0x31,0x65,0x29,0xba, + 0xa9,0x50,0x56,0x78,0x71,0x62,0xb4,0x7d,0x6f,0x4c,0x40,0x43,0xa6,0xac,0x49,0xc1, + 0xa9,0x4f,0x42,0x77,0x47,0x63,0x3e,0x3d,0x71,0x64,0x41,0x57,0xa7,0x44,0x4a,0x37, + 0xa9,0x51,0xb8,0x7b,0x48,0x63,0x3b,0x3d,0x71,0xbe,0x42,0xa1,0xa7,0x68,0x2a,0x3f, + 0xa9,0x53,0x6a,0x79,0x5b,0x63,0xa8,0x5d,0x7a,0x4c,0x43,0x7b,0xa7,0x25,0x2a,0x42, + 0x37,0x56,0xb4,0x7a,0x2b,0x63,0x65,0x7d,0x7d,0x5c,0x44,0x3f,0xa7,0x2e,0x2a,0x4c, + 0x37,0x57,0x3a,0x7a,0xb4,0x63,0x6a,0xaf,0x71,0x7d,0x3c,0x71,0xa7,0xb3,0x2a,0x46, + 0x77,0x48,0x3e,0x7a,0xb2,0x63,0x3c,0x3d,0x30,0x64,0x44,0xab,0xa7,0xbc,0x4a,0x50, + 0x57,0x51,0x32,0x7c,0xc0,0x63,0x37,0x3d,0x22,0xa6,0x45,0x3b,0xa8,0x43,0x4a,0x55, + 0x67,0x5a,0x5e,0x7b,0x65,0x63,0x7e,0x5d,0x24,0x6c,0x45,0xaf,0xa8,0x4d,0x4a,0x5a, + 0x68,0x5b,0x52,0x7b,0x27,0x63,0x26,0x5d,0x25,0xae,0x46,0x61,0xa8,0x60,0x4a,0x5c, + 0x27,0x5c,0x7a,0x7b,0xbb,0x63,0xa3,0x7d,0x29,0x4c,0x47,0x46,0x3c,0x7e,0x2a,0x64, + 0xb9,0x5e,0x5e,0x7c,0x68,0x63,0xb3,0xaf,0x2d,0x64,0x48,0x33,0xa8,0xa5,0x4a,0x6a, + 0x77,0x5f,0x7a,0x7c,0x2c,0x63,0xb9,0x5d,0x2f,0x34,0x48,0x73,0xa8,0xbb,0x2a,0x5f, + 0x57,0x69,0x5a,0x7d,0x34,0x64,0x6f,0xaf,0x28,0x4c,0x4d,0xad,0xa9,0x4c,0x4a,0x77, + 0x77,0x61,0xb4,0x7d,0xa2,0x64,0x42,0x3d,0xa7,0x7c,0x4a,0x33,0xa9,0x60,0x4a,0x7c, + 0x27,0x64,0x42,0x7d,0xaa,0x64,0x4b,0x3d,0xa8,0xbe,0x4a,0x75,0xa9,0x69,0x4a,0x21, + 0x67,0x65,0x52,0x7e,0x3f,0x64,0x53,0x5d,0xab,0x54,0x4b,0x61,0xa9,0xa1,0x2a,0x29, + 0x47,0x66,0xa8,0x7e,0x7a,0x64,0x60,0x7d,0xae,0xa6,0x4c,0x25,0x46,0x33,0x70,0xa3, + 0x4d,0x54,0x4b,0xb3,0xa9,0xae,0x4a,0x2c,0x57,0x68,0x32,0x7d,0x70,0x64,0x6a,0x7d, + 0xb1,0x7c,0x4c,0xa3,0xa9,0xbd,0x2a,0x2f,0xb9,0x61,0x6e,0xa1,0x47,0x64,0x78,0x7d, + 0xb5,0x64,0x4d,0xa1,0xaa,0x4d,0x56,0xa8,0xa9,0x6a,0xc0,0xa1,0x67,0x64,0x21,0x5d, + 0xb6,0x74,0x4d,0xb1,0xaa,0x54,0x4a,0xae,0xa9,0x6c,0x32,0xa1,0x2a,0x64,0x29,0xaf, + 0xb9,0x54,0x4f,0x43,0xaa,0x69,0x4a,0xb8,0x47,0x6c,0xb4,0xa1,0xad,0x64,0xa6,0x3d, + 0xbb,0x2c,0x4f,0x7d,0xaa,0x21,0x2a,0xb3,0x27,0x6e,0x2e,0xa2,0xb2,0x64,0xb0,0x3d, + 0xc1,0xa6,0x4f,0xa9,0xaa,0xb7,0x2a,0xba,0x37,0x70,0x42,0xa2,0x2f,0x64,0xba,0x5d, + 0xc1,0x44,0x50,0x2d,0xaa,0x2d,0x2a,0xbc,0xa9,0x6f,0x4a,0xa2,0xaa,0x64,0xaa,0x3e, + 0x52,0xb6,0x52,0x3d,0xab,0x45,0x2b,0x39,0x37,0x73,0x66,0x21,0x63,0x65,0x44,0x7e, + 0x31,0x31,0x33,0xa9,0xab,0x46,0x2b,0x3c,0x47,0x74,0x3e,0x21,0xba,0x65,0x50,0xb0, + 0x3a,0xbe,0x53,0x4f,0xab,0x27,0x2b,0x43,0x77,0x75,0xb8,0x22,0x4c,0x65,0x51,0xb0, + 0x3b,0xb6,0x5b,0xb5,0xab,0x6b,0x4b,0x47,0x27,0x76,0x32,0x22,0x6b,0x65,0x34,0xb0, + 0x49,0xae,0x52,0xbf,0xab,0x31,0x2b,0x6a,0x57,0x71,0x52,0x24,0x29,0x65,0x39,0x7e, + 0x43,0x64,0x58,0x73,0xab,0x37,0x4b,0x6a,0x27,0x77,0x22,0x22,0xaa,0x65,0x66,0x5e, + 0x34,0x64,0x55,0x55,0xac,0x33,0x4b,0x6b,0xb9,0x78,0x3e,0x21,0x56,0x65,0xc1,0x5e, + 0x3f,0x34,0x54,0x2f,0xab,0x45,0x4b,0x56,0x57,0x79,0xac,0x23,0x54,0x65,0x79,0x5e, + 0x4d,0x64,0x52,0xb5,0xac,0x6c,0x2b,0x5c,0x77,0x7c,0xa4,0x23,0xae,0x65,0x26,0x3e, + 0x48,0xb6,0x56,0x2d,0xac,0x4d,0x2b,0x5f,0x77,0x7a,0xb8,0x23,0x2a,0x65,0x7d,0x3e, + 0x47,0x3c,0x56,0x6d,0xac,0x5f,0x2b,0x61,0x47,0x7c,0x5a,0x24,0x63,0x65,0xae,0x7e, + 0x4e,0x34,0x57,0xc1,0xac,0xa3,0x2b,0x6b,0x67,0x7e,0xbc,0x24,0xa1,0x65,0xbd,0x3c, + 0x6d,0x24,0x58,0x6b,0xac,0x2e,0x2b,0x69,0x67,0x7e,0x4e,0x23,0x5f,0x66,0x55,0x5e, + 0x4b,0x34,0x57,0x69,0xac,0x7b,0x2b,0x67,0x77,0xa1,0xbc,0x24,0xab,0x65,0x71,0x7e, + 0x52,0x2c,0x5c,0xc1,0xac,0x36,0x4b,0xc2,0x47,0xa2,0x7a,0x24,0xaa,0x65,0x72,0x5e, + 0x5c,0x3c,0x55,0x6d,0xad,0xb9,0x2b,0x53,0x77,0x28,0x5e,0x23,0x3b,0x66,0x35,0x7e, + 0x5d,0x3c,0x59,0x77,0xad,0x3a,0x2b,0x79,0x77,0x21,0x62,0x25,0xb5,0x66,0x3e,0x7e, + 0x58,0x74,0x5a,0x3f,0xad,0x62,0x4b,0x7c,0x47,0x24,0x4a,0x25,0x79,0x66,0x3f,0x3e, + 0x53,0x44,0x5b,0x51,0xad,0x77,0x2b,0x25,0x37,0x25,0x42,0x26,0x53,0x66,0x59,0xb0, + 0x5f,0x21,0xb7,0x3a,0xc2,0x40,0x2b,0x73,0xbb,0x66,0xb0,0x26,0x74,0x66,0x61,0x7e, + 0x5c,0x74,0x5b,0xa9,0xad,0x27,0x4b,0x2c,0xa9,0x27,0x76,0x26,0x30,0x66,0x5b,0x7e, + 0x5e,0x24,0x5c,0x26,0xad,0x66,0x6f,0xb0,0x51,0x5c,0x5d,0x5e,0x37,0xc0,0x4b,0x73, + 0x57,0x29,0x2a,0x27,0x62,0x7e,0x78,0xb0,0x64,0x74,0x5d,0xb1,0xae,0xb1,0x4e,0x78, + 0x47,0x30,0x6b,0x61,0x78,0x66,0x21,0xb0,0x65,0x7c,0x5e,0x51,0xae,0x5d,0x2b,0xad, + 0x77,0x2b,0xb0,0x27,0x30,0x66,0x29,0x5e,0x68,0x74,0x5e,0xb5,0xae,0x70,0x2b,0xb3, + 0x37,0x2d,0x42,0x28,0x34,0x66,0xa6,0x5e,0x6a,0x74,0x5f,0x5b,0xae,0xa2,0x4b,0xb7, + 0x77,0x2e,0x5a,0x28,0x5c,0x66,0xae,0xb0,0x6c,0x44,0x5f,0xa5,0xae,0x2a,0x2b,0xb9, + 0xb9,0x2e,0xb4,0x28,0x77,0x66,0xb5,0xb0,0x6e,0x4c,0x60,0x6f,0xae,0xb9,0x4b,0xc0, + 0x67,0x30,0x7e,0x28,0xb2,0x66,0x71,0x31,0x3c,0xb7,0xbb,0x41,0xaf,0x3a,0x2c,0x33, + 0x77,0xa3,0xb0,0x29,0x55,0x67,0x39,0xb0,0x76,0xb6,0x62,0x5b,0xaf,0x62,0x4c,0x3e, + 0x57,0xa7,0x3a,0x2a,0x3e,0x67,0x57,0x7e,0x79,0x3c,0x63,0x67,0xaf,0x70,0x4c,0x3e, + 0x37,0xa6,0x7e,0x2a,0x43,0x67,0x55,0x3e,0x7d,0x54,0x64,0xa5,0xaf,0xac,0x2c,0x48, + 0x27,0xa9,0x2e,0x2a,0x76,0x67,0x68,0x5e,0x7b,0xb6,0x63,0xa5,0xaf,0x30,0x4c,0x48, + 0x57,0xa9,0xb0,0x2a,0xb2,0x67,0x67,0x5e,0xa1,0x28,0x5a,0x29,0x50,0x67,0x24,0x62, + 0x34,0x64,0x65,0x27,0xb0,0x4f,0x2c,0x58,0x37,0xab,0xa8,0x2b,0x66,0x67,0x7d,0xb0, + 0x22,0x44,0x65,0x49,0xb0,0x62,0x2c,0x63,0x67,0xae,0x42,0x2b,0x2b,0x67,0x2f,0x5e, + 0x26,0x7c,0x67,0x4d,0xb0,0x7b,0x2c,0x6d,0x77,0xbf,0x46,0x2c,0xbc,0x67,0x76,0x5e, + 0xa3,0x24,0x6b,0xad,0xb0,0xa6,0x2c,0x6d,0xa9,0xb0,0xa4,0x2c,0x77,0x67,0xbe,0x3e, + 0x2e,0xb6,0x68,0x49,0xb0,0xb7,0x4c,0x6b,0x57,0xb1,0x46,0x2c,0xbd,0x67,0xb9,0x5e, + 0x2f,0x54,0x68,0x5b,0xb0,0xb8,0x6b,0x7e,0x2f,0xb6,0x65,0x2b,0xb1,0x68,0x4c,0x76, + 0xa9,0xb3,0xa8,0x2d,0xb5,0x68,0x48,0xb0,0xa6,0xb6,0x69,0x77,0xb1,0x66,0x2c,0x76, + 0x67,0xb6,0x2a,0x2d,0x7e,0x68,0x38,0xb0,0xa7,0x4c,0x69,0xb7,0xb1,0x58,0x4c,0x75, + 0x77,0xba,0xc0,0x2d,0x4e,0x68,0x3f,0x3e,0xab,0x44,0x6b,0x25,0xb1,0x7d,0x4c,0x2a, + 0x47,0xb8,0x2e,0x2e,0x24,0x68,0x60,0x5e,0xad,0xbe,0x6c,0x39,0xb1,0x2a,0x4c,0x2b, + 0x77,0xb9,0x26,0x2e,0x40,0x68,0x5a,0x5e,0xaf,0x44,0x6b,0x6f,0xb1,0x51,0x2c,0xa5, + 0x47,0xbd,0x62,0xa4,0xaf,0x68,0x6f,0x3e,0xb2,0xb6,0x69,0xc1,0xb2,0xbc,0x4c,0x77, + 0x47,0xc2,0x6e,0x2d,0x63,0x68,0xb6,0x3e,0xb1,0x28,0xbe,0xc1,0xbe,0x5f,0xbd,0x30, + 0x30,0xbb,0x34,0x26,0xc0,0xc2,0x71,0x4e,0x60,0xb2,0xbf,0x32,0xad,0x2b,0x31,0xa3, + 0x34,0xb6,0x6d,0x57,0xb2,0xbe,0x2c,0x21,0xa9,0xbe,0xac,0x2f,0xbb,0x68,0xa3,0x5e, + 0xbb,0x34,0x6e,0x2f,0xb2,0x5e,0x2c,0xc1,0x67,0xbe,0x66,0x30,0x33,0x68,0x30,0x3e, + 0xb8,0x74,0x6f,0x4d,0xb2,0x79,0x2c,0xbb,0x57,0xbe,0x4a,0x30,0x64,0x68,0xab,0xb0, + 0xbd,0x3c,0x6f,0x79,0xb2,0x2d,0x2c,0xbb,0xa9,0xc0,0x5a,0x30,0x30,0x68,0xb8,0x5e, + 0xc1,0xa6,0x70,0x59,0xb2,0xaf,0x4c,0xc1,0x47,0xc2,0x6a,0x30,0x2c,0x68,0x73,0x5f, + 0x31,0x2c,0x74,0xb7,0xb2,0x39,0x2d,0x31,0x48,0x31,0x6e,0xa4,0xc1,0x68,0x77,0xb1, + 0x32,0x24,0x72,0xab,0xb2,0x3f,0x2d,0x34,0x38,0x31,0xc0,0xa3,0x61,0x69,0x40,0xa1, + 0x34,0x44,0x72,0x53,0xb3,0x62,0x2d,0x44,0x48,0x35,0x7a,0xa4,0x60,0x69,0x6d,0x5f, + 0x3b,0xa6,0x73,0xb3,0xb3,0x2a,0x2d,0x46,0xaa,0x37,0xc0,0xa4,0x7c,0x69,0x68,0x5f, + 0x31,0x31,0x34,0x63,0xb3,0x35,0x2d,0x70,0x28,0x31,0xb4,0xa5,0x4a,0x69,0x2a,0x5f, + 0x46,0x5c,0x77,0x41,0xb4,0x64,0x4d,0x5d,0x58,0x3b,0x62,0xa5,0x27,0x69,0x2c,0x3f, + 0x49,0xbe,0x78,0xb9,0xb4,0x73,0x4d,0x63,0x28,0x3e,0x52,0xa6,0x5d,0x69,0xb8,0xb1, + 0x4c,0x7c,0x77,0xbf,0xb4,0xac,0x4d,0x6a,0x48,0x3f,0x22,0xa6,0xa1,0x69,0xbb,0x3f, + 0x4f,0xa6,0x78,0xa1,0xb4,0xbd,0x2d,0x70,0x78,0x40,0xa8,0xa6,0xc2,0x69,0x74,0x5f, + 0x52,0x34,0x79,0x67,0xb5,0x45,0x4d,0x76,0x28,0x42,0x62,0xa7,0x61,0x6a,0x3d,0xa1, + 0x54,0x2c,0x79,0xbb,0xb5,0x50,0x2d,0x79,0x38,0x43,0x4a,0xa7,0x7c,0x6a,0x47,0x3f, + 0x58,0x54,0x7a,0xbf,0xb5,0x72,0x4d,0x21,0x48,0x45,0x4e,0xa8,0x43,0x6a,0x56,0xa1, + 0x5b,0x44,0x7b,0xa1,0xb5,0x2d,0x2d,0x27,0x58,0x47,0x3e,0xa8,0x77,0x6a,0x62,0x3f, + 0x5d,0xb6,0x7c,0x55,0xb5,0xb4,0x4d,0x2d,0x38,0x48,0x36,0xa8,0xbc,0x6a,0x6e,0xb1, + 0x51,0xbd,0x71,0x5f,0xb6,0x36,0x4d,0xa6,0x78,0x49,0x2a,0xa9,0x4e,0x6a,0x7e,0x3f, + 0x63,0xbe,0x7d,0x23,0xb6,0x43,0x2d,0xaa,0xaa,0x4b,0x6a,0xa9,0xa2,0x6a,0xb9,0x44, + 0xa8,0x6c,0x7e,0x25,0xb6,0x65,0x4d,0xb1,0x38,0x4c,0xa4,0xa9,0xb8,0x6a,0x2f,0xb1, + 0x68,0x24,0xa2,0x41,0xb6,0x2a,0x2d,0xbc,0xaa,0x4e,0xb0,0xaa,0x71,0x6a,0xbc,0x5f, + 0x6f,0xb6,0xa2,0x6d,0xb6,0x22,0x4e,0x31,0x28,0x54,0x6e,0xab,0x56,0x6b,0x6f,0x3f, + 0x64,0x44,0x21,0xb7,0xb7,0x5b,0x2e,0x38,0xba,0x53,0xc0,0xab,0x2a,0x6b,0x41,0x5f, + 0x76,0xa6,0x22,0x23,0xb7,0x69,0x4e,0x3d,0x68,0x54,0x5a,0xab,0xb9,0x6b,0x50,0xa1, + 0x79,0x2c,0x23,0x6d,0xb7,0x24,0x2e,0x4a,0x58,0x57,0x6e,0xac,0x25,0x6b,0x6d,0x5f, + 0x6f,0x21,0x25,0x3a,0xc2,0x31,0xbb,0x3f,0xa1,0x4c,0x24,0xa1,0xb7,0xb7,0x2e,0x4e, + 0xaa,0x58,0x7a,0xac,0xb3,0x6b,0x6d,0x5f,0xa2,0x74,0x24,0xb1,0xb7,0x33,0x4e,0x51, + 0x68,0x59,0x46,0xad,0x3d,0x6b,0x74,0xa1,0x21,0xae,0x25,0x5b,0xb8,0x3a,0x2e,0x54, + 0xaa,0x5a,0x4a,0xad,0x5d,0x6b,0xa2,0x3f,0x25,0x54,0x26,0x4b,0xb8,0x56,0x4e,0x5a, + 0x48,0x5b,0xb0,0xad,0x77,0x6b,0x27,0xa1,0x27,0x7c,0x26,0x79,0xb8,0x64,0x2e,0x5e, + 0x68,0x5c,0x66,0xad,0xbb,0x6b,0x2e,0xa1,0x29,0x64,0x27,0x3f,0xb8,0x6b,0x4e,0x62, + 0x58,0x5d,0x56,0xae,0x33,0x6b,0xa8,0x3f,0x2a,0x24,0x27,0x6b,0xb8,0x23,0x2e,0x65, + 0x68,0x5f,0x3a,0xae,0x64,0x6b,0xb3,0xb1,0x2c,0x5c,0x27,0xbd,0xb8,0x2d,0x4e,0x68, + 0x78,0x5e,0x76,0xae,0x7e,0x6b,0xb5,0xa1,0x2e,0x44,0x28,0x63,0xb8,0xb4,0x2e,0x6c, + 0xaa,0x60,0xbc,0xae,0xc2,0x6b,0x71,0x31,0x40,0xa6,0x25,0x33,0xb9,0xbb,0x4e,0x70, + 0x58,0x60,0x7a,0xae,0xb6,0x6b,0x73,0xb1,0xa3,0xae,0x29,0x43,0xb9,0x40,0x2e,0x75, + 0xba,0x62,0x32,0xaf,0x52,0x6c,0x39,0xa1,0xa5,0x54,0x29,0xab,0xb9,0x49,0x4e,0x78, + 0x68,0x63,0x4e,0xaf,0x79,0x6c,0x42,0xa1,0xa8,0xa6,0x2a,0x61,0xb9,0x61,0x2e,0x7d, + 0x58,0x64,0x52,0xaf,0xac,0x6c,0x4b,0xa1,0xa9,0x6c,0x2a,0x29,0xb9,0x69,0x4e,0xa1, + 0x58,0x64,0x2a,0xaf,0xbb,0x6c,0x50,0x3f,0xab,0x34,0x2b,0x37,0xb9,0x75,0x4e,0x22, + 0x68,0x65,0x6a,0xb0,0x47,0x6c,0x55,0xb1,0xac,0x7c,0x2b,0x65,0xb9,0x29,0x4e,0x27, + 0x78,0x66,0xa4,0xb0,0x6a,0x6c,0x5f,0xa1,0xaf,0x44,0x2c,0x4b,0xb9,0xae,0x4e,0x2b, + 0x58,0x67,0xbc,0xb0,0xa4,0x6c,0x6a,0x5f,0xb1,0x6c,0x2c,0x26,0xad,0x6c,0x3c,0xb3, + 0xb2,0x2c,0x29,0x41,0xba,0x34,0x2e,0xa3,0x78,0x6a,0x56,0xb1,0x55,0x6c,0x78,0xa1, + 0xb5,0x5c,0x2d,0x7d,0xba,0x3e,0x2e,0xa9,0xba,0x6a,0xa4,0xb1,0x78,0x6c,0x27,0xa1, + 0xb9,0x74,0x2e,0x27,0xba,0x5e,0x2e,0xaf,0x28,0x6c,0xc0,0xb1,0xc1,0x6c,0x2f,0x5f, + 0xbb,0xb6,0x2f,0x47,0xba,0x79,0x2e,0xb7,0x38,0x6d,0xbc,0xb2,0x61,0x6c,0xb0,0xa1, + 0xbe,0x7c,0x2f,0xc1,0xba,0x2f,0x4e,0xba,0x28,0x6e,0xb0,0xb2,0x78,0x6c,0xb6,0x5f, + 0xc0,0x6c,0x30,0x65,0xba,0xb1,0x4e,0xbf,0x68,0x70,0x6a,0xb2,0xbf,0x6c,0x74,0x40, + 0x32,0x44,0xa3,0x7d,0xbc,0x41,0x4f,0x36,0x58,0x7b,0x46,0xb4,0x3f,0x6d,0x4e,0x40, + 0x39,0x64,0xa4,0xbb,0xbb,0x7e,0x4f,0x42,0x78,0x76,0x3e,0xb4,0x66,0x6d,0x5b,0xa2, + 0x3b,0xbe,0xa6,0x53,0xbb,0xa6,0x4f,0x4a,0x68,0x77,0x22,0xb4,0x6f,0x6d,0x60,0x40, + 0x3d,0x5c,0xa6,0x45,0xbb,0xb9,0x4f,0x4e,0x52,0x59,0x44,0xc1,0x32,0xb6,0x2f,0x4c, + 0x58,0x78,0xb8,0xb4,0xb7,0x6d,0x32,0xb2,0x42,0x44,0xa7,0x53,0xbc,0x3d,0x2f,0x56, + 0x78,0x7a,0x5e,0xb5,0x71,0x6d,0x29,0x40,0x46,0x6c,0xa8,0x6f,0xbc,0x5e,0x4f,0x5b, + 0x28,0x7b,0x7e,0xb5,0xbd,0x6d,0x30,0xb2,0x49,0x24,0xa9,0x6b,0xbc,0x24,0x2f,0x5a, + 0x6a,0xc0,0x5a,0xb6,0x5f,0x6d,0xaf,0xb2,0x4c,0x7c,0xa9,0xb7,0xbc,0xa7,0x2f,0x6b, + 0x28,0xa2,0x4e,0xb6,0xaf,0x6d,0xbb,0x60,0x4f,0x4c,0xa7,0x41,0xbd,0x37,0x2f,0x74, + 0x38,0x21,0xa8,0xb7,0x51,0x6e,0x38,0xb2,0x59,0x34,0xa7,0xa5,0xbd,0x4e,0x2f,0x78, + 0xaa,0x22,0x2e,0xb7,0x74,0x6e,0x46,0xb2,0x55,0x7c,0xac,0x73,0xbd,0x62,0x4f,0x7e, + 0x48,0x25,0xb9,0x6f,0xb3,0x6e,0x4f,0x60,0x58,0xae,0xad,0x41,0xbd,0x7c,0x2f,0x23, + 0x28,0x25,0xa4,0xb8,0x47,0x6e,0x5b,0x60,0x5d,0x74,0xad,0xa3,0xbd,0x31,0x31,0x47, + 0xaa,0x27,0x46,0xb8,0x75,0x6e,0x60,0xb2,0x59,0x4d,0x74,0x3f,0xbd,0xa8,0x4f,0x2a, + 0x28,0x27,0x6e,0xb8,0x26,0x6e,0x65,0xb2,0x5e,0x7c,0xae,0x65,0xbd,0xb1,0x2f,0x2d, + 0x48,0x28,0x3a,0xb8,0xa9,0x6e,0x6c,0x60,0x60,0x34,0xab,0x35,0xbe,0x38,0x2f,0xa4, + 0x58,0x29,0x4a,0xb9,0x64,0x6e,0x77,0x40,0x62,0x7c,0xaf,0x6d,0xbe,0x4b,0x2f,0xa8, + 0x38,0x2a,0x2a,0xb9,0x21,0x6e,0x2f,0xa2,0x61,0x54,0xb0,0x4b,0xbe,0x36,0x2f,0xac, + 0x78,0x2b,0x46,0xb9,0xb8,0x6e,0x2a,0x60,0x68,0x54,0xb0,0xa1,0xbe,0x69,0x4f,0xb1, + 0x48,0x2c,0x62,0xb9,0xb1,0x6e,0xaa,0x60,0x6a,0x74,0xb1,0x6f,0xbe,0x77,0x2f,0xb6, + 0x78,0x2d,0xac,0xba,0x3c,0x6e,0xa7,0xa2,0x69,0xbe,0xb0,0x6b,0xbe,0x7d,0x2f,0xbc, + 0x68,0x2f,0x36,0xba,0x7d,0x6e,0xb6,0xb2,0x6c,0x54,0xb2,0x3d,0xbe,0xb1,0x2f,0xc0, + 0x48,0x29,0x76,0xbb,0x45,0x6f,0x6a,0xa2,0x6f,0x5c,0xb0,0x71,0xbf,0x31,0x50,0x31, + 0xba,0xa3,0x7e,0xbc,0xb6,0x6e,0xc0,0xb2,0x62,0x6c,0xb3,0x4b,0xbf,0xbe,0x4f,0xa7, + 0x68,0xa4,0x4e,0xbb,0x5b,0x6f,0x38,0xb2,0x74,0x6c,0xb3,0x27,0xbf,0x4f,0x30,0x3a, + 0x78,0xa5,0x3e,0xbb,0x25,0x6f,0x44,0xb2,0x75,0x34,0xb4,0x51,0xbf,0x5d,0x50,0x3c, + 0xba,0xa6,0x42,0xbb,0x27,0x6f,0x4a,0x60,0x77,0xa6,0xb4,0xad,0xbf,0x72,0x30,0x43, + 0x38,0xa8,0x42,0xbc,0x5e,0x6f,0x59,0xa2,0x7b,0x2c,0xb5,0x73,0xbf,0x25,0x50,0x47, + 0x68,0xa8,0x7a,0xbc,0x62,0x6f,0x5c,0xa2,0x7c,0x7c,0xb5,0xbd,0xbf,0xa3,0x50,0x49, + 0x28,0xa9,0x3a,0xbc,0x29,0x6f,0x65,0xa2,0x7e,0xa6,0xb6,0x75,0xbf,0x4e,0xa9,0xc0, + 0xba,0xaa,0x7a,0xbc,0xb7,0x6f,0x6e,0xa2,0xa2,0x24,0xb3,0x3e,0xad,0x3f,0x72,0x50, + 0xbd,0x49,0x3a,0xbd,0x4d,0x6f,0x76,0x60,0x21,0x24,0xb8,0x3b,0xc0,0x56,0x30,0x56, + 0xaa,0xac,0x7a,0xbd,0x70,0x6f,0x7e,0x60,0x25,0x64,0xb8,0xa9,0xc0,0x5c,0x50,0x5a, + 0xaa,0xae,0x7a,0xbd,0xab,0x6f,0x2c,0xa2,0x25,0xbe,0xb8,0x77,0xc0,0x7a,0x30,0x62, + 0x48,0xad,0xb0,0xbe,0x40,0x6f,0x30,0x60,0x2a,0x2c,0xb9,0xb7,0xc0,0x28,0x50,0x65, + 0x68,0xb0,0x26,0xbe,0x78,0x6f,0xb2,0x60,0x2b,0x2c,0xb7,0xbd,0xc1,0x22,0x50,0x66, + 0xba,0xb1,0xb4,0xbe,0x69,0x6f,0xaa,0xb2,0x2c,0x34,0xba,0x61,0xc0,0xb1,0x30,0x6d, + 0x78,0xb1,0xbc,0xbe,0xbe,0x6f,0xbf,0xa2,0x2f,0x3c,0xb7,0x3b,0xc1,0x36,0x50,0x75, + 0x68,0xb4,0x36,0xbf,0x43,0x70,0x3d,0x60,0xa4,0xbe,0xbb,0x43,0xc1,0x36,0x30,0x75, + 0x58,0xb5,0x4a,0xbf,0xa9,0x70,0x3f,0xb2,0xa6,0x5c,0xbb,0xb5,0xc1,0x52,0x30,0x77, + 0xba,0xb3,0x31,0x31,0x63,0x70,0x3f,0xa2,0xa9,0x6c,0xbc,0x6b,0xc1,0x5c,0x50,0x7c, + 0xaa,0xb5,0xa8,0xbf,0x2b,0x70,0x4f,0x60,0xa9,0x24,0xbc,0x23,0xc1,0x6f,0x50,0xa2, + 0x68,0xb7,0x3e,0xc0,0x26,0x6f,0x30,0x60,0xad,0xb7,0x6e,0xc1,0xc1,0x75,0x50,0x22, + 0x48,0xb7,0x62,0xc0,0x43,0x70,0x55,0x40,0xac,0x4c,0xbd,0x59,0xc1,0x7c,0x50,0x22, + 0xaa,0xb7,0xb0,0xc0,0x4d,0x70,0x3f,0x40,0xb6,0x24,0xc0,0x3b,0xc2,0x57,0x50,0xac, + 0x28,0xbd,0x6a,0xc1,0x21,0x70,0x25,0x60,0xb8,0x5c,0xc0,0x59,0xc2,0x5d,0x50,0xae, + 0xba,0xbe,0x32,0xc1,0xab,0x70,0x2b,0x60,0xb9,0x6c,0xc0,0xb3,0xc2,0x72,0x50,0xb3, + 0xaa,0xbf,0x3e,0xc2,0x39,0x70,0xa4,0xb2,0xbb,0xa6,0xc1,0x59,0xc2,0xa2,0x50,0xb6, + 0x28,0xbf,0xac,0xc2,0x54,0x70,0xae,0xb2,0xbe,0x44,0xc1,0xb5,0xc2,0x28,0x50,0xb9, + 0xaa,0xc0,0xa4,0xc1,0xb4,0x76,0xb4,0x60,0xbf,0x64,0xc2,0x45,0xc2,0xad,0x30,0xbd, + 0x78,0xc2,0x36,0xc2,0xa9,0x70,0xbd,0x60,0xc2,0x4c,0xc2,0xb5,0xc2,0xb1,0x57,0x31, + 0xab,0x31,0x43,0x31,0x3c,0x71,0x35,0x21,0x32,0x75,0x31,0x64,0x31,0x3f,0x51,0x35, + 0x49,0x32,0x53,0x31,0x70,0x71,0x3f,0xb3,0x35,0x25,0x32,0x3e,0x31,0x5a,0x51,0x3c, + 0x39,0x33,0xad,0x31,0x30,0x71,0x49,0x21,0x37,0x75,0x32,0xaa,0x31,0x6a,0x51,0x3f, + 0x39,0x34,0x2b,0x31,0xbc,0x71,0x50,0x61,0x38,0xbf,0x33,0x3a,0x31,0x74,0x51,0x41, + 0x29,0x35,0xb1,0x32,0x44,0x71,0x57,0x21,0x3b,0xaf,0x33,0x51,0x22,0x27,0x51,0x4c, + 0x69,0x38,0x47,0x32,0x2a,0x71,0x68,0x61,0x3d,0x55,0x34,0x66,0x31,0xae,0x51,0x32, + 0x49,0x40,0x6f,0x32,0xb4,0x71,0x37,0xb3,0x43,0x7d,0x35,0x78,0x32,0x48,0xa3,0x5a, + 0x6f,0x26,0x65,0x35,0x44,0x7c,0xbd,0x7b,0x71,0x39,0x33,0x48,0x47,0x54,0x51,0x58, + 0xab,0x3b,0xa1,0x33,0x22,0x71,0xc2,0x41,0x38,0x3d,0x36,0x2e,0x32,0x63,0xa3,0x5d, + 0xab,0x3c,0x23,0x34,0x34,0x71,0xa5,0x41,0x49,0x25,0x37,0x32,0x32,0x72,0x51,0x65, + 0x39,0x3d,0x27,0x34,0x55,0x71,0xab,0xb3,0x46,0xbf,0x37,0x58,0x32,0x25,0xa3,0x67, + 0x39,0x3e,0x27,0x34,0x6f,0x71,0xb1,0x41,0x4c,0xaf,0x38,0x32,0x32,0xa4,0x51,0x68, + 0x59,0x3f,0x57,0x34,0x7e,0x71,0xb7,0x61,0x4e,0x7d,0x38,0x62,0x32,0xa7,0x51,0x6c, + 0x59,0x3f,0xc1,0x34,0xa3,0x71,0xbc,0xb3,0x50,0x25,0x38,0xba,0x32,0xc2,0x51,0x51, + 0x49,0x41,0x3b,0x35,0x36,0x72,0x32,0xb3,0x51,0x25,0x39,0x4c,0x33,0x39,0x51,0x73, + 0xab,0x42,0x57,0x35,0x5c,0x72,0x3f,0x41,0x54,0x4d,0x3a,0x32,0x33,0x5d,0xa3,0x7c, + 0x39,0x43,0xb9,0x35,0x2b,0x72,0x48,0xb3,0x57,0x55,0x39,0x31,0x31,0x62,0x51,0x7e, + 0x39,0x44,0x5b,0x35,0xae,0x72,0x3c,0x21,0x58,0x3d,0x3a,0xb2,0x33,0x6d,0x51,0xa2, + 0xab,0x45,0x67,0x36,0x43,0x72,0x5b,0xb3,0x5a,0xbf,0x3b,0xba,0x33,0x27,0x51,0x2d, + 0x49,0x48,0x3f,0x36,0x30,0x72,0x65,0x21,0x60,0x55,0x3c,0xaa,0x33,0xc0,0x51,0x23, + 0x69,0x49,0x3f,0x38,0xbe,0x72,0x6f,0x61,0x5e,0xb7,0x39,0x3e,0x34,0xb1,0x51,0x72, + 0x49,0x4f,0xa9,0x35,0x66,0x72,0x7e,0x41,0x62,0x65,0x3d,0xa8,0x34,0x49,0xa3,0xab, + 0x39,0x4a,0xa9,0x37,0x21,0x72,0x22,0x61,0x63,0xbf,0x3d,0x28,0x34,0x3c,0xa3,0xa6, + 0x39,0x4d,0x47,0x38,0x4b,0x72,0xad,0x21,0x6a,0xbf,0x3f,0x76,0x34,0x7c,0x51,0xa7, + 0x69,0x4d,0x6b,0x38,0x38,0x72,0xa5,0x21,0x68,0xa7,0x3f,0xae,0x34,0x6a,0xa3,0xb1, + 0x29,0x4e,0x33,0x38,0x3a,0x72,0xad,0x41,0x70,0x55,0x3d,0x58,0x35,0xb8,0xa3,0xbc, + 0xab,0x50,0xb9,0x37,0x34,0x73,0x67,0x41,0x61,0x2d,0x44,0x34,0x34,0xbe,0xa3,0xa3, + 0xbb,0x58,0x33,0x38,0xb5,0x72,0x74,0x61,0x73,0x45,0x41,0x72,0x35,0x2f,0xa3,0xaa, + 0x39,0x51,0x4b,0x3c,0xbe,0x72,0x2c,0x61,0x73,0x25,0x41,0xbc,0x35,0x5e,0x52,0x61, + 0x79,0x54,0x2f,0x39,0xae,0x73,0x5c,0x61,0x77,0xb7,0x43,0x36,0x35,0x65,0xa4,0x39, + 0xab,0x52,0x63,0x39,0xb2,0x73,0x4f,0x61,0x74,0x5d,0x44,0x46,0x35,0x62,0x52,0x48, + 0x49,0x56,0xc1,0x3a,0x50,0x73,0x67,0x61,0x7d,0xaf,0x43,0xba,0x35,0xb0,0x52,0x4b, + 0x39,0x57,0x37,0x3a,0x77,0x73,0x66,0x21,0x7b,0x3d,0x41,0x74,0x36,0xc2,0xa4,0x4f, + 0x79,0x51,0x2f,0x3b,0x49,0x73,0x7c,0x41,0x22,0xbf,0x45,0x5c,0x36,0x3b,0x52,0x70, + 0x79,0x53,0x33,0x3b,0xa6,0x73,0x27,0x41,0x25,0x78,0x59,0x6b,0x35,0xc2,0xb0,0xab, + 0x49,0x59,0x3b,0x3d,0x7c,0x73,0x26,0x61,0x29,0x35,0x47,0x7a,0x36,0x75,0x52,0x63, + 0x49,0x5d,0x5b,0x3c,0x59,0x73,0x2c,0x61,0x2a,0x55,0x47,0x68,0x36,0xb8,0x6b,0x21, + 0x29,0x6d,0x47,0x6a,0x36,0x6c,0xa4,0x60,0xab,0x5d,0x73,0x3c,0x7a,0x73,0xb1,0x21, + 0x2d,0xbf,0x47,0xb6,0x36,0xab,0x52,0x6b,0x29,0x5f,0xb9,0x3c,0xa8,0x73,0xba,0x41, + 0x30,0x7d,0x45,0x46,0x37,0x3a,0xa4,0x72,0x69,0x68,0xbd,0x3c,0xbd,0x73,0x72,0x21, + 0xa5,0x45,0x49,0x66,0x37,0x49,0x52,0x78,0xbb,0x63,0x67,0x3d,0x26,0x58,0x46,0x41, + 0xa8,0xbf,0x4a,0xa2,0x37,0x69,0xa4,0x23,0x69,0x66,0x3f,0x3e,0x5a,0x74,0x5b,0x21, + 0xab,0x2d,0x4b,0x4a,0x37,0x2c,0x52,0x26,0xbb,0x67,0x43,0x3e,0x77,0x74,0x5d,0x41, + 0xaf,0x7d,0x49,0x78,0x39,0x26,0xa4,0x2b,0x79,0x67,0xbd,0x3e,0xac,0x74,0x6c,0x41, + 0xa3,0x31,0x34,0x70,0x37,0xb0,0xa4,0x2e,0xbb,0x61,0x7b,0x3f,0x37,0x74,0x73,0x41, + 0xb3,0x35,0x4d,0x38,0x38,0xc0,0xa4,0x73,0x49,0x69,0x57,0x3f,0x3e,0x74,0xc1,0x61, + 0xa3,0x25,0x4d,0xac,0x38,0x50,0xa4,0xa9,0xbb,0x6a,0xb1,0x3f,0x56,0x74,0x7b,0x61, + 0xb4,0x25,0x4e,0x72,0x38,0x60,0xa4,0xb2,0x39,0x6b,0x63,0x3f,0xa1,0x74,0x2e,0x41, + 0xb8,0x6d,0x4e,0x22,0x38,0x68,0x52,0xae,0x49,0x6b,0xa1,0x3f,0xa6,0x74,0x2b,0x21, + 0xb3,0x5d,0x53,0x76,0x38,0xa2,0xa4,0xb3,0x59,0x6e,0x6f,0x40,0x7c,0x74,0xb2,0x61, + 0xbf,0x35,0x50,0x52,0x38,0xae,0x56,0x26,0x69,0x6f,0x43,0x40,0x64,0x74,0xb4,0xb3, + 0xbf,0x65,0x4f,0xba,0x38,0xba,0xa4,0xc1,0x59,0x70,0x33,0x3f,0x40,0x75,0x34,0x62, + 0x40,0xb7,0x50,0xb0,0x38,0xbe,0xa4,0xa4,0xab,0x77,0x7b,0x3f,0x42,0x75,0x36,0x22, + 0x32,0x5d,0x51,0x76,0x39,0x41,0xa5,0x37,0x49,0x72,0x2b,0x41,0x6a,0x75,0x3a,0xb4, + 0x34,0x2d,0x52,0x3a,0x39,0x52,0x53,0x3b,0x59,0x73,0xa9,0x41,0x2f,0x75,0x49,0x22, + 0x37,0x2d,0x53,0x34,0x39,0x70,0x53,0x44,0xab,0x74,0x27,0x41,0xc0,0x75,0x5e,0x62, + 0x38,0x45,0x53,0x36,0x39,0x7c,0xa5,0x43,0x59,0x76,0x6b,0x42,0x4a,0x75,0x59,0x22, + 0x39,0xaf,0x53,0x7a,0x39,0x29,0x53,0x48,0xbb,0x76,0x77,0x42,0x74,0x75,0x62,0x42, + 0x3e,0x55,0x54,0x62,0x39,0xaf,0xa5,0x4c,0x29,0x78,0xa9,0x41,0x33,0x75,0xc2,0x42, + 0x40,0x55,0x54,0x22,0x39,0xbc,0x53,0x31,0x79,0x79,0x63,0x43,0x3b,0x75,0x75,0xb4, + 0x45,0x4d,0x55,0x6e,0x3a,0x43,0xa5,0x56,0x59,0x7a,0x5f,0x43,0x72,0x75,0x22,0x42, + 0x44,0x2d,0x55,0xb0,0x3a,0x4d,0x53,0x5a,0x79,0x79,0xb9,0x43,0xa3,0x75,0x28,0x22, + 0x4f,0x21,0x25,0x3a,0xc2,0x31,0x2a,0x22,0x47,0x55,0x56,0x2c,0x3a,0x66,0x53,0x5e, + 0xbb,0x7c,0x23,0x43,0xba,0x75,0x30,0x22,0x49,0x4d,0x57,0x42,0x3a,0x76,0x53,0x63, + 0x69,0x7d,0xa5,0x44,0x52,0x75,0xad,0x62,0x4b,0x65,0x57,0x2a,0x3a,0x28,0xa5,0x67, + 0x59,0x7e,0xad,0x44,0x6e,0x75,0xb2,0xb4,0x4d,0x35,0x58,0x66,0x3a,0xb1,0x53,0x6c, + 0x29,0xa2,0x4f,0x44,0xb7,0x75,0xc1,0x42,0x41,0x4d,0x59,0x5e,0x3b,0x39,0x53,0x72, + 0x79,0x21,0xb1,0x45,0x4e,0x76,0x3a,0x62,0x54,0x65,0x5a,0x34,0x3b,0x5e,0xa5,0x7b, + 0x59,0x23,0x4b,0x45,0x79,0x76,0x50,0x42,0x57,0xaf,0x5a,0x2a,0x3b,0x62,0x53,0x21, + 0x29,0x25,0x3b,0x46,0x35,0x76,0x5b,0x42,0x5b,0x3d,0x5b,0x54,0x3b,0x23,0xa5,0x25, + 0xab,0x25,0xad,0x46,0x54,0x76,0x62,0x42,0x5d,0xaf,0x5c,0x36,0x3b,0xb0,0x53,0x2e, + 0x69,0x28,0xa1,0x46,0xaa,0x76,0x31,0x31,0x3f,0x55,0x5c,0xa6,0x3b,0x3b,0x53,0xbf, + 0x39,0x28,0x3b,0x46,0xba,0x76,0x68,0x22,0x5e,0x2d,0x59,0x4a,0x3c,0x34,0xa5,0xa6, + 0x59,0x30,0x37,0x45,0x47,0x76,0x75,0x42,0x62,0x6d,0x5d,0x72,0x3c,0x4a,0xa5,0xb8, + 0x6a,0x6a,0x4b,0x47,0x5c,0x76,0xa2,0x22,0x63,0x75,0x5e,0x34,0x3c,0x57,0x53,0xac, + 0xbb,0x2b,0x6b,0x47,0x7a,0x76,0x26,0x22,0x66,0x2d,0x5e,0x66,0x3c,0x66,0xa5,0xae, + 0xbb,0x2c,0x63,0x47,0xb2,0x76,0x2e,0x42,0x68,0xaf,0x5f,0x32,0x3c,0x77,0x53,0xb4, + 0xab,0x2d,0x7b,0x48,0x44,0x76,0xa8,0x22,0x6a,0x7d,0x5f,0x66,0x3c,0x4e,0x54,0x39, + 0x49,0xa4,0xc1,0x49,0x79,0x77,0x44,0x42,0x75,0xb7,0x62,0x52,0x3d,0x5b,0xa6,0x3d, + 0x59,0xa6,0x63,0x49,0xbb,0x77,0x4f,0x22,0x79,0x45,0x63,0x44,0x3d,0x73,0xa6,0x42, + 0x59,0xa7,0x67,0x4a,0x3f,0x77,0x56,0x42,0x78,0xa7,0x63,0x62,0x3d,0x3f,0x29,0x26, + 0x29,0xa8,0x5b,0x4a,0x6e,0x77,0x5d,0x22,0x7c,0x4d,0x63,0x2e,0x3d,0x2c,0x54,0x4a, + 0x39,0xa9,0x37,0x4a,0xa7,0x77,0x69,0xb4,0x7e,0x25,0x64,0xbe,0x3d,0xc0,0x54,0x50, + 0x69,0xa3,0x43,0x4b,0x36,0x77,0x73,0x22,0x21,0x6d,0x65,0x50,0x3e,0x37,0xa6,0x53, + 0x39,0xad,0x6b,0x6f,0x44,0x77,0xb6,0x62,0x72,0x55,0x65,0x5e,0x3e,0x64,0xa6,0x5e, + 0x29,0xae,0x77,0x4b,0xb6,0x77,0xa3,0x62,0x2a,0x7d,0x68,0x36,0x3e,0x30,0x54,0x68, + 0x59,0xb1,0x6f,0x4c,0x2b,0x77,0xb8,0x22,0x2d,0xa7,0x68,0x68,0x3e,0xa8,0xa6,0x6e, + 0x5f,0x25,0x68,0x28,0x3e,0xb2,0xa6,0x6d,0x69,0xb2,0xb5,0x4b,0x39,0x78,0x33,0x62, + 0xb2,0xbf,0x65,0x6c,0x3f,0x40,0x54,0x73,0x39,0xb3,0xc1,0x4d,0x73,0x78,0x3e,0x62, + 0xa6,0x35,0x69,0xac,0x3f,0x56,0x54,0x2e,0x52,0x59,0x44,0xc1,0x32,0x54,0xa6,0x7a, + 0x49,0xb5,0x63,0x4d,0x21,0x78,0x43,0x42,0xa8,0x7d,0x6a,0x7a,0x3f,0x61,0x54,0x76, + 0x59,0xb6,0x3f,0x4d,0x26,0x78,0x4e,0x22,0xaa,0x45,0x6a,0xbc,0x3f,0x71,0xa6,0x21, + 0xbb,0xb7,0x47,0x4e,0x35,0x78,0x53,0xb4,0xab,0x25,0x6b,0x58,0x3f,0x79,0xa6,0x23, + 0x79,0xb7,0xa9,0x4e,0x5b,0x78,0x59,0x62,0xad,0xa7,0x6b,0xa4,0x3f,0xa6,0x54,0x27, + 0x49,0xb8,0xbd,0x4e,0x76,0x78,0x63,0x42,0xaf,0x2d,0x6c,0x68,0x3f,0xb4,0xa6,0x30, + 0x79,0xba,0xb1,0x4e,0xae,0x78,0x70,0x22,0xa3,0x25,0x6d,0x3c,0x40,0x3b,0xa6,0xa5, + 0x59,0xbb,0xa9,0x4f,0x44,0x78,0x78,0x42,0xb4,0xbf,0x6d,0x68,0x40,0x37,0x54,0xa7, + 0xab,0xbc,0xa1,0x4f,0x6c,0x78,0xa1,0x62,0xb7,0x5d,0x6e,0x36,0x40,0x50,0x54,0xac, + 0x79,0xbd,0x57,0x4f,0x77,0x78,0x24,0x22,0xb8,0x6d,0x6e,0x6a,0x40,0x31,0x31,0x3d, + 0x59,0xbe,0x3f,0x4f,0xa7,0x78,0xaa,0x42,0xbc,0xbf,0x6f,0x78,0x40,0x27,0xa6,0xb8, + 0xbb,0xc0,0x2f,0x50,0x2b,0x78,0xbc,0x62,0xc1,0x45,0x70,0x26,0xad,0x78,0xbe,0xb4, + 0xbb,0x6d,0x74,0xac,0x40,0x33,0xa7,0x50,0x49,0xc2,0xad,0x4f,0x42,0x79,0x36,0x63, + 0x33,0x3d,0x71,0x4c,0x41,0x40,0x55,0x33,0xac,0x31,0x5f,0x51,0x58,0x79,0x3e,0x23, + 0x34,0x5d,0x71,0xb6,0x41,0xbf,0x54,0xac,0xbc,0x33,0x73,0x51,0x22,0x79,0x45,0x23, + 0x31,0xb7,0x72,0x44,0x41,0x50,0x55,0x3b,0xac,0x33,0xa5,0x51,0x2f,0x79,0x4b,0x43, + 0x37,0xbf,0x72,0xb0,0x41,0x25,0x56,0xa1,0x5a,0x35,0x3b,0x51,0xc0,0x79,0x51,0x63, + 0x39,0x35,0x73,0x46,0x41,0x75,0xa7,0x42,0xbc,0x36,0x53,0x52,0x60,0x79,0x5d,0x63, + 0x3c,0x5d,0x74,0x76,0x41,0xb5,0x55,0x3a,0x37,0x47,0xb1,0x51,0x33,0x79,0x75,0x23, + 0x42,0x7d,0x75,0xa8,0x42,0x49,0x55,0x5a,0x5a,0x3b,0x2b,0x53,0x29,0x79,0x29,0xb5, + 0x47,0x5d,0x76,0x24,0x42,0x6a,0xa7,0x5f,0x5a,0x3d,0x5f,0x54,0x3a,0x79,0xa3,0x23, + 0x4b,0x45,0x77,0x28,0x42,0x28,0xa7,0x66,0x5a,0x3e,0x27,0x54,0x65,0x79,0xb1,0x23, + 0x4d,0x35,0x78,0x34,0x42,0xa7,0xa7,0x6a,0x6a,0x3f,0x73,0x54,0x27,0x79,0xba,0xb5, + 0x4f,0x3d,0x78,0x68,0x42,0xc1,0x55,0x6f,0x2a,0x40,0x2b,0x53,0x4f,0x7a,0x70,0xb5, + 0x42,0x55,0x79,0x2a,0x43,0x3b,0xa7,0x73,0x4a,0x43,0xbd,0x55,0x28,0x7a,0x42,0x63, + 0x55,0x7d,0x7a,0x7a,0x43,0x55,0x55,0x23,0x2a,0x42,0xc1,0x55,0x7c,0x7a,0x45,0x43, + 0x5a,0xa7,0x7b,0x5e,0x43,0x7a,0xa7,0x24,0x6a,0x43,0xad,0x56,0xa2,0x7a,0x5f,0x63, + 0x5c,0x6d,0x7c,0x24,0x43,0x38,0xa7,0xc2,0x5a,0x43,0x43,0x57,0x5f,0x7a,0xbd,0x73, + 0x21,0x58,0xbf,0x33,0x4a,0x7a,0x79,0x23,0x62,0x25,0x7d,0x78,0x44,0x4e,0x55,0xa9, + 0x2a,0x4a,0xb1,0x57,0x2d,0x7a,0x29,0x43,0x68,0xa7,0x7e,0x2e,0x44,0x5c,0x55,0xb9, + 0x3a,0x4e,0x63,0x58,0x5e,0x7a,0xa8,0x43,0x6c,0x7d,0xa2,0x5e,0x44,0xae,0xa7,0xc0, + 0x3a,0x50,0x47,0x58,0x29,0x7a,0xb3,0xb5,0x6e,0xaf,0xa2,0x52,0x44,0xa7,0x55,0xbf, + 0x7a,0x49,0xad,0x59,0x45,0x7b,0x35,0xb5,0x71,0x4d,0x21,0x40,0x45,0x39,0x56,0x37, + 0xac,0x52,0x5f,0x59,0x66,0x7b,0x39,0x63,0x74,0x25,0x22,0x34,0x45,0x5a,0x56,0x39, + 0x7a,0x53,0xb1,0x59,0xa3,0x7b,0x49,0x23,0x76,0xb7,0x22,0x26,0x45,0x45,0xa7,0xa1, + 0x3a,0x54,0x27,0x59,0xba,0x7b,0x50,0x63,0x76,0x25,0x22,0xbc,0x45,0x70,0x56,0x41, + 0x4a,0x54,0xc1,0x5a,0x33,0x7b,0xa4,0xb5,0x29,0x25,0x27,0x5a,0x46,0x7c,0x56,0x64, + 0x3a,0x5d,0xa9,0x5b,0x31,0x31,0x59,0x43,0x2b,0x75,0x27,0xa2,0x46,0x27,0xa8,0x68, + 0x7a,0x5e,0xb1,0x5c,0x6a,0x7b,0xb2,0x23,0x2d,0x25,0x28,0xaf,0xb2,0xa4,0xa8,0x6a, + 0x2a,0x5f,0x63,0x5c,0x26,0x7b,0xb8,0x43,0x2e,0x65,0x28,0x6a,0x46,0xb3,0xa8,0x6d, + 0x2a,0x60,0x3b,0x5b,0x52,0x7c,0x3b,0x43,0xa5,0xb7,0x29,0x30,0x47,0x52,0x56,0x7a, + 0x7a,0x63,0x6f,0x5d,0x7c,0x7c,0x4e,0xb5,0xa8,0xa7,0x2a,0x6e,0x47,0x5f,0xa8,0x7c, + 0xbc,0x64,0x4b,0x5d,0xb5,0x7c,0x4c,0x43,0xab,0xaf,0x2b,0x62,0x47,0x7b,0xa8,0x23, + 0xbc,0x66,0x5b,0x5e,0x58,0x7c,0x5d,0x63,0xae,0x45,0x2b,0xa4,0x47,0x2b,0x56,0x27, + 0xac,0x66,0xa5,0x5e,0x6a,0x7c,0x64,0x23,0xaf,0x2d,0x2c,0x44,0x47,0xa9,0xa8,0x7a, + 0x29,0xa1,0xb5,0x5d,0x3e,0x7c,0xb8,0x63,0xb2,0x7d,0x29,0x3a,0x48,0x34,0x56,0xa4, + 0x3a,0x69,0xa1,0x5f,0x3f,0x7c,0x75,0x63,0xb3,0xbf,0x2d,0x5e,0x48,0x3d,0xa8,0xa7, + 0x7a,0x6a,0x5b,0x5f,0x61,0x7c,0xa1,0x63,0xb6,0xaf,0x2d,0xc0,0x48,0x53,0x56,0xab, + 0xac,0x6b,0x53,0x5f,0x73,0x7c,0x23,0x63,0xb8,0xa7,0x2e,0x72,0x48,0x63,0x56,0xaf, + 0xac,0x6c,0x53,0x60,0x23,0x5a,0x4b,0xb5,0xba,0x3d,0x2e,0xb6,0x48,0x73,0xa8,0xb2, + 0x7a,0x6d,0x37,0x5f,0xbd,0x7c,0xa4,0x23,0xbb,0x2d,0x2f,0x50,0x48,0x79,0x56,0xb6, + 0x7a,0x6e,0x53,0x60,0x57,0x7c,0xab,0xb5,0xbe,0x4d,0x2f,0xac,0x48,0xa4,0xa8,0xbb, + 0xac,0x6f,0x53,0x60,0x7c,0x7c,0xba,0x43,0xc1,0xaf,0x2e,0x50,0x50,0xbc,0x56,0xbe, + 0xba,0x28,0x2b,0x60,0xb8,0x7c,0x74,0xb6,0x31,0xa7,0xa3,0xb4,0x49,0x43,0x57,0x35, + 0x4a,0x72,0x2f,0x61,0x6e,0x7d,0x42,0x24,0x35,0xbf,0xa4,0x48,0x49,0x66,0xa9,0x3e, + 0xbc,0x74,0x74,0x25,0x4e,0x33,0x70,0xb9,0x48,0x3d,0xa4,0xac,0x49,0x6a,0xa9,0x46, + 0x5a,0x76,0x6f,0x62,0x62,0x7d,0x5e,0x24,0x3d,0x55,0xa6,0x38,0x49,0xa6,0x57,0x4e, + 0x4a,0x78,0x5f,0x61,0x34,0x7d,0x73,0x64,0x42,0x45,0xa7,0x5a,0x4a,0x3d,0x57,0x55, + 0x4a,0x79,0xb9,0x63,0x4f,0x7d,0x7a,0x44,0x43,0x35,0xa7,0x2a,0x4a,0x48,0x57,0x58, + 0x2a,0x7a,0xbd,0x63,0x73,0x7d,0x23,0x64,0x45,0x5d,0xa8,0x52,0x4a,0x56,0xa9,0x5b, + 0x4a,0x7b,0x7b,0x63,0x7d,0x7d,0x26,0x64,0x4a,0x6d,0xa9,0x62,0x4a,0x23,0xa9,0x66, + 0x2a,0x7e,0x6b,0x64,0x6d,0x7d,0xba,0xb6,0x4e,0x2d,0xaa,0x6c,0x4a,0xaf,0x57,0x6b, + 0x4a,0xa2,0x67,0x64,0xb1,0x7d,0xbf,0x64,0x50,0x45,0xaa,0xba,0x4a,0xbf,0x57,0x51, + 0x4a,0x21,0x6f,0x65,0x36,0x7e,0x69,0x24,0x42,0x7d,0xab,0x28,0x4b,0x4c,0xa9,0x79, + 0x2a,0x23,0x3b,0x65,0x71,0x7e,0x41,0xb6,0x51,0x31,0x31,0xc0,0x4b,0x5b,0xa9,0x7a, + 0x2a,0x23,0xb1,0x65,0x28,0x7e,0x48,0xb6,0x57,0x45,0xac,0x7c,0x4b,0x63,0x57,0x7e, + 0x4a,0x24,0x5f,0x65,0xad,0x7e,0x5c,0x64,0x5c,0x35,0xad,0xbc,0x4b,0xa3,0x57,0x2a, + 0xbc,0x27,0x77,0x66,0x24,0x7e,0x66,0x44,0x5e,0xb7,0xae,0x70,0x4b,0xb4,0x57,0x2d, + 0x6a,0x28,0x4b,0x66,0xb2,0x7e,0x6b,0xb6,0x5f,0xb7,0xae,0xac,0x4b,0xbb,0xa9,0x2f, + 0xbc,0x28,0xb1,0x65,0x37,0x7e,0x77,0x44,0x62,0x25,0xaf,0x70,0x4c,0x42,0x57,0xa7, + 0x6a,0x2a,0x47,0x67,0x58,0x7e,0x7b,0x44,0x63,0x7d,0xaf,0x26,0x4c,0x48,0x57,0xa8, + 0xbc,0x2a,0x7b,0x67,0x75,0x7e,0x21,0xb6,0x65,0xbf,0xb0,0x4c,0x4c,0x58,0x57,0xad, + 0x4a,0x2b,0xa5,0x67,0xb7,0x7e,0xa7,0xb6,0x69,0x4d,0xb1,0x54,0x4c,0x7c,0x57,0xb5, + 0xbc,0x2d,0xc1,0x68,0x51,0x7e,0xad,0x44,0x6c,0x55,0xb2,0x32,0x4c,0xa8,0x57,0xba, + 0x4a,0x2f,0x4b,0x68,0xa2,0x7e,0xb7,0x64,0x6e,0x45,0xb2,0x78,0x4c,0xb4,0x57,0xbf, + 0x7a,0x2f,0x23,0x68,0xa4,0x7e,0xa1,0x24,0xa2,0x45,0xb2,0xa6,0x4c,0xbb,0x57,0xa5, + 0x2a,0xa3,0x23,0x69,0x3a,0xa1,0x35,0xb6,0x71,0xa7,0xb3,0x3e,0x4d,0x35,0x58,0x33, + 0x5a,0xa3,0x5b,0x69,0x35,0xa1,0x3c,0x24,0x72,0x2d,0xb3,0x7c,0x4d,0x43,0x58,0x35, + 0x4a,0xa4,0x73,0x69,0x78,0xa1,0x3d,0x24,0x75,0x65,0xb3,0xc0,0x4d,0x5e,0x58,0x3d, + 0x3a,0xa6,0x4f,0x69,0xb9,0xa1,0x4f,0x44,0xa1,0x6d,0xb6,0x2a,0x4d,0xbb,0x58,0x32, + 0x4a,0xab,0x53,0x6c,0xae,0xa1,0x31,0xb6,0x21,0x65,0xb7,0x26,0x4e,0x44,0x58,0x66, + 0xbc,0xac,0x3f,0x6b,0x50,0xa1,0x22,0x44,0x22,0x5d,0xb7,0x56,0x4e,0x51,0xaa,0x58, + 0xbc,0xac,0xbd,0x6b,0x77,0xa1,0x23,0x44,0x2f,0x21,0x25,0x3a,0xc2,0x31,0x28,0x64, + 0x26,0xb7,0xb8,0x7a,0x4e,0x59,0xaa,0x5b,0x3a,0xad,0xa9,0x6b,0xb5,0xa1,0xa5,0x64, + 0x29,0x6d,0xb9,0x28,0x4e,0x68,0xaa,0x60,0x5a,0xaf,0xad,0x6c,0x55,0xa1,0xad,0x64, + 0x2c,0x45,0xba,0x3a,0x4e,0xa3,0xaa,0x68,0x6a,0xb0,0xa5,0x6c,0x6b,0xa1,0xb4,0x24, + 0x2d,0xbf,0xba,0x36,0x4e,0xaf,0xaa,0x6b,0x6a,0xb2,0xa5,0x6c,0xa9,0xa1,0xbe,0x64, + 0x2f,0xbf,0xba,0xbe,0x4e,0x3e,0x58,0x74,0x6a,0xb3,0xbd,0x6d,0xb8,0xa2,0x4f,0x64, + 0xaa,0xaf,0xbd,0x34,0x4f,0x75,0x58,0x22,0x6a,0xb7,0x63,0x6e,0x43,0xa2,0x56,0x64, + 0xac,0x3d,0xbd,0x6c,0x4f,0x23,0xaa,0x26,0x4a,0xb8,0xa5,0x6e,0x5b,0xa2,0x5c,0x64, + 0xa9,0x3d,0x30,0x4a,0x4f,0xaa,0x58,0x2a,0xbc,0xb9,0x73,0x6e,0x25,0xa2,0x68,0x44, + 0xb0,0xb7,0xbe,0x6c,0x4f,0xb3,0x58,0x2d,0x2a,0xba,0x53,0x6e,0xb2,0xa2,0x31,0x31, + 0x40,0x55,0xbe,0xb0,0x4f,0xbe,0xaa,0x30,0x4a,0xba,0xb1,0x6e,0xbf,0xa2,0x70,0x64, + 0xa3,0x6d,0xbf,0x42,0x50,0x2c,0x2e,0x73,0x2a,0xbc,0x37,0x6f,0x5d,0xa2,0xa2,0x24, + 0xb7,0x25,0xc0,0x56,0x50,0x5b,0x58,0xaf,0x6a,0xbd,0xc1,0x6f,0xa3,0xa2,0x29,0x64, + 0xb9,0x65,0xc0,0xa2,0x50,0x67,0x58,0xb0,0x5a,0xbe,0x2f,0x6f,0xb5,0xa2,0x2e,0x24, + 0xbc,0x5d,0xc1,0x6a,0x50,0x21,0x58,0xa8,0xb8,0x77,0x4e,0x23,0x2a,0x79,0x4a,0x3f, + 0x7e,0xa5,0x77,0x63,0xb4,0xb8,0x56,0x56,0x50,0xbb,0xa9,0x45,0xc1,0x3f,0x53,0x5a, + 0x3a,0x4d,0x53,0x56,0x2d,0x73,0x63,0x5a,0xbe,0x2c,0x71,0xa5,0xa9,0xa7,0x4b,0x50, + 0x4a,0x48,0xb0,0x7d,0x76,0x60,0x7b,0x3a,0xb1,0x3b,0x6c,0xbb,0xa1,0x31,0x44,0xa3, + 0x65,0xbc,0xa8,0x4f,0x27,0x58,0xa7,0x7a,0xbb,0x23,0x6f,0x65,0xa2,0x7b,0x44,0xbc, + 0x25,0xbd,0x32,0x51,0x53,0x59,0x70,0xac,0xb4,0xb5,0x72,0x3d,0x21,0x69,0x45,0x39, + 0x56,0x35,0x22,0x52,0xb7,0x59,0x67,0x3b,0x35,0x23,0x76,0x79,0x22,0xa1,0x25,0x68, + 0xa8,0x40,0x62,0x53,0x46,0x5a,0x58,0x3b,0x5b,0x63,0x7c,0x31,0x23,0xb0,0x25,0x71, + 0x36,0x49,0x4e,0x57,0x55,0x5a,0x2d,0x7b,0x6a,0x4b,0xa1,0xa7,0x24,0xb1,0x25,0xa4, + 0xb2,0x25,0xb4,0x5a,0x3b,0x5b,0x5b,0x5b,0xa2,0xbd,0x23,0x3d,0x26,0x5d,0x26,0xaf, + 0x26,0x6e,0x62,0x60,0x79,0x5c,0xb4,0xad,0xb3,0xc2,0xab,0x31,0x31,0x39,0x6f,0x24, + 0xa8,0x76,0x7a,0x61,0x3c,0x5d,0x25,0xae,0x46,0x2b,0xa8,0x6b,0x2a,0x62,0x27,0x65, + 0x76,0x7e,0xac,0x63,0x27,0x5e,0xb3,0x3c,0x63,0xbe,0x28,0x61,0x2c,0xb9,0x47,0xa6, + 0xa8,0xa8,0x4a,0x6a,0x6b,0x5f,0x6e,0x5c,0x73,0x6b,0xb8,0x57,0x2e,0x39,0xc1,0x79, + 0x56,0xae,0x66,0x6c,0x69,0x5f,0xb1,0x5c,0x2e,0x33,0xb7,0x73,0x30,0x4b,0x48,0xaf, + 0xb8,0xc0,0x2e,0x70,0x2f,0x60,0x28,0x5d,0x39,0x5c,0x33,0x45,0xa3,0xb2,0x49,0x4b, + 0x27,0x32,0x32,0x74,0xb5,0x61,0x35,0x5d,0x44,0x6c,0x35,0xa3,0xa4,0x7d,0x49,0x53, + 0x67,0x46,0x4a,0x76,0xb8,0x62,0x29,0x3d,0x7a,0xae,0x44,0x4d,0xa7,0x58,0x4a,0x51, + 0x37,0x61,0x26,0x7d,0x6c,0x64,0x33,0x5d,0xa5,0xb6,0x49,0x6d,0xa9,0x43,0x4a,0x7d, + 0x27,0x63,0x2e,0x7d,0x2a,0x64,0x35,0x30,0x58,0x4c,0x4b,0x63,0xa9,0x21,0x4a,0x27, + 0x57,0x66,0xc0,0x7e,0xbd,0x64,0x34,0x7d,0xb5,0xa2,0xa8,0x7d,0xaa,0x2e,0x2a,0xad, + 0x57,0x77,0x32,0xa1,0x32,0x65,0x42,0x3e,0x3d,0xbe,0x51,0x58,0xbd,0x65,0x4b,0x53, + 0xa2,0x25,0xa4,0x24,0xa5,0x65,0x7d,0x3e,0x57,0x2c,0x5a,0x3d,0xad,0x6a,0x2b,0xa2, + 0xa9,0x28,0x3a,0x26,0xa7,0x66,0x66,0x7e,0x64,0xbe,0x62,0x69,0xaf,0x74,0x4c,0x3e, + 0xb9,0xa9,0xac,0x29,0x35,0x67,0xa4,0xb0,0x27,0xbe,0x67,0x5d,0xb0,0x27,0x4c,0x6a, + 0xb9,0xb2,0xa4,0x2c,0xb5,0x67,0xc2,0x3e,0x24,0x7c,0x6a,0x69,0xb1,0x44,0x2c,0x78, + 0x77,0xb8,0xc0,0x2e,0x39,0x68,0xb0,0x5e,0xc2,0x5c,0x6d,0x3b,0xb3,0x34,0x2d,0x36, + 0x38,0x35,0x46,0xa4,0x5c,0x69,0x34,0xb1,0x41,0x54,0x76,0x69,0xb4,0x54,0x4d,0x59, + 0xba,0x39,0x28,0xb8,0x72,0x69,0xc2,0xa1,0x4c,0x3c,0x7c,0x25,0x46,0x33,0x70,0xa3, + 0x4c,0xb6,0x79,0x79,0xb6,0x3c,0x6f,0xa1,0xba,0x4e,0xb8,0xaa,0x7a,0x6a,0xb8,0xa1, + 0x6f,0x4c,0xa2,0x55,0xb6,0x34,0x2e,0x4f,0x28,0x4a,0x4a,0xab,0x5b,0x6b,0x3b,0x5f, + 0x73,0xb6,0x22,0x75,0xb7,0x75,0x2e,0x44,0xba,0x51,0x36,0xad,0xb2,0x6b,0xa3,0xa1, + 0xac,0xa6,0x2b,0x6d,0xb9,0x7e,0x2e,0x25,0xaa,0x61,0x30,0xb7,0x77,0x6c,0xae,0xad, + 0x53,0x3c,0xa4,0x4d,0xbb,0x63,0x4f,0x40,0x58,0x72,0x72,0xb5,0x49,0xc0,0x37,0x70, + 0x52,0x28,0xad,0x59,0xbc,0x3e,0xc1,0x24,0x68,0xa1,0x76,0xb8,0xaa,0x6e,0x38,0x50, + 0x5f,0x2c,0xad,0x6d,0xbe,0x3f,0xc1,0x7a,0x38,0xad,0xb4,0xbe,0x68,0x6f,0xab,0x40, + 0x2e,0x64,0xb8,0x55,0xc1,0x54,0x30,0xb7,0x48,0xbb,0xbe,0xb7,0x32,0x72,0x29,0x21, + 0x68,0xbf,0x40,0x40,0x34,0xbe,0x51,0xac,0x39,0x56,0x23,0x39,0x24,0x73,0x27,0x61, + 0x21,0x31,0x32,0x28,0x36,0x40,0xc1,0x27,0x39,0x5a,0x34,0xb7,0x52,0xc0,0x32,0xb4, + 0x40,0x5d,0x51,0x56,0x3b,0x4c,0xa5,0xa2,0x49,0x26,0x4f,0x46,0x6f,0x76,0x68,0xb4, + 0x53,0x48,0xae,0xb0,0x3b,0x5a,0xa5,0xb2,0xbb,0x30,0x73,0x4a,0xb7,0x77,0x35,0x22, + 0x28,0x65,0x65,0x78,0xbd,0xaa,0xa6,0x75,0xa2,0x22,0x48,0xb7,0xaa,0x79,0x68,0x23, + 0x33,0x68,0xab,0x5c,0x42,0x44,0xa7,0x6c,0x5a,0x3f,0x2f,0x54,0x2f,0x79,0xbe,0x63, + 0x4f,0xb7,0x78,0x7a,0x42,0xb5,0xa7,0x51,0xac,0x41,0x73,0x55,0x3b,0x7a,0x3f,0x23, + 0x55,0x35,0x79,0xbc,0x43,0x58,0x55,0x7c,0x4a,0x43,0x77,0x55,0x6a,0x7a,0x4a,0xb5, + 0x5b,0x6d,0x7a,0xb2,0x43,0x6d,0x55,0x2d,0xbc,0x47,0x2f,0x56,0x2a,0x7a,0x65,0x43, + 0x53,0x70,0xae,0x5c,0x43,0xb3,0x55,0x2b,0x6a,0x42,0x47,0x57,0x52,0x7a,0xc1,0xb5, + 0x53,0x78,0xab,0x6e,0x44,0xc2,0xa7,0x74,0x2a,0x49,0x3b,0x57,0xb3,0x7a,0x26,0xb5, + 0x6b,0x55,0xa2,0x3e,0x44,0xb2,0x55,0xc2,0x3a,0x4a,0x77,0x59,0x76,0x7b,0x43,0x43, + 0x7a,0x45,0x28,0x6a,0xbc,0x45,0xc1,0x24,0x2a,0x66,0x6f,0x5d,0x64,0x7c,0xa1,0xb5, + 0xb7,0x4d,0x2e,0x4c,0x48,0x58,0xa8,0xad,0x4a,0x6b,0x27,0x5f,0x28,0x7d,0x4a,0x64, + 0x33,0x28,0xab,0x28,0xbd,0x44,0xa9,0x56,0xa2,0x25,0xbd,0x63,0xa1,0x7e,0x67,0x64, + 0x5e,0xa7,0xac,0xae,0x4c,0x6a,0x57,0xb4,0xbc,0x2e,0x77,0x68,0x6c,0x7e,0x71,0x44, + 0x78,0x35,0xb8,0x28,0x4e,0x47,0xc1,0x74,0x4a,0xb9,0x77,0x6e,0xad,0x31,0x28,0x51, + 0x48,0x32,0x36,0xa5,0x52,0x6a,0x39,0x5f,0x63,0x3c,0x21,0x73,0xb8,0x41,0x2e,0x75, + 0x48,0x6a,0x36,0xb3,0x52,0x6d,0x79,0x6d,0x60,0xc2,0x44,0xc1,0x38,0xc2,0x71,0x2e, + 0x53,0x61,0x21,0xb6,0x2d,0x31,0xbb,0x31,0x4f,0x31,0x3c,0x71,0x34,0xb3,0x32,0x4d, + 0x31,0x60,0x31,0x3e,0xa3,0x34,0xbb,0x32,0x3f,0x31,0x58,0x71,0x3b,0xb3,0x33,0xbf, + 0x31,0xaa,0x31,0x4c,0xa3,0x38,0x69,0x32,0xc1,0x31,0x74,0x71,0x42,0xb3,0x35,0x2d, + 0x32,0x50,0x31,0x5a,0xa3,0x3b,0xbb,0x33,0xb1,0x31,0x30,0x71,0x49,0xb3,0x37,0x6d, + 0x32,0x28,0x31,0x68,0xa3,0x3f,0x69,0x34,0x2f,0x31,0xbe,0x71,0x50,0xb3,0x39,0x4d, + 0x33,0x40,0x31,0x76,0xa3,0x42,0xbb,0x35,0xa1,0x32,0x48,0x71,0x57,0xb3,0x3a,0xbf, + 0x33,0x78,0x31,0x24,0xa3,0x46,0x69,0x36,0x6f,0x32,0x64,0x71,0x5e,0xb3,0x3c,0x2d, + 0x33,0xc2,0x31,0xa4,0xa3,0x49,0xbb,0x37,0x5f,0x32,0xa2,0x71,0x65,0xb3,0x3e,0x6d, + 0x34,0x68,0x31,0xb2,0xa3,0x4d,0x69,0x38,0x4f,0x32,0xae,0x71,0x6c,0xb3,0x40,0x4d, + 0x34,0xb2,0x31,0xc0,0xa3,0x31,0x31,0x38,0xc1,0x33,0x34,0x71,0x72,0xb3,0x41,0x2d, + 0x35,0x50,0x32,0x3a,0xa3,0x53,0xbb,0x39,0xb1,0x33,0x50,0x71,0x79,0xb3,0x43,0x6d, + 0x35,0x28,0x32,0x48,0xa3,0x57,0x69,0x3a,0x2f,0x33,0x6c,0x71,0xa2,0xb3,0x45,0x4d, + 0x36,0x40,0x32,0x56,0xa3,0x5a,0xbb,0x3b,0xa1,0x33,0x28,0x71,0x27,0xb3,0x46,0xbf, + 0x36,0x78,0x32,0x64,0xa3,0x5e,0x69,0x3c,0x6f,0x33,0xb6,0x71,0x2e,0xb3,0x48,0x2d, + 0x36,0xc2,0x32,0x72,0xa3,0x61,0xbb,0x3d,0x5f,0x34,0x40,0x71,0xa7,0xb3,0x4a,0x6d, + 0x37,0x68,0x32,0xa2,0xa3,0x65,0x69,0x3e,0x4f,0x34,0x5c,0x71,0xae,0xb3,0x4c,0x4d, + 0x37,0xb2,0x32,0x2e,0xa3,0x68,0xbb,0x3f,0x3f,0x34,0x78,0x71,0xb5,0xb3,0x4d,0xbf, + 0x38,0x58,0x32,0xae,0xa3,0x6c,0x69,0x3f,0xc1,0x34,0xa6,0x71,0xbc,0xb3,0x4f,0x2d, + 0x38,0x30,0x32,0xbc,0xa3,0x6f,0xbb,0x40,0xb1,0x34,0xc2,0x72,0x31,0xb3,0x51,0x6d, + 0x39,0x48,0x33,0x38,0xa3,0x73,0x69,0x41,0x2f,0x35,0x4c,0x72,0x38,0xb3,0x53,0x4d, + 0x39,0xa2,0x33,0x46,0xa3,0x76,0xbb,0x42,0xa1,0x35,0x68,0x72,0x3f,0xb3,0x54,0xbf, + 0x3a,0x38,0x33,0x54,0xa3,0x7a,0x69,0x43,0x6f,0x35,0x24,0x72,0x46,0xb3,0x56,0x2d, + 0x3a,0x70,0x33,0x62,0xa3,0x7d,0xbb,0x44,0x5f,0x35,0xb2,0x72,0x4d,0xb3,0x58,0x6d, + 0x3a,0xba,0x33,0x70,0xa3,0x21,0x69,0x45,0x4f,0x36,0x3c,0x72,0x54,0xb3,0x5a,0x4d, + 0x3b,0x60,0x33,0x7e,0xa3,0x24,0xbb,0x46,0x3f,0x36,0x58,0x72,0x5b,0xb3,0x5b,0xbf, + 0x3b,0xaa,0x33,0x2c,0xa3,0x28,0x69,0x46,0xc1,0x36,0x74,0x72,0x62,0xb3,0x5d,0x2d, + 0x3c,0x50,0x33,0xac,0xa3,0x2b,0xbb,0x47,0xb1,0x36,0x30,0x72,0x69,0xb3,0x5f,0x6d, + 0x3c,0x28,0x33,0xba,0xa3,0xb8,0x36,0x51,0xa2,0xb3,0x37,0xbc,0xa3,0x2f,0xbb,0x48, + 0xb1,0x36,0xc2,0x72,0x71,0xb3,0x61,0x6d,0x3d,0x48,0x34,0x38,0xa3,0xa5,0x69,0x49, + 0x2f,0x37,0x4c,0x72,0x78,0xb3,0x63,0x4d,0x3d,0xa2,0x34,0x46,0xa3,0xa8,0xbb,0x4a, + 0xa1,0x37,0x68,0x72,0xa1,0xb3,0x64,0xbf,0x3e,0x38,0x34,0x54,0xa3,0xac,0x69,0x4b, + 0x6f,0x37,0x24,0x72,0x26,0xb3,0x66,0x2d,0x3e,0x70,0x34,0x62,0xa3,0xaf,0xbb,0x4c, + 0x5f,0x37,0xb2,0x72,0x2d,0xb3,0x68,0x6d,0x3e,0xba,0x34,0x70,0xa3,0xb3,0x69,0x4d, + 0x4f,0x38,0x3c,0x72,0xa6,0xb3,0x6a,0x4d,0x3f,0x60,0x34,0x7e,0xa3,0xb6,0xbb,0x4e, + 0x3f,0x38,0x58,0x72,0xad,0xb8,0x69,0x4e,0x6f,0x38,0x64,0x72,0xb0,0xb3,0x6c,0x2d, + 0x3f,0xc2,0x34,0xa4,0xa3,0xbb,0xbb,0x4f,0x5f,0x38,0xa2,0x72,0xb7,0xb3,0x6e,0x6d, + 0x40,0x68,0x34,0xb2,0xa3,0xbf,0x69,0x50,0x4f,0x38,0xae,0x71,0x31,0x31,0x6f,0xbf, + 0x40,0xaa,0x34,0xbe,0xa3,0xc2,0x69,0x50,0xc1,0x31,0x34,0x73,0x32,0xb3,0x71,0x2d, + 0x41,0x50,0x35,0x3a,0xa4,0x33,0xbb,0x51,0xb1,0x39,0x50,0x73,0x39,0xb3,0x73,0x6d, + 0x41,0x28,0x35,0x48,0xa4,0x37,0x69,0x52,0x2f,0x39,0x6c,0x73,0x40,0xb3,0x75,0x4d, + 0x42,0x40,0x35,0x56,0xa4,0x3a,0xbb,0x53,0xa1,0x39,0x28,0x73,0x47,0xb3,0x76,0xbf, + 0x42,0x78,0x35,0x64,0xa4,0x3e,0x69,0x54,0x6f,0x39,0xb6,0x73,0x4e,0xb3,0x78,0x2d, + 0x42,0xc2,0x35,0x72,0xa4,0x41,0xbb,0x55,0x5f,0x3a,0x40,0x73,0x55,0xb3,0x7a,0x6d, + 0x43,0x68,0x35,0xa2,0xa4,0x45,0x69,0x56,0x4f,0x3a,0x5c,0x73,0x5c,0xb3,0x7c,0x4d, + 0x43,0xb2,0x35,0x2e,0xa4,0x48,0xbb,0x57,0x3f,0x3a,0x78,0x73,0x63,0xb3,0x7d,0xbf, + 0x44,0x58,0x35,0xae,0xa4,0x4c,0x69,0x57,0xc1,0x3a,0xa6,0x73,0x6a,0xb3,0xa1,0x2d, + 0x44,0x30,0x35,0xbc,0xa4,0x4f,0xbb,0x58,0xb1,0x3a,0xc2,0x73,0x71,0xb3,0x21,0x6d, + 0x45,0x48,0x36,0x38,0xa4,0x53,0x69,0x59,0x2f,0x3b,0x4c,0x73,0x78,0xb3,0x23,0x4d, + 0x45,0xa2,0x36,0x46,0xa4,0x56,0xbb,0x5a,0xa1,0x3b,0x68,0x73,0xa1,0xb3,0x24,0xbf, + 0x46,0x38,0x36,0x54,0xa4,0x5a,0x69,0x5b,0x6f,0x3b,0x24,0x73,0x26,0xb3,0x26,0x2d, + 0x46,0x70,0x36,0x62,0xa4,0x5d,0xbb,0x5c,0x5f,0x3b,0xb2,0x73,0x2d,0xb3,0x28,0x6d, + 0x46,0xba,0x36,0x70,0xa4,0x61,0x69,0x5d,0x4f,0x3c,0x3c,0x73,0xa6,0xb3,0x2a,0x4d, + 0x47,0x60,0x36,0x7e,0xa4,0x64,0xbb,0x5e,0x3f,0x3c,0x58,0x73,0xad,0xb3,0x2b,0xbf, + 0x47,0xaa,0x36,0x2c,0xa4,0x68,0x69,0x5e,0xc1,0x3c,0x74,0x73,0xb4,0xb3,0x2d,0x2d, + 0x48,0x50,0x36,0xac,0xa4,0x6b,0xbb,0x5f,0xb1,0x3c,0x30,0x74,0xad,0x3f,0x72,0x50, + 0xbd,0xb2,0x36,0xb6,0xa4,0x6e,0x69,0x60,0x6f,0x3c,0xb6,0x73,0xc0,0xb3,0x30,0x2d, + 0x48,0xc2,0x37,0x32,0xa4,0x71,0xbb,0x61,0x5f,0x3d,0x40,0x74,0x35,0xb3,0xa4,0x6d, + 0x49,0x68,0x37,0x40,0xa4,0x75,0x69,0x62,0x4f,0x3d,0x5c,0x74,0x3c,0xb3,0xa6,0x4d, + 0x49,0xb2,0x37,0x4e,0xa4,0x78,0xbb,0x63,0x3f,0x3d,0x78,0x74,0x43,0xb3,0xa7,0xbf, + 0x4a,0x58,0x37,0x5c,0xa4,0x7c,0x69,0x63,0xc1,0x3d,0xa6,0x74,0x4a,0xb3,0xa9,0x2d, + 0x4a,0x30,0x37,0x6a,0xa4,0xa1,0xbb,0x64,0xb1,0x3d,0xc2,0x74,0x51,0xb3,0xab,0x6d, + 0x4b,0x48,0x37,0x78,0xa4,0x23,0x69,0x65,0x2f,0x3e,0x4c,0x74,0x58,0xb3,0xad,0x4d, + 0x4b,0xa2,0x37,0x26,0xa4,0x26,0xbb,0x66,0xa1,0x3e,0x68,0x74,0x5f,0xb3,0xae,0xbf, + 0x4c,0x38,0x37,0xa6,0xa4,0x2a,0x69,0x67,0x6f,0x3e,0x24,0x74,0x66,0xb3,0xb0,0x2d, + 0x41,0x31,0x33,0xb2,0xa4,0x2d,0x69,0x68,0x4f,0x3e,0xae,0x74,0x6c,0xb3,0xb2,0x4d, + 0x4c,0xb2,0x37,0xc0,0xa4,0x30,0xbb,0x69,0x3f,0x3f,0x38,0x74,0x73,0xb3,0xb3,0xbf, + 0x4d,0x58,0x38,0x3c,0xa4,0xa6,0x69,0x69,0xc1,0x3f,0x54,0x74,0x7a,0xb3,0xb5,0x2d, + 0x4d,0x30,0x38,0x4a,0xa4,0xa9,0xbb,0x6a,0xb1,0x3f,0x70,0x74,0x21,0xb3,0xb7,0x6d, + 0x4e,0x48,0x38,0x58,0xa4,0xad,0x69,0x6b,0x2f,0x3f,0x2c,0x74,0x28,0xb3,0xb9,0x4d, + 0x4e,0xa2,0x38,0x66,0xa4,0xb0,0xbb,0x6c,0xa1,0x3f,0xba,0x74,0x2f,0xb3,0xba,0xbf, + 0x4f,0x38,0x38,0x74,0xa4,0xb4,0x69,0x6d,0x6f,0x40,0x44,0x74,0xa8,0xb3,0xbc,0x2d, + 0x4f,0x70,0x38,0x22,0xa4,0xb7,0xbb,0x6e,0x5f,0x28,0x38,0x28,0xa4,0xb9,0x69,0x6e, + 0x2f,0x40,0x6c,0x74,0xb2,0xb3,0xbf,0x4d,0x50,0x40,0x38,0xa8,0xa4,0xbc,0xbb,0x6f, + 0xa1,0x40,0x28,0x74,0xb9,0xb3,0xc0,0xbf,0x50,0x78,0x38,0xb6,0xa4,0xc0,0x69,0x70, + 0x6f,0x40,0xb6,0x74,0xc0,0xb3,0xc2,0x2d,0x50,0xc2,0x35,0x32,0xa5,0x31,0xbb,0x71, + 0x5f,0x41,0x40,0x75,0x35,0xb4,0x32,0x6d,0x51,0x68,0x39,0x40,0xa5,0x35,0x69,0x72, + 0x4f,0x41,0x5c,0x75,0x3c,0xb4,0x34,0x4d,0x51,0xb2,0x39,0x4e,0xa5,0x38,0xbb,0x73, + 0x3f,0x41,0x78,0x75,0x43,0xb4,0x35,0xbf,0x52,0x58,0x39,0x5c,0xa5,0x3c,0x69,0x73, + 0xc1,0x41,0xa6,0x75,0x4a,0xb4,0x37,0x2d,0x52,0x30,0x39,0x6a,0xa5,0x3f,0xbb,0x74, + 0xb1,0x41,0xc2,0x75,0x51,0xb4,0x39,0x6d,0x53,0x48,0x39,0x78,0xa5,0x43,0x69,0x75, + 0x2f,0x42,0x4c,0x75,0x58,0xb4,0x3b,0x4d,0x53,0xa2,0x39,0x26,0xa5,0x46,0xbb,0x76, + 0xa1,0x42,0x68,0x75,0x5f,0xb4,0x3c,0xbf,0x54,0x38,0x39,0xa6,0xa5,0x4a,0x69,0x77, + 0x6f,0x48,0x59,0x5b,0x35,0xc2,0x71,0x57,0xa1,0x42,0x28,0x75,0x67,0xb4,0x3e,0xbf, + 0x54,0x78,0x39,0xb6,0xa5,0x4e,0x69,0x78,0x6f,0x42,0xb6,0x75,0x6e,0xb4,0x40,0x2d, + 0x54,0xc2,0x3a,0x32,0xa5,0x51,0xbb,0x79,0x5f,0x43,0x40,0x75,0x75,0xb4,0x42,0x6d, + 0x55,0x68,0x3a,0x40,0xa5,0x55,0x69,0x7a,0x4f,0x43,0x5c,0x75,0x7c,0xb4,0x44,0x4d, + 0x55,0xb2,0x3a,0x4e,0xa5,0x58,0xbb,0x7b,0x3f,0x43,0x78,0x75,0x23,0xb4,0x45,0xbf, + 0x56,0x58,0x3a,0x5c,0xa5,0x5c,0x69,0x7b,0xc1,0x43,0xa6,0x75,0x2a,0xb4,0x47,0x2d, + 0x56,0x30,0x3a,0x6a,0xa5,0x5f,0xbb,0x7c,0xb1,0x43,0xc2,0x75,0xa3,0xb4,0x49,0x6d, + 0x57,0x48,0x3a,0x78,0xa5,0x63,0x69,0x7d,0x2f,0x44,0x4c,0x75,0xaa,0xb4,0x4b,0x4d, + 0x57,0xa2,0x3a,0x26,0xa5,0x66,0xbb,0x7e,0xa1,0x44,0x68,0x75,0xb1,0xb4,0x4c,0xbf, + 0x58,0x38,0x3a,0xa6,0xa5,0x6a,0x69,0x71,0x31,0x34,0xa2,0x75,0xb7,0xb4,0x4e,0x6d, + 0x58,0x68,0x3a,0xb2,0xa5,0x6d,0x69,0xa2,0x4f,0x44,0xae,0x75,0xbe,0xb4,0x50,0x4d, + 0x58,0xb2,0x3a,0xc0,0xa5,0x70,0xbb,0x21,0x3f,0x45,0x38,0x76,0x33,0xb4,0x51,0xbf, + 0x59,0x58,0x3b,0x3c,0xa5,0x74,0x69,0x21,0xc1,0x45,0x54,0x76,0x3a,0xb4,0x53,0x2d, + 0x59,0x30,0x3b,0x4a,0xa5,0x77,0xbb,0x22,0xb1,0x45,0x70,0x76,0x41,0xb4,0x55,0x6d, + 0x5a,0x48,0x3b,0x58,0xa5,0x7b,0x69,0x23,0x2f,0x45,0x2c,0x76,0x48,0xb4,0x57,0x4d, + 0x5a,0xa2,0x3b,0x66,0xa5,0x7e,0xbb,0x24,0xa1,0x45,0xba,0x76,0x4f,0xb4,0x58,0xbf, + 0x5b,0x38,0x3b,0x74,0xa5,0x22,0x69,0x25,0x6f,0x46,0x44,0x76,0x56,0xb4,0x5a,0x2d, + 0x5b,0x70,0x3b,0x22,0xa5,0x25,0xbb,0x26,0x5f,0x46,0x60,0x76,0x5d,0xb4,0x5c,0x6d, + 0x5b,0xba,0x3b,0x30,0xa5,0x29,0x69,0x27,0x4f,0x46,0x7c,0x76,0x64,0xb4,0x5e,0x4d, + 0x5c,0x60,0x3b,0xb0,0xa5,0x2c,0xbb,0x28,0x3f,0x46,0xaa,0x76,0x6b,0xb4,0x5f,0xbf, + 0x5c,0xaa,0x3b,0xbe,0xa5,0x30,0x69,0x28,0xc1,0x47,0x34,0x76,0x72,0xb4,0x61,0x2d, + 0x5d,0x50,0x3c,0x3a,0xa5,0xa5,0xbb,0x29,0xb1,0x47,0x50,0x76,0x79,0xb4,0x63,0x6d, + 0x5d,0x28,0x3c,0x48,0xa5,0xa9,0x69,0x2a,0x2f,0x47,0x6c,0x76,0xa2,0xb4,0x65,0x4d, + 0x5e,0x40,0x3c,0x56,0xa5,0xac,0xbb,0x2b,0xa1,0x47,0x28,0x76,0x27,0xb4,0x66,0xbf, + 0x5e,0x78,0x3c,0x64,0xa5,0xb0,0x69,0x2c,0x6f,0x47,0xb6,0x76,0x2e,0xb4,0x68,0x2d, + 0x5e,0xc2,0x3c,0x72,0xa5,0xb3,0xbb,0x2d,0x5f,0x48,0x40,0x76,0xa7,0xb4,0x6a,0x6d, + 0x5f,0x68,0x3c,0xa2,0xa5,0xb7,0x69,0x2e,0x4f,0x48,0x5c,0x26,0xa5,0xb8,0xbb,0x2e, + 0xa1,0x48,0x68,0x76,0xb1,0xb4,0x6c,0xc0,0x52,0xab,0x44,0xc1,0x32,0xbb,0x69,0x2f, + 0x4f,0x48,0x7c,0x76,0xb6,0xb4,0x6e,0x4d,0x60,0x60,0x3c,0xb0,0xa5,0xbe,0xbb,0x30, + 0x3f,0x48,0xaa,0x76,0xbd,0xb4,0x6f,0xbf,0x60,0xaa,0x3c,0xbe,0xa5,0xc2,0x69,0x30, + 0xc1,0x41,0x34,0x77,0x32,0xb4,0x71,0x2d,0x61,0x50,0x3d,0x3a,0xa6,0x33,0xbb,0xa3, + 0xb1,0x49,0x50,0x77,0x39,0xb4,0x73,0x6d,0x61,0x28,0x3d,0x48,0xa6,0x37,0x69,0xa4, + 0x2f,0x49,0x6c,0x77,0x40,0xb4,0x75,0x4d,0x62,0x40,0x3d,0x56,0xa6,0x3a,0xbb,0xa5, + 0xa1,0x49,0x28,0x77,0x47,0xb4,0x76,0xbf,0x62,0x78,0x3d,0x64,0xa6,0x3e,0x69,0xa6, + 0x6f,0x49,0xb6,0x77,0x4e,0xb4,0x78,0x2d,0x62,0xc2,0x3d,0x72,0xa6,0x41,0xbb,0xa7, + 0x5f,0x4a,0x40,0x77,0x55,0xb4,0x7a,0x6d,0x63,0x68,0x3d,0xa2,0xa6,0x45,0x69,0xa8, + 0x4f,0x4a,0x5c,0x77,0x5c,0xb4,0x7c,0x4d,0x63,0xb2,0x3d,0x2e,0xa6,0x31,0x31,0x36, + 0xc1,0x4a,0x74,0x77,0x62,0xb4,0x7d,0x2d,0x64,0x50,0x3d,0xac,0xa6,0x4b,0xbb,0xa9, + 0xb1,0x4a,0x30,0x77,0x69,0xb4,0xa1,0x6d,0x64,0x28,0x3d,0xba,0xa6,0x4f,0x69,0xaa, + 0x2f,0x4a,0xbe,0x77,0x70,0xb4,0x21,0x4d,0x65,0x40,0x3e,0x36,0xa6,0x52,0xbb,0xab, + 0xa1,0x4b,0x48,0x77,0x77,0xb4,0x22,0xbf,0x65,0x78,0x3e,0x44,0xa6,0x56,0x69,0xac, + 0x6f,0x4b,0x64,0x77,0x7e,0xb4,0x24,0x2d,0x65,0xc2,0x3e,0x52,0xa6,0x59,0xbb,0xad, + 0x5f,0x4b,0xa2,0x77,0x25,0xb4,0x26,0x6d,0x66,0x68,0x3e,0x60,0xa6,0x5d,0x69,0xae, + 0x4f,0x4b,0xae,0x77,0x2c,0xb4,0x28,0x4d,0x66,0xb2,0x3e,0x6e,0xa6,0x60,0xbb,0xaf, + 0x3f,0x4c,0x38,0x77,0xa5,0xb4,0x29,0xbf,0x67,0x58,0x3e,0x7c,0xa6,0x64,0x69,0xaf, + 0xc1,0x4c,0x54,0x77,0xac,0xb4,0x2b,0x2d,0x67,0x30,0x3e,0x2a,0xa6,0x67,0xbb,0xb0, + 0xb1,0x4c,0x70,0x77,0xb3,0xb4,0x2d,0x6d,0x68,0x48,0x3e,0xaa,0xa6,0x6b,0x69,0xb1, + 0x2f,0x4c,0x2c,0x77,0xba,0xb4,0x2f,0x4d,0x68,0xa2,0x3e,0xb8,0xa6,0x6e,0xbb,0xb2, + 0xa1,0x4c,0xba,0x77,0xc1,0xb4,0x30,0xbf,0x69,0x38,0x3f,0x34,0xa6,0x72,0x69,0xb3, + 0x6f,0x4d,0x44,0x78,0x36,0xb4,0xa4,0x2d,0x69,0x70,0x3f,0x42,0xa6,0x75,0xbb,0xb4, + 0x5f,0x4d,0x60,0x78,0x3d,0xb4,0xa6,0x6d,0x69,0xba,0x3f,0x50,0xa6,0x79,0x69,0xb5, + 0x4f,0x4d,0x7c,0x78,0x44,0xb4,0xa8,0x4d,0x6a,0x60,0x3f,0x5e,0xa6,0x7c,0xbb,0xb6, + 0x3f,0x4d,0xaa,0x78,0x4b,0xb4,0xa9,0xbf,0x6a,0xaa,0x3f,0x6c,0xa6,0xa2,0x69,0xb6, + 0xc1,0x4e,0x34,0x78,0x52,0xb4,0xab,0x2d,0x6b,0x50,0x3f,0x7a,0xa6,0x23,0xbb,0xb7, + 0xb1,0x4e,0x50,0x78,0x59,0xb4,0xad,0x6d,0x6b,0x28,0x3f,0x28,0xa6,0xb8,0x36,0x51, + 0xa2,0xbb,0x37,0x2a,0xa6,0x27,0xbb,0xb8,0xb1,0x4e,0x70,0x78,0x61,0xb4,0xaf,0x6d, + 0x6c,0x48,0x3f,0xaa,0xa6,0x2b,0x69,0xb9,0x2f,0x4e,0x2c,0x78,0x68,0xb4,0xb1,0x4d, + 0x6c,0xa2,0x3f,0xb8,0xa6,0x2e,0xbb,0xba,0xa1,0x4e,0xba,0x78,0x6f,0xb4,0xb2,0xbf, + 0x6d,0x38,0x40,0x34,0xa6,0xa4,0x69,0xbb,0x6f,0x4f,0x44,0x78,0x76,0xb4,0xb4,0x2d, + 0x6d,0x70,0x40,0x42,0xa6,0xa7,0xbb,0xbc,0x5f,0x4f,0x60,0x78,0x7d,0xb4,0xb6,0x6d, + 0x6d,0xba,0x40,0x50,0xa6,0xab,0x69,0xbd,0x4f,0x4f,0x7c,0x78,0x24,0xb4,0xb8,0x4d, + 0x6e,0x60,0x40,0x5e,0xa6,0xae,0xbb,0xbe,0x3f,0x4f,0xaa,0x78,0x2b,0xb4,0xb9,0xbf, + 0x6e,0xaa,0x40,0x6c,0xa6,0xb2,0x69,0xbe,0xc1,0x50,0x34,0x78,0xa4,0xb4,0xbb,0x2d, + 0x6f,0x50,0x40,0x7a,0xa6,0xb5,0xbb,0xbf,0xb1,0x50,0x50,0x78,0xab,0xb4,0xbd,0x6d, + 0x6f,0x28,0x5c,0x77,0x31,0x31,0x6b,0xbf,0x6f,0xaa,0x40,0x2c,0xa6,0xba,0x69,0xc0, + 0xc1,0x50,0x74,0x78,0xb4,0xb4,0xbf,0x2d,0x70,0x50,0x40,0xac,0xa6,0xbd,0xbb,0xc1, + 0xb1,0x50,0x30,0x78,0xbb,0xb4,0xc1,0x6d,0x70,0x28,0x40,0xba,0xa6,0xc1,0x69,0xc2, + 0x2f,0x50,0xbe,0x78,0xc2,0xb4,0x71,0x4d,0x71,0x40,0x41,0x36,0xa7,0x32,0xbc,0x31, + 0xa1,0x51,0x48,0x79,0x37,0xb5,0x32,0xbf,0x71,0x78,0x41,0x44,0xa7,0x36,0x6a,0x32, + 0x6f,0x51,0x64,0x79,0x3e,0xb5,0x34,0x2d,0x71,0xc2,0x41,0x52,0xa7,0x39,0xbc,0x33, + 0x5f,0x51,0xa2,0x79,0x45,0xb5,0x36,0x6d,0x72,0x68,0x41,0x60,0xa7,0x3d,0x6a,0x34, + 0x4f,0x51,0xae,0x79,0x4c,0xb5,0x38,0x4d,0x72,0xb2,0x41,0x6e,0xa7,0x40,0xbc,0x35, + 0x3f,0x52,0x38,0x79,0x53,0xb5,0x39,0xbf,0x73,0x58,0x41,0x7c,0xa7,0x44,0x6a,0x35, + 0xc1,0x52,0x54,0x79,0x5a,0xb5,0x3b,0x2d,0x73,0x30,0x41,0x2a,0xa7,0x47,0xbc,0x36, + 0xb1,0x52,0x70,0x79,0x61,0xb5,0x3d,0x6d,0x74,0x48,0x41,0xaa,0xa7,0x4b,0x6a,0x37, + 0x2f,0x52,0x2c,0x79,0x68,0xb5,0x3f,0x4d,0x74,0xa2,0x41,0xb8,0xa7,0x4e,0xbc,0x38, + 0xa1,0x52,0xba,0x79,0x6f,0xb5,0x40,0xbf,0x75,0x38,0x42,0x34,0xa7,0x52,0x6a,0x39, + 0x6f,0x53,0x44,0x79,0x76,0xb5,0x42,0x2d,0x75,0x70,0x42,0x42,0xa7,0x55,0xbc,0x3a, + 0x5f,0x53,0x60,0x79,0x7d,0xb5,0x44,0x6d,0x75,0xba,0x42,0x50,0xa7,0x59,0x6a,0x3b, + 0x4f,0x53,0x7c,0x79,0x24,0xb5,0x46,0x4d,0x76,0x60,0x42,0x5e,0xa7,0x5c,0xbc,0x3c, + 0x3f,0x53,0xaa,0x79,0x2b,0xb5,0x47,0xbf,0x76,0xaa,0x42,0x6c,0xa7,0x60,0x6a,0x3c, + 0xc1,0x54,0x34,0x79,0xa4,0xb5,0x49,0x2d,0x77,0x50,0x42,0x7a,0xa7,0x63,0xbc,0x3d, + 0xb1,0x54,0x50,0x7a,0xad,0x3b,0x72,0x50,0xb3,0x3c,0x54,0x79,0xac,0xb5,0x4b,0x2d, + 0x77,0x30,0x42,0x2a,0xa7,0x67,0xbc,0x3e,0xb1,0x54,0x70,0x79,0xb3,0xb5,0x4d,0x6d, + 0x78,0x48,0x42,0xaa,0xa7,0x6b,0x6a,0x3f,0x2f,0x54,0x2c,0x79,0xba,0xb5,0x4f,0x4d, + 0x78,0xa2,0x42,0xb8,0xa7,0x6e,0xbc,0x40,0xa1,0x54,0xba,0x79,0xc1,0xb5,0x50,0xbf, + 0x79,0x38,0x43,0x34,0xa7,0x72,0x6a,0x41,0x6f,0x55,0x44,0x7a,0x36,0xb5,0x52,0x2d, + 0x79,0x70,0x43,0x42,0xa7,0x75,0xbc,0x42,0x5f,0x55,0x60,0x7a,0x3d,0xb5,0x54,0x6d, + 0x79,0xba,0x43,0x50,0xa7,0x79,0x6a,0x43,0x4f,0x55,0x7c,0x7a,0x44,0xb5,0x56,0x4d, + 0x7a,0x60,0x43,0x5e,0xa7,0x7c,0xbc,0x44,0x3f,0x55,0xaa,0x7a,0x4b,0xb5,0x57,0xbf, + 0x7a,0xaa,0x43,0x6c,0xa7,0xa2,0x6a,0x44,0xc1,0x56,0x34,0x7a,0x52,0xb5,0x59,0x2d, + 0x7b,0x50,0x43,0x7a,0xa7,0x23,0xbc,0x45,0xb1,0x51,0x31,0x32,0x58,0xb5,0x5b,0x4d, + 0x7b,0xa2,0x43,0x26,0xa7,0x26,0xbc,0x46,0xa1,0x56,0x68,0x7a,0x5f,0xb5,0x5c,0xbf, + 0x7c,0x38,0x43,0xa6,0xa7,0x2a,0x6a,0x47,0x6f,0x56,0x24,0x7a,0x66,0xb5,0x5e,0x2d, + 0x7c,0x70,0x43,0xb4,0xa7,0x2d,0xbc,0x48,0x5f,0x56,0xb2,0x7a,0x6d,0xb5,0x60,0x6d, + 0x7c,0xba,0x43,0xc2,0xa7,0xa3,0x6a,0x49,0x4f,0x57,0x3c,0x7a,0x74,0xb5,0x62,0x4d, + 0x7d,0x60,0x44,0x3e,0xa7,0xa6,0xbc,0x4a,0x3f,0x57,0x58,0x7a,0x7b,0xb5,0x63,0xbf, + 0x7d,0xaa,0x44,0x4c,0xa7,0xaa,0x6a,0x4a,0xc1,0x57,0x74,0x7a,0x22,0xb5,0x65,0x2d, + 0x7e,0x50,0x44,0x5a,0xa7,0xad,0xbc,0x4b,0xb1,0x57,0x30,0x7a,0x29,0xb5,0x67,0x6d, + 0x7e,0x28,0x44,0x68,0xa7,0xb1,0x6a,0x4c,0x2f,0x57,0xbe,0x7a,0x30,0xb5,0x69,0x4d, + 0xa1,0x40,0x44,0x76,0xa7,0xb4,0xbc,0x4d,0xa1,0x58,0x48,0x7a,0xa9,0xb5,0x6a,0xbf, + 0xa1,0x78,0x44,0x24,0xa7,0xb8,0x6b,0x2d,0xa1,0x30,0x44,0x2a,0xa7,0xb9,0xbc,0x4e, + 0xb1,0x58,0x70,0x7a,0xb3,0xb5,0x6d,0x6d,0xa2,0x48,0x44,0xaa,0xa7,0xbd,0x6a,0x4f, + 0x2f,0x58,0x2c,0x7a,0xba,0xb5,0x6f,0x4d,0xa2,0xa2,0x44,0xb8,0xa7,0xc0,0xbc,0x50, + 0xa1,0x58,0xba,0x7a,0xc1,0xb5,0x70,0xbf,0x71,0x38,0x45,0x34,0xa8,0x32,0x6a,0x51, + 0x6f,0x59,0x44,0x7b,0x36,0xb5,0x72,0x2d,0x21,0x70,0x45,0x42,0xa8,0x35,0xbc,0x52, + 0x5f,0x59,0x60,0x7b,0x3d,0xb5,0x74,0x6d,0x21,0xba,0x45,0x50,0xa8,0x39,0x6a,0x53, + 0x4f,0x59,0x7c,0x7b,0x44,0xb5,0x76,0x4d,0x22,0x60,0x45,0x5e,0xa8,0x3c,0xbc,0x54, + 0x3f,0x59,0xaa,0x7b,0x4b,0xb5,0x77,0xbf,0x22,0xaa,0x45,0x6c,0xa8,0x40,0x6a,0x54, + 0xc1,0x5a,0x34,0x7b,0x52,0xb5,0x79,0x2d,0x23,0x50,0x48,0x25,0x46,0x33,0x70,0xa3, + 0x43,0x58,0x45,0x7c,0xa8,0x44,0x6a,0x55,0xc1,0x5a,0x54,0x7b,0x5a,0xb5,0x7b,0x2d, + 0x23,0x30,0x45,0x2a,0xa8,0x47,0xbc,0x56,0xb1,0x5a,0x70,0x7b,0x61,0xb5,0x7d,0x6d, + 0x24,0x48,0x45,0xaa,0xa8,0x4b,0x6a,0x57,0x2f,0x5a,0x2c,0x7b,0x68,0xb5,0xa1,0x4d, + 0x24,0xa2,0x45,0xb8,0xa8,0x4e,0xbc,0x58,0xa1,0x5a,0xba,0x7b,0x6f,0xb5,0xa2,0xbf, + 0x25,0x38,0x46,0x34,0xa8,0x52,0x6a,0x59,0x6f,0x5b,0x44,0x7b,0x76,0xb5,0x22,0x2d, + 0x25,0x70,0x46,0x42,0xa8,0x55,0xbc,0x5a,0x5f,0x5b,0x60,0x7b,0x7d,0xb5,0x24,0x6d, + 0x25,0xba,0x46,0x50,0xa8,0x59,0x6a,0x5b,0x4f,0x5b,0x7c,0x7b,0x24,0xb5,0x26,0x4d, + 0x26,0x60,0x46,0x5e,0xa8,0x5c,0xbc,0x5c,0x3f,0x5b,0xaa,0x7b,0x2b,0xb5,0x27,0xbf, + 0x26,0xaa,0x46,0x6c,0xa8,0x60,0x6a,0x5c,0xc1,0x5c,0x34,0x7b,0xa4,0xb5,0x29,0x2d, + 0x21,0x31,0x32,0x78,0xa8,0x63,0x6a,0x5d,0x2f,0x5c,0x4c,0x7b,0xaa,0xb5,0x2b,0x4d, + 0x27,0xa2,0x46,0x26,0xa8,0x66,0xbc,0x5e,0xa1,0x5c,0x68,0x7b,0xb1,0xb5,0x2c,0xbf, + 0x28,0x38,0x46,0xa6,0xa8,0x6a,0x6a,0x5f,0x6f,0x5c,0x24,0x7b,0xb8,0xb5,0x2e,0x2d, + 0x28,0x70,0x46,0xb4,0xa8,0x6d,0xbc,0x60,0x5f,0x5c,0xb2,0x7b,0xbf,0xb5,0x30,0x6d, + 0x28,0xba,0x46,0xc2,0xa8,0x71,0x6a,0x61,0x4f,0x5d,0x3c,0x7c,0x34,0xb5,0xa4,0x4d, + 0x29,0x60,0x47,0x3e,0xa8,0x74,0xbc,0x62,0x3f,0x5d,0x58,0x7c,0x3b,0xb5,0xa5,0xbf, + 0x29,0xaa,0x47,0x4c,0xa8,0x78,0x6a,0x62,0xc1,0x5d,0x74,0x7c,0x42,0xb5,0xa7,0x2d, + 0x2a,0x50,0x47,0x5a,0xa8,0x7b,0xbc,0x63,0xb1,0x5d,0x30,0x7c,0x49,0xb5,0xa9,0x6d, + 0x2a,0x28,0x47,0x68,0xa8,0xa1,0x6a,0x64,0x2f,0x5d,0xbe,0x7c,0x50,0xb5,0xab,0x4d, + 0x2b,0x40,0x47,0x76,0xa8,0x22,0xbc,0x65,0xa1,0x5e,0x48,0x7c,0x57,0xb5,0xac,0xbf, + 0x2b,0x78,0x47,0x24,0xa8,0x26,0x6a,0x66,0x6f,0x5e,0x64,0x7c,0x5e,0xb5,0xae,0x2d, + 0x2b,0xc2,0x47,0xa4,0xa8,0x29,0xbc,0x67,0x5f,0x5e,0xa2,0x7c,0x65,0xb5,0xb0,0x6d, + 0x2c,0x68,0x47,0xb2,0xa8,0x2d,0x6a,0x68,0x4f,0x5e,0xae,0x7c,0x6c,0xb5,0xb2,0x4d, + 0x2c,0xb2,0x47,0xc0,0xa8,0x30,0xbc,0x69,0x3f,0x5f,0x38,0x7c,0x73,0xb5,0xb3,0xbf, + 0x2d,0x58,0x48,0x3c,0xa8,0xa6,0x6a,0x69,0xc1,0x5f,0x54,0x7c,0x7a,0xb5,0xb5,0x2d, + 0x2d,0x30,0x48,0x4a,0xa8,0xa9,0xbc,0x6a,0xb1,0x5f,0x70,0x7c,0x21,0xb5,0xb7,0x6d, + 0x2e,0x48,0x48,0x58,0xa8,0xad,0x6a,0x6b,0x2f,0x5f,0x2c,0x7c,0x28,0xb5,0xb9,0x4d, + 0x2e,0xa2,0x48,0x66,0xa8,0xb0,0xbc,0x6c,0xa1,0x5f,0xba,0x7c,0x2f,0xb5,0xba,0xc0, + 0x52,0xab,0x44,0xc1,0x32,0xb3,0x6a,0x6d,0x4f,0x60,0x3c,0x7c,0xa6,0xb5,0xbc,0x4d, + 0x2f,0x60,0x48,0x7e,0xa8,0xb6,0xbc,0x6e,0x3f,0x60,0x58,0x7c,0xad,0xb8,0x6a,0x6e, + 0x6f,0x60,0x64,0x7c,0xb0,0xb5,0xbe,0x2d,0x2f,0xc2,0x48,0xa4,0xa8,0xbb,0xbc,0x6f, + 0x5f,0x60,0xa2,0x7c,0xb7,0xb5,0xc0,0x6d,0x30,0x68,0x48,0xb2,0xa8,0xbf,0x6a,0x70, + 0x4f,0x60,0xae,0x7c,0xbe,0xb5,0xc2,0x4d,0x30,0xb2,0x48,0xc0,0xa8,0xc2,0xbc,0x51, + 0x3f,0x61,0x38,0x7d,0x33,0xb6,0x31,0xbf,0xa3,0x58,0x49,0x3c,0xa9,0x34,0x6a,0x71, + 0xc1,0x61,0x54,0x7d,0x3a,0xb6,0x33,0x2d,0xa3,0x30,0x49,0x4a,0xa9,0x37,0xbc,0x72, + 0xb1,0x61,0x70,0x7d,0x41,0xb6,0x35,0x6d,0xa4,0x48,0x49,0x58,0xa9,0x3b,0x6a,0x73, + 0x2f,0x61,0x2c,0x7d,0x48,0xb6,0x37,0x4d,0xa4,0xa2,0x49,0x66,0xa9,0x3e,0xbc,0x74, + 0xa1,0x61,0xba,0x7d,0x4f,0xb6,0x31,0x31,0x32,0xc2,0x49,0x72,0xa9,0x41,0xbc,0x75, + 0x5f,0x62,0x40,0x7d,0x55,0xb6,0x3a,0x6d,0xa5,0x68,0x49,0xa2,0xa9,0x45,0x6a,0x76, + 0x4f,0x62,0x5c,0x7d,0x5c,0xb6,0x3c,0x4d,0xa5,0xb2,0x49,0x2e,0xa9,0x48,0xbc,0x77, + 0x3f,0x62,0x78,0x7d,0x63,0xb6,0x3d,0xbf,0xa6,0x58,0x49,0xae,0xa9,0x4c,0x6a,0x77, + 0xc1,0x62,0xa6,0x7d,0x6a,0xb6,0x3f,0x2d,0xa6,0x30,0x49,0xbc,0xa9,0x4f,0xbc,0x78, + 0xb1,0x62,0xc2,0x7d,0x71,0xb6,0x41,0x6d,0xa7,0x48,0x4a,0x38,0xa9,0x53,0x6a,0x79, + 0x2f,0x63,0x4c,0x7d,0x78,0xb6,0x43,0x4d,0xa7,0xa2,0x4a,0x46,0xa9,0x56,0xbc,0x7a, + 0xa1,0x63,0x68,0x7d,0xa1,0xb6,0x44,0xbf,0xa8,0x38,0x4a,0x54,0xa9,0x5a,0x6a,0x7b, + 0x6f,0x63,0x24,0x7d,0x26,0xb6,0x46,0x2d,0xa8,0x70,0x4a,0x62,0xa9,0x5d,0xbc,0x7c, + 0x5f,0x63,0xb2,0x7d,0x2d,0xb6,0x48,0x6d,0xa8,0xba,0x4a,0x70,0xa9,0x61,0x6a,0x7d, + 0x4f,0x64,0x3c,0x7d,0xa6,0xb6,0x4a,0x4d,0xa9,0x60,0x4a,0x7e,0xa9,0x64,0xbc,0x7e, + 0x3f,0x64,0x58,0x7d,0xad,0xb6,0x4b,0xbf,0xa9,0xaa,0x4a,0x2c,0xa9,0x68,0x6a,0x7e, + 0xc1,0x64,0x74,0x7d,0xb4,0xb6,0x4d,0x2d,0xaa,0x50,0x4a,0xac,0xa9,0x6b,0xbc,0xa1, + 0xb1,0x64,0x30,0x7d,0xbb,0xb6,0x4f,0x6d,0xaa,0x28,0x4a,0xba,0xa9,0x6f,0x6a,0xa2, + 0x2f,0x64,0xbe,0x7d,0xc2,0xb6,0x51,0x4d,0xab,0x40,0x4b,0x36,0xa9,0x72,0xbc,0x21, + 0xa1,0x65,0x48,0x7e,0x37,0xb6,0x52,0xbf,0xab,0x78,0x4b,0x44,0xa9,0x76,0x6a,0x22, + 0x6f,0x65,0x64,0x7e,0x3e,0xb6,0x54,0x2d,0xab,0xc2,0x4b,0x52,0xa9,0x79,0xbc,0x23, + 0x5f,0x65,0xa2,0x7e,0x45,0xb6,0x56,0x6d,0xac,0x68,0x4b,0x60,0xa9,0x7d,0x6a,0x24, + 0x4f,0x65,0xae,0x7e,0x4c,0xb6,0x6b,0x74,0x21,0x53,0x38,0x74,0xa9,0xa1,0xbc,0x24, + 0xb1,0x65,0xc2,0x7e,0x51,0xb6,0x59,0x6d,0xad,0x48,0x4b,0x78,0xa9,0x23,0x6a,0x25, + 0x2f,0x66,0x4c,0x7e,0x58,0xb6,0x5b,0x4d,0xad,0xa2,0x4b,0x26,0xa9,0x26,0xbc,0x26, + 0xa1,0x66,0x68,0x7e,0x5f,0xb6,0x5c,0xbf,0xae,0x38,0x4b,0xa6,0xa9,0x2a,0x6a,0x27, + 0x6f,0x66,0x24,0x7e,0x66,0xb6,0x5e,0x2d,0xae,0x70,0x4b,0xb4,0xa9,0x2d,0xbc,0x28, + 0x5f,0x66,0xb2,0x7e,0x6d,0xb6,0x60,0x6d,0xae,0xba,0x4b,0xc2,0xa9,0xa3,0x6a,0x29, + 0x4f,0x67,0x3c,0x7e,0x74,0xb6,0x62,0x4d,0xaf,0x60,0x4c,0x3e,0xa9,0xa6,0xbc,0x2a, + 0x3f,0x67,0x58,0x7e,0x7b,0xb6,0x63,0xbf,0xaf,0xaa,0x4c,0x4c,0xa9,0xaa,0x6a,0x2a, + 0xc1,0x67,0x74,0x7e,0x22,0xb6,0x65,0x2d,0xb0,0x50,0x4c,0x5a,0xa9,0xad,0xbc,0x2b, + 0xb1,0x67,0x30,0x7e,0x29,0xb6,0x67,0x6d,0xb0,0x28,0x49,0x31,0x31,0xb0,0xbc,0x2c, + 0xa1,0x67,0xba,0x7e,0x2f,0xb6,0x68,0xbf,0xb1,0x38,0x4c,0x74,0xa9,0xb4,0x6a,0x2d, + 0x6f,0x68,0x44,0x7e,0xa8,0xb6,0x6a,0x2d,0xb1,0x70,0x4c,0x22,0xa9,0xb7,0xbc,0x2e, + 0x5f,0x28,0x4c,0x28,0xa9,0xb9,0x6a,0x2e,0x2f,0x68,0x6c,0x7e,0xb2,0xb6,0x6d,0x4d, + 0xb2,0x40,0x4c,0xa8,0xa9,0xbc,0xbc,0x2f,0xa1,0x68,0x28,0x7e,0xb9,0xb6,0x6e,0xbf, + 0xb2,0x78,0x4c,0xb6,0xa9,0xc0,0x6a,0x30,0x6f,0x68,0xb6,0x7e,0xc0,0xb6,0x70,0x2d, + 0xb2,0xc2,0x49,0x32,0xaa,0x31,0xbc,0xa3,0x5f,0x69,0x40,0xa1,0x35,0xb6,0x72,0x6d, + 0xb3,0x68,0x4d,0x40,0xaa,0x35,0x6a,0xa4,0x4f,0x69,0x5c,0xa1,0x3c,0xb6,0x74,0x4d, + 0xb3,0xb2,0x4d,0x4e,0xaa,0x38,0xbc,0xa5,0x3f,0x69,0x78,0xa1,0x43,0xb6,0x75,0xbf, + 0xb4,0x58,0x4d,0x5c,0xaa,0x3c,0x6a,0xa5,0xc1,0x69,0xa6,0xa1,0x4a,0xb6,0x77,0x2d, + 0xb4,0x30,0x4d,0x6a,0xaa,0x3f,0xbc,0xa6,0xb1,0x69,0xc2,0xa1,0x51,0xb6,0x79,0x6d, + 0xb5,0x48,0x4d,0x78,0xaa,0x43,0x6a,0xa7,0x2f,0x6a,0x4c,0xa1,0x58,0xb6,0x7b,0x4d, + 0xb5,0xa2,0x4d,0x26,0xaa,0x46,0xbc,0xa8,0xa1,0x6a,0x68,0xa1,0x5f,0xb6,0x7c,0xbf, + 0xb6,0x38,0x4d,0xa6,0xaa,0x4a,0x6a,0xa9,0x6f,0x6a,0x24,0xa1,0x66,0xb6,0x7e,0x2d, + 0xb6,0x70,0x4d,0xb4,0xaa,0x4d,0xbc,0xaa,0x5f,0x6a,0xb2,0xa1,0x6d,0xb6,0xa2,0x6d, + 0xb6,0xba,0x4d,0xc2,0xaa,0x51,0x6a,0xab,0x4f,0x6b,0x3c,0xa1,0x74,0xb6,0x22,0x4d, + 0xb7,0x60,0x4e,0x3e,0xaa,0x54,0xbc,0xac,0x3f,0x6b,0x58,0xa1,0x7b,0xb6,0x23,0xbf, + 0xb7,0xaa,0x4e,0x4c,0xaa,0x58,0x6a,0xac,0xc1,0x6b,0x74,0xa1,0x22,0xb6,0x25,0x2d, + 0xb8,0x50,0x4e,0x5a,0xaa,0x5b,0xbc,0xad,0xb1,0x6b,0x30,0xa2,0xad,0x3b,0x72,0x50, + 0xb3,0x40,0x5b,0x34,0x52,0x3c,0x6b,0x21,0x4f,0x30,0x48,0x25,0x52,0x2b,0x76,0x77, + 0x44,0x41,0x29,0x73,0x52,0x41,0x7e,0x55,0x5f,0x21,0x25,0x35,0x68,0x3e,0x31,0x31, + 0x3f,0x26,0x45,0x33,0x6a,0x3e,0x6b,0x2f,0xa3,0x5a,0x2d,0x66,0xad,0x3b,0x72,0x50, + 0xb3,0x40,0x5b,0x7b,0x32,0x2f,0x77,0x2e,0x52,0x59,0x39,0xb1,0x4b,0x31,0x31,0x4e, + 0x5b,0x59,0x35,0xb5,0x4b,0xb8,0x6e,0x71,0x24,0x69,0xae,0x25,0x46,0x33,0x70,0xa3, + 0x4f,0x27,0x37,0xbd,0x4b,0xb8,0x32,0x38,0x61,0x31, +} ; + +// GB2312とUTF-16の対応表を圧縮したもの +u8 CP936ToUTF16Table[] = +{ + 0xc1,0x61,0xa3,0x31,0x31,0x31,0x31,0x31,0x51,0x38,0xb6,0x37,0x31,0x31,0x6f,0xa3, + 0x31,0x31,0x35,0x31,0x33,0x31,0x31,0xa3,0x31,0x51,0x31,0x3b,0x31,0x34,0x31,0x31, + 0xb3,0x31,0x51,0x31,0x3a,0x31,0x33,0x71,0x31,0x29,0x31,0x49,0x31,0x37,0x71,0x32, + 0xa3,0x31,0x6d,0x31,0x41,0x31,0x35,0x51,0x32,0x41,0x31,0x57,0x31,0x3b,0x31,0x33, + 0x21,0x31,0x29,0x31,0x48,0x31,0x37,0x31,0x32,0x79,0x31,0x65,0x31,0x3e,0x71,0x34, + 0x71,0x31,0xb7,0x31,0x4f,0x31,0x38,0xa3,0x33,0x31,0x31,0x73,0x31,0x42,0x31,0x35, + 0x61,0x32,0x41,0x31,0x56,0x31,0x3a,0x71,0x33,0x69,0x31,0x21,0x31,0x45,0x71,0x36, + 0x51,0x32,0x5d,0x31,0x5d,0x31,0x3c,0x51,0x33,0xb3,0x31,0x2f,0x31,0x49,0x31,0x37, + 0x41,0x32,0x79,0x31,0x64,0x31,0x3e,0x31,0x34,0x59,0x31,0xaf,0x31,0x4c,0x71,0x38, + 0x31,0x32,0xa7,0x31,0x6b,0x31,0x3f,0xa3,0x34,0xa3,0x31,0xbd,0x31,0x50,0x31,0x38, + 0xb3,0x33,0x31,0x31,0x72,0x31,0x41,0x71,0x35,0x49,0x32,0x39,0x31,0x53,0x71,0x39, + 0xa3,0x33,0x4d,0x31,0x79,0x31,0x43,0x51,0x35,0x21,0x32,0x47,0x31,0x57,0x31,0x3a, + 0x21,0x33,0x69,0x31,0xa2,0x31,0x45,0x31,0x36,0x39,0x32,0x55,0x31,0x5a,0x71,0x3b, + 0x71,0x33,0x25,0x31,0x27,0x31,0x46,0xa3,0x36,0x71,0x32,0x63,0x31,0x5e,0x31,0x3c, + 0x61,0x33,0xb3,0x31,0x2e,0x31,0x48,0x71,0x36,0xbb,0x32,0x71,0x31,0x61,0x71,0x3d, + 0x51,0x34,0x3d,0x31,0xa7,0x31,0x4a,0x51,0x37,0x61,0x32,0xa1,0x31,0x65,0x31,0x3e, + 0x41,0x34,0x59,0x31,0xae,0x31,0x4c,0x31,0x37,0xab,0x32,0x2d,0x31,0x68,0x71,0x3f, + 0x31,0x34,0x75,0x31,0xb5,0x31,0x4d,0xa3,0x38,0x51,0x32,0xad,0x31,0x6c,0x31,0x3f, + 0xb3,0x34,0xa3,0x31,0xbc,0x31,0x4f,0x71,0x38,0x29,0x32,0xbb,0x31,0x6f,0x71,0x40, + 0xa3,0x34,0xbf,0x32,0x5d,0x41,0x31,0x50,0x6d,0xa3,0x4d,0x31,0x32,0xc0,0xbe,0x31, + 0xb3,0x40,0xb2,0x59,0x38,0x31,0x31,0x30,0x6f,0xa3,0x4d,0x34,0xbe,0xad,0x32,0xa3, + 0x31,0x50,0xb2,0x29,0x38,0x31,0xc1,0xbd,0x71,0x69,0x31,0x3a,0xbe,0xb9,0x32,0xa3, + 0x50,0x2f,0x21,0x3f,0x31,0x33,0xc1,0xc0,0x71,0x69,0x38,0xba,0x25,0x34,0x71,0x31, + 0xb2,0x30,0x61,0x3f,0x32,0xc0,0xb8,0x31,0xb3,0x31,0x50,0xba,0xaf,0x34,0x71,0x70, + 0x6e,0x51,0x4d,0x31,0x39,0xc0,0xbe,0x31,0xb3,0x40,0xb2,0x59,0x38,0x31,0x33,0x70, + 0x6f,0xa3,0x4d,0x34,0xbe,0xad,0x32,0xa3,0x31,0x28,0xb2,0x29,0x38,0x31,0xc1,0xbd, + 0x71,0x69,0x31,0x48,0xbe,0xb9,0x32,0xa3,0x50,0x2f,0x21,0x3f,0x31,0x37,0x6f,0xc0, + 0x71,0x69,0x38,0xba,0x25,0x34,0x71,0x32,0x30,0x30,0x61,0x3f,0x32,0xc0,0xb8,0x31, + 0xb3,0x31,0x6c,0xba,0xaf,0x34,0x71,0x70,0x6e,0x51,0x4d,0x31,0x40,0xc0,0xbe,0x31, + 0xb3,0x40,0xb2,0x59,0x38,0x31,0x35,0x50,0x6f,0xa3,0x4d,0x34,0xbe,0xad,0x32,0xa3, + 0x32,0x40,0xb2,0x29,0x38,0x31,0xc1,0xbd,0x71,0x69,0x31,0x56,0xbe,0xb9,0x32,0xa3, + 0x50,0x2f,0x21,0x3f,0x31,0x3a,0xc1,0xc0,0x71,0x69,0x38,0xba,0x25,0x34,0x71,0x33, + 0xa2,0x30,0x61,0x3f,0x32,0xc0,0xb8,0x31,0xb3,0x31,0x28,0xba,0xaf,0x34,0x71,0x70, + 0x6e,0x51,0x4d,0x31,0x47,0xc0,0xbe,0x31,0xb3,0x40,0xb2,0x59,0x38,0x31,0x36,0xc2, + 0x6f,0xa3,0x4d,0x34,0xbe,0xad,0x32,0xa3,0x32,0x78,0xb2,0x29,0x38,0x31,0xc1,0xbd, + 0x71,0x69,0x31,0x64,0xbe,0xb9,0x32,0xa3,0x50,0x2f,0x21,0x3f,0x31,0x3e,0x6f,0xc0, + 0x71,0x69,0x38,0xba,0x25,0x34,0x71,0x34,0x70,0x30,0x61,0x3f,0x32,0xc0,0xb8,0x31, + 0xb3,0x31,0xb6,0xba,0xaf,0x34,0x71,0x70,0x6e,0x51,0x4d,0x31,0x4e,0xc0,0xbe,0x31, + 0xb3,0x40,0xb2,0x59,0x38,0x31,0x38,0x30,0x6f,0xa3,0x4d,0x34,0xbe,0xad,0x32,0xa3, + 0x32,0xc2,0xb2,0x29,0x38,0x31,0xc1,0xbd,0x71,0x69,0x31,0x72,0xbe,0xb9,0x32,0xa3, + 0x50,0x2f,0x21,0x3f,0x31,0x41,0xc1,0xc0,0x71,0x69,0x38,0xba,0x25,0x34,0x71,0x35, + 0x60,0x30,0x61,0x3f,0x32,0xc0,0xb8,0x31,0xb3,0x32,0x40,0xba,0xaf,0x34,0x71,0x70, + 0x6e,0x51,0x4d,0x31,0x55,0xc0,0xbe,0x31,0xb3,0x40,0xb2,0x59,0x38,0x31,0x3a,0x70, + 0x6f,0xa3,0x4d,0x34,0xbe,0xad,0x32,0xa3,0x33,0x68,0xb2,0x29,0x38,0x31,0xc1,0xbd, + 0x71,0x69,0x31,0xa2,0xbe,0xb9,0x32,0xa3,0x50,0x2f,0x21,0x3f,0x31,0x45,0x6f,0xc0, + 0x71,0x69,0x38,0xba,0x25,0x34,0x71,0x36,0x50,0x30,0x61,0x3f,0x32,0xc0,0xb8,0x31, + 0xb3,0x32,0x5c,0xba,0xaf,0x34,0x71,0x70,0x6e,0x51,0x4d,0x31,0x5c,0xc0,0xbe,0x31, + 0xb3,0x40,0xb2,0x59,0x38,0x31,0x3c,0x50,0x6f,0xa3,0x4d,0x34,0xbe,0xad,0x32,0xa3, + 0x33,0xb2,0xb2,0x29,0x38,0x31,0xc1,0xbd,0x71,0x69,0x31,0x2e,0xbe,0xb9,0x32,0xa3, + 0x50,0x2f,0x21,0x3f,0x31,0x48,0xc1,0xc0,0x71,0x69,0x38,0xba,0x25,0x34,0x71,0x37, + 0x40,0x30,0x61,0x3f,0x32,0xc0,0xb8,0x31,0xb3,0x32,0x78,0xba,0xaf,0x34,0x71,0x70, + 0x6e,0x51,0x4d,0x31,0x63,0xc0,0xbe,0x31,0xb3,0x40,0xb2,0x59,0x38,0x31,0x3d,0xc2, + 0x6f,0xa3,0x4d,0x34,0xbe,0xad,0x32,0xa3,0x34,0x58,0xb2,0x29,0x38,0x31,0xc1,0xbd, + 0x71,0x69,0x31,0xae,0xbe,0xb9,0x32,0xa3,0x50,0x2f,0x21,0x3f,0x31,0x4c,0x6f,0xc0, + 0x71,0x69,0x38,0xba,0x25,0x34,0x71,0x37,0xc2,0x30,0x61,0x3f,0x32,0xc0,0xb8,0x31, + 0xb3,0x32,0xa6,0xba,0xaf,0x34,0x71,0x70,0x6e,0x51,0x4d,0x31,0x6a,0xc0,0xbe,0x31, + 0xb3,0x40,0xb2,0x59,0x38,0x31,0x3f,0x30,0x6f,0xa3,0x4d,0x34,0xbe,0xad,0x32,0xa3, + 0x34,0x30,0xb2,0x29,0x38,0x31,0xc1,0xbd,0x71,0x69,0x31,0xbc,0xbe,0xb9,0x32,0xa3, + 0x50,0x2f,0x21,0x3f,0x31,0x4f,0xc1,0xc0,0x71,0x69,0x38,0xba,0x25,0x34,0x71,0x38, + 0xb2,0x30,0x61,0x3f,0x32,0xc0,0xb8,0x31,0xb3,0x32,0xc2,0xba,0xaf,0x34,0x71,0x70, + 0x6e,0x51,0x4d,0x31,0x71,0xc0,0xbe,0x31,0xb3,0x40,0xb2,0x59,0x38,0x31,0x41,0x70, + 0x6f,0xa3,0x4d,0x34,0xbe,0xad,0x32,0xa3,0x35,0x48,0xb2,0x29,0x38,0x31,0xc1,0xbd, + 0x71,0x69,0x32,0x38,0xbe,0xb9,0x32,0xa3,0x50,0x2f,0x21,0x3f,0x31,0x53,0x6f,0xc0, + 0x71,0x69,0x38,0xba,0x25,0x34,0x71,0x39,0x30,0x30,0x61,0x3f,0x32,0xc0,0xb8,0x31, + 0xb3,0x33,0x4c,0xba,0xaf,0x34,0x71,0x70,0x6e,0x51,0x4d,0x31,0x78,0xc0,0xbe,0x31, + 0xb3,0x40,0xb2,0x59,0x38,0x31,0x43,0x50,0x6f,0xa3,0x4d,0x34,0xbe,0xad,0x32,0xa3, + 0x35,0xa2,0xb2,0x29,0x38,0x31,0xc1,0xbd,0x71,0x69,0x32,0x46,0xbe,0xb9,0x32,0xa3, + 0x50,0x2f,0x21,0x3f,0x31,0x56,0xc1,0xc0,0x71,0x69,0x38,0xba,0x25,0x34,0x71,0x3a, + 0xa2,0x30,0x61,0x3f,0x32,0xc0,0xb8,0x31,0xb3,0x33,0x68,0xba,0xaf,0x34,0x71,0x70, + 0x6e,0x51,0x4d,0x31,0xa1,0xc0,0xbe,0x31,0xb3,0x40,0xb2,0x59,0x38,0x31,0x44,0xc2, + 0x6f,0xa3,0x4d,0x34,0xbe,0xad,0x32,0xa3,0x36,0x38,0xb2,0x29,0x38,0x31,0xc1,0xbd, + 0x71,0x69,0x32,0x54,0xbe,0xb9,0x32,0xa3,0x50,0x2f,0x21,0x3f,0x31,0x5a,0x6f,0xc0, + 0x71,0x69,0x38,0xba,0x25,0x34,0x71,0x3b,0x70,0x30,0x61,0x3f,0x32,0xc0,0xb8,0x31, + 0xb3,0x33,0x24,0xba,0xaf,0x34,0x71,0x70,0x6e,0x51,0x4d,0x31,0x26,0xc0,0xbe,0x31, + 0xb3,0x40,0xb2,0x59,0x38,0x31,0x46,0x30,0x6f,0xa3,0x4d,0x34,0xbe,0xad,0x32,0xa3, + 0x36,0x70,0xb2,0x29,0x38,0x31,0xc1,0xbd,0x71,0x69,0x32,0x62,0xbe,0xb9,0x32,0xa3, + 0x50,0x2f,0x21,0x3f,0x31,0x5d,0xc1,0xc0,0x71,0x69,0x38,0xba,0x25,0x34,0x71,0x3c, + 0x60,0x30,0x61,0x3f,0x32,0xc0,0xb8,0x31,0xb3,0x33,0xb2,0xba,0xaf,0x34,0x71,0x70, + 0x6e,0x51,0x4d,0x31,0x2d,0xc0,0xbe,0x31,0xb3,0x40,0xb2,0x59,0x38,0x31,0x48,0x70, + 0x6f,0xa3,0x4d,0x34,0xbe,0xad,0x32,0xa3,0x36,0xba,0xb2,0x29,0x38,0x31,0xc1,0xbd, + 0x71,0x69,0x32,0x70,0xbe,0xb9,0x32,0xa3,0x50,0x2f,0x21,0x3f,0x31,0x61,0x6f,0xc0, + 0x71,0x69,0x38,0xba,0x25,0x34,0x71,0x3d,0x50,0x30,0x61,0x3f,0x32,0xc0,0xb8,0x31, + 0xb3,0x34,0x3c,0xba,0xaf,0x34,0x71,0x70,0x6e,0x51,0x4d,0x31,0xa6,0xc0,0xbe,0x31, + 0xb3,0x40,0xb2,0x59,0x38,0x31,0x4a,0x50,0x6f,0xa3,0x4d,0x34,0xbe,0xad,0x32,0xa3, + 0x37,0x60,0xb2,0x29,0x38,0x31,0xc1,0xbd,0x71,0x69,0x32,0x7e,0xbe,0xb9,0x32,0xa3, + 0x50,0x2f,0x21,0x3f,0x31,0x64,0xc1,0xc0,0x71,0x69,0x38,0xba,0x25,0x34,0x71,0x3e, + 0x40,0x30,0x61,0x3f,0x32,0xc0,0xb8,0x31,0xb3,0x34,0x58,0xba,0xaf,0x34,0x71,0x70, + 0x6e,0x51,0x4d,0x31,0xad,0xc0,0xbe,0x31,0xb3,0x40,0xb2,0x59,0x38,0x31,0x4b,0xc2, + 0x6f,0xa3,0x4d,0x34,0xbe,0xad,0x32,0xa3,0x37,0xaa,0xb2,0x29,0x38,0x31,0xc1,0xbd, + 0x71,0x69,0x32,0x2c,0xbe,0xb9,0x32,0xa3,0x50,0x2f,0x21,0x3f,0x31,0x68,0x6f,0xc0, + 0x71,0x69,0x38,0xba,0x25,0x34,0x71,0x3e,0xc2,0x30,0x61,0x3f,0x32,0xc0,0xb8,0x31, + 0xb3,0x34,0x74,0xba,0xaf,0x34,0x71,0x70,0x6e,0x51,0x4d,0x31,0xb4,0xc0,0xbe,0x31, + 0xb3,0x40,0xb2,0x59,0x38,0x31,0x4d,0x30,0x6f,0xa3,0x4d,0x34,0xbe,0xad,0x32,0xa3, + 0x38,0x50,0xb2,0x29,0x38,0x31,0xc1,0xbd,0x71,0x69,0x32,0xac,0xbe,0xb9,0x32,0xa3, + 0x50,0x2f,0x21,0x3f,0x31,0x6b,0xc1,0xc0,0x71,0x69,0x38,0xba,0x25,0x34,0x71,0x3f, + 0xb2,0x30,0x61,0x3f,0x32,0xc0,0xb8,0x31,0xb3,0x34,0x30,0xba,0xaf,0x34,0x71,0x70, + 0x6e,0x51,0x4d,0x31,0xbb,0xc0,0xbe,0x31,0xb3,0x40,0xb2,0x59,0x38,0x31,0x4f,0x70, + 0x6f,0xa3,0x4d,0x34,0xbe,0xad,0x32,0xa3,0x38,0x28,0xb2,0x29,0x38,0x31,0xc1,0xbd, + 0x71,0x69,0x32,0xba,0xbe,0xb9,0x32,0xa3,0x50,0x2f,0x21,0x3f,0x31,0x6f,0x6f,0xc0, + 0x71,0x69,0x38,0xba,0x25,0x34,0x71,0x40,0x30,0x30,0x61,0x3f,0x32,0xc0,0xb8,0x31, + 0xb3,0x34,0xbe,0xba,0xaf,0x34,0x71,0x70,0x6e,0x51,0x4d,0x31,0xc2,0xc0,0xbe,0x31, + 0xb3,0x40,0xb2,0x59,0x38,0x31,0x5c,0x35,0x40,0x30,0x41,0x3f,0x32,0xc0,0xba,0x51, + 0xb3,0x31,0x3c,0xba,0x2d,0x32,0x71,0x31,0x55,0xb3,0x42,0x4d,0x36,0x58,0x32,0x7a, + 0xa3,0xbd,0x69,0x55,0xa1,0x3c,0x24,0x74,0xb7,0xb4,0x32,0x4d,0x52,0x58,0x39,0xac, + 0xa5,0x63,0x69,0x23,0xa1,0x48,0x44,0x76,0xb7,0xb4,0x76,0x4d,0x64,0x58,0x3e,0x5a, + 0xa6,0x6b,0x69,0xbb,0xa1,0x51,0x44,0x79,0x45,0xb5,0x3a,0x4d,0x75,0x58,0x42,0x7a, + 0xa7,0x23,0x6a,0x53,0xa1,0x5b,0x24,0x7b,0xb7,0xb5,0xac,0x4d,0x2c,0x58,0x49,0x7a, + 0xa9,0x4b,0x6a,0x79,0xa1,0x63,0x24,0x7d,0xb7,0xb6,0x52,0x4d,0xad,0x58,0x4b,0xac, + 0xa9,0xa5,0x6a,0x2b,0xa1,0x68,0x44,0x7e,0xb7,0xb6,0x7a,0x4d,0xb7,0x58,0x4e,0x5a, + 0xaa,0x63,0x6a,0xb1,0xa1,0x6d,0x44,0xa2,0x45,0xb6,0xac,0x4d,0xbe,0x58,0x50,0x3a, + 0xaa,0xad,0x6a,0xc1,0xa1,0x71,0x44,0x21,0x45,0xb7,0x3a,0x4e,0x34,0x58,0x52,0x3a, + 0xab,0x5b,0x6b,0x3f,0xa1,0x76,0x44,0x71,0x31,0x35,0x72,0x4e,0x47,0x58,0x56,0xac, + 0xac,0x7b,0x6b,0x69,0xa1,0xa1,0x24,0x24,0xa7,0xb8,0x3e,0x4e,0x5b,0x58,0x5c,0xac, + 0xae,0x33,0x6b,0xa5,0xa1,0x2b,0x44,0x27,0xa7,0xb8,0x2e,0x4e,0x69,0x58,0x5f,0x5a, + 0xae,0xa5,0x6b,0xbd,0xa1,0x30,0x44,0x2a,0x35,0xb9,0x62,0x4e,0xa2,0x58,0x65,0x3a, + 0xb0,0x43,0x6c,0x65,0xa1,0xb0,0x24,0x2c,0x75,0xba,0x32,0x4e,0xa5,0x58,0x6a,0x7a, + 0xb1,0x6b,0x6c,0x23,0xa1,0xb9,0x24,0x2e,0xa7,0xba,0x6e,0x4e,0xb4,0x58,0x6e,0x3a, + 0xb2,0x73,0x6c,0xb5,0xa1,0xc0,0x44,0x30,0x75,0xba,0xbc,0x4d,0x31,0x58,0x71,0x7a, + 0xb3,0x4b,0x6d,0x39,0xa2,0x33,0x24,0xa3,0xa7,0xbb,0x4e,0x4f,0x39,0x58,0x73,0xac, + 0xb3,0xa5,0x6d,0x55,0xa2,0x3a,0x24,0xa5,0x75,0xbb,0x26,0x4f,0x47,0x58,0x78,0x3a, + 0xb4,0xad,0x6d,0x73,0xa2,0x42,0x24,0xa8,0x35,0xbc,0x56,0x4f,0x5d,0x58,0x7c,0x5a, + 0xb5,0xb5,0x6d,0xa5,0xa2,0x4a,0x24,0xa9,0x25,0xbc,0x2e,0x4f,0x6a,0x58,0xa1,0xac, + 0xb6,0xb5,0x6d,0xc1,0xa2,0x51,0x44,0xab,0x45,0xbd,0x3a,0x4f,0x75,0x58,0x22,0x5a, + 0xb7,0x6b,0x6e,0x41,0xa2,0x55,0x24,0xac,0x55,0xbd,0x5e,0x4f,0x7d,0x58,0x25,0x7a, + 0xb8,0x53,0x6e,0x5d,0xa2,0x61,0x24,0xaf,0x55,0xbe,0x4a,0x4f,0xab,0x58,0x2b,0x7a, + 0xb9,0x2b,0x6e,0x2b,0xa2,0x68,0x44,0xb1,0x45,0xbe,0x7a,0x4f,0xb8,0x58,0x2e,0xac, + 0xba,0x73,0x6e,0xb5,0xa2,0x6e,0x44,0xb2,0x25,0xbf,0x32,0x50,0x32,0x58,0xa3,0x7a, + 0xbb,0x5b,0x6f,0x3d,0xa2,0x74,0x24,0xb4,0x55,0xbf,0x62,0x50,0x3f,0x58,0xa7,0x3a, + 0xbc,0x43,0x6f,0x57,0xa2,0x7b,0x24,0xb5,0xa7,0xbf,0xa4,0x50,0x4a,0x58,0xa9,0x7a, + 0xbc,0xa5,0x6f,0x6d,0xa2,0xa2,0x24,0xb7,0x45,0xc0,0x3c,0xba,0xc1,0x32,0xc2,0x3d, + 0x7b,0x53,0x6f,0x27,0xa2,0x27,0x24,0xb9,0x35,0xc0,0x76,0x50,0x63,0x58,0xaf,0xac, + 0xbe,0x53,0x6f,0xaf,0xa2,0x2c,0x24,0xba,0x35,0xc0,0xa8,0x50,0x6b,0x58,0xb1,0xac, + 0xbe,0xa5,0x6f,0xbd,0xa2,0x30,0x44,0xbb,0x35,0xc1,0x36,0x50,0x73,0x58,0xb4,0x7a, + 0xbf,0x6b,0x70,0x41,0xa2,0xa7,0x24,0xbc,0x65,0xc1,0x62,0x50,0x7e,0x58,0xb7,0x7a, + 0xc0,0x4b,0x70,0x59,0xa2,0xad,0x24,0xbd,0xa7,0xc1,0xa8,0x50,0x2c,0x58,0xbb,0x3a, + 0xc1,0x43,0x70,0x79,0xa2,0xb5,0x24,0xbf,0xb7,0xc2,0x5e,0x50,0xaf,0x58,0xbf,0x3a, + 0xc2,0x43,0x70,0xab,0xa2,0xbd,0x24,0xc1,0xa7,0xc2,0x2e,0x50,0xbc,0x58,0xc1,0xc2, + 0x65,0xc2,0xb4,0x50,0xc0,0x58,0xc2,0xac,0xb3,0x33,0x71,0x33,0x21,0x32,0x45,0x31, + 0x66,0x31,0x42,0x51,0x36,0x59,0x32,0x7b,0x31,0x6b,0x71,0x41,0x21,0x35,0x25,0x32, + 0x56,0x31,0x31,0x31,0x3c,0x59,0x34,0x7b,0x32,0x33,0x71,0x53,0x21,0x3a,0x25,0x33, + 0x26,0x31,0x2a,0x51,0x48,0x59,0x37,0xad,0x32,0xad,0x71,0x6d,0x21,0x41,0x45,0x35, + 0x56,0x32,0x3e,0x51,0x55,0x59,0x3a,0xad,0x33,0x2b,0x71,0x2f,0x21,0x49,0x45,0x37, + 0x46,0x32,0x7a,0x51,0x64,0x59,0x3e,0x3b,0x34,0x5b,0x71,0xaf,0x21,0x4c,0x25,0x38, + 0x36,0x32,0xa8,0x51,0x6c,0x59,0x40,0x5b,0x34,0xbd,0x72,0x31,0x21,0x51,0x25,0x39, + 0x56,0x33,0x42,0x51,0x76,0x59,0x42,0x7b,0x35,0x7b,0x72,0x45,0x21,0x56,0x25,0x3a, + 0x26,0x33,0x72,0x51,0x22,0x59,0x45,0x7b,0x36,0x4b,0x72,0x59,0x21,0x5c,0x45,0x3b, + 0xb8,0x33,0xa4,0x51,0x2a,0x59,0x47,0xad,0x36,0xad,0x72,0x6d,0x21,0x60,0x25,0x3d, + 0x36,0x34,0x36,0x51,0xa5,0x59,0x49,0xad,0x37,0x53,0x72,0x7d,0x21,0x64,0x25,0x3e, + 0x36,0x34,0x56,0x51,0xad,0x59,0x4b,0xad,0x37,0xad,0x72,0x2d,0x21,0x68,0x25,0x3f, + 0x36,0x34,0x76,0x51,0xb5,0x59,0x4d,0xad,0x38,0x53,0x72,0xad,0x21,0x6d,0x45,0x40, + 0x46,0x34,0xac,0x51,0xbf,0x59,0x50,0x5b,0x39,0x3b,0x73,0x35,0x21,0x72,0x25,0x41, + 0x76,0x35,0x4a,0x52,0x38,0x59,0x53,0x5b,0x39,0x23,0x73,0x47,0x21,0x77,0x45,0x42, + 0xa8,0x35,0x6e,0x52,0x41,0x59,0x55,0x5b,0x3a,0x43,0x73,0x57,0x21,0x7b,0x45,0x43, + 0x26,0x35,0x2a,0x52,0x48,0x59,0x57,0x3b,0x3a,0x7b,0x73,0x65,0x21,0x7e,0x25,0x44, + 0x76,0x35,0xb8,0x52,0x4f,0x59,0x58,0xad,0x3b,0x33,0x73,0x73,0x21,0x22,0x45,0x45, + 0x76,0x36,0x4a,0x52,0x5b,0x59,0x5b,0xad,0x3b,0xad,0x73,0x2d,0x21,0x28,0x25,0x47, + 0x36,0x36,0x76,0x52,0x64,0x59,0x5e,0x3b,0x3c,0x5b,0x73,0xaf,0x21,0x2c,0x25,0x48, + 0x36,0x36,0xa8,0x52,0x6d,0xc0,0xc2,0x71,0x70,0xa6,0x43,0xbd,0x21,0x30,0x45,0x48, + 0xb8,0x37,0x32,0x52,0x72,0x59,0x61,0x7b,0x3d,0x4b,0x74,0x39,0x21,0xa5,0x25,0x49, + 0xa8,0x37,0x4e,0x52,0x79,0x59,0x63,0x5b,0x3d,0x23,0x74,0x47,0x21,0xa9,0x45,0x4a, + 0x26,0x37,0x6a,0x52,0x21,0x59,0x65,0x5b,0x3e,0x43,0x74,0x57,0x21,0xad,0x45,0x4b, + 0x26,0x37,0x2e,0x52,0x29,0x59,0x67,0x5b,0x3e,0x2b,0x74,0x69,0x21,0xb1,0x25,0x4c, + 0xa8,0x37,0xc0,0x52,0xa3,0x59,0x69,0x5b,0x3f,0x43,0x74,0x77,0x21,0xb5,0x45,0x4d, + 0x26,0x38,0x52,0x52,0xac,0x59,0x6b,0x7b,0x3f,0x2b,0x74,0x2f,0x21,0xbb,0x45,0x4f, + 0x46,0x38,0x7a,0x52,0xb7,0x59,0x6e,0x7b,0x40,0x6b,0x74,0xb3,0x21,0xbf,0x25,0x50, + 0x56,0x38,0xb4,0x52,0xc0,0x59,0x70,0x7b,0x40,0xbd,0x71,0x31,0x22,0x31,0x25,0x51, + 0x56,0x39,0x3e,0x53,0x35,0x59,0x72,0x5b,0x41,0x73,0x75,0x31,0x31,0x35,0x25,0x52, + 0x56,0x39,0x62,0x53,0x3e,0x59,0x74,0x7b,0x41,0xbd,0x75,0x51,0x22,0x39,0x25,0x53, + 0x66,0x39,0x22,0x53,0x46,0x59,0x76,0x7b,0x42,0x6b,0x75,0x61,0x22,0x3d,0x25,0x54, + 0x56,0x39,0xb0,0x53,0x4d,0x59,0x78,0x5b,0x42,0xb5,0x75,0x6f,0x22,0x41,0x45,0x55, + 0x56,0x3a,0x3e,0x53,0x55,0x59,0x7a,0x5b,0x43,0x63,0x75,0xa1,0x22,0x45,0x45,0x56, + 0x46,0x3a,0x5a,0x53,0x5c,0x59,0x7c,0x3b,0x43,0xad,0x75,0x2d,0x22,0x48,0x25,0x57, + 0x36,0x3a,0x76,0x53,0x63,0x59,0x7d,0xad,0x44,0x53,0x75,0xad,0x22,0x4c,0x45,0x57, + 0xb8,0x3a,0xa4,0x53,0x6a,0x59,0xa1,0x7b,0x44,0x2b,0x75,0xbb,0x22,0x4f,0x25,0x58, + 0xa8,0x3b,0x3a,0x53,0x78,0x59,0x23,0x7b,0x45,0xa5,0x76,0x4d,0x22,0x58,0x25,0x5b, + 0x36,0x3b,0x7a,0x53,0x24,0x59,0x26,0xad,0x46,0x73,0x76,0x63,0x22,0x5e,0x25,0x5c, + 0x26,0x3b,0xbc,0x53,0x30,0x59,0x29,0x3b,0x47,0x3b,0x76,0x77,0x22,0x63,0x45,0x5d, + 0xa8,0x3c,0x4e,0x53,0xac,0x59,0x2b,0x7b,0x47,0xbd,0x76,0xa7,0x22,0x6e,0x45,0x60, + 0xa8,0x3c,0xc0,0x54,0x34,0x59,0xa4,0x3b,0x49,0x63,0x77,0x3f,0x22,0x76,0x45,0x62, + 0x66,0x3d,0x6a,0x54,0x40,0x59,0xa7,0x3b,0x4a,0x3b,0x77,0x57,0x22,0x7b,0x45,0x64, + 0x36,0x3d,0xac,0x54,0x4e,0x59,0xaa,0x7b,0x4a,0xbd,0x77,0x73,0x22,0x22,0x25,0x65, + 0xa8,0x3e,0x4e,0x54,0x59,0x59,0xad,0x5b,0x4b,0x23,0x77,0x2b,0x22,0x28,0x45,0x67, + 0x76,0x3e,0xa4,0x54,0x6a,0x59,0xb1,0x7b,0x4c,0xb5,0x77,0xc1,0x22,0xa3,0x25,0x69, + 0x56,0x3f,0x3e,0x54,0x76,0x59,0xb5,0x3b,0x4d,0x23,0x78,0x4b,0x22,0xaa,0x45,0x6b, + 0x36,0x3f,0x7a,0x54,0x24,0x59,0xb8,0x3b,0x4e,0x5b,0x78,0x5d,0x22,0xae,0xc1,0xc2, + 0xa3,0x50,0xb4,0x7a,0x29,0x59,0xb9,0x5b,0x4e,0x23,0x78,0x69,0x22,0xb2,0x45,0x6c, + 0xb8,0x40,0x3a,0x54,0xa6,0x59,0xbc,0x5b,0x4f,0x63,0x78,0xa1,0x22,0xb7,0x45,0x6e, + 0x46,0x40,0x5a,0x54,0xaf,0x59,0xbe,0x7b,0x50,0x3b,0x78,0xa7,0x22,0xbd,0x45,0x6f, + 0xb8,0x40,0xbc,0x53,0x35,0x5a,0x32,0x5b,0x51,0x7b,0x79,0x47,0x23,0x37,0x45,0x72, + 0xb8,0x41,0x72,0x55,0x44,0x5a,0x36,0x3b,0x52,0x5b,0x79,0x69,0x23,0x40,0x45,0x74, + 0xb8,0x42,0x36,0x55,0x53,0x5a,0x39,0xad,0x53,0x5b,0x79,0x7d,0x23,0x44,0x25,0x76, + 0x56,0x42,0x62,0x55,0x60,0x5a,0x3d,0x5b,0x54,0x43,0x79,0xab,0x23,0x4b,0x25,0x78, + 0x76,0x42,0xbc,0x55,0x75,0x5a,0x42,0x5b,0x55,0x63,0x7a,0x3f,0x23,0x55,0x45,0x7a, + 0x46,0x43,0x5e,0x55,0xa1,0x5a,0x44,0xad,0x56,0x43,0x7a,0x57,0x23,0x5b,0x25,0x7b, + 0xb8,0x43,0xa4,0x55,0x31,0x31,0x47,0x5b,0x56,0x23,0x7a,0x67,0x23,0x5f,0x25,0x7c, + 0xb8,0x44,0x32,0x55,0xa5,0x5a,0x49,0xad,0x57,0x53,0x7a,0x7d,0x23,0x65,0x45,0x7e, + 0x66,0x44,0x62,0x55,0xb0,0x5a,0x4c,0x7b,0x58,0x33,0x7a,0xa5,0x23,0x6a,0x25,0xa1, + 0x76,0x44,0x26,0x55,0xb9,0x5a,0x4e,0xad,0x58,0x73,0x7a,0xb5,0x23,0x6e,0x45,0xa2, + 0x66,0x44,0xb4,0x55,0xc1,0x5a,0x51,0x3b,0x59,0x4b,0x7b,0x39,0x23,0x73,0x25,0x21, + 0xa8,0x45,0x4e,0x56,0x3a,0x5a,0x53,0x7b,0x59,0x2b,0x7b,0x49,0x23,0x77,0x25,0x22, + 0xa8,0x45,0x6e,0x56,0x42,0x5a,0x55,0x7b,0x5a,0x53,0x7b,0x5b,0x23,0x7c,0x45,0x23, + 0xb8,0x45,0xa4,0x56,0x4a,0x5a,0x57,0x7b,0x5a,0xa5,0x7b,0x79,0x23,0x23,0x25,0x25, + 0xa8,0x46,0x4e,0x56,0x5f,0x5a,0x5c,0xad,0x5c,0x33,0x7b,0xab,0x23,0x2b,0x25,0x27, + 0xa8,0x46,0x2e,0x56,0x69,0x5a,0x5f,0x5b,0x5c,0x23,0x7b,0xb9,0x23,0x2f,0x45,0x28, + 0x26,0x47,0x32,0x56,0x72,0x5a,0x61,0x7b,0x5d,0x53,0x7c,0x3b,0x23,0xa6,0x45,0x2a, + 0x36,0x47,0x5a,0x56,0x7d,0x5a,0x64,0x5b,0x5d,0xb5,0x7c,0x4f,0x23,0xab,0x25,0x2b, + 0x66,0x47,0x22,0x56,0x26,0x5a,0x66,0xad,0x5e,0x7b,0x7c,0x65,0x23,0xb0,0x25,0x2c, + 0x76,0x47,0xb8,0x56,0x2f,0x5a,0x69,0x3b,0x5f,0x3b,0x7c,0x75,0x23,0xb4,0x25,0x2d, + 0x26,0x48,0x4a,0x56,0xaa,0x5a,0x6b,0x3b,0x5f,0x7b,0x7c,0x25,0x23,0xb8,0x25,0x2e, + 0x76,0x48,0x66,0x56,0xb1,0x5a,0x6c,0xad,0x60,0x3b,0x7c,0xa7,0x23,0xbc,0x25,0x2f, + 0x76,0x48,0x26,0x56,0xb9,0x5a,0x6e,0xad,0x60,0x73,0x7c,0xba,0xbe,0x5a,0x70,0x3b, + 0x60,0xad,0x79,0x33,0x24,0x32,0x45,0xa3,0x66,0x49,0x42,0x57,0x38,0x5a,0x73,0x5b, + 0x61,0x23,0x7d,0x47,0x24,0x37,0x45,0xa4,0xb2,0x30,0xbb,0x38,0xbf,0x62,0x35,0x5b, + 0x62,0x43,0x7d,0x57,0x24,0x3b,0x45,0xa6,0x36,0x49,0xb0,0x57,0x4d,0x5a,0x78,0x7b, + 0x62,0xbd,0x7d,0x75,0x24,0x43,0x45,0xa7,0x26,0x4a,0x4e,0x57,0x59,0x5a,0x7b,0x5b, + 0x63,0x2b,0x7d,0x29,0x24,0x47,0x25,0xa8,0xb8,0x4a,0x72,0x57,0x62,0x5a,0x7d,0x7b, + 0x64,0x4b,0x7d,0xab,0x24,0x4b,0x25,0xa9,0xa8,0x4a,0x2e,0x57,0x69,0x5a,0xa2,0x3b, + 0x64,0xad,0x7e,0x31,0x24,0x52,0x45,0xab,0x76,0x4b,0x4a,0x57,0x7c,0x5a,0x24,0x3b, + 0x65,0xad,0x7e,0x51,0x24,0x5b,0x45,0xae,0x36,0x4b,0xa8,0x57,0x2c,0x5a,0x28,0x5b, + 0x67,0x5b,0x7e,0x21,0x24,0x66,0x45,0xb0,0x76,0x4c,0x66,0x57,0xb5,0x5a,0x2e,0x7b, + 0x68,0x7b,0x7e,0xb9,0x24,0x6f,0x45,0xb2,0x26,0x4c,0xbc,0x58,0x31,0x5a,0xa3,0x5b, + 0x69,0x4b,0xa1,0x3f,0x24,0x75,0x45,0xb4,0x56,0x4d,0x6a,0x58,0x40,0x5a,0x71,0x31, + 0x3a,0x33,0xa1,0x53,0x24,0x7a,0x45,0xb5,0x66,0x4d,0x22,0x58,0x47,0x5a,0xa8,0xad, + 0x6a,0x7b,0xa1,0x67,0x24,0xa1,0x45,0xb6,0xa8,0x4e,0x32,0x58,0x52,0x5a,0xac,0x3b, + 0x6b,0x6b,0xa1,0x25,0x24,0x26,0x25,0xb8,0x76,0x4e,0x66,0x58,0x60,0x5a,0xaf,0x3b, + 0x6c,0x3b,0xa1,0xa7,0x24,0x2a,0x25,0xb9,0x76,0x4e,0x26,0x58,0x68,0x5a,0xb1,0x3b, + 0x6c,0x7b,0xa1,0xb7,0x24,0x2f,0x45,0xba,0x26,0x4e,0xbc,0x58,0x71,0x5a,0xb3,0xad, + 0x6d,0x53,0xa2,0x3b,0x24,0xa6,0x45,0xbb,0xb8,0x4f,0x6a,0x58,0xa2,0x5a,0xb7,0x3b, + 0x6e,0x43,0xa2,0x57,0x24,0xad,0x25,0xbe,0x56,0x4f,0xb4,0x58,0x2e,0x5a,0xba,0x7b, + 0x6f,0x3b,0xa2,0x75,0x24,0xb6,0x25,0xc1,0x76,0x50,0xac,0x58,0xc1,0x5a,0xc2,0xad, + 0x61,0x33,0x21,0x35,0x25,0x33,0x26,0x31,0xb8,0x51,0x5e,0x59,0x45,0x5b,0x37,0x3b, + 0x72,0x7b,0x21,0x65,0x25,0x3f,0x46,0x35,0x56,0x52,0x42,0x59,0x56,0x5b,0x3b,0x7b, + 0x74,0x33,0x21,0xa9,0x25,0x4c,0x46,0x37,0xb8,0x52,0xac,0x59,0x6e,0x5b,0x40,0xad, + 0x75,0x3b,0x22,0x35,0x25,0x53,0x46,0x39,0x26,0x53,0x4e,0x59,0x7a,0x5b,0x44,0x3b, + 0x75,0xad,0x22,0x4d,0x25,0x58,0x26,0x3b,0x46,0x53,0xac,0x59,0x2e,0x5b,0x48,0x7b, + 0x76,0xbd,0x22,0x71,0x25,0x61,0x26,0x3d,0x66,0x54,0x46,0x59,0xaa,0x5b,0x4b,0x5b, + 0x77,0x23,0x22,0x27,0x25,0x67,0x46,0x3e,0x26,0x54,0x6a,0x59,0xb2,0x5b,0x4d,0x3b, + 0x78,0x53,0x22,0xb5,0x25,0x6e,0x46,0x40,0xa8,0x54,0xc0,0x5a,0x32,0x5b,0x51,0xad, + 0x79,0x5b,0x23,0x3f,0x25,0x75,0x46,0x42,0x46,0x55,0x5a,0x5a,0x3e,0x5b,0x55,0x5b, + 0x7a,0x4b,0x23,0x5f,0x25,0x7d,0x46,0x44,0x76,0x55,0xbc,0x5a,0x50,0x5b,0x59,0x3b, + 0x7b,0x40,0xb2,0xbf,0x34,0xc1,0x49,0x25,0x56,0x56,0x46,0x5a,0x5f,0x5b,0x5d,0x3b, + 0x7c,0x43,0x23,0xad,0x25,0x2c,0x46,0x47,0xb8,0x56,0xa8,0x5a,0x6b,0x5b,0x60,0x3b, + 0x7c,0xb5,0x24,0x37,0x25,0xa5,0x26,0x4a,0x56,0x57,0x5e,0x5a,0x27,0x5b,0x67,0x3b, + 0x7e,0x2b,0x24,0x71,0x25,0xb3,0x26,0x4d,0x56,0x58,0x3e,0x5a,0xa7,0x5b,0x6b,0xad, + 0xa1,0xa5,0x24,0x2f,0x25,0xbb,0x46,0x4f,0x46,0x58,0x22,0x5a,0xb8,0x5b,0x6e,0x7b, + 0xa2,0x6b,0x24,0xb3,0x25,0xbf,0x26,0x50,0x70,0x2b,0x24,0xbf,0x25,0x31,0x46,0x51, + 0x56,0x59,0x3e,0x5b,0x35,0x5b,0x72,0x5b,0x21,0x73,0x25,0x45,0x26,0x36,0x26,0x52, + 0x76,0x59,0x66,0x5b,0x3f,0x5b,0x75,0x7b,0x22,0x4b,0x25,0x5b,0x26,0x3c,0x46,0x53, + 0xb8,0x59,0xa4,0x5b,0x4a,0x5b,0x77,0x7b,0x22,0xa5,0x25,0x6b,0x26,0x40,0x46,0x54, + 0xb8,0x5a,0x36,0x5b,0x56,0x5b,0x7a,0x7b,0x21,0x31,0x31,0x21,0x26,0x45,0x26,0x56, + 0x66,0x5a,0x66,0x5b,0x63,0x5b,0x7e,0x3b,0x24,0x5b,0x25,0xaf,0x26,0x4d,0x46,0x58, + 0x46,0x5a,0xac,0x5b,0x6c,0x5b,0xa2,0x5b,0x25,0x33,0x26,0x35,0x26,0x53,0x26,0x59, + 0xb8,0x5b,0x52,0x5b,0x7c,0x5b,0x24,0x3b,0x25,0xad,0x26,0x4d,0x26,0x58,0x26,0x5b, + 0x46,0x5b,0x7a,0x5b,0x24,0x5b,0x26,0x3b,0x26,0x6b,0x26,0x61,0x26,0x5d,0x26,0x5c, + 0x56,0x5b,0xb0,0x5b,0x2e,0x5b,0x28,0x7b,0x26,0xbd,0x26,0x71,0x26,0x62,0x46,0x5d, + 0x66,0x5c,0x52,0x5b,0xac,0x5b,0x2b,0xad,0x27,0xbd,0x26,0xa3,0x26,0x69,0x26,0x5f, + 0x56,0x5c,0x7e,0x5b,0xb7,0x5b,0x2f,0x5b,0x28,0x23,0x26,0xbd,0x26,0x70,0x26,0x61, + 0x26,0x5d,0x4a,0x5c,0x3d,0x5b,0xa6,0x5b,0x29,0xb5,0x27,0x51,0x26,0x7a,0x46,0x63, + 0x66,0x5d,0x26,0x5c,0x47,0x5b,0xa8,0xad,0x2a,0x23,0x27,0x67,0x26,0xa2,0x46,0x65, + 0x36,0x5e,0x36,0x5c,0x53,0x5b,0xab,0xad,0x2b,0x53,0x27,0x7b,0x26,0x24,0x46,0x66, + 0x36,0x5e,0x56,0x5c,0x5b,0x5b,0xad,0xad,0x2b,0xa5,0x27,0x2b,0x26,0x28,0x46,0x66, + 0xb8,0x5e,0x72,0x5c,0x63,0x5b,0xb0,0x3b,0x2c,0x63,0x27,0xb3,0x26,0x2e,0x46,0x68, + 0x76,0x5e,0xc0,0x5c,0x71,0x5b,0xb3,0x5b,0x2d,0x43,0x28,0x37,0x26,0xa6,0x46,0x69, + 0xb8,0x5f,0x52,0x5c,0x7b,0x5b,0xb5,0xad,0x2d,0xb5,0x28,0x4f,0x26,0xab,0x46,0x6b, + 0x26,0x5f,0x2e,0x5c,0x29,0x5b,0xb9,0x5b,0x2e,0x23,0x28,0x67,0x26,0xb2,0x46,0x6d, + 0x36,0x60,0x3a,0x5c,0xaa,0x5b,0xbd,0x5b,0x2f,0xad,0x28,0x2d,0x26,0xbb,0x46,0x6f, + 0x46,0x60,0x22,0x5c,0xb9,0x5b,0xc1,0x3b,0x30,0x7b,0x28,0xb7,0x26,0xc0,0xc1,0xad, + 0x30,0xa5,0x28,0xc1,0x26,0x32,0x46,0x71,0x66,0x61,0x42,0x5d,0x36,0xc0,0xc2,0x71, + 0x70,0xa6,0x31,0x3d,0x27,0x34,0x26,0x72,0x56,0x61,0x5e,0x5d,0x3e,0x5c,0x35,0x3b, + 0xa4,0x3b,0x29,0x55,0x27,0x3a,0x26,0x73,0x76,0x61,0x26,0x5d,0x47,0x5c,0x36,0xad, + 0xa4,0x7b,0x29,0x65,0x27,0x3f,0x46,0x74,0x26,0x62,0x32,0x5d,0x52,0x5c,0x39,0x7b, + 0xa5,0x5b,0x29,0x7d,0x27,0x45,0x46,0x76,0x46,0x62,0x5a,0x5d,0x5c,0x5c,0x3c,0x7b, + 0xa5,0xbd,0x29,0xa3,0x27,0x4a,0x26,0x77,0x26,0x62,0x2e,0x5d,0x69,0x5c,0x3f,0x7b, + 0xa6,0xa5,0x29,0xbd,0x27,0x50,0x46,0x79,0x36,0x63,0x36,0x5d,0x73,0x5c,0x41,0xad, + 0xa7,0x53,0x2a,0x3b,0x27,0x54,0x46,0x79,0xb8,0x63,0x52,0x5d,0x7a,0x5c,0x43,0x7b, + 0xa7,0x2b,0x2a,0x4f,0x27,0x59,0x46,0x7b,0x46,0x63,0x7a,0x5d,0x24,0x5c,0x46,0x5b, + 0xa8,0x63,0x2a,0x65,0x27,0x5e,0x26,0x7c,0x26,0x63,0xbc,0x5d,0x30,0x5c,0x49,0x3b, + 0xa9,0x3b,0x29,0x31,0x31,0x62,0x26,0x7d,0x26,0x64,0x4a,0x5d,0xaa,0x5c,0x4c,0x5b, + 0xa9,0xb5,0x2a,0x2f,0x27,0x69,0x46,0xa1,0x56,0x64,0x7e,0x5d,0xb7,0x5c,0x4e,0x5b, + 0xaa,0x6b,0x2a,0xb3,0x27,0x6d,0x26,0xa2,0x56,0x64,0xb8,0x5d,0xc1,0x5c,0x50,0xad, + 0xab,0x33,0x2b,0x33,0x27,0x72,0x46,0x21,0x66,0x65,0x42,0x5e,0x38,0x5c,0x53,0x3b, + 0xab,0x7b,0x2b,0x45,0x27,0x76,0x26,0x22,0x76,0x65,0x66,0x5e,0x41,0x5c,0x55,0x5b, + 0xac,0x43,0x2b,0x59,0x27,0x7b,0x26,0x23,0xa8,0x65,0x2e,0x5e,0x49,0x5c,0x57,0x5b, + 0xac,0x23,0x2b,0x67,0x27,0xa1,0x46,0x24,0x26,0x65,0xbc,0x5e,0x50,0x5c,0x59,0x3b, + 0xad,0x3b,0x2b,0x75,0x27,0x23,0x46,0x25,0x26,0x66,0x4a,0x5e,0x58,0x5c,0x5b,0x3b, + 0xad,0x7b,0x2b,0x25,0x27,0x26,0x26,0x26,0x76,0x66,0x66,0x5e,0x5f,0x5c,0x5d,0x3b, + 0xae,0x3b,0x2b,0xa7,0x27,0x2a,0x26,0x27,0x76,0x66,0x26,0x5e,0x67,0x5c,0x5f,0x3b, + 0xae,0x7b,0x2b,0xb7,0x27,0x2e,0x26,0x28,0x26,0x66,0xbc,0x5e,0x70,0x5c,0x61,0x3b, + 0xaf,0x3b,0x2c,0x35,0x27,0xa4,0x26,0x29,0x76,0x67,0x46,0x5e,0x77,0x5c,0x62,0xad, + 0xaf,0x73,0x2c,0x43,0x27,0xa8,0x26,0x2a,0x76,0x67,0x66,0x5e,0xa1,0x5c,0x64,0xad, + 0xb0,0x33,0x2c,0x53,0x27,0xac,0x46,0x2b,0x66,0x67,0x26,0x5e,0x27,0x5c,0x67,0x3b, + 0xb0,0x7b,0x2c,0x69,0x27,0xb4,0x26,0x2d,0x26,0x68,0x4a,0x5e,0xaa,0x5c,0x6b,0x3b, + 0xb1,0x7b,0x2c,0x25,0x27,0xb9,0x46,0x2e,0xa8,0x68,0x6e,0x5e,0xb5,0x5c,0x6d,0xad, + 0xb2,0x63,0x2c,0xb1,0x27,0xbf,0x46,0x30,0x70,0x2b,0x2c,0xbb,0x27,0x31,0x46,0xa3, + 0x46,0x69,0x3a,0x5f,0x36,0x5c,0x72,0xad,0xb3,0x2b,0x2d,0x49,0x28,0x37,0x26,0xa4, + 0xa8,0x69,0x6e,0x5f,0x41,0x5c,0x75,0x70,0x70,0xb3,0x40,0xbb,0xa3,0x3a,0x46,0xa5, + 0x66,0x69,0x22,0x5f,0x46,0x5c,0x76,0x7b,0xb4,0x6b,0x2d,0x61,0x28,0x3d,0x26,0xa6, + 0x56,0x69,0xb0,0x5f,0x4e,0x5c,0x78,0x7b,0xb5,0x33,0x2d,0x73,0x28,0x42,0x46,0xa7, + 0x76,0x6a,0x46,0x5f,0x57,0x5c,0x7a,0xad,0xb5,0x2b,0x2d,0xa5,0x28,0x4a,0x46,0xa9, + 0x76,0x6a,0x26,0x5f,0x67,0x5c,0x7e,0xad,0xb6,0x73,0x2d,0xbb,0x28,0x4f,0x26,0xaa, + 0xb8,0x6b,0x36,0x5f,0x74,0x5c,0x22,0x3b,0xb7,0x5b,0x2e,0x3d,0x28,0x55,0x46,0xac, + 0x46,0x6b,0x5e,0x5f,0x23,0x5c,0x25,0xad,0xb8,0x53,0x2e,0x5b,0x28,0x5c,0x46,0xae, + 0x36,0x6b,0xa8,0x5f,0xa5,0x5c,0x29,0xad,0xb9,0x5b,0x2e,0xa1,0x28,0x67,0x46,0xb0, + 0xa8,0x6c,0x72,0x5f,0xb4,0x5c,0x2d,0x7b,0xba,0x53,0x2e,0xad,0x28,0x6d,0x46,0xb2, + 0x46,0x6c,0xac,0x5f,0xc0,0x5c,0x30,0x7b,0xba,0xbd,0x2f,0x31,0x28,0x31,0x31,0x41, + 0x46,0x6d,0x4e,0x60,0x39,0x5c,0xa5,0x5b,0xbb,0x23,0x2f,0x4b,0x28,0x78,0x46,0xb4, + 0xb8,0x6d,0x72,0x60,0x42,0x5c,0xa8,0x3b,0xbc,0x5b,0x2f,0x5d,0x28,0x7c,0x26,0xb6, + 0x36,0x6d,0xa8,0x60,0x4b,0x5c,0xaa,0x3b,0xbc,0xad,0x2f,0x6d,0x28,0xa2,0x26,0xb7, + 0x26,0x6e,0x52,0x60,0x5b,0x5c,0xae,0x3b,0xbd,0xbd,0x2f,0xa3,0x28,0x29,0x26,0xb9, + 0x66,0x6e,0x26,0x60,0x67,0x5c,0xb0,0xad,0xbe,0x7b,0x2f,0xb7,0x28,0x2e,0x26,0xba, + 0x76,0x6e,0xb8,0x60,0x6f,0x5c,0xb2,0xad,0xbf,0x33,0x30,0x33,0x28,0xa5,0x46,0xbb, + 0x26,0x6f,0x4a,0x60,0x78,0x5c,0xb5,0x3b,0xbf,0x7b,0x30,0x45,0x28,0xa9,0x46,0xbc, + 0x26,0x6f,0x72,0x60,0x22,0x5c,0xb7,0xad,0xc0,0x63,0x30,0x5f,0x28,0xb0,0x26,0xbe, + 0x76,0x6f,0xbc,0x60,0xa4,0x5c,0xbb,0x7b,0xc1,0x4b,0x30,0x7b,0x28,0xb6,0x46,0xbf, + 0xb8,0x70,0x52,0x60,0xac,0x5c,0xbd,0x7b,0xc1,0x2b,0x30,0x29,0x28,0xba,0x46,0xc1, + 0x36,0x70,0x76,0x60,0xb5,0x5c,0xbf,0xad,0xc2,0x5b,0x30,0xaf,0x28,0xbe,0x26,0xc2, + 0x70,0x2b,0x30,0xbb,0x28,0xc2,0x46,0xc2,0xb8,0x69,0x36,0x61,0x34,0x5d,0x32,0x3c, + 0x31,0x5b,0xa3,0x41,0x29,0x35,0x27,0x32,0x56,0x71,0x62,0x61,0x3f,0x5d,0x34,0xae, + 0x32,0x33,0xa3,0x55,0x29,0x3a,0x27,0x33,0x76,0x71,0x2a,0x61,0x48,0x5d,0x37,0x3c, + 0x32,0x23,0xa3,0x67,0x29,0x3f,0x47,0x34,0x26,0x71,0xc0,0x61,0x53,0x5d,0x39,0xae, + 0x33,0x5b,0xa3,0x7d,0x29,0x44,0x27,0x36,0x36,0x72,0x56,0x61,0x5c,0x5d,0x3c,0x3c, + 0x33,0xad,0xa3,0x2d,0x29,0x48,0x27,0x37,0x46,0x72,0x7a,0x61,0x64,0x5d,0x3e,0x3c, + 0x34,0x63,0xa3,0xb1,0x29,0x4d,0x47,0x38,0x46,0x72,0xac,0x61,0x6c,0x5d,0x40,0x3c, + 0x34,0xb2,0xb2,0xbf,0x34,0xc1,0x49,0x38,0xa8,0x72,0xc0,0x61,0x71,0x5d,0x41,0x5c, + 0x35,0x43,0xa4,0x37,0x29,0x53,0x27,0x39,0xa8,0x73,0x4e,0x61,0x79,0x5d,0x43,0x5c, + 0x35,0x23,0xa4,0x47,0x29,0x58,0x47,0x3a,0xb8,0x73,0x72,0x61,0x23,0x5d,0x45,0xae, + 0x36,0x5b,0xa4,0x5d,0x29,0x5c,0x27,0x3c,0x46,0x73,0xac,0x61,0x2c,0x5d,0x48,0x3c, + 0x36,0xad,0xa4,0x6f,0x29,0x61,0x47,0x3d,0x46,0x74,0x3a,0x61,0xa6,0x5d,0x4a,0x3c, + 0x37,0x63,0xa4,0xa1,0x29,0x65,0x47,0x3e,0x46,0x74,0x5a,0x61,0xb0,0x5d,0x4c,0x7c, + 0x37,0xbd,0xa4,0xa3,0x29,0x69,0x27,0x3f,0x56,0x74,0x7e,0x61,0xb7,0x5d,0x4e,0x5c, + 0x38,0x63,0xa4,0xb1,0x29,0x6d,0x47,0x40,0x46,0x74,0xac,0x61,0xbe,0x5d,0x50,0x3c, + 0x38,0xad,0xa4,0xc1,0x29,0x72,0x47,0x41,0x76,0x75,0x4a,0x62,0x38,0x5d,0x53,0x3c, + 0x39,0x23,0xa5,0x47,0x29,0x77,0x47,0x31,0x31,0x35,0x66,0x62,0x3f,0x5d,0x54,0xae, + 0x3a,0x33,0xa5,0x53,0x29,0x7b,0x47,0x43,0x26,0x75,0x2a,0x62,0x48,0x5d,0x57,0x3c, + 0x3a,0x2b,0xa5,0x69,0x29,0xa1,0x27,0x45,0x36,0x76,0x36,0x62,0x53,0x5d,0x59,0xae, + 0x3b,0x53,0xa5,0x7b,0x29,0x24,0x47,0x45,0xb8,0x76,0x5a,0x62,0x5c,0x5d,0x5c,0x3c, + 0x3b,0xad,0xa5,0x2d,0x29,0x28,0x27,0x47,0x36,0x76,0x76,0x62,0x63,0x5d,0x5d,0xae, + 0x3c,0x53,0xa5,0xad,0x29,0x2c,0x47,0x47,0xb8,0x76,0xa4,0x62,0x6a,0x5d,0x5f,0x7c, + 0x3c,0x2b,0xa5,0xbd,0x29,0x30,0x47,0x48,0xb8,0x77,0x32,0x62,0x73,0x5d,0x61,0xae, + 0x3d,0x53,0xa6,0x3d,0x29,0xa6,0x27,0x4a,0x36,0x77,0x56,0x62,0x7b,0x5d,0x63,0xae, + 0x3d,0xa5,0xa6,0x4b,0x29,0xaa,0x47,0x4a,0xb8,0x77,0x72,0x62,0x23,0x5d,0x65,0xae, + 0x3e,0x53,0xa6,0x5d,0x29,0xae,0x27,0x4c,0x36,0x77,0xa8,0x62,0x2b,0x5d,0x67,0xae, + 0x3e,0xa5,0xa6,0x6b,0x29,0xb2,0x47,0x4c,0xb8,0x78,0x32,0x62,0xa4,0x5d,0x69,0x7c, + 0x3f,0x4b,0xa6,0x7b,0x29,0xb6,0x47,0x4d,0xb8,0x78,0x52,0x62,0xac,0x5d,0x6b,0x7c, + 0x3f,0xad,0xa6,0x2f,0x29,0xbb,0x27,0x4f,0x56,0x78,0x22,0x62,0xb8,0x5d,0x6e,0xae, + 0x40,0x73,0xa6,0xb7,0x29,0xc0,0xc1,0xae,0x40,0xa5,0xa6,0xbd,0x29,0xc2,0x47,0x50, + 0xb8,0x71,0x32,0x63,0x32,0x5d,0x71,0xae,0x41,0x5b,0xa7,0x3d,0x2a,0x35,0x47,0x52, + 0x46,0x79,0x5a,0x63,0x3c,0x5d,0x74,0x3c,0x41,0xb5,0xa7,0x51,0x2a,0x39,0x27,0x53, + 0x56,0x79,0x7e,0x63,0x48,0x5d,0x77,0x3c,0x42,0x2b,0xa7,0x6b,0x2a,0x40,0x47,0x55, + 0x36,0x7a,0x36,0x63,0x53,0x5d,0x79,0xae,0x43,0x63,0xa7,0x21,0x2a,0x47,0x47,0x57, + 0x36,0x7a,0x7a,0x63,0x64,0x5d,0x7e,0x5c,0x44,0x63,0xa7,0xba,0xbe,0xc2,0x31,0xc2, + 0x77,0x32,0xb8,0x63,0x6f,0x5d,0xa2,0xae,0x45,0x33,0xa8,0x37,0x2a,0x53,0x27,0x59, + 0xa8,0x7b,0x5a,0x63,0x7d,0x5d,0x24,0x5c,0x46,0x33,0xa8,0x55,0x2a,0x5a,0x27,0x5c, + 0x46,0x7b,0xb0,0x63,0x2d,0x5d,0x28,0x5c,0x46,0xb5,0xa8,0x6f,0x2a,0x61,0x27,0x5d, + 0x66,0x7c,0x42,0x63,0xa9,0x5d,0x2a,0xae,0x47,0x73,0xa8,0x23,0x2a,0x66,0x47,0x5e, + 0x66,0x7c,0x62,0x63,0xb0,0x5d,0x2c,0x7c,0x47,0xbd,0xa8,0xa3,0x2a,0x69,0x27,0x5f, + 0x56,0x7c,0x26,0x63,0xba,0x5d,0x2f,0x7c,0x48,0x2b,0xa8,0xbb,0x2a,0x70,0x47,0x60, + 0xb8,0x7d,0x32,0x64,0x36,0x5d,0xa5,0x5c,0x49,0x2b,0xa9,0x49,0x2a,0x78,0x47,0x62, + 0xb8,0x7d,0x72,0x64,0x42,0x5d,0xa8,0x3c,0x4a,0x5b,0xa9,0x61,0x2a,0x7e,0x47,0x64, + 0x66,0x7d,0xb4,0x64,0x4e,0x5d,0xaa,0xae,0x4b,0x33,0xa9,0x73,0x2a,0x22,0x47,0x65, + 0xa8,0x79,0x31,0x32,0x58,0x5d,0xae,0x3c,0x4b,0xad,0xa9,0xa3,0x2a,0x29,0x27,0x67, + 0x66,0x7e,0x22,0x64,0x66,0x5d,0xb0,0x7c,0x4c,0x6b,0xa9,0xb3,0x2a,0x2e,0x47,0x68, + 0x76,0x7e,0xb8,0x64,0x70,0x5d,0xb3,0x3c,0x4d,0x3b,0xaa,0x35,0x2a,0xa4,0x27,0x69, + 0x76,0xa1,0x46,0x64,0x78,0x5d,0xb5,0x3c,0x4d,0x7b,0xaa,0x49,0x2a,0xa9,0x27,0x6a, + 0xa8,0xa1,0x6e,0x64,0x26,0x5d,0xb8,0x7c,0x4e,0x7b,0xaa,0x67,0x2a,0xb2,0x47,0x6c, + 0xb8,0xa2,0x32,0x64,0xa4,0x5d,0xbb,0x7c,0x4f,0x53,0xaa,0x7d,0x2a,0xb6,0x27,0x6e, + 0x46,0xa2,0x5a,0x64,0xae,0x5d,0xbe,0x5c,0x4f,0xb5,0xaa,0x2f,0x2a,0xbb,0x47,0x6f, + 0x46,0xa2,0x7a,0x64,0xb6,0x5d,0xc0,0x3c,0x50,0x5b,0xaa,0xaf,0x2a,0xbe,0x27,0x70, + 0x36,0xa2,0xac,0x64,0xbf,0x5d,0xc2,0x5c,0x50,0xb5,0xa7,0x31,0x2b,0x32,0x47,0x72, + 0x56,0x21,0x5e,0x65,0x3e,0x5e,0x34,0x7c,0x51,0xbd,0xab,0x51,0x2b,0x3a,0x47,0x73, + 0x76,0x21,0x26,0x65,0x47,0x5e,0x36,0xae,0x52,0x7b,0xab,0x65,0x2b,0x3e,0x27,0x74, + 0x26,0x21,0xbc,0x65,0x52,0x5e,0x39,0x7c,0x53,0x53,0xab,0x7d,0x2b,0x44,0x27,0x76, + 0x36,0x22,0x5a,0x65,0x5c,0x5e,0x3c,0x3c,0x53,0xad,0xab,0x2d,0x2b,0x48,0x27,0x77, + 0x36,0x22,0x7e,0x65,0x66,0x5e,0x3e,0xae,0x54,0x73,0xab,0xb5,0x2b,0x4e,0x47,0x78, + 0x66,0x22,0xb8,0x65,0x6f,0x5e,0x40,0xae,0x55,0x3b,0xac,0x35,0x2b,0x52,0x27,0x79, + 0x76,0x23,0x46,0x65,0x78,0x5e,0x43,0x3c,0x55,0x2b,0xac,0x49,0x2b,0x57,0x27,0x7a, + 0xa8,0x23,0x6e,0x65,0x21,0x5e,0x45,0x5c,0x56,0x43,0xac,0x57,0x2b,0x5b,0x47,0x7b, + 0xa8,0x23,0x2e,0x65,0x29,0x5e,0x47,0x5c,0x56,0x2b,0xac,0x69,0x2b,0x5f,0x27,0x7c, + 0xa8,0x23,0xc0,0x65,0xa3,0xc0,0xc2,0x71,0x70,0xa6,0x32,0x73,0x2b,0x62,0x27,0x7d, + 0x76,0x24,0x46,0x65,0xa9,0x5e,0x4b,0x3c,0x57,0x7b,0xac,0x27,0x2b,0x67,0x47,0x7e, + 0x26,0x24,0x6a,0x65,0xb2,0x5e,0x4d,0x3c,0x58,0x3b,0xac,0xa7,0x2b,0x6a,0x27,0xa2, + 0x36,0x24,0xa8,0x65,0xbe,0x5e,0x50,0x3c,0x58,0xad,0xac,0xbf,0x2b,0x71,0x47,0x21, + 0x46,0x25,0x3a,0x66,0x34,0x5e,0x52,0x3c,0x59,0x5b,0xad,0x3d,0x2b,0x74,0x27,0x22, + 0x36,0x25,0x56,0x66,0x3b,0x5e,0x53,0xae,0x59,0xa5,0xad,0x4b,0x2b,0x78,0x47,0x22, + 0xb8,0x25,0x72,0x66,0x42,0x5e,0x55,0xae,0x5a,0x53,0xad,0x5b,0x2b,0x7c,0x47,0x23, + 0xb8,0x25,0xa4,0x66,0x4a,0x5e,0x58,0x3c,0x5a,0xad,0xad,0x6d,0x2b,0xa2,0x27,0x25, + 0x36,0x26,0x36,0x66,0x53,0x5e,0x59,0xae,0x5b,0x53,0xad,0x7b,0x2b,0x24,0x47,0x25, + 0xb8,0x26,0x52,0x66,0x5a,0x5e,0x5b,0xae,0x5b,0xa5,0xab,0x31,0x31,0x27,0x27,0x26, + 0xa8,0x26,0x6e,0x66,0x61,0x5e,0x5d,0x5c,0x5c,0x53,0xad,0xaf,0x2b,0x2c,0x27,0x28, + 0x46,0x26,0xac,0x66,0x6c,0x5e,0x60,0x3c,0x5c,0xad,0xad,0xc1,0x2b,0xa3,0x47,0x29, + 0x66,0x27,0x42,0x66,0x76,0x5e,0x62,0x7c,0x5d,0x6b,0xae,0x41,0x2b,0xa8,0x47,0x2a, + 0x66,0x27,0x66,0x66,0xa1,0x5e,0x64,0xae,0x5e,0x33,0xae,0x53,0x2b,0xac,0x27,0x2b, + 0x26,0x27,0x2e,0x66,0x2a,0x5e,0x67,0x7c,0x5e,0x2b,0xae,0x6b,0x2b,0xb2,0x47,0x2c, + 0xb8,0x28,0x3a,0x66,0xa7,0x5e,0x6a,0x5c,0x5f,0x6b,0xae,0x21,0x2b,0xb8,0x47,0x2e, + 0x76,0x28,0x66,0x66,0xb1,0x5e,0x6c,0xae,0x60,0x33,0xae,0xa7,0x2b,0xbc,0x27,0x2f, + 0x76,0x28,0x26,0x66,0xb9,0x5e,0x6e,0xae,0x60,0x73,0xae,0xb5,0x2b,0xc0,0x47,0x30, + 0x70,0x2b,0xae,0xbb,0x2b,0xc1,0x27,0x30,0xa8,0x28,0xc0,0x65,0x31,0x5e,0x71,0x5c, + 0x61,0x43,0xaf,0x37,0x2c,0x33,0x47,0xa3,0x26,0x29,0x4a,0x67,0x38,0x5e,0x73,0x3c, + 0x61,0x23,0xaf,0x47,0x2c,0x37,0x47,0xa4,0x26,0x29,0x6a,0x67,0x40,0x5e,0x75,0x3c, + 0x62,0x3b,0xaf,0x55,0x2c,0x3a,0x27,0xa5,0x76,0x29,0x26,0x67,0x49,0x5e,0x77,0x5c, + 0x62,0x23,0xaf,0x67,0x2c,0x3f,0x47,0xa6,0x26,0x29,0xbc,0x67,0x50,0x5e,0x79,0x3c, + 0x63,0x3b,0xaf,0x75,0x2c,0x42,0x27,0xa7,0x76,0x2a,0x46,0x67,0x57,0x5e,0x7a,0xae, + 0x63,0x73,0xaf,0x23,0x2c,0x46,0x47,0xa8,0x66,0x2a,0x62,0x67,0x5e,0x5e,0x7c,0x7c, + 0x63,0xbd,0xaf,0xa3,0x2c,0x49,0x27,0xa9,0x66,0x2a,0x26,0x67,0x67,0x5e,0xa1,0x3c, + 0x64,0x7b,0xaf,0xb7,0x2c,0x4e,0x27,0xaa,0x76,0x2a,0xb8,0x67,0x6f,0x5e,0xa2,0xae, + 0x65,0x3b,0xb0,0x35,0x2c,0x52,0x27,0xab,0x76,0x2b,0x46,0x67,0x77,0x5e,0x22,0xc2, + 0x70,0xb3,0x40,0xbb,0xa3,0x55,0x47,0xac,0x46,0x2b,0x5a,0x67,0x7c,0x5e,0x24,0x3c, + 0x65,0xad,0xb0,0x4d,0x2c,0x58,0x27,0xad,0x56,0x2b,0x2a,0x67,0x2f,0x5e,0x29,0x3c, + 0x67,0x3b,0xb0,0xa1,0x2c,0x65,0x47,0xb0,0x66,0x2c,0x66,0x67,0xb1,0x5e,0x2c,0xae, + 0x68,0x43,0xb0,0xab,0x2c,0x6c,0x47,0xb1,0xb8,0x2c,0xa4,0x67,0xbc,0x5e,0x2f,0xae, + 0x68,0xa5,0xb0,0xbf,0x2c,0x70,0x27,0xb3,0x56,0x2d,0x4a,0x68,0x3b,0x5e,0xa6,0x5c, + 0x69,0xb5,0xb1,0x51,0x2c,0x79,0x27,0xb5,0x56,0x2d,0x22,0x68,0x47,0x5e,0xaa,0xae, + 0x6b,0x6b,0xb1,0x21,0x2c,0x25,0x27,0xb8,0x76,0x2e,0x66,0x68,0x5f,0x5e,0xae,0xae, + 0x6c,0x3b,0xb1,0xa7,0x2c,0x2c,0x27,0xba,0x56,0x2e,0xb0,0x68,0x6d,0x5e,0xb3,0x3c, + 0x6d,0x3b,0xb2,0x37,0x2c,0xa7,0x47,0xbc,0x46,0x2f,0x5a,0x68,0x7c,0x5e,0xb6,0x5c, + 0x6d,0xb5,0xb2,0x4f,0x2c,0x31,0x31,0x4b,0x46,0x2f,0x22,0x68,0x26,0x5e,0xb8,0x7c, + 0x6e,0x6b,0xb2,0x61,0x2c,0xaf,0x27,0xbe,0x56,0x2f,0xb0,0x68,0x2d,0x5e,0xbb,0x3c, + 0x6f,0x43,0xb2,0x77,0x2c,0xb6,0x47,0xbf,0xb8,0x30,0x56,0x68,0xad,0x5e,0xbd,0xae, + 0x6f,0xa5,0xb2,0x2b,0x2c,0xba,0x27,0xc1,0x46,0x30,0x7a,0x68,0xb6,0x5e,0xc0,0x3c, + 0x70,0x5b,0xb2,0xaf,0x2c,0xbe,0x27,0xc2,0x26,0x30,0xbc,0x67,0x31,0x5f,0x31,0x7c, + 0x71,0x4b,0xb3,0x3b,0x2d,0x34,0x28,0x32,0x36,0xa3,0x5e,0x69,0x3d,0x5f,0x34,0x5c, + 0x71,0xb5,0xb3,0x51,0x2d,0x3a,0x48,0x33,0x66,0xa3,0x2e,0x69,0x4a,0x5f,0x37,0xae, + 0x72,0xb5,0xb3,0x6f,0x2d,0x41,0x48,0x35,0x46,0xa4,0x3e,0x69,0x57,0x5f,0x3b,0x3c, + 0x73,0x7b,0xb3,0x25,0x2d,0x46,0x28,0x36,0x26,0xa4,0x6a,0x69,0x60,0x5f,0x3d,0x3c, + 0x74,0x43,0xb3,0xa9,0x2d,0x4b,0x28,0x37,0xa8,0xa4,0x2e,0x69,0x74,0x5f,0x42,0x3c, + 0x75,0x63,0xb4,0x3f,0x2d,0x57,0x48,0x3a,0x26,0xa5,0x7a,0x69,0x24,0x5f,0x46,0x3c, + 0x76,0x63,0xb4,0x5f,0x2d,0x5d,0x48,0x3c,0x56,0xa5,0xb0,0x69,0x2d,0x5f,0x48,0x5c, + 0x76,0xbd,0xb4,0x75,0x2d,0x63,0x48,0x3d,0xb8,0xa6,0x52,0x69,0xac,0x5f,0x4b,0x7c, + 0x77,0x2b,0xb4,0x29,0x2d,0x67,0x28,0x3f,0x36,0xa6,0x7a,0x69,0xb6,0x5f,0x4e,0x3c, + 0x78,0x5b,0xb4,0xaf,0x2d,0x6c,0x28,0x40,0x36,0xa6,0xb0,0x69,0xbf,0x5f,0x50,0x5c, + 0x78,0xb5,0xb5,0x31,0x2d,0x72,0x28,0x41,0x76,0xa7,0x46,0x6a,0x37,0x5f,0x52,0xae, + 0x79,0x7b,0xb5,0x45,0x2d,0x76,0x28,0x42,0xa8,0xa7,0x6e,0x6a,0x43,0x5f,0x55,0xae, + 0x7a,0x5b,0xb5,0x6b,0x2d,0xa2,0x48,0x44,0xb8,0xa8,0x32,0x6a,0x52,0x5f,0x5a,0x3c, + 0x7b,0x5b,0xb5,0x7d,0x2d,0x24,0x28,0x46,0x40,0x30,0xbb,0x38,0xbf,0x61,0x5b,0x7c, + 0x7b,0xb5,0xb5,0x2f,0x2d,0x29,0x48,0x47,0x56,0xa8,0x22,0x6a,0x67,0x5f,0x5f,0x5c, + 0x7c,0x23,0xb5,0xb9,0x2d,0x2f,0x48,0x48,0xa8,0xa9,0x32,0x6a,0x73,0x5f,0x61,0xae, + 0x7d,0x5b,0xb6,0x3d,0x2d,0xa6,0x28,0x4a,0x36,0xa9,0x56,0x6a,0x7b,0x5f,0x64,0x3c, + 0x7d,0xad,0xb6,0x4d,0x2d,0xaa,0x28,0x4b,0x36,0xa9,0x76,0x6a,0x24,0x5f,0x66,0x3c, + 0x7e,0x5b,0xb6,0x5d,0x2d,0xae,0x28,0x4c,0x36,0xa9,0xac,0x6a,0x2c,0x5f,0x68,0x3c, + 0x7e,0xad,0xb6,0x6d,0x2d,0xb2,0x28,0x4d,0x36,0xaa,0x3a,0x6a,0xa6,0x5f,0x6a,0xae, + 0xa1,0x7b,0xb6,0x27,0x2d,0xb9,0x48,0x4e,0xa8,0xaa,0x6e,0x6a,0xb4,0x5f,0x6d,0x7c, + 0xa2,0x4b,0xb6,0xab,0x2d,0xbd,0x28,0x4f,0xa8,0xaa,0x2e,0x6a,0xbb,0x5f,0x6f,0x5c, + 0xa2,0x23,0xb6,0xbb,0x2d,0xc1,0x28,0x50,0xa8,0xaa,0xc0,0x6a,0xbe,0x31,0xc2,0x3c, + 0xb3,0x3b,0xb7,0x39,0x2e,0x33,0x28,0x52,0x36,0xab,0x56,0x6b,0x3b,0x5f,0x73,0xae, + 0x21,0xa5,0xb7,0x4b,0x2e,0x38,0x28,0x53,0x36,0xab,0x76,0x6b,0x43,0x5f,0x75,0xae, + 0x22,0x5b,0xb7,0x5f,0x2e,0x3d,0x48,0x54,0x46,0xab,0xac,0x6b,0x4d,0x5f,0x78,0x5c, + 0x22,0xbd,0xb7,0x71,0x2e,0x41,0x28,0x55,0x56,0xac,0x3e,0x6b,0x56,0x5f,0x7b,0x3c, + 0x23,0x23,0xb7,0x27,0x2e,0x47,0x48,0x56,0xb8,0xac,0x72,0x6b,0x62,0x5f,0x7d,0x7c, + 0x24,0x4b,0xb7,0xad,0x2e,0x4c,0x48,0x57,0xb8,0xac,0xa4,0x6b,0x6a,0x5f,0xa1,0x7c, + 0x24,0x2b,0xb7,0xbb,0x2e,0x50,0x28,0x59,0x36,0xad,0x36,0x6b,0x73,0x5f,0x21,0xae, + 0x25,0x53,0xb8,0x3b,0x2e,0x54,0x48,0x5a,0x36,0xad,0x56,0x6b,0x7e,0x5f,0x24,0x7c, + 0x25,0xbd,0xb8,0x51,0x2e,0x59,0x28,0x5b,0x56,0xad,0x7e,0x6b,0x25,0x5f,0x26,0x5c, + 0x26,0x63,0xb8,0x5f,0x2e,0x5d,0x28,0x5c,0x56,0xad,0xb4,0x6b,0x2f,0x5f,0x28,0xae, + 0x27,0x33,0xb8,0x73,0x2e,0x62,0x48,0x5d,0x66,0xae,0x42,0x6b,0xa8,0x5f,0x2a,0x7c, + 0x27,0x6b,0xb8,0x21,0x2e,0x66,0x48,0x5e,0x26,0xae,0x6a,0x6b,0xb3,0x5f,0x2d,0x5c, + 0x28,0x43,0xb8,0xa9,0x2e,0x6b,0x28,0x5f,0xa8,0xae,0x2e,0x6b,0xbb,0x5f,0x2f,0x5c, + 0x28,0x23,0xb8,0xb9,0x2e,0x6f,0x48,0x60,0x26,0xae,0xbc,0x6b,0xc2,0x5f,0xa3,0x3c, + 0x29,0x3b,0xb9,0x37,0x2e,0x73,0x48,0x61,0x26,0xaf,0x4a,0x6c,0x38,0x5f,0xa5,0x3c, + 0x29,0x7b,0xb9,0x45,0x2e,0x76,0x28,0x62,0x76,0xaf,0x66,0x6c,0x3f,0x5f,0xa6,0xae, + 0x2a,0x33,0xb9,0x53,0x2e,0x7a,0x48,0x63,0x66,0xaf,0x22,0x6c,0x46,0x5f,0xa8,0x7c, + 0x2a,0x6b,0xb9,0x61,0x2e,0x7e,0x48,0x64,0x66,0xaf,0xb4,0x6c,0x4f,0x5f,0xaa,0xae, + 0x2b,0x38,0xb2,0xbf,0x34,0xc1,0x49,0x45,0x46,0xb0,0x3a,0x6c,0x54,0x5f,0xac,0x3c, + 0x2b,0x5b,0xb9,0x7d,0x2e,0x24,0x28,0x66,0x36,0xb0,0x56,0x6c,0x5b,0x5f,0xad,0xae, + 0x2b,0xa5,0xb9,0x2b,0x2e,0x28,0x48,0x66,0xb8,0xb0,0x72,0x6c,0x62,0x5f,0xaf,0x7c, + 0x2c,0x4b,0xb9,0xab,0x2e,0x2b,0x28,0x67,0xa8,0xb0,0xa4,0x6c,0x6a,0x5f,0xb1,0x7c, + 0x2c,0x2b,0xb9,0xbb,0x2e,0x2f,0x28,0x68,0xa8,0xb0,0xc0,0x6c,0x71,0x5f,0xb3,0x5c, + 0x2d,0x43,0xba,0x37,0x2e,0xa5,0x48,0x69,0xa8,0xb1,0x4e,0x6c,0x79,0x5f,0xb5,0x5c, + 0x2d,0x23,0xba,0x47,0x2e,0xa9,0x48,0x6a,0xa8,0xb1,0x6e,0x6c,0x21,0x5f,0xb7,0x5c, + 0x2e,0x43,0xba,0x57,0x2e,0xad,0x48,0x6b,0x26,0xb1,0x2a,0x6c,0x28,0x5f,0xb9,0x3c, + 0x2e,0x7b,0xba,0x65,0x2e,0xb1,0x48,0x6c,0xb8,0xb2,0x32,0x6c,0xa6,0x5f,0xbc,0x3c, + 0x2f,0x23,0xba,0x29,0x2e,0xb9,0x28,0x51,0x31,0x38,0x72,0x6c,0xb8,0x5f,0xc0,0x7c, + 0x30,0x73,0xba,0xb5,0x2e,0xc0,0x48,0x70,0x70,0x2b,0xba,0xbb,0x2e,0xc2,0x28,0x51, + 0x36,0xb3,0x42,0x6d,0x38,0x60,0x33,0x5c,0xa3,0x23,0xbb,0x47,0x2f,0x37,0x28,0x72, + 0xa8,0xb3,0x7a,0x6d,0x44,0x60,0x36,0xae,0xa4,0xb5,0xbb,0x6f,0x2f,0x41,0x48,0x75, + 0x46,0xb4,0x3a,0x6d,0x54,0x60,0x3a,0x3c,0xa5,0x5b,0xbb,0x21,0x2f,0x45,0x28,0x76, + 0x56,0xb4,0x5e,0x6d,0x5d,0x60,0x3c,0xae,0xa6,0x33,0xbb,0xa7,0x2f,0x4a,0x28,0x77, + 0x76,0xb4,0x26,0x6d,0x67,0x60,0x3f,0x5c,0xa6,0x23,0xbb,0xbf,0x2f,0x50,0x28,0x79, + 0x36,0xb5,0x36,0x6d,0x74,0x60,0x42,0x7c,0xa7,0x6b,0xbc,0x41,0x2f,0x55,0x28,0x7a, + 0x56,0xb5,0x5e,0x6d,0x7e,0x60,0x44,0x7c,0xa7,0xbd,0xbc,0x51,0x2f,0x59,0x28,0x7b, + 0x56,0xb5,0x7e,0x6d,0x27,0x60,0x46,0xae,0xa8,0x73,0xbc,0x63,0x2f,0x5e,0x48,0x7c, + 0x76,0xb5,0xb8,0x6d,0x30,0x60,0x49,0x3c,0xa9,0x4b,0xbc,0x79,0x2f,0x63,0x28,0x7d, + 0xa8,0xb6,0x4e,0x6d,0xab,0x60,0x4b,0x5c,0xa9,0x23,0xbc,0x27,0x2f,0x67,0x48,0x7e, + 0x26,0xb6,0x6a,0x6d,0xb2,0x60,0x4d,0x3c,0xaa,0x3b,0xbc,0xad,0x2f,0x6c,0x28,0xa2, + 0x46,0xb6,0xbc,0x6e,0x32,0x60,0x51,0x7c,0xab,0x4b,0xbd,0x3b,0x2f,0x75,0x48,0x22, + 0x46,0xb7,0x62,0x6e,0x3e,0x60,0x54,0x7c,0xac,0x43,0xbd,0x61,0x2f,0x7e,0x28,0x24, + 0x26,0xb8,0x36,0x6e,0x53,0x60,0x59,0xae,0xad,0x53,0xbd,0x21,0x2f,0x25,0x28,0x26, + 0x56,0xb8,0x5e,0x6e,0x5d,0x60,0x5c,0x7c,0xad,0xbd,0xbd,0xa3,0x2f,0x29,0x28,0x27, + 0x56,0xb8,0x22,0x6e,0x6b,0x60,0x5f,0xae,0xae,0xa5,0xbd,0xbd,0x2f,0x30,0x28,0x29, + 0x36,0xb9,0x36,0x6e,0x73,0x60,0x61,0xae,0xaf,0x53,0xbe,0x3c,0xbe,0xc2,0x31,0xc2, + 0x77,0x37,0x4a,0x6e,0x78,0x60,0x63,0x3c,0xaf,0x2b,0xbe,0x49,0x2f,0xa9,0x28,0x2a, + 0xa8,0xb9,0x6e,0x6e,0x21,0x60,0x66,0x3c,0xb0,0x5b,0xbe,0x5f,0x2f,0xaf,0x48,0x2c, + 0x46,0xb9,0xac,0x6e,0x2d,0x60,0x68,0x5c,0xb0,0xb5,0xbe,0x6f,0x2f,0xb3,0x48,0x2d, + 0x46,0xba,0x3a,0x6e,0xa6,0x60,0x6a,0x3c,0xb1,0x5b,0xbe,0x7d,0x2f,0xb6,0x28,0x2e, + 0x46,0xba,0x5e,0x6e,0xaf,0x60,0x6c,0x5c,0xb1,0xb5,0xbe,0x2f,0x2f,0xbb,0x48,0x2f, + 0x46,0xba,0x7a,0x6e,0xb6,0x60,0x6e,0x5c,0xb2,0x73,0xbe,0xb5,0x2f,0xc0,0xc1,0xae, + 0xb2,0xa5,0xbe,0xbd,0x2f,0x33,0x28,0xa3,0xa8,0xbb,0x4e,0x6f,0x3a,0x60,0x74,0x3c, + 0xb3,0xad,0xbf,0x4d,0x30,0x39,0x48,0xa5,0x56,0xbb,0x22,0x6f,0x47,0x60,0x77,0x5c, + 0xb4,0x23,0xbf,0x69,0x30,0x3f,0x28,0xa6,0xa8,0xbc,0x36,0x6f,0x53,0x60,0x79,0xae, + 0xb5,0x53,0xbf,0x31,0x31,0x45,0x48,0xa8,0x66,0xbc,0x62,0x6f,0x5f,0x60,0x7d,0x3c, + 0xb6,0x43,0xbf,0xa9,0x30,0x4b,0x48,0xa9,0x26,0xbc,0x2a,0x6f,0x68,0x60,0xa1,0x3c, + 0xb6,0x2b,0xbf,0xbd,0x30,0x50,0x48,0xaa,0xb8,0xbd,0x36,0x6f,0x73,0x60,0x21,0xae, + 0xb7,0x53,0xc0,0x3b,0x30,0x54,0x48,0xab,0xb8,0xbd,0x52,0x6f,0x7a,0x60,0x23,0x7c, + 0xb7,0x2b,0xc0,0x49,0x30,0x57,0x28,0xac,0xa8,0xbd,0x6e,0x6f,0x22,0x60,0x26,0x3c, + 0xb8,0x7b,0xc0,0x65,0x30,0x5e,0x28,0xae,0x76,0xbd,0xbc,0x6f,0x30,0x60,0x29,0x3c, + 0xb9,0x4b,0xc0,0x7b,0x30,0x64,0x28,0xb0,0x36,0xbe,0x5e,0x6f,0xb1,0x60,0x2c,0xae, + 0xba,0x43,0xc0,0xab,0x30,0x6b,0x28,0xb1,0xa8,0xbe,0xa4,0x6f,0xbd,0x60,0x30,0x5c, + 0xba,0xb5,0xc0,0xc1,0x30,0x72,0x28,0xb3,0xa8,0xbf,0x66,0x70,0x3f,0x60,0xa6,0xae, + 0xbc,0x3b,0xc1,0x57,0x30,0x7b,0x48,0xb5,0xa8,0xbf,0xac,0x70,0x4c,0x60,0xaa,0x5c, + 0xbc,0xb5,0xc1,0x6f,0x30,0x21,0x48,0xb7,0x56,0xc0,0x3e,0x70,0x55,0x60,0xac,0x5c, + 0xbd,0x63,0xc1,0xa1,0x30,0x25,0x28,0xb8,0x66,0xc0,0x62,0x70,0x60,0x60,0xaf,0x3c, + 0xbe,0x3b,0xc1,0xa7,0x30,0x2a,0x28,0xb9,0x76,0xc0,0x2a,0x70,0x69,0x60,0xb1,0x5c, + 0xbe,0x23,0xc1,0xb9,0x30,0x30,0x48,0xba,0xb8,0xc1,0x32,0x70,0x72,0x60,0xb3,0x7c, + 0xbf,0x6b,0xc2,0x41,0x30,0xa8,0x48,0xbc,0x66,0xc1,0x6a,0x70,0x24,0x60,0xb8,0x3c, + 0xc0,0x5b,0xc2,0x65,0x30,0xb0,0x28,0xbe,0x76,0xc1,0xbc,0x70,0x30,0x60,0xbb,0x7c, + 0xc1,0x4b,0xc2,0x7b,0x30,0xb6,0x48,0xc0,0x36,0xc2,0x56,0x70,0xaf,0x60,0xbe,0xae, + 0xc2,0x33,0xc2,0xa7,0x30,0xbc,0x28,0xc1,0x76,0xc2,0x2a,0x70,0xba,0x60,0xc1,0x5c, + 0xc2,0x23,0xc2,0xbb,0x30,0x34,0xc1,0xc2,0xa3,0x50,0xb4,0x6d,0x39,0x61,0x33,0x5d, + 0x31,0x2c,0x31,0x49,0xa3,0x39,0x49,0x33,0x47,0x31,0x7e,0x71,0x48,0x61,0x37,0x3d, + 0x32,0x24,0x31,0x6d,0xa3,0x40,0x29,0x35,0x57,0x32,0x3e,0x71,0x55,0x61,0x3c,0x3d, + 0x33,0xae,0x31,0x2d,0xa3,0x49,0x49,0x37,0x47,0x32,0x7a,0x71,0x64,0x61,0x3e,0x3d, + 0x34,0x64,0x31,0xb1,0xa3,0x4d,0x49,0x38,0x47,0x32,0xac,0x71,0x6e,0x61,0x40,0x7d, + 0x35,0x34,0x32,0x39,0xa3,0x53,0x29,0x39,0xa9,0x33,0x4e,0x71,0x79,0x61,0x43,0x5d, + 0x35,0x24,0x32,0x49,0xa3,0x58,0x49,0x3a,0xb9,0x33,0x76,0x71,0x24,0x61,0x46,0x3d, + 0x36,0x64,0x32,0x5f,0xa3,0x5d,0x49,0x3c,0x67,0x33,0xb4,0x71,0x2f,0x61,0x48,0xaf, + 0x37,0x34,0x32,0x73,0xa3,0x63,0x29,0x3d,0xa9,0x34,0x6a,0x71,0xb4,0x61,0x4d,0x7d, + 0x38,0x54,0x32,0xad,0xa3,0x6c,0x29,0x40,0xa9,0x35,0x32,0x71,0x31,0x31,0x51,0x5d, + 0x39,0x44,0x33,0x3b,0xa3,0x74,0x49,0x41,0xb9,0x35,0x52,0x72,0x3b,0x61,0x53,0xaf, + 0x39,0xb6,0x33,0x4f,0xa3,0x79,0x49,0x43,0x47,0x35,0x7e,0x72,0x46,0x61,0x56,0xaf, + 0x3a,0x74,0x33,0x63,0xa3,0xa1,0x49,0x44,0xa9,0x36,0x36,0x72,0x53,0x61,0x5a,0x3d, + 0x3b,0x5c,0x33,0xa1,0xa3,0x25,0x29,0x46,0x57,0x36,0x6a,0x72,0x61,0x61,0x5d,0xaf, + 0x3c,0x5c,0x33,0xaf,0xa3,0x2c,0x29,0x48,0x47,0x36,0xac,0x72,0x6e,0x61,0x60,0x7d, + 0x3c,0xbe,0x34,0x31,0xa3,0xa3,0x29,0x49,0x57,0x37,0x3e,0x72,0x75,0x61,0x62,0xaf, + 0x3d,0x74,0x34,0x43,0xa3,0xa9,0x49,0x4a,0x27,0x37,0x6a,0x72,0xa2,0x61,0x65,0x3d, + 0x3e,0x44,0x34,0x57,0xa3,0xad,0x49,0x4b,0xa9,0x37,0x2e,0x72,0x2a,0x61,0x67,0xaf, + 0x3e,0xb6,0x34,0x73,0xa3,0xb4,0x49,0x4d,0x67,0x38,0x42,0x72,0xa8,0x61,0x6b,0x7d, + 0x40,0x3c,0x34,0xa7,0xa3,0xbd,0x29,0x4f,0xb9,0x38,0xa4,0x72,0xbe,0xc0,0x29,0x50, + 0x77,0x38,0xb8,0x72,0xc1,0x61,0x70,0xaf,0x31,0x44,0x35,0x37,0xa4,0x33,0x49,0x51, + 0x27,0x39,0x4e,0x73,0x3b,0x61,0x73,0xaf,0x41,0xa6,0x35,0x51,0xa4,0x39,0x29,0x53, + 0x57,0x39,0x7e,0x73,0x45,0x61,0x76,0x7d,0x42,0x6c,0x35,0x61,0xa4,0x3d,0x29,0x54, + 0x67,0x39,0xb4,0x73,0x4e,0x61,0x78,0x7d,0x43,0x3c,0x35,0x75,0xa4,0x43,0x29,0x56, + 0x37,0x3a,0x56,0x73,0x5b,0x61,0x7c,0x3d,0x43,0xae,0x35,0x2d,0xa4,0x48,0x29,0x57, + 0x37,0x3a,0x76,0x73,0x63,0x61,0x7d,0xaf,0x44,0x54,0x35,0xad,0xa4,0x4c,0x49,0x57, + 0xb9,0x3a,0xa4,0x73,0x6a,0x61,0xa1,0x7d,0x44,0x2c,0x35,0xbb,0xa4,0x4f,0x29,0x58, + 0xa9,0x3b,0x32,0x73,0x72,0x61,0x21,0x7d,0x45,0x4c,0x36,0x39,0xa4,0x53,0x29,0x59, + 0xb2,0x30,0xbb,0x38,0xbf,0x60,0x42,0xaf,0x45,0x7c,0x36,0x47,0xa4,0x57,0x29,0x5a, + 0xb9,0x3b,0x72,0x73,0x23,0x61,0x25,0xaf,0x46,0x54,0x36,0x5d,0xa4,0x5c,0x29,0x5c, + 0x37,0x3b,0xa8,0x73,0x2b,0x61,0x27,0xaf,0x46,0xa6,0x36,0x6d,0xa4,0x60,0x29,0x5d, + 0x37,0x3c,0x36,0x73,0xa6,0x61,0x2a,0x3d,0x47,0x5c,0x36,0x7d,0xa4,0x65,0x29,0x5e, + 0x57,0x3c,0x5e,0x73,0xaf,0x61,0x2c,0x5d,0x47,0xb6,0x36,0x2f,0xa4,0x69,0x29,0x5f, + 0x57,0x3c,0x7e,0x73,0xb7,0x61,0x2e,0x7d,0x48,0x74,0x36,0xb5,0xa4,0x6e,0x49,0x60, + 0x67,0x3c,0xb4,0x73,0xc0,0x61,0x30,0x7d,0x48,0xbe,0x37,0x31,0xa4,0x71,0x29,0x61, + 0x57,0x3d,0x3e,0x74,0x35,0x61,0xa4,0x5d,0x49,0x64,0x37,0x3f,0xa4,0x75,0x49,0x62, + 0x47,0x3d,0x5a,0x74,0x3d,0x61,0xa6,0x5d,0x49,0xbe,0x37,0x51,0xa4,0x79,0x29,0x63, + 0x57,0x3d,0x7e,0x74,0x46,0x61,0x71,0x31,0x3a,0x64,0x37,0x5f,0xa4,0x7d,0x49,0x64, + 0x47,0x3d,0xac,0x74,0x4c,0x61,0xaa,0x3d,0x4a,0xb6,0x37,0x6f,0xa4,0x21,0x49,0x65, + 0x47,0x3e,0x3a,0x74,0x54,0x61,0xac,0x3d,0x4b,0x5c,0x37,0x7d,0xa4,0x26,0x49,0x66, + 0x67,0x3e,0x66,0x74,0x5f,0x61,0xae,0xaf,0x4c,0x34,0x37,0xa5,0xa4,0x2a,0x49,0x67, + 0x67,0x3e,0x22,0x74,0x66,0x61,0xb0,0x7d,0x4c,0x74,0x37,0xb5,0xa4,0x2e,0x49,0x68, + 0x67,0x3e,0xb4,0x74,0x6e,0x61,0xb2,0xaf,0x4d,0x34,0x38,0x33,0xa4,0xa4,0x29,0x69, + 0x77,0x3f,0x46,0x74,0x77,0x61,0xb4,0xaf,0x4d,0x7c,0x38,0x49,0xa4,0xa9,0x29,0x6a, + 0xa9,0x3f,0x6e,0x74,0x21,0x61,0xb7,0xaf,0x4e,0x5c,0x38,0x5d,0xa4,0xae,0x29,0x6c, + 0x37,0x3f,0xa8,0x74,0x2b,0x61,0xb9,0xaf,0x4e,0xa6,0x38,0x6b,0xa4,0xb2,0x49,0x6c, + 0xb9,0x40,0x32,0x74,0xa4,0x61,0xbb,0x7d,0x4f,0x4c,0x38,0x79,0xa4,0xb5,0x29,0x6d, + 0xb9,0x40,0x52,0x74,0xac,0x61,0xbd,0x7d,0x4f,0x2c,0x38,0x29,0xa4,0xb9,0x29,0x6e, + 0xa9,0x40,0x6e,0x74,0xb3,0x61,0xbf,0x5d,0x50,0x44,0x38,0xa9,0xa4,0xbd,0x49,0x6f, + 0xa9,0x40,0x2e,0x74,0xbb,0x61,0xc1,0x5d,0x50,0x24,0x38,0xba,0xbe,0x61,0xc2,0x3d, + 0x50,0xae,0x38,0xbf,0xa4,0x31,0x49,0x71,0x47,0x41,0x3a,0x75,0x34,0x62,0x32,0x3d, + 0x51,0x5c,0x39,0x3f,0xa5,0x35,0x29,0x73,0x67,0x41,0x22,0x75,0x4a,0x62,0x38,0x3d, + 0x52,0xae,0x39,0x6d,0xa5,0x41,0x49,0x75,0x67,0x42,0x4a,0x75,0x58,0x62,0x3b,0x3d, + 0x53,0x7c,0x39,0x27,0xa5,0x47,0x29,0x76,0xb9,0x42,0x72,0x75,0x62,0x62,0x3d,0x7d, + 0x54,0x5c,0x39,0xaf,0xa5,0x4d,0x49,0x78,0x47,0x42,0xac,0x75,0x6c,0x62,0x40,0x3d, + 0x55,0x44,0x3a,0x39,0xa5,0x53,0x29,0x79,0xa9,0x43,0x5c,0xba,0xc1,0x32,0xc2,0x3c, + 0xa7,0xbe,0x3a,0x51,0xa5,0x5b,0x29,0x7b,0xa9,0x43,0x2e,0x75,0x2a,0x62,0x47,0x7d, + 0x56,0xa6,0x3a,0x6b,0xa5,0x60,0x49,0x7c,0xb9,0x44,0x32,0x75,0xa4,0x62,0x49,0x7d, + 0x57,0x54,0x3a,0x7b,0xa5,0x65,0x49,0xa1,0x47,0x44,0x7a,0x75,0xb7,0x62,0x4e,0x5d, + 0x58,0x6c,0x3a,0xb3,0xa5,0x6e,0x49,0xa2,0x67,0x44,0xb8,0x76,0x32,0x62,0x51,0x7d, + 0x59,0x4c,0x3b,0x3b,0xa5,0x74,0x49,0x21,0xb9,0x45,0x52,0x76,0x3c,0x62,0x54,0x3d, + 0x59,0xae,0x3b,0x4d,0xa5,0x78,0x29,0x23,0x37,0x45,0x22,0x76,0x4a,0x62,0x58,0x3d, + 0x5a,0xae,0x3b,0x6d,0xa5,0x22,0x29,0x25,0xa9,0x46,0x4e,0x76,0x5a,0x62,0x5b,0x7d, + 0x5b,0xae,0x3b,0x2d,0xa5,0x28,0x29,0x27,0x37,0x46,0x7a,0x76,0x64,0x62,0x5e,0x3d, + 0x5c,0x64,0x3b,0xb1,0xa5,0x2d,0x49,0x28,0x57,0x46,0xbc,0x76,0x71,0x62,0x61,0x5d, + 0x51,0x31,0x34,0x37,0xa5,0xa8,0x29,0x2a,0xb9,0x47,0x76,0x76,0x26,0x62,0x68,0x5d, + 0x5e,0xb6,0x3c,0x71,0xa5,0xb3,0x29,0x2d,0x77,0x48,0x5a,0x76,0xae,0x62,0x6d,0x3d, + 0x60,0x44,0x3c,0xad,0xa5,0xbf,0x49,0x30,0x47,0x48,0xac,0x76,0xbe,0xc0,0x29,0x71, + 0x37,0x49,0x3e,0x77,0x35,0x62,0x72,0x5d,0x61,0x64,0x3d,0x45,0xa6,0x36,0x29,0xa4, + 0x77,0x49,0x66,0x77,0x40,0x62,0x75,0x3d,0x62,0x44,0x3d,0x57,0xa6,0x3b,0x49,0xa5, + 0x27,0x49,0x2e,0x77,0x49,0x62,0x77,0x5d,0x62,0xa6,0x3d,0x7d,0xa6,0x44,0x29,0xa8, + 0x47,0x4a,0x62,0x77,0x5e,0x62,0x7c,0x7d,0x64,0x34,0x3d,0xa5,0xa6,0x4a,0x29,0xa9, + 0x77,0x4a,0x26,0x77,0x67,0x62,0x7e,0xaf,0x64,0x74,0x3d,0xb9,0xa6,0x4f,0x49,0xaa, + 0xa9,0x4a,0xc0,0x77,0x71,0x62,0x21,0x5d,0x65,0x54,0x3e,0x3f,0xa6,0x55,0x49,0xac, + 0x57,0x4b,0x76,0x77,0x23,0x62,0x25,0xaf,0x66,0x54,0x3e,0x5d,0xa6,0x5c,0x29,0xae, + 0x37,0x4b,0xa8,0x77,0x2b,0x62,0x27,0xaf,0x66,0xa6,0x3e,0x6b,0xa6,0x61,0x49,0xaf, + 0x77,0x4c,0x46,0x77,0xa9,0x62,0x2b,0x3d,0x67,0x24,0x3e,0x27,0xa6,0x67,0x49,0xb0, + 0xb9,0x4c,0x72,0x77,0xb5,0x62,0x2d,0xaf,0x68,0x54,0x3e,0xad,0xa6,0x6d,0x49,0xb2, + 0x47,0x4c,0xb4,0x77,0xc0,0x62,0x30,0x7d,0x68,0xbe,0x3f,0x33,0xa6,0x72,0x29,0xb3, + 0x77,0x4d,0x46,0x78,0x37,0x62,0xa5,0xaf,0x69,0xae,0x3f,0x53,0xa6,0x7a,0x29,0xb5, + 0x77,0x4d,0x26,0x78,0x48,0x62,0xa9,0x5d,0x6a,0x24,0x3f,0x67,0xa6,0xa1,0x49,0xb6, + 0x27,0x4d,0xbc,0x78,0x50,0x62,0xab,0x5d,0x6b,0x54,0x3f,0x7d,0xa6,0x26,0x29,0xb8, + 0xb9,0x4e,0x76,0x78,0x63,0x62,0xb0,0x5d,0x6c,0x64,0x3f,0xb5,0xa6,0x2e,0x29,0xba, + 0x27,0x4e,0xc0,0x78,0x71,0xc0,0xc2,0x71,0x70,0xa5,0xbe,0x33,0xa6,0xa4,0x49,0xbb, + 0x67,0x4f,0x46,0x78,0x78,0x62,0xb5,0x3d,0x6d,0x24,0x40,0x47,0xa6,0xa9,0x49,0xbd, + 0x47,0x4f,0x7e,0x78,0x25,0x62,0xb8,0x5d,0x6e,0x6c,0x40,0x61,0xa6,0xaf,0x29,0xbe, + 0x57,0x4f,0xb0,0x78,0x2d,0x62,0xba,0x5d,0x6e,0xbe,0x40,0x75,0xa6,0xb5,0x49,0xbf, + 0x27,0x50,0x4a,0x78,0xaa,0x62,0xbd,0x3d,0x6f,0x2c,0x40,0x29,0xa6,0xba,0x49,0xc0, + 0xb9,0x50,0x72,0x78,0xb4,0x62,0xbf,0xaf,0x70,0x5c,0x40,0xb1,0xa6,0xbf,0x29,0xc2, + 0x57,0x50,0xb2,0xb9,0xa6,0xc1,0x49,0xc2,0xa9,0x49,0x3e,0x79,0x35,0x63,0x32,0x7d, + 0x71,0x6c,0x41,0x41,0xa7,0x35,0x2a,0x32,0x57,0x51,0x66,0x79,0x3f,0x63,0x35,0x5d, + 0x72,0x44,0x41,0x5b,0xa7,0x3c,0x4a,0x33,0xb9,0x51,0xa4,0x79,0x4a,0x63,0x37,0x7d, + 0x72,0xae,0x41,0x6f,0xa7,0x42,0x4a,0x35,0x67,0x52,0x42,0x79,0x31,0x31,0x3a,0x5d, + 0x73,0x6c,0x41,0x21,0xa7,0x45,0x2a,0x36,0x67,0x52,0x6a,0x79,0x60,0x63,0x3d,0x3d, + 0x74,0x3c,0x41,0xa7,0xa7,0x4a,0x2a,0x37,0x27,0x52,0x2a,0x79,0x68,0x63,0x3f,0x3d, + 0x74,0x7c,0x41,0xb9,0xa7,0x4f,0x4a,0x38,0xa9,0x53,0x32,0x79,0x73,0x63,0x41,0xaf, + 0x75,0x7c,0x42,0x47,0xa7,0x57,0x4a,0x3a,0x27,0x53,0x6a,0x79,0xa2,0x63,0x45,0x3d, + 0x76,0x3c,0x42,0x57,0xa7,0x5b,0x2a,0x3b,0xa9,0x53,0x2e,0x79,0x2a,0x63,0x47,0x7d, + 0x76,0x2c,0x42,0x69,0xa7,0x5f,0x2a,0x3c,0xb9,0x54,0x32,0x79,0xa4,0x63,0x49,0x7d, + 0x77,0x4c,0x42,0x79,0xa7,0x63,0x2a,0x3d,0xa9,0x54,0x52,0x79,0xad,0x63,0x4b,0xaf, + 0x77,0xa6,0x42,0x2d,0xa7,0x68,0x2a,0x3f,0x37,0x54,0x76,0x79,0xb5,0x63,0x4d,0xaf, + 0x78,0x54,0x42,0xad,0xa7,0x6c,0x4a,0x3f,0xb9,0x54,0xb0,0x79,0xbf,0x63,0x50,0x5d, + 0x78,0xb6,0x42,0xc1,0xa7,0x71,0x4a,0x41,0x47,0x55,0x3e,0x7a,0x37,0x63,0x53,0x3d, + 0x79,0x7c,0x43,0x45,0xa7,0x76,0x2a,0x42,0x77,0x55,0x66,0x7a,0x3f,0x63,0x54,0xaf, + 0x7a,0x34,0x43,0x57,0xa7,0x7b,0x4a,0x43,0xb9,0x55,0xa4,0x7a,0x4b,0x63,0x57,0xaf, + 0x7a,0xa6,0x43,0x6b,0xa7,0xa2,0x2a,0x45,0x37,0x56,0x36,0x7a,0x53,0x63,0x59,0xaf, + 0x7b,0x5c,0x43,0x7d,0xa7,0x24,0x2a,0x46,0x37,0x56,0x5a,0x7a,0x5c,0x63,0x5c,0xaf, + 0x7c,0x3c,0x43,0xa7,0xa7,0x2a,0x2a,0x47,0x77,0x56,0x2a,0x7a,0x6a,0x63,0x5f,0xaf, + 0x7c,0xae,0x43,0xbf,0xa7,0x30,0x2a,0x49,0x47,0x57,0x3e,0x7a,0x75,0x63,0x62,0x7d, + 0x7d,0x6c,0x44,0x41,0xa7,0xa7,0x2a,0x4a,0x57,0x57,0x5e,0x7a,0x7d,0x63,0x64,0xaf, + 0x7e,0x3c,0x44,0x57,0xa7,0xad,0x4a,0x4b,0x27,0x57,0x2a,0x7a,0x2a,0x63,0x67,0x30, + 0x70,0xb3,0x40,0xbb,0x2f,0xb0,0x2a,0x4c,0x77,0x57,0xb8,0x7a,0x30,0x63,0x69,0x3d, + 0xa1,0x3c,0x44,0x77,0xa7,0xb5,0x2a,0x4d,0xb9,0x58,0x52,0x7a,0xac,0x63,0x6b,0x7d, + 0xa1,0x2c,0x44,0x29,0xa7,0xb9,0x2a,0x4e,0xa9,0x58,0x6e,0x7a,0xb3,0x63,0x6d,0x5d, + 0xa2,0x44,0x44,0xa9,0xa7,0xbd,0x4a,0x4f,0x27,0x58,0x2a,0x7a,0xba,0x63,0x6f,0x3d, + 0xa2,0x7c,0x44,0xb7,0xa7,0xc0,0xc1,0xaf,0xa2,0xa6,0x44,0xbd,0xa7,0xc2,0x4a,0x50, + 0xb9,0x51,0x36,0x7b,0x33,0x63,0x71,0xaf,0x21,0x54,0x45,0x3b,0xa8,0x34,0x4a,0x51, + 0xb9,0x59,0x52,0x7b,0x3b,0x63,0x73,0xaf,0x21,0xa6,0x45,0x4b,0xa8,0x38,0x4a,0x52, + 0xb9,0x59,0x72,0x7b,0x42,0x63,0x75,0xaf,0x22,0x54,0x45,0x5b,0xa8,0x3c,0x4a,0x53, + 0xb9,0x59,0xa8,0x7b,0x4b,0x63,0x77,0xaf,0x22,0xa6,0x45,0x6b,0xa8,0x40,0x4a,0x54, + 0xb9,0x5a,0x32,0x7b,0x52,0x63,0x71,0x31,0x33,0x44,0x45,0x77,0xa8,0x43,0x4a,0x55, + 0xa9,0x5a,0x4e,0x7b,0x59,0x63,0x7b,0x5d,0x23,0x24,0x45,0x29,0xa8,0x47,0x2a,0x57, + 0x37,0x5a,0x76,0x7b,0x63,0x63,0x7d,0xaf,0x24,0x6c,0x45,0xb7,0xa8,0x4f,0x4a,0x58, + 0x27,0x5b,0x32,0x7b,0x72,0x63,0x21,0x7d,0x25,0x4c,0x46,0x39,0xa8,0x54,0x4a,0x59, + 0xb9,0x5b,0x5a,0x7b,0x7c,0x63,0x24,0x5d,0x25,0xb6,0x46,0x51,0xa8,0x5a,0x4a,0x5b, + 0x67,0x5b,0x22,0x7b,0x28,0x63,0x27,0x3d,0x26,0x24,0x46,0x69,0xa8,0x60,0x2a,0x5d, + 0x37,0x5c,0x36,0x7b,0xa7,0x63,0x2a,0x5d,0x27,0x6c,0x46,0x21,0xa8,0x65,0x2a,0x5e, + 0x57,0x5c,0x66,0x7b,0xb1,0x63,0x2c,0xaf,0x28,0x3c,0x46,0xa9,0xa8,0x6b,0x2a,0x5f, + 0xa9,0x5c,0xa4,0x7b,0xbc,0x63,0x2f,0x7d,0x28,0x2c,0x46,0xbb,0xa8,0x6f,0x2a,0x60, + 0xa9,0x5c,0xc0,0x7c,0x31,0x63,0xa3,0x5d,0x29,0x44,0x47,0x37,0xa8,0x73,0x4a,0x61, + 0x27,0x5d,0x4a,0x7c,0x39,0x63,0xa5,0x5d,0x29,0x24,0x47,0x4b,0xa8,0x78,0x4a,0x62, + 0xb9,0x5d,0x7a,0x7c,0x45,0x63,0xa8,0x5d,0x2a,0x64,0x47,0x61,0xa8,0x7e,0x4a,0x64, + 0x27,0x5d,0xbc,0x7c,0x51,0x63,0xab,0x7d,0x2b,0x4c,0x47,0x7d,0xa8,0x25,0x4a,0x66, + 0x57,0x5e,0x62,0x7c,0x5f,0x63,0xaf,0x5d,0x2c,0x44,0x47,0xa9,0xa8,0x2b,0x4a,0x67, + 0x27,0x5e,0x2a,0x7c,0x68,0x63,0xb1,0x3d,0x2c,0x24,0x47,0xb9,0xa8,0x30,0x4a,0x68, + 0xb9,0x5f,0x32,0x7c,0x73,0x63,0xb4,0xaf,0x2d,0x74,0x48,0x43,0xa8,0xa8,0x4a,0x6a, + 0x27,0x5f,0x72,0x7c,0x22,0x63,0xb7,0xaf,0x2e,0x54,0x48,0x5b,0xa8,0xaf,0x4a,0x6c, + 0x47,0x5f,0xac,0x7c,0x2c,0x63,0xba,0x3d,0x2e,0xae,0x48,0x6d,0xa8,0xb2,0x2a,0x6d, + 0x47,0x60,0x3e,0x7c,0xa7,0x63,0xbd,0x7d,0x2f,0x30,0xb2,0xbf,0x34,0xc1,0x48,0x2f, + 0x57,0x60,0x7e,0x7c,0xb7,0x63,0xc0,0x5d,0x30,0x74,0x48,0xb5,0xa8,0xc0,0xc1,0xaf, + 0x30,0xa6,0x48,0xbd,0xa8,0xc2,0x4a,0x70,0xb9,0x59,0x36,0x7d,0x35,0x64,0x32,0x5d, + 0xa3,0x6c,0x49,0x41,0xa9,0x35,0x2a,0x72,0x67,0x61,0x66,0x7d,0x41,0x64,0x35,0x5d, + 0xa4,0x44,0x49,0x5d,0xa9,0x3c,0x2a,0x74,0x37,0x61,0xac,0x7d,0x4c,0x64,0x38,0x3d, + 0xa4,0xb6,0x49,0x73,0xa9,0x42,0x4a,0x75,0x67,0x62,0x42,0x7d,0x57,0x64,0x3b,0x5d, + 0xa5,0x24,0x49,0x27,0xa9,0x47,0x4a,0x76,0xa9,0x62,0x72,0x7d,0x63,0x64,0x3d,0xaf, + 0xa6,0x6c,0x49,0xb3,0xa9,0x4d,0x2a,0x78,0x57,0x62,0xb0,0x7d,0x6e,0x64,0x40,0xaf, + 0xa7,0x34,0x4a,0x35,0xa9,0x53,0x4a,0x79,0x27,0x63,0x4a,0x7d,0x78,0x64,0x43,0x3d, + 0xa7,0x7c,0x4a,0x45,0xa9,0x57,0x2a,0x7a,0xa9,0x63,0x72,0x7d,0x22,0x64,0x47,0x3d, + 0xa3,0x31,0x32,0x63,0xa9,0x5e,0x2a,0x7c,0x77,0x63,0xb8,0x7d,0x2f,0x64,0x49,0x3d, + 0xa9,0x44,0x4a,0x77,0xa9,0x63,0x2a,0x7d,0xb9,0x64,0x56,0x7d,0xad,0x64,0x4b,0xaf, + 0xa9,0xa6,0x4a,0x2b,0xa9,0x69,0x2a,0xa1,0x57,0x64,0x7e,0x7d,0xb8,0x64,0x4f,0x3d, + 0xaa,0x7c,0x4a,0xb9,0xa9,0x6f,0x4a,0xa2,0x27,0x64,0xc0,0x7e,0x31,0x64,0x51,0x5d, + 0xab,0x4c,0x4b,0x3b,0xa9,0x74,0x4a,0x22,0x37,0x65,0x56,0x7e,0x3b,0x64,0x53,0xaf, + 0xab,0xae,0x4b,0x4d,0xa9,0x78,0x2a,0x23,0x37,0x65,0x7a,0x7e,0x44,0x64,0x56,0x3d, + 0xac,0x5c,0x4b,0x61,0xa9,0x7d,0x2a,0x24,0x57,0x65,0xb0,0x7e,0x4d,0x64,0x58,0x7d, + 0xac,0xbe,0x4b,0x71,0xa9,0x21,0x2a,0x25,0x57,0x66,0x3e,0x7e,0x55,0x64,0x5a,0x5d, + 0xad,0x64,0x4b,0x23,0xa9,0x26,0x4a,0x26,0x67,0x66,0x62,0x7e,0x5e,0x64,0x5c,0xaf, + 0xae,0x34,0x4b,0xa5,0xa9,0x2a,0x4a,0x27,0x67,0x66,0x26,0x7e,0x67,0x64,0x5e,0xaf, + 0xae,0x74,0x4b,0xb7,0xa9,0x2e,0x2a,0x28,0x77,0x66,0xb8,0x7e,0x70,0x64,0x61,0x3d, + 0xaf,0x3c,0x4c,0x35,0xa9,0xa4,0x2a,0x29,0x77,0x67,0x46,0x7e,0x77,0x64,0x62,0xaf, + 0xaf,0x74,0x4c,0x43,0xa9,0xa8,0x4a,0x2a,0x67,0x67,0x62,0x7e,0x7e,0x64,0x64,0x7d, + 0xaf,0xbe,0x4c,0x51,0xa9,0xab,0x2a,0x2b,0x57,0x67,0x7e,0x7e,0x25,0x64,0x66,0x5d, + 0xb0,0x64,0x4c,0x5f,0xa9,0xaf,0x4a,0x2c,0x57,0x67,0xbc,0x7e,0x30,0x64,0x69,0x3d, + 0xb1,0x3c,0x4c,0x75,0xa9,0xb4,0x2a,0x2d,0x77,0x68,0x46,0x7e,0xaa,0x64,0x6b,0x3d, + 0xb1,0x24,0x4c,0x27,0xa9,0xb9,0x4a,0x2e,0x27,0x68,0x6a,0x7e,0xb2,0x64,0x6d,0x5d, + 0xb2,0x5c,0x4c,0xaf,0xa9,0xbf,0x4a,0x30,0x57,0x68,0xb2,0xb9,0xa9,0xc1,0x2a,0x71, + 0x47,0x69,0x3a,0xa1,0x34,0xc0,0xc2,0x71,0x70,0xa5,0xb3,0x39,0xaa,0x33,0x2a,0xa3, + 0xa9,0x69,0x4e,0xa1,0x3d,0x64,0x74,0x7d,0xb3,0xbe,0x4d,0x53,0xaa,0x3a,0x4a,0xa5, + 0x67,0x69,0x2a,0xa1,0x49,0x64,0x77,0x5d,0xb4,0x24,0x4d,0x69,0xaa,0x40,0x4a,0xa7, + 0x37,0x6a,0x36,0xa1,0x53,0x64,0x79,0xaf,0xb5,0x54,0x4d,0x7b,0xaa,0x44,0x2a,0xa8, + 0x47,0x6a,0x6a,0xa1,0x61,0x64,0x7d,0x7d,0xb6,0x4c,0x4d,0xaf,0xaa,0x4c,0x2a,0xaa, + 0x37,0x6a,0xa8,0xa1,0x6c,0x64,0xa2,0x3d,0xb6,0xb6,0x4d,0xc1,0xaa,0x51,0x2a,0xab, + 0x77,0x6b,0x46,0xa1,0x78,0x64,0x23,0x7d,0xb7,0x2c,0x4e,0x4b,0xaa,0x5a,0x4a,0xad, + 0x77,0x6b,0x26,0xa1,0x28,0x64,0x27,0x3d,0xb8,0x7c,0x4e,0x65,0xaa,0x5e,0x2a,0xae, + 0x27,0x6c,0x3a,0xa1,0xa6,0x64,0x2a,0x3d,0xb9,0x64,0x4e,0xa1,0xaa,0x66,0x2a,0xb0, + 0x77,0x6c,0x6a,0xa1,0xb4,0x64,0x2e,0x3d,0xba,0x64,0x4d,0x31,0x31,0x6d,0x4a,0xb2, + 0x47,0x6c,0xac,0xa1,0xbe,0x64,0x30,0x5d,0xbb,0x34,0x4f,0x35,0xaa,0x72,0x2a,0xb3, + 0x27,0x6d,0x4a,0xa2,0x39,0x64,0xa5,0x7d,0xbb,0xa6,0x4f,0x4b,0xaa,0x78,0x4a,0xb4, + 0xb9,0x6d,0x76,0xa2,0x43,0x64,0xa7,0xaf,0xbc,0x54,0x4f,0x5d,0xaa,0x7d,0x2a,0xb6, + 0x67,0x6d,0xc0,0xa2,0x51,0x64,0xab,0x5d,0xbd,0x54,0x4f,0x7d,0xaa,0x25,0x2a,0xb8, + 0x77,0x6e,0x6a,0xa2,0x62,0x64,0xaf,0x7d,0xbe,0x54,0x4f,0xb5,0xaa,0x2e,0x4a,0xba, + 0x67,0x6e,0xb4,0xa2,0x6e,0x64,0xb2,0x7d,0xbe,0xbe,0x50,0x31,0xaa,0xa4,0x4a,0xbb, + 0x27,0x6f,0x4a,0xa2,0x78,0x64,0xb5,0x3d,0xbf,0x7c,0x50,0x45,0xaa,0xa8,0x2a,0xbc, + 0x77,0x6f,0x66,0xa2,0xa1,0x64,0xb8,0x5d,0xc0,0x64,0x50,0x5f,0xaa,0xb0,0x2a,0xbe, + 0xb9,0x70,0x36,0xa2,0xa6,0x64,0xbc,0x3d,0xc1,0x64,0x50,0xa1,0xaa,0xb7,0x4a,0xc0, + 0x57,0x70,0x5e,0xa2,0xb0,0x64,0xbe,0x7d,0xc2,0x44,0x50,0xad,0xaa,0xbe,0x4a,0xc1, + 0xb9,0x70,0xa4,0xa2,0xbc,0x64,0xc1,0x7d,0xc2,0x30,0xb0,0xa2,0xbf,0x64,0xc2,0x7d, + 0xb3,0x3c,0x51,0x35,0xab,0x32,0x2b,0x31,0x77,0x71,0x4a,0x21,0x3e,0x65,0x35,0x3e, + 0x32,0x44,0x51,0x59,0xab,0x3b,0x2b,0x34,0x37,0x71,0xa8,0x21,0x4b,0x65,0x37,0xb0, + 0x32,0xa6,0x51,0x6d,0xab,0x40,0x2b,0x35,0x37,0x72,0x3a,0x21,0x54,0x65,0x3a,0x3e, + 0x33,0x5c,0x51,0x7d,0xab,0x44,0x2b,0x36,0x37,0x72,0x5e,0x21,0x5d,0x65,0x3c,0x5e, + 0x33,0xb6,0x51,0x2f,0xab,0x49,0x4b,0x37,0x47,0x72,0x22,0x21,0x66,0x65,0x3e,0x7e, + 0x34,0x24,0x51,0xb9,0xab,0x50,0x2b,0x39,0xb9,0x73,0x5e,0x21,0x7e,0x65,0x44,0xb0, + 0x36,0x44,0x52,0x5d,0xab,0x5c,0x2b,0x3c,0x37,0x73,0xa8,0x21,0x2b,0x65,0x47,0xc2, + 0x70,0xb3,0x40,0xbb,0x2d,0x5f,0x4b,0x3c,0x27,0x73,0xbc,0x21,0x30,0x65,0x4b,0x7e, + 0x37,0xa6,0x52,0x2b,0xab,0x68,0x4b,0x3e,0xb9,0x74,0x72,0x21,0xb4,0x65,0x4d,0x7e, + 0x38,0x4c,0x52,0xad,0xab,0x6d,0x4b,0x40,0x47,0x74,0xac,0x21,0xbe,0x65,0x50,0x3e, + 0x38,0xae,0x52,0xbf,0xab,0x70,0x2b,0x41,0x37,0x75,0x3a,0x22,0x35,0x65,0x52,0xb0, + 0x39,0x74,0x53,0x43,0xab,0x76,0x4b,0x42,0x67,0x75,0x62,0x22,0x3e,0x65,0x54,0x7e, + 0x3a,0x34,0x53,0x53,0xab,0x7a,0x4b,0x43,0x77,0x75,0x26,0x22,0x47,0x65,0x57,0x3e, + 0x3a,0x7c,0x53,0x65,0xab,0x7e,0x2b,0x44,0x77,0x75,0xb8,0x22,0x4f,0x65,0x58,0xb0, + 0x3b,0x34,0x53,0x73,0xab,0x22,0x2b,0x45,0x77,0x76,0x46,0x22,0x5a,0x65,0x5b,0x7e, + 0x3b,0x2c,0x53,0x29,0xab,0x28,0x4b,0x47,0x47,0x76,0x7a,0x22,0x65,0x65,0x5e,0x7e, + 0x3c,0x6c,0x53,0xb3,0xab,0x31,0x31,0x48,0x47,0x76,0xac,0x22,0x6c,0x65,0x60,0x3e, + 0x3c,0xae,0x53,0xbf,0xab,0x30,0x2b,0x49,0x47,0x77,0x3e,0x22,0x75,0x65,0x62,0x5e, + 0x3d,0x64,0x54,0x3f,0xab,0xa7,0x4b,0x4a,0x57,0x77,0x62,0x22,0xa1,0x65,0x64,0xb0, + 0x3e,0x34,0x54,0x53,0xab,0xac,0x2b,0x4b,0x77,0x77,0x2a,0x22,0x28,0x65,0x67,0x5e, + 0x3e,0x2c,0x54,0x69,0xab,0xb1,0x2b,0x4c,0xa9,0x77,0xc0,0x22,0xa4,0x65,0x69,0x7e, + 0x3f,0x54,0x54,0x7b,0xab,0xb6,0x4b,0x4d,0xb9,0x78,0x52,0x22,0xac,0x65,0x6b,0x7e, + 0x3f,0x2c,0x54,0x29,0xab,0xb9,0x2b,0x4e,0xb9,0x78,0x7a,0x22,0xb6,0x65,0x6e,0x3e, + 0x40,0x64,0x54,0xb1,0xab,0xbf,0x4b,0x50,0x70,0x2c,0x54,0xbd,0xab,0xc2,0x4b,0x50, + 0xb9,0x71,0x32,0x23,0x33,0x65,0x71,0xb0,0x41,0x54,0x55,0x3d,0xac,0x34,0x2b,0x52, + 0x37,0x79,0x56,0x23,0x3b,0x65,0x74,0x3e,0x41,0xbe,0x55,0x53,0xac,0x3a,0x2b,0x53, + 0x77,0x79,0x26,0x23,0x47,0x65,0x76,0xb0,0x42,0x74,0x55,0x63,0xac,0x3e,0x4b,0x54, + 0x67,0x79,0xb4,0x23,0x4e,0x65,0x78,0x7e,0x43,0x3c,0x55,0x75,0xac,0x42,0x2b,0x55, + 0x27,0x7a,0x4a,0x23,0x58,0x65,0x7b,0x3e,0x43,0x7c,0x55,0x25,0xac,0x46,0x2b,0x56, + 0x77,0x7a,0x6a,0x23,0x60,0x65,0x7d,0x5e,0x44,0x44,0x55,0xa9,0xac,0x4b,0x2b,0x57, + 0xa9,0x7a,0x2e,0x23,0x69,0x65,0xa1,0x7e,0x44,0x2c,0x55,0xbb,0xac,0x50,0x4b,0x59, + 0x37,0x7b,0x36,0x23,0x74,0x65,0x22,0x3e,0x45,0x5c,0x56,0x3d,0xac,0x54,0x2b,0x5a, + 0x37,0x7b,0x56,0x23,0x7b,0x65,0x23,0xb0,0x45,0xa6,0x56,0x4b,0xac,0x58,0x4b,0x5a, + 0xb9,0x7b,0x72,0x23,0x22,0x65,0x25,0x7e,0x46,0x4c,0x56,0x5b,0xac,0x5c,0x4b,0x5c, + 0x37,0x7b,0xa8,0x23,0x2c,0x65,0x28,0x3e,0x46,0xc2,0xb2,0xbf,0x34,0xc1,0x48,0x3d, + 0x47,0x7c,0x3a,0x23,0xa7,0x65,0x2a,0x5e,0x47,0x6c,0x56,0x21,0xac,0x65,0x2b,0x5e, + 0x57,0x7c,0x62,0x23,0xb0,0x65,0x2c,0xb0,0x48,0x34,0x56,0xa7,0xac,0x6a,0x2b,0x5f, + 0x77,0x7c,0x26,0x23,0xb9,0x65,0x2f,0x7e,0x48,0x2c,0x56,0xbd,0xac,0x70,0x4b,0x60, + 0xb9,0x7d,0x36,0x24,0x34,0x65,0xa4,0x5e,0x49,0x24,0x57,0x47,0xac,0x77,0x4b,0x62, + 0xa9,0x7d,0x6e,0x24,0x41,0x65,0xa7,0x5e,0x4a,0x44,0x57,0x57,0xac,0x7c,0x4b,0x63, + 0xb9,0x7d,0xa8,0x24,0x4b,0x65,0xaa,0x5e,0x4a,0xb6,0x57,0x6f,0xac,0x21,0x4b,0x65, + 0x47,0x7e,0x3a,0x24,0x54,0x65,0xac,0x3e,0x4b,0x5c,0x57,0x7d,0xac,0x25,0x2b,0x66, + 0x57,0x7e,0x62,0x24,0x5f,0x65,0xae,0xb0,0x4c,0x34,0x57,0xa7,0xac,0x2a,0x2b,0x67, + 0x27,0x7e,0x2a,0x24,0x69,0x65,0xb1,0x5e,0x4c,0x24,0x57,0xbb,0xac,0x2f,0x2b,0x51, + 0x31,0x36,0xbc,0x24,0x70,0x65,0xb3,0x3e,0x4d,0x44,0x58,0x37,0xac,0xa5,0x4b,0x69, + 0x27,0xa1,0x4a,0x24,0x78,0x65,0xb5,0x3e,0x4d,0x7c,0x58,0x47,0xac,0xa9,0x2b,0x6a, + 0xb9,0xa1,0x76,0x24,0x23,0x65,0xb7,0xb0,0x4e,0x5c,0x58,0x5d,0xac,0xae,0x2b,0x6c, + 0x37,0xa1,0xa8,0x24,0x2b,0x65,0xba,0x3e,0x4e,0xae,0x58,0x6d,0xac,0xb3,0x2b,0x6d, + 0x57,0xa2,0x3e,0x24,0xa7,0x65,0xbc,0x5e,0x4f,0x64,0x58,0xa1,0xac,0xb7,0x4b,0x6e, + 0x47,0xa2,0x5a,0x24,0xae,0x65,0xbe,0x3e,0x4f,0xb6,0x58,0x2f,0xac,0xbb,0x4b,0x6f, + 0x47,0xa2,0x7e,0x24,0xb7,0x65,0xc0,0x5e,0x50,0x64,0x58,0xb1,0xac,0xbf,0x4b,0x70, + 0x47,0xa2,0xac,0x24,0xbe,0xc0,0x2b,0x70,0x77,0xa2,0xbc,0x23,0x31,0x66,0x31,0x5e, + 0x51,0x44,0x59,0x37,0xad,0x33,0x4b,0x71,0x27,0x21,0x4a,0x25,0x38,0x66,0x33,0x3e, + 0x51,0x7c,0x59,0x47,0xad,0x37,0x4b,0x72,0x27,0x21,0x6a,0x25,0x40,0x66,0x35,0x3e, + 0x52,0x3c,0x59,0x55,0xad,0x3a,0x2b,0x73,0x77,0x21,0x26,0x25,0x47,0x66,0x37,0x5e, + 0x52,0x24,0x59,0x67,0xad,0x3f,0x4b,0x74,0x27,0x21,0xbc,0x25,0x51,0x66,0x39,0x7e, + 0x53,0x4c,0x59,0x79,0xad,0x43,0x2b,0x75,0xa9,0x22,0x4e,0x25,0x5a,0x66,0x3b,0xb0, + 0x53,0xa6,0x59,0x2b,0xad,0x48,0x4b,0x77,0x37,0x22,0x7a,0x25,0x64,0x66,0x3e,0x3e, + 0x54,0x64,0x59,0xb1,0xad,0x4d,0x4b,0x78,0x47,0x22,0xac,0x25,0x6c,0x66,0x40,0x3e, + 0x54,0xbe,0x5a,0x31,0xad,0x51,0x2b,0x79,0x57,0x23,0x3e,0x25,0x76,0x66,0x42,0x7e, + 0x55,0x74,0x5a,0x43,0xad,0x56,0x4b,0x7a,0x67,0x23,0x62,0x25,0x7e,0x66,0x44,0x7e, + 0x55,0xbe,0x5a,0x53,0xad,0x5a,0x4b,0x7b,0x67,0x23,0x22,0x25,0x26,0x66,0x46,0x7e, + 0x56,0x6c,0x5a,0x66,0xbe,0xc2,0x31,0xc2,0x76,0xa5,0xb4,0x25,0x2e,0x66,0x48,0x7e, + 0x56,0xbe,0x5a,0x71,0xad,0x62,0x4b,0x7d,0x67,0x24,0x42,0x25,0xa9,0x66,0x4a,0xb0, + 0x57,0x74,0x5a,0x23,0xad,0x66,0x4b,0x7e,0x67,0x24,0x62,0x25,0xb0,0x66,0x4c,0x7e, + 0x57,0xbe,0x5a,0xa3,0xad,0x6a,0x4b,0xa1,0x67,0x24,0x22,0x25,0xb8,0x66,0x4e,0x7e, + 0x58,0x6c,0x5a,0xb3,0xad,0x6e,0x4b,0xa2,0x67,0x24,0xb8,0x25,0xc1,0x66,0x50,0xb0, + 0x59,0x3c,0x5b,0x35,0xad,0x72,0x2b,0x21,0x27,0x25,0x4a,0x26,0x38,0x66,0x53,0x3e, + 0x59,0x7c,0x5b,0x45,0xad,0x76,0x2b,0x22,0x77,0x25,0x66,0x26,0x40,0x66,0x55,0x7e, + 0x5a,0x4c,0x5b,0x59,0xad,0x7b,0x2b,0x23,0xa9,0x25,0xa4,0x26,0x4a,0x66,0x57,0x7e, + 0x5a,0x2c,0x5b,0x69,0xad,0xa1,0x2b,0x24,0xa9,0x25,0xc0,0x26,0x52,0x66,0x59,0x7e, + 0x5b,0x4c,0x5b,0x79,0xad,0x23,0x2b,0x25,0xa9,0x21,0x31,0x32,0x58,0x66,0x5b,0x3e, + 0x5b,0x24,0x5b,0x2b,0xad,0x28,0x4b,0x26,0xb9,0x26,0x72,0x26,0x62,0x66,0x5d,0x7e, + 0x5c,0x4c,0x5b,0xab,0xad,0x2b,0x2b,0x27,0xa9,0x26,0x2e,0x26,0x69,0x66,0x5f,0x5e, + 0x5c,0x24,0x5b,0xb9,0xad,0x2f,0x4b,0x28,0x27,0x26,0xbc,0x26,0x70,0x66,0x61,0x3e, + 0x5d,0x3c,0x5c,0x35,0xad,0xa4,0x2b,0x29,0x77,0x27,0x46,0x26,0x77,0x66,0x62,0xb0, + 0x5d,0x74,0x5c,0x43,0xad,0xa8,0x4b,0x2a,0x67,0x27,0x62,0x26,0x7e,0x66,0x64,0x7e, + 0x5d,0xbe,0x5c,0x51,0xad,0xab,0x2b,0x2b,0x57,0x27,0x7e,0x26,0x25,0x66,0x66,0x5e, + 0x5e,0x64,0x5c,0x5f,0xad,0xaf,0x4b,0x2c,0x47,0x27,0xac,0x26,0x2c,0x66,0x68,0x3e, + 0x5e,0xae,0x5c,0x6d,0xad,0xb2,0x2b,0x2d,0x37,0x28,0x36,0x26,0xa5,0x66,0x69,0xb0, + 0x5f,0x54,0x5c,0x7b,0xad,0xb6,0x4b,0x2d,0xb9,0x28,0x52,0x26,0xac,0x66,0x6b,0x7e, + 0x5f,0x2c,0x5c,0x29,0xad,0xb9,0x2b,0x2e,0xa9,0x28,0x6e,0x26,0xb3,0x66,0x6d,0x5e, + 0x60,0x44,0x5c,0xa9,0xad,0xbd,0x4b,0x2f,0x27,0x28,0x2a,0x26,0xba,0x66,0x6f,0x3e, + 0x60,0x7c,0x5c,0xb7,0xad,0xc0,0xc1,0xb0,0x60,0xa6,0x5c,0xbd,0xad,0xc2,0x4b,0x30, + 0xb9,0x21,0x32,0x27,0x32,0x66,0x71,0x7e,0x61,0x4c,0x5d,0x39,0xae,0x33,0x2b,0xa3, + 0xa9,0x29,0x4e,0x27,0x39,0x66,0x73,0x5e,0x61,0x24,0x5d,0x47,0xae,0x37,0x4b,0xa4, + 0x27,0x29,0x6a,0x27,0x40,0x66,0x75,0x3e,0x62,0x3c,0x5d,0x55,0xae,0x3a,0x2b,0xa5, + 0x77,0x29,0x26,0x27,0x47,0x66,0x76,0xb0,0x62,0x74,0x5d,0x63,0xae,0x3e,0x4b,0xa6, + 0x67,0x29,0xb4,0x27,0x4e,0x66,0x78,0x7e,0x62,0xbe,0x5d,0x7b,0xae,0x44,0x4b,0xa8, + 0x37,0x2a,0x56,0x27,0x5b,0x66,0x7b,0xb0,0x63,0xa6,0x5d,0x2b,0xae,0x48,0x6f,0xc2, + 0xa3,0x50,0xb4,0x69,0x60,0x66,0x7d,0x3e,0x64,0x3c,0x5d,0xa9,0xae,0x4b,0x4b,0xa9, + 0x27,0x2a,0x2a,0x27,0x69,0x66,0xa1,0xb0,0x64,0xa6,0x5d,0xbd,0xae,0x50,0x2b,0xab, + 0x37,0x2b,0x36,0x27,0x73,0x66,0x22,0x3e,0x65,0x5c,0x5e,0x41,0xae,0x56,0x4b,0xac, + 0x67,0x2b,0x66,0x27,0xa1,0x66,0x24,0xb0,0x66,0x34,0x5e,0x53,0xae,0x5a,0x4b,0xad, + 0x67,0x2b,0x22,0x27,0x26,0x66,0x26,0x7e,0x66,0x6c,0x5e,0x61,0xae,0x5e,0x4b,0xae, + 0x67,0x2b,0xb4,0x27,0x2e,0x66,0x28,0x7e,0x66,0xbe,0x5e,0x71,0xae,0x61,0x2b,0xb0, + 0x37,0x2c,0x56,0x27,0xae,0x66,0x2c,0x3e,0x67,0xae,0x5e,0x2d,0xae,0x68,0x2b,0xb1, + 0x37,0x2c,0x76,0x27,0xb5,0x66,0x2d,0xb0,0x68,0x54,0x5e,0xad,0xae,0x6c,0x4b,0xb1, + 0xb9,0x2c,0xa4,0x27,0xbd,0x66,0x30,0x5e,0x68,0xb6,0x5e,0xc1,0xae,0x71,0x4b,0xb3, + 0x27,0x2d,0x52,0x27,0x31,0x31,0x54,0x3e,0x69,0xb6,0x5f,0x4f,0xae,0x79,0x4b,0xb5, + 0x47,0x2d,0x22,0x28,0x46,0x66,0xa8,0xb0,0x6a,0x74,0x5f,0x63,0xae,0xa1,0x4b,0xb6, + 0x27,0x2d,0xbc,0x28,0x50,0x66,0xab,0x3e,0x6b,0x44,0x5f,0x77,0xae,0x23,0x4b,0xb7, + 0x27,0x2e,0x4a,0x28,0x58,0x66,0xad,0x3e,0x6b,0x7c,0x5f,0x27,0xae,0x27,0x4b,0xb8, + 0x27,0x2e,0x6a,0x28,0x60,0x66,0xaf,0x3e,0x6c,0x3c,0x5f,0xa7,0xae,0x2c,0x4b,0xba, + 0x37,0x2e,0xa8,0x28,0x6b,0x66,0xb1,0xb0,0x6c,0xa6,0x5f,0xbd,0xae,0x30,0x4b,0xbb, + 0x37,0x2f,0x3e,0x28,0x75,0x66,0xb4,0x7e,0x6d,0x6c,0x60,0x41,0xae,0xa7,0x2b,0xbc, + 0x57,0x2f,0x62,0x28,0xa1,0x66,0xb7,0x3e,0x6e,0x3c,0x60,0x61,0xae,0xb0,0x4b,0xbe, + 0x77,0x2f,0xb8,0x28,0x2f,0x66,0xba,0xb0,0x6f,0x34,0x60,0x75,0xae,0xb4,0x2b,0xbf, + 0x77,0x30,0x46,0x28,0xa9,0x66,0xbc,0xb0,0x6f,0x74,0x60,0x23,0xae,0xb9,0x4b,0xc0, + 0x27,0x30,0x6a,0x28,0xb3,0x66,0xbf,0x5e,0x70,0x44,0x60,0xab,0xae,0xbe,0x4b,0xc1, + 0xb9,0x30,0xa4,0x28,0xbd,0x66,0xc1,0xc2,0x67,0x30,0xb4,0x28,0xc1,0x66,0xc2,0xb0, + 0x61,0x34,0x61,0x33,0xaf,0x32,0x4c,0x31,0x67,0xa3,0x42,0x29,0x39,0x67,0x33,0x5e, + 0x71,0x24,0x61,0x47,0xaf,0x37,0x4c,0x32,0xa9,0xa3,0x7a,0x29,0x48,0x67,0x38,0x3e, + 0x72,0xae,0x61,0x6d,0xaf,0x41,0x4c,0x35,0x67,0xa4,0x46,0x29,0x5c,0x67,0x3c,0x3e, + 0x73,0xae,0x61,0xa5,0xaf,0x4a,0x2c,0x37,0xa9,0xa4,0x2e,0x29,0x6a,0x67,0x3f,0x7e, + 0x74,0x2c,0x61,0xbb,0xaf,0x50,0x4c,0x38,0xb9,0xa5,0x3e,0x29,0x75,0x67,0x42,0x5e, + 0x75,0x74,0x62,0x47,0xaf,0x57,0x4c,0x3a,0x27,0xa5,0x6a,0x29,0xa2,0x67,0x45,0x5e, + 0x76,0x44,0x62,0x57,0xaf,0x5c,0x4c,0x3c,0x40,0x30,0xbb,0x38,0xbf,0x5f,0x47,0x5e, + 0x76,0x24,0x62,0x75,0xaf,0x62,0x2c,0x3d,0x27,0xa6,0x4a,0x29,0xaa,0x67,0x4b,0xb0, + 0x77,0xa6,0x62,0x2b,0xaf,0x68,0x4c,0x3e,0xb9,0xa6,0x76,0x29,0xb6,0x67,0x4e,0x5e, + 0x78,0x6c,0x62,0xb3,0xaf,0x6e,0x4c,0x40,0x67,0xa6,0xb4,0x29,0xc2,0x67,0x51,0x3e, + 0x79,0x54,0x63,0x3f,0xaf,0x76,0x4c,0x42,0x67,0xa7,0x66,0x2a,0x3f,0x67,0x55,0x5e, + 0x7a,0x44,0x63,0x5b,0xaf,0x7c,0x4c,0x43,0xb9,0xa7,0xa4,0x2a,0x4b,0x67,0x58,0x3e, + 0x7a,0xae,0x63,0x6d,0xaf,0x21,0x4c,0x45,0x57,0xa8,0x52,0x2a,0x5d,0x67,0x5c,0xb0, + 0x7c,0x34,0x63,0xab,0xaf,0x2b,0x2c,0x47,0xa9,0xa8,0x2e,0x2a,0x6b,0x67,0x61,0x3e, + 0x7d,0x3c,0x64,0x35,0xaf,0xa4,0x2c,0x49,0xa9,0xa9,0x4e,0x2a,0x79,0x67,0x63,0xb0, + 0x7d,0xae,0x64,0x4d,0xaf,0xaa,0x2c,0x4b,0x47,0xa9,0x7a,0x2a,0x29,0x67,0x31,0x31, + 0x3e,0x7c,0x64,0x65,0xaf,0xb1,0x4c,0x4c,0x27,0xa9,0xc0,0x2a,0xa7,0x67,0x6a,0x7e, + 0xa1,0x6c,0x64,0x23,0xaf,0xb9,0x4c,0x4e,0x27,0xaa,0x7a,0x2a,0xb7,0x67,0x6f,0x5e, + 0xa2,0xbe,0x61,0x31,0xb0,0x32,0x4c,0x51,0x67,0xab,0x46,0x2b,0x37,0x67,0x73,0x3e, + 0x21,0x7c,0x65,0x45,0xb0,0x37,0x2c,0x52,0xb9,0xab,0x72,0x2b,0x42,0x67,0x75,0xb0, + 0x22,0x54,0x65,0x5b,0xb0,0x3c,0x4c,0x54,0x37,0xab,0xb4,0x2b,0x4e,0x67,0x78,0xb0, + 0x23,0x34,0x65,0x73,0xb0,0x42,0x4c,0x55,0x67,0xac,0x42,0x2b,0x57,0x67,0x7b,0x3e, + 0x23,0x7c,0x65,0x29,0xb0,0x47,0x2c,0x56,0xb9,0xac,0x72,0x2b,0x65,0x67,0x7e,0x7e, + 0x24,0x6c,0x65,0xb3,0xb0,0x4e,0x4c,0x58,0xb9,0xad,0x32,0x2b,0x73,0x67,0x22,0x3e, + 0x25,0x7c,0x66,0x49,0xb0,0x59,0x4c,0x5b,0x27,0xad,0x2a,0x2b,0x28,0x67,0x27,0x3e, + 0x26,0x2c,0x66,0x6b,0xb0,0x60,0x2c,0x5d,0x47,0xae,0x3a,0x2b,0xa7,0x67,0x2a,0x5e, + 0x27,0x6c,0x66,0x21,0xb0,0x66,0x2c,0x5e,0x77,0xae,0x66,0x2b,0xb3,0x67,0x2d,0x5e, + 0x28,0x44,0x66,0xa9,0xb0,0x6b,0x2c,0x5f,0xa9,0xae,0xa8,0x2b,0xbd,0x67,0x2f,0xb0, + 0x28,0xae,0x66,0xbf,0xb0,0x70,0x2c,0x61,0x37,0xaf,0x36,0x2c,0x34,0x67,0xa4,0x3e, + 0x29,0x64,0x67,0x3f,0xb0,0x76,0x4c,0x62,0x67,0xaf,0x66,0x2c,0x40,0x67,0xa7,0x3e, + 0x2a,0x44,0x67,0x5d,0xb0,0x7c,0x2c,0x64,0x37,0xaf,0xa8,0x2c,0x4b,0x67,0xaa,0x3e, + 0x2b,0x44,0x67,0x7b,0xb0,0x27,0x4c,0x66,0x27,0xb0,0x72,0x2c,0x62,0x67,0xaf,0xb0, + 0x2c,0x54,0x67,0xaf,0xb0,0x2c,0x2c,0x68,0x47,0xb0,0xac,0x2c,0x6c,0x67,0xb2,0x3e, + 0x2c,0xae,0x67,0xbf,0xb0,0xa3,0x2c,0x69,0x57,0xb1,0x3e,0x2c,0x79,0x67,0xb5,0x5e, + 0x2d,0x28,0xb2,0xbf,0x34,0xc1,0x48,0x4a,0x27,0xb1,0x6a,0x2c,0xa2,0x67,0xb7,0x3e, + 0x2e,0x44,0x68,0x57,0xb0,0xad,0x4c,0x6b,0x27,0xb1,0x2e,0x2c,0x2b,0x67,0xb9,0xb0, + 0x2e,0xa6,0x68,0x6f,0xb0,0xb4,0x4c,0x6d,0x67,0xb2,0x46,0x2c,0xaa,0x67,0xbd,0x3e, + 0x2f,0x7c,0x68,0x25,0xb0,0xb9,0x2c,0x6e,0xb9,0xb2,0x72,0x2c,0xb5,0x67,0xc0,0x3e, + 0x30,0x5c,0x68,0xaf,0xb0,0xbf,0x4c,0x70,0x57,0xb2,0xb8,0x2c,0xc1,0x67,0xc2,0xb0, + 0x21,0x34,0x69,0x33,0xb1,0x32,0x4c,0x71,0x67,0xb3,0x42,0x2d,0x37,0x68,0x32,0xb0, + 0xa3,0x74,0x69,0x43,0xb1,0x36,0x2c,0x72,0xb9,0xb3,0x7a,0x2d,0x44,0x68,0x36,0x5e, + 0xa4,0x74,0x69,0x63,0xb1,0x3e,0x2c,0x74,0x77,0xb3,0xbc,0x2d,0x50,0x68,0x39,0x7e, + 0xa5,0x64,0x69,0xa1,0xb1,0x45,0x4c,0x76,0x57,0xb4,0x62,0x2d,0x5f,0x68,0x3d,0x3e, + 0xa6,0x3c,0x69,0xa9,0xb1,0x4b,0x2c,0x71,0x31,0x32,0x2a,0x2d,0x68,0x68,0x3f,0x5e, + 0xa6,0x2c,0x69,0xbb,0xb1,0x4f,0x2c,0x78,0xa9,0xb4,0xc0,0x2d,0x71,0x68,0x41,0x5e, + 0xa7,0x44,0x6a,0x3b,0xb1,0x54,0x4c,0x79,0xb9,0xb5,0x52,0x2d,0x7a,0x68,0x43,0x7e, + 0xa7,0x2c,0x6a,0x49,0xb1,0x58,0x2c,0x7b,0x37,0xb5,0x76,0x2d,0x23,0x68,0x46,0x5e, + 0xa8,0x6c,0x6a,0x63,0xb1,0x5e,0x4c,0x7c,0x77,0xb5,0xb8,0x2d,0x2f,0x68,0x49,0x3e, + 0xa9,0x3c,0x6a,0x75,0xb1,0x62,0x2c,0x7d,0x77,0xb6,0x46,0x2d,0xa9,0x68,0x4a,0xb0, + 0xa9,0x74,0x6a,0x23,0xb1,0x66,0x4c,0x7e,0x77,0xb6,0x66,0x2d,0xb2,0x68,0x4d,0x3e, + 0xaa,0x3c,0x6a,0xa7,0xb1,0x6a,0x2c,0xa1,0x77,0xb6,0x26,0x2d,0xb9,0x68,0x4e,0xb0, + 0xaa,0x74,0x6a,0xb5,0xb1,0x6e,0x4c,0xa2,0x67,0xb6,0xb4,0x2d,0xc0,0x68,0x51,0x3e, + 0xab,0x3c,0x6b,0x35,0xb1,0x73,0x4c,0x21,0xb9,0xb7,0x52,0x2e,0x3b,0x68,0x53,0xb0, + 0xab,0xa6,0x6b,0x4b,0xb1,0x78,0x4c,0x23,0x47,0xb7,0x7a,0x2e,0x44,0x68,0x56,0x3e, + 0xac,0x5c,0x6b,0x5d,0xb1,0x7c,0x2c,0x24,0x47,0xb7,0xac,0x2e,0x4c,0x68,0x58,0x5e, + 0xac,0xb6,0x6b,0x71,0xb1,0x21,0x2c,0x25,0x67,0xb8,0x42,0x2e,0x57,0x68,0x5b,0x3e, + 0xad,0x7c,0x6b,0x27,0xb1,0x27,0x4c,0x26,0x27,0xb8,0x6a,0x2e,0x61,0x68,0x5d,0xb0, + 0xae,0x5c,0x6b,0xb3,0xb1,0x2d,0x2c,0x28,0x77,0xb8,0xbc,0x2e,0x70,0x68,0x61,0x3e, + 0xaf,0x4c,0x6c,0x39,0xb1,0xa5,0x2c,0x29,0xa9,0xb9,0x52,0x2e,0x7a,0x68,0x63,0x7e, + 0xaf,0xa6,0x6c,0x4b,0xb1,0xaa,0x4c,0x2b,0x37,0xb9,0x7a,0x2e,0x27,0x68,0x67,0x3e, + 0xb0,0x7c,0x6c,0x67,0xb1,0xb1,0x4c,0x2c,0x27,0xba,0x3e,0x2e,0xaa,0x68,0x6b,0x7e, + 0xb1,0x2c,0x6c,0x29,0xb1,0xb9,0x2c,0x2e,0xa9,0xba,0x70,0xba,0xc1,0x32,0xc2,0x3c, + 0xa2,0x34,0x6c,0xa5,0xb1,0xbc,0x4c,0x2f,0x67,0xba,0x26,0x2e,0xb9,0x68,0x6e,0xb0, + 0xb2,0x74,0x6c,0xb7,0xb1,0xc0,0xc1,0xb0,0xb2,0xa6,0x6c,0xbd,0xb1,0xc2,0x4c,0x30, + 0xb9,0xb3,0x32,0x2f,0x32,0x68,0x71,0xb0,0xb3,0x54,0x6d,0x3b,0xb2,0x34,0x2c,0xa4, + 0x37,0xbb,0x5a,0x2f,0x3c,0x68,0x74,0x3e,0xb3,0xae,0x6d,0x4d,0xb2,0x39,0x4c,0xa5, + 0x47,0xbb,0x7a,0x2f,0x47,0x68,0x76,0xb0,0xb4,0x74,0x6d,0x63,0xb2,0x3e,0x4c,0xa6, + 0x67,0xbb,0xb4,0x2f,0x4e,0x68,0x78,0x7e,0xb4,0xbe,0x6d,0x73,0xb2,0x42,0x4c,0xa7, + 0x67,0xbc,0x46,0x2f,0x57,0x68,0x7a,0xb0,0xb5,0x74,0x6d,0x29,0xb2,0x48,0x4c,0xa9, + 0x37,0xbc,0x7a,0x2f,0x65,0x68,0x7e,0x5e,0xb6,0x6c,0x6d,0xb3,0xb2,0x4d,0x2c,0xaa, + 0x57,0xbc,0xb0,0x2f,0x6d,0x68,0xa2,0x5e,0xb6,0xbe,0x6e,0x31,0xb2,0x51,0x2c,0xab, + 0x57,0xbb,0x31,0x31,0x74,0x68,0x22,0x3e,0xb7,0x5c,0x6e,0x41,0xb2,0x55,0x2c,0xac, + 0x57,0xbd,0x62,0x2f,0xa1,0x68,0x24,0xb0,0xb8,0x34,0x6e,0x53,0xb2,0x5a,0x4c,0xad, + 0x67,0xbd,0x22,0x2f,0x26,0x68,0x26,0x7e,0xb8,0x6c,0x6e,0x63,0xb2,0x5e,0x4c,0xae, + 0x67,0xbd,0xb8,0x2f,0x30,0x68,0x29,0x3e,0xb9,0x3c,0x6e,0x77,0xb2,0x63,0x4c,0xaf, + 0x27,0xbe,0x4e,0x2f,0xab,0x68,0x2b,0x5e,0xb9,0x24,0x6e,0x27,0xb2,0x67,0x4c,0xb0, + 0xb9,0xbe,0x72,0x2f,0xb4,0x68,0x2d,0xb0,0xba,0x5c,0x6e,0xaf,0xb2,0x6c,0x2c,0xb2, + 0x47,0xbe,0xb0,0x2f,0xc0,0x68,0x30,0x7e,0xba,0xbe,0x6f,0x31,0xb2,0x71,0x2c,0xb3, + 0x57,0xbf,0x3e,0x30,0x36,0x68,0xa4,0x7e,0xbb,0x6c,0x6f,0x45,0xb2,0x76,0x2c,0xb4, + 0xb9,0xbf,0x72,0x30,0x42,0x68,0xa7,0x7e,0xbc,0x4c,0x6f,0x59,0xb2,0x7b,0x2c,0xb5, + 0xa9,0xbf,0x2e,0x30,0x49,0x68,0xa9,0x5e,0xbc,0x24,0x6f,0x67,0xb2,0xa1,0x2c,0xb6, + 0xa9,0xbf,0xc0,0x30,0x51,0x68,0xab,0x7e,0xbd,0x4c,0x6f,0x79,0xb2,0x23,0x2c,0xb7, + 0xa9,0xc0,0x52,0x30,0x5a,0x68,0xad,0x7e,0xbd,0x2c,0x6f,0x29,0xb2,0x27,0x2c,0xb8, + 0xa9,0xc0,0x6e,0x30,0x61,0x68,0xaf,0x5e,0xbe,0x44,0x6f,0xab,0xb2,0x2b,0x2c,0xb9, + 0xb9,0xc0,0xa4,0x30,0x6b,0x68,0xb1,0xb0,0xbe,0xa6,0x6f,0xbd,0xb2,0x30,0x4c,0xba, + 0xb9,0xc1,0x36,0x30,0x74,0x68,0xb4,0x3e,0xbf,0x5c,0x70,0x3d,0xb2,0xa6,0x2c,0xbc, + 0x37,0xc1,0x5a,0x30,0x7c,0x68,0xb6,0x3e,0xbf,0xae,0x70,0x4d,0xb2,0xaa,0x2c,0xbd, + 0x37,0xc1,0x7e,0x30,0x25,0x68,0xb8,0x5e,0xc0,0x64,0x70,0x5f,0xb2,0xaf,0x4c,0xbe, + 0x47,0xc1,0xac,0x30,0x2c,0x68,0xba,0x3e,0xc0,0xae,0x70,0x6f,0xb2,0xb4,0x4c,0xbf, + 0x67,0xc2,0x42,0x30,0xa8,0xc0,0xc2,0x71,0x70,0xa5,0xb6,0x7d,0xb2,0xb6,0x2c,0xc0, + 0x37,0xc2,0x56,0x30,0xad,0x68,0xbd,0xb0,0xc1,0xa6,0x70,0x2b,0xb2,0xbb,0x4c,0xc1, + 0x47,0xc2,0x7a,0x30,0xb6,0x68,0xc0,0x3e,0xc2,0x5c,0x70,0xaf,0xb2,0xbe,0x2c,0xc2, + 0x37,0xc2,0xa8,0x30,0xbd,0x68,0xc1,0xc2,0x67,0xc2,0xb4,0x30,0xc0,0x68,0xc2,0x7e, + 0xc2,0xbe,0x6d,0x31,0xb3,0x31,0x2d,0x31,0x58,0x31,0x3e,0xa3,0x35,0x69,0x32,0x5f, + 0x31,0x64,0x71,0x3f,0xb3,0x35,0x4d,0x32,0x48,0x31,0x5a,0xa3,0x3c,0x69,0x34,0x3f, + 0x31,0xae,0x71,0x4d,0xb3,0x38,0x2d,0x33,0x38,0x31,0x7a,0xa3,0x44,0x69,0x36,0x3f, + 0x32,0x5c,0x71,0x5d,0xb3,0x3c,0x2d,0x34,0x38,0x31,0xa8,0xa3,0x4d,0x69,0x38,0x5f, + 0x32,0xb6,0x71,0x6f,0xb3,0x41,0x4d,0x35,0x48,0x32,0x3a,0xa3,0x55,0x69,0x3a,0x5f, + 0x33,0x64,0x71,0xa1,0xb3,0x45,0x4d,0x36,0x48,0x32,0x5a,0xa3,0x31,0x31,0x3b,0xb1, + 0x33,0xa6,0x71,0x2b,0xb3,0x48,0x4d,0x36,0xba,0x32,0x72,0xa3,0x62,0x69,0x3d,0xa1, + 0x34,0x4c,0x71,0xab,0xb3,0x4c,0x4d,0x37,0xba,0x32,0xa4,0xa3,0x6b,0x69,0x3f,0xb1, + 0x34,0xa6,0x71,0xbd,0xb3,0x50,0x4d,0x38,0xba,0x33,0x32,0xa3,0x72,0x69,0x41,0xa1, + 0x35,0x4c,0x72,0x39,0xb3,0x53,0x2d,0x39,0xaa,0x33,0x4e,0xa3,0x79,0x69,0x43,0x5f, + 0x35,0x24,0x72,0x47,0xb3,0x57,0x2d,0x3a,0xaa,0x33,0x72,0xa3,0x22,0x69,0x45,0xa1, + 0x36,0x4c,0x72,0x59,0xb3,0x5b,0x2d,0x3b,0xaa,0x33,0x2e,0xa3,0x29,0x69,0x47,0x5f, + 0x36,0x24,0x72,0x67,0xb3,0x5f,0x4d,0x3c,0x28,0x33,0xc0,0xa3,0xa3,0x69,0x49,0x5f, + 0x37,0x44,0x72,0x77,0xb3,0x63,0x4d,0x3d,0x28,0x34,0x4a,0xa3,0xaa,0x69,0x4b,0x3f, + 0x37,0x7c,0x72,0x25,0xb3,0x68,0x4d,0x3f,0x48,0x34,0x7a,0xa3,0xb6,0x69,0x4e,0x3f, + 0x38,0x6c,0x72,0xb5,0xb3,0x6e,0x4d,0x40,0x68,0x34,0xb8,0xa4,0x32,0x69,0x51,0xa1, + 0x39,0x4c,0x73,0x39,0xb3,0x74,0x4d,0x41,0xba,0x35,0x52,0xa4,0x3c,0x69,0x54,0x3f, + 0x39,0xae,0x73,0x4f,0xb3,0x79,0x4d,0x43,0x48,0x35,0x7e,0xa4,0x48,0x69,0x57,0x3f, + 0x3a,0x24,0x73,0x67,0xb3,0xa2,0x4d,0x44,0xba,0x36,0x32,0xa4,0x52,0x69,0x59,0xa1, + 0x3b,0x4c,0x73,0x79,0xb3,0x23,0x2d,0x45,0xaa,0x36,0x4e,0xa4,0x59,0x69,0x5b,0x5f, + 0x3b,0x24,0x73,0xa3,0xb3,0x2a,0x4d,0x47,0x78,0x36,0x26,0xa4,0x67,0x69,0x5f,0xa1, + 0x3c,0xb6,0x73,0xc1,0xb3,0xa5,0x4d,0x49,0x28,0x37,0x4a,0xa4,0x78,0x69,0x63,0x5f, + 0x3d,0x2c,0x74,0x49,0xb3,0xa9,0x2d,0x4a,0xaa,0x37,0x6e,0xa4,0x21,0x69,0x65,0x5f, + 0x3e,0x44,0x74,0x57,0xb3,0xad,0x4d,0x4b,0x28,0x37,0x2a,0xa4,0x28,0x69,0x67,0x30, + 0x70,0xb3,0x40,0xbb,0x2d,0xb1,0x4d,0x4c,0x28,0x37,0xbc,0xa4,0xa3,0x69,0x69,0x5f, + 0x3f,0x44,0x74,0x77,0xb3,0xb5,0x2d,0x4e,0x58,0x38,0x6a,0xa4,0xb3,0x69,0x6d,0x5f, + 0x40,0x44,0x74,0xa9,0xb3,0xbd,0x4d,0x4f,0x28,0x38,0x2a,0xa4,0xbb,0x69,0x6f,0xa1, + 0x40,0x30,0xb0,0xa4,0xbf,0x69,0x70,0xa1,0x40,0xbe,0x71,0x31,0xb4,0x31,0x2d,0x51, + 0x58,0x39,0x3e,0xa5,0x35,0x69,0x72,0x5f,0x41,0x64,0x75,0x3f,0xb4,0x35,0x4d,0x52, + 0x68,0x39,0x62,0xa5,0x3e,0x69,0x74,0xa1,0x41,0xbe,0x75,0x53,0xb4,0x3a,0x4d,0x53, + 0x78,0x39,0x2e,0xa5,0x4c,0x69,0x78,0x3f,0x42,0xae,0x75,0x6d,0xb4,0x40,0x2d,0x55, + 0x38,0x3a,0x36,0xa5,0x53,0x69,0x79,0xb1,0x43,0x54,0x75,0x7b,0xb4,0x44,0x2d,0x56, + 0x38,0x3a,0x56,0xa5,0x5b,0x69,0x7b,0xb1,0x43,0xa6,0x75,0x2b,0xb4,0x48,0x4d,0x57, + 0x58,0x3a,0x7e,0xa5,0x65,0x69,0x71,0x31,0x34,0x5c,0x75,0xb1,0xb4,0x4d,0x4d,0x58, + 0x48,0x3a,0xac,0xa5,0x6c,0x69,0xa2,0x3f,0x44,0xae,0x75,0xbf,0xb4,0x50,0x2d,0x59, + 0x38,0x3b,0x36,0xa5,0x73,0x69,0x21,0xb1,0x45,0x54,0x76,0x3d,0xb4,0x54,0x2d,0x5a, + 0x38,0x3b,0x56,0xa5,0x7c,0x69,0x24,0x5f,0x45,0xbe,0x76,0x51,0xb4,0x59,0x2d,0x5b, + 0x58,0x3b,0x7e,0xa5,0x25,0x69,0x26,0x5f,0x46,0x64,0x76,0x5f,0xb4,0x5d,0x4d,0x5c, + 0x48,0x3b,0xac,0xa5,0x2c,0x69,0x28,0x5f,0x46,0xbe,0x76,0x71,0xb4,0x61,0x2d,0x5d, + 0x58,0x3c,0x3e,0xa5,0xa8,0x69,0x2b,0x5f,0x47,0x24,0x76,0x27,0xb4,0x67,0x4d,0x5e, + 0x28,0x3c,0x6e,0xa5,0xb3,0x69,0x2d,0x5f,0x48,0x54,0x76,0xad,0xb4,0x6c,0x4d,0x5f, + 0xba,0x3c,0xa8,0xa5,0xbe,0x69,0x30,0x3f,0x48,0xb6,0x76,0xc1,0xb4,0x71,0x4d,0x61, + 0x48,0x3d,0x3a,0xa6,0x34,0x69,0xa4,0x5f,0x49,0x64,0x77,0x3f,0xb4,0x75,0x4d,0x62, + 0x48,0x3d,0x5e,0xa6,0x3d,0x69,0xa6,0x5f,0x49,0xb6,0x77,0x51,0xb4,0x79,0x2d,0x63, + 0x58,0x3d,0x7e,0xa6,0x46,0x69,0xa8,0xa1,0x4a,0x6c,0x77,0x65,0xb4,0x7e,0x2d,0x64, + 0x78,0x3d,0xb8,0xa6,0x4f,0x69,0xab,0x5f,0x4b,0x44,0x77,0x77,0xb4,0x23,0x4d,0x65, + 0x28,0x3e,0x4a,0xa6,0x58,0x69,0xad,0x5f,0x4b,0x24,0x77,0x27,0xb4,0x27,0x2d,0x66, + 0xaa,0x3e,0x6e,0xa6,0x61,0x69,0xaf,0x5f,0x4c,0x44,0x77,0xab,0xb4,0x2c,0x4d,0x67, + 0xba,0x3e,0xa4,0xa6,0x6b,0x69,0xb1,0xb1,0x4c,0xa6,0x77,0xbd,0xb4,0x30,0x4d,0x68, + 0xba,0x3f,0x32,0xa6,0x72,0x69,0xb3,0xa1,0x4d,0x54,0x78,0x3b,0xb4,0xa6,0x4d,0x69, + 0xba,0x3f,0x52,0xa6,0x7a,0x69,0xb5,0xa1,0x4d,0x2c,0x78,0x49,0xb4,0xa9,0x2d,0x6a, + 0xba,0x3f,0x72,0xa6,0x22,0x69,0xb7,0xa1,0x4e,0x50,0xb2,0xbf,0x34,0xc1,0x48,0x4b, + 0xaa,0x3f,0x2e,0xa6,0x29,0x69,0xb9,0x5f,0x4e,0x24,0x78,0x67,0xb4,0xb1,0x4d,0x6c, + 0x28,0x3f,0xbc,0xa6,0x30,0x69,0xbb,0x5f,0x4f,0x44,0x78,0x77,0xb4,0xb5,0x4d,0x6d, + 0xaa,0x40,0x52,0xa6,0xac,0x69,0xbd,0xa1,0x4f,0x2c,0x78,0x29,0xb4,0xb9,0x2d,0x6e, + 0xba,0x40,0x72,0xa6,0xb4,0x69,0xbf,0xa1,0x50,0x4c,0x78,0xab,0xb4,0xbd,0x2d,0x6f, + 0xaa,0x40,0x2e,0xa6,0xbb,0x69,0xc1,0xa1,0x50,0x30,0xb0,0xa6,0xbf,0x69,0xc2,0x5f, + 0x50,0xb6,0x78,0xc1,0xb4,0x31,0x4d,0x71,0x48,0x41,0x3a,0xa7,0x34,0x6a,0x32,0x3f, + 0x51,0x5c,0x79,0x3f,0xb5,0x35,0x4d,0x72,0x48,0x41,0x5a,0xa7,0x3c,0x6a,0x34,0x3f, + 0x51,0xae,0x79,0x4d,0xb5,0x38,0x2d,0x73,0x38,0x41,0x76,0xa7,0x43,0x6a,0x35,0xb1, + 0x52,0x54,0x79,0x5b,0xb5,0x3c,0x4d,0x73,0xba,0x41,0xa4,0xa7,0x4a,0x6a,0x37,0xa1, + 0x51,0x31,0x31,0x67,0xb5,0x3f,0x4d,0x74,0xaa,0x41,0xc0,0xa7,0x51,0x6a,0x39,0x5f, + 0x53,0x44,0x79,0x77,0xb5,0x43,0x4d,0x75,0x28,0x42,0x4a,0xa7,0x58,0x6a,0x3b,0x5f, + 0x53,0x2c,0x79,0x2b,0xb5,0x48,0x4d,0x76,0xba,0x42,0x7a,0xa7,0x64,0x6a,0x3e,0x3f, + 0x54,0x24,0x79,0xbb,0xb5,0x50,0x4d,0x79,0x38,0x43,0x36,0xa7,0x73,0x6a,0x41,0xb1, + 0x55,0x54,0x7a,0x3b,0xb5,0x54,0x4d,0x7a,0x48,0x43,0x5a,0xa7,0x7c,0x6a,0x44,0xa1, + 0x55,0xbe,0x7a,0x51,0xb5,0x59,0x2d,0x7b,0x68,0x43,0x22,0xa7,0x26,0x6a,0x46,0xb1, + 0x56,0x74,0x7a,0x65,0xb5,0x5f,0x4d,0x7c,0xaa,0x44,0x32,0xa7,0xa6,0x6a,0x4a,0x3f, + 0x57,0x5c,0x7a,0x21,0xb5,0x66,0x4d,0x7e,0x68,0x44,0x62,0xa7,0xb0,0x6a,0x4d,0x3f, + 0x58,0x3c,0x7a,0xa9,0xb5,0x6b,0x4d,0xa1,0xaa,0x44,0x2e,0xa7,0xbb,0x6a,0x4f,0xb1, + 0x58,0xa6,0x7a,0xbd,0xb5,0x72,0x4d,0x21,0x68,0x45,0x46,0xa8,0x37,0x6a,0x52,0xb1, + 0x59,0x74,0x7b,0x43,0xb5,0x77,0x4d,0x22,0xaa,0x45,0x72,0xa8,0x42,0x6a,0x55,0xb1, + 0x5a,0x54,0x7b,0x5b,0xb5,0x7c,0x4d,0x23,0xba,0x45,0xa4,0xa8,0x4a,0x6a,0x57,0xa1, + 0x5a,0x2c,0x7b,0x69,0xb5,0xa1,0x2d,0x24,0xaa,0x46,0x32,0xa8,0x52,0x6a,0x59,0xa1, + 0x5b,0x4c,0x7b,0x79,0xb5,0x23,0x2d,0x25,0xaa,0x46,0x4e,0xa8,0x59,0x6a,0x5b,0x5f, + 0x5b,0x24,0x7b,0x27,0xb5,0x28,0x4d,0x27,0x48,0x46,0x7a,0xa8,0x64,0x6a,0x5e,0x5f, + 0x5c,0x24,0x7b,0xb9,0xb5,0x2f,0x4d,0x28,0x28,0x46,0xbc,0xa8,0x70,0x6a,0x61,0x3f, + 0x5d,0x5c,0x7c,0x3d,0xb5,0xa6,0x2d,0x2a,0x48,0x47,0x5a,0xa8,0x7c,0x6a,0x64,0x3f, + 0x5d,0xbe,0x7c,0x53,0xb5,0xac,0x2d,0x2b,0x78,0x47,0x26,0xa8,0x27,0x6a,0x67,0x3f, + 0x5e,0x24,0x7c,0x68,0xbe,0xc2,0x31,0xc2,0x76,0xa9,0x4c,0x7a,0x78,0xb5,0x63,0x4d, + 0x7d,0xa2,0x44,0x46,0xa7,0xa8,0xbc,0x4a,0xa1,0x57,0x68,0x7a,0xa1,0xb5,0x64,0xbf, + 0x7e,0x38,0x44,0x54,0xa7,0xac,0x6a,0x4b,0x6f,0x57,0x24,0x7a,0x26,0xb5,0x66,0x2d, + 0x7e,0x70,0x44,0x62,0xa7,0xaf,0xbc,0x4c,0x5f,0x57,0xb2,0x7a,0x2d,0xb5,0x68,0x6d, + 0x7e,0xba,0x44,0x70,0xa7,0xb3,0x6a,0x4d,0x4f,0x58,0x3c,0x7a,0xa6,0xb5,0x6a,0x4d, + 0xa1,0x60,0x44,0x7e,0xa7,0xb6,0xbc,0x4e,0x3f,0x58,0x58,0x7a,0xad,0xb5,0x6b,0xbf, + 0xa1,0xaa,0x44,0x2c,0xa7,0xba,0x6a,0x4e,0xc1,0x58,0x74,0x7a,0xb4,0xb5,0x6d,0x2d, + 0xa2,0x50,0x44,0xac,0xa7,0xbd,0xbc,0x4f,0xb1,0x58,0x30,0x7a,0xbb,0xb5,0x6f,0x6d, + 0xa2,0x28,0x44,0xba,0xbe,0xb5,0x70,0x4d,0xa2,0xb2,0x44,0xc0,0xa7,0xc2,0xbc,0x31, + 0x3f,0x59,0x38,0x7b,0x33,0xb5,0x71,0xbf,0x21,0x58,0x45,0x31,0x31,0x33,0xbc,0x51, + 0xb1,0x59,0x50,0x7b,0x39,0xb5,0x73,0x6d,0x21,0x28,0x45,0x48,0xa8,0x37,0x6a,0x52, + 0x2f,0x59,0x6c,0x7b,0x40,0xb5,0x75,0x4d,0x22,0x40,0x45,0x56,0xa8,0x3a,0xbc,0x53, + 0xa1,0x59,0x28,0x7b,0x47,0xb5,0x76,0xbf,0x22,0x78,0x45,0x64,0xa8,0x3e,0x6a,0x54, + 0x6f,0x59,0xb6,0x7b,0x4e,0xb5,0x78,0x2d,0x22,0xc2,0x45,0x72,0xa8,0x41,0xbc,0x55, + 0x5f,0x5a,0x40,0x7b,0x55,0xb5,0x7a,0x6d,0x21,0x32,0x71,0x33,0x61,0x32,0x3d,0x47, + 0xb3,0x37,0x55,0x36,0x78,0x32,0x5b,0x31,0x31,0x4a,0x71,0x3b,0x61,0x3b,0x39,0x3c, + 0xb2,0xbb,0x29,0x71,0x57,0x41,0x37,0x35,0x32,0x7a,0x31,0x69,0x51,0x3f,0x79,0x33, + 0x74,0x31,0x25,0xa3,0x39,0x49,0x33,0x57,0x31,0x22,0x71,0x47,0x61,0x37,0x3d,0x32, + 0x24,0x31,0x69,0xa3,0x40,0x49,0x36,0x77,0x32,0x6a,0x71,0x51,0x61,0x39,0x7d,0x47, + 0x41,0x37,0x2d,0x32,0xba,0x31,0x3e,0x75,0x53,0x6a,0x39,0x21,0x53,0x39,0x79,0x72, + 0xb5,0x42,0x59,0x75,0x5a,0x42,0x33,0x35,0x54,0x6a,0x39,0x65,0x53,0x23,0x79,0x75, + 0x23,0x42,0x31,0x75,0x43,0x42,0xa9,0x55,0x53,0x2a,0x39,0x2d,0x53,0x61,0x79,0x7a, + 0x73,0x43,0x51,0x75,0x6e,0x42,0x38,0x55,0x57,0x32,0x3a,0x2d,0x53,0x68,0x79,0x7d, + 0x73,0x44,0x45,0x75,0x4f,0x42,0x3e,0x55,0x54,0x52,0x3a,0x35,0x57,0x51,0x3a,0x27, + 0x31,0x32,0x79,0x71,0x64,0x41,0x31,0xa7,0x41,0x58,0xc1,0x79,0x31,0xb3,0x70,0xbf, + 0x50,0xbc,0x71,0x72,0x58,0x31,0x36,0x75,0x41,0x62,0x49,0x3b,0x57,0xa8,0x7a,0x6a, + 0xb5,0x5f,0x69,0x7c,0x78,0x43,0xb4,0x75,0x2b,0x3a,0x47,0x71,0x56,0x2a,0x7a,0x67, + 0x53,0x5a,0xaf,0x72,0x43,0x41,0xa7,0x35,0x4a,0x3a,0x37,0x57,0x52,0x3a,0xc1,0xc2, + 0xa3,0x50,0xb6,0x75,0x57,0xb5,0x7a,0xbf,0x23,0x78,0x45,0x24,0xa8,0x46,0x6a,0x56, + 0x6f,0x5a,0x64,0x7b,0x5e,0xb5,0x7c,0x2d,0x23,0xc2,0x45,0xa4,0xa8,0x49,0xbc,0x57, + 0x5f,0x5a,0xa2,0x7b,0x65,0xb5,0x7e,0x6d,0x24,0x68,0x45,0xb2,0xa8,0x4d,0x6a,0x58, + 0x4f,0x5a,0xae,0x7b,0x6c,0xb5,0xa2,0x4d,0x24,0xb2,0x45,0xc0,0xa8,0x50,0xbc,0x59, + 0x3f,0x5b,0x38,0x7b,0x73,0xb5,0x21,0xbf,0x25,0x58,0x46,0x3c,0xa8,0x54,0x6a,0x59, + 0xc1,0x5b,0x54,0x7b,0x7a,0xb5,0x23,0x2d,0x25,0x30,0x46,0x4a,0xa8,0x57,0xbc,0x5a, + 0xb1,0x5b,0x70,0x7b,0x21,0xb5,0x25,0x6d,0x26,0x48,0x46,0x58,0xa8,0x5b,0x6a,0x5b, + 0x2f,0x5b,0x2c,0x7b,0x28,0xb5,0x27,0x4d,0x26,0xa2,0x46,0x66,0xa8,0x5e,0xbc,0x5c, + 0xa1,0x5b,0xba,0x7b,0x2f,0xb5,0x28,0xbf,0x27,0x38,0x46,0x74,0xa8,0x62,0x6a,0x5d, + 0x6f,0x5c,0x44,0x7b,0x31,0x31,0x4a,0x6d,0x27,0x68,0x46,0xa2,0xa8,0x65,0x6a,0x5e, + 0x4f,0x5c,0x5c,0x7b,0xae,0xb5,0x2c,0x4d,0x27,0xb2,0x46,0x2e,0xa8,0x68,0xbc,0x5f, + 0x3f,0x5c,0x78,0x7b,0xb5,0xb5,0x2d,0xbf,0x28,0x58,0x46,0xae,0xa8,0x6c,0x6a,0x5f, + 0xc1,0x5c,0xa6,0x7b,0xbc,0xb5,0x2f,0x2d,0x28,0x30,0x46,0xbc,0xa8,0x6f,0xbc,0x60, + 0xb1,0x5c,0xc2,0x7c,0x31,0xb5,0xa3,0x6d,0x29,0x48,0x47,0x38,0xa8,0x73,0x6a,0x61, + 0x2f,0x5c,0x71,0x73,0xb4,0x41,0x2d,0x75,0x48,0x4a,0x36,0xab,0x52,0x6b,0x79,0x5f, + 0xa5,0x3c,0x2d,0x73,0xbb,0x41,0x2f,0x55,0x47,0x68,0x4e,0xa2,0xaa,0x65,0x6a,0xb0, + 0x4f,0x6c,0x5c,0xa1,0xae,0xb6,0xa5,0x35,0x79,0x7a,0x43,0x45,0x55,0x76,0x7a,0x42, + 0x73,0x55,0x65,0x7a,0x3f,0x43,0x54,0xa7,0x7a,0x32,0x43,0x53,0x55,0x7a,0x3a,0x43, + 0x63,0x55,0x21,0x7a,0x46,0x43,0x56,0x75,0x7a,0x6a,0x43,0x61,0x55,0x7d,0x7a,0x44, + 0x53,0x55,0xaf,0x79,0xb7,0x43,0x4e,0x55,0x78,0x62,0x42,0xb1,0x55,0x6d,0x3a,0x40, + 0x43,0x54,0xab,0x79,0xbe,0x43,0x50,0x35,0x78,0xac,0x42,0xbf,0x55,0x70,0x7a,0x41, + 0x33,0x55,0x35,0x7a,0x33,0x43,0x51,0xa7,0x79,0x52,0x43,0x3b,0x55,0x74,0x3a,0x41, + 0xb5,0x54,0x31,0x79,0xa4,0x43,0x49,0x75,0x77,0x4a,0x42,0x79,0x55,0x63,0x7a,0x3d, + 0xa5,0x54,0x4d,0x79,0xab,0x43,0x4b,0x55,0x77,0xaa,0x4e,0x2c,0xaa,0x41,0x3d,0x75, + 0x44,0x42,0x39,0xa7,0x54,0x4a,0x3a,0x37,0x53,0x5a,0x79,0x7d,0x63,0x44,0x7d,0x76, + 0x34,0x42,0x55,0xa7,0xb1,0xb6,0x2c,0xbf,0xb9,0x32,0x36,0x73,0x52,0x62,0x39,0x5d, + 0x63,0x3c,0x41,0x73,0xa8,0x41,0x2a,0x75,0x47,0x6a,0x36,0x21,0x52,0x65,0x79,0x5e, + 0x53,0x3c,0x5d,0x73,0xb3,0xb6,0x2d,0x6d,0xc2,0x30,0x25,0x38,0xc2,0x31,0xa4,0x2d, + 0x29,0x70,0x47,0x42,0xa8,0x75,0xbc,0x62,0x5f,0x5d,0x60,0x7c,0x3d,0xb5,0xa6,0x6d, + 0x29,0xba,0x47,0x50,0xa8,0x79,0x6a,0x63,0x4f,0x5d,0x7c,0x7c,0x44,0xb5,0xa8,0x4d, + 0x2a,0x60,0x47,0x5e,0xa8,0x7c,0xbc,0x64,0x3f,0x5d,0xaa,0x7c,0x4b,0xb5,0xa9,0xbf, + 0x2a,0xaa,0x47,0x6c,0xa8,0xa2,0x6a,0x64,0xc1,0x5e,0x34,0x7c,0x52,0xb5,0xab,0x2d, + 0x2b,0x50,0x47,0x7a,0xa8,0x23,0xbc,0x65,0xb1,0x5e,0x50,0x7c,0x59,0xb5,0xad,0x6d, + 0x2b,0x28,0x47,0x28,0xa8,0x27,0x6a,0x66,0x2f,0x5e,0x6c,0x7c,0x60,0xb5,0xaf,0x4d, + 0x2c,0x40,0x47,0xa8,0xa8,0x2a,0xbc,0x67,0xa1,0x5e,0x28,0x7c,0x67,0xb5,0xb0,0xbf, + 0x2c,0x78,0x47,0xb6,0xa8,0x2e,0x6a,0x68,0x6f,0x5e,0xb6,0x7c,0x6e,0xb5,0xb2,0x2d, + 0x2c,0xc2,0x48,0x32,0xa8,0xa3,0xbc,0x69,0x5f,0x5f,0x40,0x7c,0x75,0xb5,0x71,0x31, + 0x3d,0x60,0x48,0x3e,0xa8,0xa6,0xbc,0x6a,0x3f,0x5f,0x58,0x7c,0x7b,0xb5,0xb5,0xbf, + 0x2d,0xaa,0x48,0x4c,0xa8,0xaa,0x6a,0x6a,0xc1,0x5f,0x74,0x7c,0x22,0xb5,0xb7,0x2d, + 0x2e,0x50,0x48,0x5a,0xa8,0xad,0xbc,0x6b,0xb1,0x5f,0x30,0x7c,0x29,0xb5,0xb9,0x6d, + 0x2e,0x28,0x48,0x68,0xa8,0xb1,0x6a,0x6c,0x2f,0x5f,0xbe,0x7c,0x30,0xb5,0xbb,0x4d, + 0x2f,0x40,0x48,0x76,0xa8,0xb4,0xbc,0x6d,0xa1,0x60,0x48,0x7b,0x32,0xc2,0x71,0x30, + 0xb3,0x50,0xc2,0x7c,0xc2,0x33,0xc2,0xa3,0xb2,0xbb,0x50,0xc1,0x39,0xc2,0x73,0x70, + 0xb3,0x28,0xbf,0x48,0xc2,0x37,0x70,0xa4,0x30,0xbb,0x6c,0xc1,0x40,0xc2,0x75,0x50, + 0xb4,0x40,0xbf,0x56,0xc2,0x3a,0xc2,0xa5,0xa2,0xbb,0x28,0xc1,0x47,0xc2,0x76,0xc2, + 0xb4,0x78,0xbf,0x64,0xc2,0x3e,0x70,0xa6,0x70,0xbb,0xb6,0xc1,0x4e,0xc2,0x78,0x30, + 0xb4,0xc2,0xbf,0x72,0xc2,0x41,0xc2,0xa7,0x60,0xbc,0x40,0xc1,0x55,0xc2,0x7a,0x70, + 0xb5,0x68,0xbf,0xa2,0xc2,0x45,0x70,0xa8,0x50,0xbc,0x5c,0xc1,0x5c,0xc2,0x7c,0x50, + 0xb5,0xb2,0xbf,0x2e,0xc2,0x48,0xc2,0xa9,0x40,0xbc,0x78,0xc1,0x63,0xc2,0x7d,0xc2, + 0xb6,0x58,0xbf,0xae,0xc2,0x4c,0x70,0xa9,0xc2,0xbc,0xa6,0xc1,0x6a,0xc2,0xa1,0x30, + 0xb6,0x30,0xbf,0xbc,0xc2,0x4f,0xc2,0xaa,0xb2,0xbc,0xc2,0xc1,0x71,0xc2,0x21,0x70, + 0xb7,0x48,0xc0,0x38,0xc2,0x53,0x70,0xab,0x30,0xbd,0x4c,0xc1,0x78,0xc2,0x23,0x50, + 0xb7,0xa2,0xc0,0x46,0xc2,0x56,0xc2,0xac,0xa2,0xbd,0x68,0xc1,0xa1,0xc2,0x24,0xc2, + 0xb8,0x38,0xc0,0x54,0xc2,0x5a,0x70,0xad,0x70,0xbd,0x24,0xc1,0x26,0xc2,0x26,0x30, + 0xb8,0x70,0xc0,0x62,0xc2,0x5d,0xc2,0xae,0x60,0xbd,0xb2,0xc1,0x2d,0xc2,0x28,0x70, + 0xc1,0x50,0xc2,0xba,0xc1,0x32,0xc2,0xa4,0x6f,0x60,0x50,0x7c,0xab,0xb5,0xbd,0x6d, + 0x2f,0x28,0x48,0x28,0xa8,0xb9,0x6a,0x6e,0x2f,0x60,0x6c,0x7c,0xb2,0xb5,0xbf,0x4d, + 0x30,0x40,0x48,0xa8,0xa8,0xbc,0xbc,0x6f,0xa1,0x60,0x28,0x7c,0xb9,0xb5,0xc0,0xbf, + 0x30,0x78,0x48,0xb6,0xa8,0xc0,0x6a,0x70,0x70,0x30,0x48,0xbc,0xa8,0xc1,0xbc,0x70, + 0xb1,0x60,0xc2,0x7b,0x31,0xb6,0x31,0x6d,0xa3,0x48,0x49,0x38,0xa9,0x33,0x6a,0x71, + 0x2f,0x61,0x4c,0x7d,0x38,0xb6,0x33,0x4d,0xa3,0xa2,0x49,0x46,0xa9,0x36,0xbc,0x72, + 0xa1,0x61,0x68,0x7d,0x3f,0xb6,0x34,0xbf,0xa4,0x38,0x49,0x54,0xa9,0x3a,0x6a,0x73, + 0x6f,0x61,0x24,0x7d,0x46,0xb6,0x36,0x2d,0xa4,0x70,0x49,0x62,0xa9,0x3d,0xbc,0x74, + 0x5f,0x61,0xb2,0x7d,0x4d,0xb6,0x38,0x6d,0xa4,0xba,0x49,0x70,0xa9,0x41,0x6a,0x75, + 0x4f,0x62,0x3c,0x7d,0x54,0xb6,0x3a,0x4d,0xa3,0x31,0x31,0x7c,0xa9,0x44,0x6a,0x75, + 0xc1,0x62,0x54,0x7d,0x5a,0xb6,0x3b,0x2d,0xa5,0x30,0x49,0x2a,0xa9,0x47,0xbc,0x76, + 0xb1,0x62,0x70,0x7d,0x61,0xb6,0x3d,0x6d,0xa6,0x48,0x49,0xaa,0xa9,0x4b,0x6a,0x77, + 0x2f,0x62,0x2c,0x7d,0x68,0xb6,0x3f,0x4d,0xa6,0xa2,0x49,0xb8,0xa9,0x4e,0xbc,0x78, + 0xa1,0x62,0xba,0x7d,0x6f,0xb6,0x40,0xbf,0xa7,0x38,0x4a,0x34,0xa9,0x52,0x6a,0x79, + 0x6f,0x63,0x44,0x7d,0x76,0xb6,0x41,0x57,0x35,0x42,0x72,0x37,0x61,0x53,0x3d,0x39, + 0x24,0x33,0x49,0xa3,0x78,0x49,0x43,0x37,0x35,0x7a,0x72,0x45,0x61,0x56,0x7d,0x3a, + 0x74,0x33,0x65,0xa3,0xa1,0x49,0x44,0xa9,0x36,0x32,0x72,0x53,0x61,0x5a,0x3d,0x3b, + 0x64,0x33,0x21,0xa3,0x26,0x49,0x46,0x77,0x36,0x6a,0x72,0x61,0x61,0x5d,0x7d,0x3c, + 0x54,0x33,0xaf,0xa3,0x2d,0x49,0x48,0x57,0x36,0xb4,0x72,0x6f,0x61,0x61,0x3d,0x3d, + 0x44,0x34,0x39,0xa3,0xa6,0x49,0x4a,0x37,0x37,0x5a,0x72,0x7d,0x61,0x64,0x7d,0x3e, + 0x34,0x34,0x55,0xa3,0xad,0x49,0x4b,0xa9,0x37,0xa4,0x72,0x2b,0x61,0x68,0x3d,0x3e, + 0xb6,0x34,0x71,0xa3,0xb4,0x49,0x4d,0x77,0x38,0x4a,0x72,0xab,0x61,0x6b,0x7d,0x3f, + 0xa6,0x34,0x2d,0xa3,0xbb,0x49,0x4f,0x57,0x38,0x22,0x72,0xb9,0x61,0x6f,0x3d,0x40, + 0x24,0x34,0xbb,0xa3,0xc2,0x49,0x51,0x37,0x39,0x3a,0x73,0x35,0x61,0x72,0x7d,0x41, + 0x74,0x35,0x45,0xa4,0x37,0x49,0x52,0xa9,0x39,0x72,0x73,0x43,0x61,0x76,0x3d,0x42, + 0x64,0x35,0x61,0xa4,0x3e,0x49,0x54,0x77,0x39,0xbc,0x73,0x51,0x61,0x79,0x7d,0x43, + 0x54,0x35,0x7d,0xa3,0xb5,0xb6,0x2d,0xbf,0xba,0x58,0x4e,0xae,0xaa,0x6c,0x6a,0xb1, + 0xc1,0x6c,0xa6,0xa1,0xbc,0xb6,0x2f,0x2d,0xba,0x30,0x4e,0xbc,0xbe,0xc2,0x31,0xc2, + 0xb3,0x4b,0x4c,0x7d,0x78,0xb6,0x43,0x4d,0xa7,0xa2,0x4a,0x46,0xa9,0x56,0xbc,0x7a, + 0xa1,0x63,0x68,0x7d,0xa1,0xb6,0x44,0xbf,0xa8,0x38,0x4a,0x54,0xa9,0x5a,0x6a,0x7b, + 0x6f,0x63,0x24,0x7d,0x26,0xb6,0x46,0x2d,0xa8,0x70,0x4a,0x62,0xa9,0x5d,0xbc,0x7c, + 0x5f,0x63,0xb2,0x7d,0x2d,0xb6,0x48,0x6d,0xa8,0xba,0x4a,0x70,0xa9,0x61,0x6a,0x7d, + 0x4f,0x64,0x3c,0x7d,0xa6,0xb6,0x4a,0x4d,0xa9,0x60,0x4a,0x7e,0xa9,0x64,0xbc,0x7e, + 0x3f,0x64,0x58,0x7d,0xad,0xb6,0x4b,0xbf,0xa9,0xaa,0x4a,0x2c,0xa9,0x68,0x6a,0x7e, + 0xc1,0x64,0x74,0x7d,0xb4,0xb6,0x4d,0x2d,0xaa,0x50,0x4a,0xac,0xa9,0x6b,0xbc,0xa1, + 0xb1,0x64,0x30,0x7d,0xbb,0xb6,0x4f,0x6d,0xaa,0x28,0x4a,0xba,0xa9,0x6f,0x6a,0xa2, + 0x2f,0x64,0xbe,0x7d,0xc2,0xb6,0x51,0x4d,0xab,0x40,0x4b,0x36,0xa9,0x72,0xbc,0x21, + 0xa1,0x61,0x31,0x32,0x36,0xb6,0x52,0x2d,0xab,0x70,0x4b,0x42,0xa9,0x75,0xbc,0x22, + 0x5f,0x65,0x60,0x7e,0x3d,0xb6,0x54,0x6d,0xab,0xba,0x4b,0x50,0xa9,0x79,0x6a,0x23, + 0x4f,0x65,0x7c,0x7e,0x44,0xb6,0x56,0x4d,0xac,0x60,0x4b,0x5e,0xa9,0x7c,0xbc,0x24, + 0x3f,0x65,0xaa,0x7e,0x4b,0xb6,0x57,0xbf,0xac,0xaa,0x4b,0x6c,0xa9,0xa2,0x6a,0x24, + 0xc1,0x66,0x34,0x7e,0x52,0xb6,0x59,0x2d,0xad,0x50,0x4b,0x7a,0xa9,0x23,0xbc,0x25, + 0x44,0x36,0x39,0xa4,0x54,0x49,0x5a,0x37,0x3b,0x5a,0x73,0x7d,0x61,0x24,0x7d,0x46, + 0x34,0x36,0x55,0xa4,0x5b,0x49,0x5b,0xa9,0x3b,0xa4,0x73,0x2b,0x61,0x28,0x3d,0x46, + 0xb6,0x36,0x71,0xa4,0x62,0x49,0x5d,0x77,0x3c,0x4a,0x73,0xab,0x61,0x2b,0x7d,0x47, + 0xa6,0x36,0x2d,0xa4,0x69,0x49,0x5f,0x57,0x3c,0x22,0x73,0xb9,0x61,0x2f,0x3d,0x48, + 0x24,0x36,0xbb,0xa4,0x70,0x49,0x61,0x37,0x3d,0x3a,0x74,0x35,0x61,0xa4,0x7d,0x49, + 0x74,0x37,0x45,0xa4,0x77,0x49,0x62,0xa9,0x3d,0x72,0x74,0x43,0x61,0xa8,0x3d,0x4a, + 0x64,0x37,0x61,0xa4,0x7e,0x49,0x64,0x77,0x3d,0xbc,0x74,0x51,0x61,0xab,0x7d,0x4b, + 0x54,0x37,0x7d,0xa4,0x25,0x49,0x66,0x57,0x3e,0x62,0x74,0x5f,0x61,0xaf,0x3d,0x4c, + 0x44,0x37,0xab,0xa4,0x2c,0x49,0x68,0x37,0x3e,0xac,0x74,0x6d,0x61,0xb2,0x7d,0x4d, + 0x34,0x38,0x35,0xa4,0xa5,0x49,0x69,0xa9,0x3f,0x52,0x74,0x7b,0x61,0xb6,0x3d,0x4d, + 0xb6,0x38,0x51,0xa4,0xac,0x49,0x6b,0x77,0x3f,0x2a,0x74,0x29,0x61,0xb9,0x7d,0x4e, + 0xa6,0x38,0x6d,0xa4,0xb3,0x49,0x6d,0x57,0x40,0x42,0x74,0xa9,0x61,0xbd,0x3d,0x4f, + 0x24,0x38,0x29,0xa3,0xc0,0xb6,0x30,0x2d,0xba,0xc2,0x4f,0x32,0xaa,0x71,0xbc,0xb3, + 0x5f,0x6d,0x40,0xa2,0x35,0xc0,0xc2,0x71,0x70,0xbb,0x37,0x7e,0xa9,0x24,0xbc,0x26, + 0x3f,0x66,0x58,0x7e,0x5b,0xb6,0x5b,0xbf,0xad,0xaa,0x4b,0x2c,0xa9,0x28,0x6a,0x26, + 0xc1,0x66,0x74,0x7e,0x62,0xb6,0x5d,0x2d,0xae,0x50,0x4b,0xac,0xa9,0x2b,0xbc,0x27, + 0xb1,0x66,0x30,0x7e,0x69,0xb6,0x5f,0x6d,0xae,0x28,0x4b,0xba,0xa9,0x2f,0x6a,0x28, + 0x2f,0x66,0xbe,0x7e,0x70,0xb6,0x61,0x4d,0xaf,0x40,0x4c,0x36,0xa9,0xa4,0xbc,0x29, + 0xa1,0x67,0x48,0x7e,0x77,0xb6,0x62,0xbf,0xaf,0x78,0x4c,0x44,0xa9,0xa8,0x6a,0x2a, + 0x6f,0x67,0x64,0x7e,0x7e,0xb6,0x64,0x2d,0xaf,0xc2,0x4c,0x52,0xa9,0xab,0xbc,0x2b, + 0x5f,0x67,0xa2,0x7e,0x25,0xb6,0x66,0x6d,0xb0,0x68,0x4c,0x60,0xa9,0xaf,0x6a,0x2c, + 0x4f,0x67,0xae,0x7e,0x2c,0xb6,0x68,0x4d,0xb0,0xb2,0x4c,0x6e,0xa9,0xb2,0xbc,0x2d, + 0x3f,0x68,0x38,0x7e,0xa5,0xb6,0x69,0xbf,0xb1,0x58,0x49,0x31,0x31,0xb5,0xbc,0x2d, + 0xb1,0x68,0x50,0x7e,0xab,0xb6,0x6b,0x6d,0xb1,0x28,0x4c,0x28,0xa9,0xb9,0x6a,0x2e, + 0x2f,0x68,0x6c,0x7e,0xb2,0xb6,0x6d,0x4d,0xb2,0x40,0x4c,0xa8,0xa9,0xbc,0xbc,0x2f, + 0xa1,0x68,0x28,0x7e,0xb9,0xb6,0x6e,0xbf,0xb2,0x78,0x4c,0xb6,0xa9,0xc0,0x6a,0x30, + 0x70,0x30,0x4c,0xbc,0xa9,0xc1,0xbc,0x30,0xb1,0x68,0xc2,0x7d,0x31,0xb6,0x71,0x6d, + 0xb3,0x48,0x4d,0x38,0xaa,0x33,0x6a,0xa3,0x2f,0x6d,0x75,0x38,0x43,0x32,0xa7,0xa3, + 0x6a,0x51,0x3f,0x5b,0x34,0x7c,0x31,0xb5,0xb3,0x4d,0xa3,0x38,0x4a,0x32,0xa9,0x71, + 0x6a,0x29,0x3f,0x69,0x34,0xa1,0x71,0xb6,0xa3,0x4d,0xbf,0x38,0x51,0x32,0xab,0x51, + 0x6b,0x49,0x3f,0x79,0x34,0x23,0x71,0xb7,0xa3,0x4e,0x4d,0x38,0x59,0x32,0xad,0x51, + 0x69,0x60,0x4f,0x3e,0xaa,0x74,0xbc,0xb4,0x3f,0x6d,0x58,0xa2,0x3b,0xb6,0xa5,0xbf, + 0xbb,0xaa,0x4f,0xa5,0x34,0x2a,0x31,0xb9,0x61,0x4e,0x21,0x38,0x66,0x32,0xb0,0x71, + 0x6c,0x69,0x3f,0xb3,0x34,0x2d,0x71,0xba,0x51,0x4e,0xaf,0x38,0x6d,0x32,0xb2,0x51, + 0x6c,0xb3,0x3f,0xc1,0x34,0xa3,0x31,0xbb,0x41,0x4f,0x3d,0x38,0x75,0x32,0xb4,0x51, + 0x6d,0x61,0x40,0x3f,0x34,0xa7,0x31,0xbc,0x41,0x4d,0x68,0xa2,0x3f,0xb6,0xa6,0xbf, + 0xbc,0x38,0x4f,0x54,0xaa,0x7a,0x6a,0xb5,0x6f,0x6a,0x28,0xbf,0x67,0xc2,0x3f,0x70, + 0xa6,0x28,0xbb,0xc2,0xc1,0x51,0x70,0x78,0x30,0xb4,0xbe,0xbf,0x72,0xc2,0x41,0x30, + 0xa7,0x50,0xbc,0x3a,0xc1,0x7b,0x6a,0xb5,0x2f,0x6a,0xb2,0xbf,0x6d,0xc2,0x3e,0xc2, + 0xa6,0x78,0xbb,0xa6,0xc1,0x7c,0x6a,0xa9,0x70,0xb4,0x24,0xc0,0x48,0xb6,0xa9,0x4d, + 0xbc,0xa2,0x4f,0x66,0xaa,0x7e,0xbc,0xb6,0xa1,0x6d,0xba,0xa2,0x4f,0xb6,0xaa,0xc2, + 0x70,0xb3,0x40,0xc1,0x32,0x34,0x6a,0xa3,0xc1,0x69,0x54,0xa1,0x3a,0xb6,0x73,0x2d, + 0xb3,0x30,0x4d,0x4a,0xaa,0x37,0xbc,0xa4,0xb1,0x69,0x70,0xa1,0x41,0xb6,0x75,0x6d, + 0xb4,0x48,0x4d,0x58,0xaa,0x3b,0x6a,0xa5,0x2f,0x69,0x2c,0xa1,0x48,0xb6,0x77,0x4d, + 0xb4,0xa2,0x4d,0x66,0xaa,0x3e,0xbc,0xa6,0xa1,0x69,0xba,0xa1,0x4f,0xb6,0x78,0xbf, + 0xb5,0x38,0x4d,0x74,0xaa,0x42,0x6a,0xa7,0x6f,0x6a,0x44,0xa1,0x56,0xb6,0x7a,0x2d, + 0xb5,0x70,0x4d,0x22,0xaa,0x45,0xbc,0xa8,0x5f,0x6a,0x60,0xa1,0x5d,0xb6,0x7c,0x6d, + 0xb5,0xba,0x4d,0x30,0xaa,0x49,0x6a,0xa9,0x4f,0x6a,0x7c,0xa1,0x64,0xb6,0x7e,0x4d, + 0xb6,0x60,0x4d,0xb0,0xaa,0x4c,0xbc,0xaa,0x3f,0x6a,0xaa,0xa1,0x6b,0xb6,0xa1,0xbf, + 0xb6,0xaa,0x4d,0xbe,0xaa,0x50,0x6a,0xaa,0xc1,0x6b,0x34,0xa1,0x72,0xb6,0x21,0x2d, + 0xb7,0x50,0x4e,0x3a,0xaa,0x31,0x31,0x39,0x2f,0x6b,0x4c,0xa1,0x78,0xb6,0x23,0x4d, + 0xb7,0xa2,0x4e,0x46,0xaa,0x56,0xbc,0xac,0xa1,0x6b,0x68,0xa1,0xa1,0xb6,0x24,0xbf, + 0xb8,0x38,0x4e,0x54,0xaa,0x5a,0x6a,0xad,0x6f,0x6b,0x24,0xa1,0x26,0xb6,0x26,0x2d, + 0xb8,0x70,0x4e,0x62,0xaa,0x5d,0xbc,0xae,0x5f,0x6b,0xb2,0xa1,0x2d,0xb6,0x28,0x6d, + 0xb8,0xba,0x4e,0x70,0xaa,0x61,0x6a,0xaf,0x4f,0x6c,0x3c,0xa1,0xa6,0xb6,0x2a,0x4d, + 0xb9,0x60,0x4d,0x51,0x35,0x39,0x72,0x33,0x51,0x51,0x7d,0x39,0x45,0x33,0x36,0x51, + 0x71,0x39,0x41,0x5d,0x35,0x3c,0x72,0x34,0x31,0x51,0xa7,0x39,0x4b,0x33,0x37,0xa3, + 0x72,0xa3,0x41,0x6b,0x35,0x40,0x32,0x34,0xb3,0x52,0x31,0x39,0x52,0x33,0x39,0x71, + 0x73,0x49,0x41,0x79,0x35,0x43,0x72,0x35,0xa3,0x52,0x4d,0x39,0x59,0x33,0x3b,0x51, + 0x73,0x21,0x41,0x27,0x35,0x47,0x32,0x36,0x21,0x52,0x69,0x39,0x60,0x33,0x59,0x4d, + 0xbd,0x40,0x4f,0x76,0xaa,0x22,0xbc,0xb7,0xa1,0x6e,0x48,0xa2,0x57,0xb6,0xac,0xbf, + 0xbd,0x78,0x4f,0x24,0xaa,0x26,0x6a,0xb8,0x6f,0x6e,0x64,0xa2,0x5e,0xb6,0xae,0x2d, + 0xb6,0x31,0x41,0xa5,0x35,0x4a,0x32,0x37,0x61,0x52,0x21,0x39,0x66,0x33,0x45,0x51, + 0x74,0x61,0x41,0xb1,0x35,0x4d,0x32,0x38,0x41,0x52,0xab,0x39,0x6c,0x33,0x40,0x31, + 0x74,0xab,0x41,0xbf,0x35,0x50,0x72,0x39,0x31,0x53,0x35,0x39,0x73,0x33,0x41,0xa3, + 0x75,0x51,0x42,0x3b,0x35,0x54,0x32,0x39,0xb3,0x53,0x51,0x39,0x7a,0x33,0x43,0x71, + 0x75,0x29,0x42,0x49,0x35,0x57,0x72,0x3a,0xa3,0x53,0x6d,0x3a,0x60,0xb6,0xaf,0x4d, + 0xbe,0x40,0x4f,0xa8,0xaa,0x2a,0xbc,0xb9,0xa1,0x6e,0x28,0xa2,0x67,0xb6,0xb0,0xbf, + 0xbe,0x78,0x4f,0xb6,0xaa,0x2e,0x6a,0xba,0x70,0x30,0xbb,0x38,0xc2,0x31,0xb5,0x71, + 0x5d,0x29,0x3c,0x63,0x33,0x3a,0x79,0x33,0x23,0x32,0x45,0x71,0x66,0x41,0x32,0x55, + 0x41,0x7a,0x37,0x5d,0x52,0x7c,0x79,0x64,0x33,0x3d,0xa7,0x73,0x46,0x42,0x38,0xa7, + 0x53,0x4a,0x3a,0x55,0x53,0x64,0x39,0x7d,0xb5,0x46,0xbf,0x75,0x21,0x43,0x25,0x55, + 0x26,0x42,0x46,0x57,0x56,0x5b,0x3a,0x5b,0x23,0x5b,0x29,0x7b,0x28,0x43,0x27,0x35, + 0x26,0x7a,0x46,0x65,0x56,0x5e,0x7a,0x5c,0x73,0x5b,0xb7,0x7b,0x2f,0x43,0x28,0xa7, + 0x27,0x32,0x46,0x73,0x56,0x62,0x3a,0x5d,0x63,0x5c,0x41,0x7b,0xa8,0x43,0x2a,0x75, + 0x27,0x6a,0x46,0x21,0x56,0x65,0x7a,0x5e,0x53,0x5c,0x5d,0x7b,0xaf,0x43,0x2c,0x55, + 0x27,0xb4,0x46,0x2f,0x56,0x69,0x3a,0x5f,0x43,0x5c,0x79,0x7b,0xb6,0x43,0xa3,0x55, + 0x29,0x42,0x47,0x37,0x56,0x73,0x3a,0x61,0x23,0x5d,0x49,0x7c,0x38,0x43,0x71,0x31, + 0x39,0x72,0x47,0x43,0x56,0x76,0x3a,0x62,0x63,0x5d,0x61,0x7c,0x3e,0x43,0xa6,0x75, + 0x29,0xbc,0x47,0x57,0x56,0x7b,0x3a,0x63,0x23,0x5e,0xb3,0x7c,0x6e,0x43,0xbb,0x75, + 0x2f,0x4a,0x48,0x79,0x56,0xb5,0x7a,0x52,0x43,0x65,0x25,0x75,0x43,0x49,0x38,0x57, + 0x32,0xb4,0x73,0xbc,0xaa,0x2f,0xbc,0xba,0xb1,0x6e,0xc2,0xa2,0x71,0xb6,0xb3,0x6d, + 0xbf,0x48,0x50,0x38,0xaa,0xa5,0x6a,0xbb,0x2f,0x6f,0x4c,0xa1,0x32,0x31,0xbb,0x51, + 0x3d,0xb3,0x38,0x71,0x31,0x3a,0x71,0x6e,0x41,0x31,0xaf,0x34,0xab,0x31,0x3b,0xa3, + 0x4f,0xab,0x34,0x51,0x32,0xb9,0x31,0x3a,0x21,0x40,0x7d,0x32,0x23,0x31,0xbf,0x71, + 0x37,0x29,0x38,0xb7,0x31,0xad,0x31,0x70,0x41,0x37,0x29,0x34,0x29,0x31,0xb9,0x71, + 0x4e,0xa3,0x38,0xbb,0x31,0xb8,0x31,0x3b,0x41,0x47,0x50,0xa1,0x75,0x31,0x23,0x31, + 0x4d,0x78,0x4e,0x73,0x33,0xa7,0xbc,0xbc,0x5f,0x6f,0x60,0xa2,0x7d,0xb6,0x72,0x57, + 0x41,0x62,0x75,0x3f,0x62,0x35,0x3d,0x52,0x44,0x39,0x59,0xa5,0x3c,0x49,0x74,0x37, + 0x41,0xac,0x75,0x4d,0x62,0x38,0x7d,0x53,0x34,0x39,0x75,0xa5,0x43,0x49,0x75,0xa9, + 0x42,0x52,0x75,0x5b,0x62,0x3c,0x3d,0x53,0xb6,0x39,0xa3,0xa5,0x4a,0x49,0x77,0x77, + 0x42,0x2a,0x75,0x69,0x62,0x3f,0x7d,0x54,0xa6,0x39,0xbf,0xa5,0x51,0x49,0x79,0x57, + 0x43,0x42,0x75,0x77,0x62,0x43,0x3d,0x55,0x24,0x3a,0x49,0xa5,0x58,0x49,0x7b,0x37, + 0x43,0x7a,0x78,0x4c,0xaa,0xaa,0x6a,0xbc,0xc1,0x6f,0x74,0xa2,0x22,0xb6,0xb7,0x2d, + 0xc0,0x50,0x50,0x5a,0xaa,0xad,0xbc,0xbd,0xb1,0x6f,0x30,0xa2,0x29,0xb6,0xb9,0x6d, + 0xc0,0x28,0x50,0x68,0xaa,0xb1,0x6a,0xbe,0x2f,0x6f,0xbe,0xa2,0x30,0xb6,0xbb,0x4d, + 0xc1,0x40,0xb2,0xbf,0x34,0xc2,0x71,0x55,0x44,0x32,0x39,0xa3,0x54,0x49,0x3a,0x37, + 0x33,0x5a,0x71,0x7d,0x61,0x44,0x7d,0x36,0x34,0x32,0x55,0xa4,0x54,0x4a,0x54,0x77, + 0x69,0xbc,0xa1,0x69,0x64,0xa1,0x7d,0xb6,0xa6,0x4e,0x35,0xaa,0x75,0x4a,0xb6,0x77, + 0x6e,0x3a,0xa2,0x55,0x64,0xad,0x7d,0xa9,0x40,0xba,0x3c,0xc2,0xa7,0xc2,0xbb,0x2d, + 0xb5,0x3a,0x35,0xa5,0x63,0xb4,0xbc,0xa5,0x33,0x38,0x44,0xa2,0xa8,0xb6,0xbc,0x2d, + 0xc2,0xa4,0x73,0x67,0x61,0xa1,0x3d,0x50,0x24,0x38,0xbb,0xa3,0x37,0x49,0x58,0x57, + 0x3a,0xb4,0x72,0x44,0xc1,0x56,0x70,0x7a,0x70,0xb5,0x64,0xbf,0x7e,0xc2,0x44,0x30, + 0xa7,0xc2,0xbc,0x52,0xc1,0x59,0xc2,0x7b,0x60,0xb5,0x24,0xbf,0x26,0xc2,0x46,0x30, + 0xa8,0x70,0xbc,0x64,0xc1,0x5e,0x70,0x7c,0x70,0xb5,0xb6,0xbf,0x2e,0xc2,0x48,0x30, + 0xa8,0xc2,0xbc,0x72,0xc1,0x61,0xc2,0x71,0x31,0x34,0x3c,0xbf,0xa6,0xc2,0x4a,0x50, + 0xa9,0x60,0xbc,0x7e,0xc1,0x65,0x70,0x7e,0x50,0xb6,0x5c,0xbf,0xae,0xc2,0x6a,0xbf, + 0xc1,0x78,0x50,0x24,0xaa,0xb8,0x6a,0xc0,0x6f,0x70,0x64,0xa2,0xb0,0xb6,0xbe,0x2d, + 0xc1,0xc2,0x50,0xa4,0xaa,0xbb,0xbc,0xc1,0x5f,0x70,0xa2,0xa1,0x38,0x49,0x6e,0x4d, + 0xc2,0x60,0x50,0xb0,0xaa,0xbe,0xbc,0xc2,0x3f,0x70,0xaa,0xa2,0xbd,0xb6,0xc1,0xc2, + 0x6f,0x70,0xb6,0xa2,0xc0,0xb6,0xc2,0x2d,0xc2,0xc2,0x4d,0x32,0xab,0x31,0x3a,0x51, + 0x43,0x59,0x39,0x7b,0x34,0x43,0x72,0x35,0x21,0x5a,0x45,0x3d,0x56,0x34,0x7a,0x52, + 0x33,0x59,0x55,0x7b,0x3b,0x43,0x73,0xa7,0x21,0xa4,0x45,0x4b,0x56,0x38,0x3a,0x52, + 0xb5,0x59,0x71,0x7b,0x42,0x43,0x75,0x75,0x22,0x4a,0x45,0x59,0x56,0x3b,0x7a,0x53, + 0xa5,0x59,0x2d,0x7b,0x49,0x43,0x77,0x55,0x22,0x22,0x45,0x67,0x56,0x3f,0x3a,0x54, + 0x23,0x59,0xbb,0x7b,0x50,0x43,0x79,0x35,0x23,0x3a,0x45,0x75,0x56,0x42,0x7a,0x55, + 0x73,0x5a,0x45,0x7b,0x57,0x43,0x7a,0xa7,0x23,0x72,0x45,0x23,0x56,0x46,0x3a,0x56, + 0x63,0x5a,0x61,0x7b,0x5e,0x43,0x7c,0x75,0x23,0xbc,0x45,0xa3,0x56,0x49,0x7a,0x57, + 0x53,0x5a,0x7d,0x7b,0x65,0x43,0x7e,0x55,0x24,0x62,0x45,0xb1,0x56,0x4d,0x3a,0x58, + 0x43,0x5a,0xab,0x7b,0x6c,0x43,0xa2,0x35,0x24,0xac,0x45,0xbf,0x56,0x50,0x7a,0x59, + 0x33,0x5b,0x35,0x7b,0x73,0x43,0x21,0xa7,0x25,0x52,0x46,0x3b,0x56,0x54,0x3a,0x59, + 0xb5,0x5b,0x51,0x7b,0x7a,0x43,0x23,0x75,0x25,0x2a,0x45,0x34,0xab,0x32,0x6b,0x31, + 0x6f,0x71,0x44,0x21,0x36,0xb7,0x32,0x2e,0x31,0x70,0x51,0x42,0xab,0x35,0xbd,0x32, + 0x5f,0x71,0x60,0x21,0x3d,0xb7,0x34,0x6e,0x31,0xba,0x51,0x50,0xab,0xc0,0xc2,0x71, + 0x70,0xbb,0x26,0xa8,0x2e,0x6a,0x68,0xb1,0x5f,0x44,0x7c,0x77,0xb5,0xb5,0x4d,0x2d, + 0x28,0x48,0x4a,0xa8,0xaa,0x6a,0x6b,0xa1,0x5f,0x2c,0x7c,0xad,0xb5,0xbe,0x4d,0x30, + 0x48,0x48,0xb8,0xa8,0xc1,0x6a,0x70,0xb1,0x51,0x34,0x7d,0x35,0xb6,0x33,0x4d,0xa3, + 0x28,0x49,0x4a,0xa9,0x38,0x6a,0x73,0x3f,0x61,0x7c,0x7d,0x47,0xb6,0x37,0x4d,0xa4, + 0x28,0x49,0x6e,0xa9,0x41,0x6a,0x75,0x5f,0x62,0x44,0x7d,0x59,0xb6,0x3d,0x4d,0xa6, + 0x48,0x49,0xac,0xa9,0x50,0x6a,0x79,0x3f,0x63,0x4c,0x7d,0x79,0xb6,0x44,0x4d,0xa7, + 0xba,0x4a,0x52,0xa9,0x5e,0x6a,0x7c,0xb1,0x64,0x34,0x7d,0xa7,0xb6,0x4a,0x2d,0xa9, + 0x28,0x4a,0x2a,0xa9,0x6b,0x6a,0xa1,0xb1,0x64,0xa6,0x7d,0xbd,0xb6,0x51,0x4d,0xab, + 0x48,0x4b,0x3a,0xa9,0x74,0x6a,0x22,0x3f,0x65,0x5c,0x7e,0x3d,0xb6,0x54,0x2d,0xac, + 0x38,0x49,0x31,0x31,0x7a,0x6a,0x23,0xa1,0x65,0x2c,0x7e,0x49,0xb6,0x58,0x4d,0xac, + 0xba,0x4b,0x76,0xa9,0x24,0x6a,0x26,0x3f,0x66,0x5c,0x7e,0x5d,0xb6,0x5d,0x4d,0xae, + 0x48,0x4b,0xac,0xa9,0x2c,0x6a,0x28,0x3f,0x66,0xae,0x7e,0x6d,0xb6,0x60,0x2d,0xaf, + 0x48,0x4c,0x3a,0xa9,0xa6,0x6a,0x2a,0x3f,0x67,0x5c,0x7e,0x7d,0xb6,0x64,0x2d,0xb0, + 0x38,0x4c,0x56,0xa9,0xad,0x6a,0x2b,0xb1,0x67,0xb6,0x7e,0xa3,0xb6,0x69,0x2d,0xa3, + 0x3f,0x31,0x38,0x71,0x33,0xb3,0x31,0xbf,0x31,0x58,0x31,0x3c,0xa3,0x34,0x69,0x31, + 0xc1,0x31,0x54,0x71,0x3a,0xb3,0x33,0x2d,0x31,0x30,0x31,0x4a,0xa3,0x37,0xbb,0x32, + 0xb1,0x31,0x70,0x71,0x41,0xb3,0x35,0x6d,0x32,0x48,0x31,0x58,0xa3,0x3b,0x69,0x33, + 0x2f,0x31,0x2c,0x71,0x48,0xb3,0x37,0x4d,0x32,0xa2,0x31,0x66,0xa3,0x3e,0xbb,0x34, + 0xa1,0x31,0xba,0x71,0x4f,0xb3,0x38,0xbf,0x33,0x38,0x31,0x74,0xa3,0x42,0x69,0x35, + 0x6f,0x32,0x44,0x71,0x56,0xb3,0x3a,0x2d,0x33,0x70,0x31,0x22,0xa3,0x45,0xbb,0x36, + 0x5f,0x32,0x60,0x71,0x5d,0xb3,0x3c,0x6d,0x33,0xba,0x31,0x30,0xa3,0x49,0x69,0x37, + 0x4f,0x32,0x7c,0x71,0x64,0xb3,0x3e,0x4d,0x34,0x60,0x31,0xb0,0xa3,0x4c,0xbb,0x38, + 0x3f,0x32,0xaa,0x71,0x6b,0xb3,0x3f,0xbf,0x34,0xaa,0x31,0xbe,0xa3,0x50,0x69,0x38, + 0xc1,0x33,0x34,0x71,0x72,0xb3,0x41,0x2d,0x35,0x50,0x32,0x3a,0xa3,0x53,0xbb,0x39, + 0xb1,0x33,0x50,0x71,0x79,0xb3,0x43,0x6d,0x35,0x28,0x32,0x48,0xa3,0x57,0x69,0x3a, + 0x2f,0x33,0x6c,0x71,0xa2,0xb3,0x45,0x4d,0x36,0x40,0x32,0x56,0xa3,0x5a,0xbb,0x3b, + 0xa1,0x33,0x28,0x71,0x27,0xb3,0x46,0xbf,0x36,0x78,0x32,0x64,0xa3,0x5e,0x69,0x3c, + 0x6f,0x33,0xb6,0x71,0x2e,0xb3,0x6f,0xc2,0xa3,0x4c,0xc0,0xa7,0xb6,0x6a,0x2d,0xb1, + 0x78,0x4c,0x26,0xa9,0xb9,0x6a,0x2e,0xb1,0x68,0x74,0x7e,0xb5,0xb6,0x6e,0x4d,0xb2, + 0x68,0x4c,0xb4,0xa9,0xc0,0x6a,0x30,0xb1,0x69,0x34,0xa1,0x33,0xb6,0x72,0x4d,0xb3, + 0x68,0x4d,0x46,0xaa,0x37,0x6a,0xa5,0x3f,0x69,0x24,0xa1,0x49,0xb6,0x77,0x2d,0xb4, + 0xba,0x4d,0x72,0xaa,0x43,0x6a,0xa7,0xb1,0x6a,0x54,0xa1,0x5b,0xb6,0x7c,0x2d,0xb6, + 0x38,0x4d,0xa8,0xaa,0x4b,0x6a,0xaa,0x3f,0x6a,0xae,0xa1,0x6d,0xb6,0x21,0x4d,0xb7, + 0x48,0x4e,0x3e,0xaa,0x55,0x6a,0xac,0x5f,0x6b,0x64,0xa1,0xa1,0xb6,0x25,0x4d,0xb8, + 0x58,0x4e,0x62,0xaa,0x5e,0x6a,0xaf,0x5f,0x6c,0x54,0xa1,0xad,0xb6,0x2c,0x4d,0xba, + 0x38,0x4e,0xa8,0xaa,0x6d,0x6a,0xb2,0x5f,0x6c,0xb6,0xa1,0xc1,0xb6,0xa3,0x2d,0xbb, + 0x68,0x4f,0x42,0xaa,0x76,0x6a,0xb4,0xa1,0x6d,0x6c,0x7d,0x31,0x31,0xa8,0x2d,0xbc, + 0x78,0x4f,0x6a,0xaa,0x23,0x6a,0xb7,0xb1,0x6e,0x54,0xa2,0x5b,0xb6,0xae,0x4d,0xbd, + 0xba,0x4f,0xa4,0xaa,0x2b,0x6a,0xb9,0xb1,0x6e,0xa6,0xa2,0x6b,0xb6,0xb2,0x2d,0xbf, + 0x48,0x50,0x3a,0xaa,0xa6,0x6a,0xbc,0x3f,0x6f,0x64,0xa2,0x21,0xb6,0xb8,0x4d,0xc0, + 0x68,0x50,0x62,0xaa,0xb1,0x6a,0xbe,0xb1,0x70,0x34,0xa2,0xa5,0xb6,0xbc,0x2d,0xc1, + 0x78,0x50,0x26,0xaa,0xb9,0x6a,0xc0,0xb1,0x66,0xba,0x32,0x70,0xa3,0x61,0x69,0x3d, + 0x4f,0x34,0x3c,0x71,0xa6,0xb3,0x4a,0x4d,0x37,0x60,0x32,0x7e,0xa3,0x64,0xbb,0x3e, + 0x3f,0x34,0x58,0x71,0xad,0xb3,0x4b,0xbf,0x37,0xaa,0x32,0x2c,0xa3,0x68,0x69,0x3e, + 0xc1,0x34,0x74,0x71,0xb4,0xb3,0x4d,0x2d,0x38,0x50,0x32,0xac,0xa3,0x6b,0xbb,0x3f, + 0xb1,0x34,0x30,0x71,0xbb,0xb3,0x4f,0x6d,0x38,0x28,0x32,0xba,0xa3,0x6f,0x69,0x40, + 0x2f,0x34,0xbe,0x71,0xc2,0xb3,0x51,0x4d,0x39,0x40,0x33,0x36,0xa3,0x72,0xbb,0x41, + 0xa1,0x35,0x48,0x72,0x37,0xb3,0x52,0xbf,0x39,0x78,0x33,0x44,0xa3,0x76,0x69,0x42, + 0x6f,0x35,0x64,0x72,0x3e,0xb3,0x54,0x2d,0x39,0xc2,0x33,0x52,0xa3,0x79,0xbb,0x43, + 0x5f,0x35,0xa2,0x72,0x45,0xb3,0x56,0x6d,0x3a,0x68,0x33,0x60,0xa3,0x7d,0x69,0x44, + 0x4f,0x35,0xae,0x72,0x4c,0xb3,0x58,0x4d,0x3a,0xb2,0x33,0x6e,0xa3,0xa2,0xbb,0x45, + 0x3f,0x36,0x38,0x72,0x53,0xb3,0x59,0xbf,0x3b,0x58,0x33,0x7c,0xa3,0x24,0x69,0x45, + 0xc1,0x36,0x54,0x72,0x5a,0xb3,0x5b,0x2d,0x3b,0x30,0x33,0x2a,0xa3,0x27,0xbb,0x46, + 0xb1,0x36,0x70,0x72,0x61,0xb3,0x5d,0x6d,0x3c,0x48,0x33,0xaa,0xa3,0x2b,0x69,0x47, + 0x2f,0x36,0x2c,0x72,0x68,0xb3,0x5f,0x4d,0x3c,0xa2,0x33,0xb8,0xa3,0x2e,0xc1,0xc2, + 0xa3,0x50,0xbf,0x34,0xbb,0x6a,0xc1,0x5f,0x70,0x24,0xa2,0xba,0xbe,0x6a,0xc2,0x3f, + 0x70,0xae,0xa2,0xbf,0xb6,0xc2,0x2d,0xa3,0x38,0x51,0x36,0xab,0x33,0x6b,0x32,0x3f, + 0x71,0x6c,0x21,0x41,0xb7,0x36,0x2e,0x32,0x78,0x51,0x66,0xab,0x3f,0x6b,0x35,0x5f, + 0x72,0x44,0x21,0x57,0xb7,0x3b,0x4e,0x33,0x28,0x51,0x2a,0xab,0x48,0x6b,0x37,0x3f, + 0x72,0x7c,0x21,0x69,0xb7,0x3f,0x2e,0x34,0xaa,0x51,0xc0,0xab,0x51,0x6b,0x39,0x5f, + 0x73,0x4c,0x21,0x79,0xb7,0x44,0x2e,0x36,0x48,0x52,0x5e,0xab,0x5e,0x6b,0x3c,0xb1, + 0x74,0x3c,0x21,0xa7,0xb7,0x4c,0x2e,0x38,0x38,0x52,0xa8,0xab,0x6b,0x6b,0x3f,0xb1, + 0x74,0xae,0x21,0xbf,0xb7,0x50,0x2e,0x39,0x38,0x53,0x3a,0xab,0x74,0x6b,0x42,0x3f, + 0x75,0x5c,0x22,0x3d,0xb7,0x54,0x2e,0x3a,0x38,0x53,0x56,0xab,0x7b,0x6b,0x43,0xb1, + 0x75,0xa6,0x22,0x4b,0xb7,0x31,0x31,0x3a,0xaa,0x53,0x6e,0xab,0x21,0x6b,0x45,0x5f, + 0x76,0x44,0x22,0x57,0xb7,0x5b,0x4e,0x3b,0xaa,0x53,0xa4,0xab,0x2e,0x6b,0x49,0x3f, + 0x77,0x3c,0x22,0x75,0xb7,0x62,0x2e,0x3d,0x78,0x54,0x46,0xab,0xa9,0x6b,0x4a,0xb1, + 0x77,0x74,0x22,0x23,0xb7,0x66,0x4e,0x3e,0x68,0x54,0x62,0xab,0xb1,0x6b,0x4c,0xb1, + 0x78,0x3c,0x22,0xa7,0xb7,0x6a,0x2e,0x3f,0x78,0x54,0x26,0xab,0xbb,0x6b,0x4f,0x5f, + 0x78,0x24,0x23,0xbc,0xa3,0x2f,0xbb,0x48,0xb1,0x36,0xc2,0x72,0x71,0xb3,0x61,0x6d, + 0x3d,0x48,0x34,0x38,0xa3,0xa5,0x69,0x49,0x2f,0x37,0x4c,0x72,0x78,0xb3,0x63,0x4d, + 0x3d,0xa2,0x34,0x46,0xa3,0xa8,0xbb,0x4a,0xa1,0x37,0x68,0x72,0xa1,0xb3,0x64,0xbf, + 0x3e,0x38,0x34,0x54,0xa3,0xac,0x69,0x4b,0x6f,0x37,0x24,0x72,0x26,0xb3,0x66,0x2d, + 0x3e,0x70,0x34,0x62,0xa3,0xaf,0xbb,0x4c,0x5f,0x37,0xb2,0x72,0x2d,0xb3,0x68,0x6d, + 0x3e,0xba,0x34,0x70,0xa3,0xb3,0x69,0x4d,0x4f,0x38,0x3c,0x72,0xa6,0xb3,0x6a,0x4d, + 0x3f,0x60,0x34,0x7e,0xa3,0xb6,0xbb,0x4e,0x3f,0x38,0x58,0x72,0xad,0xb3,0x6b,0xbf, + 0x3f,0xaa,0x34,0x2c,0xa3,0xba,0x69,0x4e,0xc1,0x38,0x74,0x72,0xb4,0xb3,0x6d,0x2d, + 0x40,0x50,0x34,0xac,0xa3,0xbd,0xbb,0x4f,0xb1,0x38,0x30,0x72,0xbb,0xb3,0x6f,0x6d, + 0x40,0x28,0x34,0xba,0xbe,0xb3,0x70,0x4d,0x40,0xb2,0x34,0xc0,0xa3,0xc2,0xbb,0x31, + 0x3f,0x39,0x38,0x73,0x33,0xb3,0x71,0xbf,0x41,0x58,0x35,0x3c,0xa4,0x34,0x69,0x51, + 0xc1,0x39,0x54,0x73,0x3a,0xb3,0x73,0x2d,0x41,0x30,0x35,0x4a,0xa4,0x37,0xbb,0x52, + 0xb1,0x39,0x70,0x73,0x41,0xb3,0x75,0x6d,0x42,0x48,0x35,0x58,0xa4,0x3b,0x69,0x53, + 0x2f,0x39,0x2c,0x73,0x48,0xb3,0x77,0x4d,0x42,0xa2,0x38,0xba,0xc1,0x32,0x30,0xaf, + 0x78,0x54,0xb4,0xab,0xc0,0x6b,0x50,0xb1,0x79,0x44,0x23,0x39,0xb7,0x73,0x2e,0x41, + 0xaa,0x55,0x52,0xac,0x3a,0x6b,0x53,0xa1,0x79,0xa6,0x23,0x4b,0xb7,0x78,0x2e,0x43, + 0x48,0x55,0x7a,0xac,0x44,0x6b,0x56,0x3f,0x7a,0x5c,0x23,0x5d,0xb7,0x7c,0x2e,0x44, + 0x38,0x55,0xa8,0xac,0x4b,0x6b,0x57,0xb1,0x7a,0xae,0x23,0x6f,0xb7,0x21,0x4e,0x45, + 0x48,0x56,0x3a,0xac,0x54,0x6b,0x5a,0x3f,0x7b,0x5c,0x23,0x7d,0xb7,0x26,0x4e,0x46, + 0x68,0x56,0x62,0xac,0x5e,0x6b,0x5c,0xa1,0x7b,0xbe,0x23,0xa3,0xb7,0x29,0x2e,0x47, + 0x58,0x56,0x7e,0xac,0x65,0x6b,0x5e,0x5f,0x7c,0x64,0x23,0xb1,0xb7,0x2d,0x4e,0x48, + 0x48,0x56,0xb0,0xac,0x6d,0x6b,0x60,0x5f,0x7c,0xb6,0x23,0xc1,0xb7,0xa3,0x4e,0x49, + 0x48,0x57,0x3a,0xac,0x74,0x6b,0x62,0x3f,0x7d,0x5c,0x24,0x3d,0xb7,0xa6,0x2e,0x31, + 0x31,0x37,0x52,0xac,0x7a,0x6b,0x63,0xa1,0x7d,0x2c,0x24,0x49,0xb7,0xa9,0x2e,0x4a, + 0xaa,0x57,0x6e,0xac,0x21,0x6b,0x65,0x5f,0x7e,0x4c,0x24,0x59,0xb7,0xad,0x2e,0x4b, + 0xaa,0x57,0x2e,0xac,0x29,0x6b,0x67,0x5f,0x7e,0x24,0x24,0x67,0xb7,0xb1,0x2e,0x4c, + 0xba,0x58,0x36,0xac,0xa8,0x6b,0x6a,0xb1,0xa1,0x74,0x24,0x23,0xb7,0xb8,0x4e,0x4e, + 0x68,0x58,0x62,0xac,0xb0,0x6b,0x6d,0x3f,0xa2,0x3c,0x24,0xa7,0xb7,0x3e,0x69,0x54, + 0x6f,0x39,0xb6,0x73,0x4e,0xb3,0x78,0x2d,0x42,0xc2,0x35,0x72,0xa4,0x41,0xbb,0x55, + 0x5f,0x3a,0x40,0x73,0x55,0xb3,0x7a,0x6d,0x43,0x68,0x35,0xa2,0xa4,0x45,0x69,0x56, + 0x4f,0x3a,0x5c,0x73,0x5c,0xb3,0x7c,0x4d,0x43,0xb2,0x35,0x2e,0xa4,0x48,0xbb,0x57, + 0x3f,0x3a,0x78,0x73,0x63,0xb3,0x7d,0xbf,0x44,0x58,0x35,0xae,0xa4,0x4c,0x69,0x57, + 0xc1,0x3a,0xa6,0x73,0x6a,0xb3,0xa1,0x2d,0x44,0x30,0x35,0xbc,0xa4,0x4f,0xbb,0x58, + 0xb1,0x3a,0xc2,0x73,0x71,0xb3,0x21,0x6d,0x45,0x48,0x36,0x38,0xa4,0x53,0x69,0x59, + 0x2f,0x3b,0x4c,0x73,0x78,0xb3,0x23,0x4d,0x45,0xa2,0x36,0x46,0xa4,0x56,0xbb,0x5a, + 0xa1,0x3b,0x68,0x73,0xa1,0xb3,0x24,0xbf,0x46,0x38,0x36,0x54,0xa4,0x5a,0x69,0x5b, + 0x6f,0x3b,0x24,0x73,0x26,0xb3,0x26,0x2d,0x46,0x70,0x36,0x62,0xa4,0x5d,0xbb,0x5c, + 0x5f,0x3b,0xb2,0x73,0x2d,0xb3,0x28,0x6d,0x46,0xba,0x36,0x70,0xa4,0x61,0x69,0x5d, + 0x4f,0x3c,0x3c,0x73,0xa6,0xb3,0x2a,0x4d,0x47,0x60,0x36,0x7e,0xa4,0x64,0xbb,0x5e, + 0x3f,0x3c,0x58,0x73,0xad,0xb3,0x2b,0xbf,0x47,0xaa,0x36,0x2c,0xa4,0x68,0x69,0x5e, + 0xc1,0x3c,0x74,0x73,0xb4,0xb3,0x2d,0x2d,0x48,0x50,0x36,0xac,0xa4,0x6b,0xbb,0x5f, + 0xb1,0x3c,0x30,0xba,0xc1,0x32,0xc2,0xa3,0x50,0x4c,0x24,0xad,0xb7,0xbf,0x4e,0x50, + 0x48,0x58,0xac,0xac,0xbe,0xc0,0x2e,0x50,0x78,0x58,0xb8,0xac,0xc1,0x6b,0x31,0x3f, + 0x21,0x3c,0x25,0x35,0xb8,0x32,0x2e,0x51,0x28,0x59,0x4a,0xad,0x38,0x6b,0x73,0x3f, + 0x21,0x7c,0x25,0x45,0xb8,0x36,0x2e,0x52,0x78,0x59,0x6a,0xad,0x41,0x6b,0x75,0xa1, + 0x22,0x54,0x25,0x5b,0xb8,0x3c,0x4e,0x53,0xba,0x59,0xb0,0xad,0x4e,0x6b,0x78,0xa1, + 0x23,0x34,0x25,0x73,0xb8,0x42,0x4e,0x55,0x68,0x5a,0x42,0xad,0x57,0x6b,0x7a,0xb1, + 0x23,0x24,0x25,0x2d,0xb8,0x4b,0x4e,0x57,0xaa,0x5a,0xa8,0xad,0x6d,0x6b,0xa2,0x5f, + 0x24,0xbe,0x26,0x33,0xb8,0x52,0x4e,0x59,0x68,0x5b,0x42,0xad,0x77,0x6b,0x22,0xb1, + 0x25,0x7c,0x26,0x45,0xb8,0x57,0x2e,0x5b,0x38,0x5b,0x76,0xad,0x23,0x6b,0x25,0xb1, + 0x26,0x5c,0x26,0x5d,0xb8,0x5c,0x2e,0x5c,0x38,0x59,0x31,0x31,0x2e,0x6b,0x28,0xa1, + 0x26,0xbe,0x26,0x71,0xb8,0x61,0x2e,0x5d,0x58,0x5c,0x3e,0xad,0xa7,0x6b,0x2a,0xb1, + 0x27,0x74,0x26,0x23,0xb8,0x66,0x2e,0x5e,0x78,0x5c,0x66,0xad,0xb1,0x6b,0x2c,0xb1, + 0x28,0x34,0x26,0xa5,0xb8,0x6a,0x2e,0x5f,0x28,0x5c,0x2a,0xad,0xba,0x6b,0x2f,0xa1, + 0x28,0x2c,0x26,0xbb,0xb8,0x6f,0x2e,0x60,0xaa,0x5d,0x32,0xae,0x32,0x6b,0xa3,0xa1, + 0x29,0x54,0x27,0x3b,0xb8,0x74,0x2e,0x60,0x3f,0x3c,0xaa,0x73,0xbd,0xb3,0x2f,0xbf, + 0x48,0xaa,0x36,0xbe,0xa4,0x70,0x69,0x60,0xc1,0x3d,0x34,0x74,0x32,0xb3,0xa3,0x2d, + 0x49,0x50,0x37,0x3a,0xa4,0x73,0xbb,0x61,0xb1,0x3d,0x50,0x74,0x39,0xb3,0xa5,0x6d, + 0x49,0x28,0x37,0x48,0xa4,0x77,0x69,0x62,0x2f,0x3d,0x6c,0x74,0x40,0xb3,0xa7,0x4d, + 0x4a,0x40,0x37,0x56,0xa4,0x7a,0xbb,0x63,0xa1,0x3d,0x28,0x74,0x47,0xb3,0xa8,0xbf, + 0x4a,0x78,0x37,0x64,0xa4,0x7e,0x69,0x64,0x6f,0x3d,0xb6,0x74,0x4e,0xb3,0xaa,0x2d, + 0x4a,0xc2,0x37,0x72,0xa4,0x21,0xbb,0x65,0x5f,0x3e,0x40,0x74,0x55,0xb3,0xac,0x6d, + 0x4b,0x68,0x37,0xa2,0xa4,0x25,0x69,0x66,0x4f,0x3e,0x5c,0x74,0x5c,0xb3,0xae,0x4d, + 0x4b,0xb2,0x37,0x2e,0xa4,0x28,0xbb,0x67,0x3f,0x3e,0x78,0x74,0x63,0xb3,0xaf,0xbf, + 0x4c,0x58,0x37,0xae,0xa4,0x2c,0x69,0x67,0xc1,0x3e,0xa6,0x74,0x6a,0xb3,0xb1,0x2d, + 0x4c,0x30,0x37,0xbc,0xa4,0x2f,0xbb,0x68,0xb1,0x3e,0xc2,0x74,0x71,0xb3,0xb3,0x6d, + 0x4d,0x48,0x38,0x38,0xa4,0xa5,0x69,0x69,0x2f,0x3f,0x4c,0x74,0x78,0xb3,0xb5,0x4d, + 0x4d,0xa2,0x38,0x46,0xa4,0xa8,0xbb,0x6a,0xa1,0x3f,0x68,0x74,0xa1,0xb3,0xb6,0xbf, + 0x4e,0x38,0x38,0x54,0xa4,0xac,0x69,0x6b,0x6f,0x3f,0x24,0x74,0x26,0xc0,0xc2,0x71, + 0x70,0xbb,0x37,0x41,0xb8,0x75,0x2e,0x62,0x58,0x5d,0x62,0xae,0x3e,0x6b,0xa6,0xa1, + 0x2a,0x34,0x27,0x57,0xb8,0x7b,0x2e,0x64,0x38,0x5d,0xb0,0xae,0x4d,0x6b,0xaa,0xa1, + 0x2b,0x44,0x27,0x7d,0xb8,0x24,0x2e,0x66,0x38,0x5e,0x56,0xae,0x5b,0x6b,0xae,0x5f, + 0x2c,0x64,0x27,0xb1,0xb8,0x2e,0x4e,0x68,0x68,0x5e,0xc0,0xae,0x71,0x6b,0xb3,0x5f, + 0x2d,0x64,0x28,0x47,0xb8,0xa9,0x4e,0x6a,0xaa,0x5f,0x6e,0xae,0x21,0x6b,0xb7,0x5f, + 0x2e,0x4c,0x28,0x5f,0xb8,0xaf,0x2e,0x6c,0x58,0x5f,0xb4,0xae,0x2e,0x6b,0xba,0xb1, + 0x2f,0x34,0x28,0x73,0xb8,0xb5,0x2e,0x6e,0x48,0x60,0x62,0xae,0xb0,0x6b,0xbe,0xa1, + 0x2f,0xbe,0x28,0xa7,0xb8,0xbc,0x2e,0x6f,0x28,0x60,0x2a,0xae,0xba,0x6b,0xc1,0x3f, + 0x30,0x24,0x28,0xba,0xbe,0x6b,0xc2,0x5f,0x30,0xb6,0x25,0x35,0xb9,0x33,0x4e,0x71, + 0xaa,0x61,0x4e,0xaf,0x31,0x31,0x33,0x3f,0xa3,0x7c,0x29,0x47,0xb9,0x37,0x2e,0x72, + 0xaa,0x61,0x6e,0xaf,0x42,0x6c,0x35,0xa1,0xa4,0x4c,0x29,0x59,0xb9,0x3c,0x4e,0x74, + 0x58,0x61,0xb4,0xaf,0x4e,0x6c,0x38,0xa1,0xa5,0x3c,0x29,0x77,0xb9,0x44,0x2e,0x76, + 0x38,0x62,0x62,0xaf,0x5f,0x6c,0x3c,0xb1,0xa6,0x3c,0x29,0xa7,0xb9,0x4c,0x4e,0x77, + 0xba,0x62,0xa8,0xaf,0x6b,0x6c,0x3f,0xb1,0xa6,0xae,0x2a,0x33,0xb9,0x52,0x4e,0x79, + 0x78,0x67,0x2c,0x74,0x28,0xb3,0xb9,0x4d,0x4e,0xa2,0x38,0x66,0xa4,0xb0,0xbb,0x6c, + 0xa1,0x3f,0xba,0x74,0x2f,0xb3,0xba,0xbf,0x4f,0x38,0x38,0x74,0xa4,0xb4,0x69,0x6d, + 0x6f,0x40,0x44,0x74,0xa8,0xb3,0xbc,0x2d,0x4f,0x70,0x38,0x22,0xa4,0xb7,0xbb,0x6e, + 0x5f,0x40,0x60,0x74,0xaf,0xb3,0xbe,0x6d,0x4f,0xba,0x38,0x30,0xa4,0xbb,0x69,0x6f, + 0x4f,0x40,0x7c,0x74,0xb6,0xb3,0xc0,0x4d,0x50,0x60,0x38,0xb0,0xa4,0xbe,0xbb,0x70, + 0x3f,0x40,0xaa,0x74,0xbd,0xb3,0xc1,0xc2,0x6f,0x40,0xb6,0x74,0xc0,0xb3,0xc2,0x2d, + 0x50,0xc2,0x35,0x32,0xa5,0x31,0xbb,0x71,0x5f,0x41,0x40,0x75,0x35,0xb4,0x32,0x6d, + 0x51,0x68,0x39,0x40,0xa5,0x35,0x69,0x72,0x4f,0x41,0x5c,0x75,0x3c,0xb4,0x34,0x4d, + 0x51,0xb2,0x39,0x4e,0xa5,0x38,0xbb,0x73,0x3f,0x41,0x78,0x75,0x43,0xb4,0x35,0xbf, + 0x52,0x58,0x39,0x5c,0xa5,0x3c,0x69,0x73,0xc1,0x41,0xa6,0x75,0x4a,0xb4,0x37,0x2d, + 0x52,0x30,0x39,0x6a,0xa5,0x3f,0xbb,0x74,0xb1,0x41,0xc2,0x75,0x51,0xb4,0x39,0x6d, + 0x53,0x48,0x39,0x78,0xa5,0x43,0x69,0x75,0x2f,0x42,0x4c,0x75,0x58,0xb4,0x3b,0x4d, + 0x53,0xa2,0x39,0x26,0xa5,0x46,0xbb,0x76,0xa1,0x42,0x68,0x75,0x5f,0xb4,0x3c,0xbf, + 0x54,0x38,0x39,0xa6,0xa5,0x4a,0x69,0x77,0x6f,0x48,0xb2,0xbf,0x34,0x70,0xb8,0xa1, + 0xa7,0x64,0x2a,0x3f,0xb9,0x55,0x4e,0x7a,0x48,0x63,0x5a,0xaf,0x7c,0x6c,0x44,0xa1, + 0xa7,0xbe,0x2a,0x51,0xb9,0x59,0x2e,0x7b,0x58,0x63,0x7e,0xaf,0x26,0x6c,0x46,0xb1, + 0xa8,0x74,0x2a,0x63,0xb9,0x5e,0x4e,0x7c,0x68,0x63,0xb8,0xaf,0x30,0x6c,0x49,0x3f, + 0xa9,0x3c,0x2a,0x75,0xb9,0x63,0x4e,0x7d,0x28,0x64,0x4a,0xaf,0xaa,0x6c,0x4b,0x3f, + 0xa9,0x7c,0x2a,0x25,0xb9,0x67,0x4e,0x7e,0x28,0x64,0x6a,0xaf,0xb3,0x6c,0x4d,0x5f, + 0xaa,0x44,0x2a,0xa9,0xb9,0x6b,0x4e,0xa1,0x28,0x64,0x2a,0xaf,0xba,0x6c,0x4f,0x5f, + 0xaa,0x24,0x2a,0xbb,0xb9,0x70,0x2e,0x21,0x38,0x65,0x36,0xb0,0x34,0x6c,0x52,0x5f, + 0xab,0x7c,0x2b,0x45,0xb9,0x77,0x4e,0x22,0x28,0x65,0x6e,0xb0,0x41,0x6c,0x55,0xa1, + 0xac,0x54,0x2b,0x5b,0xb9,0x7c,0x2e,0x24,0x38,0x65,0xac,0xb0,0x4c,0x6c,0x31,0x31, + 0x3a,0xa6,0x2b,0x6b,0xb9,0xa2,0x4e,0x24,0xba,0x66,0x32,0xb0,0x52,0x6c,0x59,0xa1, + 0xad,0x4c,0x2b,0x7b,0xb9,0x24,0x4e,0x25,0xba,0x66,0x52,0xb0,0x5a,0x6c,0x5b,0xa1, + 0xad,0x2c,0x2b,0x29,0xb9,0x27,0x2e,0x26,0xba,0x66,0x72,0xb0,0x64,0x6c,0x5e,0x5f, + 0xae,0x64,0x2b,0xb1,0xb9,0x2d,0x4e,0x28,0x48,0x66,0xac,0xb0,0x6c,0x6c,0x60,0x3f, + 0xae,0xae,0x2b,0xbf,0xb9,0xa3,0x4e,0x29,0x48,0x67,0x3e,0xaf,0x7b,0x5b,0xa2,0xb5, + 0xaf,0x4b,0x2d,0x21,0xa6,0xaa,0x46,0x32,0x46,0x5f,0x32,0x5a,0x42,0x6c,0x44,0x3f, + 0xa6,0xa7,0x48,0x2d,0xba,0x70,0x51,0x22,0x28,0x72,0x76,0xa8,0x49,0x7c,0x54,0x63, + 0xb5,0x74,0x63,0x43,0x2c,0xc0,0x44,0xa4,0x47,0x4d,0x2e,0x7e,0x69,0x5f,0x6f,0x21, + 0x35,0x74,0x53,0x2e,0x31,0x32,0x4a,0x2a,0xaa,0x68,0xa8,0x53,0x27,0x63,0xae,0x3f, + 0x50,0x3c,0xc1,0x3a,0x39,0x2a,0x45,0x3d,0x26,0xa1,0x5a,0x74,0x64,0x68,0xae,0x61, + 0x55,0xa6,0x3e,0x55,0xa5,0xb9,0x25,0xa7,0xb8,0x51,0x4a,0xb9,0xae,0x59,0xac,0x3f, + 0x30,0x53,0xba,0x59,0xa5,0xa8,0xa6,0x5f,0xac,0x6d,0x5a,0x75,0x4a,0x71,0x48,0x5b, + 0xb6,0x75,0x2e,0x75,0xc2,0x4d,0x4d,0xa2,0x28,0x67,0x6e,0xa1,0xc1,0x6c,0x42,0x7d, + 0x78,0x33,0x6d,0x7c,0x3e,0xb1,0x49,0x73,0xba,0x25,0x76,0x7c,0xb0,0x6a,0x7c,0x3d, + 0x78,0x4c,0x39,0x2a,0x33,0x71,0xa9,0x40,0xb9,0x6b,0x52,0xa7,0xb1,0x62,0x64,0x3d, + 0x54,0x53,0x70,0x77,0xb7,0x56,0x45,0xb6,0xa8,0x47,0x5a,0xc0,0x57,0x79,0x3c,0x7c, + 0xab,0x64,0x53,0x69,0xac,0x71,0x51,0x6b,0x48,0xb9,0x7a,0x22,0x76,0x6d,0x54,0x41, + 0xa8,0x3d,0x27,0x4b,0x21,0x43,0x54,0x4c,0xab,0x47,0xbd,0x31,0x36,0x5a,0x75,0x22, + 0x47,0x60,0xb2,0xbf,0x34,0xc1,0x60,0x49,0x78,0x67,0x4e,0xb0,0x7a,0x6c,0x63,0xb1, + 0xaf,0xa6,0x2c,0x57,0xb9,0xad,0x2e,0x2c,0x48,0x67,0xac,0xb0,0x2d,0x6c,0x68,0x5f, + 0xb0,0xb6,0x2c,0x71,0xb9,0xb3,0x2e,0x2d,0x58,0x68,0x3e,0xb0,0xa7,0x6c,0x6a,0xa1, + 0xb1,0x6c,0x2c,0x21,0xb9,0xb7,0x2e,0x2e,0x58,0x68,0x5e,0xb0,0xaf,0x6c,0x6c,0x5f, + 0xb2,0x34,0x2c,0xa9,0xb9,0xbd,0x2e,0x2f,0xaa,0x68,0x2e,0xb0,0xbd,0x6c,0x6f,0xc2, + 0x68,0x68,0xb8,0xb0,0xc2,0x6c,0x31,0x3f,0xb3,0x44,0x2d,0x37,0xba,0x33,0x2e,0xa3, + 0xaa,0x69,0x5a,0xb1,0x3d,0x6c,0x74,0xa1,0xb3,0xbe,0x2d,0x51,0xba,0x39,0x2e,0xa5, + 0x58,0x69,0x7e,0xb1,0x45,0x6c,0x76,0x5f,0xb4,0x64,0x2d,0x5f,0xba,0x3d,0x4e,0xa6, + 0x68,0x69,0xb4,0xb1,0x4e,0x6c,0x78,0xa1,0xb5,0x3c,0x2d,0x77,0xba,0x43,0x4e,0xa7, + 0x28,0x6a,0x4e,0xb1,0x5b,0x6c,0x7b,0xb1,0xb3,0x31,0x31,0x29,0xba,0x48,0x4e,0xa9, + 0x38,0x6a,0x76,0xb1,0x63,0x6c,0x7d,0xb1,0xb6,0x54,0x2d,0xb5,0xba,0x4e,0x2e,0xaa, + 0x28,0x6a,0xbc,0xb1,0x70,0x6c,0x21,0xa1,0xb7,0x54,0x2e,0x3b,0xba,0x54,0x4e,0xac, + 0x38,0x6b,0x56,0xb1,0x7b,0x6c,0x23,0xb1,0xb7,0xa6,0x2e,0x4b,0xba,0x58,0x4e,0xac, + 0xba,0x6b,0x7a,0xb1,0x24,0x6c,0x26,0x3f,0xb8,0x5c,0x2e,0x5d,0xba,0x5c,0x2e,0xae, + 0x38,0x6b,0xa8,0xb1,0x2d,0x6c,0xa4,0x41,0x30,0x7d,0x2c,0x6b,0xa2,0x41,0x27,0x3f, + 0x4a,0x7d,0xb8,0x68,0x62,0x62,0x5a,0x5d,0x5c,0x54,0x4a,0xb6,0x3d,0x77,0xaa,0x31, + 0xaa,0x44,0x6e,0xa2,0x42,0x6d,0x5d,0x7d,0x36,0x3b,0x7d,0x5f,0x24,0x75,0x54,0xbc, + 0x79,0x31,0xb9,0x4c,0x52,0x7b,0x34,0x5b,0x3d,0x74,0x79,0x3f,0x2a,0xb8,0x29,0x34, + 0x48,0x3e,0x5f,0x41,0x25,0x5d,0xbe,0xb3,0x53,0xa6,0x4d,0x21,0xbe,0x45,0x28,0x6f, + 0xba,0xb4,0x66,0xae,0xb8,0x67,0x4a,0x22,0xb2,0x75,0x6d,0xbc,0x41,0x4e,0xaa,0xbd, + 0x77,0x29,0xa9,0x53,0x45,0x6e,0x30,0x3c,0xbd,0x6c,0xa6,0x5e,0x35,0x4f,0xa4,0x6b, + 0x27,0x2f,0xa8,0x28,0x27,0x66,0x71,0x5c,0xab,0x6b,0xbe,0xb5,0xb8,0xb9,0xa8,0x5c, + 0x27,0x59,0x5a,0x70,0x76,0x60,0xaa,0xb4,0xbf,0x3b,0xa6,0x36,0x32,0x70,0xa7,0x3c, + 0x6a,0x66,0x67,0x60,0x6a,0x78,0x76,0xa2,0xb5,0xa7,0x66,0x33,0xa5,0x30,0x24,0xbe, + 0x36,0x4b,0xbc,0x58,0x59,0x78,0xad,0x62,0xbd,0x2d,0x6e,0x4c,0x41,0x34,0x2b,0x3e, + 0x56,0xbf,0xa5,0x33,0xab,0x75,0x66,0x24,0x79,0x2c,0x35,0x27,0x23,0x46,0x4e,0x7e, + 0x76,0xbf,0x62,0x7c,0x23,0x68,0xbd,0x3e,0xae,0xb5,0xb0,0x41,0xa7,0x6b,0x25,0x67, + 0x36,0x3f,0x42,0xa1,0x4a,0x58,0x63,0x60,0x48,0xa7,0xa9,0xaa,0xbe,0xc2,0x31,0xc2, + 0xb5,0x5b,0xb8,0xb1,0x2f,0x6c,0x28,0xb1,0xb9,0x34,0x2e,0x79,0xba,0x64,0x2e,0xb0, + 0x48,0x6c,0x5a,0xb1,0xb0,0x6c,0x2c,0xa1,0xb9,0xbe,0x2e,0xa3,0xba,0x69,0x2e,0xb1, + 0x58,0x6c,0x7e,0xb1,0xb7,0x6c,0x2e,0x5f,0xba,0x64,0x2e,0xb1,0xba,0x6d,0x4e,0xb2, + 0x58,0x6c,0xb0,0xb1,0xbf,0x6c,0xa3,0x5f,0xbb,0x44,0x2f,0x37,0xba,0x74,0x4e,0xb3, + 0xba,0x6d,0x52,0xb2,0x3a,0x6c,0xa5,0xa1,0xbb,0x2c,0x2f,0x4f,0xba,0x79,0x4e,0xb5, + 0x68,0x6d,0x22,0xb2,0x46,0x6c,0xa8,0xa1,0xbc,0x6c,0x2f,0x61,0xba,0x7d,0x2e,0xb6, + 0x58,0x6d,0xb0,0xb2,0x4d,0x6c,0xaa,0x5f,0xbc,0xb6,0x2f,0x73,0xba,0x22,0x2e,0xb7, + 0x78,0x6e,0x4a,0xb2,0x59,0x6c,0xad,0xb1,0xbd,0xae,0x2f,0x2d,0xba,0x28,0x2e,0xb9, + 0x48,0x6e,0x7a,0xb2,0x65,0x6c,0xb0,0xa1,0xbe,0x6c,0x2f,0xb3,0xba,0x2d,0x2e,0xba, + 0x58,0x69,0x31,0x32,0x6d,0x6c,0xb2,0xa1,0xbf,0x34,0x30,0x33,0xba,0xa4,0x4e,0xbb, + 0x68,0x6f,0x42,0xb2,0x76,0x6c,0xb4,0xa1,0xbf,0x6c,0x30,0x41,0xba,0xa7,0x2e,0xbc, + 0x58,0x6f,0x5e,0xb2,0x7d,0x6c,0xb6,0xa1,0xbf,0xbe,0x30,0x51,0xba,0xab,0x2e,0xbd, + 0x58,0x6f,0x7e,0xb2,0x25,0x6c,0xb8,0x5f,0xc0,0x64,0x30,0x61,0xba,0xaf,0x2e,0xbe, + 0x58,0x6f,0xb8,0xb2,0x2f,0x6c,0xba,0xb1,0xc1,0x34,0x30,0x73,0xba,0xb5,0x4e,0xbb, + 0x28,0x5c,0x2a,0x6e,0x6c,0x6a,0xbb,0x41,0x6b,0xae,0x44,0x21,0xa5,0x2b,0xa8,0x4d, + 0x57,0xa5,0xac,0x58,0x74,0x5a,0x34,0xaf,0x7d,0x45,0x23,0x59,0xbe,0x48,0x24,0xa6, + 0x66,0xb4,0x2b,0x35,0x47,0x71,0xa5,0x21,0x43,0x54,0x6c,0x45,0xaf,0x6a,0xa9,0x7b, + 0x27,0x4b,0xb4,0x58,0xbd,0x5b,0x4a,0x62,0x3f,0x33,0x2d,0x4b,0xa1,0x32,0x28,0x7d, + 0x27,0x2a,0xc0,0xbc,0xab,0x79,0x36,0x7d,0x3f,0x64,0x41,0x69,0xb6,0xa3,0xa5,0x3b, + 0x37,0x6b,0x66,0x75,0x53,0x77,0x2c,0x3f,0xb5,0x7d,0x6c,0x40,0x42,0x65,0x28,0xbe, + 0x79,0x4a,0x37,0x3b,0x41,0x7d,0xb3,0x7b,0x6a,0x5d,0x4b,0x47,0xae,0xb9,0x29,0x4e, + 0x37,0x34,0xc0,0xa4,0x7e,0x72,0x3d,0x61,0x5e,0x4b,0x6b,0xa1,0xaf,0xaa,0xa4,0x6a, + 0x27,0x57,0xa8,0xbc,0xc0,0x65,0xc1,0x5d,0xa7,0x7d,0x3f,0x5b,0x24,0x5c,0x4f,0xb7, + 0xb7,0xbf,0x62,0x53,0x7c,0x67,0x21,0x7c,0x77,0xaf,0x6c,0x55,0xa6,0xa7,0x25,0xa8, + 0x79,0x4a,0x2b,0x38,0xa8,0x64,0xb0,0x40,0x34,0xae,0x44,0x6f,0x2c,0x7b,0x48,0x4e, + 0xa8,0xb2,0x4f,0x48,0x77,0x62,0x6e,0x3d,0xba,0x25,0x61,0x31,0xa7,0x2e,0x49,0xac, + 0x49,0x6d,0x5f,0x63,0x48,0x77,0x39,0x40,0xc2,0x45,0x23,0xa1,0xa1,0x39,0x56,0x25, + 0x7a,0x71,0x62,0x7d,0x47,0xc0,0xc2,0x71,0x70,0xa6,0xbe,0x7d,0xba,0xb7,0x4e,0xc0, + 0x58,0x70,0x6e,0xb2,0xb3,0x6c,0xbf,0x5f,0xc2,0x44,0x30,0xab,0xba,0xbd,0x2e,0xc1, + 0xba,0x70,0xa8,0xb2,0xbd,0x6c,0xc1,0xc2,0x68,0x70,0xb4,0xb1,0x34,0x6d,0x32,0x40, + 0x31,0x5c,0xa3,0x3d,0xbb,0x34,0x2f,0x32,0x38,0x71,0x5a,0xb3,0x3c,0x6d,0x34,0xa2, + 0x31,0xbe,0xa3,0x51,0xbb,0x3a,0x2f,0x33,0x28,0x71,0xa8,0xb3,0x4c,0x6d,0x38,0xa2, + 0x33,0x34,0xa3,0x73,0xbb,0x42,0x4f,0x35,0x78,0x72,0x52,0xb3,0x5b,0x6d,0x3b,0xb2, + 0x33,0xb6,0xa3,0x2f,0xbb,0x49,0x2f,0x37,0x58,0x72,0x7e,0xb3,0x66,0x6d,0x3e,0xa2, + 0x34,0xae,0xa3,0xc1,0xbb,0x51,0x2f,0x39,0x58,0x73,0x3e,0xb3,0x75,0x6d,0x42,0xa2, + 0x35,0x74,0xa4,0x43,0xbb,0x56,0x4f,0x3a,0x68,0x73,0x66,0xb3,0xa2,0x6d,0x45,0x60, + 0x36,0x4c,0xa4,0x59,0xbb,0x5d,0x4f,0x3c,0x48,0x73,0xac,0xb3,0x31,0x31,0x47,0xb2, + 0x36,0xa6,0xa4,0x6d,0xbb,0x60,0x2f,0x3d,0x38,0x74,0x36,0xb3,0xa5,0x6d,0x49,0xb2, + 0x37,0x54,0xa4,0x7b,0xbb,0x64,0x4f,0x3d,0xba,0x74,0x52,0xb3,0xac,0x6d,0x4c,0xb2, + 0x38,0x34,0xa4,0xa5,0xbb,0x6a,0x4f,0x3f,0x68,0x74,0x22,0xb3,0xb8,0x6d,0x4e,0xa2, + 0x38,0x74,0xa4,0xb5,0xbb,0x6e,0x4f,0x40,0x68,0x74,0xb8,0xb3,0xc1,0x6d,0x50,0xb2, + 0x39,0x34,0xa5,0x33,0xbb,0x72,0x4f,0x41,0x68,0x72,0xac,0x5f,0x4e,0x5f,0x3f,0x3c, + 0xaa,0xbf,0x26,0xc1,0x21,0x21,0x51,0x41,0x56,0x4b,0xbc,0x7b,0x76,0x6b,0x7d,0x5b, + 0x23,0x3b,0x73,0x3c,0x3e,0x73,0x49,0x24,0xac,0x51,0xb8,0xa1,0x63,0x5c,0x4c,0x7e, + 0xc1,0x43,0xb7,0xad,0x25,0x7a,0x4d,0x3d,0xab,0xbe,0x6e,0x76,0x55,0x63,0x59,0xaf, + 0x68,0x2b,0xc1,0x41,0xb2,0xbd,0x55,0x4d,0x69,0x3e,0x73,0x4f,0x49,0x5f,0x4b,0x3d, + 0xb2,0x3b,0xc1,0x43,0xaf,0x55,0x56,0x21,0x49,0xae,0x63,0x42,0x42,0x63,0x6d,0x40, + 0x4d,0xb5,0x2e,0x63,0xad,0x39,0x49,0x7a,0x36,0x53,0xa4,0x4d,0x3c,0x6e,0x6b,0x5d, + 0x39,0x54,0x70,0x66,0x3c,0x70,0x29,0x74,0xac,0x35,0x5f,0x66,0xa7,0x6d,0x71,0xad, + 0xa2,0x54,0x25,0x33,0xa6,0x3d,0x25,0xaf,0x37,0xa9,0xc1,0x4f,0x4c,0x60,0x2d,0x44, + 0x54,0x2d,0x32,0xc2,0x50,0x75,0x44,0xaa,0x56,0xa6,0x43,0x4c,0x76,0x70,0xac,0x5d, + 0x2c,0xae,0x72,0x3b,0x22,0x2a,0x45,0x5e,0x69,0x61,0x4e,0x6c,0x51,0x5e,0xb2,0x5d, + 0x57,0xa7,0x76,0xab,0xb8,0x37,0x54,0x75,0x38,0x21,0x36,0x73,0xbc,0x6e,0xb4,0xac, + 0xb2,0x74,0xbd,0x3b,0xba,0x39,0x24,0x2e,0x29,0x39,0xb8,0x56,0xbd,0x59,0x2d,0x5e, + 0x5b,0x73,0xa1,0x40,0x3f,0x33,0x56,0x6a,0xbc,0x67,0x36,0x2d,0xa7,0x7c,0x47,0x30, + 0x70,0xb3,0x40,0xc1,0x68,0x73,0x4f,0x41,0x28,0x75,0x4a,0xb4,0x39,0x6d,0x53,0xa2, + 0x39,0x2c,0xa5,0x4f,0xbb,0x79,0x4f,0x43,0x58,0x75,0x22,0xb4,0x46,0x6d,0x56,0xa2, + 0x3a,0x7c,0xa5,0x6b,0xbb,0xa2,0x4f,0x45,0x38,0x76,0x3a,0xb4,0x55,0x6d,0x5a,0xa2, + 0x3b,0x74,0xa5,0x23,0xbb,0x26,0x4f,0x46,0x68,0x76,0x62,0xb4,0x5e,0x6d,0x5c,0xa2, + 0x3b,0xbe,0xa5,0xad,0xbb,0x2c,0x4f,0x47,0xba,0x76,0xa4,0xb4,0x6b,0x6d,0x5f,0xb2, + 0x3c,0xa6,0xa5,0xbd,0xbb,0x30,0x2f,0x49,0x38,0x77,0x3a,0xb4,0x74,0x6d,0x62,0x40, + 0x3d,0x64,0xa6,0x3f,0xbb,0xa7,0x4f,0x4a,0x78,0x77,0x66,0xb4,0xa1,0x6d,0x64,0xb2, + 0x3e,0x3c,0xa6,0x55,0xbb,0xac,0x2f,0x4b,0xaa,0x77,0x2e,0xb4,0x29,0x6d,0x67,0xa2, + 0x3e,0x2c,0xa6,0x69,0xbb,0xb1,0x2f,0x4c,0xaa,0x77,0xc0,0xb4,0xa3,0x6d,0x69,0x60, + 0x3f,0x44,0xa6,0x77,0xbb,0x31,0x31,0x4d,0x78,0x78,0x46,0xb4,0xa9,0x6d,0x6a,0xb2, + 0x3f,0x7c,0xa6,0x25,0xbb,0xb8,0x2f,0x4e,0x28,0x78,0x6a,0xb4,0xb2,0x6d,0x6d,0x40, + 0x40,0x3c,0xa6,0xa9,0xbb,0xbd,0x2f,0x4f,0xaa,0x78,0xa4,0xb4,0xbc,0x6d,0x6f,0xc2, + 0x68,0x78,0xb4,0xb4,0xc0,0x6d,0x70,0xa2,0x40,0xbe,0xa3,0x31,0xbc,0x32,0x4f,0x51, + 0x68,0x79,0x42,0xb5,0x37,0x6d,0x72,0xb2,0x41,0x74,0xa7,0x43,0xbc,0x36,0x4f,0x52, + 0x68,0x79,0x62,0xb5,0x71,0x6d,0x5b,0x3b,0x3e,0x6c,0x2d,0x51,0xa7,0xb6,0x53,0x51, + 0x76,0xa2,0x3e,0x78,0x2e,0x5f,0x30,0xb2,0x54,0xae,0x55,0x71,0xa2,0x4d,0xa3,0x24, + 0x36,0x5a,0x7a,0x4e,0x5f,0x6b,0xa8,0xb2,0x57,0x43,0xbd,0x45,0x2f,0xba,0xa8,0x54, + 0x66,0x42,0xa8,0x5a,0x3b,0x69,0x4e,0x7d,0x63,0x55,0x27,0x35,0x28,0x43,0x2a,0x78, + 0xb9,0x7d,0x4f,0x53,0x38,0x5b,0xbf,0xb0,0x2b,0xbe,0xbb,0x76,0x39,0x4a,0x29,0x2f, + 0x38,0xb8,0x26,0xad,0x59,0x72,0xb3,0x60,0x3d,0xa7,0x2b,0x6e,0x40,0x55,0x49,0x6f, + 0xba,0x57,0x67,0x47,0xa7,0x66,0xa1,0x7b,0x56,0x35,0x65,0x73,0xae,0x66,0x51,0x3f, + 0x49,0x58,0x76,0x5d,0x37,0x5a,0xb6,0x7a,0xa4,0x2b,0x6c,0x53,0x22,0x7c,0x30,0x42, + 0x6a,0x39,0x4e,0xbc,0x74,0x58,0x30,0xb4,0xb1,0x3c,0xb1,0x69,0xbd,0x64,0x2a,0x33, + 0x76,0xb0,0x62,0x51,0x37,0x71,0x71,0x5f,0xae,0x7c,0xb6,0x29,0xb0,0xb3,0x50,0xad, + 0x47,0x6b,0xa4,0x68,0xbb,0x5e,0xb5,0xb2,0x3b,0xb6,0x41,0x57,0xa7,0x26,0x49,0xa8, + 0x67,0x49,0xa9,0x5b,0x5e,0x63,0x60,0x22,0xb8,0x54,0xaf,0x23,0xb9,0x5a,0x29,0x75, + 0xb8,0x7b,0x4a,0x59,0xbc,0x66,0xab,0xad,0x34,0x54,0x39,0x7d,0x2f,0x74,0x4b,0xbf, + 0x65,0xb4,0x2f,0x4c,0x3c,0x75,0x52,0x5c,0xb5,0xb7,0x74,0xba,0xb8,0x32,0xc2,0xa3, + 0x41,0xae,0xa7,0x4d,0xbc,0x38,0x2f,0x53,0x38,0x79,0x76,0xb5,0x43,0x6d,0x76,0x40, + 0x42,0x5c,0xa7,0x5d,0xbc,0x3c,0x2f,0x54,0x38,0x79,0xa8,0xb5,0x4b,0x6d,0x77,0xb2, + 0x42,0xa6,0xa7,0x6b,0xbc,0x40,0x2f,0x55,0x38,0x7a,0x36,0xb5,0x53,0x6d,0x79,0xb2, + 0x43,0x5c,0xa7,0x7d,0xbc,0x44,0x2f,0x56,0x38,0x7a,0x56,0xb5,0x5b,0x6d,0x7b,0xb2, + 0x43,0xa6,0xa7,0x2b,0xbc,0x48,0x4f,0x56,0xba,0x7a,0x72,0xb5,0x62,0x6d,0x7d,0xa2, + 0x44,0x4c,0xa7,0xad,0xbc,0x4c,0x4f,0x57,0xba,0x7a,0xa4,0xb5,0x6a,0x6d,0xa2,0x60, + 0x44,0xbe,0xa8,0x35,0xbc,0x52,0x2f,0x59,0x78,0x7b,0x46,0xb5,0x78,0x6d,0x23,0xa2, + 0x45,0x2c,0xa8,0x49,0xbc,0x57,0x2f,0x5a,0xaa,0x7b,0x6e,0xb5,0x21,0x6d,0x25,0x60, + 0x46,0x44,0xa8,0x59,0xbc,0x5b,0x2f,0x5c,0x38,0x7b,0xa8,0xb5,0xa4,0x6d,0x29,0xb2, + 0x41,0x31,0x32,0x79,0xbc,0x64,0x4f,0x5e,0x48,0x7c,0x5a,0xb5,0xae,0x6d,0x2c,0x40, + 0x47,0xb6,0xa8,0xa3,0xbc,0x69,0x2f,0x5f,0x58,0x7c,0x7e,0xb5,0xb7,0x6d,0x2e,0x60, + 0x48,0x64,0xa8,0xb5,0xbc,0x6e,0x2f,0x60,0x78,0x7c,0xb8,0xb5,0xc1,0x6d,0x30,0xb2, + 0x49,0x44,0xa9,0x37,0xbc,0x74,0x4f,0x61,0xba,0x7d,0x52,0xb6,0x3a,0x6d,0xa5,0xb2, + 0x49,0xa6,0xa9,0x4b,0xbc,0x78,0x4f,0x63,0x38,0x7d,0x76,0xb6,0x43,0x6d,0x79,0x3d, + 0x34,0xaf,0x34,0x3b,0xa5,0x4d,0x24,0x7b,0x26,0x50,0xa5,0x52,0x69,0x62,0xb4,0x21, + 0x3f,0x64,0x45,0x2d,0xaf,0x54,0x44,0xc0,0xa9,0x38,0x36,0x2c,0x2f,0x76,0xa1,0x5c, + 0xbf,0x2d,0x4a,0x57,0x30,0x41,0x29,0xae,0x56,0x3c,0x37,0x37,0xa6,0x65,0x31,0x3b, + 0x57,0x4c,0x3e,0x42,0x3f,0x3a,0x45,0x44,0x66,0xa6,0x2e,0xb6,0xbf,0x5e,0x7d,0x3b, + 0x54,0x2c,0xad,0xbb,0xa3,0x5a,0xa7,0x4b,0xba,0x66,0x2e,0x70,0x48,0x60,0xa4,0x3f, + 0xa9,0xa7,0x6a,0x2f,0xb3,0x6e,0x2e,0x7a,0x48,0x2e,0x5a,0xb2,0xb6,0x59,0xa7,0xb5, + 0x33,0x53,0xa4,0x4d,0xa2,0xbd,0x4c,0x2e,0x59,0xbd,0x62,0x7b,0x4c,0x6e,0xb4,0x3f, + 0x5b,0x54,0x68,0x6f,0xc2,0xb3,0x27,0x27,0x27,0x45,0x26,0x6d,0x61,0x5c,0xa3,0x21, + 0x73,0xa6,0xaf,0x6b,0x2f,0x40,0x28,0xa5,0x5a,0x31,0x22,0xc2,0x51,0x7d,0x51,0x7d, + 0x6d,0x6c,0x6b,0x61,0xbb,0x2d,0x2d,0x40,0x36,0x3b,0xb1,0x60,0x5c,0x5c,0x7e,0x5f, + 0x25,0x4b,0x6d,0xb3,0xb8,0x7c,0x28,0x2d,0xa9,0x34,0x32,0x64,0x71,0x67,0xb2,0xb0, + 0x69,0x7c,0xa6,0xbb,0x24,0xad,0xa8,0x2a,0x66,0x39,0x36,0x56,0x3a,0x62,0x73,0x7b, + 0x7a,0x4d,0x21,0x38,0x3d,0xa9,0x54,0x58,0x48,0x45,0xc0,0xb3,0xb9,0x74,0xbe,0x62, + 0xb3,0xaf,0x64,0x72,0xbe,0xc2,0x31,0xc2,0xb9,0x3d,0x7e,0xb6,0x45,0x6d,0xa8,0x60, + 0x4a,0x64,0xa9,0x5f,0xbc,0x7d,0x4f,0x64,0x48,0x7d,0xb0,0xb6,0x4d,0x6d,0xaa,0x60, + 0x4a,0xb6,0xa9,0x6f,0xbc,0x21,0x4f,0x65,0x48,0x7e,0x3a,0xb6,0x54,0x6d,0xac,0x40, + 0x4b,0x5c,0xa9,0x7d,0xbc,0x25,0x4f,0x66,0x48,0x7e,0x5a,0xb6,0x5c,0x6d,0xae,0x40, + 0x4b,0xae,0xa9,0x2d,0xbc,0x28,0x2f,0x67,0x38,0x7e,0x76,0xb6,0x63,0x6d,0xb0,0x40, + 0x4c,0x5c,0xa9,0xaf,0xbc,0x2c,0x2f,0x68,0x38,0x7e,0xb4,0xb6,0x70,0x6d,0xb3,0xa2, + 0x4d,0x54,0xaa,0x3b,0xbc,0xa6,0x2f,0x6a,0x38,0xa1,0x5a,0xb6,0x7d,0x6d,0xb6,0xa2, + 0x4d,0xbe,0xaa,0x51,0xbc,0xac,0x2f,0x6b,0x78,0xa1,0x2a,0xb6,0x28,0x6d,0xb9,0x60, + 0x4e,0x24,0xaa,0x67,0xbc,0xb1,0x4f,0x6c,0x28,0xa1,0xbc,0xb6,0xa3,0x6d,0xbb,0x60, + 0x4f,0x44,0xaa,0x7b,0xbc,0xb7,0x4f,0x6e,0x58,0x79,0x31,0x32,0xaf,0x6d,0xbe,0xa2, + 0x50,0x3c,0xaa,0xa7,0xbc,0xbc,0x2f,0x6f,0x78,0xa2,0x26,0xb6,0xb9,0x6d,0xc0,0xb2, + 0x50,0x7c,0xaa,0xb7,0xbc,0xc1,0x4f,0x70,0xaa,0xa2,0xc0,0xb5,0x32,0x6e,0x32,0x40, + 0x51,0x5c,0xab,0x3f,0xbd,0x35,0x4f,0x72,0x48,0x21,0x5a,0xb7,0x3d,0x6e,0x34,0xb2, + 0x52,0x34,0xab,0x53,0xbd,0x3a,0x4f,0x73,0x68,0x21,0x26,0xb7,0x47,0x6e,0x37,0x40, + 0x52,0x7c,0xab,0x67,0xbd,0x3f,0x4f,0x71,0x45,0xba,0x6e,0xb0,0xb1,0x5a,0xa5,0x63, + 0x78,0x65,0xa3,0x4e,0x50,0x47,0xa8,0x64,0x56,0x2e,0x3b,0x47,0x53,0x58,0x38,0x3a, + 0xad,0xa5,0x76,0x78,0x35,0xa4,0x49,0x66,0x36,0x41,0x5e,0x22,0x48,0x58,0x2b,0xaf, + 0x3c,0x2b,0x75,0x6d,0xb0,0x5f,0x45,0x63,0xa9,0x45,0x2e,0x7b,0xa4,0x7c,0x42,0x22, + 0x72,0x6d,0x74,0x61,0xb8,0xc1,0xa7,0x3d,0x68,0x6f,0x7a,0x28,0x3b,0x6a,0x6c,0x3f, + 0x60,0x30,0xb1,0x47,0x66,0x5d,0x4f,0x5f,0xb7,0xa7,0x66,0x69,0xaa,0x51,0x56,0x64, + 0x59,0x36,0x4a,0x6d,0x52,0x68,0x55,0x7c,0x4f,0xbe,0xae,0x2b,0xba,0x4e,0xa8,0x67, + 0x27,0x2e,0x66,0x7b,0x3f,0x70,0x72,0x7c,0x36,0x3b,0x75,0x70,0x47,0xbf,0x27,0xb8, + 0x46,0x72,0x52,0x59,0xb5,0x78,0x4a,0x7d,0x28,0xbf,0xa6,0x79,0x27,0xa1,0xa8,0x50, + 0xaa,0x63,0x37,0x52,0x38,0x62,0xb4,0x7b,0x72,0x23,0xa7,0xb7,0x2a,0x7e,0x26,0xb9, + 0x59,0xb4,0x26,0xa2,0xbd,0x77,0x7e,0x61,0x55,0x3b,0x7c,0xa3,0xa3,0x3b,0x27,0x50, + 0xab,0x68,0x52,0x69,0x76,0xa2,0x62,0x3a,0xbc,0xaf,0xa5,0xb6,0x3c,0x43,0x27,0xa1, + 0xa9,0x35,0x42,0x57,0xbf,0x62,0x44,0xb5,0x31,0x45,0x76,0xc2,0x4a,0x65,0x29,0x32, + 0x79,0x32,0xc0,0x53,0x64,0x71,0x36,0x3c,0x78,0x5d,0xa7,0xa5,0xb0,0x77,0x6f,0xc2, + 0xa3,0x50,0xb6,0x51,0x4e,0x6e,0x38,0xb2,0x53,0x3c,0xab,0x75,0xbd,0x43,0x4f,0x75, + 0x28,0x22,0x4a,0xb7,0x58,0x6e,0x3b,0x40,0x53,0x7c,0xab,0x25,0xbd,0x46,0x2f,0x76, + 0x78,0x22,0x66,0xb7,0x5f,0x6e,0x3c,0xb2,0x54,0x34,0xab,0xa5,0xbd,0x4a,0x4f,0x77, + 0x78,0x22,0x26,0xb7,0x67,0x6e,0x3f,0x40,0x54,0x24,0xab,0xbf,0xbd,0x51,0x4f,0x79, + 0x48,0x23,0x3a,0xb7,0x74,0x6e,0x42,0x40,0x55,0x5c,0xac,0x3f,0xbd,0x55,0x4f,0x7a, + 0x48,0x23,0x5a,0xb7,0x7c,0x6e,0x44,0x40,0x55,0xae,0xac,0x4d,0xbd,0x58,0x2f,0x7b, + 0x38,0x23,0x7a,0xb7,0x24,0x6e,0x46,0x40,0x56,0x5c,0xac,0x5d,0xbd,0x5d,0x4f,0x7c, + 0x48,0x23,0xac,0xb7,0x2c,0x6e,0x48,0x40,0x56,0xae,0xac,0x6d,0xbd,0x60,0x2f,0x7d, + 0x38,0x24,0x36,0xb7,0xa5,0x6e,0x49,0xb2,0x57,0x54,0xac,0x7b,0xbd,0x64,0x4f,0x7d, + 0xba,0x24,0x52,0xb7,0x31,0x31,0x4b,0x60,0x57,0x24,0xac,0x27,0xbd,0x67,0x4f,0x7e, + 0x28,0x24,0x6a,0xb7,0xb2,0x6e,0x4d,0x60,0x58,0x44,0xac,0xa9,0xbd,0x6b,0x2f,0xa2, + 0x68,0x24,0xb4,0xb7,0xc0,0x6e,0x50,0xa2,0x59,0x44,0xad,0x3b,0xbd,0x74,0x2f,0x22, + 0x48,0x25,0x5a,0xb8,0x3c,0x6e,0x54,0x40,0x59,0xb6,0xad,0x4f,0xbd,0x79,0x4f,0x23, + 0x68,0x25,0x22,0xb8,0x4a,0x6e,0x57,0xa2,0x5a,0x2c,0xad,0x6d,0xbd,0x21,0x2f,0x25, + 0x58,0x22,0x73,0x4c,0x22,0x5a,0x27,0xa2,0xb7,0xbe,0xaf,0x51,0xa2,0x58,0x24,0x71, + 0x3a,0x67,0x26,0x2a,0x21,0x6a,0xbd,0x61,0x21,0x63,0xbc,0x25,0xb8,0xc0,0xc1,0xb2, + 0xb3,0x24,0x5c,0xbf,0xba,0x7a,0x56,0x39,0x48,0xba,0x36,0x54,0xa9,0x69,0x64,0x5b, + 0x6e,0x55,0x6d,0x38,0x34,0x45,0xa6,0x66,0xba,0x44,0x67,0x64,0x2c,0x67,0x43,0x7b, + 0xbe,0x4d,0x3b,0xb5,0xa8,0x26,0x51,0x38,0xb9,0x42,0x7b,0x5e,0x59,0x5d,0xc2,0xac, + 0xae,0xbf,0x5f,0xb7,0xc1,0x50,0x4a,0x6f,0x59,0x4b,0xbd,0x5f,0xa4,0x5b,0xba,0x24, + 0x3b,0x5d,0x31,0x25,0x24,0xc1,0xa5,0xa7,0x36,0x56,0xad,0x32,0x50,0x60,0x5f,0x3e, + 0x74,0x7d,0x67,0x2a,0x33,0x5e,0x55,0x56,0x46,0x51,0xb0,0x29,0x37,0x5a,0x5e,0xb2, + 0xa8,0xbd,0x2d,0x65,0xb4,0x70,0x4c,0x42,0x48,0xa5,0x5e,0x64,0xc0,0x58,0x70,0xae, + 0xb5,0x54,0x37,0x25,0xbf,0x49,0x44,0x71,0x46,0xa8,0x5e,0xa1,0x33,0x74,0xbf,0x3c, + 0x71,0x2d,0x28,0x4e,0x49,0x28,0x2e,0x70,0x28,0x32,0x3b,0x52,0x60,0x59,0x78,0x60, + 0xbe,0xaf,0x5e,0x43,0x2a,0xb5,0x45,0x5c,0x65,0xbc,0x4a,0x59,0x5c,0x5d,0x2e,0xaf, + 0x2b,0x55,0x32,0xad,0x2c,0x6c,0x49,0x29,0x57,0x45,0x73,0x4f,0x76,0x60,0x38,0xb0, + 0x73,0x64,0xaf,0x4f,0xa2,0xaf,0x44,0xa4,0x30,0x30,0xbb,0x38,0xc2,0x52,0xab,0xb2, + 0x5b,0x54,0xad,0xa1,0xbd,0x25,0x2f,0x26,0x58,0x26,0x5e,0xb8,0x5f,0x6e,0x5c,0xb2, + 0x5c,0x34,0xad,0xa5,0xbd,0x2a,0x4f,0x27,0x78,0x26,0x26,0xb8,0x67,0x6e,0x5e,0xb2, + 0x5c,0x74,0xad,0xb5,0xbd,0x2e,0x4f,0x28,0x68,0x26,0xb4,0xb8,0x6e,0x6e,0x60,0xa2, + 0x5d,0x34,0xae,0x33,0xbd,0xa4,0x4f,0x29,0x68,0x27,0x42,0xb8,0x76,0x6e,0x62,0xa2, + 0x5d,0x6c,0xae,0x41,0xbd,0xa7,0x2f,0x2a,0x58,0x27,0x62,0xb8,0x7e,0x6e,0x64,0xa2, + 0x5d,0xbe,0xae,0x51,0xbd,0xab,0x2f,0x2b,0x58,0x27,0x7e,0xb8,0x25,0x6e,0x66,0x60, + 0x5e,0x6c,0xae,0x61,0xbd,0xb0,0x4f,0x2c,0x68,0x27,0xb4,0xb8,0x2e,0x6e,0x69,0x60, + 0x5f,0x44,0xae,0x79,0xbd,0xb6,0x2f,0x2e,0x38,0x28,0x56,0xb8,0xad,0x6e,0x6b,0xb2, + 0x5f,0xa6,0xae,0x2d,0xbd,0xbb,0x4f,0x2f,0x48,0x28,0x7a,0xb8,0xb6,0x6e,0x31,0x31, + 0x40,0x54,0xae,0xad,0xbd,0xbe,0x4f,0x2f,0xba,0x28,0xa4,0xb8,0xbe,0xc0,0x2f,0x30, + 0x78,0x28,0xbc,0xb7,0x31,0x6e,0x71,0x60,0x61,0x44,0xaf,0x3b,0xbe,0x34,0x2f,0xa4, + 0x48,0x29,0x62,0xb9,0x3e,0x6e,0x74,0xa2,0x62,0x34,0xaf,0x55,0xbe,0x3a,0x2f,0xa5, + 0xaa,0x29,0x2e,0xb9,0x49,0x6e,0x77,0xa2,0x62,0xa6,0xaf,0x6b,0xbe,0x40,0x2f,0xa7, + 0x48,0x2a,0x3a,0xb9,0x54,0x6e,0x7a,0xb2,0x63,0x7c,0xaf,0x2b,0xbe,0x68,0x4c,0x66, + 0x57,0xaf,0x6e,0xb6,0x62,0x75,0x36,0xae,0xb5,0x2c,0x27,0x65,0xa5,0x73,0xa6,0xc0, + 0xb7,0xc1,0xb5,0x54,0x58,0x63,0x7c,0xb3,0x46,0x3d,0x37,0x69,0x2f,0x59,0x51,0x5f, + 0x79,0xae,0x6e,0x56,0x37,0x75,0x23,0xb4,0x21,0xad,0xa9,0x3b,0x21,0xaf,0x44,0x74, + 0x7a,0x62,0x2a,0xa7,0xbc,0x71,0x78,0xb4,0x2d,0xa5,0xb1,0x78,0x3c,0x53,0x56,0x21, + 0xb8,0x79,0xac,0xc2,0x41,0x5b,0x4e,0x7b,0xa3,0xb5,0x2c,0x7c,0x3c,0x4d,0x2a,0x61, + 0x57,0x7d,0xa9,0x5a,0x27,0x6c,0x53,0x5e,0xaa,0x43,0xbb,0x61,0xb8,0x54,0x4a,0xbd, + 0x47,0x70,0xc0,0xb8,0x4e,0x71,0x4e,0x22,0x22,0xbe,0x38,0x3d,0xbc,0x62,0x4a,0x5d, + 0x69,0xaf,0x52,0x53,0x4b,0x5a,0x59,0x23,0x74,0x74,0xc1,0x68,0x31,0x2a,0x50,0x23, + 0xb8,0xa4,0x6e,0x2d,0xa3,0x64,0xb9,0x60,0x69,0x2c,0x2c,0x62,0x4b,0x78,0xa3,0x63, + 0x78,0xc1,0x26,0xbb,0x4f,0x63,0x45,0x43,0x24,0xbe,0xac,0x45,0x25,0xb5,0x26,0x3a, + 0x77,0x29,0x36,0x79,0x39,0x62,0x40,0x64,0xb2,0x4d,0x33,0x63,0xb8,0x6a,0x45,0x7e, + 0x4a,0x6b,0xb1,0x39,0x6d,0x65,0x6a,0x41,0xa3,0x3d,0x2b,0x5a,0x47,0xb9,0x56,0x36, + 0x55,0xb3,0x42,0x5a,0x2a,0x70,0x3f,0x5e,0x3e,0xbf,0x65,0x5c,0x31,0xbd,0x4a,0x24, + 0x56,0xb8,0xaa,0xba,0xc1,0x32,0xc2,0x3f,0x53,0xbe,0xaf,0xa3,0xbe,0x4a,0x4f,0xa9, + 0x78,0x2a,0x26,0xb9,0x67,0x6e,0x7e,0xb2,0x64,0x7c,0xaf,0xb9,0xbe,0x4f,0x2f,0xaa, + 0xba,0x2b,0x32,0xb9,0x72,0x6e,0x21,0xa2,0x65,0x4c,0xb0,0x39,0xbe,0x54,0x4f,0xac, + 0x38,0x2b,0x5a,0xb9,0x7e,0x6e,0x24,0xa2,0x66,0x4c,0xb0,0x5b,0xbe,0x5c,0x2f,0xae, + 0x48,0x2b,0xb4,0xb9,0x2f,0x6e,0x28,0xb2,0x67,0x3c,0xb0,0x77,0xbe,0x63,0x4f,0xaf, + 0x28,0x2c,0x4a,0xb9,0xaa,0x6e,0x2b,0x40,0x67,0x7c,0xb0,0x25,0xbe,0x66,0x2f,0xb0, + 0x78,0x2c,0x66,0xb9,0xb2,0x6e,0x2d,0x40,0x68,0x4c,0xb0,0xab,0xbe,0x6c,0x4f,0xb2, + 0x38,0x2c,0xac,0xb9,0xbf,0x6e,0x30,0x60,0x68,0xbe,0xb1,0x33,0xbe,0x72,0x4f,0xb3, + 0x68,0x2d,0x42,0xba,0x37,0x6e,0xa4,0xb2,0x69,0x74,0xb1,0x43,0xbe,0x76,0x4f,0xb4, + 0x68,0x2d,0x62,0xba,0x3f,0x6e,0xa6,0xb2,0x61,0x31,0x33,0x53,0xbe,0x7a,0x4f,0xb5, + 0x68,0x2d,0x2a,0xba,0x49,0x6e,0xa9,0x60,0x6a,0x24,0xb1,0x67,0xbe,0xa2,0x4f,0xb6, + 0xba,0x2e,0x32,0xba,0x54,0x6e,0xac,0x40,0x6b,0x5c,0xb1,0x2d,0xbe,0x28,0x2f,0xb9, + 0x38,0x2e,0x7a,0xba,0x64,0x6e,0xb0,0x60,0x6c,0x64,0xb1,0xb1,0xbe,0x2d,0x2f,0xba, + 0x58,0x2e,0xb0,0xba,0x6d,0x6e,0xb2,0x60,0x6c,0xb6,0xb1,0xc1,0xbe,0xa3,0x4f,0xbb, + 0x58,0x2f,0x3e,0xba,0x75,0x6e,0xb3,0x7b,0xb6,0xbf,0x33,0x5f,0xab,0xb5,0x28,0x58, + 0x67,0x5d,0xc0,0x55,0xb0,0x61,0x57,0x24,0xbc,0x2b,0x6f,0x2a,0x3f,0x67,0x45,0x66, + 0x66,0x29,0x7e,0x70,0xac,0x5f,0x28,0x7e,0xa2,0x3c,0x39,0x74,0x3e,0x69,0x25,0x66, + 0x4a,0x58,0xbc,0x56,0x50,0x67,0x68,0xb3,0x5e,0x6c,0x7b,0x75,0x28,0x73,0x4a,0xa8, + 0x29,0xab,0xc0,0x64,0x4d,0x78,0xb4,0xb3,0x6a,0x5b,0x23,0x4b,0xbe,0x49,0x44,0xba, + 0x27,0xa6,0x42,0x68,0x22,0x5d,0x75,0xb6,0xc1,0x53,0xa2,0x46,0x37,0x25,0x57,0x77, + 0xbb,0xa8,0x37,0x31,0x76,0x63,0x30,0x24,0x40,0x23,0x2c,0x40,0x47,0x48,0x45,0x2c, + 0x78,0x53,0x72,0x56,0xa4,0x5e,0x71,0x7d,0x61,0x45,0x56,0x5d,0xa1,0xab,0x49,0x76, + 0x57,0x38,0xac,0x21,0xb6,0x59,0xa9,0x3c,0x6b,0x33,0x78,0x36,0x3a,0x21,0x2f,0xb3, + 0xac,0x7b,0x72,0xc2,0xb2,0x61,0x44,0x3f,0x33,0xbf,0x66,0x43,0x22,0x70,0x28,0x74, + 0x6a,0x34,0x72,0xac,0x75,0x75,0x7c,0x5b,0xb7,0x5c,0xa4,0x55,0x30,0xa2,0xaa,0xc2, + 0x5a,0x5c,0x53,0x4f,0x6d,0x7e,0xbb,0x62,0x68,0x74,0x2a,0x35,0xab,0xb1,0x4a,0xc0, + 0x59,0xac,0x27,0x4b,0x6e,0x5a,0x53,0x22,0xc0,0x24,0x6c,0x4b,0xab,0x33,0xa8,0x6e, + 0x2a,0x38,0xb8,0x5e,0x4d,0x64,0xc1,0x62,0x3d,0x6d,0x70,0x42,0xbe,0xc2,0x31,0xc2, + 0xb9,0x6f,0x46,0xba,0x79,0x6e,0xb5,0x60,0x6d,0x24,0xb2,0x47,0xbe,0xa9,0x2f,0xbc, + 0xaa,0x2f,0x6e,0xba,0x21,0x6e,0xb7,0xa2,0x6e,0x54,0xb2,0x5b,0xbe,0xae,0x4f,0xbd, + 0xba,0x2f,0xa4,0xba,0x2c,0x6e,0xba,0x40,0x6e,0xb6,0xb2,0x6f,0xbe,0xb3,0x4f,0xbf, + 0x58,0x30,0x3e,0xba,0xa7,0x6e,0xbc,0xb2,0x6f,0x74,0xb2,0x23,0xbe,0xb8,0x2f,0xc0, + 0x78,0x30,0x66,0xba,0xb2,0x6e,0xbf,0x40,0x70,0x44,0xb2,0xa9,0xbe,0xbd,0x4f,0xc1, + 0x28,0x30,0x2a,0xba,0xbb,0x6e,0xc1,0x60,0x70,0x24,0xb2,0xba,0xbe,0x6e,0xc2,0x60, + 0x70,0xbe,0xaf,0x31,0xbf,0x31,0x30,0x31,0x58,0xa3,0x3e,0xbb,0x35,0x6f,0x32,0x60, + 0x71,0x64,0xb3,0x41,0xbf,0x35,0x30,0x32,0x58,0xa3,0x66,0xbb,0x3f,0x6f,0x35,0x40, + 0x72,0x3c,0xb3,0x55,0xbf,0x3a,0x30,0x33,0x78,0xa3,0x26,0xbb,0x48,0x6f,0x37,0x40, + 0x72,0x7c,0xb3,0x31,0x31,0x3e,0x50,0x34,0x68,0xa3,0xb4,0xbb,0x4e,0x6f,0x38,0xa2, + 0x73,0x34,0xb3,0x73,0xbf,0x42,0x50,0x35,0x68,0xa4,0x42,0xbb,0x56,0x6f,0x3b,0x40, + 0x73,0x7c,0xb3,0x27,0xbf,0x47,0x50,0x36,0x28,0xa4,0x6a,0xbb,0x60,0x6f,0x3d,0x40, + 0x74,0x3c,0xb3,0xa7,0xbf,0x4a,0x30,0x37,0x78,0xa4,0x26,0xbb,0x67,0x6f,0x3e,0xb2, + 0x74,0x7c,0xb3,0xb7,0xbf,0x4e,0x30,0x38,0x78,0xa4,0xb8,0xbb,0x6f,0x6f,0x41,0xa2, + 0x7c,0x75,0xac,0x23,0x2c,0x6c,0x2c,0x55,0xa9,0xa8,0x46,0x4e,0x64,0x5e,0xa4,0xb6, + 0x57,0x4d,0x77,0x21,0xa4,0x28,0xa7,0x4e,0x4a,0x6a,0x5e,0x5a,0x66,0x67,0xb7,0x7c, + 0x70,0xad,0x77,0x45,0x26,0x5b,0x30,0xc1,0x38,0xc0,0xb4,0x79,0x7e,0x62,0xbf,0x5d, + 0x2c,0xb6,0x37,0x4b,0xa3,0x36,0x4d,0x5b,0xb9,0xa5,0x56,0x29,0x60,0x5d,0x2c,0x5d, + 0xb5,0x25,0x3c,0x5b,0x29,0x78,0x46,0x7e,0x59,0xaa,0x5e,0x28,0x2e,0x79,0x50,0x5c, + 0x42,0x6d,0x34,0xb1,0x24,0x65,0x2c,0x5f,0x26,0x55,0xb8,0x5b,0xba,0x72,0xb6,0xb3, + 0x64,0x74,0x53,0xbf,0xbc,0x77,0x46,0x3b,0x25,0xbb,0x52,0x5a,0x23,0x6c,0x53,0x62, + 0x71,0x45,0x2b,0xa9,0xaf,0x2d,0x4c,0x5e,0x69,0xab,0x73,0x43,0xa7,0xa2,0x3f,0x22, + 0x24,0xbd,0x2c,0x54,0x4f,0xad,0x2e,0x62,0x36,0xc2,0x32,0xa7,0xab,0x61,0x70,0x3b, + 0x7b,0x73,0x69,0x25,0xad,0x61,0xa5,0x3b,0x57,0x34,0x73,0x50,0x75,0x5b,0x67,0x3f, + 0x38,0x7d,0x49,0xc2,0x4f,0x46,0x4c,0x62,0xb8,0x29,0xa4,0x70,0x53,0x70,0x53,0x5b, + 0x2b,0xbd,0x6d,0xab,0xb6,0x4f,0x46,0x44,0x56,0x49,0xa8,0x51,0x3f,0x5b,0x50,0x3b, + 0x75,0xb5,0x6c,0xbd,0x30,0x5e,0x4e,0x4f,0xa8,0x74,0x5f,0x3a,0xa4,0x71,0x4e,0x41, + 0xc0,0x34,0x7c,0x45,0xbf,0x5c,0x6f,0xc2,0xa3,0x50,0xbf,0xb9,0x74,0x6f,0x42,0x40, + 0x75,0x5c,0xb4,0x3d,0xbf,0x54,0x30,0x3a,0x38,0xa5,0x56,0xbb,0x7b,0x6f,0x43,0xb2, + 0x75,0xa6,0xb4,0x4d,0xbf,0x58,0x30,0x3b,0x38,0xa5,0x76,0xbb,0x23,0x6f,0x45,0xb2, + 0x76,0x54,0xb4,0x5b,0xbf,0x5c,0x50,0x3b,0xba,0xa5,0xa4,0xbb,0x2a,0x6f,0x47,0xa2, + 0x76,0x2c,0xb4,0x69,0xbf,0x5f,0x30,0x3c,0xaa,0xa5,0xc0,0xbb,0xa3,0x6f,0x49,0x60, + 0x77,0x44,0xb4,0x77,0xbf,0x63,0x50,0x3d,0x28,0xa6,0x4a,0xbb,0xaa,0x6f,0x4b,0x40, + 0x77,0x7c,0xb4,0x25,0xbf,0x66,0x30,0x3e,0x78,0xa6,0x66,0xbb,0xb1,0x6f,0x4c,0xb2, + 0x78,0x34,0xb4,0xa5,0xbf,0x6a,0x50,0x3f,0x28,0xa6,0x2a,0xbb,0xba,0x6f,0x4f,0x40, + 0x78,0x7c,0xb4,0xb7,0xbf,0x70,0x50,0x40,0xba,0xa7,0x32,0xbc,0x32,0x6f,0x51,0xa2, + 0x79,0x4c,0xb5,0x39,0xbf,0x73,0x30,0x41,0xaa,0xa7,0x4e,0xbb,0x31,0x31,0x53,0x40, + 0x79,0x24,0xb5,0x47,0xbf,0x77,0x50,0x42,0x28,0xa7,0x6a,0xbc,0x40,0x6f,0x55,0x40, + 0x7a,0x4c,0xb5,0x59,0xbf,0x7c,0x50,0x44,0x48,0xa7,0xac,0xbc,0x4c,0x6f,0x59,0x40, + 0x7b,0x3c,0xb5,0x77,0xbf,0x24,0x50,0x45,0xba,0xa8,0x52,0xbc,0x5a,0x6f,0x5b,0xb2, + 0x7b,0xa6,0xb5,0x2b,0xbf,0x28,0x30,0x47,0x38,0xa8,0x22,0xbc,0x66,0x6f,0x5e,0xa2, + 0x7c,0x6c,0xb5,0xb3,0xbf,0x2e,0x50,0x48,0x68,0xa4,0x4e,0x6f,0xa1,0x74,0x3c,0x3b, + 0x2b,0x54,0x3b,0x55,0xa1,0x26,0x4c,0x37,0xb9,0x46,0x77,0x36,0x28,0x5b,0x44,0x7b, + 0x64,0xb6,0xa2,0x53,0xb1,0x4e,0x2e,0x53,0x56,0x41,0x2a,0x58,0x2e,0x76,0xb7,0x3e, + 0x49,0x23,0xbf,0x31,0xa3,0xba,0x4c,0x5a,0xb8,0x6a,0x3a,0x28,0x60,0x6a,0x25,0xb0, + 0x3e,0x75,0x6d,0x57,0xc2,0x62,0x49,0xb7,0x67,0x32,0x42,0x5c,0xad,0x6b,0x29,0x22, + 0x72,0x5c,0x77,0x77,0xb0,0x24,0x47,0xb2,0x66,0xb5,0x7b,0x37,0x7d,0x61,0xb4,0x44, + 0xb2,0x24,0xa4,0x60,0x38,0x44,0x30,0x41,0xba,0x68,0x72,0x54,0xb9,0x61,0x44,0x3f, + 0x45,0x4c,0x4a,0x49,0x2f,0x57,0x29,0x32,0xab,0xa6,0x72,0xa3,0x56,0x62,0xa5,0x62, + 0xbe,0xad,0xc0,0x75,0xa3,0xad,0x52,0x2c,0xa8,0x67,0x36,0x28,0x45,0x61,0x4a,0xaf, + 0x45,0x7b,0xa2,0x71,0xa3,0x64,0x4a,0x78,0xbb,0xb2,0xb8,0xb5,0x4b,0x58,0xbd,0x5f, + 0x35,0x6c,0x63,0xaa,0x3c,0xbc,0x53,0xbe,0x38,0xb6,0x43,0x37,0x40,0x64,0x47,0x7c, + 0x55,0x45,0xb0,0x53,0xb0,0xbe,0x2c,0x59,0x49,0xa4,0xb0,0x2b,0x4a,0x58,0x2b,0xb1, + 0x3c,0x6d,0x3d,0x5d,0xa5,0xab,0x29,0x32,0x2a,0x6a,0x4f,0x4b,0xbb,0x6d,0xc1,0xc2, + 0x66,0x3a,0xbc,0x60,0xbd,0x5c,0xa1,0x7d,0xba,0x74,0x25,0xbd,0xbd,0xba,0x2f,0x63, + 0x30,0x30,0xbb,0x38,0xbf,0x71,0x60,0xb2,0x7d,0x34,0xb6,0x35,0xbf,0xa4,0x30,0x49, + 0x78,0xa9,0x4a,0xbc,0x7a,0x6f,0x63,0xb2,0x7d,0xb6,0xb6,0x4f,0xbf,0xab,0x50,0x4b, + 0x48,0xa9,0x7a,0xbc,0x24,0x6f,0x66,0x40,0x7e,0x74,0xb6,0x65,0xbf,0xb0,0x30,0x4c, + 0x28,0xa9,0xbc,0xbc,0xa4,0x6f,0x69,0xa2,0xa1,0x4c,0xb6,0x79,0xbf,0xb5,0x30,0x4d, + 0xaa,0xaa,0x4e,0xbc,0xac,0x6f,0x6b,0xa2,0xa1,0x2c,0xb6,0x29,0xbf,0xb9,0x30,0x4e, + 0xaa,0xaa,0x72,0xbc,0xb4,0x6f,0x6d,0xa2,0xa2,0x4c,0xb6,0xab,0xbf,0xbd,0x30,0x4f, + 0xaa,0xaa,0x2e,0xbc,0xbc,0x6f,0x6f,0xa2,0xa2,0xa6,0xb6,0xbd,0xbf,0xc2,0x50,0x50, + 0xba,0xa3,0x32,0xbd,0x32,0x6f,0x71,0xa2,0x21,0x4c,0xb7,0x39,0xc0,0x33,0x30,0x51, + 0xaa,0xab,0x4e,0xbd,0x39,0x6f,0x73,0x60,0x21,0x2c,0xb7,0x49,0xc0,0x37,0x30,0x52, + 0xaa,0xab,0x6e,0xbd,0x41,0x6f,0x71,0x31,0x32,0x3c,0xb7,0x55,0xc0,0x3a,0x30,0x53, + 0x78,0xab,0x26,0xbd,0x47,0x6f,0x76,0xb2,0x22,0x74,0xb7,0x63,0xc0,0x3e,0x50,0x54, + 0x68,0xab,0xb4,0xbd,0x4e,0x6f,0x78,0xa2,0x22,0xbe,0xb7,0x73,0xc0,0x42,0x30,0x55, + 0x78,0xac,0x46,0xbd,0x57,0x6f,0x7b,0x40,0x23,0x7c,0xb7,0x25,0xc0,0x47,0x50,0x56, + 0x28,0xac,0x6a,0xbd,0x61,0x6f,0x7d,0x60,0x24,0x44,0xb7,0xa9,0xc0,0x4b,0x50,0x57, + 0x28,0xac,0x2a,0xbe,0x3d,0x71,0x4a,0x64,0x50,0x7d,0x70,0x31,0xb2,0x23,0xa5,0xa7, + 0x4a,0xba,0x62,0x64,0xac,0x70,0x33,0x60,0xb3,0x7b,0x23,0x33,0xaa,0xaf,0x4b,0x43, + 0x49,0xbd,0x66,0xbc,0x77,0x7c,0x63,0x7b,0x63,0x5c,0x33,0xbf,0xb8,0x6a,0x4c,0x3f, + 0x66,0x4f,0x56,0x66,0x58,0x70,0x3a,0x3d,0x6f,0x33,0x75,0x46,0x32,0xbb,0x28,0x6c, + 0xbb,0x55,0x32,0x76,0x31,0x59,0x29,0xae,0x61,0xb5,0x6e,0x2b,0xbc,0x52,0x45,0x28, + 0x37,0x33,0x6a,0x2c,0x75,0x5e,0xb3,0x7c,0x6b,0x3d,0x5f,0xa4,0x3c,0xb4,0x4a,0x6a, + 0x76,0xbd,0x47,0x5e,0x44,0x5d,0xbc,0xb2,0xad,0x24,0xbb,0x43,0x27,0x2c,0x2a,0xaa, + 0x46,0x7c,0x7e,0x50,0x67,0x5e,0xab,0x3b,0x56,0x25,0x3f,0x46,0x49,0x50,0x54,0x57, + 0x58,0x5e,0xbd,0x59,0x78,0x59,0x40,0x40,0x60,0x6b,0x6b,0xaf,0xaa,0x70,0x57,0x29, + 0x46,0x24,0xb4,0x28,0x22,0x6c,0x47,0x7b,0xb4,0x63,0xb3,0xb7,0xbe,0xbd,0x56,0x5a, + 0xaa,0x3c,0xb4,0x54,0x5a,0x71,0x4d,0x41,0x58,0x73,0xa7,0x39,0xc2,0x44,0xa3,0xbb, + 0x37,0x78,0x62,0xa2,0x62,0x6d,0x4e,0xb2,0x3f,0x4c,0x3a,0x73,0xa6,0x71,0x4f,0xc0, + 0x25,0xbe,0x5a,0x56,0xa2,0x59,0x25,0x41,0x6e,0x2c,0x56,0xac,0x43,0xbd,0xa6,0x57, + 0x49,0xb1,0x37,0x43,0x5f,0x7b,0xae,0x60,0x70,0x68,0xb2,0xbf,0x34,0xc2,0x73,0xa9, + 0xba,0xac,0xa4,0xbd,0x6a,0x6f,0xa1,0xa2,0x24,0x2c,0xb7,0xbb,0xc0,0x4f,0x30,0x58, + 0xaa,0xac,0xc0,0xbd,0x71,0x6f,0x21,0x60,0x25,0x44,0xb8,0x37,0xc0,0x53,0x50,0x59, + 0x28,0xad,0x4a,0xbd,0x78,0x6f,0x23,0x40,0x25,0x7c,0xb8,0x45,0xc0,0x56,0x30,0x5a, + 0x78,0xad,0x66,0xbd,0xa1,0x6f,0x24,0xb2,0x26,0x34,0xb8,0x53,0xc0,0x5a,0x50,0x5b, + 0x68,0xad,0x22,0xbd,0x26,0x6f,0x26,0xa2,0x26,0x6c,0xb8,0x61,0xc0,0x5d,0x30,0x5c, + 0x58,0xad,0xb0,0xbd,0x2d,0x6f,0x28,0x60,0x26,0xb6,0xb8,0x6f,0xc0,0x61,0x50,0x5d, + 0x48,0xae,0x3a,0xbd,0xa6,0x6f,0x2a,0x40,0x27,0x5c,0xb8,0x7d,0xc0,0x64,0x30,0x5e, + 0x38,0xae,0x56,0xbd,0xad,0x6f,0x2b,0xb2,0x27,0xa6,0xb8,0x2b,0xc0,0x68,0x30,0x5f, + 0x38,0xae,0x76,0xbd,0xb5,0x6f,0x2d,0xb2,0x28,0x54,0xb8,0xad,0xc0,0x6c,0x50,0x51, + 0x31,0x34,0xa4,0xbd,0xbc,0x6f,0x2f,0xa2,0x28,0x2c,0xb8,0xbb,0xc0,0x6f,0x30,0x60, + 0xaa,0xae,0xc0,0xbe,0x31,0x6f,0xa3,0x60,0x29,0x44,0xb9,0x37,0xc0,0x73,0x50,0x61, + 0x28,0xaf,0x4a,0xbe,0x38,0x6f,0xa5,0x40,0x29,0x7c,0xb9,0x45,0xc0,0x76,0x30,0x62, + 0x78,0xaf,0x66,0xbe,0x3f,0x6f,0xa6,0xb2,0x2a,0x34,0xb9,0x53,0xc0,0x7a,0x50,0x63, + 0x68,0xaf,0x22,0xbe,0x46,0x6f,0xa8,0xa2,0x2a,0x6c,0xb9,0x61,0xc0,0x63,0x25,0x37, + 0x39,0x43,0x76,0x55,0xb2,0x7d,0x75,0x3e,0xab,0x5c,0x6b,0xa1,0xb0,0xc0,0x48,0x2f, + 0x26,0x37,0xb4,0x63,0x37,0x5f,0x42,0x7e,0x26,0xbe,0x63,0x3d,0xb8,0x76,0xa4,0x3e, + 0x37,0x73,0x2a,0x64,0x63,0x76,0x79,0x3b,0x68,0x3d,0x76,0x4c,0x47,0x55,0xa4,0x53, + 0x57,0x79,0x36,0xb5,0x57,0x69,0xc0,0x21,0x3b,0x53,0x6c,0x46,0x41,0x54,0x2c,0x61, + 0x7a,0x21,0x4e,0x66,0x6d,0x5c,0x32,0x5d,0xa2,0x35,0x24,0x27,0xba,0x23,0x24,0xa6, + 0x59,0x40,0x36,0xa8,0x23,0x75,0x2f,0x24,0x44,0x54,0xc2,0x6d,0xc1,0x70,0x25,0x7c, + 0x47,0x5c,0x27,0x53,0xc2,0x78,0xa3,0xb4,0xc1,0x2b,0xa1,0x5d,0xbd,0xb9,0x29,0xb7, + 0x27,0x4d,0x4a,0xb0,0xbb,0x6d,0x26,0xb4,0x34,0x65,0x29,0x25,0xa5,0x26,0x25,0x21, + 0x59,0x43,0x22,0x21,0xb3,0x64,0x2e,0xaf,0x67,0x2c,0x30,0x2b,0xbd,0x31,0x2c,0x6b, + 0x68,0xba,0x3f,0x44,0x21,0x5d,0x75,0x7d,0x5d,0x7d,0x47,0x7c,0x33,0x57,0x4e,0x54, + 0xb8,0x37,0x5e,0x4e,0x56,0x6b,0xbd,0xb4,0x65,0x23,0xb6,0xbf,0x2e,0x56,0x2f,0xb7, + 0x77,0x5f,0x77,0x54,0x7b,0x58,0x3a,0x5e,0x26,0xbf,0x55,0xa1,0xc0,0x44,0x56,0x69, + 0x25,0xb4,0x53,0x4a,0x2c,0x78,0x2d,0xb5,0xb7,0x2c,0x4b,0x33,0xbc,0xab,0xa6,0xc0, + 0x78,0x34,0xa6,0xba,0xc1,0x32,0xc2,0xab,0x6a,0x7c,0xb9,0x65,0xc0,0x7e,0x30,0x64, + 0x78,0xaf,0xb8,0xbe,0x4f,0x6f,0xaa,0xb2,0x2b,0x34,0xb9,0x73,0xc0,0x22,0x50,0x65, + 0x68,0xb0,0x42,0xbe,0x56,0x6f,0xac,0xb2,0x2b,0x74,0xb9,0x23,0xc0,0x26,0x50,0x66, + 0x68,0xb0,0x62,0xbe,0x5e,0x6f,0xae,0xb2,0x2c,0x34,0xb9,0xa5,0xc0,0x2a,0x50,0x67, + 0x68,0xb0,0x22,0xbe,0x66,0x6f,0xb0,0xa2,0x2c,0x6c,0xb9,0xb3,0xc0,0x2d,0x30,0x68, + 0x58,0xb0,0xb0,0xbe,0x6d,0x6f,0xb2,0x60,0x2c,0xb6,0xb9,0xc1,0xc0,0xa3,0x50,0x69, + 0x48,0xb1,0x3a,0xbe,0x74,0x6f,0xb4,0x40,0x2d,0x5c,0xba,0x3d,0xc0,0xa6,0x30,0x6a, + 0x38,0xb1,0x56,0xbe,0x7b,0x6f,0xb5,0xb2,0x2d,0xa6,0xba,0x4b,0xc0,0xaa,0x50,0x6a, + 0xba,0xb1,0x72,0xbe,0x22,0x6f,0xb7,0xa2,0x2e,0x4c,0xba,0x59,0xc0,0xad,0x30,0x6b, + 0xaa,0xb1,0x2e,0xbe,0x29,0x6f,0xb9,0x60,0x21,0x31,0x34,0x65,0xc0,0xb0,0x30,0x6c, + 0x78,0xb1,0xb8,0xbe,0x2f,0x6f,0xba,0xb2,0x2f,0x34,0xba,0x73,0xc0,0xb4,0x50,0x6d, + 0x68,0xb2,0x42,0xbe,0xa8,0x6f,0xbc,0xa2,0x2f,0x6c,0xba,0x21,0xc0,0xb7,0x30,0x6e, + 0x58,0xb2,0x5e,0xbe,0xaf,0x6f,0xbe,0x60,0x2f,0xb6,0xba,0x2f,0xc0,0xbb,0x50,0x6f, + 0x48,0xb2,0x7a,0xbe,0xb6,0x6f,0xc0,0x40,0x30,0x5c,0xba,0xaf,0xc0,0xbe,0x30,0x70, + 0x38,0xb2,0xa8,0xbe,0xbd,0x6f,0xa2,0x5c,0x7c,0x43,0x7a,0x3e,0x34,0x62,0x45,0x52, + 0xab,0x4b,0xb0,0xb1,0xb9,0x64,0x5f,0x44,0x7b,0xa5,0x6c,0x45,0xa3,0x30,0x50,0x47, + 0x68,0xa9,0x6e,0xc0,0x46,0x58,0x4a,0x22,0x67,0xbe,0x4b,0x42,0x49,0x5d,0xa8,0xb3, + 0x66,0x74,0x62,0x7b,0x2d,0x7b,0xa4,0x3c,0xbf,0x7c,0x26,0x5e,0x48,0xb2,0x2f,0x2c, + 0xaa,0x27,0x32,0x54,0x60,0x69,0x57,0x40,0x5f,0x24,0x3e,0xaf,0xbd,0x21,0x50,0x23, + 0xaa,0x50,0x67,0x5f,0x76,0x58,0x4f,0x3f,0x36,0xad,0x6a,0x56,0x42,0x25,0x25,0xad, + 0x47,0x60,0x4e,0x7c,0xbf,0x71,0x72,0x61,0x59,0xb5,0x21,0xa5,0x2d,0x7e,0x4e,0x65, + 0x3a,0x6f,0xa4,0x76,0x2a,0x6a,0x60,0x5f,0x25,0x5b,0xb4,0xb6,0x4b,0xa8,0x51,0xab, + 0x36,0xa7,0x32,0x5a,0xac,0x6c,0xa2,0x7a,0xad,0xb6,0x62,0x66,0x31,0xac,0x49,0x7e, + 0xa9,0x50,0x52,0x6b,0xba,0x59,0xba,0x62,0x22,0xb7,0x69,0x30,0x46,0xbb,0x24,0xbf, + 0x26,0x50,0x4e,0x72,0x5d,0x69,0x4a,0xad,0x56,0x34,0x3e,0x38,0x4f,0x40,0x27,0x75, + 0xa8,0x32,0x2e,0xb1,0xba,0x5a,0xbb,0xa2,0xab,0x5c,0x41,0x27,0xa8,0x75,0x29,0x24, + 0x37,0x49,0x22,0x51,0x66,0x6a,0x63,0x62,0x4c,0x4b,0x78,0x32,0x3c,0xb1,0x30,0x79, + 0xb8,0x6f,0x63,0x38,0x58,0x7b,0x57,0xad,0x42,0x2b,0x24,0xba,0xbe,0xc0,0xc2,0x71, + 0x70,0xbe,0x40,0xba,0xbe,0x6f,0xc2,0x40,0x30,0xae,0xba,0xbf,0xc0,0xc2,0x30,0x51, + 0x38,0xb3,0x36,0xbf,0x33,0x70,0x31,0xb2,0xa3,0x54,0xbb,0x3b,0xc1,0x34,0x50,0x71, + 0xba,0xb3,0x52,0xbf,0x3a,0x70,0x33,0xa2,0xa3,0x2c,0xbb,0x49,0xc1,0x37,0x30,0x72, + 0xaa,0xb3,0x6e,0xbf,0x41,0x70,0x35,0x60,0xa4,0x44,0xbb,0x57,0xc1,0x3b,0x50,0x73, + 0x28,0xb3,0x2a,0xbf,0x48,0x70,0x37,0x40,0xa4,0x7c,0xbb,0x65,0xc1,0x3e,0x30,0x74, + 0x78,0xb3,0xb8,0xbf,0x4f,0x70,0x38,0xb2,0xa5,0x34,0xbb,0x73,0xc1,0x42,0x50,0x75, + 0x68,0xb4,0x42,0xbf,0x56,0x70,0x3a,0xa2,0xa5,0x6c,0xbb,0x21,0xc1,0x45,0x30,0x76, + 0x58,0xb4,0x5e,0xbf,0x5d,0x70,0x3c,0x60,0xa5,0xb6,0xbb,0x2f,0xc1,0x49,0x50,0x77, + 0x48,0xb4,0x7a,0xbf,0x64,0x70,0x3e,0x40,0xa6,0x5c,0xbb,0xaf,0xc1,0x4c,0x30,0x78, + 0x38,0xb4,0xa8,0xbf,0x31,0x31,0x3f,0xa2,0xa6,0xa6,0xbb,0xbd,0xc1,0x50,0x50,0x78, + 0xba,0xb5,0x32,0xbf,0x73,0x70,0x41,0xb2,0xa7,0x54,0xbc,0x3b,0xc1,0x54,0x50,0x7a, + 0x38,0xb5,0x56,0xbf,0x7b,0x70,0x43,0xb2,0xa7,0xa6,0xbc,0x4b,0xc1,0x58,0x50,0x7a, + 0xba,0xb5,0x72,0xbf,0x22,0x70,0x45,0xa2,0xa8,0x4c,0xbc,0x59,0xc1,0x5b,0x30,0x7b, + 0xaa,0xb5,0x2e,0xbf,0x29,0x70,0x47,0x60,0xa8,0x24,0xbc,0x67,0xc1,0x5f,0x50,0x7c, + 0x28,0xb9,0x5a,0x50,0xa6,0x6e,0x47,0x7e,0x2f,0x3d,0x73,0x50,0x4b,0x71,0x46,0x63, + 0xa8,0x54,0x36,0x58,0x60,0x5b,0x31,0x3c,0xc1,0x7c,0x3e,0xb1,0xac,0xba,0x25,0x5e, + 0x37,0x39,0x5a,0x55,0x5b,0x5d,0x67,0x3b,0x55,0xb5,0x2d,0x4b,0xbb,0x36,0x2e,0xb9, + 0xb8,0xb6,0x2e,0x74,0xa3,0x6f,0x47,0xaf,0x5a,0x6c,0x3b,0x75,0xa1,0x7b,0x2d,0x31, + 0x69,0x38,0x2e,0x76,0xa7,0x69,0x49,0x43,0xba,0x6b,0x30,0x68,0x33,0xba,0x2a,0xc1, + 0x27,0x77,0x26,0xb4,0x48,0x7d,0x65,0x60,0x50,0x4b,0xa5,0xa9,0x25,0xba,0x25,0xa9, + 0x77,0xb5,0x5e,0x53,0x6c,0x5a,0x59,0x7c,0x70,0xb7,0x5f,0x30,0x31,0x52,0x26,0x65, + 0xa8,0x6c,0x7e,0x71,0x22,0x5c,0x7c,0x5b,0x78,0x24,0xac,0x51,0xa3,0x5b,0x47,0xb7, + 0xb9,0x4e,0x32,0x76,0xa6,0x5a,0x29,0xaf,0x5d,0x6b,0xb1,0x2f,0xaa,0xb9,0x26,0x44, + 0xba,0x28,0x4b,0x35,0xba,0x79,0xa7,0xae,0xb1,0x55,0x51,0xb3,0x2a,0x28,0x46,0xa4, + 0xa9,0x50,0x53,0x4c,0xb2,0x71,0x46,0xad,0xba,0x6c,0xb1,0x23,0xa2,0xb8,0x28,0xba, + 0x26,0x2a,0xbc,0x27,0x52,0x5a,0x25,0x40,0x6d,0x44,0x7a,0x3d,0xab,0xc2,0x2e,0xa9, + 0xaa,0x70,0x2e,0x7c,0x66,0x59,0xa6,0xac,0xb0,0x54,0x2b,0xc1,0x2d,0x23,0x2f,0xa1, + 0x29,0x53,0x6a,0x63,0x72,0x7e,0xa3,0x50,0x70,0xb3,0x40,0xc1,0xbc,0x60,0x50,0x7c, + 0xba,0xb6,0x32,0xbf,0xa4,0x70,0x49,0xa2,0xa9,0x4c,0xbc,0x79,0xc1,0x63,0x30,0x7d, + 0xaa,0xb6,0x4e,0xbf,0xab,0x70,0x4b,0x60,0xa9,0x24,0xbc,0x27,0xc1,0x67,0x50,0x7e, + 0x28,0xb6,0x6a,0xbf,0xb2,0x70,0x4d,0x40,0xaa,0x3c,0xbc,0xa7,0xc1,0x6a,0x30,0xa1, + 0x78,0xb6,0x26,0xbf,0xb9,0x70,0x4e,0xb2,0xaa,0x74,0xbc,0xb5,0xc1,0x6e,0x50,0xa2, + 0x68,0xb6,0xb4,0xbf,0xc0,0x70,0x50,0xa2,0xaa,0xbe,0xbd,0x31,0xc1,0x71,0x30,0x21, + 0x68,0xb7,0x42,0xc0,0x36,0x70,0x52,0xa2,0xab,0x6c,0xbd,0x41,0xc1,0x75,0x30,0x22, + 0x58,0xb7,0x5e,0xc0,0x3d,0x70,0x54,0x60,0xab,0xb6,0xbd,0x4f,0xc1,0x79,0x50,0x23, + 0x48,0xb7,0x7a,0xc0,0x44,0x70,0x56,0x40,0xac,0x5c,0xbd,0x5d,0xc1,0x7c,0x30,0x24, + 0x38,0xb7,0xa8,0xc0,0x4b,0x70,0x58,0x40,0xac,0xae,0xbd,0x6d,0xc1,0x31,0x31,0x46, + 0xaa,0xb8,0x22,0xc0,0x6c,0x70,0x60,0x40,0xb0,0x64,0xbe,0x79,0xc1,0xb9,0x50,0x30, + 0x48,0xb3,0x5a,0xc1,0x41,0x70,0x78,0xa2,0xb6,0x6c,0xbf,0xb5,0xc2,0x4e,0x30,0xaa, + 0x78,0xbc,0xb8,0xc1,0x6f,0x70,0xa2,0xb2,0xb7,0x34,0xc0,0x33,0xc2,0x52,0x30,0xab, + 0xaa,0xbd,0x4e,0xc1,0x79,0x70,0x23,0x60,0xb7,0x24,0xc0,0x47,0xc2,0x57,0x50,0xac, + 0x28,0xbd,0x6a,0xc1,0xa2,0x70,0x25,0xa2,0xb8,0x4c,0xc1,0x42,0x4a,0x44,0x29,0x61, + 0x67,0xb6,0x42,0x5f,0x37,0x64,0x42,0x7d,0x70,0x33,0x2c,0x29,0xa5,0x65,0x29,0x2b, + 0x66,0xb3,0x23,0x5e,0x34,0x5c,0xb5,0x5d,0x59,0x6b,0x25,0x74,0x38,0x56,0x51,0x65, + 0x69,0xbe,0x4a,0x5c,0x62,0x72,0x2a,0x5d,0xb8,0x65,0x68,0x6c,0x35,0x66,0x47,0x72, + 0xb9,0x78,0x4a,0x76,0xb1,0x6e,0x75,0x63,0xaa,0x33,0x77,0x69,0xb2,0x49,0x54,0x50, + 0x27,0x4f,0x53,0x44,0x23,0x61,0x72,0xa2,0xbf,0x44,0x74,0x7b,0xb1,0x33,0x2e,0x43, + 0x77,0xa2,0xb4,0xa8,0x7b,0x60,0x64,0x23,0x32,0x6c,0x4e,0x25,0xb0,0x60,0x49,0xb9, + 0x66,0x44,0x3a,0xa7,0x32,0x71,0x4c,0x3a,0xc1,0x5b,0xa8,0x26,0x42,0xaf,0x2d,0x44, + 0x27,0xb1,0x7a,0x55,0x21,0x58,0x6e,0xb5,0xa9,0xaf,0x26,0xc0,0x36,0xa8,0x4f,0x36, + 0xba,0xac,0x36,0x54,0x43,0x5c,0xb3,0x7d,0x79,0x2d,0x32,0xb9,0xbf,0xb8,0x4c,0x4f, + 0x47,0x73,0xbc,0x24,0x68,0x59,0xa9,0x3b,0x6b,0x74,0x53,0x33,0xb5,0xaa,0x58,0x2f, + 0x48,0x30,0xa4,0xa8,0x6c,0x6d,0x75,0xb0,0xb3,0x64,0x22,0x4d,0xaa,0xa9,0x55,0x65, + 0x7a,0xa4,0xb4,0xb6,0x3a,0x72,0x26,0x41,0x61,0xbd,0x21,0x5f,0xab,0x4f,0x24,0x22, + 0x46,0x4e,0x76,0x55,0x6f,0x6d,0x52,0x7b,0x63,0x7b,0x7b,0x41,0x21,0x76,0x24,0xbd, + 0x40,0x30,0xbb,0x38,0xc2,0x6f,0x26,0xa2,0xb8,0x7c,0xc0,0x67,0xc2,0x5f,0x50,0xae, + 0x28,0xbd,0xbc,0xc1,0xa3,0x70,0x29,0xb2,0xb9,0x54,0xc0,0x7b,0xc2,0x64,0x50,0xaf, + 0xba,0xbe,0x5e,0xc1,0xaf,0x70,0x2c,0x60,0xb9,0xbe,0xc0,0xa3,0xc2,0x6a,0x30,0xb1, + 0x28,0xbe,0x2a,0xc1,0xba,0x70,0x2f,0x40,0xba,0x24,0xc0,0xb9,0xc2,0x6f,0x50,0xb2, + 0x28,0xbe,0xc0,0xc2,0x31,0x70,0xa3,0xa2,0xbb,0x4c,0xc1,0x39,0xc2,0x73,0x30,0xb3, + 0xaa,0xbf,0x4e,0xc2,0x39,0x70,0xa5,0x60,0xbb,0x2c,0xc1,0x4b,0xc2,0x78,0x30,0xb5, + 0x38,0xbf,0x76,0xc2,0x43,0x70,0xa7,0xb2,0xbc,0x5c,0xc1,0x5d,0xc2,0x7c,0x30,0xb6, + 0x38,0xbf,0xa8,0xc2,0x4c,0x70,0xaa,0x40,0xbd,0x34,0xc1,0x75,0xc2,0x22,0x30,0xb7, + 0x28,0xc0,0x4a,0xc2,0x59,0x70,0xad,0x60,0xbd,0x24,0xc1,0x27,0xc2,0x27,0x50,0xb8, + 0x28,0xc0,0x6a,0xc2,0x62,0x70,0x71,0x31,0x3c,0x4c,0xc1,0xab,0xc2,0x2b,0x30,0xb9, + 0xaa,0xc0,0x2e,0xc2,0x6b,0x70,0xb1,0xb2,0xbe,0xb6,0xc2,0x31,0xc2,0xa4,0x50,0xbb, + 0x68,0xc1,0x42,0xc2,0x77,0x70,0xb4,0xb2,0xbf,0x74,0xc2,0x43,0xc2,0xa8,0x30,0xbc, + 0x28,0xc1,0x6e,0xc2,0x21,0x70,0xb7,0x60,0xc0,0x44,0xc2,0x57,0xc2,0xae,0x50,0xbd, + 0xba,0xc1,0xa8,0xc2,0x2b,0x70,0xb9,0xb2,0xc0,0xa6,0xc2,0x6b,0xc2,0xb2,0x50,0xbf, + 0x58,0xc2,0x3e,0xc2,0xa5,0x6b,0xb5,0xb2,0x5a,0x44,0xb5,0x7b,0xaf,0x2c,0x56,0x24, + 0x66,0x45,0x3e,0xac,0xac,0x5b,0x6b,0x5a,0xb8,0x55,0x33,0xa8,0x34,0xb2,0x54,0xb1, + 0x3a,0x5f,0x56,0x6d,0x4d,0x61,0x58,0xb0,0x22,0x73,0xbc,0x67,0xa8,0x4d,0x51,0x70, + 0xac,0x53,0x5e,0x72,0x6d,0x69,0x61,0xb2,0xad,0xb6,0xb6,0x43,0x22,0x71,0x2b,0x47, + 0x48,0xa6,0x6f,0x35,0x55,0x58,0x52,0x22,0xbf,0xbf,0x76,0xbf,0xa9,0x28,0x44,0x71, + 0x29,0xa8,0x56,0x79,0x7b,0x71,0x67,0x7b,0x3a,0x6c,0x28,0x4d,0xb4,0xb5,0x27,0xba, + 0x29,0xbe,0x4a,0x30,0x37,0x58,0x51,0x7d,0x77,0x4d,0x28,0x5d,0x2f,0x7d,0x2a,0x53, + 0xb8,0x47,0x3b,0x42,0x79,0x69,0x59,0xad,0x51,0xb6,0x7d,0xa9,0xb7,0x7c,0x2a,0xc1, + 0xba,0x71,0x2b,0x5f,0x65,0x58,0x5f,0xb5,0x3e,0xb7,0xb6,0x47,0xb0,0xb0,0x25,0x59, + 0x49,0xab,0xb8,0x5a,0xa1,0x62,0x5d,0xa1,0x70,0x3d,0x40,0xb0,0x47,0x73,0x58,0xbb, + 0x6a,0x52,0x2a,0x50,0x4b,0x70,0xb6,0x3b,0x48,0x5c,0x72,0xae,0x47,0x27,0x28,0x41, + 0xac,0x78,0x4a,0x58,0xa7,0x58,0x58,0x3e,0xa3,0x7c,0x23,0xab,0xac,0x66,0x2f,0x42, + 0xbc,0x7b,0xa8,0xad,0x49,0x5a,0x3a,0x3f,0xa7,0x3c,0x68,0xa9,0xaa,0x67,0x25,0x64, + 0x4a,0xbd,0x5f,0x32,0x4a,0x5b,0x40,0x40,0x6c,0xc2,0xb2,0xbf,0x34,0xc1,0x54,0x2d, + 0x78,0xc2,0x4e,0xc2,0xab,0x70,0xbd,0xa2,0xc1,0x2c,0xc2,0x29,0xc2,0xb9,0x30,0xc0, + 0xba,0xc2,0x7a,0xc2,0xb7,0x70,0xc0,0x60,0xc2,0x64,0xc2,0xb1,0xc2,0xbf,0x50,0xc2, + 0x48,0xc2,0xac,0xc2,0xc0,0x70,0xc2,0xa2,0xc2,0xbe,0xbf,0x36,0x31,0x34,0xa3,0x32, + 0x39,0x31,0x57,0x31,0x3b,0x71,0x34,0x21,0x31,0xbf,0x31,0x54,0x31,0x3a,0xa3,0x34, + 0x59,0x31,0xb1,0x31,0x4e,0x71,0x38,0x21,0x32,0xbf,0x31,0x74,0x31,0x42,0xa3,0x35, + 0x79,0x32,0x5f,0x31,0x5d,0x71,0x3c,0x61,0x33,0xb7,0x31,0x30,0x31,0x49,0x51,0x37, + 0x59,0x32,0x23,0x31,0x6a,0x71,0x3f,0x21,0x34,0xa7,0x31,0xc0,0x31,0x51,0x51,0x39, + 0x49,0x33,0x43,0x31,0x76,0x71,0x42,0xb3,0x35,0x75,0x32,0x44,0x31,0x58,0x51,0x3a, + 0xbb,0x33,0x73,0x31,0x22,0x71,0x45,0xb3,0x36,0x5d,0x32,0x5e,0x31,0x5c,0xa3,0x31, + 0x31,0x33,0xa9,0x31,0x2c,0x71,0x48,0x41,0x36,0xaf,0x32,0x6e,0x31,0x60,0xa3,0x3d, + 0x39,0x34,0x37,0x31,0xa5,0x71,0x49,0xb3,0x37,0x55,0x32,0x7c,0x31,0x64,0x51,0x3d, + 0xbb,0x34,0x53,0x31,0xae,0x71,0x4c,0x41,0x37,0xaf,0x32,0x2e,0x31,0x68,0xa3,0x3f, + 0x39,0x34,0x7b,0x31,0xb6,0x71,0x4e,0x41,0x38,0x5d,0x32,0xb0,0x31,0x6c,0xa3,0x40, + 0x39,0x34,0xa9,0x31,0xbd,0x71,0x4f,0xb3,0x38,0xa7,0x32,0xbe,0x31,0x74,0x56,0x21, + 0x76,0x70,0x3a,0x75,0x78,0x7c,0x50,0x3e,0x41,0x53,0xab,0x35,0xa7,0xac,0x2f,0xa4, + 0xb9,0xbd,0x5f,0x5e,0x57,0x72,0x49,0x7b,0x69,0x5d,0xa5,0x51,0x2f,0x75,0x2d,0x47, + 0x67,0x4c,0x42,0x57,0xa2,0x74,0x51,0x64,0x7a,0x4d,0xbd,0x49,0xbb,0x4a,0x56,0xc0, + 0xbb,0xad,0x3b,0x4b,0xc2,0xa2,0x48,0x7e,0xbb,0x54,0xa8,0x5b,0x30,0x54,0x56,0x76, + 0xa9,0x44,0x23,0x65,0x46,0x5b,0x68,0x63,0x7b,0x4b,0x70,0x3b,0xa8,0x63,0x28,0x3d, + 0x46,0xa3,0x26,0xc1,0x22,0x74,0x3c,0xb0,0x79,0x2b,0xc1,0x3f,0xb6,0xb5,0x4c,0x30, + 0xba,0xba,0x4a,0x69,0x4c,0x62,0x2b,0x7c,0x6f,0x64,0x6a,0xad,0x24,0x69,0x24,0x25, + 0x37,0x4c,0x46,0xae,0x52,0x62,0x4c,0x22,0xb5,0x63,0x70,0x53,0xa1,0x24,0x4c,0x47, + 0xaa,0xb8,0xad,0x47,0x4e,0x73,0x5f,0x21,0xb8,0x6c,0xbf,0xba,0x41,0x42,0xa8,0x66, + 0x48,0x2e,0x37,0x66,0xbb,0x75,0x40,0x61,0x72,0x2c,0x67,0x3e,0x4b,0xb1,0x50,0x22, + 0x36,0x7e,0xb1,0x6e,0x4c,0x6a,0x71,0x60,0x39,0x45,0x4a,0x2a,0x4b,0x72,0x57,0x74, + 0x66,0x61,0x2e,0x5a,0x7c,0x5c,0x2d,0x3a,0xad,0x65,0xbc,0x5d,0x24,0xa7,0x54,0xa4, + 0x49,0x3d,0x7a,0xb2,0x43,0x7d,0xbe,0x21,0xb1,0x3c,0x69,0x58,0x36,0xc1,0x4a,0x7d, + 0x57,0x3a,0x60,0xba,0xc1,0x32,0xc2,0xac,0x48,0xb7,0x33,0x34,0x31,0x72,0x51,0x41, + 0x29,0x35,0x53,0x32,0x3b,0x71,0x54,0x61,0x39,0xb7,0x33,0x50,0x31,0x79,0x51,0x43, + 0x49,0x35,0x7b,0x32,0x45,0x71,0x56,0x61,0x3a,0x6d,0x33,0x64,0x31,0xa2,0x51,0x45, + 0x69,0x36,0x4b,0x32,0x58,0x71,0x5b,0x41,0x3b,0xa7,0x33,0xa4,0x31,0x2a,0xa3,0x47, + 0x29,0x36,0x2b,0x32,0x69,0x71,0x5f,0x61,0x3c,0x2d,0x34,0x3c,0x31,0xa6,0xa3,0x4a, + 0x39,0x37,0x57,0x32,0x7b,0x71,0x63,0xb3,0x3d,0xbf,0x34,0x52,0x31,0xab,0xa3,0x4b, + 0x59,0x37,0xa1,0x32,0x25,0x71,0x66,0x61,0x3e,0x75,0x34,0x70,0x31,0xb3,0x51,0x4d, + 0x59,0x38,0x3f,0x32,0xa9,0x71,0x6c,0x21,0x40,0x5d,0x34,0xb2,0x31,0xbf,0xa3,0x50, + 0x70,0x2d,0x34,0xc0,0x31,0xc2,0xa3,0x31,0x39,0x39,0x37,0x33,0x34,0x71,0x72,0x41, + 0x41,0x5d,0x35,0x40,0x32,0x35,0x51,0x52,0x69,0x39,0x31,0x31,0x3d,0x71,0x76,0x61, + 0x42,0x6d,0x35,0x64,0x32,0x3e,0xa3,0x54,0x79,0x39,0xb9,0x33,0x50,0x71,0x79,0x41, + 0x43,0x3d,0x35,0x76,0x32,0x42,0xa3,0x55,0x79,0x3a,0x47,0x33,0x57,0x71,0x7a,0xb3, + 0x43,0x75,0x35,0x24,0x32,0x46,0x51,0x56,0x69,0x3a,0x67,0x33,0x5f,0x71,0x7d,0x41, + 0x44,0x4d,0x35,0xac,0x32,0x4b,0xa3,0x57,0xbb,0x3a,0xa9,0x33,0x6b,0x71,0xa1,0xb3, + 0x44,0xa7,0x35,0xbe,0x32,0x50,0xa3,0x56,0x49,0xa7,0x7b,0x35,0x5c,0x72,0xbf,0xa1, + 0xa4,0x4c,0x64,0x63,0x30,0x2f,0xa3,0xa8,0x68,0x49,0x47,0x37,0x4b,0x7b,0xb9,0xb0, + 0x6e,0x2c,0x30,0x3e,0x45,0x68,0x25,0xa3,0x59,0x4d,0x7a,0x53,0x6e,0x60,0x54,0x42, + 0x74,0x75,0x66,0x41,0xa1,0x26,0x2d,0xb6,0x57,0x6d,0x46,0x21,0xb9,0x79,0x73,0x63, + 0xb9,0x54,0x77,0x73,0xaf,0x35,0x2e,0xb5,0x56,0x23,0x37,0x5c,0xa2,0x66,0xa6,0xa2, + 0xb5,0x6c,0x4c,0x51,0x2c,0x2d,0x27,0x64,0x56,0x28,0x53,0x5c,0xba,0x7b,0xbe,0x3a, + 0xa3,0xa7,0x43,0x64,0x35,0x27,0x4b,0x2c,0xba,0x62,0x73,0x5b,0x4c,0x6a,0xac,0x7e, + 0x36,0xbd,0xaf,0x2f,0xba,0x7e,0x55,0x5d,0x4a,0x6f,0xb4,0xbc,0xba,0x78,0x78,0x42, + 0x73,0x5b,0xc0,0xa9,0xbf,0xaf,0x4f,0x69,0x29,0xa1,0x62,0x29,0x4d,0x74,0xb4,0x7c, + 0x65,0x43,0xbe,0x43,0xab,0x41,0x4e,0xc1,0x28,0xb7,0x26,0x53,0x7e,0x59,0xb5,0x5b, + 0x53,0x7b,0xab,0x3b,0xc2,0x62,0x56,0xbd,0xbb,0x47,0x6e,0x78,0x35,0x6c,0xb7,0x41, + 0x2e,0x44,0xa7,0xb7,0xb1,0x7d,0x28,0x24,0x46,0x79,0x77,0x3b,0xb0,0x69,0x35,0x5e, + 0x7c,0xbe,0x3b,0xc1,0xb9,0x58,0x2a,0x66,0xb9,0x38,0xb9,0x5b,0x3f,0x64,0x58,0xb3, + 0xb5,0x4d,0xbe,0x2c,0x45,0x37,0x26,0x40,0x26,0x52,0x63,0x49,0xbb,0xc0,0xc2,0x71, + 0x70,0xbd,0xc0,0x32,0x32,0x51,0xa3,0x59,0x59,0x3b,0x3f,0x33,0x75,0x71,0x22,0x61, + 0x45,0x6d,0x36,0x44,0x32,0x57,0xa3,0x5a,0xab,0x3b,0x6f,0x33,0x23,0x71,0x26,0x21, + 0x46,0x6d,0x36,0x62,0x32,0x5e,0xa3,0x5c,0x79,0x3b,0xb9,0x33,0x2f,0x71,0x28,0xb3, + 0x47,0x3d,0x36,0x76,0x32,0x62,0xa3,0x5d,0x79,0x3c,0x4b,0x33,0xab,0x71,0x2b,0x21, + 0x47,0x2d,0x36,0x2a,0x32,0x68,0xa3,0x5f,0x59,0x3c,0xa1,0x33,0xb8,0x71,0x2e,0x21, + 0x48,0x6d,0x36,0xb4,0x32,0x71,0xa3,0x61,0x69,0x3d,0x43,0x34,0x36,0x71,0xa4,0x21, + 0x49,0x6d,0x37,0x44,0x32,0x76,0xa3,0x62,0x79,0x3d,0x67,0x34,0x3f,0x71,0xa7,0x41, + 0x4a,0x45,0x37,0x58,0x32,0x7b,0x51,0x63,0x29,0x3d,0x2b,0x34,0x48,0x71,0xa9,0x61, + 0x4a,0x25,0x37,0x6e,0x32,0xa2,0xa3,0x65,0x39,0x3e,0x37,0x34,0x53,0x71,0xac,0x41, + 0x4b,0x5d,0x35,0x31,0x31,0x24,0xa3,0x66,0x49,0x3e,0x5f,0x34,0x5d,0x71,0xae,0x61, + 0x4b,0xb7,0x37,0x30,0x32,0x29,0x51,0x67,0x49,0x3e,0x7b,0x34,0x65,0x71,0xb0,0x61, + 0x4c,0x65,0x37,0xb2,0x32,0x2d,0x51,0x68,0x49,0x3e,0xb5,0x34,0x6e,0x71,0xb2,0x21, + 0x4c,0xbf,0x38,0x3a,0x32,0xa5,0xa3,0x69,0xbb,0x3f,0x53,0x34,0x7a,0x71,0xb5,0xb3, + 0x4d,0xaf,0x38,0x4e,0x32,0xaa,0xa3,0x6b,0x39,0x3f,0x77,0x34,0x23,0x71,0xb7,0xb3, + 0x48,0x7c,0x41,0x54,0x37,0x41,0x2b,0x24,0x79,0x40,0x52,0xb3,0xac,0x63,0x46,0x44, + 0x6c,0x7c,0x39,0x27,0xaa,0x26,0xa3,0xb8,0x36,0x77,0xa5,0x6e,0x5c,0x67,0x39,0x3e, + 0xc0,0xb5,0xb0,0x4a,0x47,0x36,0xa6,0x3c,0xba,0x47,0x72,0xa2,0x78,0x62,0x49,0x5f, + 0x5b,0x7b,0x6c,0x3d,0x2a,0xa9,0x2b,0xb5,0x66,0x76,0x6a,0x7d,0x26,0x60,0x68,0xad, + 0x56,0x5c,0x35,0x21,0xaa,0xba,0x4e,0x7d,0xaa,0x6c,0x4e,0xa7,0x77,0x6e,0x70,0xaf, + 0x5f,0x23,0x22,0x51,0x25,0x21,0x56,0x45,0x6a,0x31,0xb4,0x66,0x64,0x70,0x36,0x7e, + 0x75,0x4b,0x6a,0xaf,0x2a,0x39,0x51,0x3a,0x36,0x7b,0x2e,0x57,0x68,0x6b,0xb2,0x23, + 0xaf,0x23,0x29,0x71,0xa6,0x39,0xa3,0x60,0x77,0x38,0xa9,0x5c,0x27,0x67,0x29,0x7b, + 0x79,0x3d,0xa9,0x3b,0x22,0xb7,0x27,0x30,0x29,0x36,0x6a,0x63,0x44,0x7c,0x7b,0x7b, + 0x3f,0x5c,0x61,0xbb,0x2d,0xb2,0x29,0x7d,0x35,0xbc,0xc0,0x57,0xbe,0x71,0x72,0x23, + 0x3c,0x24,0x69,0x28,0x36,0xa7,0x49,0xa1,0x76,0xb8,0xbc,0xb4,0x66,0x63,0x4f,0xaf, + 0x70,0x5b,0xbf,0x61,0x2b,0x70,0xa7,0x54,0xbc,0xb4,0xc0,0x69,0xa2,0x62,0x21,0x21, + 0x38,0xad,0xb0,0x2d,0x26,0x56,0x56,0x5a,0x2a,0x5d,0x46,0x2c,0x59,0x61,0x69,0x3d, + 0xc0,0xb6,0x7c,0x6b,0x22,0x71,0xc1,0xc2,0xa3,0x50,0xc0,0xa6,0x25,0x71,0xb8,0x61, + 0x4e,0x65,0x38,0x60,0x32,0xaf,0x51,0x6c,0x49,0x3f,0xad,0x34,0x2c,0x71,0xba,0x41, + 0x4e,0xaf,0x38,0x6e,0x32,0xb2,0xa3,0x6d,0x39,0x40,0x37,0x34,0xa5,0x71,0xbc,0x41, + 0x4f,0x5d,0x38,0x7e,0x32,0xb7,0x51,0x6e,0x49,0x40,0x5f,0x34,0xb1,0x71,0xbe,0xb3, + 0x50,0x35,0x38,0xa6,0x32,0xbc,0x51,0x6f,0x29,0x40,0x2b,0x34,0xba,0x71,0xc1,0x41, + 0x50,0x7d,0x38,0xb8,0x32,0xc1,0xa3,0x70,0xbb,0x39,0x3f,0x35,0x38,0x72,0x33,0x41, + 0x51,0x7d,0x39,0x46,0x33,0x36,0xa3,0x72,0xab,0x41,0x6f,0x35,0x42,0x72,0x35,0xb3, + 0x52,0x5d,0x39,0x5e,0x33,0x3c,0xa3,0x74,0x39,0x41,0xa9,0x35,0x4b,0x72,0x38,0x61, + 0x53,0x35,0x39,0x7a,0x33,0x43,0xa3,0x75,0xab,0x42,0x4f,0x35,0x5a,0x72,0x3c,0x21, + 0x54,0x45,0x39,0xb8,0x33,0x4f,0x51,0x78,0x29,0x42,0xc1,0x35,0x31,0x31,0x41,0x41, + 0x55,0x3d,0x3a,0x36,0x33,0x52,0xa3,0x79,0x29,0x43,0x4b,0x35,0x79,0x72,0x43,0x21, + 0x55,0xa7,0x3a,0x4c,0x33,0x58,0x51,0x7b,0x39,0x43,0x77,0x35,0x23,0x72,0x45,0xb3, + 0x56,0x55,0x3a,0x5c,0x33,0x5c,0x51,0x7b,0xbb,0x43,0xa9,0x35,0x2c,0x72,0x48,0x41, + 0x56,0xaf,0x3a,0x6e,0x33,0x61,0x51,0x7d,0x49,0x44,0x3b,0x35,0xa6,0x72,0x4a,0x41, + 0x57,0x5d,0x3a,0x7e,0x33,0x64,0xa3,0x7e,0x49,0x48,0x4e,0x76,0x2f,0x67,0x47,0xb1, + 0x57,0xae,0x3b,0x2e,0x45,0x2f,0x30,0x73,0x69,0x3b,0x7e,0x2c,0x4d,0x59,0x72,0x3c, + 0xba,0x53,0xa9,0x25,0x23,0x3a,0x49,0x3f,0x66,0x7d,0x2a,0x7d,0x21,0x74,0x58,0xb1, + 0x23,0x24,0x40,0x7d,0xa4,0xba,0x30,0x50,0x59,0x30,0x4a,0x59,0x58,0x66,0x7a,0x64, + 0xae,0x54,0x60,0x5c,0x36,0x5b,0x26,0x3f,0xa8,0x36,0x42,0x29,0xad,0x5b,0xb0,0x42, + 0x23,0xa6,0x79,0x5b,0x2f,0x3b,0x29,0x37,0xaa,0x57,0x66,0x76,0x43,0x62,0x24,0x3f, + 0x5a,0x73,0xc0,0x37,0xb1,0x50,0x4c,0x51,0x37,0x5b,0xa4,0x30,0x29,0x6c,0x65,0x40, + 0x40,0xa6,0x2a,0x59,0xb8,0x43,0x45,0x2c,0x66,0x4b,0x7e,0x4e,0x4f,0x60,0x61,0x5d, + 0x23,0x25,0x34,0x5e,0x31,0x7e,0x29,0x21,0xa8,0x52,0x52,0x56,0x5f,0x69,0x54,0x62, + 0x3e,0x3d,0x68,0x73,0xaf,0x6d,0x46,0x4c,0x59,0x38,0xa8,0x60,0xb7,0x75,0x46,0x42, + 0x27,0x25,0x2a,0x4c,0x42,0x65,0x24,0xb6,0x67,0xa8,0x2e,0x5c,0x77,0x6c,0x3d,0x40, + 0x3b,0x74,0x3c,0xb5,0xb3,0x78,0x4c,0xb0,0x26,0xc2,0x63,0x3a,0x2b,0x65,0x50,0x40, + 0x40,0x6c,0xb1,0x22,0x32,0x36,0x2a,0xac,0xbc,0xb6,0x4e,0x78,0x61,0x6d,0x4c,0xad, + 0xb4,0x44,0xa3,0xb6,0x48,0x6d,0x29,0x26,0x67,0x45,0x52,0x55,0x66,0x6b,0x66,0xc2, + 0x70,0xb3,0x40,0xc1,0x28,0x66,0x51,0x7e,0x69,0x44,0x63,0x35,0xb0,0x72,0x4d,0x61, + 0x58,0x5d,0x3a,0xb0,0x33,0x6c,0xa3,0xa2,0x39,0x44,0xb1,0x35,0xbf,0x72,0x51,0x41, + 0x59,0x3d,0x3b,0x38,0x33,0x73,0xa3,0x21,0xab,0x45,0x4f,0x36,0x3a,0x72,0x54,0x41, + 0x5a,0x35,0x3b,0x58,0x33,0x7b,0x51,0x23,0x29,0x45,0x2b,0x36,0x4b,0x72,0x57,0xb3, + 0x5a,0xb7,0x3b,0x72,0x33,0x22,0x51,0x25,0x69,0x46,0x4f,0x36,0x63,0x72,0x5e,0x61, + 0x5c,0x65,0x3b,0xb8,0x33,0x2e,0xa3,0x28,0x79,0x46,0xc1,0x36,0x71,0x72,0x61,0x21, + 0x5d,0x4d,0x3c,0x3c,0x33,0xa6,0x51,0x2a,0x49,0x47,0x73,0x36,0x27,0x72,0x67,0x61, + 0x5e,0x25,0x3c,0x6c,0x33,0xb4,0x51,0x2d,0xbb,0x48,0x53,0x36,0xac,0x72,0x6b,0x21, + 0x5f,0xa7,0x3c,0x2c,0x33,0xba,0x51,0x2f,0x39,0x48,0x7b,0x36,0xb6,0x72,0x6e,0x61, + 0x60,0x65,0x3c,0xb4,0x33,0x31,0x31,0x50,0x59,0x48,0xb5,0x36,0xc0,0x72,0x70,0x21, + 0x60,0xbf,0x39,0x32,0x34,0x36,0x51,0xa4,0x69,0x49,0x67,0x37,0x41,0x72,0x75,0x21, + 0x62,0x4d,0x3d,0x5e,0x34,0x3d,0x51,0xa6,0x49,0x49,0xb9,0x37,0x4f,0x72,0x78,0xb3, + 0x63,0x35,0x3d,0x74,0x34,0x42,0x51,0xa7,0x69,0x4a,0x43,0x37,0x56,0x72,0x7a,0x21, + 0x63,0x7d,0x3d,0x26,0x34,0x48,0x51,0xa9,0x39,0x4a,0x7b,0x37,0x68,0x72,0xa1,0xb3, + 0x64,0xaf,0x3e,0x79,0x26,0x50,0x51,0x67,0x58,0x5e,0x6a,0xaf,0x6a,0x5a,0xba,0xa1, + 0x30,0x30,0xb0,0x51,0x72,0x5f,0x4c,0x42,0x6d,0x6c,0xb0,0x4f,0x21,0x54,0x2d,0x23, + 0xbc,0x27,0xa5,0x61,0x33,0x68,0xbb,0xa1,0x77,0x74,0xa9,0x3f,0xa7,0x23,0x2e,0xc2, + 0x77,0x45,0x77,0x61,0x5c,0x77,0xb3,0x5b,0x76,0x75,0x32,0x55,0xa1,0x66,0x46,0xc2, + 0x49,0x41,0x67,0x39,0xb6,0x60,0x6c,0x5b,0x50,0x64,0x24,0x3a,0x3c,0x58,0x28,0x3d, + 0x46,0x70,0xb4,0x2a,0x38,0x7d,0x42,0x7c,0x54,0x54,0xa4,0x3a,0x4c,0xb8,0xa6,0xb5, + 0x28,0xa5,0x2a,0x55,0x22,0x62,0x6f,0x23,0x7d,0x63,0x6b,0x3e,0x34,0x61,0xa4,0x4e, + 0x49,0x4e,0x7b,0x3a,0x25,0x5c,0x7e,0x3d,0xb3,0x4b,0x2e,0x2d,0xa9,0x64,0x4c,0x57, + 0x49,0xa9,0xb8,0x7d,0x42,0x69,0x38,0xaf,0xb6,0x24,0x5d,0x5d,0xab,0x3e,0x49,0x28, + 0x66,0x79,0x3e,0x4e,0x75,0x59,0x72,0x7e,0xc0,0x44,0x4f,0x4f,0xaf,0x6c,0x45,0x6a, + 0x67,0x73,0x4e,0x63,0xaa,0x66,0x2a,0xa1,0x21,0xb5,0xb7,0x52,0x32,0x59,0x58,0xbd, + 0xb9,0x5b,0x52,0xb5,0x72,0x6d,0xa7,0x64,0x58,0x6d,0x67,0x35,0x2d,0x60,0x44,0x71, + 0x45,0xbc,0x6e,0x59,0x22,0x5d,0x74,0x40,0x37,0x73,0x29,0x59,0xaf,0xa5,0x54,0xa3, + 0x66,0xbe,0xb8,0x2a,0xa6,0x67,0x5b,0xb4,0x6a,0x38,0xb2,0xbf,0x34,0xc2,0x2a,0xaa, + 0xab,0x4a,0xc1,0x37,0x72,0x72,0x21,0x21,0x65,0x55,0x3e,0x3c,0x34,0x55,0x51,0xac, + 0x59,0x4b,0x5f,0x37,0x7d,0x72,0x24,0x61,0x65,0xb7,0x3e,0x58,0x34,0x5b,0xa3,0xad, + 0xab,0x4b,0x2f,0x37,0x29,0x72,0x27,0x61,0x66,0xaf,0x3e,0x76,0x34,0x69,0x51,0xb1, + 0x49,0x4c,0x7b,0x37,0xb6,0x72,0x2e,0x41,0x68,0x5d,0x3e,0xb0,0x34,0x6d,0xa3,0xb2, + 0x59,0x4c,0xbd,0x37,0xc2,0x72,0xa3,0x41,0x69,0x3d,0x3f,0x36,0x34,0x72,0xa3,0xb3, + 0x79,0x4d,0x4f,0x38,0x39,0x72,0xa5,0x21,0x69,0x2d,0x3f,0x4a,0x34,0x77,0xa3,0xb4, + 0xbb,0x4d,0x73,0x38,0x42,0x72,0xa8,0x41,0x6a,0x5d,0x3f,0x5e,0x34,0x7c,0xa3,0xb6, + 0x49,0x4d,0xad,0x38,0x4e,0x72,0xaa,0xb3,0x6b,0x3d,0x3f,0x76,0x34,0x22,0xa3,0xb7, + 0x79,0x4e,0x47,0x38,0x57,0x72,0xac,0xb3,0x6b,0xa7,0x3f,0x2c,0x34,0x28,0x51,0xa3, + 0x31,0x36,0x6f,0x38,0x66,0x72,0xb1,0xb3,0x6c,0xb7,0x3f,0xc2,0x34,0xa4,0x51,0xbb, + 0x69,0x4f,0x43,0x38,0x77,0x72,0xb5,0x41,0x6d,0x7d,0x40,0x48,0x34,0xa9,0xa3,0xbc, + 0xab,0x4f,0x73,0x38,0x22,0x72,0xb7,0x21,0x6e,0x4d,0x40,0x5c,0x34,0xae,0xa3,0xbe, + 0x49,0x4f,0xad,0x38,0x2c,0x72,0xba,0x21,0x6f,0x45,0x40,0x78,0x34,0xb5,0x51,0xbf, + 0xab,0x50,0x4f,0x38,0xab,0x72,0xbd,0xb3,0x6f,0xa7,0x40,0x2c,0x34,0x69,0x49,0x38, + 0x27,0xae,0x26,0xa7,0xa9,0x62,0x54,0x23,0x7d,0x5d,0x22,0x37,0x24,0xa3,0xa6,0xb2, + 0xaa,0x2f,0xc0,0x4d,0x57,0x77,0x50,0x7a,0xb0,0x55,0xbd,0xa6,0x45,0x2a,0xa8,0x3a, + 0x26,0x43,0xb4,0x2f,0xa6,0x79,0x42,0x5e,0x24,0x55,0x61,0x53,0x29,0x57,0x48,0x55, + 0x37,0x2b,0x56,0x28,0x5b,0x64,0x27,0xad,0x76,0x55,0x37,0x49,0xc2,0x7d,0x27,0x37, + 0xbb,0x5a,0xac,0x70,0x53,0x62,0x42,0xb0,0x54,0x7d,0x26,0xa7,0xa8,0x73,0x49,0x3d, + 0x27,0x76,0x4e,0xb1,0x25,0x58,0x5b,0x3a,0xc1,0x6b,0xb9,0x62,0x48,0x27,0x4a,0x4c, + 0x38,0xc2,0x66,0x6a,0xa2,0x58,0xa6,0x60,0x51,0x6b,0x79,0x3a,0x34,0x3b,0x44,0x76, + 0xb9,0x35,0x3e,0xb8,0x57,0x7b,0x5e,0x5a,0xbe,0x43,0x6c,0x7d,0xbc,0x4b,0x4e,0x4d, + 0x76,0x46,0xa9,0x36,0x23,0x63,0x60,0x60,0x4e,0xad,0xb1,0x33,0xaf,0x5a,0x56,0xb2, + 0x69,0xbc,0x3a,0x29,0x6f,0x59,0x50,0xad,0x61,0x5c,0x6c,0x4d,0xa7,0x6b,0x4a,0x77, + 0x37,0xa9,0x46,0x71,0xba,0x7d,0x6e,0xb4,0x69,0x63,0xbb,0xbb,0xb7,0x6c,0x2f,0x2a, + 0x68,0x79,0xa4,0x4e,0x62,0x79,0x31,0xb1,0x75,0x44,0x64,0x65,0x27,0x56,0xa7,0x69, + 0x27,0xa7,0x5f,0x4b,0x6b,0x5a,0xb4,0x21,0xb2,0x44,0x4b,0x30,0x3f,0x55,0x48,0x3f, + 0x4a,0x22,0x34,0xba,0xc1,0x32,0xc2,0xa6,0x4f,0xb7,0x40,0x30,0x34,0xbc,0xa3,0xc1, + 0x79,0x50,0x27,0x38,0xb9,0x72,0xc0,0xb3,0x70,0x25,0x40,0xba,0xbe,0x72,0xc2,0x41, + 0x70,0xb7,0x40,0xc2,0x34,0x31,0x52,0x31,0x59,0x51,0x47,0x39,0x38,0x73,0x33,0x41, + 0x71,0x7d,0x41,0x46,0x35,0x39,0x52,0x33,0x59,0x51,0xa1,0x39,0x45,0x73,0x36,0x61, + 0x72,0x65,0x41,0x60,0x35,0x3d,0xa4,0x34,0x59,0x51,0xb1,0x39,0x4f,0x73,0x38,0xb3, + 0x73,0x35,0x41,0x74,0x35,0x42,0x52,0x35,0x69,0x52,0x57,0x39,0x5b,0x73,0x3b,0xb3, + 0x73,0xa7,0x41,0x2c,0x35,0x48,0x52,0x36,0xbb,0x52,0x73,0x39,0x63,0x73,0x3d,0xb3, + 0x74,0x55,0x41,0xae,0x35,0x4c,0x52,0x37,0xbb,0x52,0xa9,0x39,0x6b,0x73,0x3f,0xb3, + 0x74,0xb7,0x41,0xc2,0x35,0x51,0x52,0x39,0x49,0x53,0x3b,0x39,0x74,0x73,0x42,0x41, + 0x75,0x5d,0x42,0x40,0x35,0x55,0x52,0x3a,0x49,0x51,0x31,0x31,0x7b,0x73,0x43,0xb3, + 0x75,0xa7,0x42,0x4c,0x35,0x58,0x52,0x3a,0xbb,0x53,0x73,0x39,0x23,0x73,0x45,0xb3, + 0x76,0x55,0x42,0x5c,0x35,0x5c,0x52,0x3c,0x39,0x53,0xb9,0x39,0x2f,0x73,0x48,0xb3, + 0x77,0x35,0x42,0x76,0x35,0x63,0x52,0x3d,0x29,0x54,0x4b,0x39,0xaa,0x73,0x4b,0x41, + 0x77,0x25,0x42,0x2e,0x35,0x68,0xa4,0x3f,0x39,0x54,0x7b,0x39,0xb7,0x73,0x4e,0xb3, + 0x78,0x7d,0x42,0xba,0x35,0x6f,0x52,0x4b,0xa8,0x4a,0x2a,0x66,0x3c,0xa2,0xab,0xb4, + 0x2c,0x2b,0x7d,0x41,0x28,0x24,0xa9,0x39,0x67,0x6d,0xb1,0x54,0x7a,0x67,0x4b,0x3b, + 0x4d,0x24,0x28,0xa9,0xa5,0x27,0x4d,0x78,0x36,0x45,0xb8,0x55,0x6b,0x70,0xa8,0x3f, + 0x34,0x74,0x2a,0xab,0x24,0x56,0x58,0x27,0xb9,0x7c,0x6a,0xb4,0x71,0x7c,0x67,0x62, + 0x3b,0x54,0xbf,0xaf,0xb4,0xa4,0x2d,0x62,0x46,0x3f,0x7e,0xa2,0xa7,0x6b,0x6a,0x3c, + 0x32,0x74,0x47,0xb1,0x27,0x25,0xa5,0xb1,0xac,0x7c,0x72,0x76,0x26,0x70,0x6f,0x5d, + 0x3f,0xae,0x74,0x29,0x29,0xa3,0x24,0x28,0x55,0xb9,0x66,0x70,0xaa,0x7c,0xc1,0xc2, + 0x65,0xb8,0x43,0x47,0x34,0x5a,0x53,0x7c,0x4b,0x2c,0xbc,0x59,0xa5,0xa9,0x24,0x2d, + 0x27,0x59,0x6a,0x75,0x69,0x72,0xb5,0x61,0x77,0x4d,0x3f,0x4c,0x38,0x7b,0x4d,0x67, + 0xa9,0xb8,0xa8,0x68,0x23,0x70,0x56,0xad,0x4d,0x7c,0x40,0x59,0xaa,0x75,0xa3,0x38, + 0x49,0x49,0x27,0x41,0x43,0x59,0x2f,0x7c,0x69,0x43,0xa9,0xa6,0x40,0x6a,0x24,0x7c, + 0x27,0xa6,0x46,0x53,0x56,0x75,0x2c,0xb4,0xb5,0xb7,0x2a,0x46,0x36,0x60,0x4e,0x33, + 0x3a,0x60,0x73,0x5c,0x57,0x67,0xbc,0x61,0x54,0x3b,0xc1,0x55,0xa7,0x3a,0x4c,0x56, + 0x39,0x54,0x6b,0x34,0x74,0xa1,0x48,0x7c,0x36,0x2d,0x65,0x43,0xa1,0xa3,0xc1,0xc2, + 0xa3,0x50,0xbf,0x7b,0xc0,0x73,0x50,0x21,0x78,0xbf,0x43,0x32,0x35,0x71,0xa4,0x41, + 0x69,0x55,0x43,0x3a,0x36,0x73,0x52,0x21,0x79,0x25,0x43,0x4c,0x35,0x78,0xa4,0x43, + 0x39,0x55,0x77,0x3a,0x43,0x73,0x55,0xb3,0x7a,0x55,0x43,0x5c,0x35,0x7c,0x52,0x44, + 0x39,0x55,0xad,0x3a,0x4c,0x73,0x58,0x61,0x7a,0xb7,0x43,0x70,0x35,0x21,0x52,0x45, + 0x59,0x56,0x3f,0x3a,0x55,0x73,0x5a,0x61,0x7b,0x65,0x43,0xa2,0x35,0x25,0x52,0x46, + 0x49,0x56,0x5b,0x3a,0x5c,0x73,0x5c,0x41,0x7b,0xaf,0x43,0x2e,0x35,0x29,0x52,0x47, + 0x49,0x56,0xa1,0x3a,0x66,0x73,0x5e,0x21,0x7c,0x6d,0x43,0xba,0x35,0x2f,0x52,0x48, + 0xab,0x57,0x33,0x3a,0x73,0x73,0x61,0xb3,0x7d,0x5d,0x44,0x3e,0x35,0xa6,0xa4,0x4a, + 0x39,0x57,0x5f,0x3a,0x7d,0x73,0x64,0x21,0x7d,0xbf,0x44,0x56,0x35,0xad,0x52,0x4b, + 0x29,0x57,0x2f,0x39,0x31,0x31,0x67,0x41,0x7e,0x7d,0x44,0x66,0x35,0xb0,0xa4,0x4c, + 0x79,0x57,0xbd,0x3a,0xa4,0x73,0x69,0x21,0xa1,0x55,0x44,0xa2,0x35,0xb7,0x52,0x4e, + 0x49,0x58,0x5b,0x3a,0xae,0x73,0x6c,0x61,0xa1,0xb7,0x44,0x30,0x35,0xbb,0xa4,0x4f, + 0x59,0x58,0xa1,0x3a,0xb7,0x73,0x6e,0x61,0xa2,0x65,0x44,0xb2,0x35,0xbf,0x52,0x50, + 0x49,0x58,0xad,0x3a,0xbe,0xc0,0xa4,0x50,0x29,0x58,0xbd,0x39,0x31,0x73,0x71,0x61, + 0x21,0x45,0x45,0x6d,0xa2,0x62,0x2a,0x5b,0x47,0x77,0x7e,0x5b,0x58,0x58,0x36,0x3d, + 0x7a,0x25,0xac,0x27,0xa5,0xa4,0x47,0x7c,0xba,0x54,0x7b,0x36,0x5a,0x67,0xbe,0x7e, + 0x3f,0x6b,0x73,0x4e,0x34,0x32,0x4f,0x39,0x37,0x6a,0xa8,0x56,0x4a,0x67,0x5d,0x60, + 0xae,0x2b,0x72,0x7b,0x26,0x60,0x4d,0x5c,0x68,0x2b,0x7a,0x7e,0x7b,0x6a,0xbd,0xb3, + 0x55,0x7c,0x4e,0xa5,0x2d,0x41,0x45,0xa2,0x28,0x3c,0x5f,0x42,0xad,0x7b,0x26,0x63, + 0xaf,0x5c,0x42,0x74,0x3e,0x2a,0xa3,0x61,0x76,0x5b,0x26,0x29,0x78,0x62,0x3c,0xa2, + 0xbc,0x43,0xa3,0x79,0xa2,0x54,0x46,0x5a,0xbb,0xad,0x62,0x7d,0x3b,0x58,0x37,0x7c, + 0xa2,0x4d,0x53,0x75,0xab,0x58,0x49,0xa4,0x28,0x28,0x4e,0xa4,0x3e,0x72,0x6f,0x7b, + 0x60,0x65,0x2d,0x53,0x2d,0xb7,0x46,0x47,0x2a,0x37,0x66,0xbf,0xa5,0x5d,0x23,0x22, + 0x2d,0x6d,0x49,0x4a,0x33,0x37,0xa3,0x7d,0xab,0xad,0x42,0x79,0x35,0x5f,0x45,0x5d, + 0x49,0x7c,0x65,0xbf,0xbc,0x30,0x53,0xa9,0xba,0x72,0x7e,0xad,0xbe,0x5b,0x3f,0x3a, + 0xbd,0x2d,0x6c,0xa5,0xb0,0x41,0x47,0x29,0x28,0xb5,0xbc,0xb6,0x39,0x67,0x59,0x5c, + 0x68,0x63,0xab,0x65,0xb8,0x30,0x51,0x3a,0xa9,0x39,0x2e,0x2e,0xb3,0x5d,0x38,0xb1, + 0x23,0x5c,0x26,0xa7,0xb5,0x54,0x25,0xc1,0x70,0x30,0xbb,0x38,0xbf,0x7c,0x31,0xb3, + 0x21,0x55,0x45,0x3c,0x36,0x34,0x52,0x51,0xbb,0x59,0x53,0x3b,0x3a,0x73,0x73,0x21, + 0x21,0x2d,0x45,0x4c,0x36,0x38,0x52,0x52,0xbb,0x59,0x73,0x3b,0x43,0x73,0x76,0x41, + 0x22,0x5d,0x45,0x5e,0x36,0x3d,0x52,0x54,0x49,0x59,0xb1,0x3b,0x4d,0x73,0x78,0x61, + 0x22,0xb7,0x45,0x72,0x36,0x42,0x52,0x55,0x69,0x5a,0x43,0x3b,0x56,0x73,0x7a,0x21, + 0x23,0x6d,0x45,0x22,0x36,0x45,0xa4,0x56,0x59,0x5a,0x67,0x3b,0x5f,0x73,0x7c,0xb3, + 0x24,0x35,0x45,0xa6,0x36,0x4a,0x52,0x57,0x69,0x5a,0x23,0x3b,0x66,0x73,0x7e,0x21, + 0x24,0xb7,0x45,0xc2,0x36,0x51,0x52,0x59,0x49,0x5b,0x3b,0x3b,0x75,0x73,0x22,0x61, + 0x25,0x65,0x46,0x40,0x36,0x56,0xa4,0x5a,0x79,0x5b,0x67,0x3b,0xa1,0x73,0x24,0xb3, + 0x26,0x35,0x46,0x54,0x36,0x5a,0x52,0x5b,0x69,0x5b,0x23,0x3b,0x26,0x73,0x71,0x31, + 0x36,0x6d,0x46,0x62,0x36,0x5e,0x52,0x5c,0x69,0x5b,0xb5,0x3b,0x2e,0x73,0x28,0xb3, + 0x27,0x35,0x46,0x74,0x36,0x62,0x52,0x5d,0x69,0x5c,0x47,0x3b,0xa9,0x73,0x2a,0xb3, + 0x27,0x7d,0x46,0x26,0x36,0x66,0xa4,0x5e,0x79,0x5c,0x67,0x3b,0xb1,0x73,0x2c,0xb3, + 0x28,0x35,0x46,0xa6,0x36,0x6a,0xa4,0x5f,0x29,0x5c,0x2b,0x3b,0xba,0x73,0x2f,0x41, + 0x28,0xa7,0x46,0xbe,0x36,0x70,0xa4,0x61,0x39,0x5d,0x37,0x3b,0x32,0x6c,0xb9,0xb1, + 0xa9,0x7b,0x7c,0x6a,0x31,0x42,0x26,0xa4,0x36,0xb4,0x76,0x64,0xb1,0x6a,0x60,0x5d, + 0x28,0xbe,0x6c,0x60,0x3c,0x4d,0x48,0x3f,0x49,0x63,0x36,0x58,0xb6,0x6c,0xc2,0x7d, + 0x60,0x64,0x48,0x31,0xa1,0xb2,0xa9,0x41,0x39,0x65,0xbc,0x68,0x77,0x76,0xbf,0x7b, + 0x6f,0x44,0x2e,0xc1,0xa2,0x58,0x48,0x3f,0xac,0x27,0x5e,0x63,0x40,0x60,0xa1,0xa2, + 0x4f,0x2b,0xa3,0x5d,0xa1,0xc2,0x2a,0xb4,0x65,0xba,0x66,0x76,0x44,0x76,0x38,0x63, + 0x3c,0xbd,0x79,0x2f,0xa9,0xb1,0x46,0x5e,0x76,0x61,0x3b,0x52,0x26,0x58,0x54,0x5a, + 0xbf,0x25,0x76,0xa4,0x4a,0x38,0x2c,0x31,0x56,0xb5,0x3e,0x72,0x55,0x5e,0xb4,0x22, + 0x4e,0x5d,0x5d,0xaf,0xa8,0x56,0x29,0x23,0xac,0x7d,0x52,0x68,0xc2,0x5e,0xa5,0x3d, + 0x63,0xb5,0x28,0x5f,0x24,0x44,0x4e,0xa2,0x26,0x3a,0x63,0x3c,0x53,0x64,0xaf,0xb0, + 0x39,0x24,0x5f,0x55,0xa5,0x7a,0xa6,0xbd,0x76,0x49,0x7b,0x36,0x22,0x67,0xa6,0xb1, + 0x27,0x63,0x6a,0x4e,0x3e,0x69,0x47,0xb6,0xba,0x3e,0x6f,0x3c,0x42,0x64,0x67,0x5d, + 0xaa,0x44,0xbf,0x32,0x38,0xa9,0xaa,0x75,0x3a,0xbd,0xbc,0x69,0x60,0x64,0xbf,0x42, + 0xb4,0x3c,0x52,0x6f,0xaa,0x37,0x29,0x2b,0xaa,0x25,0x46,0x62,0x67,0x60,0x4d,0x3d, + 0x24,0x40,0xb2,0xbf,0x34,0xc2,0x74,0xb3,0x59,0x5d,0x3f,0x3c,0x37,0x73,0xa5,0x41, + 0x29,0x7d,0x47,0x46,0x36,0x76,0xa4,0x62,0x79,0x5d,0x67,0x3c,0x3f,0x73,0xa7,0x41, + 0x2a,0x3d,0x47,0x56,0x36,0x7a,0xa4,0x63,0x79,0x5d,0x27,0x3c,0x47,0x73,0xa8,0xb3, + 0x2a,0x75,0x47,0x64,0x36,0x7e,0x52,0x64,0x29,0x5d,0xbd,0x3c,0x50,0x73,0xab,0x41, + 0x2b,0x3d,0x47,0x76,0x36,0x22,0xa4,0x65,0x29,0x5e,0x4b,0x3c,0x58,0x73,0xad,0x61, + 0x2b,0x2d,0x47,0x2a,0x36,0x27,0xa4,0x67,0x49,0x5e,0x7b,0x3c,0x64,0x73,0xb0,0x41, + 0x2c,0x5d,0x47,0xb0,0x36,0x2d,0x52,0x68,0x59,0x5e,0xb1,0x3c,0x6d,0x73,0xb2,0x61, + 0x2c,0xb7,0x47,0xc2,0x36,0xa3,0x52,0x69,0x59,0x5f,0x3f,0x3c,0x75,0x73,0xb4,0x61, + 0x2d,0x65,0x48,0x40,0x36,0xa7,0x52,0x6a,0x59,0x5f,0x5f,0x3c,0x7d,0x73,0xb6,0x61, + 0x2d,0xb7,0x48,0x54,0x36,0xac,0x52,0x51,0x31,0x37,0x23,0x3c,0x27,0x73,0xb8,0xb3, + 0x2e,0x75,0x48,0x64,0x36,0xb0,0x52,0x6c,0x69,0x5f,0xb9,0x3c,0x2f,0x73,0xba,0xb3, + 0x2f,0x35,0x48,0x74,0x36,0xb4,0x52,0x6d,0x69,0x60,0x47,0x3c,0xa9,0x73,0xbc,0xb3, + 0x2f,0x75,0x48,0x26,0x36,0xb8,0xa4,0x6e,0x79,0x60,0x67,0x3c,0xb1,0x73,0xbe,0xb3, + 0x30,0x35,0x48,0xa6,0x36,0xbc,0x52,0x6f,0x69,0x60,0x23,0x3c,0xb8,0x73,0xc0,0x21, + 0x30,0x6d,0x48,0xb4,0x36,0x5b,0x29,0x37,0xb8,0x41,0x67,0x31,0x25,0x63,0x4d,0x42, + 0x33,0x7c,0x25,0x3b,0x2f,0x3a,0x2b,0x4f,0x77,0x41,0xb5,0x60,0x7d,0x5a,0xa2,0x5f, + 0x51,0x3d,0x61,0xab,0xaf,0x61,0x2e,0xa4,0xaa,0x22,0x6a,0x5a,0x5d,0x6c,0x2f,0x24, + 0x32,0xa7,0x3c,0xac,0x3c,0x5b,0x2f,0x33,0x77,0x6f,0x36,0xa4,0x60,0x63,0xa8,0x5d, + 0x74,0x63,0x29,0x6b,0xa3,0xa3,0x2f,0x70,0x36,0x49,0xb8,0x4d,0xbe,0x66,0xa4,0x21, + 0x40,0x23,0xb2,0x77,0x26,0xb0,0x26,0x78,0x55,0xbc,0xb4,0x4f,0xb5,0x7d,0xbf,0xae, + 0x28,0xb6,0x4d,0xb4,0x31,0x32,0x49,0x41,0x5a,0x71,0x37,0x52,0x3c,0x5e,0xb2,0x42, + 0x70,0x5d,0x5d,0x69,0xa7,0x5d,0x51,0x2c,0xa9,0x58,0xb8,0x5c,0xa2,0x72,0x4a,0x63, + 0x4e,0x6b,0x6d,0x71,0xc0,0x40,0xa7,0x44,0xba,0xaa,0x7e,0x51,0x22,0x5d,0x5c,0xb0, + 0xae,0xbd,0xb2,0x44,0x3c,0x72,0xa3,0x40,0x3a,0x3d,0xb5,0x3a,0x48,0x6e,0x30,0x61, + 0xab,0x2d,0x2b,0x50,0x47,0xb5,0x30,0x2b,0x6a,0x25,0x6a,0xb4,0x32,0x5f,0x46,0xb2, + 0x55,0x45,0x73,0xa2,0x47,0x60,0x2f,0x5c,0x46,0x2b,0xc0,0x77,0x3c,0x6e,0xb7,0x61, + 0x7b,0xae,0x51,0x3d,0x26,0x45,0x30,0xa5,0x38,0x52,0x3a,0xbd,0x32,0x7b,0x21,0x3d, + 0x55,0xa5,0xa6,0x5d,0xa1,0x72,0x27,0xb2,0x46,0x7b,0x24,0xba,0xc1,0x32,0xc2,0xb3, + 0x30,0x7d,0x48,0xb8,0x36,0xc1,0x52,0x70,0x29,0x60,0xbd,0x3b,0x31,0x74,0x31,0x61, + 0xa3,0x45,0x49,0x38,0x37,0x33,0x52,0x71,0xab,0x61,0x4f,0x3d,0x39,0x74,0x33,0x61, + 0xa3,0x25,0x49,0x48,0x37,0x37,0x52,0x72,0x29,0x61,0x6b,0x3d,0x40,0x74,0x35,0x41, + 0xa4,0x45,0x49,0x58,0x37,0x3b,0x52,0x73,0x29,0x61,0x2f,0x3d,0x49,0x74,0x37,0x61, + 0xa4,0x25,0x49,0x68,0x37,0x3f,0x52,0x74,0x29,0x61,0xbd,0x3d,0x50,0x74,0x39,0x41, + 0xa5,0x3d,0x49,0x76,0x37,0x42,0xa4,0x75,0x79,0x62,0x47,0x3d,0x57,0x74,0x3b,0x41, + 0xa5,0x25,0x49,0x28,0x37,0x47,0x52,0x76,0x29,0x62,0x6b,0x3d,0x60,0x74,0x3d,0x41, + 0xa6,0x3d,0x49,0xa8,0x37,0x4a,0xa4,0x77,0x79,0x62,0x27,0x3d,0x67,0x74,0x3e,0xb3, + 0xa6,0x7d,0x49,0xb8,0x37,0x4e,0xa4,0x78,0x29,0x62,0xbd,0x3d,0x70,0x74,0x41,0x41, + 0xa3,0x31,0x32,0x34,0x37,0x52,0x52,0x79,0x69,0x63,0x43,0x3d,0x76,0x74,0x42,0x21, + 0xa7,0x6d,0x4a,0x42,0x37,0x55,0xa4,0x7a,0x59,0x63,0x5f,0x3d,0x7d,0x74,0x45,0x21, + 0xa8,0x4d,0x4a,0x5c,0x37,0x5c,0x52,0x7b,0xbb,0x63,0xa5,0x3d,0x2a,0x74,0x47,0xb3, + 0xa8,0xa7,0x4a,0x6c,0x37,0x60,0xa4,0x7d,0x39,0x64,0x37,0x3d,0xa6,0x74,0x4a,0x41, + 0xa9,0x5d,0x4a,0x7e,0x37,0x64,0xa4,0x7e,0x39,0x64,0x57,0x3d,0xad,0x74,0x4c,0x5f, + 0x62,0xb6,0x3e,0x48,0x3f,0x38,0xa6,0x2a,0xab,0x37,0x23,0x36,0x5d,0x62,0x6d,0x3b, + 0x70,0x34,0x62,0x6e,0x42,0x46,0x47,0x51,0x47,0x34,0x72,0x29,0x7e,0x5c,0x23,0x7d, + 0x73,0x25,0x65,0x27,0xb9,0xb7,0x2c,0x7c,0x66,0x6d,0x32,0x26,0xb3,0x6b,0x2c,0x5e, + 0xb5,0xaf,0x61,0x42,0x3d,0x64,0x46,0xc0,0xb9,0x2d,0x7b,0x42,0x64,0x6d,0x59,0x7d, + 0x70,0x7b,0xa1,0x2b,0xb3,0x63,0x4c,0x3c,0x36,0x72,0x5a,0x79,0x33,0x5d,0x69,0x3e, + 0x3a,0x2d,0x35,0x51,0x26,0xae,0x50,0x34,0x36,0x36,0xad,0x4e,0x7d,0x67,0xaa,0xb4, + 0x2f,0x2c,0x73,0x4f,0xa6,0x7e,0x2c,0x6b,0x77,0xba,0x4a,0xbf,0x35,0x73,0x41,0xb0, + 0x31,0x4d,0x74,0x61,0xb0,0x6c,0x56,0x26,0x39,0x2b,0x2e,0x63,0xbc,0x6a,0x6a,0x41, + 0x28,0xb7,0x37,0xbb,0xb8,0x76,0x53,0x26,0xb9,0x73,0x22,0x55,0x53,0x78,0x35,0x63, + 0x2e,0x34,0x3f,0x62,0x49,0x53,0x54,0xa2,0x76,0x5b,0x7e,0x50,0xc2,0x64,0x54,0xad, + 0xb0,0x5c,0x33,0x5b,0xb0,0x52,0x25,0x7a,0x46,0xa4,0x56,0x64,0xbe,0xc0,0x2c,0x5e, + 0x66,0x72,0x72,0xad,0x4d,0x6b,0x2c,0x3d,0x32,0x55,0x3a,0x3e,0x32,0x39,0x29,0xaf, + 0x47,0x70,0x3b,0x4f,0x6b,0x6c,0xbf,0xb4,0x24,0x55,0x68,0x34,0x45,0x3c,0x48,0x21, + 0x26,0x4a,0x62,0x5a,0x74,0xc0,0xc2,0x71,0x70,0xbc,0x26,0x2c,0x37,0x68,0xa4,0xa1, + 0x39,0x64,0x7b,0x3d,0xb6,0x74,0x4e,0x41,0xaa,0x5d,0x4a,0xb0,0x37,0x6c,0xa4,0xa2, + 0x39,0x65,0x3f,0x3e,0x35,0x74,0x52,0x61,0xab,0x65,0x4b,0x40,0x37,0x75,0x52,0x22, + 0x49,0x65,0x6b,0x3e,0x40,0x74,0x55,0x41,0xac,0x3d,0x4b,0x56,0x37,0x7b,0x52,0x23, + 0xab,0x65,0x2f,0x3e,0x49,0x74,0x57,0x61,0xac,0x25,0x4b,0x68,0x37,0xa2,0x52,0x24, + 0xbb,0x66,0x33,0x3e,0x52,0x74,0x59,0x21,0xad,0x5d,0x4b,0x7e,0x37,0x26,0xa4,0x26, + 0x29,0x66,0x6b,0x3e,0x63,0x74,0x5d,0xb3,0xae,0x6d,0x4b,0xb4,0x37,0x2d,0xa4,0x28, + 0x69,0x66,0xb5,0x3e,0x6e,0x74,0x60,0x21,0xae,0xbf,0x4c,0x34,0x37,0xa4,0x52,0x29, + 0x69,0x67,0x47,0x3e,0x79,0x74,0x64,0x41,0xaf,0xaf,0x4c,0x56,0x37,0xac,0xa4,0x2b, + 0x29,0x67,0x2b,0x3e,0x28,0x74,0x67,0x21,0xb0,0xa7,0x49,0x31,0x31,0xb1,0xa4,0x2d, + 0x39,0x68,0x37,0x3e,0xa5,0x74,0x69,0xb3,0xb1,0x5d,0x4c,0x7e,0x37,0xb6,0xa4,0x2e, + 0x39,0x68,0x5b,0x3e,0xae,0x74,0x6c,0x41,0xb1,0xbf,0x4c,0xae,0x37,0xbe,0x52,0x2f, + 0xbb,0x68,0xad,0x3e,0xbe,0xc0,0xa4,0x30,0x79,0x68,0xb9,0x3e,0xc2,0x74,0x31,0x61, + 0xb3,0x55,0x4d,0x3c,0x38,0x34,0x52,0xa4,0x69,0x69,0x63,0x3f,0x3f,0x74,0x74,0xb3, + 0xb4,0x35,0x4d,0x54,0x38,0x3b,0x52,0xa5,0xab,0x6b,0x32,0x2a,0xba,0x60,0x48,0x3b, + 0x3b,0xad,0x6b,0x2b,0x2f,0x4e,0x49,0xab,0xbb,0x41,0xad,0x51,0x21,0x65,0x4c,0x23, + 0x4c,0x4c,0x2d,0x49,0x25,0xb1,0x56,0x3d,0x76,0xc2,0x46,0xb7,0xb9,0x65,0x42,0x5d, + 0x66,0x44,0xb2,0x6f,0xc1,0xb0,0x2e,0x5f,0xb8,0x35,0x26,0x75,0x65,0x5d,0x74,0xb5, + 0x40,0x73,0x78,0x37,0xbc,0x71,0x2f,0x30,0xa8,0x65,0x7a,0x6f,0x45,0x79,0x51,0x7e, + 0x27,0x33,0xb3,0x6f,0x28,0x39,0x46,0x3b,0x76,0x3b,0x66,0x2e,0xa5,0x5c,0x5b,0x3d, + 0x6a,0x4d,0xa4,0xc2,0x32,0x3b,0xa4,0xa8,0x59,0x79,0x33,0x51,0x4f,0x5b,0x4c,0xae, + 0x7d,0x35,0x38,0x5d,0xa5,0x5d,0x49,0x77,0x49,0x3a,0x27,0x6d,0x71,0x7c,0x4c,0x24, + 0x58,0xa7,0xab,0x2b,0xac,0x23,0x27,0x6b,0x67,0x42,0xbc,0x5b,0x47,0x62,0xb4,0xad, + 0x7e,0x7d,0x49,0xbb,0xb0,0x32,0x27,0x2d,0xaa,0x55,0xb5,0x41,0xad,0x66,0x76,0x7c, + 0x45,0xa7,0x61,0x2f,0x30,0x70,0x4c,0x26,0x48,0x4c,0xb9,0x61,0x69,0x58,0x6e,0xb1, + 0x39,0xa5,0xb1,0x5f,0xbb,0x4f,0x29,0xae,0x57,0x65,0x2a,0xb0,0x7c,0x61,0x57,0xae, + 0x65,0x7b,0xab,0x3f,0xa1,0x5b,0xa3,0x5e,0x57,0xa7,0x5e,0xaa,0x52,0x58,0x53,0x5d, + 0xb8,0x3c,0xc1,0x31,0x30,0xc0,0x4a,0x54,0x67,0x6f,0xa4,0x70,0x35,0x5d,0x71,0x70, + 0x70,0xb3,0x40,0xc2,0x36,0x3d,0xa4,0xa6,0x69,0x69,0xb9,0x3f,0x50,0x74,0x79,0x41, + 0xb5,0x55,0x4d,0x7e,0x38,0x44,0xa4,0xa8,0x39,0x6a,0x5b,0x3f,0x5c,0x74,0x7c,0x41, + 0xb5,0xaf,0x4d,0x30,0x38,0x49,0x52,0xa9,0x59,0x6a,0xa1,0x3f,0x66,0x74,0x7e,0x21, + 0xb6,0x75,0x4d,0xb6,0x38,0x4e,0x52,0xaa,0x79,0x6a,0xb9,0x3f,0x71,0x74,0x21,0x61, + 0xb7,0x45,0x4e,0x38,0x38,0x53,0x52,0xab,0x29,0x6b,0x4b,0x3f,0x7b,0x74,0x23,0xb3, + 0xb7,0xaf,0x4e,0x50,0x38,0x59,0x52,0xad,0x49,0x6b,0x7b,0x3f,0x25,0x74,0x26,0x61, + 0xb8,0x65,0x4e,0x62,0x38,0x5e,0x52,0xae,0x69,0x6b,0xb5,0x3f,0x2e,0x74,0x28,0x21, + 0xb8,0xbf,0x4e,0x74,0x38,0x62,0x52,0xaf,0xab,0x6c,0x4f,0x3f,0xab,0x74,0x2b,0x61, + 0xb9,0x25,0x4e,0x28,0x38,0x67,0x52,0xb0,0x29,0x6c,0x6f,0x3f,0xb4,0x74,0x2d,0x21, + 0xba,0x4d,0x4e,0xae,0x38,0x31,0x31,0x3f,0xbb,0x6c,0xa5,0x3f,0xbc,0x74,0x2f,0x21, + 0xba,0xbf,0x4f,0x32,0x38,0x71,0xa4,0xb3,0x79,0x6d,0x4b,0x40,0x38,0x74,0xa5,0x61, + 0xbb,0x25,0x4f,0x4a,0x38,0x78,0x52,0xb4,0xbb,0x6d,0x73,0x40,0x42,0x74,0xa7,0x21, + 0xbc,0x55,0x4f,0x5c,0x38,0x7c,0x52,0xb6,0x39,0x6d,0xa9,0x40,0x4b,0x74,0xa9,0xb3, + 0xbc,0xa7,0x4f,0x6c,0x38,0xa2,0x52,0xb7,0x39,0x6e,0x37,0x40,0x53,0x74,0xab,0xb3, + 0xbd,0x55,0x50,0x4b,0x2e,0x28,0x48,0xb1,0x46,0x50,0x4b,0x60,0x2e,0x78,0x22,0x5e, + 0x40,0x53,0x29,0x2f,0x26,0xb2,0x29,0x38,0x55,0xb5,0x66,0x30,0xb7,0x70,0x62,0xb3, + 0x51,0xb7,0x44,0x59,0x2a,0x40,0x24,0xa8,0x55,0xbc,0xbc,0x6a,0x5d,0x70,0x3b,0x7d, + 0xb4,0x25,0x46,0xa9,0x25,0x58,0x2e,0x69,0x69,0x35,0x3a,0x5b,0xa2,0x7e,0x24,0x5a, + 0xb5,0xae,0x69,0x58,0x3d,0x35,0x28,0x3f,0x37,0x3c,0x5e,0x57,0x50,0x6c,0x3b,0x5e, + 0xab,0x25,0x4b,0x3f,0xa8,0xc0,0xc1,0xb5,0x2c,0x7c,0xbb,0xb9,0x25,0x4a,0x2f,0x72, + 0x58,0xb2,0x6b,0x5c,0xa4,0x5b,0xb3,0x60,0xc1,0xb6,0x21,0x6b,0xa6,0x3c,0xa4,0xb7, + 0x47,0xaf,0xb8,0xb7,0x42,0x62,0x59,0x5d,0x27,0x6b,0xa2,0x73,0xa6,0x72,0x2c,0x4e, + 0x66,0xad,0xb4,0x5a,0x59,0x7b,0x44,0x3a,0xa9,0x3c,0x64,0x2a,0x3c,0x56,0x28,0x4d, + 0x37,0x5d,0xb5,0x36,0x58,0x65,0x40,0x7b,0x74,0x53,0x24,0x47,0xae,0x64,0x4b,0xb5, + 0x75,0xb5,0x3a,0x77,0x79,0x5a,0x78,0x21,0x51,0xad,0x6f,0x2d,0xa2,0x60,0x46,0xa4, + 0x57,0x48,0xbd,0x5d,0xa7,0x64,0x4b,0x5f,0x60,0xbd,0x7b,0x73,0x23,0xa2,0x29,0x4e, + 0xbb,0x29,0x22,0x7e,0x4a,0x69,0xa7,0x3d,0xba,0xbf,0x56,0x55,0xbb,0xc1,0x2e,0xb1, + 0x37,0x62,0xb0,0x5d,0x69,0x5b,0x39,0x63,0x28,0x28,0xb2,0xbf,0x34,0xc2,0x27,0xb7, + 0x29,0x6e,0x4b,0x40,0x58,0x74,0xad,0x61,0xbd,0x25,0x4f,0x2e,0x38,0x29,0x52,0xb9, + 0x49,0x6e,0x7b,0x40,0x65,0x74,0xb0,0x21,0xbe,0x6d,0x4f,0xb4,0x38,0x2d,0xa4,0xba, + 0x69,0x6e,0xb5,0x40,0x6f,0x74,0xb2,0xb3,0xbf,0x3d,0x50,0x36,0x38,0xa4,0xa4,0xbb, + 0x79,0x6f,0x47,0x40,0x78,0x74,0xb5,0x41,0xbf,0x7d,0x50,0x4a,0x38,0xa9,0xa4,0xbc, + 0xab,0x6f,0x6f,0x40,0x21,0x74,0xb8,0x41,0xc0,0x5d,0x50,0x5e,0x38,0xae,0xa4,0xbe, + 0x39,0x6f,0xa9,0x40,0x2b,0x74,0xba,0x41,0xc0,0xaf,0x50,0x6e,0x38,0xb2,0xa4,0xbf, + 0x49,0x70,0x3b,0x40,0xa6,0x74,0xbc,0x41,0xc1,0x65,0x50,0xa2,0x38,0xb7,0x52,0xc0, + 0x49,0x70,0x5f,0x40,0xaf,0x74,0xbe,0x61,0xc1,0xbf,0x50,0xa4,0x38,0xbb,0xa4,0xc1, + 0x59,0x70,0xa1,0x40,0xb7,0x74,0xc0,0x61,0xc2,0x65,0x50,0xb2,0x38,0xbf,0x52,0xa3, + 0x31,0x38,0xad,0x40,0xbe,0xc0,0xa4,0xc2,0x79,0x70,0xb9,0x40,0xc2,0x74,0x71,0x42, + 0x31,0x3d,0x51,0x36,0x39,0x33,0x53,0x31,0x29,0x71,0x4b,0x41,0x38,0x75,0x33,0x42, + 0x31,0x7d,0x51,0x48,0x39,0x37,0x53,0x32,0x29,0x71,0x6b,0x41,0x40,0x75,0x35,0x42, + 0x32,0x3d,0x51,0x56,0x39,0x3b,0x53,0x33,0xbb,0x71,0xa5,0x41,0x4a,0x75,0x37,0x22, + 0x32,0xa7,0x51,0x6c,0x39,0x40,0x53,0x34,0xbb,0x72,0x33,0x41,0x54,0x75,0x31,0x40, + 0x57,0xbe,0x31,0x49,0x2f,0x75,0x29,0x44,0x29,0x39,0x26,0x64,0x2d,0x61,0x52,0x3f, + 0x4f,0xbe,0x73,0x25,0xb1,0x59,0x4c,0x41,0x38,0x45,0x42,0x26,0x5e,0x75,0x3c,0x5c, + 0xa9,0x33,0x6b,0xa9,0x2b,0xa1,0x46,0x6d,0x6a,0x51,0x2e,0x2c,0xbe,0xc0,0x30,0x44, + 0x4a,0x61,0x6e,0x76,0x77,0x70,0x54,0xa1,0xba,0xb7,0x49,0x77,0x24,0x40,0x56,0xb5, + 0xab,0xbf,0x4e,0x7e,0xa4,0x5f,0x59,0x3a,0xc1,0xae,0x79,0x47,0xa1,0x24,0x45,0xa4, + 0xb8,0x79,0x7e,0x5a,0x31,0x62,0x7b,0x43,0x25,0x73,0x78,0x63,0xa1,0xa1,0x58,0x45, + 0x78,0xb8,0xa4,0x59,0x55,0x77,0x26,0x42,0x34,0x6d,0x3c,0xa8,0x46,0x78,0x4c,0x55, + 0xa8,0xc1,0x62,0x65,0x6f,0x64,0x4b,0x63,0xae,0x34,0x7d,0x2d,0xb6,0x30,0x25,0xb2, + 0x59,0x3d,0x47,0x64,0x52,0x70,0xad,0x7c,0x68,0x6d,0x2a,0x52,0x47,0x30,0x30,0x30, + 0x38,0x66,0x3a,0x57,0xb9,0x7b,0xa9,0x64,0x4c,0x3c,0xb0,0x3a,0x3a,0x5d,0x4c,0x7d, + 0x45,0xb9,0x22,0xc1,0xa8,0x6d,0xbc,0x22,0x70,0x4c,0x34,0x4b,0x25,0x26,0x24,0xa2, + 0x4a,0x78,0x2e,0x6b,0xa4,0x66,0x64,0xad,0x32,0x3b,0x22,0x74,0x3d,0x44,0xa4,0x3c, + 0x28,0x71,0x43,0x5f,0x7b,0x5a,0x6c,0x7b,0x7b,0x4b,0x29,0x32,0x46,0x75,0x4c,0x67, + 0x26,0x2f,0x4a,0x2b,0x24,0xc0,0xc2,0x71,0x70,0xa9,0x79,0x7a,0x39,0x43,0xa5,0x35, + 0xab,0x72,0x4f,0x41,0x59,0x75,0x3b,0x62,0x33,0x25,0x51,0x28,0x39,0x47,0x53,0x36, + 0x29,0x72,0x6b,0x41,0x60,0x75,0x3d,0x42,0x34,0x3d,0x51,0xaa,0x39,0x4b,0x53,0x37, + 0x29,0x72,0x2b,0x41,0x68,0x75,0x3f,0x42,0x34,0x25,0x51,0xba,0x39,0x4f,0xa5,0x38, + 0xab,0x72,0xc1,0x41,0x72,0x75,0x41,0x22,0x35,0x4d,0x52,0x3e,0x39,0x54,0xa5,0x3a, + 0x39,0x73,0x57,0x41,0x7b,0x75,0x43,0xb4,0x35,0xb7,0x52,0x50,0x39,0x59,0x53,0x3b, + 0x49,0x73,0x7b,0x41,0x24,0x75,0x46,0x62,0x36,0x65,0x52,0x62,0x39,0x5e,0x53,0x3c, + 0x69,0x73,0xb5,0x41,0x2e,0x75,0x48,0x22,0x36,0xbf,0x52,0x72,0x39,0x64,0x53,0x3d, + 0xbb,0x74,0x5b,0x41,0xb0,0x75,0x4c,0xb4,0x38,0x3d,0x52,0xaa,0x39,0x6b,0x53,0x3f, + 0x29,0x74,0x2b,0x41,0xbb,0x75,0x4f,0x62,0x38,0x25,0x51,0x31,0x31,0x6e,0xa5,0x40, + 0x79,0x75,0x33,0x42,0x34,0x75,0x52,0x22,0x39,0x6d,0x53,0x44,0x39,0x76,0x53,0x42, + 0x79,0x75,0x6b,0x42,0x40,0x75,0x55,0x42,0x3a,0x3d,0x53,0x58,0x39,0x7b,0x53,0x43, + 0x29,0x75,0x2f,0x42,0x49,0x75,0x57,0x62,0x3a,0x25,0x53,0x68,0x39,0xa1,0xa5,0x44, + 0xab,0x75,0xc1,0x42,0x51,0x75,0x59,0x62,0x3b,0x4d,0x53,0x7c,0x39,0x24,0x53,0x45, + 0xbb,0x76,0x53,0x42,0x5a,0x75,0x5b,0x22,0x31,0xbd,0xb4,0x6b,0x2c,0x41,0x2b,0x43, + 0xab,0x34,0xa4,0x5b,0x42,0x6e,0x23,0x3d,0x26,0x54,0x57,0x67,0xa1,0x54,0x2b,0xac, + 0xab,0x6d,0x5f,0x5f,0xa2,0x5a,0x78,0xaf,0x64,0x24,0x43,0x26,0x41,0xa1,0x4a,0x69, + 0x49,0x31,0x73,0x4a,0x4a,0x59,0xaf,0x3e,0x38,0x73,0xa2,0xb6,0x38,0xa7,0x49,0x69, + 0x77,0xaa,0xb2,0xb9,0xaf,0x42,0x54,0x3b,0x46,0xa8,0x5b,0x3c,0x60,0x72,0x34,0x43, + 0x23,0x4c,0x5f,0x68,0x40,0x29,0x4a,0x70,0x70,0x2b,0xc2,0x37,0x30,0xb3,0x24,0xab, + 0x29,0x71,0xc0,0x7d,0xa8,0x71,0x7b,0x5f,0x70,0x24,0x32,0xab,0x22,0x39,0x25,0x22, + 0x66,0x6c,0x3a,0x70,0x53,0x79,0x44,0x42,0x3a,0x45,0x76,0xb3,0x2f,0x58,0x2a,0xa7, + 0xb9,0x37,0x7e,0x63,0x75,0x59,0xc0,0x7b,0x50,0x75,0x31,0x41,0x24,0x6d,0x2c,0x49, + 0x7a,0x65,0x5a,0xa5,0x42,0x58,0xbe,0x7a,0xbc,0xb6,0xbf,0xbd,0xaa,0xa5,0x26,0x52, + 0x3a,0x5f,0x32,0xb6,0x47,0x75,0x69,0xb2,0xac,0xbd,0xa3,0x49,0xa5,0x31,0x56,0xae, + 0x59,0x61,0xa4,0x5d,0xbe,0x7d,0x55,0x3c,0xbe,0x75,0x60,0x3a,0x35,0x5c,0xa7,0x6c, + 0x46,0x50,0x66,0x7c,0x40,0x60,0x48,0x3f,0x27,0x54,0x32,0x2d,0xc0,0x70,0x27,0x2e, + 0x58,0xba,0x66,0xbf,0xac,0x78,0xac,0xad,0x2b,0x4b,0xb1,0x29,0xa3,0xa8,0x2a,0x61, + 0xa2,0x30,0xbb,0x38,0xc2,0x4e,0xae,0x42,0x3b,0xb7,0x53,0x30,0x39,0x29,0x53,0x47, + 0x59,0x76,0xa1,0x42,0x65,0x75,0x5e,0x62,0x3c,0x65,0x53,0xb4,0x39,0x2d,0xa5,0x48, + 0x59,0x76,0xb1,0x42,0x6e,0x75,0x60,0x22,0x3c,0xbf,0x54,0x32,0x39,0xa4,0xa5,0x49, + 0x79,0x77,0x4f,0x42,0x79,0x75,0x63,0x22,0x3d,0x2d,0x54,0x4a,0x39,0xa9,0xa5,0x4a, + 0xbb,0x77,0x73,0x42,0x22,0x75,0x65,0xb4,0x3e,0x65,0x54,0x60,0x39,0xb0,0x53,0x4c, + 0x69,0x77,0xb5,0x42,0x2e,0x75,0x68,0x22,0x3f,0x35,0x54,0x74,0x39,0xb6,0x53,0x4d, + 0xbb,0x78,0x57,0x42,0xad,0x75,0x6b,0xb4,0x3f,0xa7,0x54,0x2c,0x39,0xba,0x53,0x4e, + 0xbb,0x78,0x7b,0x42,0xb8,0x75,0x6e,0x22,0x40,0x6d,0x54,0xb8,0x39,0xc0,0xc1,0xb4, + 0x40,0xaf,0x54,0xc2,0x39,0x31,0x53,0x51,0x49,0x79,0x3f,0x43,0x35,0x75,0x72,0x62, + 0x41,0x65,0x55,0x40,0x3a,0x35,0x53,0x51,0x31,0x31,0x57,0x43,0x3c,0x75,0x74,0x42, + 0x41,0xaf,0x55,0x4e,0x3a,0x38,0xa5,0x53,0x49,0x79,0x23,0x43,0x46,0x75,0x76,0x22, + 0x42,0x6d,0x55,0x62,0x3a,0x3f,0x53,0x54,0x29,0x79,0xbd,0x43,0x50,0x75,0x79,0x42, + 0x43,0x45,0x55,0x78,0x3a,0x43,0x53,0x55,0xab,0x7a,0x4f,0x43,0x59,0x75,0x7b,0x62, + 0x43,0xa7,0x55,0x2c,0x3a,0x48,0x53,0x56,0xbb,0x7a,0x77,0x43,0x63,0x75,0x7d,0xb4, + 0x44,0x5d,0x55,0xb2,0x3a,0x35,0xa7,0x3d,0x68,0x62,0x56,0xb2,0x2b,0x70,0x4e,0x43, + 0xbc,0x2d,0x46,0x7d,0x2c,0x6b,0x4f,0x2e,0x5a,0x63,0x33,0x42,0x7c,0x5a,0x54,0xb1, + 0x4b,0x23,0xc2,0x29,0xa8,0xb4,0x53,0xc2,0x70,0x2b,0xb0,0x30,0x4b,0xb3,0x28,0x62, + 0x47,0x2b,0xb0,0x2a,0x5e,0x76,0xae,0xb4,0x61,0x25,0x74,0x3c,0x40,0x76,0x25,0xba, + 0x77,0x42,0x4b,0x6d,0x5e,0xa2,0x41,0x3b,0x73,0x2b,0x6b,0xbe,0x33,0x5d,0x2d,0x24, + 0x79,0x61,0x2a,0x6b,0x2a,0x75,0x5c,0xb0,0x2d,0x5d,0x2c,0x53,0x25,0x7e,0x44,0x27, + 0xab,0x29,0x56,0xa6,0x6e,0x5b,0x33,0x63,0xb0,0xbe,0x74,0xb5,0xb0,0xab,0x4e,0x75, + 0x25,0xb3,0x22,0xb3,0x43,0x74,0xad,0x5c,0xa2,0x63,0xbb,0x32,0x3b,0xa1,0x57,0x32, + 0xac,0x65,0x6a,0xa4,0x70,0x67,0x42,0x3c,0x4b,0x7c,0x3d,0xbb,0xba,0x57,0xa5,0x33, + 0x77,0xbe,0xa1,0x35,0x61,0x5d,0x66,0x5f,0x49,0xa5,0x7d,0x65,0xbb,0xa3,0xa8,0x71, + 0x46,0x5c,0x4a,0x6f,0x61,0x69,0xb0,0x3c,0x62,0x25,0x63,0x4a,0x4b,0x72,0x2b,0xa8, + 0xa8,0x7a,0x6f,0x6e,0xaa,0x6d,0x2b,0x3d,0xb9,0xa6,0x3a,0x2f,0xa2,0x21,0x2e,0x62, + 0x58,0xbb,0x5e,0x2b,0x64,0x7c,0x3a,0xb0,0xa2,0x33,0x6c,0x55,0xb8,0x6e,0x25,0x57, + 0xb9,0x72,0xbc,0x30,0x31,0x79,0x4d,0x41,0x4a,0x63,0xa8,0xb0,0xbe,0xc2,0x31,0xc2, + 0x7c,0x22,0xa5,0x43,0x6a,0x75,0xa1,0x22,0x44,0x2d,0x55,0xbc,0x3a,0x4f,0xa5,0x58, + 0xab,0x7a,0xc1,0x43,0x71,0x75,0x21,0x22,0x45,0x4d,0x56,0x3c,0x3a,0x54,0x53,0x59, + 0xbb,0x7b,0x53,0x43,0x7a,0x75,0x23,0x22,0x45,0x2d,0x56,0x4a,0x3a,0x57,0xa5,0x5a, + 0xab,0x7b,0x6f,0x43,0x21,0x75,0x25,0x62,0x46,0x45,0x56,0x58,0x3a,0x5b,0x53,0x5b, + 0x29,0x7b,0x2b,0x43,0x28,0x75,0x27,0x42,0x46,0x7d,0x56,0x66,0x3a,0x5e,0xa5,0x5c, + 0x79,0x7b,0xb9,0x43,0xa3,0x75,0x29,0x62,0x47,0x45,0x56,0x78,0x3a,0x63,0x53,0x5d, + 0x29,0x7c,0x4f,0x43,0xab,0x75,0x2b,0x62,0x47,0x25,0x56,0x28,0x3a,0x67,0x53,0x5e, + 0x29,0x7c,0x6b,0x43,0xb2,0x75,0x2d,0x42,0x48,0x3d,0x56,0xa8,0x3a,0x6a,0xa5,0x5f, + 0x79,0x7c,0x27,0x43,0xb9,0x75,0x2e,0xb4,0x48,0x75,0x56,0xb6,0x3a,0x6e,0x53,0x60, + 0x79,0x79,0x31,0x31,0xc0,0x75,0x30,0x22,0x49,0x35,0x57,0x36,0x3a,0x73,0x53,0x61, + 0x29,0x7d,0x4f,0x44,0x39,0x75,0xa5,0x62,0x49,0x25,0x57,0x48,0x3a,0x77,0x53,0x62, + 0x29,0x7d,0x6b,0x44,0x40,0x75,0xa7,0x42,0x4a,0x3d,0x57,0x56,0x3a,0x7a,0xa5,0x63, + 0x79,0x7d,0x27,0x44,0x47,0x75,0xa8,0xb4,0x4a,0x75,0x57,0x64,0x3a,0x7e,0x53,0x64, + 0x69,0x7d,0xb5,0x44,0x4e,0x75,0xaa,0x22,0x4a,0xbf,0x57,0x72,0x3a,0x21,0xa5,0x59, + 0xb9,0x52,0x4e,0x69,0xa8,0x79,0x55,0x60,0x53,0x4d,0x64,0x65,0x2a,0x27,0x46,0x31, + 0x39,0x44,0x6f,0x38,0x32,0x75,0x71,0x41,0x34,0x34,0x56,0x4d,0x27,0x4c,0x51,0x37, + 0xba,0x47,0x6b,0x54,0x67,0x59,0x28,0xac,0xaa,0x5d,0xa5,0x5d,0xa6,0x3e,0x44,0x2f, + 0xa8,0x50,0x7e,0x7d,0x7c,0x71,0x78,0x3c,0x4c,0x44,0x65,0x31,0xa1,0xbf,0x27,0x38, + 0x66,0x4f,0x2a,0x78,0xb4,0x7b,0x58,0x5a,0xb3,0x23,0x6e,0x78,0x39,0x79,0x57,0x37, + 0xb8,0x7b,0x2f,0x52,0xbe,0xc0,0x2f,0x6e,0x55,0xba,0x73,0x32,0x42,0x6b,0xa3,0x7e, + 0x7a,0xa5,0xb2,0x21,0x2a,0x5f,0x28,0xa3,0x27,0x7d,0x37,0x3d,0x4b,0x59,0x6d,0x7c, + 0x26,0x7b,0x6c,0x77,0xba,0xb5,0x24,0xa2,0x59,0x45,0x76,0x75,0x44,0x64,0x55,0x63, + 0x38,0x7b,0xb5,0xc1,0xa1,0x6d,0x28,0xbb,0xab,0x3a,0xa5,0x52,0x35,0x71,0x5b,0xb1, + 0x2b,0x63,0x6c,0x5a,0x39,0x38,0x29,0x69,0x27,0x2f,0x4a,0x6f,0x7a,0x58,0x63,0xa1, + 0xad,0x44,0x6c,0x78,0x3c,0x28,0x53,0xa4,0x59,0xa9,0x77,0x47,0x33,0x60,0xc2,0x40, + 0xbf,0xa6,0xc2,0x4d,0xc1,0x4b,0xa3,0xb0,0x69,0x50,0x32,0x5e,0x68,0x66,0xbf,0xb5, + 0xb6,0x55,0x2c,0xba,0xbe,0x5d,0x78,0xad,0xa2,0x65,0x24,0x27,0xb0,0xa5,0x27,0xb0, + 0xac,0x7a,0xa8,0x69,0x46,0x60,0xa7,0x43,0xb2,0x30,0xbb,0x38,0xc2,0x7d,0xa5,0x65, + 0x69,0x7e,0x43,0x44,0x56,0x75,0xac,0x22,0x4b,0x6d,0x57,0x22,0x3a,0x25,0xa5,0x66, + 0x59,0x7e,0x5f,0x44,0x5d,0x75,0xae,0x62,0x4b,0xb7,0x57,0x30,0x3a,0x29,0x53,0x67, + 0x49,0x7e,0x7b,0x44,0x64,0x75,0xb0,0x42,0x4c,0x5d,0x57,0xb0,0x3a,0x2c,0xa5,0x68, + 0x39,0x7e,0xa9,0x44,0x6b,0x75,0xb1,0xb4,0x4c,0xa7,0x57,0xbe,0x3a,0x30,0x53,0x68, + 0xbb,0xa1,0x33,0x44,0x74,0x75,0xb6,0x62,0x4e,0x4d,0x58,0x5a,0x3a,0xad,0xa5,0x6b, + 0xbb,0xa1,0xa5,0x44,0x2a,0x75,0xb9,0xb4,0x4e,0xaf,0x58,0x70,0x3a,0xb3,0x53,0x6d, + 0x49,0xa2,0x3b,0x44,0xa7,0x75,0xbc,0xb4,0x4f,0x75,0x58,0x24,0x3a,0xb8,0x53,0x6e, + 0x79,0xa2,0x67,0x44,0xb1,0x75,0xbf,0x42,0x50,0x3d,0x58,0xa8,0x3a,0xbd,0x53,0x6f, + 0x29,0xa2,0x2b,0x44,0xba,0x75,0xc1,0x42,0x50,0x7d,0x58,0xb8,0x3a,0x31,0x31,0x50, + 0x70,0x2d,0x58,0xbc,0x3a,0xc1,0xa5,0x70,0xab,0xa2,0xc1,0x43,0x32,0x76,0x31,0x22, + 0x51,0x4d,0x59,0x3a,0x3b,0x33,0xa5,0x71,0xab,0x21,0x53,0x45,0x3a,0x76,0x33,0x22, + 0x51,0x2d,0x59,0x4a,0x3b,0x37,0xa5,0x72,0xab,0x21,0x6f,0x45,0x41,0x76,0x35,0x62, + 0x52,0x45,0x59,0x58,0x3b,0x3b,0x53,0x73,0x29,0x21,0x2b,0x45,0x48,0x76,0x37,0x42, + 0x52,0x7d,0x59,0x66,0x3b,0x3e,0xa5,0x74,0x79,0x21,0xb9,0x45,0xb3,0x5a,0xbf,0x61, + 0x54,0x3c,0x5a,0xab,0x2b,0x69,0x58,0x23,0x76,0xb4,0x52,0xc2,0x6a,0x72,0x7a,0x41, + 0x73,0x5d,0x42,0xa2,0x34,0x54,0xa4,0xbc,0xab,0xbe,0x3b,0x4c,0x79,0x6c,0x4d,0x5c, + 0xbc,0x65,0xa4,0x29,0xbb,0x41,0x4a,0x2c,0xb8,0x58,0x46,0x75,0xa6,0x58,0xb3,0xb3, + 0x4d,0x74,0x27,0xb3,0x2f,0xa9,0xa8,0x72,0x59,0xba,0xa9,0x3e,0x40,0x5b,0x6d,0xb0, + 0x79,0xa6,0x65,0xb3,0xaf,0x70,0x29,0x49,0xb8,0x42,0x52,0xad,0xc0,0x60,0x37,0x3a, + 0xbd,0x34,0x34,0xa1,0x30,0x43,0x48,0x37,0x48,0x5e,0x6b,0x52,0x71,0x7b,0x5f,0x5f, + 0x5c,0x7c,0x61,0xb3,0xb1,0x55,0xa7,0x52,0x47,0x6f,0x5e,0x58,0xb6,0x5a,0x25,0x5a, + 0xbf,0x7d,0x78,0xa6,0x3c,0xa7,0x45,0xb2,0x76,0xb9,0x3b,0x50,0xa7,0x67,0xa6,0x7a, + 0xaf,0x44,0x2b,0x3d,0xac,0x60,0x52,0x74,0x57,0x39,0x4b,0x35,0x2a,0x58,0xba,0x7a, + 0xb6,0xb7,0x72,0xbc,0x4d,0x35,0x29,0x54,0x27,0xb3,0x22,0x2e,0x36,0x7c,0x53,0x3a, + 0xa6,0x3b,0xae,0x22,0x47,0x38,0x44,0xa2,0xb8,0xa8,0xa8,0xb6,0x38,0x5e,0xbe,0x62, + 0x6c,0xae,0xc1,0x43,0xb6,0xb2,0x26,0xb4,0x69,0x47,0x37,0x51,0x32,0x5b,0x42,0xb5, + 0x3c,0x2b,0x28,0x25,0x2d,0x21,0x28,0xa4,0x37,0x3a,0x7a,0x28,0xb4,0x6a,0x5d,0x21, + 0x39,0x7d,0x5c,0xba,0xb8,0x32,0xc2,0xa3,0x42,0xb7,0x59,0x70,0x3b,0x41,0x53,0x75, + 0x49,0x22,0x3b,0x45,0x54,0x76,0x3a,0x42,0x53,0x5d,0x59,0x7e,0x3b,0x44,0xa5,0x76, + 0x39,0x22,0x57,0x45,0x5b,0x76,0x3b,0xb4,0x53,0xa7,0x59,0x2c,0x3b,0x48,0x53,0x76, + 0xbb,0x22,0x73,0x45,0x62,0x76,0x3d,0x22,0x54,0x4d,0x59,0xac,0x3b,0x4b,0xa5,0x77, + 0xab,0x22,0x2f,0x45,0x69,0x76,0x3f,0x62,0x54,0x25,0x59,0xba,0x3b,0x4f,0x53,0x78, + 0x29,0x22,0xc1,0x45,0x71,0x76,0x41,0x62,0x55,0x45,0x5a,0x38,0x3b,0x53,0x53,0x79, + 0x29,0x23,0x4b,0x45,0x78,0x76,0x43,0x62,0x55,0x25,0x5a,0x48,0x3b,0x57,0x53,0x7a, + 0x29,0x23,0x6b,0x45,0xa2,0x76,0x45,0x42,0x56,0x3d,0x5a,0x56,0x3b,0x5a,0xa5,0x7b, + 0x79,0x23,0x27,0x45,0x27,0x76,0x46,0xb4,0x56,0x75,0x5a,0x64,0x3b,0x5e,0x53,0x7c, + 0x69,0x23,0xb5,0x45,0x2e,0x76,0x48,0x22,0x51,0x31,0x32,0x70,0x3b,0x61,0x53,0x7d, + 0x49,0x24,0x3b,0x45,0xa6,0x76,0x4a,0x42,0x57,0x5d,0x5a,0x7e,0x3b,0x64,0xa5,0x7e, + 0x39,0x24,0x57,0x45,0xad,0x76,0x4b,0xb4,0x57,0xa7,0x5a,0x2c,0x3b,0x68,0x53,0x7e, + 0xbb,0x24,0x73,0x45,0xb4,0x76,0x4d,0x22,0x58,0x4d,0x5a,0xac,0x3b,0x6b,0xa5,0xa1, + 0xab,0x24,0x2f,0x45,0xbb,0x76,0x4f,0x22,0x58,0x2d,0x5a,0xbc,0x3b,0x6f,0xa5,0xa2, + 0xab,0x24,0xc1,0x46,0x31,0x76,0x4e,0x3e,0x2e,0x4b,0xb2,0x5c,0x39,0x73,0x57,0x3e, + 0x69,0xa6,0x67,0x65,0x64,0xa2,0x33,0x7e,0xad,0x53,0x76,0x37,0x22,0x22,0x26,0xb3, + 0x49,0x75,0xc0,0x58,0xb7,0x62,0xa8,0x62,0xc1,0xad,0x2a,0x61,0x25,0x34,0x46,0xaa, + 0xba,0x4d,0x72,0x2d,0x49,0x70,0xba,0x42,0xc0,0x3d,0x39,0xc1,0xa4,0x45,0x49,0x3d, + 0x5a,0x68,0x72,0x7e,0x57,0x70,0x53,0x22,0x2d,0x4d,0x67,0x7c,0x45,0x2a,0x28,0x45, + 0x78,0xa3,0x52,0xa2,0x57,0x61,0x32,0x63,0xa4,0x75,0x33,0x53,0xa1,0xb6,0xa7,0x31, + 0x36,0x4c,0x53,0x5d,0x72,0x59,0xb7,0x42,0xba,0x55,0x46,0x6c,0x42,0x5b,0x2a,0x2f, + 0x2a,0x6b,0x26,0x67,0x4e,0x5a,0xa1,0x40,0x35,0x44,0x4d,0xbd,0xab,0xa7,0x26,0x40, + 0xaa,0x36,0x72,0x67,0xc0,0x78,0xa6,0x5b,0x43,0x73,0x2f,0xa5,0x25,0x3a,0x4a,0x61, + 0x57,0x63,0xbd,0x4b,0x74,0x77,0x74,0xb3,0x47,0xa7,0x42,0x2c,0x41,0xb2,0x30,0x50, + 0xb8,0x40,0xb2,0xba,0x36,0x22,0x2a,0xc0,0x47,0x5e,0x36,0x30,0x55,0x74,0x51,0x62, + 0xa9,0x23,0x29,0x72,0x41,0x72,0x4e,0xa1,0xaa,0x38,0x46,0xa5,0x54,0x77,0xbd,0x5d, + 0x52,0x7b,0x7c,0xbd,0xaf,0x4f,0x54,0x52,0xa9,0x35,0xbc,0x62,0x3f,0x61,0xc2,0x7d, + 0xa9,0x35,0x66,0x4d,0xa5,0x2a,0x26,0x55,0x67,0xb4,0x66,0xa1,0xaa,0x78,0xc1,0xc1, + 0x21,0x50,0xbf,0x34,0x32,0x76,0x51,0x22,0x59,0x4d,0x5b,0x3a,0x3b,0x73,0xa5,0x21, + 0xab,0x25,0x4f,0x46,0x39,0x76,0x53,0xb4,0x59,0xa7,0x5b,0x4c,0x3b,0x78,0x53,0x22, + 0xbb,0x25,0x73,0x46,0x42,0x76,0x55,0x22,0x5a,0x55,0x5b,0x5c,0x3b,0x7c,0x53,0x23, + 0xbb,0x25,0xa5,0x46,0x4a,0x76,0x57,0x22,0x5a,0x2d,0x5b,0x6a,0x3b,0xa1,0xa5,0x24, + 0xab,0x25,0xc1,0x46,0x51,0x76,0x59,0x62,0x5b,0x45,0x5b,0x78,0x3b,0x23,0x53,0x25, + 0x29,0x26,0x4b,0x46,0x58,0x76,0x5b,0x42,0x5b,0x7d,0x5b,0x26,0x3b,0x26,0xa5,0x26, + 0x79,0x26,0x67,0x46,0x5f,0x76,0x5c,0xb4,0x5c,0x35,0x5b,0xa6,0x3b,0x2a,0x53,0x27, + 0x69,0x26,0x23,0x46,0x66,0x76,0x5e,0x22,0x5c,0x6d,0x5b,0xb4,0x3b,0x2d,0xa5,0x28, + 0x59,0x26,0xb1,0x46,0x6d,0x76,0x60,0x62,0x5c,0xb7,0x5b,0xc2,0x3b,0xa3,0x53,0x29, + 0x49,0x27,0x3b,0x45,0x31,0x31,0x61,0xb4,0x5d,0x55,0x5c,0x3c,0x3b,0xa6,0x53,0x29, + 0xbb,0x27,0x53,0x46,0x7a,0x76,0x63,0x22,0x5d,0x2d,0x5c,0x4a,0x3b,0xa9,0xa5,0x2a, + 0xab,0x27,0x6f,0x46,0x21,0x76,0x65,0x62,0x5e,0x45,0x5c,0x58,0x3b,0xad,0x53,0x2b, + 0x29,0x27,0x2b,0x46,0x28,0x76,0x67,0x42,0x5e,0x7d,0x5c,0x66,0x3b,0xb0,0xa5,0x2c, + 0x79,0x27,0xb9,0x46,0x2f,0x76,0x68,0xb4,0x5f,0x35,0x5c,0x74,0x3b,0xb4,0x53,0x2d, + 0x69,0x28,0x37,0x5a,0xbb,0x7b,0x7b,0x3f,0xb3,0x5c,0x53,0x21,0xac,0x76,0x26,0x3a, + 0x25,0xb8,0xa4,0xa4,0x79,0x76,0x27,0x3d,0x79,0x2c,0x47,0x3b,0x2c,0x73,0x4f,0x78, + 0x56,0x38,0x52,0x68,0x6c,0x6c,0xbb,0x5e,0x68,0x7d,0x5b,0x61,0xbf,0x30,0x4c,0x4a, + 0xba,0x66,0x56,0x7c,0x48,0x78,0x7c,0x5c,0x26,0x5b,0xb3,0xb4,0x37,0x35,0x4b,0x3d, + 0x36,0x49,0xa4,0x76,0x2a,0x6e,0x47,0xb0,0xb2,0xae,0xbb,0x6f,0xad,0xb3,0x4f,0xa1, + 0x36,0xbc,0x7e,0x2f,0x51,0x60,0xa6,0x3d,0x6b,0x74,0x66,0x5d,0xaa,0x35,0x44,0x73, + 0x36,0xb4,0x4b,0x4c,0x28,0x58,0x61,0x41,0x34,0x54,0x2b,0x6a,0x47,0xb0,0x29,0x76, + 0x27,0x64,0xbc,0x76,0x6d,0x67,0x4e,0x62,0x27,0x6c,0x76,0x23,0xc2,0x54,0x45,0x61, + 0xbb,0x38,0x62,0x57,0xb1,0x79,0x57,0x3d,0x60,0x43,0x24,0xa4,0x37,0x7d,0xa6,0xa3, + 0x29,0x31,0x2f,0x5b,0x48,0x73,0xb9,0x62,0xb8,0x7c,0x68,0x4b,0xb6,0xa2,0x2a,0x54, + 0xba,0x69,0x42,0xad,0x58,0x6d,0x6f,0xc2,0x69,0x39,0xbd,0x4c,0x39,0x7b,0x5a,0x7a, + 0xbc,0x5c,0x4f,0xb5,0xb8,0xa8,0x53,0xa3,0xbc,0x6a,0x6e,0x77,0x78,0x7b,0x7e,0x63, + 0xae,0x75,0x41,0x77,0xa6,0x51,0x2e,0xb3,0x46,0xc2,0x72,0xa8,0x3a,0x58,0x36,0x3d, + 0x38,0x54,0x48,0x2f,0xa5,0x62,0x2b,0xaa,0xc2,0x30,0xbb,0x38,0xc2,0x71,0xbc,0x42, + 0x5f,0x5d,0x5c,0x7e,0x3b,0xb6,0xa5,0x2e,0x39,0x28,0x57,0x46,0xad,0x76,0x6b,0xb4, + 0x5f,0xa7,0x5c,0x2c,0x3b,0xba,0x53,0x2e,0xbb,0x28,0x73,0x46,0xb4,0x76,0x6d,0x22, + 0x60,0x4d,0x5c,0xac,0x3b,0xbd,0xa5,0x2f,0xab,0x28,0x2f,0x46,0xbb,0x76,0x6f,0x62, + 0x60,0x25,0x5c,0xba,0xbe,0x76,0x70,0x42,0x60,0xaf,0x5c,0xc0,0x3b,0xc2,0xa5,0x71, + 0x39,0x29,0x37,0x47,0x33,0x76,0x71,0xb4,0x61,0x55,0x5d,0x3c,0x3c,0x34,0x53,0xa4, + 0x39,0x29,0x57,0x47,0x3b,0x76,0x73,0xb4,0x61,0xa7,0x5d,0x4c,0x3c,0x38,0x53,0xa4, + 0xbb,0x29,0x73,0x47,0x42,0x76,0x75,0x22,0x62,0x4d,0x5d,0x5a,0x3c,0x3b,0xa5,0xa5, + 0xab,0x29,0x2f,0x47,0x49,0x76,0x77,0x62,0x62,0x25,0x5d,0x68,0x3c,0x3f,0x53,0xa6, + 0x29,0x29,0xbd,0x47,0x50,0x76,0x79,0x42,0x63,0x3d,0x5d,0x76,0x3c,0x42,0xa5,0xa3, + 0x31,0x32,0x43,0x47,0x56,0x76,0x7a,0xb4,0x63,0x75,0x5d,0x24,0x3c,0x46,0x53,0xa8, + 0x69,0x2a,0x63,0x47,0x5e,0x76,0x7c,0x22,0x63,0xbf,0x5d,0xa4,0x3c,0x49,0xa5,0xa9, + 0x59,0x2a,0xa1,0x47,0x65,0x76,0x7e,0x62,0x64,0x65,0x5d,0xb2,0x3c,0x4d,0x53,0xaa, + 0x49,0x2a,0xad,0x47,0x6c,0x76,0xa2,0x42,0x64,0xaf,0x5d,0xc0,0x3c,0x50,0xa5,0xab, + 0x39,0x2b,0x37,0x47,0x73,0x76,0x21,0xb4,0x65,0x55,0x5e,0x3c,0x3c,0x44,0x28,0x29, + 0xba,0x5f,0x77,0x52,0x72,0x76,0xaa,0x61,0x5a,0xae,0x4d,0x2f,0xa8,0x49,0x26,0x34, + 0x39,0x70,0x46,0xb2,0x53,0x71,0x31,0x21,0x45,0x3c,0x62,0x47,0xa1,0xa6,0x30,0x7a, + 0x79,0x38,0x22,0xaf,0x3e,0x65,0xa8,0x7e,0x67,0x6c,0x39,0xbb,0x21,0x73,0x44,0xab, + 0x36,0x69,0x4e,0x77,0xa5,0x66,0xb2,0x22,0x2f,0x23,0xa2,0x21,0xa8,0x2d,0x50,0x2b, + 0xb8,0xbb,0xac,0x78,0x68,0x62,0xbf,0xb3,0x50,0x55,0x36,0x2d,0xc2,0x3f,0x48,0x2c, + 0x46,0xa4,0x2a,0x55,0xbd,0x64,0x6b,0x60,0x42,0x24,0xab,0x22,0x3e,0x7d,0x2d,0x4b, + 0x78,0x5f,0xbc,0x2e,0x6c,0x67,0x55,0xa2,0x53,0xad,0x6c,0x3b,0xb9,0xb3,0x48,0xb6, + 0xbc,0x54,0x2f,0x42,0x79,0x70,0x64,0x60,0x4c,0xbf,0x34,0x4c,0x42,0xbc,0x44,0x73, + 0xb7,0xbb,0xc1,0x35,0xab,0x5b,0x68,0x7c,0x24,0x44,0x68,0x4a,0x3c,0x23,0x30,0x3f, + 0x79,0xbf,0xa5,0x31,0x4b,0x60,0x55,0x7b,0x7c,0x3c,0x2b,0x63,0x2c,0x4f,0x4a,0x25, + 0x7a,0x28,0x32,0xa9,0x5b,0x65,0x67,0xb3,0xa6,0x3c,0x4d,0x25,0xb6,0xbf,0x53,0xbe, + 0x69,0x29,0x73,0x52,0xbc,0x6e,0x67,0xb1,0x37,0xb6,0x78,0x39,0xa5,0x25,0x2e,0xa9, + 0x46,0x62,0xb0,0x4d,0x28,0x73,0x6d,0x5d,0xbd,0x7b,0x7c,0x32,0x37,0x48,0x54,0x70, + 0x3a,0x53,0x78,0xba,0xc1,0x32,0xc2,0xa9,0x25,0x65,0x5e,0x40,0x3c,0x55,0x53,0xac, + 0x49,0x2b,0x5b,0x47,0x7c,0x76,0x24,0x42,0x65,0xaf,0x5e,0x4e,0x3c,0x58,0xa5,0xad, + 0x39,0x2b,0x77,0x47,0x23,0x76,0x25,0xb4,0x66,0x55,0x5e,0x5c,0x3c,0x5c,0x53,0xad, + 0xbb,0x2b,0xa5,0x47,0x2a,0x76,0x27,0x22,0x66,0x2d,0x5e,0x6a,0x3c,0x5f,0xa5,0xae, + 0xab,0x2b,0xc1,0x47,0xa3,0x76,0x29,0x62,0x67,0x45,0x5e,0x78,0x3c,0x63,0x53,0xaf, + 0x29,0x2c,0x4f,0x47,0xab,0x76,0x2b,0x62,0x67,0x25,0x5e,0x28,0x3c,0x67,0xa5,0xb0, + 0xab,0x2c,0x6f,0x47,0xb3,0x76,0x2d,0x62,0x68,0x45,0x5e,0xaa,0x3c,0x6b,0x53,0xb1, + 0x29,0x2c,0x2b,0x47,0xba,0x76,0x2f,0x42,0x68,0x7d,0x5e,0xb8,0x3c,0x6e,0xa5,0xb2, + 0x79,0x2c,0xb9,0x47,0xc1,0x76,0x30,0xb4,0x69,0x35,0x5f,0x34,0x3c,0x72,0x53,0xb3, + 0x69,0x2d,0x43,0x48,0x36,0x76,0xa4,0x22,0x61,0x31,0x33,0x40,0x3c,0x75,0x53,0xb4, + 0x49,0x2d,0x5b,0x48,0x3c,0x76,0xa6,0x42,0x69,0xaf,0x5f,0x4e,0x3c,0x78,0xa5,0xb5, + 0x39,0x2d,0x77,0x48,0x43,0x76,0xa7,0xb4,0x6a,0x55,0x5f,0x5c,0x3c,0x7c,0x53,0xb5, + 0xbb,0x2d,0xa5,0x48,0x4a,0x76,0xa9,0x22,0x6a,0x2d,0x5f,0x6a,0x3c,0xa1,0xa5,0xb6, + 0xab,0x2d,0xc1,0x48,0x5d,0x76,0xaf,0x62,0x6c,0x2d,0x60,0x40,0x3c,0xab,0x53,0xc0, + 0x59,0x29,0x57,0x49,0x4f,0x77,0x44,0xac,0xc1,0x74,0x62,0x6b,0xbc,0x6e,0xa9,0x23, + 0x67,0x42,0x5a,0xa8,0xc0,0x62,0x35,0xac,0xa4,0x64,0xa4,0x2a,0x40,0x29,0x4a,0x3c, + 0x59,0xb1,0x4a,0xb9,0xac,0x65,0x52,0x3c,0xaf,0x5d,0x53,0x3d,0x2a,0xa2,0x4a,0x4e, + 0xa8,0x76,0x2a,0xa7,0x3f,0x65,0x7a,0x63,0x30,0xaf,0x6e,0x62,0x3e,0x61,0x46,0xa3, + 0x38,0xbb,0x4b,0x4a,0x77,0x59,0x23,0x5d,0x6e,0x7c,0x3a,0x57,0x24,0x57,0x4b,0x35, + 0x58,0x51,0x37,0x37,0x7d,0x79,0x22,0x3b,0x25,0x34,0x2e,0xbb,0xb3,0x56,0x4c,0x60, + 0x46,0x3e,0x52,0x59,0x75,0x77,0xc2,0xae,0x4d,0x2c,0x6c,0x39,0xb0,0x5f,0x47,0xa8, + 0x68,0xb1,0x22,0x4d,0xc0,0x6f,0x65,0xb0,0xa8,0x33,0xb2,0x26,0x32,0x37,0x2c,0x7b, + 0xb8,0x29,0x3f,0x68,0x26,0x65,0x3b,0x22,0xac,0x6b,0xb2,0xbb,0xc1,0x4e,0x29,0x47, + 0x28,0xb8,0xa9,0x51,0xb3,0x77,0x24,0xae,0x4d,0xae,0x40,0x6f,0xbc,0x2a,0xa6,0x5b, + 0x56,0x4f,0x6e,0x7b,0x27,0x6d,0xb4,0x62,0x64,0x2d,0x2c,0x39,0xc1,0x2e,0xa8,0x41, + 0x58,0xb4,0x22,0x5e,0x3a,0x79,0x71,0x3d,0xb9,0x24,0xbf,0x45,0x2d,0x6b,0xa7,0x36, + 0x37,0x68,0x4a,0x6b,0x21,0x58,0xba,0x7d,0xb8,0x23,0x72,0x69,0xa2,0x59,0x46,0xb7, + 0xb8,0xb3,0x74,0x21,0x42,0xb7,0x35,0x2e,0x32,0x50,0x51,0x5a,0xbe,0xc2,0x31,0xc2, + 0xb8,0x2a,0xa5,0x49,0x6a,0x77,0x3f,0x22,0x74,0x2d,0x61,0xbc,0x3d,0x4f,0xa6,0x38, + 0xab,0xa4,0xc1,0x49,0x71,0x77,0x41,0x22,0x75,0x4d,0x62,0x3a,0x3d,0x53,0xa6,0x3a, + 0x39,0xa5,0x5b,0x49,0x7c,0x77,0x44,0x62,0x75,0xb7,0x62,0x50,0x3d,0x59,0x54,0x3b, + 0x49,0xa5,0x7b,0x49,0x24,0x77,0x46,0x42,0x76,0x65,0x62,0x60,0x3d,0x5d,0x54,0x3c, + 0x49,0xa5,0xb1,0x49,0x2d,0x77,0x48,0x62,0x76,0xb7,0x62,0x70,0x3d,0x61,0x54,0x3d, + 0x69,0xa6,0x43,0x49,0xa8,0x77,0x4a,0x22,0x77,0x6d,0x62,0x22,0x3d,0x65,0xa6,0x3e, + 0x79,0xa6,0x67,0x49,0xb1,0x77,0x4c,0xb4,0x78,0x35,0x62,0xa6,0x3d,0x6a,0x54,0x3f, + 0x79,0xa6,0x27,0x49,0xb9,0x77,0x4e,0xb4,0x78,0x2d,0x62,0xbc,0x3d,0x6f,0xa6,0x40, + 0xab,0xa6,0xc1,0x4a,0x31,0x77,0x51,0x62,0x79,0x4d,0x63,0x3a,0x3d,0x74,0x54,0x41, + 0xbb,0xa3,0x31,0x32,0x39,0x77,0x53,0xb4,0x79,0xaf,0x63,0x4e,0x3d,0x78,0xa6,0x43, + 0x39,0xa7,0x77,0x4a,0x43,0x77,0x55,0xb4,0x7a,0x5d,0x63,0x5e,0x3d,0x7c,0xa6,0x44, + 0x49,0xa7,0xad,0x4a,0x4c,0x77,0x58,0x42,0x7a,0xaf,0x63,0x6e,0x3d,0xa2,0xa6,0x45, + 0x39,0xa8,0x37,0x4a,0x53,0x77,0x59,0xb4,0x7b,0x55,0x63,0x7c,0x3d,0x24,0x54,0x45, + 0xbb,0xa8,0x53,0x4a,0x5a,0x77,0x5b,0x22,0x7b,0x2d,0x63,0x2a,0x3d,0x27,0xa6,0x42, + 0x25,0xb3,0x62,0x4d,0x71,0x59,0x75,0x3a,0xb2,0xbd,0xbc,0x3b,0x24,0x3b,0x24,0x24, + 0x35,0xb3,0xbc,0x4d,0x63,0x7e,0x2c,0x3c,0x67,0x7b,0x29,0x21,0xa1,0x2e,0x4f,0x58, + 0xb7,0xb3,0x26,0x57,0x78,0x58,0x3c,0x5c,0x44,0x2c,0x7a,0x2d,0x24,0x39,0x4c,0x4c, + 0xb8,0x68,0x43,0x32,0x48,0x7d,0xb7,0xb0,0x68,0xb6,0x2d,0x60,0x50,0x4c,0x44,0x24, + 0xb7,0xb3,0x73,0x6f,0x2d,0x58,0x4b,0x5a,0xac,0x4b,0x6b,0x42,0x33,0x5e,0x27,0xb0, + 0x76,0x59,0x6e,0x5e,0x75,0x58,0x54,0x5b,0x6a,0xad,0xa1,0x77,0x24,0x23,0x25,0xb8, + 0xa8,0x4c,0x47,0x5f,0x2e,0x77,0x77,0x7b,0x70,0x5b,0x7d,0x7d,0x24,0x48,0x45,0xaa, + 0xa8,0x4b,0xb5,0x4b,0xa9,0x5a,0x29,0xad,0x61,0x43,0x79,0x41,0x23,0x38,0x45,0x76, + 0x26,0x42,0x7e,0x55,0x70,0x5a,0x41,0x3b,0x55,0xa5,0x7a,0x6d,0x23,0x61,0x25,0x7c, + 0x76,0x46,0x6f,0x39,0xc0,0x5a,0x51,0x7b,0x59,0x3b,0x7b,0x51,0x23,0x7a,0x25,0x21, + 0x56,0x3b,0x22,0xc2,0x6c,0x58,0x61,0xac,0xaf,0x7b,0x6c,0x35,0xa1,0xb7,0x44,0x2d, + 0x45,0xba,0x5e,0x4e,0x2f,0x58,0x37,0xac,0xc2,0x4b,0x69,0x75,0xa2,0x63,0x44,0xc1, + 0x25,0xb4,0x46,0x4f,0x58,0x58,0x73,0x5a,0xb5,0x2b,0x6e,0x6d,0xa2,0x64,0x24,0xaa, + 0x37,0x5b,0xac,0x4f,0x2e,0xc0,0xc2,0x71,0x70,0xbc,0x6f,0x2e,0x3d,0x28,0xa6,0x47, + 0x39,0xa8,0x77,0x4a,0x63,0x77,0x5d,0xb4,0x7c,0x55,0x63,0xae,0x3d,0x2c,0x54,0x47, + 0xbb,0xa8,0xa5,0x4a,0x6a,0x77,0x5f,0x22,0x7c,0x2d,0x63,0xbc,0x3d,0x2f,0xa6,0x48, + 0xab,0xa8,0xc1,0x4a,0x71,0x77,0x61,0x62,0x7d,0x45,0x64,0x38,0x3d,0xa5,0x54,0x49, + 0x29,0xa9,0x4b,0x4a,0x78,0x77,0x63,0x42,0x7d,0x7d,0x64,0x46,0x3d,0xa8,0xa6,0x4a, + 0x79,0xa9,0x67,0x4a,0xa1,0x77,0x64,0xb4,0x7e,0x35,0x64,0x54,0x3d,0xac,0x54,0x4b, + 0x69,0xa9,0x23,0x4a,0x26,0x77,0x66,0x22,0x7e,0x6d,0x64,0x62,0x3d,0xaf,0xa6,0x4c, + 0x59,0xa9,0xb1,0x4a,0x2d,0x77,0x68,0x62,0x7e,0xb7,0x64,0x70,0x3d,0xb3,0x54,0x4d, + 0x49,0xaa,0x3b,0x4a,0xa6,0x77,0x6a,0x42,0xa1,0x5d,0x64,0x7e,0x3d,0xb6,0xa6,0x4e, + 0x39,0xaa,0x57,0x4a,0xad,0x77,0x6b,0xb4,0xa1,0xa7,0x61,0x31,0x31,0xb9,0xa6,0x4e, + 0xab,0xaa,0x6f,0x4a,0xb3,0x77,0x6d,0x62,0xa2,0x45,0x64,0xaa,0x3d,0xbd,0x54,0x4f, + 0x29,0xaa,0x2b,0x4a,0xba,0x77,0x6f,0x42,0xa2,0x7d,0x64,0xb8,0x3d,0xc0,0xc1,0xb4, + 0xa2,0xa7,0x64,0xbe,0x3d,0xc2,0x54,0x50,0xbb,0xa3,0x33,0x4b,0x32,0x77,0x71,0x22, + 0x21,0x4d,0x65,0x3a,0x3e,0x33,0xa6,0x51,0xab,0xab,0x4f,0x4b,0x39,0x77,0x73,0x62, + 0x21,0x25,0x65,0x48,0x3e,0x37,0x54,0x52,0x29,0xad,0xc0,0x4f,0x28,0x58,0x7d,0x7a, + 0xb6,0xad,0x6e,0xaf,0xa2,0x6b,0x44,0xb5,0x45,0xbf,0x56,0x50,0x34,0x58,0xa6,0xac, + 0xba,0xb5,0x6e,0xb9,0xa2,0x26,0x44,0xb2,0x75,0xc0,0x62,0x50,0x45,0x58,0xbc,0x7a, + 0xc1,0x73,0x70,0x25,0xa2,0xa5,0x24,0xbe,0x55,0xc2,0x3e,0x50,0x2d,0x58,0xb7,0x5a, + 0xc0,0xbd,0x70,0xb3,0xa2,0x45,0x25,0x3a,0x76,0x38,0x7e,0x4f,0x5d,0x59,0x34,0xad, + 0x33,0xb5,0x71,0x2b,0x21,0xc2,0x44,0xa6,0x76,0x31,0x62,0x51,0x56,0x59,0x3b,0x3b, + 0x38,0xb5,0x72,0x37,0x21,0x5b,0x25,0x3a,0x36,0x33,0x6a,0x51,0xaf,0x59,0x4f,0xad, + 0x3b,0x5b,0x73,0xa1,0x21,0x25,0x25,0x48,0x56,0x37,0x2a,0x51,0x37,0x59,0xbe,0x5b, + 0x3f,0xa5,0x74,0x7d,0x21,0xba,0x45,0x31,0xb8,0x39,0x5e,0x54,0x2e,0x58,0x40,0x5e, + 0x76,0x73,0x6e,0x7b,0xa2,0xaa,0x44,0xb7,0x3a,0xbd,0x4a,0x29,0xb7,0x6f,0x4c,0x7b, + 0x50,0xad,0xba,0x44,0x4f,0x7d,0x57,0x61,0x46,0x39,0x22,0x64,0xbc,0x5a,0x34,0x5b, + 0x61,0x6d,0x59,0x51,0x24,0xb8,0x25,0x54,0x46,0x7b,0x26,0x54,0x51,0x58,0x46,0x7b, + 0x4c,0x4b,0x6a,0x2e,0x39,0x23,0x53,0x47,0x25,0xb3,0x23,0x34,0x23,0x75,0x51,0x40, + 0x44,0x53,0xaf,0x38,0x39,0x2d,0x50,0xb8,0x66,0x3e,0x76,0x54,0x6e,0x59,0xb2,0x50, + 0x70,0xb3,0x40,0xc2,0x5c,0x38,0x54,0x52,0xbb,0xab,0x73,0x4b,0x42,0x77,0x75,0x22, + 0x22,0x4d,0x65,0x5a,0x3e,0x3b,0xa6,0x53,0xab,0xab,0x2f,0x4b,0x49,0x77,0x77,0x62, + 0x22,0x25,0x65,0x68,0x3e,0x3f,0x54,0x55,0x39,0xad,0x77,0x4b,0x23,0x77,0x26,0xb4, + 0x26,0xbf,0x66,0x7c,0x3e,0x65,0x54,0x5e,0x49,0xae,0x5b,0x4b,0xaf,0x77,0x2c,0x22, + 0x27,0xbf,0x66,0xa6,0x3e,0x6a,0x54,0x60,0x39,0xae,0xa9,0x4b,0xbd,0x77,0x2f,0xb4, + 0x28,0xa7,0x66,0xbe,0x3e,0x70,0x54,0x60,0xbb,0xaf,0x33,0x4c,0x33,0x77,0xa3,0xb4, + 0x29,0x65,0x67,0x40,0x3e,0x75,0x54,0x62,0x49,0xaf,0x63,0x4c,0x3e,0x77,0xa6,0x22, + 0x29,0xbf,0x67,0x52,0x3e,0x7a,0x54,0x63,0x69,0xaf,0x27,0x4c,0x47,0x77,0xa8,0xb4, + 0x2a,0x75,0x67,0x64,0x3e,0x7e,0x54,0x64,0x69,0xaf,0xb5,0x4c,0x4e,0x77,0xaa,0x22, + 0x2b,0x35,0x67,0x74,0x3e,0x31,0x31,0x45,0x59,0xb0,0x43,0x4c,0x56,0x77,0xac,0x22, + 0x2b,0x6d,0x67,0x22,0x3e,0x25,0xa6,0x66,0x59,0xb0,0x5f,0x4c,0x5d,0x77,0xae,0x62, + 0x2b,0xb7,0x67,0x30,0x3e,0x29,0x54,0x67,0x59,0xb0,0x2b,0x4c,0x68,0x77,0xb1,0x62, + 0x2c,0x2d,0x67,0xbe,0x3e,0xa3,0x54,0x69,0x49,0xb1,0x3b,0x4c,0x76,0x77,0xb4,0xb4, + 0x2d,0x75,0x68,0x44,0x3e,0xa8,0x54,0x6a,0x29,0xb1,0x73,0x4c,0x23,0x77,0xb7,0xb4, + 0x2e,0x55,0x68,0x3f,0x22,0x7c,0x45,0x65,0x56,0x3e,0x46,0x54,0x51,0x76,0xac,0x22, + 0x6b,0x6d,0x5f,0x26,0x3c,0x2b,0x53,0xb9,0x29,0x2e,0x2f,0x48,0x73,0x76,0xb3,0xb4, + 0x6d,0x2d,0x60,0x50,0x3c,0xaa,0x53,0xbd,0x59,0x2f,0xa1,0x48,0x25,0x76,0xb8,0x22, + 0x6e,0x75,0x60,0x64,0x3c,0xb1,0x53,0xbe,0xbb,0x30,0x33,0x48,0xa7,0x76,0xbd,0x42, + 0x6f,0x7d,0x60,0x2e,0x3c,0xbb,0x53,0xc1,0x69,0x30,0x2b,0x48,0xbc,0x76,0xc2,0x42, + 0x70,0xbf,0x5d,0x32,0x3d,0x32,0x54,0x31,0x79,0xa3,0x4f,0x49,0x3d,0x77,0x34,0xb4, + 0x72,0x3d,0x61,0x56,0x3d,0x3b,0x54,0x33,0x29,0xa3,0x2b,0x49,0x4a,0x77,0x37,0xb4, + 0x72,0x75,0x61,0x6c,0x3d,0x40,0xa6,0x35,0x39,0xa4,0x37,0x49,0x56,0x77,0x3a,0xb4, + 0x73,0x25,0x61,0x28,0x3d,0x48,0x54,0x36,0xbb,0xa4,0x7b,0x49,0x64,0x77,0x3e,0x62, + 0x74,0x65,0x62,0x23,0x24,0x6e,0x45,0xa6,0x2a,0x62,0x3b,0x5d,0x52,0x7c,0x3d,0x63, + 0xa5,0x25,0x29,0xbe,0x47,0x4f,0x56,0x79,0x5a,0x63,0x57,0x5d,0x25,0x7c,0x48,0xb5, + 0xa9,0x6d,0x2a,0x2a,0x47,0x6a,0x56,0xa1,0x7a,0x65,0x53,0x5e,0x3e,0x7c,0x56,0xb5, + 0xae,0x35,0x2b,0x60,0x41,0x7e,0xa7,0x44,0x2a,0x35,0xa9,0x52,0x5d,0x79,0x59,0x63, + 0x3c,0x55,0x73,0xaa,0x41,0x2c,0x55,0x48,0x60,0x30,0xbb,0x38,0xc2,0x56,0xb8,0x62, + 0x2e,0x75,0x68,0x64,0x3e,0xb1,0x54,0x6d,0x39,0xb2,0x37,0x4c,0xa5,0x77,0xbc,0x62, + 0x2f,0x65,0x68,0xa2,0x3e,0xb7,0xa6,0x6e,0x29,0xb2,0x6b,0x4c,0xb3,0x77,0xbf,0x62, + 0x30,0x45,0x68,0xac,0x3e,0xbe,0x54,0x70,0x79,0xb2,0xbd,0x4c,0xc2,0x77,0x71,0x42, + 0xa3,0x3d,0x69,0x36,0x3f,0x32,0xa6,0x71,0x79,0xb3,0x4b,0x4d,0x38,0x78,0x33,0x42, + 0xa3,0x2d,0x69,0x4c,0x3f,0x38,0x54,0x73,0x39,0xb3,0x77,0x4d,0x43,0x78,0x35,0xb4, + 0xa4,0x5d,0x69,0x5e,0x3f,0x3c,0xa6,0x74,0x39,0xb3,0xa9,0x4d,0x4b,0x78,0x37,0xb4, + 0xa4,0xa7,0x69,0x72,0x3f,0x41,0xa6,0x75,0x79,0xb4,0x47,0x4d,0x57,0x78,0x3a,0xb4, + 0xa5,0x75,0x69,0x28,0x3f,0x47,0xa6,0x77,0x39,0xb4,0x7b,0x4d,0x64,0x78,0x3e,0x42, + 0xa6,0x65,0x69,0xb2,0x3f,0x4d,0x54,0x78,0x69,0xb4,0xb5,0x4d,0x6f,0x78,0x31,0x31, + 0x34,0xbf,0x6a,0x38,0x3f,0x53,0xa6,0x79,0xab,0xb5,0x63,0x4d,0x7e,0x78,0x44,0x22, + 0xa7,0xbf,0x6a,0x52,0x3f,0x5a,0xa6,0x7b,0x79,0xb5,0x27,0x4d,0x27,0x78,0x46,0xb4, + 0xa8,0x75,0x6a,0x66,0x3f,0x5e,0xa6,0x7c,0x79,0xb5,0xb9,0x4d,0x2f,0x78,0x48,0xb4, + 0xa9,0x35,0x6a,0x74,0x3f,0x62,0x54,0x7d,0x69,0xb6,0x43,0x4d,0xa8,0x78,0x4a,0xb4, + 0xa9,0x75,0x6a,0x26,0x3f,0x66,0xa6,0x7e,0xab,0xb6,0x77,0x4e,0x69,0x79,0x5d,0x43, + 0x3d,0xbf,0x74,0x3c,0x41,0x30,0x55,0x4b,0x3a,0x37,0x43,0x52,0x78,0x79,0x65,0xb5, + 0x3f,0x65,0x74,0x76,0x41,0xb1,0x55,0x4b,0xbc,0x37,0xb1,0x52,0xae,0x79,0x6c,0xb5, + 0x40,0xb7,0x71,0x3a,0x42,0x42,0x55,0x54,0xac,0x3a,0x3f,0x53,0x62,0x79,0x7c,0xb5, + 0x44,0x7d,0x76,0x38,0x42,0x54,0x55,0x52,0x26,0x43,0x3a,0x64,0x53,0x5a,0x5c,0x3b, + 0x5b,0xad,0x7b,0xbf,0x23,0xc2,0x26,0x4b,0x36,0x47,0x2a,0x56,0xb3,0x5a,0x68,0xad, + 0x6f,0xb6,0x78,0x4b,0xba,0xbd,0x48,0x2f,0x26,0x40,0xb4,0x53,0x60,0x7e,0xb0,0x7b, + 0x61,0x3b,0xc0,0x65,0xb8,0xba,0x28,0x5a,0x76,0x6e,0x56,0x60,0x52,0x5c,0x30,0x7c, + 0x3c,0xa5,0xa6,0x3b,0x29,0xab,0x27,0x36,0x46,0x6a,0x62,0x5f,0x5b,0x5c,0x7d,0xad, + 0xb6,0x7b,0x2d,0x2d,0x28,0x48,0x26,0xae,0x76,0x6a,0xb0,0x5f,0x73,0x5c,0x2b,0x5b, + 0xbb,0x5b,0x2e,0x27,0x28,0x74,0x46,0xb2,0x76,0x6c,0xb0,0x5f,0xab,0x5c,0x2c,0x5b, + 0xba,0x63,0x2e,0xa9,0x28,0x27,0x26,0xb7,0x76,0x6d,0x62,0x60,0x63,0x5c,0xb6,0xad, + 0xbd,0x6b,0x2f,0xab,0x28,0x7a,0x26,0xb7,0x36,0x6f,0x26,0x60,0x29,0x5c,0xb9,0x7b, + 0xc0,0x7b,0x30,0x55,0x28,0x2d,0x46,0xc1,0x76,0x70,0x6e,0x60,0xbb,0x5c,0xbc,0x3b, + 0xc0,0xb2,0xb2,0xbf,0x34,0xc2,0xac,0xb1,0x69,0xb6,0x27,0x4d,0xba,0x78,0x4f,0x42, + 0xaa,0x7d,0x6a,0xb8,0x3f,0x6e,0xa6,0xa2,0x29,0xb6,0xbd,0x4e,0x31,0x78,0x51,0x22, + 0xab,0x4d,0x6b,0x3a,0x3f,0x74,0x54,0x22,0x39,0xb7,0x57,0x4e,0x3b,0x78,0x53,0xb4, + 0xab,0xa7,0x6b,0x4c,0x3f,0x78,0x54,0x23,0x49,0xb7,0x7b,0x4e,0x44,0x78,0x56,0x62, + 0xac,0x65,0x6b,0x60,0x3f,0x7d,0x54,0x24,0x49,0xb7,0xad,0x4e,0x4c,0x78,0x58,0x62, + 0xac,0xbf,0x6b,0x72,0x3f,0x21,0xa6,0x25,0x59,0xb8,0x3f,0x4e,0x55,0x78,0x5a,0x62, + 0xad,0x65,0x6b,0xa2,0x3f,0x25,0x54,0x26,0x49,0xb8,0x5b,0x4e,0x5e,0x78,0x5c,0x22, + 0xae,0x35,0x6b,0xa6,0x3f,0x2a,0xa6,0x27,0x79,0xb8,0x27,0x4e,0x67,0x78,0x5e,0xb4, + 0xae,0x75,0x6b,0xb6,0x3f,0x2e,0xa6,0x28,0x79,0xb8,0xb9,0x4e,0x6f,0x78,0x60,0xb4, + 0xaf,0x35,0x6c,0x34,0x3f,0xa4,0x54,0x71,0x31,0x37,0x3f,0x4e,0x75,0x78,0x62,0x62, + 0xaf,0x65,0x6c,0x40,0x3f,0xa7,0x54,0x2a,0x49,0xb9,0x5b,0x4e,0x7c,0x78,0x64,0x42, + 0xaf,0xaf,0x6c,0x50,0x3f,0xab,0x54,0x2b,0x49,0xb9,0x7b,0x4e,0x24,0x78,0x66,0x42, + 0xb0,0x5d,0x6c,0x5e,0x3f,0xae,0xa6,0x2c,0x39,0xb9,0xa9,0x4e,0x2b,0x78,0x67,0xb4, + 0xb0,0xa7,0x6c,0x6c,0x3f,0xb2,0x54,0x2c,0xbb,0xba,0x33,0x4e,0xa4,0x78,0x69,0x22, + 0xb1,0x4d,0x6c,0x7a,0x3f,0x36,0x27,0x32,0x26,0x78,0xb8,0x60,0xb0,0x5c,0x71,0x3c, + 0x32,0xb5,0xa3,0x63,0x29,0x53,0x47,0x35,0x36,0x74,0x46,0x61,0xaf,0x5d,0x51,0x5c, + 0x39,0x7b,0xa5,0x65,0x29,0x71,0x47,0x46,0x3a,0x79,0xa9,0x70,0xc2,0x61,0x2f,0x61, + 0x58,0xaf,0x3a,0xc2,0x33,0x78,0xa3,0x22,0x59,0x46,0x53,0x36,0x35,0x72,0x54,0x21, + 0x5a,0x3d,0x3b,0x60,0x33,0x7d,0xa3,0x26,0x69,0x46,0xa5,0x36,0x6f,0x72,0x5d,0x41, + 0x5d,0x75,0x3c,0x46,0x33,0xb4,0xa3,0x24,0x39,0x46,0x2f,0x36,0x5f,0x72,0x63,0xb3, + 0x5d,0xa7,0x3c,0x34,0x33,0x25,0xa3,0x27,0x79,0x46,0x37,0x36,0x5b,0x72,0x58,0xb3, + 0x5d,0x55,0x3c,0x4e,0x33,0x23,0x51,0x2d,0x49,0x41,0x57,0x38,0xba,0x72,0x6a,0x41, + 0x51,0xbf,0x3d,0x40,0x34,0xb1,0x51,0x2f,0x79,0x47,0x7b,0x36,0x29,0x72,0x34,0x41, + 0x70,0x30,0xb1,0x36,0x24,0x72,0x35,0x61,0x62,0x25,0x3d,0x3e,0x34,0x3b,0x51,0xa5, + 0x29,0x50,0x33,0x36,0x26,0x72,0x38,0x41,0x66,0x3d,0x3e,0x68,0x34,0x5f,0x51,0xa4, + 0x39,0x4d,0x7b,0x37,0x6d,0x72,0x7e,0x41,0x64,0x3d,0x3f,0x68,0x34,0x60,0x51,0xa8, + 0xbb,0x4b,0x6f,0x37,0x78,0x72,0x21,0xb3,0x66,0xbf,0x3e,0x32,0x34,0x3c,0xa3,0xaf, + 0x39,0x4a,0x67,0x37,0x6b,0x72,0x7d,0xb3,0x67,0x65,0x3e,0x7c,0x34,0xc0,0xc0,0x51, + 0x70,0xbb,0x38,0x7c,0x3f,0xb6,0x54,0x2d,0xbb,0xba,0x53,0x4e,0xac,0x78,0x6b,0x22, + 0xb1,0x2d,0x6c,0x2a,0x3f,0xb9,0xa6,0x2e,0xab,0xba,0x6f,0x4e,0xb3,0x78,0x6d,0x62, + 0xb2,0x45,0x6c,0xaa,0x3f,0xbd,0x54,0x2f,0x29,0xba,0x2b,0x4e,0xba,0x78,0x6f,0x42, + 0xb2,0x7d,0x6c,0xb8,0x3f,0xc0,0xc1,0xb4,0xb2,0xa7,0x6c,0xbe,0x3f,0xc2,0x54,0x30, + 0xbb,0xb3,0x33,0x4f,0x32,0x78,0x71,0x22,0xb3,0x4d,0x6d,0x3a,0x40,0x33,0xa6,0xa3, + 0xab,0xbb,0x4f,0x4f,0x39,0x78,0x73,0x62,0xb3,0x25,0x6d,0x48,0x40,0x37,0x54,0xa4, + 0x29,0xbb,0x6b,0x4f,0x40,0x78,0x75,0x42,0xb4,0x3d,0x6d,0x56,0x40,0x3a,0xa6,0xa5, + 0x79,0xbb,0x27,0x4f,0x47,0x78,0x76,0xb4,0xb4,0x75,0x6d,0x64,0x40,0x3e,0x54,0xa6, + 0x69,0xbb,0xb5,0x4f,0x4e,0x78,0x78,0x22,0xb4,0xbf,0x6d,0x72,0x40,0x41,0xa6,0xa7, + 0x59,0xbc,0x3f,0x4f,0x31,0x31,0x3a,0x42,0xb5,0x5d,0x6d,0x7e,0x40,0x44,0xa6,0xa8, + 0x39,0xbc,0x57,0x4f,0x5b,0x78,0x7b,0xb4,0xb5,0xa7,0x6d,0x2c,0x40,0x48,0x54,0xa8, + 0xbb,0xbc,0x73,0x4f,0x62,0x78,0x7d,0x22,0xb6,0x4d,0x6d,0xac,0x40,0x4b,0xa6,0xa9, + 0xab,0xbc,0x2f,0x4f,0x69,0x78,0xa1,0x62,0xb6,0x25,0x6d,0xba,0x40,0x4f,0x54,0xaa, + 0x29,0xbc,0xbd,0x4f,0x70,0x78,0x21,0x42,0xb7,0x3d,0x6e,0x36,0x40,0x52,0xa6,0xab, + 0x79,0xbe,0x53,0x37,0x4c,0x72,0x2b,0x61,0x67,0xa7,0x3e,0x26,0x34,0x67,0xa3,0xb0, + 0xab,0x4e,0x73,0x37,0xbb,0x72,0xaf,0xb3,0x6c,0x55,0x3f,0x72,0x34,0x26,0x51,0xb5, + 0x69,0x4d,0xb5,0x38,0x36,0x72,0x30,0x41,0x6c,0x65,0x3f,0x24,0x34,0x6f,0xa3,0xba, + 0x39,0x4c,0xb1,0x38,0x49,0x72,0xaa,0x21,0x6b,0x75,0x3f,0xb8,0x34,0x2f,0x51,0xbb, + 0x49,0x49,0x37,0x3a,0xa8,0x72,0xb9,0x41,0x61,0x6b,0xa3,0x62,0x35,0x36,0xa4,0x4c, + 0x29,0x50,0xb9,0x38,0x27,0x72,0x78,0x41,0x74,0x75,0x41,0x54,0x35,0x34,0x52,0x4b, + 0x79,0x4f,0xc1,0x37,0x40,0x73,0x31,0xb3,0xa2,0x75,0x40,0xb6,0x34,0xb8,0x51,0xbb, + 0x29,0x4f,0x33,0x37,0x57,0x73,0x6d,0x41,0x6f,0x3d,0x3e,0x6a,0x35,0x59,0xa4,0x3c, + 0x59,0x53,0xa9,0x39,0xb6,0x73,0x52,0xb3,0x79,0x75,0x42,0xb8,0x35,0x75,0xa4,0x40, + 0x39,0x52,0xb5,0x39,0x77,0x73,0x4b,0x61,0x78,0x65,0x43,0x4a,0x35,0x78,0x52,0x37, + 0x49,0x54,0x67,0x3a,0x72,0x73,0x64,0x61,0x7e,0x35,0x44,0x7e,0x35,0x2f,0xa4,0x4b, + 0x69,0x57,0x5b,0x3a,0x70,0x73,0x5f,0x21,0xa1,0x35,0x43,0x74,0x35,0x2d,0xa4,0x47, + 0x79,0x55,0x2f,0x3a,0xa8,0x73,0x69,0xb3,0x71,0xa7,0x45,0x4b,0xb8,0x4d,0x52,0x6f, + 0x39,0x52,0xa9,0x3b,0x50,0x73,0xa1,0x21,0x30,0x30,0xbb,0x38,0xc2,0x5e,0xa6,0xab, + 0xab,0xbd,0x4f,0x4f,0x79,0x78,0x23,0x62,0xb7,0x25,0x6e,0x48,0x40,0x57,0x54,0xac, + 0x29,0xbd,0x6b,0x4f,0xa2,0x78,0x25,0x42,0xb8,0x3d,0x6e,0x56,0x40,0x5a,0xa6,0xad, + 0x79,0xbd,0x27,0x4f,0x27,0x78,0x26,0xb4,0xb8,0x75,0x6e,0x64,0x40,0x5e,0x54,0xae, + 0x69,0xbd,0xb5,0x4f,0x2e,0x78,0x28,0x22,0xb8,0xbf,0x6e,0x72,0x40,0x61,0xa6,0xaf, + 0x59,0xbe,0x3f,0x4f,0xa7,0x78,0x2a,0x62,0xb9,0x25,0x6f,0x32,0x40,0x77,0x54,0xb5, + 0x59,0xbf,0xb9,0x50,0x51,0x78,0xab,0x62,0xbd,0x45,0x6f,0x7a,0x40,0x23,0xa6,0xb7, + 0xab,0xc0,0x4f,0x50,0x5b,0x78,0xae,0x42,0xbd,0xaf,0x6f,0x2e,0x40,0x28,0xa6,0xb9, + 0x59,0xc0,0xa1,0x50,0x65,0x78,0xb0,0x62,0xbe,0x6d,0x6f,0xb4,0x40,0x2e,0x54,0xba, + 0x69,0xc0,0xb5,0x50,0x70,0x78,0xb3,0x42,0xbf,0x4d,0x70,0x3e,0x40,0x31,0x31,0x4a, + 0x49,0xc1,0x5b,0x50,0x7c,0x78,0xb6,0x42,0xbf,0xaf,0x70,0x50,0x40,0xac,0x54,0xbd, + 0xab,0xc1,0x2f,0x50,0x2b,0x78,0xbb,0x42,0xc1,0x3d,0x70,0x78,0x40,0xb6,0xa6,0xc0, + 0x79,0xc2,0x6f,0x50,0xb4,0x78,0xbf,0x22,0xc2,0x55,0x70,0xae,0x40,0xbe,0x54,0xc2, + 0x59,0xc2,0xb2,0xba,0x40,0xc1,0x54,0xc2,0xab,0xc2,0xc1,0x4f,0x38,0x79,0x33,0x43, + 0x31,0xa7,0x71,0x4e,0x41,0x3a,0xa7,0x33,0x2a,0x31,0xa5,0x51,0x27,0x73,0xa1,0xb3, + 0x30,0xbf,0x44,0xbc,0x35,0x5d,0xa4,0x5a,0x39,0x5c,0x53,0x3b,0xa7,0x73,0x28,0x21, + 0x28,0x25,0x47,0x75,0xba,0x52,0xa4,0x5f,0x59,0x5c,0xb1,0x3c,0x55,0x73,0xad,0x41, + 0x29,0x6d,0x47,0x50,0x36,0x6d,0xa4,0x66,0xab,0x5d,0xb5,0x3c,0x36,0x73,0xb1,0x61, + 0x2c,0x6d,0x47,0xa4,0x36,0xac,0xa4,0x69,0x49,0x5f,0xb5,0x3c,0xc2,0x73,0x7a,0xb3, + 0xa3,0x5d,0x49,0x24,0x37,0x3c,0x52,0x78,0x79,0x68,0xbc,0x6d,0x39,0x60,0xa2,0x3c, + 0x45,0x3b,0xa7,0xb2,0x31,0x5b,0x27,0x5c,0x56,0x7b,0xa4,0x63,0x40,0x5a,0x79,0x7c, + 0x73,0x5b,0xb3,0x29,0x2d,0x4b,0x48,0x3a,0x77,0x44,0x5a,0x76,0x50,0x62,0x5f,0xaf, + 0x5d,0x24,0x3c,0x65,0xa5,0xae,0x29,0x2e,0xa9,0x42,0x3a,0x78,0xb9,0x62,0x3f,0x5d, + 0x65,0x2c,0x3e,0x37,0xa6,0x27,0x29,0xc1,0xa9,0x4c,0x76,0x77,0xbd,0x62,0xa6,0x7d, + 0x6c,0x54,0x3e,0x2b,0xa6,0x27,0x49,0xb4,0x57,0x4c,0x56,0x78,0x5f,0x62,0xb2,0x3d, + 0x70,0x44,0x40,0xb3,0xa6,0xb3,0x49,0xc2,0xb9,0x4f,0x42,0x78,0x2f,0x62,0xb6,0x7d, + 0x66,0x44,0x44,0x3d,0xa6,0x30,0x49,0xab,0x27,0x53,0x36,0x79,0x3c,0x63,0x37,0xaf, + 0x73,0x34,0x41,0x49,0xa7,0x44,0x4a,0x35,0x47,0x53,0xbc,0x7a,0x35,0x63,0x4c,0x5d, + 0x7a,0x68,0xb2,0xbf,0x34,0xc2,0x7e,0x54,0x4a,0x31,0xb5,0x51,0x54,0x79,0x3a,0x43, + 0x33,0x5d,0x71,0xa2,0x41,0x45,0x55,0x36,0x4a,0x32,0x5b,0x51,0x5c,0x79,0x3c,0x43, + 0x34,0x35,0x71,0xa6,0x41,0x4a,0x55,0x37,0x6a,0x32,0x23,0x51,0x68,0x79,0x3f,0x63, + 0x34,0x25,0x71,0xbe,0x41,0x50,0xa7,0x39,0x3a,0x33,0x3f,0x51,0x76,0x79,0x42,0x23, + 0x35,0x75,0x72,0x44,0x41,0x56,0x55,0x3a,0x6a,0x33,0x63,0x51,0xa1,0x79,0x46,0x43, + 0x36,0x5d,0x72,0x5e,0x41,0x5d,0xa7,0x3c,0x5a,0x33,0xb5,0x51,0x2e,0x79,0x48,0x23, + 0x36,0xbf,0x72,0x72,0x41,0x61,0xa7,0x3d,0x7a,0x34,0x4b,0x51,0xaa,0x79,0x4b,0x63, + 0x37,0x25,0x72,0x28,0x41,0x67,0x55,0x3e,0xbc,0x34,0x73,0x51,0xb4,0x79,0x4d,0x23, + 0x38,0x4d,0x72,0xb0,0x41,0x6c,0xa7,0x40,0x3a,0x34,0xa9,0x51,0xbd,0x79,0x4f,0xb5, + 0x38,0xa7,0x72,0xc0,0x41,0x71,0xa7,0x31,0x31,0x35,0x43,0x52,0x36,0x79,0x52,0x23, + 0x39,0x6d,0x73,0x44,0x41,0x76,0x55,0x42,0x7a,0x35,0x67,0x52,0x3f,0x79,0x54,0xb5, + 0x3a,0x35,0x73,0x56,0x41,0x7b,0x55,0x43,0xac,0x35,0xa5,0x52,0x4b,0x79,0x58,0x43, + 0x3a,0xb7,0x73,0x70,0x41,0x21,0x55,0x45,0x7a,0x36,0x47,0x52,0x58,0x79,0x5b,0x43, + 0x3b,0x7d,0x73,0x28,0x41,0x27,0xa7,0x47,0x5a,0x36,0x2f,0x52,0x6d,0x79,0x60,0x63, + 0x3c,0xbf,0x74,0x32,0x41,0x6e,0x4a,0x47,0xb9,0x56,0xa4,0x7a,0x4a,0x63,0x5f,0x7d, + 0x7d,0x34,0x44,0x51,0xa7,0xae,0x2a,0x4d,0x77,0x58,0x3a,0x79,0x3a,0x63,0x7a,0x5d, + 0x23,0xb6,0x45,0x47,0x30,0xac,0x48,0xa6,0x48,0x59,0x76,0x6f,0x30,0x5a,0xbf,0x5b, + 0x70,0xad,0xa2,0x23,0x24,0xb7,0x45,0xc2,0x70,0x2b,0x7d,0x55,0x25,0x3c,0x46,0x31, + 0xa8,0x53,0x5e,0x59,0x23,0x5b,0x45,0xad,0x76,0x53,0x22,0x5d,0x25,0x52,0x26,0x35, + 0x46,0x53,0x2e,0x59,0x2a,0x5b,0x39,0xad,0x74,0x43,0x23,0x35,0x25,0x7b,0x46,0x3f, + 0xb8,0x54,0x76,0x59,0xa7,0x5b,0x57,0x7b,0x7a,0x2b,0x23,0x39,0x25,0x6c,0x46,0x3d, + 0xa8,0x55,0xb8,0x5a,0x21,0x5b,0x5c,0x5b,0x7d,0x43,0x23,0xab,0x25,0xac,0x46,0x45, + 0xb8,0x56,0x4a,0x5a,0x24,0x5b,0x66,0x3b,0x78,0x43,0x23,0x77,0x25,0xad,0x26,0x48, + 0x66,0x56,0xc0,0x5a,0x7d,0x5b,0x67,0x5b,0x7e,0x23,0x24,0x69,0x25,0x25,0x26,0x46, + 0x56,0x56,0x42,0x5a,0x2e,0x5b,0x64,0xad,0x7e,0xb5,0x21,0x67,0x26,0xb6,0x26,0x35, + 0x36,0x60,0xb8,0x59,0x45,0x5b,0xbf,0xad,0x73,0x43,0x25,0x77,0x26,0x38,0x26,0x53, + 0x46,0x5a,0x4e,0x5b,0x5b,0x5b,0x2a,0xad,0x29,0xbd,0x27,0xad,0x26,0x55,0x26,0x5e, + 0x26,0x5b,0x36,0x5b,0x26,0x5b,0xa2,0xad,0x26,0x33,0x25,0xbc,0xbe,0xc2,0x71,0xc2, + 0x72,0x51,0x38,0x36,0x41,0xa4,0xa7,0x49,0xac,0x37,0x53,0x52,0x7a,0x79,0x63,0xb5, + 0x3d,0xa7,0x74,0x4c,0x41,0xac,0x55,0x4b,0x7a,0x37,0x27,0x52,0x27,0x79,0x67,0x43, + 0x3e,0x7d,0x74,0x66,0x41,0xb2,0x55,0x4c,0xbc,0x38,0x33,0x52,0xa6,0x79,0x6a,0x43, + 0x3f,0x5d,0x74,0x24,0x41,0xb8,0x55,0x4e,0x7a,0x38,0x6b,0x52,0xb3,0x79,0x6d,0x63, + 0x40,0x45,0x74,0xaa,0x41,0xbd,0xa7,0x4f,0xac,0x38,0x2f,0x52,0xbc,0x79,0x6f,0x23, + 0x40,0x30,0xb1,0x52,0xbf,0x79,0x70,0xb5,0x31,0x35,0x75,0x34,0x42,0x32,0xa7,0x51, + 0x2a,0x39,0x4b,0x53,0x38,0x79,0x73,0x43,0x41,0x7d,0x75,0x46,0x42,0x36,0xa7,0x52, + 0x7a,0x39,0x67,0x53,0x3f,0x79,0x74,0xb5,0x42,0x35,0x75,0x54,0x42,0x3a,0x55,0x53, + 0x6a,0x39,0x23,0x53,0x46,0x79,0x76,0x23,0x42,0x6d,0x75,0x62,0x42,0x3e,0x55,0x54, + 0x6a,0x39,0xb5,0x53,0x31,0x31,0x38,0x63,0x42,0xbf,0x75,0x72,0x42,0x41,0xa7,0x55, + 0x7a,0x3a,0x47,0x53,0x57,0x79,0x7a,0xb5,0x43,0x75,0x75,0x24,0x42,0x46,0x55,0x56, + 0x6a,0x3a,0x63,0x53,0x5e,0x79,0x7c,0x23,0x44,0x35,0x75,0xa8,0x42,0x4a,0xa7,0x57, + 0x7a,0x3a,0x27,0x53,0x67,0x79,0x7e,0xb5,0x44,0x75,0x75,0xb8,0x42,0x4e,0xa7,0x58, + 0x7a,0x3a,0xb9,0x53,0x6f,0x79,0xa2,0xb5,0x45,0x35,0x76,0x34,0x42,0x52,0x55,0x59, + 0x7a,0x3a,0x2e,0x5b,0x27,0x5b,0x2e,0x5b,0x28,0x63,0x26,0xb1,0x26,0x4a,0x26,0x57, + 0x36,0x5b,0xb4,0x5c,0x3c,0x5b,0xb7,0x7b,0x29,0x4b,0x27,0xa5,0x26,0x2d,0x26,0x62, + 0x36,0x5d,0x36,0x5c,0x50,0x5b,0x30,0x7b,0x2e,0x63,0x27,0x53,0x26,0x6e,0x26,0x6c, + 0xb8,0x5e,0xb8,0x5c,0x6f,0x5b,0xa8,0x3b,0x2a,0x7b,0x28,0x25,0x26,0xbe,0x26,0x6a, + 0x46,0x59,0xc0,0x5e,0x22,0x5b,0xbd,0xad,0x2f,0xa5,0x28,0x59,0x26,0xb6,0x46,0x6c, + 0x26,0x5f,0x42,0x5c,0xb2,0x5b,0xbc,0x5b,0x30,0x43,0x28,0xa9,0x26,0xa9,0x46,0x6a, + 0x26,0x60,0x52,0x5c,0xb8,0x5b,0xbc,0x3b,0x2a,0x55,0x6d,0x6d,0x27,0x35,0x46,0x72, + 0x76,0x61,0x36,0x5d,0x55,0x5c,0x39,0xad,0xb2,0xb5,0x25,0x31,0x27,0x44,0x26,0x76, + 0x26,0x63,0xa4,0x5d,0x6a,0x5c,0x46,0xad,0xa5,0xa5,0x2a,0x4b,0x27,0x62,0x46,0x7c, + 0x46,0x63,0xb4,0x5d,0x7d,0x5c,0x46,0x3b,0xab,0x63,0x2a,0x79,0x27,0x69,0x26,0x7e, + 0x66,0x64,0xb0,0x5d,0xbf,0x5c,0x52,0x5b,0xac,0x4b,0x2b,0x2f,0x27,0xad,0x46,0x2b, + 0xb8,0x67,0xb8,0x5e,0xa4,0x5c,0x6e,0x5b,0xb1,0x2b,0x2c,0xb5,0x27,0xc2,0x26,0x71, + 0x76,0x69,0x5a,0x5f,0x3a,0x5c,0x78,0x3b,0xb3,0xbd,0xbb,0x63,0x2f,0x3b,0x48,0x73, + 0x46,0xb4,0x76,0x6d,0x6c,0x60,0x40,0x50,0x70,0xb3,0x40,0xc2,0x54,0x53,0xa7,0x59, + 0xbc,0x3b,0x53,0x53,0x22,0x79,0x25,0xb5,0x46,0x55,0x76,0x5c,0x42,0x5c,0x55,0x5c, + 0x3a,0x3b,0xa9,0x53,0x2c,0x79,0x28,0x43,0x46,0xbf,0x76,0x72,0x42,0x64,0x55,0x5d, + 0xbc,0x3c,0x53,0x53,0xae,0x79,0x2c,0x63,0x48,0x4d,0x76,0xb8,0x42,0x6e,0xa7,0x60, + 0x7a,0x3d,0x33,0x54,0x32,0x79,0xa3,0x23,0x49,0x4d,0x77,0x3a,0x42,0x74,0x55,0x62, + 0x3a,0x3d,0x5b,0x54,0x3f,0x79,0xa6,0xb5,0x4a,0x4d,0x77,0x5a,0x42,0x7b,0xa7,0x63, + 0xac,0x3d,0x2f,0x54,0x49,0x79,0xa9,0x63,0x4a,0xa7,0x77,0x6c,0x42,0xa2,0x55,0x64, + 0xbc,0x3e,0x33,0x54,0x52,0x79,0xac,0x43,0x4b,0x5d,0x77,0x7e,0x42,0x24,0xa7,0x66, + 0x3a,0x3e,0x57,0x54,0x5c,0x79,0xae,0x43,0x4c,0x35,0x77,0xa6,0x42,0x2a,0x55,0x67, + 0x6a,0x3e,0x2b,0x54,0x68,0x79,0xb1,0x43,0x4c,0x7d,0x77,0xba,0x42,0x31,0x31,0x48, + 0x7a,0x3e,0xb9,0x54,0x6f,0x79,0xb2,0xb5,0x4d,0x35,0x78,0x34,0x42,0xa4,0x55,0x69, + 0x6a,0x3f,0x43,0x54,0x76,0x79,0xb4,0x23,0x4d,0x75,0x78,0x48,0x42,0xab,0x55,0x6b, + 0x5a,0x3f,0xa1,0x54,0x25,0x79,0xb8,0x63,0x4e,0x65,0x78,0x60,0x42,0xaf,0x55,0x6c, + 0x4a,0x3f,0xad,0x54,0x2c,0x79,0xba,0x63,0x4e,0xb7,0x78,0x70,0x42,0xb3,0x55,0x6d, + 0x4a,0x40,0x3b,0x54,0xa6,0x79,0xbc,0x43,0x4f,0x5d,0x75,0xb1,0x2f,0x53,0x48,0x7b, + 0x76,0xb5,0xb0,0x6d,0x2f,0x60,0x49,0x5c,0xab,0xa5,0xb4,0xb7,0x2d,0x77,0x28,0x43, + 0x36,0xa7,0x2a,0x6a,0x39,0x5f,0x57,0x3c,0x7a,0x7b,0xb5,0x53,0x2d,0x7e,0x48,0x44, + 0x76,0xa8,0x26,0x6a,0x53,0x5f,0x60,0x5c,0x7b,0xa5,0xb5,0x27,0x2d,0x29,0x28,0x45, + 0x66,0xa9,0x36,0x6a,0x68,0x5f,0x62,0x3c,0x7e,0x43,0xb6,0x79,0x2d,0xa8,0x28,0x4d, + 0x26,0xa3,0x3a,0x6b,0x34,0x5f,0x7a,0xae,0x23,0x63,0xb7,0x2d,0x2e,0x43,0x48,0x54, + 0xa8,0xab,0x4a,0x6b,0x4c,0x5f,0x27,0x3c,0x24,0xb5,0xb7,0xab,0x2e,0x4f,0x28,0x5e, + 0x76,0xad,0xb0,0x6b,0xb2,0x5f,0x28,0x5c,0x27,0x2b,0xb8,0x47,0x2e,0x56,0x48,0x5e, + 0x46,0xae,0x22,0x6c,0x33,0x5f,0xa9,0x5c,0x2a,0xad,0xb8,0xaa,0x3d,0x2c,0x28,0x69, + 0x26,0xae,0x7e,0x6f,0xba,0x60,0xa3,0x7c,0xbb,0x6b,0xc1,0x43,0x30,0x77,0x48,0xb5, + 0x26,0xbf,0xa8,0x70,0x4d,0x60,0xad,0x3c,0xbd,0xad,0xc1,0xad,0x30,0x2f,0x48,0xaf, + 0x59,0x74,0x36,0x70,0x5e,0x6a,0x5d,0x3f,0x5c,0x54,0x7b,0xb1,0xb5,0x2d,0x4d,0x29, + 0x68,0x47,0x36,0xa8,0xa1,0x6a,0x64,0x5f,0x5e,0x44,0x7c,0x21,0xb5,0xba,0x2d,0x2e, + 0x48,0x48,0x7a,0xa8,0xb7,0x6a,0x6e,0xb1,0x51,0x3c,0xa2,0xa9,0xb5,0x32,0x2d,0xc2, + 0x60,0x30,0xbb,0x38,0xc2,0x43,0xbc,0x23,0x4f,0x6d,0x78,0x22,0x42,0xb7,0xa7,0x6e, + 0x5a,0x40,0x5f,0x54,0xaf,0x79,0xbe,0x63,0x4f,0xb7,0x78,0x30,0x42,0xbb,0x55,0x6f, + 0x4a,0x40,0x7b,0x54,0xb6,0x79,0xc0,0x43,0x50,0x5d,0x78,0xb0,0x42,0xbe,0xa7,0x70, + 0x3a,0x40,0xa9,0x54,0xbd,0x79,0xc1,0xc2,0x6a,0x40,0xb5,0x54,0xc0,0x79,0xc2,0x23, + 0x50,0xbf,0x75,0x32,0x43,0x31,0xa7,0x71,0x5a,0x41,0x3f,0x55,0x35,0x7a,0x32,0x63, + 0x51,0x65,0x79,0x40,0x43,0x35,0x55,0x72,0x4a,0x41,0x5b,0x55,0x3c,0x7a,0x34,0x43, + 0x51,0xaf,0x79,0x4e,0x43,0x38,0xa7,0x73,0x3a,0x41,0x77,0x55,0x43,0x7a,0x35,0xb5, + 0x52,0x55,0x79,0x5c,0x43,0x3c,0x55,0x73,0xbc,0x41,0xa5,0x55,0x4a,0x7a,0x37,0x23, + 0x52,0x2d,0x79,0x6a,0x43,0x3f,0xa7,0x74,0xac,0x41,0xc1,0x55,0x51,0x7a,0x39,0x63, + 0x53,0x45,0x79,0x78,0x43,0x43,0x55,0x71,0x31,0x32,0x47,0x55,0x57,0x7a,0x3a,0xb5, + 0x53,0x75,0x79,0x24,0x43,0x46,0x55,0x76,0x6a,0x42,0x63,0x55,0x5e,0x7a,0x3c,0x23, + 0x53,0xbf,0x79,0xa4,0x43,0x49,0xa7,0x77,0x5a,0x42,0xa1,0x55,0x65,0x7a,0x3e,0x63, + 0x54,0x65,0x79,0xb2,0x43,0x4d,0x55,0x78,0x4a,0x42,0xad,0x55,0x6c,0x7a,0x40,0x43, + 0x54,0xaf,0x79,0xc0,0x43,0x50,0xa7,0x79,0x3a,0x43,0x37,0x55,0x73,0x7a,0x41,0xb5, + 0x55,0x55,0x7a,0x3c,0x43,0xc0,0xc1,0xb1,0x52,0x6c,0x7d,0x57,0xb6,0x41,0x2d,0xa4, + 0x58,0x49,0xbc,0xa9,0x4e,0x6a,0x76,0x5f,0x63,0x44,0x7d,0xb5,0xb6,0x43,0x2d,0xa8, + 0x78,0x4a,0xa4,0xa9,0x62,0x6a,0x25,0x3f,0x65,0xae,0x7e,0x5f,0xb6,0x61,0x4d,0xb0, + 0x78,0x4c,0x6e,0xa9,0xc1,0x6a,0x77,0xb3,0x53,0x5b,0xaa,0xa2,0x49,0x43,0x47,0x51, + 0x56,0x7c,0x3f,0x63,0xaa,0x7d,0x2b,0x44,0x47,0x7d,0xa8,0x26,0x4a,0x66,0xa9,0x5e, + 0x7a,0x7c,0x23,0x63,0xba,0x7d,0x30,0x64,0x49,0x35,0xa9,0x3a,0x4a,0x74,0xa9,0x62, + 0x5a,0x7d,0x67,0x64,0x41,0x7d,0xa7,0x64,0x4a,0x4d,0xa9,0x5a,0x4a,0x7b,0xa9,0x61, + 0x36,0xb7,0x76,0x6e,0x3c,0x60,0x56,0x7c,0xad,0x5b,0xbd,0x71,0x2f,0x2d,0x28,0x27, + 0x26,0xb8,0xbc,0x6e,0x64,0x60,0x45,0xb4,0x2e,0x43,0xbe,0x53,0x2f,0xb0,0x28,0x2e, + 0x36,0xba,0x5a,0x6e,0x6b,0x71,0xb4,0x3c,0xbf,0x7b,0xc2,0x5d,0x30,0xaa,0x28,0xa3, + 0x67,0x38,0x6a,0x6f,0x35,0x61,0x69,0x5c,0xc1,0x53,0xc2,0xbf,0x30,0x33,0x29,0x31, + 0xa9,0x38,0x5a,0x70,0xb0,0x60,0xc1,0x3c,0xb4,0x7c,0x31,0xad,0xa3,0x44,0x49,0x34, + 0x67,0x31,0x6e,0x71,0x3e,0x61,0x3b,0x5d,0x33,0x2c,0x31,0x45,0xa3,0x50,0x29,0x35, + 0x47,0x34,0xa4,0x71,0xbc,0x61,0x4f,0xaf,0x38,0x24,0x32,0x36,0xbe,0xc2,0x31,0xc2, + 0xbd,0x5b,0x4b,0x55,0x78,0x7a,0x43,0x43,0x55,0x7d,0x7a,0x46,0x43,0x56,0xa7,0x7a, + 0x7a,0x43,0x67,0x55,0xa1,0x7a,0x44,0xb5,0x56,0x35,0x7a,0x54,0x43,0x5a,0x55,0x7b, + 0x6a,0x43,0x23,0x55,0x26,0x7a,0x46,0x23,0x56,0x6d,0x7a,0x62,0x43,0x5d,0xa7,0x7c, + 0x5a,0x43,0xb1,0x55,0x2d,0x7a,0x48,0x63,0x56,0xb7,0x7a,0x70,0x43,0x61,0x55,0x7d, + 0x4a,0x44,0x3b,0x55,0xa6,0x7a,0x4a,0x43,0x57,0x5d,0x7a,0x7e,0x43,0x64,0xa7,0x7e, + 0x3a,0x44,0x57,0x55,0xad,0x7a,0x4b,0xb5,0x57,0xa7,0x7a,0x2c,0x43,0x68,0x55,0x7e, + 0xbc,0x44,0x73,0x55,0xb4,0x7a,0x4d,0x23,0x58,0x4d,0x7a,0xae,0x43,0x6c,0x55,0xa1, + 0xbc,0x44,0xa5,0x55,0xbc,0x7a,0x4f,0x23,0x58,0x2d,0x7a,0xbc,0x43,0x6f,0xa7,0xa2, + 0xac,0x44,0xc1,0x56,0x31,0x7a,0x51,0x63,0x59,0x45,0x7b,0x38,0x43,0x73,0x55,0x21, + 0x2a,0x41,0x31,0x32,0x37,0x7a,0x52,0xb5,0x59,0x75,0x7b,0x44,0x43,0x76,0x55,0x22, + 0x6a,0x45,0x63,0x56,0x3e,0x7a,0x54,0xb5,0x5a,0x35,0x7b,0x54,0x43,0x7a,0x55,0x23, + 0x6a,0x45,0x23,0x56,0x46,0x7a,0x56,0x23,0x5a,0x6d,0x7b,0x62,0x43,0x7d,0xa7,0x24, + 0x5a,0x45,0xb1,0x56,0x4d,0x7a,0x58,0x63,0x5a,0xb7,0x7b,0x70,0x43,0x21,0x55,0x25, + 0x4a,0x46,0x3b,0x56,0x54,0x7a,0x5a,0x43,0x5b,0x5d,0x7b,0x7e,0x43,0x24,0xa7,0x7e, + 0x57,0x34,0xb8,0x72,0x47,0x61,0x57,0x7d,0x3b,0xae,0x33,0x6b,0xa3,0x72,0x29,0x43, + 0x57,0x35,0x62,0x72,0x4c,0x61,0x6c,0x3d,0x3c,0x2c,0x33,0xa5,0xa3,0xb1,0x29,0x4c, + 0x37,0x37,0x4a,0x72,0x2b,0x61,0x5e,0x3d,0x33,0x34,0x35,0x7d,0xa4,0x3b,0x29,0x55, + 0x67,0x40,0x22,0x71,0x31,0x61,0x74,0x7d,0x43,0x2c,0x36,0x45,0xa4,0x6b,0x29,0x66, + 0x77,0x3d,0x22,0x74,0x58,0x61,0xb0,0xaf,0x4e,0x54,0x38,0xad,0xa4,0xb1,0x28,0xb9, + 0x6a,0x68,0x57,0x5c,0xae,0x7b,0xbf,0x63,0x30,0x4d,0x28,0xae,0x46,0xbe,0x56,0x70, + 0x7a,0x60,0xbd,0x5b,0x34,0x7c,0x32,0x43,0xa3,0x65,0x29,0x42,0x47,0x36,0x56,0x72, + 0x6a,0x61,0x63,0x5d,0x3e,0x7c,0x34,0xb5,0xa4,0x45,0x29,0x5c,0x47,0x3c,0x56,0x73, + 0xbc,0x61,0xa9,0x5d,0x4b,0x7c,0x3c,0x3a,0xa6,0xbe,0x79,0x5b,0xa5,0x4b,0x2c,0x3b, + 0x77,0xa5,0xb4,0x29,0x7b,0x67,0x59,0xb0,0x79,0x5c,0x63,0x51,0xaf,0x7b,0x4c,0x42, + 0x77,0xa6,0x52,0x29,0xac,0x67,0x4e,0x3e,0x78,0x64,0x63,0x3d,0xaf,0x25,0x2c,0x4b, + 0x37,0xa9,0x22,0x2a,0x5e,0x67,0x6e,0xb0,0xa2,0x74,0x64,0xa5,0xaf,0xae,0x2c,0x47, + 0x57,0xaa,0x32,0x2a,0x27,0x67,0x6f,0x7e,0xa1,0x2c,0x64,0x2d,0xaf,0x29,0x2c,0x4b, + 0x67,0xaa,0x6e,0x2a,0xc1,0xc0,0xc2,0x71,0x70,0xbf,0x77,0x22,0x43,0x25,0xa7,0x26, + 0x5a,0x46,0x5f,0x56,0x5d,0x7a,0x5c,0x63,0x5b,0xbf,0x7b,0xa4,0x43,0x29,0xa7,0x27, + 0x5a,0x46,0xa1,0x56,0x65,0x7a,0x5e,0x63,0x5c,0x65,0x7b,0xb2,0x43,0x2d,0x55,0x28, + 0x4a,0x46,0xad,0x56,0x6c,0x7a,0x60,0x43,0x5c,0xaf,0x7b,0xc0,0x43,0x30,0xa7,0x29, + 0x3a,0x47,0x37,0x56,0x73,0x7a,0x61,0xb5,0x5d,0x55,0x7c,0x3c,0x43,0xa6,0x55,0x29, + 0xbc,0x47,0x57,0x56,0x7b,0x7a,0x63,0xb5,0x5d,0xa7,0x7c,0x4c,0x43,0xaa,0x55,0x2a, + 0xbc,0x47,0x73,0x56,0x22,0x7a,0x65,0x23,0x5e,0x4d,0x7c,0x5a,0x43,0xad,0xa7,0x2b, + 0xac,0x47,0x2f,0x56,0x29,0x7a,0x67,0x63,0x5e,0x25,0x7c,0x68,0x43,0xb1,0x55,0x2c, + 0x2a,0x47,0xbd,0x56,0x30,0x7a,0x69,0x43,0x5f,0x3d,0x7c,0x76,0x43,0xb4,0xa7,0x2d, + 0x7a,0x48,0x47,0x56,0xa9,0x7a,0x6a,0xb5,0x5f,0x75,0x79,0x31,0x31,0xb7,0xa7,0x2e, + 0x5a,0x48,0x5f,0x56,0xaf,0x7a,0x6c,0x63,0x5f,0xb7,0x7c,0x30,0x43,0xbb,0x55,0x2f, + 0x4a,0x48,0x7b,0x56,0xb6,0x7a,0x6e,0x43,0x60,0x5d,0x7c,0xb0,0x43,0xbe,0xa7,0x30, + 0x3a,0x48,0xa9,0x56,0xbd,0x7a,0x6f,0xc2,0x6a,0x48,0xb5,0x56,0xc0,0x7a,0x70,0x23, + 0x60,0xbf,0x79,0x32,0x44,0x31,0xa7,0xa3,0x5a,0x49,0x3f,0x57,0x35,0x7a,0x72,0x63, + 0x61,0x65,0x7d,0x40,0x44,0x35,0x55,0xa4,0x4a,0x4a,0xa8,0x2b,0x58,0x67,0x74,0x3e, + 0x25,0x4c,0x66,0x41,0xb0,0x34,0x2c,0x51,0x77,0xab,0xa8,0x2b,0x3f,0x67,0x7b,0xb0, + 0x25,0xae,0x65,0x2d,0xb0,0x4b,0x2c,0x54,0x57,0xad,0x6e,0x2b,0x23,0x67,0x26,0x3e, + 0x24,0x4c,0x67,0x53,0xb0,0x68,0x2c,0x64,0xa9,0xb0,0x32,0x2b,0x2f,0x67,0xa7,0xb0, + 0x2a,0x54,0x66,0x69,0xb0,0x61,0x4c,0x60,0x77,0xae,0x3e,0x2b,0x4b,0x68,0x62,0xb0, + 0x2d,0x5c,0x68,0x6d,0xb0,0x38,0x4c,0x28,0xb9,0xb2,0x32,0x2b,0x42,0x68,0x6a,0x7e, + 0x2e,0xae,0x68,0x63,0xb0,0x3c,0x4c,0x26,0x67,0xab,0x62,0x2e,0x5f,0x67,0x7b,0xb0, + 0xa9,0xb6,0x6a,0x4d,0xb1,0x66,0x2c,0x27,0x57,0xb5,0xc0,0x2e,0x37,0x68,0x45,0xb0, + 0xa8,0x54,0x69,0xa7,0xb1,0x43,0x2c,0x79,0x77,0xb9,0xc0,0x2e,0x62,0x68,0x57,0x3e, + 0xb1,0x34,0x69,0x2b,0xb2,0xb4,0x4c,0x25,0x27,0xb8,0x4e,0x2e,0x6e,0x68,0x5f,0xb0, + 0xae,0x6c,0x6c,0x5f,0xb1,0x2b,0x4c,0x2a,0xb9,0xb7,0x6e,0x2e,0x73,0x68,0x58,0xb0, + 0xa9,0x44,0x6e,0x3d,0xb2,0x54,0x2c,0xa7,0x77,0xbb,0x26,0x30,0xbc,0x68,0x3c,0xb0, + 0xb6,0x64,0x6e,0x47,0xb2,0x6b,0x4c,0xa8,0x57,0xbb,0x56,0x2f,0x5a,0x68,0xa5,0x5e, + 0xbb,0xae,0x6f,0x49,0xb2,0x6d,0x4c,0xb1,0x57,0xbe,0xb4,0x2f,0xbd,0x68,0xb7,0x70, + 0x70,0xb3,0x40,0xc1,0x64,0x36,0x55,0xa4,0x6a,0x49,0x63,0x57,0x3e,0x7a,0x74,0x23, + 0x61,0xbf,0x7d,0x52,0x44,0x39,0xa7,0xa5,0x5a,0x49,0xa1,0x57,0x45,0x7a,0x76,0x63, + 0x62,0x65,0x7d,0x60,0x44,0x3d,0x55,0xa6,0x4a,0x49,0xad,0x57,0x4c,0x7a,0x78,0x43, + 0x62,0xaf,0x7d,0x6e,0x44,0x40,0xa7,0xa7,0x3a,0x4a,0x37,0x57,0x53,0x7a,0x79,0xb5, + 0x63,0x55,0x7d,0x7c,0x44,0x44,0x55,0xa7,0xbc,0x4a,0x53,0x57,0x5a,0x7a,0x7b,0x23, + 0x63,0x2d,0x7d,0x2a,0x44,0x47,0xa7,0xa8,0xac,0x4a,0x6f,0x57,0x61,0x7a,0x7d,0x63, + 0x64,0x45,0x7d,0xaa,0x44,0x4b,0x55,0xa9,0x2a,0x4a,0x2b,0x57,0x68,0x7a,0xa1,0x43, + 0x64,0x7d,0x7d,0xb8,0x44,0x4e,0xa7,0xaa,0x7a,0x4a,0xb9,0x57,0x70,0x7a,0x21,0x43, + 0x65,0x3d,0x7e,0x36,0x44,0x52,0xa7,0xab,0x7a,0x4b,0x47,0x57,0x77,0x7a,0x22,0xb5, + 0x65,0x75,0x7e,0x44,0x44,0x31,0x31,0x3a,0x5a,0x4b,0x5f,0x57,0x7d,0x7a,0x24,0x63, + 0x65,0xb7,0x7e,0x50,0x44,0x59,0x55,0xad,0x4a,0x4b,0x7b,0x57,0x24,0x7a,0x26,0x43, + 0x66,0x5d,0x7e,0x5e,0x44,0x5c,0xa7,0xae,0x3a,0x4b,0xa9,0x57,0x2b,0x7a,0x27,0xb5, + 0x66,0xa7,0x7e,0x6c,0x44,0x60,0x55,0xae,0xbc,0x4c,0x33,0x57,0xa4,0x7a,0x29,0x23, + 0x67,0x4d,0x7e,0x7a,0x44,0x63,0xa7,0xaf,0xac,0x4c,0x4f,0x57,0xab,0x7a,0x2b,0x63, + 0x67,0x2d,0xa2,0x43,0xb2,0x24,0x2c,0xba,0x47,0xc0,0x2a,0x30,0x73,0x68,0xbb,0x5e, + 0xc1,0xb6,0x70,0x6d,0xb2,0xb3,0x4c,0xc0,0xb9,0xbb,0xac,0xa3,0x54,0x69,0x37,0xb1, + 0x34,0x7c,0x71,0xad,0xb3,0x58,0x2d,0x3c,0xaa,0x35,0x32,0x68,0x35,0x5e,0xa8,0x5c, + 0x6a,0x4b,0xb1,0x7b,0x2c,0x2d,0x47,0xa8,0xba,0x5d,0xbd,0x65,0x65,0x63,0x6a,0x3c, + 0x6f,0xb5,0xaf,0xa4,0x3a,0xbb,0x47,0xab,0xbb,0xb3,0x4f,0x48,0x67,0x78,0xb7,0xb4, + 0xc0,0x5d,0x70,0x7c,0x40,0xba,0x54,0xbf,0x79,0xc2,0x57,0x50,0xa9,0x78,0xbf,0xb4, + 0xc1,0x75,0x6d,0x3c,0x41,0x33,0x55,0x32,0x6a,0x32,0x4b,0x51,0x42,0x79,0x34,0x63, + 0x32,0x65,0x71,0x74,0x41,0x4b,0xa7,0x37,0xac,0x32,0x67,0x51,0x60,0x79,0x42,0x43, + 0x36,0x3d,0x72,0x56,0x41,0x59,0x55,0x3e,0x3a,0x33,0xa5,0x51,0xa5,0x79,0x47,0xb5, + 0x3c,0x7c,0x4a,0xac,0x41,0x6f,0xa7,0x41,0x5a,0x35,0x53,0x52,0x34,0x79,0x53,0xb5, + 0x36,0x33,0xc0,0x5f,0x30,0x5c,0x48,0xae,0x36,0xbc,0xb0,0x6a,0x5c,0x5b,0x45,0x3c, + 0x76,0x7b,0xb4,0xa5,0x2c,0x62,0x28,0x3d,0xa8,0xa8,0xb4,0xc1,0x5b,0x60,0x7b,0x5c, + 0xb5,0xad,0xc0,0xac,0x33,0x4f,0x48,0xaa,0x6a,0x2c,0x6a,0x6a,0x32,0x5d,0xa3,0xae, + 0x49,0xad,0xa9,0x23,0x2a,0x26,0x47,0x65,0x70,0x30,0xbb,0x38,0xc2,0x2c,0x2c,0x43, + 0x67,0xaf,0x7e,0x2e,0x44,0x68,0xa7,0xb1,0x3a,0x4c,0x77,0x57,0xb5,0x7a,0x2d,0xb5, + 0x68,0x55,0x7e,0xae,0x44,0x6c,0x55,0xb1,0xbc,0x4c,0xa5,0x57,0xbc,0x7a,0x2f,0x23, + 0x68,0x2d,0x7e,0xbc,0x44,0x6f,0xa7,0xb2,0xac,0x4c,0xc1,0x58,0x31,0x7a,0xa3,0x63, + 0x69,0x45,0xa1,0x38,0x44,0x73,0x55,0xb3,0x2a,0x4d,0x4b,0x58,0x38,0x7a,0xa5,0x43, + 0x69,0x7d,0xa1,0x46,0x44,0x76,0xa7,0xb4,0x7a,0x4d,0x67,0x58,0x3f,0x7a,0xa7,0x43, + 0x6a,0x3d,0xa1,0x56,0x44,0x7a,0xa7,0xb5,0x7a,0x4d,0x27,0x58,0x47,0x7a,0xa8,0xb5, + 0x6a,0x75,0xa1,0x64,0x44,0x7e,0x55,0xb6,0x6a,0x4d,0xb5,0x58,0x4e,0x7a,0xaa,0x23, + 0x6a,0xbf,0xa1,0x72,0x44,0x21,0xa7,0xb7,0x5a,0x4e,0x3f,0x58,0x55,0x7a,0xac,0x63, + 0x6b,0x65,0xa1,0xa2,0x44,0x25,0x55,0xb8,0x4a,0x4e,0x5b,0x58,0x5c,0x7a,0x71,0x31, + 0x3b,0xa7,0xa1,0x2c,0x44,0x28,0x55,0xb8,0xbc,0x4e,0x73,0x58,0x62,0x7a,0xaf,0x23, + 0x6c,0x4d,0xa1,0xac,0x44,0x2b,0xa7,0xb9,0xac,0x4e,0x2f,0x58,0x69,0x7a,0xb1,0x63, + 0x6c,0x25,0xa1,0xba,0x44,0x2f,0x55,0xba,0x2a,0x4e,0xbd,0x58,0x70,0x7a,0xb3,0x43, + 0x6d,0x3d,0xa2,0x36,0x44,0xa4,0xa7,0xbb,0x7a,0x4f,0x47,0x58,0x77,0x7a,0xb4,0xb5, + 0x6d,0x75,0xa2,0x44,0x44,0xa8,0xa7,0xbc,0x7a,0x4f,0x67,0x58,0x48,0x5d,0xb5,0x7c, + 0x4b,0x2b,0xa9,0x6d,0x2a,0x23,0x47,0x6b,0x56,0x7e,0x7a,0x64,0x60,0x5d,0xb8,0xae, + 0x4c,0xb5,0xa7,0x3b,0x2b,0x34,0x47,0x2c,0x26,0x79,0x52,0x66,0xa6,0x5d,0xb9,0x3c, + 0x50,0x7b,0xa7,0x49,0x2b,0x35,0x27,0x77,0x56,0x22,0x22,0x65,0x42,0x5e,0x39,0xae, + 0x52,0x4b,0xac,0x31,0x2b,0x64,0x27,0x7a,0x56,0x23,0x26,0x65,0x6d,0x5e,0x49,0x7c, + 0x58,0x5b,0xae,0x2a,0x31,0x26,0x47,0x24,0x66,0x24,0x2e,0x65,0xbd,0x5e,0x60,0x7c, + 0x5f,0x2b,0xad,0xa7,0x2b,0xac,0x47,0x2b,0x76,0x26,0xa4,0x66,0xa3,0x5e,0x69,0xae, + 0x60,0x3b,0xae,0x5d,0x2b,0xb6,0x47,0x2c,0x36,0x27,0xb4,0x65,0x3a,0x5e,0x76,0xae, + 0x62,0x63,0xaf,0xa7,0x2c,0x4c,0x27,0xab,0x36,0x29,0x26,0x69,0x4d,0x5f,0x47,0x7c, + 0x67,0x5b,0xb0,0xa9,0x2c,0x59,0x27,0xad,0x66,0x2c,0x3a,0x67,0xb8,0x7e,0x4e,0xb6, + 0x58,0x75,0xac,0xb8,0x4b,0x70,0xa9,0xa2,0x2a,0x25,0x33,0x66,0x32,0x7e,0x52,0x64, + 0x59,0x75,0xad,0x46,0x4b,0x79,0x57,0x23,0x5a,0x25,0xa1,0x66,0x47,0x7e,0x57,0x44, + 0x5a,0x2d,0xad,0x6a,0x4b,0xa1,0xa9,0x24,0xbc,0x26,0x33,0x66,0x53,0x7e,0x59,0xb6, + 0x5b,0x5d,0xad,0xa2,0x4b,0xa2,0x30,0x25,0x48,0xb8,0x3e,0xc0,0x56,0x70,0x5b,0x40, + 0xad,0xa2,0xb2,0xbf,0x34,0xc2,0xa1,0x6a,0xac,0x4f,0x6f,0x58,0x21,0x7a,0xb7,0x63, + 0x6e,0x45,0xa2,0x58,0x44,0xad,0x55,0xbd,0x2a,0x4f,0x2f,0x58,0x29,0x7a,0xb9,0x63, + 0x6e,0x25,0xa2,0x68,0x44,0xb1,0x55,0xbe,0x2a,0x4f,0xbd,0x58,0x30,0x7a,0xbb,0x43, + 0x6f,0x3d,0xa2,0x76,0x44,0xb4,0xa7,0xbf,0x7a,0x50,0x47,0x58,0xa9,0x7a,0xbc,0xb5, + 0x6f,0x75,0xa2,0x24,0x44,0xb8,0x55,0xc0,0x6a,0x50,0x63,0x58,0xb0,0x7a,0xbe,0x23, + 0x6f,0xbf,0xa2,0xa4,0x44,0xbb,0xa7,0xc1,0x5a,0x50,0xa1,0x58,0xb7,0x7a,0xc0,0x63, + 0x70,0x65,0xa2,0xb2,0x44,0xbf,0x55,0xc2,0x4a,0x50,0xad,0x58,0xbe,0xc0,0xa7,0xc2, + 0x7a,0x50,0xb9,0x58,0xc1,0x7a,0xc2,0xb5,0x61,0x35,0x21,0x34,0x45,0x32,0x56,0x31, + 0x6a,0x51,0x43,0x59,0x36,0x7b,0x32,0x23,0x71,0x6d,0x21,0x42,0x45,0x35,0xa8,0x32, + 0x5a,0x51,0x5f,0x59,0x3d,0x7b,0x34,0x63,0x71,0x31,0x31,0x4e,0x45,0x38,0xa8,0x33, + 0x3a,0x51,0x77,0x59,0x43,0x7b,0x35,0xb5,0x72,0x55,0x21,0x5c,0x45,0x3c,0x56,0x33, + 0xbc,0x51,0xa5,0x59,0x4a,0x7b,0x37,0x23,0x72,0x2d,0x21,0x6a,0x45,0x3f,0xa8,0x34, + 0xac,0x51,0xc1,0x59,0x51,0x7b,0x39,0x63,0x73,0x45,0x21,0x78,0x45,0x43,0x56,0x35, + 0x2a,0x52,0x4b,0x59,0x58,0x7b,0x3b,0x43,0x73,0x7d,0x21,0x26,0x45,0x46,0xa8,0x36, + 0x7a,0x52,0x67,0x59,0x5f,0x7b,0x5c,0x60,0xae,0x34,0xbd,0xbf,0xc1,0xa3,0x50,0x29, + 0x48,0xb9,0x3a,0xc0,0x7a,0x70,0x63,0xb2,0xaf,0xa6,0xbe,0x51,0xc1,0xad,0x50,0x2b, + 0xba,0xb9,0xb0,0xc0,0xa3,0x70,0x69,0x60,0xb1,0x74,0xbe,0x27,0xc1,0xba,0x50,0x2e, + 0xba,0xba,0x76,0xc0,0xb5,0x70,0x34,0x60,0xc2,0x64,0xbe,0xb7,0xc1,0xc0,0xc1,0xb2, + 0xb2,0xb6,0xbb,0x33,0xc2,0x32,0x50,0xa3,0x68,0xbb,0x4e,0xc1,0x39,0x70,0x73,0xb2, + 0xb3,0xa6,0xbf,0x4f,0xc2,0x39,0x30,0xa5,0x58,0xbb,0x2e,0xc1,0x4a,0x70,0x78,0x40, + 0xb4,0x2c,0xbf,0x6f,0xc2,0x41,0x30,0xa7,0x58,0xbc,0x3e,0xc1,0x55,0x70,0x7a,0x60, + 0xb5,0x64,0xbf,0xa1,0xc2,0x46,0x50,0xa8,0x68,0xbc,0x62,0xc1,0x5e,0x70,0x7c,0xb2, + 0xb6,0x34,0xbf,0xa5,0xc2,0x4a,0x50,0xa9,0x68,0xbc,0x26,0xc1,0xbd,0x60,0x50,0xb1, + 0x2e,0x2b,0xb7,0xbf,0xb8,0x7b,0xa7,0x42,0xaa,0x4d,0x76,0xaa,0x5f,0x6a,0xab,0xa1, + 0x6a,0xbe,0xa2,0x4f,0xb6,0xa4,0x4d,0xbd,0x48,0x4e,0x2e,0xaa,0x64,0x6a,0xb3,0x3f, + 0x6d,0x7c,0xa2,0x41,0xb6,0xb5,0x2d,0xbe,0x48,0x4c,0xb5,0x61,0x3b,0x6b,0x6b,0x5f, + 0x6f,0x6c,0xa2,0x6d,0xb6,0x2e,0x4d,0xc1,0x58,0x49,0x6e,0xab,0x5b,0x6b,0x47,0xb1, + 0x73,0x64,0x21,0x7b,0xb7,0x45,0x4e,0x37,0x38,0x52,0x6a,0xab,0x5d,0xc0,0xc2,0x71, + 0x70,0xbc,0x5d,0x30,0x45,0x49,0x56,0x37,0x4a,0x52,0x7b,0x59,0x64,0x7b,0x3e,0x43, + 0x74,0x5d,0x21,0xb0,0x45,0x4c,0xa8,0x38,0x3a,0x52,0xa9,0x59,0x6b,0x7b,0x3f,0xb5, + 0x74,0xa7,0x21,0xbe,0x45,0x50,0xa8,0x39,0x3a,0x53,0x37,0x59,0x73,0x7b,0x41,0xb5, + 0x75,0x55,0x22,0x3c,0x45,0x54,0x56,0x39,0xbc,0x53,0x53,0x59,0x7a,0x7b,0x43,0x23, + 0x75,0x2d,0x22,0x4a,0x45,0x57,0xa8,0x3a,0xac,0x53,0x6f,0x59,0x21,0x7b,0x45,0x63, + 0x76,0x45,0x22,0x58,0x45,0x5b,0x56,0x3b,0x2a,0x53,0x2b,0x59,0x28,0x7b,0x47,0x43, + 0x76,0x7d,0x22,0x66,0x45,0x5e,0xa8,0x3c,0x7a,0x53,0xb9,0x59,0x2f,0x7b,0x48,0xb5, + 0x77,0x35,0x22,0x74,0x45,0x62,0x56,0x3d,0x6a,0x54,0x43,0x59,0xa8,0x7b,0x4a,0x23, + 0x77,0x6d,0x22,0x22,0x45,0x65,0xa8,0x3e,0x5a,0x54,0x63,0x59,0xb0,0x7b,0x4c,0x23, + 0x77,0xbf,0x21,0x31,0x31,0x69,0x56,0x3f,0x4a,0x54,0x7b,0x59,0xb6,0x7b,0x4e,0x43, + 0x78,0x5d,0x22,0xb0,0x45,0x6c,0xa8,0x40,0x3a,0x54,0xa9,0x59,0xbd,0x7b,0x4f,0xb5, + 0x78,0xa7,0x22,0xbe,0x45,0x70,0x56,0x40,0xbc,0x55,0x33,0x5a,0x32,0x7b,0x51,0x23, + 0x79,0x4d,0x23,0x3a,0x45,0x79,0xa8,0x43,0xac,0x55,0xa5,0x5a,0x78,0x7b,0x64,0xb5, + 0x7e,0x4d,0x24,0x5a,0x45,0xb0,0x56,0x4d,0xac,0x58,0xb2,0xba,0x45,0x3f,0x56,0x55, + 0x3a,0x59,0xb0,0xab,0x4b,0x6b,0x41,0x5f,0x76,0xa6,0x22,0x5f,0xb7,0x5b,0x2e,0x3c, + 0x48,0x54,0x2e,0xab,0xb0,0x6b,0x50,0xa1,0x7a,0xa6,0x23,0x4d,0xb7,0x71,0x4e,0x41, + 0x48,0x55,0x4e,0xac,0x3c,0x6b,0x58,0xa1,0x7b,0x74,0x23,0x23,0xb7,0x79,0x4e,0x45, + 0xba,0x57,0x7a,0xac,0x6b,0x6b,0x6b,0x23,0xc1,0x2d,0x30,0x2a,0x48,0x57,0x4a,0xad, + 0x67,0x6b,0xbc,0xa1,0x79,0x64,0x2b,0x5d,0xbd,0x5c,0x4f,0x3f,0xaa,0x66,0x4a,0xb1, + 0x67,0x6d,0xa4,0xa2,0x58,0x64,0x2e,0x5d,0xbd,0x74,0x4f,0x6d,0xaa,0x27,0x2a,0xb4, + 0x67,0x6c,0x2e,0xa1,0xbf,0x64,0xbf,0x3d,0xb3,0x7c,0x54,0x61,0xaa,0x36,0x4b,0x4e, + 0x47,0x6e,0x72,0xa1,0x3d,0x65,0x67,0x5d,0xbe,0x5c,0x50,0x65,0xaa,0x2a,0x2a,0xbe, + 0x27,0x69,0x32,0x22,0x74,0x64,0xb1,0x3d,0xc1,0x44,0x4d,0x4d,0xab,0xa3,0x2a,0xc2, + 0x27,0x6a,0x7a,0x21,0x64,0x65,0x49,0x3e,0x37,0x3c,0x52,0x4d,0xab,0x62,0x4b,0x39, + 0x77,0x74,0x42,0x22,0x34,0x65,0x38,0x5e,0x36,0x5c,0x52,0x7d,0xab,0x51,0x2b,0x3d, + 0xb9,0x73,0x32,0x21,0x6f,0x65,0x43,0x7e,0x35,0x7c,0x51,0x23,0xab,0x2b,0x2b,0x42, + 0xb9,0x74,0x22,0x21,0xba,0x65,0x55,0xb0,0x37,0x2c,0x54,0x35,0xab,0x68,0x4b,0x70, + 0x77,0x71,0xc0,0x23,0x51,0x65,0xc1,0x70,0x70,0xb3,0x40,0xc2,0x54,0x44,0xa8,0x57, + 0x6a,0x5a,0xb9,0x5b,0x74,0x7b,0x23,0x43,0x25,0x2d,0x26,0x5c,0x46,0x5e,0x56,0x5d, + 0x3a,0x5c,0x6b,0x5b,0xb7,0x7b,0x2e,0x63,0x28,0x6d,0x26,0xb4,0x46,0x6d,0xa8,0x60, + 0x5a,0x5c,0xb1,0x5b,0xbf,0x7b,0x30,0x63,0x28,0xb7,0x27,0x32,0x46,0x71,0xa8,0x61, + 0x5a,0x5d,0x3f,0x5c,0x35,0x7b,0xa4,0x63,0x29,0x65,0x27,0x40,0x46,0x75,0x56,0x62, + 0x4a,0x5d,0x5b,0x5c,0x3c,0x7b,0xa6,0x43,0x29,0xaf,0x27,0x4e,0x46,0x78,0xa8,0x63, + 0x3a,0x5d,0x77,0x5c,0x43,0x7b,0xa7,0xb5,0x2a,0x55,0x27,0x5c,0x46,0x7c,0x56,0x63, + 0xbc,0x5d,0xa5,0x5c,0x4a,0x7b,0xa9,0x23,0x2a,0x2d,0x27,0x6a,0x46,0xa1,0xa8,0x64, + 0xac,0x5d,0xc1,0x5c,0x51,0x7b,0xab,0x63,0x2b,0x45,0x27,0x78,0x46,0x23,0x56,0x65, + 0x2a,0x5e,0x4b,0x5c,0x58,0x7b,0xad,0x43,0x2b,0x7d,0x27,0x26,0x46,0x31,0x31,0x46, + 0x6a,0x5e,0x63,0x5c,0x5e,0x7b,0xae,0x23,0x2b,0xbf,0x27,0xa4,0x46,0x29,0xa8,0x67, + 0x5a,0x5e,0xa1,0x5c,0x65,0x7b,0xb0,0x63,0x2c,0x65,0x27,0xb2,0x46,0x2d,0x56,0x68, + 0x4a,0x5e,0xad,0x5c,0x6c,0x7b,0xb2,0x43,0x2c,0xaf,0x27,0xc0,0x46,0x30,0xa8,0x69, + 0x3a,0x5f,0x37,0x5c,0x73,0x7b,0xb3,0xb5,0x2d,0x55,0x28,0x3c,0x46,0xa6,0x56,0x69, + 0xbc,0x5f,0x53,0x5c,0x7a,0x7b,0xb5,0x23,0x2d,0x2d,0x25,0x79,0xac,0xbb,0x4b,0x32, + 0x67,0x79,0x36,0x23,0x28,0x65,0xbb,0xb0,0x32,0x34,0x56,0xa5,0xac,0x4d,0x2b,0x5d, + 0x37,0x7b,0x3a,0x23,0x2e,0x65,0xa4,0x3e,0x47,0x2c,0x57,0x31,0xac,0x7d,0x4b,0x60, + 0x37,0x7a,0x22,0x24,0x7d,0x65,0xa4,0xb0,0x49,0x74,0x58,0x4d,0xac,0x75,0x2b,0x5d, + 0xa9,0x7c,0x3e,0x23,0xbc,0x65,0xa9,0xb0,0x4b,0x6c,0x57,0xb9,0xac,0x26,0x2b,0x66, + 0x27,0xa1,0x22,0x24,0x62,0x65,0xb3,0x5e,0x4d,0x24,0x58,0x6f,0xac,0x7b,0x2b,0x6d, + 0x37,0x7d,0x66,0x24,0xc2,0x65,0x7c,0xb0,0x5f,0xae,0x55,0x5f,0xad,0x3d,0x4b,0x7d, + 0x27,0x28,0x7a,0x23,0x75,0x66,0x40,0x7e,0x5b,0x34,0x5a,0x51,0xad,0x5e,0x2b,0x77, + 0x27,0x25,0x6a,0x25,0xbc,0x66,0x40,0x5e,0x53,0x74,0x5a,0x61,0xad,0x6f,0x4b,0x23, + 0x47,0x25,0x72,0x26,0x5a,0x66,0x56,0xb0,0x5b,0x2c,0x59,0xb1,0xb6,0x5a,0x4d,0xb3, + 0x47,0x2d,0x3a,0x28,0x38,0x66,0xa4,0x3e,0x6a,0x44,0x5f,0x57,0xae,0x77,0x2b,0xb6, + 0x57,0x2d,0xb0,0x28,0x52,0x66,0xad,0x7e,0x67,0x2d,0x6e,0x2c,0x40,0x69,0xa6,0xb1, + 0x59,0xbe,0xa1,0x4f,0xb8,0x78,0x2e,0x22,0xba,0x75,0x6e,0xb2,0x40,0x6d,0xa6,0xb2, + 0x59,0xbe,0xb5,0x4f,0xc1,0x78,0xa3,0x62,0xbb,0x45,0x6f,0x3a,0x40,0x74,0xa6,0xb4, + 0x70,0x30,0xbb,0x38,0xc2,0x45,0xb6,0x43,0x2d,0xaf,0x28,0x4e,0x46,0xaa,0xa8,0x6b, + 0x3a,0x5f,0x77,0x5c,0x23,0x7b,0xb7,0xb5,0x2e,0x55,0x28,0x5c,0x46,0xae,0x56,0x6b, + 0xbc,0x5f,0xa5,0x5c,0x2a,0x7b,0xb9,0x23,0x2e,0x2d,0x28,0x6a,0x46,0xb1,0xa8,0x6c, + 0xac,0x5f,0xc1,0x5c,0xa3,0x7b,0xbb,0x63,0x2f,0x45,0x28,0x78,0x46,0xb5,0x56,0x6d, + 0x2a,0x60,0x4b,0x5c,0xaa,0x7b,0xbe,0x43,0x30,0xbf,0x25,0x40,0x47,0x3a,0xa8,0x74, + 0x3a,0x61,0xb1,0x5d,0x4f,0x7c,0x39,0x43,0xa5,0x4d,0x29,0x7a,0x47,0x43,0xa8,0x75, + 0xac,0x62,0x4f,0x5d,0x59,0x7c,0x3b,0x63,0xa5,0x2d,0x29,0x2a,0x47,0x47,0xa8,0x76, + 0xbc,0x62,0x73,0x5d,0x68,0x7c,0x3f,0x43,0xa6,0x7d,0x29,0xb8,0x47,0x50,0x56,0x79, + 0x4a,0x63,0x3f,0x5d,0x7b,0x7c,0x44,0x23,0xa7,0xbf,0x2a,0x54,0x47,0x5a,0x56,0x7b, + 0x6a,0x63,0x2b,0x5d,0x28,0x7c,0x31,0x31,0x36,0x75,0x2a,0x64,0x47,0x5e,0x56,0x7c, + 0x7a,0x63,0xb9,0x5d,0x2f,0x7c,0x49,0x43,0xa9,0x4d,0x2a,0x7c,0x47,0x64,0x56,0x7e, + 0x6a,0x64,0x67,0x5d,0xb1,0x7c,0x4c,0xb5,0xaa,0x35,0x2a,0xa6,0x47,0x6a,0xa8,0xa2, + 0x3a,0x64,0xa9,0x5d,0xbd,0x7c,0x4f,0xb5,0xaa,0xa7,0x2a,0xbe,0x47,0x70,0x56,0xa2, + 0xbc,0x65,0x33,0x5e,0x32,0x7c,0x51,0x23,0xab,0x4d,0x2b,0x3a,0x47,0x74,0xa8,0x22, + 0x4a,0x65,0x5b,0x5e,0x3e,0x78,0xa6,0x22,0xbb,0xbf,0x6f,0x62,0x40,0x7e,0x54,0xbc, + 0xab,0xb3,0x5e,0x75,0x48,0x62,0x37,0xaf,0x52,0xbe,0x39,0x75,0xa5,0x41,0x29,0x75, + 0x27,0x42,0x42,0x75,0x5d,0x62,0x6a,0xb3,0x4f,0xbe,0x24,0xab,0xb7,0xc2,0x2e,0x32, + 0xba,0x59,0x76,0xad,0x44,0x6b,0x7e,0x3d,0x2f,0xb6,0x48,0x2f,0xa8,0xbb,0x4a,0x52, + 0x57,0x61,0xa8,0x7d,0xb5,0x64,0x71,0xaf,0xa4,0x5c,0x49,0x31,0xa9,0x73,0x2d,0x4f, + 0xb9,0x61,0xb8,0x7d,0x65,0x64,0x3d,0x5d,0xa6,0x64,0x49,0xad,0xa9,0x34,0x51,0x3c, + 0xb9,0x63,0x22,0x7d,0x72,0x64,0x44,0xaf,0xa8,0x64,0x4a,0x73,0xa9,0x5c,0x2a,0xa1, + 0xb9,0x65,0x42,0x7e,0x3d,0x64,0x5a,0xaf,0xac,0xae,0x4b,0xbf,0xa9,0xb0,0x2a,0x2c, + 0x77,0x68,0x4a,0x7e,0xac,0x64,0x3d,0x22,0x24,0x4d,0x65,0xb0,0x3e,0x4e,0xa6,0x58, + 0x29,0xad,0x33,0x4b,0x76,0x77,0x22,0x22,0x25,0x75,0x66,0x44,0x3e,0x54,0xa6,0x5a, + 0x29,0xad,0x27,0x4b,0x2a,0x77,0xb4,0xb4,0x4d,0x25,0x58,0x48,0x3a,0xa9,0x53,0x6a, + 0xab,0xa1,0x6f,0x44,0x21,0x75,0xb7,0x62,0x47,0xb6,0x7b,0x6f,0xb5,0x5f,0x2d,0x7d, + 0xaa,0x44,0x6e,0xa7,0xc1,0x6a,0x50,0xb1,0x59,0x54,0x7b,0x47,0xb5,0x77,0x2d,0x22, + 0xba,0x45,0x7a,0xa7,0x39,0x62,0x7d,0x7d,0x6c,0x38,0xb2,0xbf,0x34,0xc2,0x22,0xb4, + 0x7a,0x65,0x6b,0x5e,0x42,0x7c,0x55,0x23,0xac,0x4d,0x2b,0x5c,0x47,0x7c,0x56,0x24, + 0x5a,0x65,0xb1,0x5e,0x4e,0x7c,0x58,0x23,0xac,0xbf,0x2b,0x72,0x47,0x21,0xa8,0x25, + 0x5a,0x66,0x3f,0x5e,0x55,0x7c,0x5a,0x63,0xad,0x65,0x2b,0x22,0x47,0x25,0xa8,0x26, + 0x5a,0x66,0x5f,0x5e,0x5d,0x7c,0x5c,0x63,0xad,0xb7,0x2b,0x30,0x47,0x29,0xa8,0x27, + 0x5a,0x66,0x23,0x5e,0x66,0x7c,0x5e,0xb5,0xae,0x75,0x2b,0xb8,0x47,0x2e,0xa8,0x28, + 0xbc,0x67,0x3b,0x5e,0x74,0x7c,0x63,0x43,0xaf,0x25,0x2c,0x48,0x47,0xab,0x56,0x2b, + 0x4a,0x67,0xa1,0x5e,0x25,0x7c,0x66,0x23,0xb0,0x6d,0x2c,0x62,0x47,0xaf,0xa8,0x2c, + 0x5a,0x67,0xb1,0x5e,0x2d,0x7c,0x68,0x63,0xb0,0xb7,0x2c,0x70,0x47,0xb3,0xa8,0x2d, + 0x5a,0x68,0x3f,0x5e,0xa7,0x7c,0x6a,0x63,0xb1,0x65,0x2c,0xa2,0x47,0xb8,0xa8,0x71, + 0x31,0x38,0x63,0x5e,0xb0,0x7c,0x6c,0x23,0xb2,0x35,0x2c,0xa6,0x47,0xbc,0x56,0x2f, + 0x7a,0x68,0x27,0x5e,0xbb,0x7c,0x6f,0x23,0xb2,0x30,0xb1,0x5e,0xbf,0x7c,0x70,0x63, + 0xb2,0xbf,0x29,0x36,0x48,0x32,0xa8,0xa3,0x2a,0x69,0x5b,0x5f,0x3c,0x7c,0x74,0x43, + 0xb4,0x35,0x2d,0x54,0x48,0x3a,0x56,0xa5,0x7a,0x69,0x27,0x5f,0x48,0x7c,0x77,0x43, + 0xb4,0x7d,0x2d,0x66,0x48,0x3e,0xa8,0xa6,0x2a,0x69,0xc1,0x5f,0x51,0x7c,0xa2,0xaf, + 0x7e,0x74,0x41,0x3a,0x31,0xb8,0x4b,0xc1,0x67,0x30,0xb8,0x28,0xb8,0x66,0xc1,0x5e, + 0x61,0x5c,0x61,0x3f,0xaf,0x34,0x4c,0x32,0x27,0xa3,0x26,0x29,0x49,0x67,0x37,0x5e, + 0x72,0x24,0x61,0x73,0xaf,0x45,0x2c,0x35,0x77,0xa4,0x5a,0x29,0x63,0x67,0x3e,0x5d, + 0x26,0x5c,0x46,0x27,0xa8,0x57,0x2d,0x7b,0x58,0x43,0x2a,0xa7,0x61,0x6a,0x49,0x21, + 0xa4,0x63,0x7b,0x70,0x31,0xa1,0x51,0x43,0x69,0x36,0xb5,0x31,0x3b,0x64,0xb2,0x61, + 0x3c,0x3d,0x33,0x28,0x31,0x27,0xa3,0x47,0x79,0x36,0x2f,0x32,0xaa,0x71,0x6b,0x41, + 0x3f,0x7d,0x34,0x26,0x31,0xb0,0xa3,0x49,0x59,0x37,0x43,0x32,0x2a,0x71,0x64,0x61, + 0x3e,0x6d,0x31,0x51,0xaa,0xb1,0xa3,0x4e,0x69,0x38,0x77,0x32,0xb7,0x71,0x6c,0x61, + 0x31,0xaf,0x35,0x4e,0x32,0xbc,0x51,0x50,0x79,0x31,0x26,0xa1,0x43,0x71,0x27,0x22, + 0x74,0x65,0x35,0x6e,0x32,0x47,0x51,0x54,0x39,0x3a,0x7b,0x33,0x79,0x71,0x24,0x41, + 0x46,0x4d,0x36,0xac,0x32,0x5d,0xa3,0x5c,0x59,0x3c,0x77,0x33,0xa3,0x71,0x2b,0x61, + 0x48,0xa7,0x36,0xbe,0x32,0x67,0xa3,0x5d,0xbb,0x3b,0x66,0x62,0x66,0x5e,0x53,0x41, + 0x49,0x45,0x37,0x54,0x32,0xad,0x2c,0x25,0x69,0x3e,0x5b,0x34,0x7d,0x71,0x7a,0x7d, + 0xbf,0x25,0x37,0xba,0x32,0xc0,0xc2,0x71,0x70,0xbf,0x47,0x5f,0x53,0x7c,0x79,0xb5, + 0xb5,0x55,0x2d,0x7c,0x48,0x44,0x56,0xa7,0xbc,0x6a,0x53,0x5f,0x5a,0x7c,0x7b,0xb5, + 0xb5,0xa7,0x2d,0x2e,0x48,0x48,0xa8,0xa9,0x4a,0x6a,0xa1,0x5f,0x65,0x7c,0x7e,0x63, + 0xb6,0x65,0x2d,0xb2,0x48,0x4e,0x56,0xaa,0x6a,0x6a,0xb5,0x5f,0x6e,0x7c,0xa2,0xb5, + 0xb7,0x35,0x2e,0x34,0x48,0x52,0x56,0xab,0x6a,0x6b,0x43,0x5f,0x76,0x7c,0x22,0x23, + 0xb7,0x6d,0x2e,0x42,0x48,0x55,0xa8,0xac,0x5a,0x6b,0x5f,0x5f,0x7d,0x7c,0x24,0x63, + 0xb7,0xb7,0x2e,0x50,0x48,0x59,0x56,0xad,0x4a,0x6b,0x23,0x5f,0x26,0x7c,0x26,0xb5, + 0xb8,0x75,0x2e,0x66,0x48,0x5f,0x56,0xae,0x2a,0x6b,0xc1,0x5f,0xa6,0x7c,0x2a,0x43, + 0xb9,0x65,0x2e,0xa2,0x48,0x65,0x56,0xb0,0x5a,0x6c,0x5f,0x5f,0xaf,0x7c,0x2c,0x63, + 0xb9,0xb7,0x2e,0x30,0x48,0x69,0x56,0xb1,0x4a,0x69,0x31,0x31,0xb5,0x7c,0x2e,0x63, + 0xba,0x6d,0x2e,0xb4,0x48,0x6d,0xa8,0xb2,0x5a,0x6c,0xb1,0x5f,0xc0,0x7c,0x30,0x23, + 0xba,0xbf,0x2f,0x32,0x48,0x71,0xa8,0xb3,0x5a,0x6d,0x3f,0x60,0x35,0x7c,0xa4,0x23, + 0xbb,0x6d,0x2f,0x42,0x48,0x75,0xa8,0xb4,0x5a,0x6d,0x63,0x60,0x3f,0x7c,0xa6,0xb5, + 0xbc,0x35,0x2f,0x58,0x48,0x7b,0xa8,0xb5,0xac,0x6d,0x2f,0x60,0x4a,0x7c,0xa9,0x23, + 0xbc,0x2d,0x2f,0x6a,0x48,0xa1,0xa8,0xbb,0x49,0x3e,0x4b,0x33,0x55,0x66,0x7e,0xb0, + 0x64,0x7c,0x5e,0x37,0xae,0x54,0x4b,0xae,0x47,0x2f,0x77,0x62,0x23,0x7d,0x65,0xb6, + 0x3e,0x5d,0xa6,0x64,0x49,0xb0,0x57,0x47,0x67,0x2b,0x32,0x70,0x73,0x66,0xbf,0xb4, + 0x4a,0x34,0x46,0x54,0x50,0x7a,0x2a,0x68,0x77,0x5f,0x4a,0x7c,0x75,0x63,0xb3,0xaf, + 0x2d,0xa6,0x48,0x4d,0xa8,0xac,0x4a,0x6b,0xa9,0x5d,0x32,0xa4,0x4d,0x69,0x56,0xa1, + 0x3a,0xae,0x73,0xb9,0xb3,0xa3,0x4d,0x47,0xba,0x36,0x5e,0xa4,0x62,0x69,0x6b,0x3f, + 0x3d,0x24,0x71,0x51,0xb4,0x3a,0x2d,0x53,0xaa,0x3a,0x6e,0xa5,0x62,0x69,0x2d,0xb1, + 0x46,0xa6,0x76,0x21,0xb4,0x53,0x2d,0x5f,0x58,0x3b,0x5a,0xa5,0xbb,0x69,0x2f,0xa1, + 0x4a,0x74,0x77,0xa9,0xb4,0x2b,0x2d,0x66,0x38,0x3e,0x32,0xa6,0xa3,0x69,0xb8,0x3f, + 0x4f,0x6c,0x78,0xb5,0xb4,0x3f,0x2d,0x76,0x38,0x44,0x62,0xa3,0x49,0x69,0x2a,0xa1, + 0x4c,0x7c,0x75,0xbf,0xa5,0x4f,0x29,0x79,0x67,0x43,0x52,0x75,0x7a,0x62,0x3f,0xb2, + 0x45,0x34,0xa8,0x3d,0xbc,0x55,0x2f,0x5c,0x68,0x7b,0xb4,0xb5,0x24,0x6d,0x27,0xa2, + 0x47,0x44,0xa8,0x5f,0xbc,0x61,0x4f,0x5e,0xba,0x7c,0x4e,0xb5,0xbd,0x6d,0xa4,0x60, + 0x49,0x24,0xa9,0x65,0xbc,0x24,0x2f,0x67,0x68,0xa1,0x76,0x70,0x21,0xc0,0xc2,0xa3, + 0x70,0xa3,0xab,0x34,0x4f,0x7c,0xaa,0xb5,0xbd,0x3d,0x2f,0x76,0x48,0x23,0x56,0xb7, + 0x2a,0x6e,0x4b,0x60,0x58,0x7c,0xad,0x43,0xbd,0x7d,0x2f,0x26,0x48,0x27,0x56,0xb8, + 0xac,0x6e,0x73,0x60,0x62,0x7c,0xaf,0xb5,0xbe,0x5d,0x2f,0xb0,0x48,0x2c,0xa8,0xba, + 0x3a,0x6e,0xa9,0x60,0x6b,0x7c,0xb1,0xb5,0xbe,0xa7,0x2f,0xbe,0x48,0x30,0x56,0xba, + 0xbc,0x6f,0x33,0x60,0x72,0x7c,0xb3,0x23,0xbf,0x4d,0x30,0x3a,0x48,0xa5,0xa8,0xbb, + 0xac,0x6f,0x4f,0x60,0x79,0x7c,0xb5,0x63,0xbf,0x25,0x30,0x48,0x48,0xa9,0x56,0xbc, + 0x2a,0x6f,0x6b,0x60,0xa2,0x7c,0xb7,0x43,0xc0,0x3d,0x30,0x56,0x48,0xac,0xa8,0xbd, + 0x7a,0x6f,0x27,0x60,0x27,0x7c,0xb8,0xb5,0xc0,0x75,0x30,0x64,0x48,0xb0,0x56,0xbe, + 0x6a,0x6f,0xb5,0x60,0x2e,0x7c,0xba,0x23,0xc0,0xbf,0x30,0x72,0x48,0xb3,0xa8,0xbf, + 0x5a,0x70,0x3f,0x5f,0x31,0x31,0x6a,0x43,0xc1,0x5d,0x30,0x22,0x48,0xba,0x56,0xc0, + 0xbc,0x70,0x73,0x60,0xb4,0x7c,0xbf,0x23,0xc2,0x55,0x30,0xb2,0x48,0xbf,0x56,0xc2, + 0x4a,0x70,0xad,0x60,0xbe,0xc0,0xa8,0xc2,0x7a,0x70,0xb9,0x60,0xc1,0x7c,0xc2,0xb5, + 0xb3,0x35,0xa3,0x34,0x49,0x32,0x57,0x31,0x6a,0x71,0x43,0x61,0x36,0x7d,0x32,0x24, + 0x31,0x6d,0xa3,0x42,0x49,0x35,0xa9,0x32,0x5a,0x71,0x5f,0x61,0x3d,0x7d,0x34,0x64, + 0x31,0xb7,0xa3,0xbb,0xa3,0x5f,0x29,0x3c,0x57,0x34,0x4e,0x71,0x72,0x61,0x47,0x5d, + 0x37,0x4c,0x33,0x27,0xa3,0x34,0x49,0x52,0x27,0x3b,0xb8,0x74,0x5a,0x61,0xaa,0x5d, + 0x4d,0x2c,0x38,0x53,0xa4,0x34,0x49,0x21,0x39,0x34,0xc1,0x32,0x44,0x67,0x6e,0x7e, + 0xa2,0xa6,0x68,0xaf,0xba,0xbf,0x4e,0xa3,0x38,0x71,0x56,0xb3,0x48,0x6d,0x37,0x40, + 0x32,0x3c,0xa5,0x27,0xa8,0x47,0x2f,0x34,0x78,0x71,0xb8,0xb3,0x6a,0x6d,0x3f,0xa2, + 0x34,0x2c,0xa3,0x6f,0xbb,0x4f,0x4f,0x35,0x28,0x72,0x62,0xb3,0x54,0x6d,0x3b,0x60, + 0x35,0xb6,0xa4,0x2b,0xbb,0x5c,0x4f,0x3b,0xba,0x72,0x4a,0xb3,0x21,0x6d,0x42,0xb2, + 0x35,0xa6,0xa4,0x25,0xbb,0x7e,0x2f,0x43,0x68,0x75,0xac,0xb4,0x38,0x6d,0x58,0x40, + 0x3b,0x3c,0xa5,0x77,0xbb,0x2a,0x4f,0x48,0x48,0x76,0x46,0xb4,0x25,0x6d,0x67,0x60, + 0x3d,0x7c,0xa6,0x29,0xbb,0xbc,0x4f,0x31,0x28,0xa2,0x22,0xb3,0x44,0x6d,0x7a,0x40, + 0x42,0xb6,0xa7,0xab,0xbc,0x7e,0xaa,0xc2,0x4a,0xba,0xb2,0xba,0x4f,0xc1,0x58,0x2f, + 0x48,0x61,0x42,0xb1,0x3e,0x6c,0xc1,0x5f,0xa3,0x6c,0x2d,0x41,0xba,0x3e,0x4e,0xa7, + 0x58,0x69,0xa8,0xb1,0x5e,0x6c,0x7a,0xa1,0xb6,0x5c,0x2d,0xb3,0xba,0x59,0x4e,0xad, + 0x48,0x6b,0x4e,0xb1,0x74,0x6c,0x27,0xa1,0xb9,0x78,0xb2,0xbf,0x34,0xc1,0x6c,0x32, + 0xbc,0x71,0x73,0x61,0x42,0x7d,0x35,0x24,0x32,0x4d,0xa3,0x5a,0x49,0x3b,0xa9,0x33, + 0xac,0x71,0x2f,0x61,0x49,0x7d,0x37,0x64,0x32,0x25,0xa3,0x68,0x49,0x3f,0x57,0x34, + 0x2a,0x71,0xbd,0x61,0x50,0x7d,0x39,0x44,0x33,0x3d,0xa3,0x76,0x49,0x42,0xa9,0x35, + 0x7a,0x72,0x47,0x61,0x57,0x7d,0x3a,0xb6,0x33,0x75,0xa3,0x24,0x49,0x46,0x57,0x36, + 0x6a,0x72,0x63,0x61,0x5e,0x7d,0x3c,0x24,0x33,0xbf,0xa3,0xa4,0x49,0x49,0xa9,0x37, + 0x5a,0x72,0xa1,0x61,0x65,0x7d,0x3e,0x64,0x34,0x65,0xa3,0xb2,0x49,0x4d,0x57,0x38, + 0x4a,0x72,0xad,0x61,0x6c,0x7d,0x40,0x44,0x34,0xaf,0xa3,0xc0,0x49,0x50,0xa9,0x39, + 0x3a,0x73,0x37,0x61,0x73,0x7d,0x41,0xb6,0x35,0x55,0xa4,0x3c,0x49,0x54,0x57,0x39, + 0xbc,0x73,0x53,0x61,0x7a,0x7d,0x43,0x24,0x35,0x2d,0xa4,0x4a,0x49,0x57,0xa9,0x31, + 0x31,0x33,0x6b,0x61,0xa2,0x7d,0x45,0x44,0x36,0x3d,0xa4,0x56,0x49,0x5a,0xa9,0x3b, + 0x7a,0x73,0x27,0x61,0x27,0x7d,0x46,0xb6,0x36,0x75,0xa4,0x64,0x49,0x5e,0x57,0x3c, + 0x6a,0x73,0xb5,0x61,0x2e,0x7d,0x48,0x24,0x36,0xbf,0xa4,0x72,0x49,0x61,0xa9,0x3d, + 0x5a,0x74,0x3f,0x61,0xa7,0x7d,0x4a,0x64,0x37,0x65,0xa4,0xa2,0x49,0x65,0x57,0x3e, + 0x4a,0x74,0x5b,0x61,0xae,0x7d,0x4c,0x44,0x37,0xaf,0xa4,0x2e,0x49,0x62,0x4e,0xaf, + 0x28,0x6c,0xc0,0xb2,0x3e,0x6c,0x30,0x5f,0xbb,0x34,0x2f,0x49,0xba,0x79,0x2e,0xb6, + 0xba,0x6e,0x32,0xb2,0x61,0x6c,0xb0,0x5f,0xbe,0xae,0x2d,0xb7,0xb8,0x51,0x4e,0x5a, + 0xaa,0x5b,0x5e,0xad,0x79,0x6b,0x27,0xb1,0x28,0x44,0x26,0xb5,0xb8,0x72,0x2e,0x5c, + 0x38,0xbe,0x36,0xc1,0x30,0x70,0x23,0x42,0x57,0x74,0xc0,0xab,0xc2,0x69,0x30,0xb2, + 0x48,0xbf,0x36,0xc1,0xc1,0x70,0xb6,0x5f,0xb1,0x5c,0x29,0xa8,0x39,0x73,0xa8,0x41, + 0xac,0x55,0x4f,0x5a,0x3c,0x7b,0x53,0x23,0x79,0xa7,0x23,0x4c,0x45,0x78,0xa8,0x43, + 0x3a,0x55,0x23,0x5a,0x48,0x7b,0x56,0x63,0x7a,0x25,0x23,0x68,0x45,0xa1,0x56,0x45, + 0x6a,0x56,0x43,0x5a,0x5c,0x7b,0x5b,0x23,0x7b,0xaf,0x23,0x2a,0x45,0x28,0xa8,0x47, + 0x3a,0x56,0x7b,0x5a,0x65,0x7b,0x5e,0x23,0x7c,0x6d,0x23,0xb4,0x45,0x2d,0xa8,0x48, + 0x5a,0x56,0xb5,0x5a,0x6e,0x7b,0x60,0xb5,0x7d,0x55,0x24,0x42,0x45,0xa7,0xa8,0x4a, + 0x5a,0x57,0x5f,0x5a,0x7d,0x7b,0x64,0x63,0x7d,0xb7,0x24,0x52,0x45,0xab,0xa8,0x4b, + 0x5a,0x57,0x27,0x5a,0x27,0x7b,0x66,0xb5,0x7e,0x7d,0x24,0x62,0x45,0xb0,0xa8,0x4c, + 0xac,0x57,0xc1,0x5a,0xa3,0x7b,0x69,0x23,0xa1,0x55,0x24,0x7c,0x45,0xb6,0xa8,0x4e, + 0x3a,0x58,0x5b,0x5a,0xbe,0xbd,0x71,0xc2,0xb3,0x3c,0x6f,0x61,0xb3,0x7d,0x4d,0x64, + 0x38,0x45,0xa4,0xaa,0x49,0x6b,0x57,0x42,0x6a,0x75,0x6b,0x62,0x43,0x7d,0x56,0x64, + 0x3a,0x7d,0xa5,0x78,0x49,0x25,0x57,0x46,0x4a,0x76,0x5b,0x62,0x5c,0x7d,0x5c,0x44, + 0x3b,0xaf,0xa5,0x2e,0x49,0x28,0xa9,0x47,0x3a,0x76,0x77,0x62,0x63,0x7d,0x5d,0xb6, + 0x3c,0x55,0xa5,0xae,0x49,0x2c,0x57,0x47,0xbc,0x76,0xa5,0x62,0x6a,0x7d,0x5f,0x24, + 0x3c,0x2d,0xa5,0xbc,0x49,0x2f,0xa9,0x48,0xac,0x76,0xc1,0x62,0x71,0x7d,0x61,0x64, + 0x3d,0x45,0xa6,0x38,0x49,0xa5,0x57,0x49,0x2a,0x77,0x4b,0x62,0x78,0x7d,0x63,0x44, + 0x3d,0x7d,0xa6,0x46,0x49,0xa8,0xa9,0x4a,0x7a,0x77,0x67,0x62,0xa2,0x7d,0x65,0x44, + 0x3e,0x55,0xa6,0x5e,0x49,0xae,0xa9,0x4c,0x6a,0x77,0xb5,0x62,0x2e,0x7d,0x69,0x44, + 0x3f,0x3d,0xa6,0x76,0x49,0xb4,0xa9,0x4d,0x7a,0x71,0x31,0x32,0xa8,0x7d,0x6a,0x24, + 0x3f,0x7d,0xa6,0x26,0x49,0xb8,0xa9,0x4e,0x7a,0x78,0x67,0x62,0xb1,0x7d,0x6c,0xb6, + 0x40,0x35,0xa6,0xa6,0x49,0xbc,0x57,0x4f,0x6a,0x78,0x23,0x62,0xb8,0x7d,0x6e,0x24, + 0x40,0x6d,0xa6,0xb4,0x49,0xbf,0xa9,0x50,0x5a,0x78,0xb2,0xba,0x49,0xc1,0x57,0x50, + 0x2a,0x78,0xbd,0x62,0xc2,0x7d,0x31,0x44,0x41,0x3d,0xa7,0x36,0x4a,0x32,0xa9,0x51, + 0x7a,0x79,0x47,0x63,0x37,0x7d,0x72,0xb6,0x4f,0x7d,0x24,0x28,0x45,0xba,0x56,0x4e, + 0xbc,0x58,0xa1,0x5a,0xb7,0x7b,0x6e,0x63,0xa2,0x6d,0x24,0xb6,0x45,0xc1,0x56,0x50, + 0x2a,0x58,0xc1,0x59,0x34,0x7b,0x71,0x23,0x21,0x65,0x25,0x40,0x46,0x35,0xa8,0x52, + 0x5a,0x59,0x67,0x5b,0x3f,0x7b,0x74,0xb5,0x22,0x45,0x25,0x58,0x46,0x3b,0x56,0x53, + 0x2a,0x59,0x2b,0x5b,0x49,0x7b,0x77,0xb5,0x22,0xaf,0x25,0x6e,0x46,0x40,0xa8,0x55, + 0x5a,0x5a,0x5b,0x5b,0x5c,0x7b,0x7b,0x63,0x23,0xa7,0x25,0xa6,0x46,0x4a,0x56,0x57, + 0x7a,0x5a,0x2b,0x5b,0x68,0x7b,0xa1,0x43,0x24,0xa7,0x25,0xc0,0x46,0x50,0xa8,0x59, + 0x5a,0x5a,0x27,0x5b,0x75,0x7b,0x22,0x63,0x25,0x65,0x26,0x44,0x46,0x57,0x56,0x5a, + 0xac,0x5b,0x6f,0x5b,0x23,0x7b,0x25,0xb5,0x26,0x55,0x26,0x5e,0x46,0x5c,0xa8,0x5c, + 0x3a,0x5b,0xa9,0x5b,0x2c,0x7b,0x28,0x23,0x26,0xbf,0x26,0x6c,0x46,0x61,0xa8,0x5d, + 0x5a,0x5c,0x43,0x5b,0xa8,0x7b,0x2a,0x23,0x27,0x6d,0x26,0x22,0x46,0x65,0xa8,0x5e, + 0x5a,0x5c,0x5f,0x5b,0xaf,0x7b,0x2c,0xb5,0x28,0x3d,0x26,0xa8,0x46,0x6a,0xa8,0x58, + 0x5a,0x60,0x4e,0xb2,0xaf,0x6c,0xb5,0x63,0xb0,0x5c,0xaa,0x2b,0xbc,0xb4,0x2f,0x6e, + 0x68,0x79,0x4a,0xb7,0x78,0x5f,0x71,0xb2,0x51,0x44,0xab,0x6d,0xbd,0x3b,0x6f,0xc2, + 0xa3,0x50,0xc0,0x67,0x39,0x7d,0x73,0x64,0x41,0x25,0xa7,0x48,0x4a,0x37,0x57,0x52, + 0xac,0x79,0x6f,0x63,0x42,0x7d,0x75,0x24,0x42,0x4d,0xa7,0x5a,0x4a,0x3b,0xa9,0x53, + 0xac,0x79,0x2f,0x63,0x49,0x7d,0x77,0x64,0x42,0x25,0xa7,0x68,0x4a,0x3f,0x57,0x54, + 0x2a,0x79,0xbd,0x63,0x50,0x7d,0x79,0x44,0x43,0x3d,0xa7,0x76,0x4a,0x42,0xa9,0x55, + 0x7a,0x7a,0x47,0x63,0x57,0x7d,0x7a,0xb6,0x43,0x75,0xa7,0x24,0x4a,0x46,0x57,0x56, + 0x6a,0x7a,0x63,0x63,0x5e,0x7d,0x7c,0xb6,0x44,0x35,0xa7,0xa6,0x4a,0x4a,0x57,0x57, + 0x6a,0x7a,0x23,0x63,0x66,0x7d,0x7e,0x24,0x44,0x6d,0xa7,0xb4,0x4a,0x4d,0xa9,0x58, + 0x5a,0x7a,0xb1,0x63,0x6d,0x7d,0xa2,0x64,0x44,0xb7,0xa7,0xc2,0x4a,0x51,0x57,0x59, + 0x4a,0x7b,0x3b,0x63,0x74,0x7d,0x22,0x44,0x45,0x5d,0xa8,0x3e,0x4a,0x54,0xa9,0x5a, + 0x3a,0x7b,0x57,0x63,0x31,0x31,0x43,0x24,0x45,0x2d,0xa8,0x4a,0x4a,0x57,0xa9,0x5a, + 0xac,0x7b,0x6f,0x63,0x21,0x7d,0x25,0x64,0x46,0x45,0xa8,0x58,0x4a,0x5c,0x57,0x5b, + 0xbc,0x7b,0xa5,0x63,0x2a,0x7d,0x27,0x24,0x46,0x2d,0xa8,0x6a,0x4a,0x5f,0xa9,0x5c, + 0xac,0x7b,0xc1,0x63,0xa3,0x7d,0x29,0x64,0x47,0x45,0xa8,0x7a,0x4a,0x64,0x57,0x5f, + 0x6a,0x7c,0xa5,0x63,0xbc,0x7d,0x2f,0xb6,0x48,0xb7,0xa9,0x36,0x4a,0x72,0xa9,0x62, + 0x4a,0x7a,0xa8,0xb7,0x68,0x6e,0x45,0x60,0x5d,0xbf,0xbd,0x7c,0x4a,0x69,0x4f,0x22, + 0x38,0x65,0x6a,0xb0,0x44,0x6c,0x57,0x5f,0xad,0x54,0x2c,0x6d,0xb7,0xb3,0x4e,0x36, + 0x78,0x5a,0x33,0x6d,0x53,0xa2,0x3b,0x44,0xa5,0x7d,0xbb,0x26,0x4f,0x46,0xaa,0x76, + 0x7a,0xb4,0x7b,0x6d,0x62,0xa2,0x3e,0x24,0xa6,0x75,0xbb,0xb2,0x4f,0x4d,0xaa,0x78, + 0x5a,0xb4,0xbd,0x6d,0x72,0xa2,0x41,0x24,0xa7,0x55,0xbc,0x3e,0x4f,0x54,0xaa,0x7a, + 0x3a,0xb5,0x57,0x6d,0x7c,0xa2,0x44,0x44,0xa7,0xb7,0xbc,0x54,0x4f,0x5b,0xaa,0x7b, + 0xbc,0xb5,0xad,0x6d,0x2c,0xa2,0x48,0x44,0xa8,0xb7,0xbc,0x78,0x4f,0x64,0x58,0x7d, + 0xbc,0xb6,0x53,0x6d,0xac,0xa2,0x4b,0x24,0xa9,0x2d,0xbc,0x2a,0x4f,0x69,0xaa,0x7e, + 0x2a,0xb6,0xa1,0x6e,0x43,0x6b,0xa8,0x3f,0x2a,0x64,0x27,0x71,0xb8,0xa1,0x2e,0x66, + 0x78,0x5e,0x3e,0xae,0x64,0x6b,0xb0,0x3f,0x2c,0x74,0x28,0x39,0xb8,0x29,0x2e,0x67, + 0x38,0x5f,0x3e,0xae,0x73,0x6b,0xb8,0xa1,0x2d,0xae,0x28,0x77,0xb8,0xb7,0x4e,0x6d, + 0xaa,0x60,0x42,0xae,0xae,0x6b,0xbc,0xb1,0x21,0x4c,0x2c,0xa5,0xb8,0xc1,0x4e,0x70, + 0xba,0x59,0x72,0xaf,0x31,0x6c,0x32,0x5f,0xa3,0xa6,0x29,0x5f,0xb9,0x36,0x4e,0x75, + 0x28,0x61,0xa4,0xaf,0x46,0x6c,0x37,0x70,0x70,0xb3,0x40,0xbc,0xb7,0x77,0x57,0x62, + 0xac,0x7d,0xad,0x64,0x4c,0x7d,0xaa,0x44,0x4a,0xaf,0xa9,0x6e,0x4a,0xa2,0xa9,0x65, + 0x3a,0x7e,0x37,0x64,0x53,0x7d,0xab,0xb6,0x4b,0x55,0xa9,0x7e,0x4a,0x24,0xa9,0x66, + 0x4a,0x7e,0x5b,0x64,0x5c,0x7d,0xae,0x44,0x4b,0xaf,0xa9,0x2e,0x4a,0x28,0xa9,0x67, + 0x3a,0x7e,0x77,0x64,0x63,0x7d,0xaf,0xb6,0x4c,0x55,0xa9,0xae,0x4a,0x2c,0x57,0x67, + 0xbc,0x7e,0xa5,0x64,0x6a,0x7d,0xb1,0x24,0x4c,0x2d,0xa9,0xbc,0x4a,0x2f,0xa9,0x68, + 0xac,0x7e,0xc1,0x64,0x71,0x7d,0xb3,0x64,0x4d,0x45,0xaa,0x38,0x4a,0xa5,0x57,0x69, + 0x2a,0xa1,0x4b,0x64,0x78,0x7d,0xb5,0x44,0x4d,0x7d,0xaa,0x46,0x4a,0xa8,0xa9,0x6a, + 0x7a,0xa1,0x67,0x64,0xa1,0x7d,0xb6,0xb6,0x4e,0x35,0xaa,0x54,0x4a,0xac,0x57,0x6b, + 0x6a,0xa1,0x23,0x64,0x26,0x7d,0xb8,0x24,0x4e,0x6d,0xaa,0x62,0x4a,0x31,0x31,0x4c, + 0x4a,0xa1,0xad,0x64,0x2c,0x7d,0xba,0x44,0x4e,0xaf,0xaa,0x6e,0x4a,0xb2,0xa9,0x6d, + 0x3a,0xa2,0x37,0x64,0xa5,0x7d,0xbb,0xb6,0x4f,0x55,0xaa,0x7c,0x4a,0xb6,0x57,0x6d, + 0xbc,0xa2,0x53,0x64,0xac,0x7d,0xbd,0x24,0x4f,0x2d,0xaa,0x2a,0x4a,0xb9,0xa9,0x6e, + 0xac,0xa2,0x6f,0x64,0xb3,0x7d,0xbf,0x64,0x50,0x45,0xaa,0xaa,0x4a,0xbd,0x57,0x6f, + 0x2a,0xa2,0x2b,0x64,0xba,0x7d,0xc1,0x44,0x50,0x7d,0xa7,0x67,0xb9,0x4f,0x4e,0x75, + 0x58,0x62,0x32,0xaf,0x71,0x6c,0x3c,0x5f,0xa6,0x34,0x29,0xc1,0xb9,0x4b,0x2e,0x79, + 0x68,0x62,0xbc,0xaf,0x64,0x6c,0x44,0x5f,0xa8,0xb6,0x2a,0x59,0xb9,0x5f,0x4e,0x7b, + 0xaa,0x64,0x5e,0xaf,0xb2,0x6c,0x63,0xa2,0xc1,0x64,0xac,0xb3,0xbd,0x6d,0x2f,0x21, + 0x38,0x25,0x4a,0xb8,0x39,0x6e,0x56,0x60,0x5b,0x64,0xad,0x71,0xbd,0x27,0x4f,0x26, + 0x38,0x26,0x66,0xb8,0x64,0x6e,0x4a,0x42,0x37,0x7d,0x52,0xa8,0x39,0x6f,0xa5,0x40, + 0xbb,0x75,0x3b,0x42,0x53,0x75,0x62,0x22,0x3c,0x6d,0x53,0xbc,0x39,0xa7,0xa5,0x4d, + 0x59,0x77,0x6b,0x42,0xa6,0x75,0x6a,0x62,0x40,0x3d,0x51,0x66,0x3a,0xc1,0x53,0x4e, + 0x39,0x78,0xbd,0x42,0xb3,0x75,0x39,0x62,0x42,0x7d,0x55,0x58,0x3a,0x3e,0xa5,0x52, + 0x59,0x7a,0x23,0x43,0x5c,0x75,0x7e,0x22,0x45,0x3d,0x56,0x7e,0x3a,0x6e,0xa5,0x62, + 0x68,0x60,0x47,0x32,0x63,0x6c,0x5e,0x3f,0xb0,0xa6,0x2d,0x56,0x31,0x3b,0x51,0x33, + 0xab,0x31,0xb5,0x31,0x51,0x71,0x39,0x21,0x33,0x5d,0x31,0x7e,0x31,0x44,0xa3,0x36, + 0x49,0x32,0x53,0x31,0x62,0x71,0x33,0xb3,0x34,0x5d,0x32,0x38,0x31,0x54,0x51,0x3a, + 0x29,0x33,0x7b,0x31,0xac,0x71,0x4d,0x61,0x39,0x4d,0x56,0xb4,0x49,0x71,0x57,0x41, + 0x6a,0x78,0xb2,0xad,0x34,0xc2,0x71,0x70,0x5a,0xa2,0xb2,0xba,0x4a,0xc1,0x57,0x70, + 0x2a,0xa2,0xbd,0x64,0xc2,0x7d,0x71,0x44,0x51,0x3d,0xab,0x36,0x4b,0x32,0xa9,0x71, + 0x7a,0x21,0x47,0x65,0x37,0x7e,0x32,0xb6,0x51,0x75,0xab,0x44,0x4b,0x36,0x57,0x72, + 0x6a,0x21,0x63,0x65,0x3e,0x7e,0x34,0x24,0x51,0xbf,0xab,0x52,0x4b,0x39,0xa9,0x73, + 0x5a,0x21,0xa1,0x65,0x45,0x7e,0x36,0x64,0x52,0x65,0xab,0x60,0x4b,0x3d,0x57,0x74, + 0x4a,0x21,0xad,0x65,0x4c,0x7e,0x38,0x44,0x52,0xaf,0xab,0x6e,0x4b,0x40,0xa9,0x75, + 0x3a,0x22,0x37,0x65,0x53,0x7e,0x39,0xb6,0x53,0x55,0xab,0x7c,0x4b,0x44,0x57,0x75, + 0xbc,0x22,0x53,0x65,0x5a,0x7e,0x3b,0x24,0x53,0x2d,0xab,0x2a,0x4b,0x47,0xa9,0x76, + 0xac,0x22,0x6f,0x65,0x61,0x7e,0x3d,0x64,0x54,0x45,0xab,0xaa,0x4b,0x4b,0x57,0x77, + 0x2a,0x22,0x2b,0x65,0x68,0x7e,0x3f,0x44,0x51,0x31,0x31,0xb6,0x4b,0x4e,0x57,0x78, + 0x6a,0x22,0xb5,0x65,0x6e,0x7e,0x40,0x24,0x54,0xbf,0xac,0x32,0x4b,0x51,0xa9,0x79, + 0x5a,0x23,0x3f,0x65,0x75,0x7e,0x42,0x64,0x55,0x65,0xac,0x40,0x4b,0x55,0x57,0x7a, + 0x4a,0x23,0x5b,0x65,0x7c,0x7e,0x44,0x44,0x55,0xaf,0xac,0x4e,0x4b,0x58,0xa9,0x7b, + 0x3a,0x23,0x77,0x65,0x23,0x7e,0x45,0xb6,0x56,0x55,0xac,0x5c,0x4b,0x5c,0x57,0x7b, + 0xbc,0x23,0xa5,0x65,0x2a,0x7e,0x53,0x64,0x39,0xa7,0xa5,0x4c,0x49,0x78,0xa9,0x43, + 0x7a,0x75,0xad,0x62,0x4c,0x7d,0x58,0x24,0x3a,0xbf,0xa5,0x74,0x49,0x22,0x57,0x45, + 0x2a,0x76,0x4b,0x61,0x7e,0x74,0x46,0x41,0xa9,0xa7,0x4a,0x2e,0x37,0x70,0xa4,0xa2, + 0x59,0x64,0xb5,0x3d,0xbe,0x74,0x5b,0x41,0xab,0xaf,0x4b,0x48,0x37,0x27,0x52,0x24, + 0x29,0x66,0x4f,0x3e,0x54,0x74,0x5b,0x21,0xac,0x4d,0x4b,0x24,0x37,0x2c,0x52,0x29, + 0x79,0x66,0x27,0x3e,0xa1,0x74,0x5d,0x41,0xae,0x25,0x4b,0xa6,0x37,0x28,0xa4,0x2a, + 0x49,0x67,0x6f,0x3e,0x65,0x74,0x6b,0x61,0xb2,0x3d,0x4c,0xa8,0x37,0xb9,0xa4,0x2f, + 0x69,0x67,0x73,0x3d,0x44,0x74,0xba,0x21,0xb2,0x55,0x4c,0x70,0x37,0xaf,0x52,0x2b, + 0x49,0x61,0x3f,0x3f,0x38,0x74,0xc1,0x41,0xa3,0x75,0x4d,0x46,0x38,0x37,0xa4,0xa4, + 0x49,0x6a,0x3f,0x3f,0x6c,0x74,0x78,0x21,0xb5,0x5d,0x4d,0x2e,0x38,0x3e,0x52,0xaa, + 0xab,0x6b,0x53,0x3f,0x65,0x74,0x7d,0x61,0xb5,0x7d,0x4d,0xb2,0x38,0x50,0xa4,0xb3, + 0x59,0x6a,0x3b,0x3f,0xc0,0x74,0x30,0x21,0xba,0x2d,0x4e,0x72,0x38,0x69,0x52,0xac, + 0x79,0x6c,0x6b,0x40,0x3c,0x74,0x25,0xb3,0xb9,0x4d,0x4e,0xbc,0x38,0x63,0x52,0xae, + 0x49,0x6c,0x47,0x40,0x44,0x74,0xae,0xb3,0xbd,0x75,0x50,0x56,0x38,0xc0,0xc0,0x51, + 0x70,0xbb,0x36,0x66,0x4b,0x5e,0xa9,0x7c,0x7a,0x23,0xb9,0x65,0x2f,0x7e,0x48,0xb6, + 0x57,0x35,0xac,0x74,0x4b,0x62,0x57,0x7d,0x6a,0x24,0x43,0x65,0xa8,0x7e,0x4a,0x24, + 0x57,0x6d,0xac,0x22,0x4b,0x65,0xa9,0x7e,0x5a,0x24,0x5f,0x65,0xb5,0x7e,0x51,0xb6, + 0x59,0x7d,0xad,0x4c,0x4b,0x78,0x57,0x23,0x7a,0x25,0x27,0x66,0x4a,0x7e,0x5a,0x24, + 0x5b,0x7d,0xad,0x26,0x4b,0x26,0xa9,0x26,0x7a,0x26,0x67,0x66,0x5f,0x7e,0x5c,0xb6, + 0x5c,0x45,0xad,0xaa,0x4b,0x2b,0x57,0x27,0x2a,0x26,0xa9,0x66,0x6c,0x7e,0x60,0x64, + 0x5c,0xb7,0xad,0xc2,0x4b,0xa4,0xa9,0x29,0x7a,0x27,0x4b,0x66,0x78,0x7e,0x63,0x44, + 0x5d,0x7d,0xae,0x46,0x4b,0xa9,0xa9,0x2a,0xac,0x27,0x6f,0x66,0x21,0x7e,0x65,0x24, + 0x5e,0x55,0xae,0x5c,0x4b,0xae,0x57,0x2b,0xbc,0x27,0xa9,0x66,0x2b,0x7e,0x67,0xb6, + 0x5e,0xa7,0xab,0x31,0x31,0xb1,0xa9,0x2c,0xac,0x28,0x33,0x66,0xa5,0x7e,0x69,0xb6, + 0x5f,0x55,0xae,0x7c,0x4b,0xb6,0xa9,0x2e,0x3a,0x28,0x57,0x66,0xad,0x7e,0x6c,0x44, + 0x5f,0xb7,0xae,0xa4,0x4b,0xbb,0xa9,0x2f,0x5a,0x28,0xa1,0x66,0xb7,0x7e,0x6e,0x64, + 0x60,0x65,0xae,0xb2,0x4b,0xbf,0x57,0x30,0x5a,0x28,0xb5,0x66,0xc0,0x7e,0x70,0x24, + 0x60,0xbf,0xab,0x32,0x4c,0x31,0xa9,0xa3,0x5a,0x29,0x43,0x67,0x36,0x7e,0x72,0x24, + 0x6d,0x65,0x4f,0x42,0x38,0x73,0xa4,0xb8,0x29,0x6d,0x2f,0x40,0x34,0x74,0xad,0xb3, + 0xc1,0x5d,0x4f,0x2a,0x38,0x2b,0xa4,0xb9,0x69,0x6f,0x5f,0x40,0x24,0x74,0xb2,0x61, + 0xc0,0x3d,0x50,0x32,0x38,0xa8,0x52,0xbe,0x69,0x70,0x5b,0x40,0xa3,0x74,0xbe,0x21, + 0xb4,0x65,0x51,0x58,0x39,0xc2,0x52,0xa4,0x59,0x71,0xb1,0x41,0x52,0x75,0x3f,0x62, + 0x34,0xa7,0x51,0xaf,0xc2,0x52,0x50,0xab,0x78,0xbd,0x46,0xc1,0x41,0x72,0x6f,0xa2, + 0x60,0xae,0xab,0x41,0xbe,0x32,0x2f,0xa3,0x78,0x29,0x26,0xb9,0x3b,0x6e,0x7b,0xb2, + 0x61,0xbe,0xb0,0x3f,0xbe,0x4d,0x4f,0xa8,0x58,0x29,0xa8,0xb9,0x5f,0x6e,0x7d,0x60, + 0x63,0x34,0xaf,0x7b,0xbe,0x43,0x4f,0xa9,0x68,0x2a,0xbc,0xb9,0x4f,0x6e,0x27,0x40, + 0x66,0x24,0xb0,0x3b,0xbe,0x6b,0x2f,0xac,0x78,0x2b,0xb8,0xb9,0xa3,0x6e,0x2c,0xa2, + 0x68,0x2c,0xb0,0x75,0xbe,0x6a,0x4f,0xb1,0x48,0x2d,0x72,0xba,0x57,0x6e,0xac,0xb2, + 0x6c,0x74,0xb1,0x29,0xbe,0xa1,0x2f,0xb8,0x38,0x2d,0x46,0xba,0x5b,0x6e,0xaa,0x40, + 0x6b,0x44,0xb1,0x27,0xbe,0x2b,0x4f,0xbd,0x48,0x2f,0x36,0xba,0x7d,0x6e,0xba,0x60, + 0x6e,0x24,0xb2,0x7b,0xbe,0xb6,0x4f,0xc0,0x58,0x29,0x62,0xbc,0xc1,0x6e,0xc2,0x40, + 0x61,0xbe,0xb3,0x5d,0xbf,0x36,0xc1,0xc2,0xa3,0x50,0xb6,0x2d,0x38,0x7e,0x73,0x64, + 0x61,0x25,0xaf,0x48,0x4c,0x37,0x57,0xa4,0x2a,0x29,0x6b,0x67,0x41,0x7e,0x75,0x64, + 0x62,0x45,0xaf,0x5a,0x4c,0x3b,0xa9,0xa5,0xac,0x29,0x2f,0x67,0x49,0x7e,0x77,0x64, + 0x62,0x25,0xaf,0x68,0x4c,0x3f,0x57,0xa6,0x2a,0x29,0xbd,0x67,0x51,0x7e,0x79,0x64, + 0x63,0x45,0xaf,0x7a,0x4c,0x43,0xa9,0xa7,0xac,0x2a,0x4f,0x67,0x59,0x7e,0x7b,0x64, + 0x63,0x25,0xaf,0x28,0x4c,0x47,0x57,0xa8,0x2a,0x2a,0x6b,0x67,0x61,0x7e,0x7d,0x64, + 0x64,0x4d,0xaf,0xac,0x4c,0x4b,0xa9,0xa9,0xac,0x2a,0x2f,0x67,0x69,0x7e,0xa1,0x64, + 0x64,0x25,0xaf,0xbe,0x4c,0x50,0x57,0xaa,0xbc,0x2b,0x33,0x67,0x77,0x7e,0x23,0x24, + 0x65,0x2d,0xb0,0x4a,0x4c,0x58,0x57,0xad,0x3a,0x2b,0x7b,0x67,0x24,0x7e,0x26,0x64, + 0x66,0x65,0xb0,0x60,0x4c,0x5d,0x57,0xae,0x4a,0x2b,0xad,0x67,0x31,0x31,0x47,0xb6, + 0x66,0xa7,0xb0,0x6c,0x4c,0x60,0x57,0xae,0xbc,0x2c,0x33,0x67,0xa4,0x7e,0x29,0x24, + 0x67,0x4d,0xb0,0x7a,0x4c,0x63,0xa9,0xaf,0xac,0x2c,0x4f,0x67,0xab,0x7e,0x2b,0x64, + 0x67,0x25,0xb0,0x28,0x4c,0x67,0x57,0xb0,0x2a,0x2c,0x6b,0x67,0xb2,0x7e,0x2d,0x44, + 0x68,0x3d,0xb0,0xa8,0x4c,0x6a,0xa9,0xb1,0x7a,0x2c,0x27,0x67,0xb9,0x7e,0x2e,0xb6, + 0x68,0x75,0xb0,0xb6,0x4c,0x6e,0x57,0xb2,0x6a,0x29,0xc0,0xbb,0x5b,0x6f,0x3a,0xa2, + 0x74,0x74,0xb4,0x33,0xbf,0x51,0x50,0x50,0xab,0x39,0x37,0x35,0x33,0x72,0x32,0x41, + 0x5f,0xa7,0x36,0x3a,0x39,0x41,0xa3,0x75,0x59,0x42,0x3f,0x35,0x5e,0x72,0x3c,0xb3, + 0x53,0x75,0x39,0x28,0x33,0x4d,0x51,0x78,0x69,0x42,0xa1,0x35,0x65,0x72,0x40,0x21, + 0x55,0x55,0x3a,0x44,0x33,0x56,0xa3,0x7a,0xbb,0x43,0xad,0x35,0x30,0x72,0x4b,0x41, + 0x58,0xb7,0x53,0x3c,0x39,0x75,0x53,0x4c,0x39,0x77,0xc1,0x41,0x2f,0x75,0xaa,0x60, + 0xbc,0xbe,0xc1,0xa1,0xc2,0x28,0x30,0xb9,0x38,0xc0,0x7a,0xc1,0xbf,0x6f,0x43,0x5d, + 0x2a,0x3c,0xb5,0x6b,0xbf,0xa1,0x50,0x44,0xaa,0xa8,0x3a,0xbc,0x63,0x6f,0x60,0x40, + 0x7c,0xae,0xb6,0x33,0xbf,0xa6,0x30,0x4a,0x78,0xa9,0x66,0xbc,0x79,0x6f,0x62,0x60, + 0x7e,0x6c,0xb6,0x21,0xbf,0x68,0x51,0x26,0x37,0x66,0xc0,0xc2,0xa1,0x70,0xb8,0x60, + 0xc1,0x5c,0xc2,0x73,0xc2,0xb6,0x50,0xc0,0x48,0xc2,0x6a,0xc2,0xb6,0x70,0xc1,0x40, + 0x78,0x6c,0xb9,0x7d,0xc0,0x28,0x50,0x59,0xba,0xb7,0xb0,0xc0,0x69,0xa2,0x5e,0x44, + 0xaa,0x4d,0x67,0x3a,0x3e,0x7b,0x54,0x63,0x49,0xb0,0x77,0x4b,0xaa,0x77,0x2c,0x62, + 0x25,0x6d,0x62,0x44,0x3d,0x56,0x55,0x5b,0x3a,0x3b,0x6b,0x53,0xa2,0x79,0x2a,0x43, + 0x50,0x30,0xbb,0x37,0xc2,0xbc,0x57,0xb2,0x2a,0x2c,0xbd,0x67,0xc2,0x7e,0xa3,0x44, + 0x69,0x3d,0xb1,0x36,0x4c,0x72,0xa9,0xb3,0x7a,0x2d,0x47,0x68,0x37,0x7e,0xa4,0xb6, + 0x69,0x75,0xb1,0x44,0x4c,0x76,0x57,0xb4,0x6a,0x2d,0x63,0x68,0x3e,0x7e,0xa6,0x24, + 0x69,0xbf,0xb1,0x52,0x4c,0x79,0xa9,0xb5,0x5a,0x2d,0xa1,0x68,0x45,0x7e,0xa8,0x64, + 0x6a,0x65,0xb1,0x60,0x4c,0x7d,0x57,0xb6,0x4a,0x2d,0xad,0x68,0x4c,0x7e,0xaa,0x44, + 0x6a,0xaf,0xb1,0x6e,0x4c,0xa2,0xa9,0xb7,0x3a,0x2e,0x37,0x68,0x53,0x7e,0xab,0xb6, + 0x6b,0x55,0xb1,0x7c,0x4c,0x24,0x57,0xb7,0xbc,0x2e,0x53,0x68,0x5a,0x7e,0xad,0x24, + 0x6b,0x2d,0xb1,0x2a,0x4c,0x27,0xa9,0xb8,0xac,0x2e,0x6f,0x68,0x61,0x7e,0xaf,0x64, + 0x6c,0x45,0xb1,0xaa,0x4c,0x2b,0x57,0xb9,0x2a,0x2e,0x2b,0x68,0x68,0x7e,0xb1,0x44, + 0x6c,0x7d,0xb1,0xb8,0x4c,0x31,0x31,0x48,0x6a,0x2e,0xb5,0x68,0x6e,0x7e,0xb2,0x24, + 0x6c,0xbf,0xb2,0x32,0x4c,0xa3,0xa9,0xbb,0x5a,0x2f,0x3f,0x68,0x75,0x7e,0xb4,0x64, + 0x6d,0x65,0xb2,0x40,0x4c,0xa7,0x57,0xbc,0x4a,0x2f,0x5b,0x68,0x7c,0x7e,0xb6,0x44, + 0x6d,0xaf,0xb2,0x4e,0x4c,0xaa,0xa9,0xbd,0x3a,0x2f,0x77,0x68,0x23,0x7e,0xb7,0xb6, + 0x6e,0x55,0xb2,0x5c,0x4c,0xae,0x57,0xbd,0xbc,0x2f,0xa5,0x68,0x2a,0x7e,0xb9,0x24, + 0x6e,0x2d,0xb0,0x76,0x42,0x61,0xa7,0x5f,0x3a,0x3c,0x57,0x53,0xb2,0x79,0x30,0x63, + 0x48,0xb7,0x76,0xa8,0x42,0x6b,0x55,0x60,0x4a,0x3d,0x63,0x54,0x36,0x79,0xa7,0x43, + 0x49,0xaf,0x77,0x54,0x42,0x22,0x55,0x65,0x6a,0x3e,0x5b,0x54,0x5e,0x79,0xae,0x23, + 0x4b,0xbf,0x77,0xae,0x42,0x2b,0x55,0x68,0x5a,0x3b,0x27,0x49,0xc1,0xa2,0x5f,0x42, + 0x2f,0x2d,0x65,0x3c,0x3f,0x5d,0xa6,0x7e,0x49,0xb8,0x27,0x4c,0x70,0x77,0xb2,0x42, + 0x2c,0x25,0x68,0x3a,0x3e,0xae,0x54,0x6b,0xbb,0xb1,0xad,0x4c,0x2f,0x77,0xb6,0x22, + 0x2d,0xbf,0x68,0x68,0x3e,0xa6,0x54,0x6e,0x79,0xb2,0x2f,0x4c,0xbb,0x77,0xbb,0xb4, + 0x30,0x7d,0x68,0xba,0xbe,0x77,0xbc,0x42,0x21,0x7d,0x6c,0xbe,0x3e,0x3b,0x54,0x74, + 0x29,0xb3,0xc1,0x4d,0x5d,0x78,0x3c,0x22,0xa5,0x4d,0x69,0x30,0x3f,0x4e,0x54,0x79, + 0x39,0xb4,0xa9,0x4d,0x66,0x78,0x40,0x62,0xa6,0x3d,0x6a,0x44,0x3f,0x51,0xa6,0x79, + 0x59,0xb5,0x77,0x4d,0x23,0x78,0x43,0x22,0xaa,0x35,0x6a,0xb0,0x3f,0x6f,0x54,0x7e, + 0xbb,0xb6,0x23,0x4e,0x36,0x78,0x54,0xb4,0xac,0x55,0x6b,0x52,0x3f,0xa1,0x54,0x24, + 0xab,0xb6,0xa5,0x4a,0x33,0x77,0x53,0x22,0x79,0x5d,0x63,0x62,0x3d,0x7b,0x54,0x44, + 0x67,0x5f,0x2b,0x44,0x2f,0x75,0xb9,0x22,0x4e,0xa7,0x58,0xba,0xc1,0x32,0xc2,0xb5, + 0xbc,0x2f,0xb9,0x68,0x2f,0x7e,0xba,0xb6,0x6f,0x35,0xb2,0x74,0x4c,0xb4,0x57,0xbf, + 0x6a,0x30,0x43,0x68,0xa8,0x7e,0xbc,0x24,0x6f,0x6d,0xb2,0x22,0x4c,0xb7,0xa9,0xc0, + 0x5a,0x30,0x5f,0x68,0xaf,0x7e,0xbe,0x64,0x6f,0xb7,0xb2,0x30,0x4c,0xbb,0x57,0xc1, + 0x4a,0x30,0x7b,0x68,0xb6,0x7e,0xc0,0x44,0x70,0x5d,0xb2,0xb0,0x4c,0xbe,0xa9,0xc2, + 0x3a,0x30,0xa9,0x68,0xbd,0x7e,0xc1,0xc2,0x6a,0x30,0xb5,0x68,0xc0,0x7e,0xc2,0x24, + 0x70,0xbf,0xaf,0x32,0x4d,0x31,0xaa,0x31,0x5a,0xa3,0x3f,0x69,0x35,0xa1,0x32,0x64, + 0x71,0x65,0xb3,0x40,0x4d,0x35,0x58,0x32,0x4a,0xa3,0x5b,0x69,0x3c,0xa1,0x34,0x44, + 0x71,0xaf,0xb3,0x4e,0x4d,0x38,0xaa,0x33,0x3a,0xa3,0x77,0x69,0x43,0xa1,0x35,0xb6, + 0x72,0x55,0xb3,0x5c,0x4d,0x3c,0x58,0x33,0xbc,0xa3,0xa5,0x69,0x4a,0xa1,0x37,0x24, + 0x71,0x31,0x31,0x68,0x4d,0x3f,0x58,0x34,0x2a,0xa3,0xbd,0x69,0x50,0xa1,0x39,0x44, + 0x73,0x3d,0xb3,0x76,0x4d,0x42,0xaa,0x35,0x7a,0xa4,0x47,0x69,0x57,0xa1,0x3a,0xb6, + 0x73,0x75,0xb3,0x24,0x4d,0x46,0x58,0x36,0x6a,0xa4,0x63,0x69,0x5e,0xa1,0x3c,0x24, + 0x73,0xbf,0xb3,0xa4,0x4d,0x49,0xaa,0x37,0x5a,0xa4,0xa1,0x69,0x65,0xa1,0x3e,0x64, + 0x74,0x65,0xb3,0xb2,0x4d,0x4d,0x58,0x38,0x4a,0xa4,0xad,0x69,0x6c,0xa1,0x6a,0x62, + 0x4f,0x2d,0x58,0x30,0x3a,0x50,0x53,0x75,0xab,0x2b,0xa1,0x60,0xac,0x7c,0x6d,0xb5, + 0xb1,0xbf,0x29,0x3e,0x48,0x31,0xa8,0xa4,0x3a,0x69,0x6f,0x5f,0x3f,0x7c,0x7b,0x23, + 0xb5,0xaf,0x2d,0xa4,0x48,0x50,0x56,0xb3,0x3a,0xbf,0x3f,0x70,0x36,0xa2,0xa4,0x24, + 0xbb,0x6d,0xc1,0x42,0x50,0x75,0xaa,0xb4,0x5a,0xbf,0x63,0x70,0xc1,0xa2,0x33,0xb6, + 0xb3,0xaf,0xc1,0xb6,0x47,0x2f,0x56,0x28,0x2a,0x67,0x6b,0x5e,0x23,0x7c,0x60,0xb1, + 0xc1,0x35,0x2b,0x4e,0x43,0x28,0x55,0x2a,0x3a,0x42,0xbd,0x57,0xad,0x7a,0xb5,0x23, + 0x69,0xbf,0x7d,0xc0,0x45,0x66,0xa8,0x40,0xbc,0xa7,0x3b,0x6a,0x36,0xa1,0x52,0x24, + 0x79,0x6d,0xb5,0x42,0x4d,0x42,0x2f,0x22,0x6a,0xa7,0x6b,0x6a,0x41,0xa1,0x55,0x64, + 0x7a,0x45,0xb5,0x5a,0x4d,0x7b,0xaa,0x44,0x5a,0xa7,0xb1,0x6a,0x4f,0xa1,0x58,0xb6, + 0x7b,0x35,0xb5,0x74,0x4d,0x22,0x58,0x45,0x6a,0xa8,0x47,0x6a,0x57,0xa1,0x5a,0xb6, + 0x7b,0x75,0xb5,0x24,0x4d,0x26,0xaa,0x46,0x2a,0xa8,0x6b,0x6a,0x61,0xa1,0x5d,0x64, + 0x7c,0x45,0xb5,0xaa,0x4d,0x2b,0x58,0x47,0x2a,0xa8,0x2b,0x6a,0x68,0xa1,0x5f,0x24, + 0x7c,0x2d,0xb5,0xbc,0x4d,0x2f,0xaa,0x49,0x7a,0xa9,0x47,0x6a,0x77,0xa1,0x62,0xb6, + 0x7d,0x25,0xb6,0x48,0x4d,0xc0,0xc0,0x51,0x70,0xbb,0x35,0xbc,0x4d,0x4f,0xaa,0x38, + 0xac,0xa4,0xc1,0x69,0x71,0xa1,0x41,0x64,0x75,0x45,0xb4,0x38,0x4d,0x53,0x58,0x39, + 0x2a,0xa5,0x4b,0x69,0x78,0xa1,0x43,0x44,0x75,0x7d,0xb4,0x46,0x4d,0x56,0xaa,0x3a, + 0x7a,0xa5,0x67,0x69,0xa1,0xa1,0x44,0xb6,0x76,0x35,0xb4,0x54,0x4d,0x5a,0x58,0x3b, + 0x6a,0xa5,0x23,0x69,0x26,0xa1,0x46,0x24,0x76,0x6d,0xb4,0x62,0x4d,0x5d,0xaa,0x3c, + 0x5a,0xa5,0xb1,0x69,0x2d,0xa1,0x48,0x64,0x76,0xb7,0xb4,0x70,0x4d,0x61,0x58,0x3d, + 0x4a,0xa6,0x3b,0x69,0xa6,0xa1,0x4a,0x44,0x77,0x5d,0xb4,0x7e,0x4d,0x64,0xaa,0x3e, + 0x3a,0xa6,0x57,0x69,0xad,0xa1,0x4b,0xb6,0x77,0xa7,0xb4,0x2c,0x4d,0x68,0x58,0x3e, + 0xbc,0xa6,0x73,0x69,0xb4,0xa1,0x4d,0x24,0x78,0x4d,0xb4,0xac,0x4d,0x6b,0xaa,0x3f, + 0xac,0xa6,0x2f,0x69,0xbb,0xa1,0x4f,0x64,0x78,0x25,0xb3,0x31,0x31,0x6e,0xaa,0x40, + 0x2a,0xa6,0xbd,0x6a,0x31,0xa1,0x51,0xb6,0x79,0x55,0xb5,0x44,0x4d,0x76,0x58,0x42, + 0x7a,0xa7,0x6f,0x6a,0x44,0xa1,0x56,0x24,0x7a,0x6d,0xb5,0x62,0x4d,0x7d,0xaa,0x44, + 0x2a,0xa8,0x5b,0x6a,0x5d,0xa1,0x5c,0xb6,0x7c,0x7d,0xb5,0xc0,0x4d,0x30,0xaa,0x49, + 0x3a,0xa9,0x37,0x6a,0x73,0xa1,0x63,0x44,0x7d,0x7d,0xb6,0x54,0x4d,0xac,0x58,0x4c, + 0x5a,0xa9,0xb1,0x6a,0xa3,0xa1,0x69,0x64,0x7d,0xa7,0xb6,0x4c,0x4d,0xaa,0x58,0x4a, + 0xbc,0xa9,0x73,0x6a,0x24,0xa1,0x66,0x44,0x7e,0x5d,0xb6,0x60,0x4d,0xaf,0x58,0x4c, + 0x4a,0xa9,0xb5,0x6a,0x2e,0xa1,0x68,0xb6,0xa1,0x45,0xb4,0xbc,0x48,0x73,0xa8,0xb5, + 0x4a,0x6d,0x7b,0x60,0x45,0x7c,0xae,0xb5,0xbd,0x2d,0x2f,0x78,0x48,0x2a,0x56,0xb9, + 0x7a,0x6e,0x77,0x66,0x61,0x7e,0x5e,0xb6,0x56,0x75,0xbd,0xb0,0x4b,0x2e,0x57,0x28, + 0x7a,0x27,0x37,0x66,0x71,0x7e,0x62,0x64,0x5d,0x45,0xae,0x48,0x4b,0xa9,0x57,0x2b, + 0x4a,0x23,0x47,0x67,0x74,0x7e,0x22,0xb6,0x65,0x7d,0xb0,0x42,0x4c,0x57,0xa9,0xad, + 0x4a,0x30,0x53,0x61,0x3e,0x7d,0x7c,0x24,0x46,0x5d,0xa8,0x5a,0x4a,0xb2,0xa9,0x2d, + 0x4a,0x28,0x4b,0x66,0xb2,0x7e,0x6b,0xb6,0x60,0x30,0xb1,0x66,0xb0,0x7e,0x6f,0x64, + 0x51,0x75,0xaf,0x50,0x4c,0x3a,0xa9,0xa6,0xbc,0x2a,0x3f,0x68,0x6e,0xa2,0x60,0x24, + 0xa6,0x2c,0xbd,0x36,0x4f,0x74,0xaa,0x22,0x3a,0xb7,0x5f,0x6e,0x43,0xa2,0x66,0x23, + 0x6a,0xaf,0xbd,0x70,0x4f,0xb0,0xaa,0x2c,0x7a,0xb9,0xb9,0x6e,0xa3,0xa2,0x68,0xb6, + 0xb1,0x45,0xbe,0x24,0x4f,0xb6,0xaa,0x2d,0x2a,0xba,0x5b,0x6e,0xb2,0xa2,0x39,0x24, + 0xb5,0xa7,0xbf,0x30,0x50,0x4d,0xaa,0xa9,0xbc,0xbc,0xb9,0x6f,0x6f,0xa2,0x22,0x44, + 0xc2,0x30,0x25,0x38,0xc2,0x31,0xbb,0xb6,0xa1,0x55,0xb6,0x7c,0x4d,0xb6,0x58,0x4d, + 0xbc,0xaa,0x53,0x6a,0xac,0xa1,0x6b,0x24,0xa1,0x2d,0xb6,0x2a,0x4d,0xb9,0xaa,0x4e, + 0xac,0xaa,0x6f,0x6a,0xb3,0xa1,0x6d,0x64,0xa2,0x45,0xb6,0xaa,0x4d,0xbd,0x58,0x4f, + 0x2a,0xaa,0x2b,0x6a,0xba,0xa1,0x6f,0x44,0xa2,0x7d,0xb6,0xb8,0x4d,0xc0,0xc1,0xb6, + 0xa2,0xa7,0xb6,0xbe,0x4d,0xc2,0x58,0x50,0xbc,0xa3,0x33,0x6b,0x32,0xa1,0x71,0x24, + 0x21,0x4d,0xb7,0x3a,0x4e,0x33,0xaa,0x51,0xac,0xab,0x4f,0x6b,0x39,0xa1,0x73,0x64, + 0x21,0x25,0xb7,0x48,0x4e,0x37,0x58,0x52,0x2a,0xab,0x6b,0x6b,0x40,0xa1,0x75,0x44, + 0x22,0x3d,0xb7,0x56,0x4e,0x3a,0xaa,0x53,0x7a,0xab,0x27,0x6b,0x47,0xa1,0x76,0xb6, + 0x22,0x75,0xb7,0x64,0x4e,0x3e,0x58,0x54,0x6a,0xab,0xb5,0x6b,0x4e,0xa1,0x78,0x24, + 0x22,0xbf,0xb7,0x72,0x4e,0x41,0xaa,0x51,0x31,0x32,0x3b,0x6b,0x54,0xa1,0x7a,0x44, + 0x23,0x5d,0xb7,0x7e,0x4e,0x44,0xaa,0x56,0x3a,0xac,0x57,0x6b,0x5b,0xa1,0x7b,0xb6, + 0x23,0xa7,0xb7,0x2c,0x4e,0x48,0x58,0x56,0xbc,0xac,0x73,0x6b,0x62,0xa1,0x7d,0x24, + 0x24,0x4d,0xb7,0xac,0x4e,0x4b,0xaa,0x57,0xac,0xac,0x2f,0x6b,0x69,0xa1,0xa1,0x64, + 0x24,0x25,0xb7,0xba,0x4e,0x4f,0x58,0x58,0x2a,0xac,0xbd,0x6b,0x70,0xa1,0x21,0x44, + 0x25,0x3d,0xb8,0x36,0x4e,0x4b,0x69,0x77,0x2f,0x42,0x2c,0x75,0x68,0xb4,0x3f,0x4d, + 0x54,0xa2,0x39,0xb8,0xa5,0x4e,0xbb,0x78,0xa1,0x42,0xba,0x75,0x6f,0xb4,0x40,0xbf, + 0x55,0x38,0x3a,0x34,0xa5,0x52,0x69,0x79,0x6f,0x43,0x44,0x75,0x76,0xb4,0x42,0x2d, + 0x55,0x70,0x3a,0x42,0xa5,0x55,0xbb,0x7a,0x5f,0x43,0x60,0x75,0x7d,0xb4,0x44,0x6d, + 0x55,0xba,0x3a,0x50,0xa5,0x59,0x69,0x7b,0x4f,0x43,0x7c,0x75,0x24,0xb4,0x46,0x4d, + 0x56,0x60,0x3a,0x5e,0xa5,0x5c,0xbb,0x7c,0x3f,0x43,0xaa,0x75,0x2b,0xb4,0x47,0xbf, + 0x56,0xaa,0x3a,0x6c,0xa5,0x60,0x69,0x7c,0xc1,0x44,0x34,0x75,0xa4,0xb4,0x49,0x2d, + 0x57,0x50,0x3a,0x7a,0xa5,0x63,0xbb,0x7d,0xb1,0x44,0x50,0x75,0xab,0xb4,0x4b,0x6d, + 0x57,0x28,0x3a,0x28,0xa5,0x67,0x69,0x7e,0x2f,0x44,0x6c,0x75,0xb2,0xb4,0x4d,0x4d, + 0x58,0x40,0x3a,0xa8,0xa5,0x6a,0xbb,0xa1,0xa1,0x44,0x28,0x75,0xb9,0xb4,0x4e,0xbf, + 0x58,0x78,0x3a,0xb6,0xa5,0x6e,0x69,0xa2,0x6f,0x44,0xb6,0x75,0xc0,0xb4,0x50,0x2d, + 0x58,0xc2,0x3b,0x32,0xa5,0x71,0xbb,0x21,0x5f,0x45,0x40,0x76,0x35,0xb4,0x52,0x6d, + 0x59,0x68,0x3b,0x40,0xa5,0x75,0x69,0x22,0x4f,0x45,0x5c,0x76,0x3c,0xb4,0x54,0x4d, + 0x59,0xb2,0x3b,0x4e,0xa5,0x78,0xbb,0x23,0x3f,0x45,0x78,0xba,0xc1,0x32,0xc2,0xb5, + 0x45,0x4d,0xb8,0x3a,0x4e,0x53,0xaa,0x59,0xac,0xad,0x4f,0x6b,0x79,0xa1,0x23,0x64, + 0x25,0x25,0xb8,0x48,0x4e,0x57,0x58,0x5a,0x2a,0xad,0x6b,0x6b,0xa2,0xa1,0x25,0x44, + 0x26,0x3d,0xb8,0x56,0x4e,0x5a,0xaa,0x5b,0x7a,0xad,0x27,0x6b,0x27,0xa1,0x26,0xb6, + 0x26,0x75,0xb8,0x64,0x4e,0x5e,0x58,0x5c,0x6a,0xad,0xb5,0x6b,0x2e,0xa1,0x28,0x24, + 0x26,0xbf,0xb8,0x72,0x4e,0x61,0xaa,0x5d,0x5a,0xae,0x3f,0x6b,0xa7,0xa1,0x2a,0x64, + 0x27,0x65,0xb8,0xa2,0x4e,0x65,0x58,0x5e,0x4a,0xae,0x5b,0x6b,0xae,0xa1,0x2c,0x44, + 0x27,0xaf,0xb8,0x2e,0x4e,0x68,0xaa,0x5f,0x3a,0xae,0x77,0x6b,0xb5,0xa1,0x2d,0xb6, + 0x28,0x55,0xb8,0xae,0x4e,0x6c,0x58,0x5f,0xbc,0xae,0xa5,0x6b,0xbc,0xa1,0x2f,0x24, + 0x28,0x2d,0xb8,0xbc,0x4e,0x6f,0xaa,0x60,0xac,0xae,0xc1,0x6c,0x31,0xa1,0xa3,0x64, + 0x21,0x31,0x33,0x36,0x4e,0x72,0xaa,0x61,0x7a,0xaf,0x47,0x6c,0x37,0xa1,0xa4,0xb6, + 0x29,0x75,0xb9,0x44,0x4e,0x76,0x58,0x62,0x6a,0xaf,0x63,0x6c,0x3e,0xa1,0xa6,0x24, + 0x29,0xbf,0xb9,0x52,0x4e,0x79,0xaa,0x63,0x5a,0xaf,0xa1,0x6c,0x45,0xa1,0xa8,0x64, + 0x2a,0x65,0xb9,0x60,0x4e,0x7d,0x58,0x64,0x4a,0xaf,0xad,0x6c,0x4c,0xa1,0xaa,0x44, + 0x2a,0xaf,0xb9,0x6e,0x4e,0xa2,0xaa,0x65,0x3a,0xb0,0x37,0x6c,0x53,0xa1,0xa7,0x2d, + 0x5a,0x50,0x3b,0x5a,0xa5,0x7b,0xbb,0x23,0xb1,0x45,0x30,0x76,0x49,0xb4,0x57,0x6d, + 0x5a,0x28,0x3b,0x68,0xa5,0xa1,0x69,0x24,0x2f,0x45,0xbe,0x76,0x50,0xb4,0x59,0x4d, + 0x5b,0x40,0x3b,0x76,0xa5,0x22,0xbb,0x25,0xa1,0x46,0x48,0x76,0x57,0xb4,0x5a,0xbf, + 0x5b,0x78,0x3b,0x24,0xa5,0x26,0x69,0x26,0x6f,0x46,0x64,0x76,0x5e,0xb4,0x5c,0x2d, + 0x5b,0xc2,0x3b,0xa4,0xa5,0x29,0xbb,0x27,0x5f,0x46,0xa2,0x76,0x65,0xb4,0x5e,0x6d, + 0x5c,0x68,0x3b,0xb2,0xa5,0x2d,0x69,0x28,0x4f,0x46,0xae,0x76,0x6c,0xb4,0x60,0x4d, + 0x5c,0xb2,0x3b,0xc0,0xa5,0x30,0xbb,0x29,0x3f,0x47,0x38,0x76,0x73,0xb4,0x61,0xbf, + 0x5d,0x58,0x3c,0x3c,0xa5,0xa6,0x69,0x29,0xc1,0x47,0x54,0x76,0x7a,0xb4,0x63,0x2d, + 0x5d,0x30,0x3c,0x4a,0xa5,0xa9,0xbb,0x2a,0xb1,0x47,0x70,0x76,0x21,0xb4,0x65,0x6d, + 0x5e,0x48,0x3c,0x58,0xa5,0xad,0x69,0x2b,0x2f,0x47,0x2c,0x76,0x28,0xb4,0x67,0x4d, + 0x5e,0xa2,0x3c,0x66,0xa5,0xb0,0xbb,0x2c,0xa1,0x47,0xba,0x76,0x2f,0xb4,0x68,0xbf, + 0x5f,0x38,0x3c,0x74,0xa5,0xb4,0x69,0x2d,0x6f,0x48,0x44,0x76,0xa8,0xb4,0x6a,0x2d, + 0x5f,0x70,0x3c,0x22,0xa5,0xb7,0xbb,0x2e,0x5f,0x48,0x60,0x76,0xaf,0xb4,0x6c,0x6d, + 0x5f,0xba,0x3c,0x30,0xbe,0xc2,0x31,0xc2,0xb3,0x3e,0x3f,0x6c,0x55,0xa1,0xac,0x64, + 0x2b,0x65,0xb9,0xa2,0x4e,0x25,0x58,0x66,0x4a,0xb0,0x5b,0x6c,0x5c,0xa1,0xae,0x44, + 0x2b,0xaf,0xb9,0x2e,0x4e,0x28,0xaa,0x67,0x3a,0xb0,0x77,0x6c,0x63,0xa1,0xaf,0xb6, + 0x2c,0x55,0xb9,0xae,0x4e,0x2c,0x58,0x67,0xbc,0xb0,0xa5,0x6c,0x6a,0xa1,0xb1,0x24, + 0x2c,0x2d,0xb9,0xbc,0x4e,0x2f,0xaa,0x68,0xac,0xb0,0xc1,0x6c,0x71,0xa1,0xb3,0x64, + 0x2d,0x45,0xba,0x38,0x4e,0xa5,0x58,0x69,0x2a,0xb1,0x4b,0x6c,0x78,0xa1,0xb5,0x44, + 0x2d,0x7d,0xba,0x46,0x4e,0xa8,0xaa,0x6a,0x7a,0xb1,0x67,0x6c,0xa1,0xa1,0xb6,0xb6, + 0x2e,0x35,0xba,0x54,0x4e,0xac,0x58,0x6b,0x6a,0xb1,0x23,0x6c,0x26,0xa1,0xb8,0x24, + 0x2e,0x6d,0xba,0x62,0x4e,0xaf,0xaa,0x6c,0x5a,0xb1,0xb1,0x6c,0x2d,0xa1,0xba,0x64, + 0x2e,0xb7,0xba,0x70,0x4e,0xb3,0x58,0x6d,0x4a,0xab,0x31,0x32,0xa5,0xa1,0xbb,0xb6, + 0x2f,0x55,0xba,0x7c,0x4e,0xb6,0x58,0x6d,0xbc,0xb2,0x53,0x6c,0xac,0xa1,0xbd,0x24, + 0x2f,0x2d,0xba,0x2a,0x4e,0xb9,0xaa,0x6e,0xac,0xb2,0x6f,0x6c,0xb3,0xa1,0xbf,0x64, + 0x30,0x45,0xba,0xaa,0x4e,0xbd,0x58,0x6f,0x2a,0xb2,0x2b,0x6c,0xba,0xa1,0xc1,0x44, + 0x30,0x7d,0xba,0xb8,0x4e,0xc0,0xc1,0xb6,0x30,0xa7,0xba,0xbe,0x4e,0xc2,0x58,0x70, + 0xbc,0xab,0x33,0x6d,0x32,0xa2,0x31,0x24,0xb2,0x38,0x3c,0xa6,0xa5,0xbc,0x69,0x2f, + 0x6f,0x48,0x24,0x76,0xb8,0xb4,0x6e,0x2d,0x60,0x70,0x3c,0xb4,0xa5,0xbf,0xbb,0x30, + 0x5f,0x48,0xb2,0xba,0xa5,0xc1,0x69,0x30,0x2f,0x48,0xbe,0x76,0xc2,0xb4,0x31,0x4d, + 0x61,0x40,0x3d,0x36,0xa6,0x32,0xbb,0xa3,0xa1,0x49,0x48,0x77,0x37,0xb4,0x72,0xbf, + 0x61,0x78,0x3d,0x44,0xa6,0x36,0x69,0xa4,0x6f,0x49,0x64,0x77,0x3e,0xb4,0x74,0x2d, + 0x61,0xc2,0x3d,0x52,0xa6,0x39,0xbb,0xa5,0x5f,0x49,0xa2,0x77,0x45,0xb4,0x76,0x6d, + 0x62,0x68,0x3d,0x60,0xa6,0x3d,0x69,0xa6,0x4f,0x49,0xae,0x77,0x4c,0xb4,0x78,0x4d, + 0x62,0xb2,0x3d,0x6e,0xa6,0x40,0xbb,0xa7,0x3f,0x4a,0x38,0x77,0x53,0xb4,0x79,0xbf, + 0x63,0x58,0x3d,0x7c,0xa6,0x44,0x69,0xa7,0xc1,0x4a,0x54,0x77,0x5a,0xb4,0x7b,0x2d, + 0x63,0x30,0x3d,0x2a,0xa6,0x47,0xbb,0xa8,0xb1,0x4a,0x70,0x77,0x61,0xb4,0x7d,0x6d, + 0x64,0x48,0x3d,0xaa,0xa6,0x4b,0x69,0xa9,0x2f,0x4a,0x2c,0x77,0x68,0xb4,0xa1,0x4d, + 0x64,0xa2,0x3d,0xb8,0xa6,0x4e,0xbb,0xaa,0xa1,0x4a,0xba,0x77,0x6f,0xb4,0xa2,0xbf, + 0x65,0x38,0x3e,0x34,0xa6,0x52,0x69,0xab,0x6f,0x4b,0x44,0x77,0x76,0xb4,0x22,0x2d, + 0x65,0x70,0x3e,0x42,0xa6,0x55,0xbb,0xac,0x5f,0x4b,0x60,0x77,0x7d,0xb4,0x24,0x6d, + 0x70,0x30,0xbb,0x38,0xc2,0x61,0xaa,0x71,0x7a,0xb3,0x47,0x6d,0x37,0xa2,0x32,0xb6, + 0xa3,0x75,0xbb,0x44,0x4f,0x36,0x58,0x72,0x6a,0xb3,0x63,0x6d,0x3e,0xa2,0x34,0x24, + 0xa3,0xbf,0xbb,0x52,0x4f,0x39,0xaa,0x73,0x5a,0xb3,0xa1,0x6d,0x45,0xa2,0x36,0x64, + 0xa4,0x65,0xbb,0x60,0x4f,0x3d,0x58,0x74,0x4a,0xb3,0xad,0x6d,0x4c,0xa2,0x38,0x44, + 0xa4,0xaf,0xbb,0x6e,0x4f,0x43,0x58,0x75,0xbc,0xb4,0x6b,0x6d,0x61,0xa2,0x3e,0x44, + 0xa6,0x2d,0xbb,0xbc,0x4f,0x51,0x58,0x7a,0x2a,0xb5,0x73,0x6d,0x23,0xa2,0x45,0xb6, + 0xa8,0x55,0xbc,0x5e,0x4f,0x5d,0xaa,0x7c,0x2a,0xb5,0xc1,0x6d,0xa3,0xa2,0x49,0x64, + 0xa9,0x45,0xbc,0x7c,0x4f,0x68,0x58,0x7e,0xbc,0xb6,0x7b,0x6d,0xb7,0xa2,0x4e,0x64, + 0xaa,0x65,0xbc,0xb2,0x4f,0x6d,0x58,0xa2,0x4a,0xb6,0xad,0x6d,0xbe,0xa2,0x50,0x44, + 0xaa,0xaf,0xbd,0x32,0x4f,0x31,0x31,0x41,0x4a,0xb7,0x3f,0x6e,0x35,0xa2,0x52,0x64, + 0xab,0x65,0xbd,0x44,0x4f,0x76,0x58,0x22,0x7a,0xb7,0x67,0x6e,0x3f,0xa2,0x54,0xb6, + 0xac,0x35,0xbd,0x54,0x4f,0x7b,0x58,0x23,0x2a,0xb7,0x2b,0x6e,0x48,0xa2,0x57,0x44, + 0xac,0x7d,0xbd,0x66,0x4f,0x7e,0xaa,0x24,0x7a,0xb7,0xbd,0x6e,0x51,0xa2,0x59,0x64, + 0xad,0x45,0xbd,0x78,0x4f,0x23,0x58,0x25,0x2a,0xb8,0x4f,0x6e,0x59,0xa2,0x5b,0x64, + 0xad,0x25,0xbc,0x4e,0xa6,0x58,0xbb,0xad,0x3f,0x4b,0x78,0x77,0x23,0xb4,0x25,0xbf, + 0x66,0x58,0x3e,0x5c,0xa6,0x5c,0x69,0xad,0xc1,0x4b,0xa6,0x77,0x2a,0xb4,0x27,0x2d, + 0x66,0x30,0x3e,0x6a,0xa6,0x5f,0xbb,0xae,0xb1,0x4b,0xc2,0x77,0xa3,0xb4,0x29,0x6d, + 0x67,0x48,0x3e,0x78,0xa6,0x63,0x69,0xaf,0x2f,0x4c,0x4c,0x77,0xaa,0xb4,0x2b,0x4d, + 0x67,0xa2,0x3e,0x26,0xa6,0x66,0xbb,0xb0,0xa1,0x4c,0x68,0x77,0xb1,0xb4,0x2c,0xbf, + 0x68,0x38,0x3e,0xa6,0xa6,0x6a,0x69,0xb1,0x6f,0x4c,0x24,0x77,0xb8,0xb4,0x2e,0x2d, + 0x68,0x70,0x3e,0xb4,0xa6,0x6d,0xbb,0xb2,0x5f,0x4c,0xb2,0x77,0xbf,0xb4,0x30,0x6d, + 0x68,0xba,0x3e,0xc2,0xa6,0x71,0x69,0xb3,0x4f,0x4d,0x3c,0x78,0x34,0xb4,0xa4,0x4d, + 0x69,0x60,0x3f,0x3e,0xa6,0x74,0xbb,0xb4,0x3f,0x4d,0x58,0x78,0x3b,0xb4,0xa5,0xbf, + 0x69,0xaa,0x3f,0x4c,0xa6,0x78,0x69,0xb4,0xc1,0x4d,0x74,0x78,0x42,0xb4,0xa7,0x2d, + 0x6a,0x50,0x3f,0x5a,0xa6,0x7b,0xbb,0xb5,0xb1,0x4d,0x30,0x78,0x49,0xb4,0xa9,0x6d, + 0x6a,0x28,0x3f,0x68,0xa6,0xa1,0x69,0xb6,0x2f,0x4d,0xbe,0x78,0x50,0xb4,0xab,0x4d, + 0x6b,0x40,0x3f,0x76,0xa6,0x22,0xbb,0xb7,0xa1,0x4e,0x48,0x78,0x57,0xb4,0xac,0xbf, + 0x6b,0x78,0x3f,0x24,0xa6,0x26,0x69,0xb8,0x70,0x30,0xbb,0x38,0xc2,0x31,0xad,0xb6, + 0xad,0xa7,0xbd,0x2c,0x4f,0x28,0x58,0x26,0xbc,0xb8,0x73,0x6e,0x62,0xa2,0x5d,0x24, + 0xae,0x4d,0xbd,0xae,0x4f,0x2c,0x58,0x27,0xbc,0xb8,0xa9,0x6e,0x6b,0xa2,0x60,0x44, + 0xae,0xbf,0xbe,0x32,0x4f,0xa3,0xaa,0x29,0x5a,0xb9,0x3f,0x6e,0x76,0xa2,0x62,0x24, + 0xaf,0x6d,0xbe,0x42,0x4f,0xa8,0x58,0x2a,0x6a,0xb9,0x63,0x6e,0x21,0xa2,0x65,0x24, + 0xb0,0x4d,0xbe,0x5c,0x4f,0xae,0x58,0x2b,0xbc,0xb9,0xa9,0x6e,0x2b,0xa2,0x68,0x24, + 0xb1,0x3d,0xbe,0x78,0x4f,0xb5,0x58,0x2d,0xac,0xba,0x53,0x6e,0xae,0xa2,0x6c,0x44, + 0xb1,0xaf,0xbe,0x2e,0x4f,0xbb,0x58,0x2f,0x4a,0xba,0x7b,0x6e,0xb6,0xa2,0x6e,0x44, + 0xb2,0x5d,0xbe,0xb0,0x4f,0xbe,0xaa,0x30,0x3a,0xba,0xad,0x6e,0xc0,0xa2,0x70,0xb6, + 0xa3,0x35,0xbf,0x34,0x50,0x32,0x58,0xa3,0x6a,0xbb,0x43,0x6f,0x36,0xa2,0x71,0x31, + 0x31,0x65,0xbf,0x40,0x50,0x35,0x58,0xa4,0x4a,0xbb,0x5b,0x6f,0x3d,0xa2,0x74,0xb6, + 0xb4,0x3d,0xbf,0x56,0x50,0x3b,0x58,0xa5,0x2a,0xbb,0x2b,0x6f,0x49,0xa2,0x77,0x24, + 0xb4,0x2d,0xbf,0x6a,0x50,0x3f,0xaa,0xa6,0xac,0xbb,0xc1,0x6f,0x52,0xa2,0x79,0xb6, + 0xb5,0x55,0xbf,0x7c,0x50,0x44,0x58,0xa7,0xbc,0xbc,0x53,0x6f,0x5a,0xa2,0x7b,0x24, + 0xb5,0x2d,0xbf,0x2c,0x50,0x48,0x58,0xa9,0x3a,0xbc,0x77,0x70,0x5d,0xb4,0xae,0x6d, + 0x6b,0xba,0x3f,0x30,0xa6,0x29,0x69,0xb9,0x4f,0x4e,0x7c,0x78,0x64,0xb4,0xb0,0x4d, + 0x6c,0x60,0x3f,0xb0,0xa6,0x2c,0xbb,0xba,0x3f,0x4e,0xaa,0x78,0x6b,0xb4,0xb1,0xbf, + 0x6c,0xaa,0x3f,0xbe,0xa6,0x30,0x69,0xba,0xc1,0x4f,0x34,0x78,0x72,0xb4,0xb3,0x2d, + 0x6d,0x50,0x40,0x3a,0xa6,0xa5,0xbb,0xbb,0xb1,0x4f,0x50,0x78,0x79,0xb4,0xb5,0x6d, + 0x6d,0x28,0x40,0x48,0xa6,0xa9,0x69,0xbc,0x2f,0x4f,0x6c,0x78,0xa2,0xb4,0xb7,0x4d, + 0x6e,0x40,0x40,0x56,0xa6,0xac,0xbb,0xbd,0xa1,0x4f,0x28,0x78,0x27,0xb4,0xb8,0xbf, + 0x6e,0x78,0x40,0x64,0xa6,0xb0,0x69,0xbe,0x6f,0x4f,0xb6,0x78,0x2e,0xb4,0xba,0x2d, + 0x6e,0xc2,0x40,0x72,0xa6,0xb3,0xbb,0xbf,0x5f,0x50,0x40,0x78,0xa7,0xb4,0xbc,0x6d, + 0x6f,0x68,0x40,0xa2,0xa6,0xb7,0x69,0xc0,0x4f,0x50,0x5c,0x78,0xae,0xb4,0xbe,0x4d, + 0x6f,0xb2,0x40,0x2e,0xa6,0xba,0xbb,0xc1,0x3f,0x50,0x78,0x78,0xb5,0xb4,0xbf,0xbf, + 0x70,0x58,0x40,0xae,0xa6,0xbe,0x69,0xc1,0xc1,0x50,0xa6,0x78,0xbc,0xb4,0xc1,0x2d, + 0x70,0x30,0xb2,0x78,0xbf,0xb4,0xc2,0x6d,0x70,0xba,0x40,0xc2,0xa6,0x31,0x6a,0x31, + 0x4f,0x51,0x3c,0x79,0x34,0xb5,0x32,0x4d,0x71,0x60,0x41,0x3e,0xa7,0x34,0xbc,0x32, + 0x3f,0x51,0x58,0x7a,0xbe,0xbd,0x71,0xc2,0xb3,0x3a,0x7b,0x6f,0x64,0xa2,0x7e,0x44, + 0xb6,0x5d,0xbf,0xb0,0x50,0x4d,0x58,0xaa,0x5a,0xbc,0xb5,0x6f,0x70,0xa2,0x21,0x44, + 0xb7,0x3d,0xc0,0x36,0x50,0x52,0xaa,0xab,0x2a,0xbd,0x4b,0x6f,0x78,0xa2,0x23,0x44, + 0xb7,0x7d,0xc0,0x46,0x50,0x56,0xaa,0xac,0x7a,0xbd,0x67,0x6f,0xa1,0xa2,0x24,0xb6, + 0xb8,0x45,0xc0,0x58,0x50,0x5b,0x58,0xad,0x2a,0xbd,0x2b,0x6f,0x28,0xa2,0x27,0x44, + 0xb8,0x7d,0xc0,0x66,0x50,0x5e,0xaa,0xae,0x7a,0xbd,0xb9,0x6f,0x2f,0xa2,0x28,0xb6, + 0xb9,0x35,0xc0,0x74,0x50,0x62,0x58,0xaf,0x6a,0xbe,0x43,0x6f,0xa8,0xa2,0x2a,0x24, + 0xb9,0x6d,0xc0,0x22,0x50,0x65,0xaa,0xb0,0x5a,0xbe,0x5f,0x6f,0xaf,0xa2,0x2c,0x64, + 0xb9,0xb7,0xc0,0x30,0x50,0x69,0x58,0xb1,0x4a,0xbe,0x7b,0x6f,0xb6,0xa2,0x2e,0x44, + 0xba,0x5d,0xc0,0xb0,0x50,0x6c,0xaa,0xb2,0x3a,0xbb,0x31,0x31,0xbc,0xa2,0x2f,0x24, + 0xba,0x2d,0xc0,0xbc,0x50,0x6f,0xaa,0xb2,0xac,0xbf,0x37,0x70,0x33,0xa2,0xa6,0x64, + 0xbb,0xb7,0xc1,0x50,0x50,0x79,0x58,0xb5,0x4a,0xbf,0x7b,0x70,0x44,0xa2,0xa8,0x44, + 0xbc,0x5d,0xc1,0x5e,0x50,0x7c,0xaa,0xb6,0x3a,0xbf,0xb5,0x70,0x4e,0xa2,0xaa,0x24, + 0xbd,0x3d,0xc1,0x76,0x50,0x22,0xaa,0xb7,0x7a,0xc0,0x47,0x6f,0x5d,0xbf,0x2f,0x70, + 0x4a,0x60,0xaa,0xa2,0xbc,0xbb,0xc1,0x52,0x5f,0x51,0x60,0x79,0x3d,0xb5,0x34,0x6d, + 0x71,0xba,0x41,0x50,0xa7,0x39,0x6a,0x33,0x4f,0x51,0x7c,0x79,0x44,0xb5,0x36,0x4d, + 0x72,0x60,0x41,0x5e,0xa7,0x3c,0xbc,0x34,0x3f,0x51,0xaa,0x79,0x4b,0xb5,0x37,0xbf, + 0x72,0xaa,0x41,0x6c,0xa7,0x40,0x6a,0x34,0xc1,0x52,0x34,0x79,0x52,0xb5,0x39,0x2d, + 0x73,0x50,0x41,0x7a,0xa7,0x43,0xbc,0x35,0xb1,0x52,0x50,0x79,0x59,0xb5,0x3b,0x6d, + 0x73,0x28,0x41,0x28,0xa7,0x47,0x6a,0x36,0x2f,0x52,0x6c,0x79,0x60,0xb5,0x3d,0x4d, + 0x74,0x40,0x41,0xa8,0xa7,0x4a,0xbc,0x37,0xa1,0x52,0x28,0x79,0x67,0xb5,0x3e,0xbf, + 0x74,0x78,0x41,0xb6,0xa7,0x4e,0x6a,0x38,0x6f,0x52,0xb6,0x79,0x6e,0xb5,0x40,0x2d, + 0x74,0xc2,0x42,0x32,0xa7,0x51,0xbc,0x39,0x5f,0x53,0x40,0x79,0x75,0xb5,0x42,0x6d, + 0x75,0x68,0x42,0x40,0xa7,0x55,0x6a,0x3a,0x4f,0x53,0x5c,0x79,0x7c,0xb5,0x44,0x4d, + 0x75,0xb2,0x42,0x4e,0xa7,0x58,0xbc,0x3b,0x3f,0x53,0x78,0x79,0x23,0xb5,0x45,0xbf, + 0x76,0x58,0x42,0x5c,0xa7,0x5c,0x6a,0x3b,0xc1,0x53,0xa6,0x79,0x2a,0xb5,0x47,0x2d, + 0x76,0x30,0x42,0x6a,0xa7,0x5f,0xbc,0x3c,0xb1,0x53,0xc2,0x79,0xa3,0xb5,0x49,0x6d, + 0x77,0x48,0x42,0x78,0xa7,0x63,0x6a,0x3d,0x2f,0x54,0x4c,0x79,0xaa,0xc0,0xc2,0x71, + 0x70,0xbb,0x35,0x4a,0xbd,0x37,0xc1,0x72,0xb2,0x21,0x70,0xb7,0x42,0xc0,0x35,0xc2, + 0x52,0x58,0xab,0x62,0xbd,0x40,0xc1,0x75,0x40,0x22,0x38,0xb7,0x54,0xc0,0x3a,0x50, + 0x53,0x70,0xab,0x22,0xbd,0x45,0xc1,0x73,0x2f,0x71,0x2c,0x21,0x48,0xb7,0x37,0x4e, + 0x32,0xa2,0x51,0x66,0xab,0x3e,0xbd,0x34,0xa1,0x71,0xba,0x21,0x4f,0xb7,0x38,0xc0, + 0x33,0x38,0x51,0x74,0xab,0x42,0x6b,0x35,0x6f,0x72,0x44,0x21,0x56,0xb7,0x3a,0x2e, + 0x33,0x70,0x51,0x22,0xab,0x45,0xbd,0x36,0x5f,0x72,0x60,0x21,0x5d,0xb7,0x3c,0x6e, + 0x33,0xba,0x51,0x30,0xab,0x49,0x6b,0x37,0x4f,0x72,0x7c,0x21,0x64,0xb7,0x3e,0x4e, + 0x34,0x60,0x51,0xb0,0xab,0x4c,0xbd,0x38,0x3f,0x72,0xaa,0x21,0x6b,0xb7,0x3f,0xc0, + 0x34,0xaa,0x51,0xbe,0xab,0x50,0x6b,0x38,0xc1,0x73,0x34,0x21,0x72,0xb7,0x41,0x2e, + 0x35,0x50,0x51,0x31,0x31,0x53,0x6b,0x39,0x2f,0x73,0x4c,0x21,0x78,0xb7,0x43,0x4e, + 0x35,0xa2,0x52,0x46,0xab,0x56,0xbd,0x3a,0xa1,0x73,0x68,0x21,0xa1,0xb7,0x44,0xc0, + 0x36,0x38,0x52,0x54,0xab,0x5a,0x6b,0x3b,0x6f,0x73,0x24,0x21,0x26,0xb7,0x46,0x2e, + 0x36,0x70,0x52,0x62,0xab,0x5d,0xbd,0x3c,0x5f,0x73,0xb2,0x21,0x2d,0xb7,0x48,0x6e, + 0x36,0xba,0x52,0x70,0xab,0x61,0x6b,0x3d,0x4f,0x74,0x3c,0x21,0xa6,0xb7,0x4a,0x4e, + 0x37,0x78,0x42,0x24,0xa7,0x66,0x6a,0x3e,0x6f,0x54,0x64,0x79,0xb0,0xb5,0x4c,0x2d, + 0x77,0xc2,0x42,0xa4,0xa7,0x69,0xbc,0x3f,0x5f,0x54,0xa2,0x79,0xb7,0xb5,0x4e,0x6d, + 0x78,0x68,0x42,0xb2,0xa7,0x6d,0x6a,0x40,0x4f,0x54,0xae,0x79,0xbe,0xb5,0x50,0x4d, + 0x78,0xb2,0x42,0xc0,0xa7,0x70,0xbc,0x41,0x3f,0x55,0x38,0x7a,0x33,0xb5,0x51,0xbf, + 0x79,0x58,0x43,0x3c,0xa7,0x74,0x6a,0x41,0xc1,0x55,0x54,0x7a,0x3a,0xb5,0x53,0x2d, + 0x79,0x30,0x43,0x4a,0xa7,0x77,0xbc,0x42,0xb1,0x55,0x70,0x7a,0x41,0xb5,0x55,0x6d, + 0x7a,0x48,0x43,0x58,0xa7,0x7b,0x6a,0x43,0x2f,0x55,0x2c,0x7a,0x48,0xb5,0x57,0x4d, + 0x7a,0xa2,0x43,0x66,0xa7,0x7e,0xbc,0x44,0xa1,0x55,0xba,0x7a,0x4f,0xb5,0x58,0xbf, + 0x7b,0x38,0x43,0x74,0xa7,0x22,0x6a,0x45,0x6f,0x56,0x44,0x7a,0x56,0xb5,0x5a,0x2d, + 0x7b,0x70,0x43,0x22,0xa7,0x25,0xbc,0x46,0x5f,0x56,0x60,0x7a,0x5d,0xb5,0x5c,0x6d, + 0x7b,0xba,0x43,0x30,0xa7,0x29,0x6a,0x47,0x4f,0x56,0x7c,0x7a,0x64,0xb5,0x5e,0x4d, + 0x7c,0x60,0x43,0xb0,0xa7,0x2c,0xbc,0x48,0x3f,0x56,0xaa,0x7a,0x6b,0xb5,0x5f,0xbf, + 0x7c,0xaa,0x43,0xbe,0xa7,0x30,0x6a,0x48,0xc1,0x57,0x34,0x7a,0x72,0xb5,0x61,0x2d, + 0x7d,0x50,0x44,0x3a,0xa7,0xa5,0xc1,0xc2,0xa3,0x50,0xbf,0x34,0xbe,0xb5,0x33,0xa3, + 0x31, +} ; + +// UHCとUTF-16の対応表を圧縮したもの +u8 CP949ToUTF16Table[] = +{ + 0x67,0x55,0x31,0x31,0x31,0x31,0x31,0x31,0x51,0x34,0x63,0x51,0x31,0x31,0x6e,0x51, + 0x31,0x31,0x35,0x31,0x33,0x31,0x31,0xa3,0x31,0x51,0x31,0x3b,0x31,0x34,0x31,0x31, + 0xb3,0x31,0x51,0x31,0x3a,0x31,0x33,0x71,0x31,0x29,0x31,0x49,0x31,0x37,0x71,0x32, + 0xa3,0x31,0x6d,0x31,0x41,0x31,0x35,0x51,0x32,0x41,0x31,0x57,0x31,0x3b,0x31,0x33, + 0x21,0x31,0x29,0x31,0x48,0x31,0x37,0x31,0x32,0x79,0x31,0x65,0x31,0x3e,0x71,0x34, + 0x71,0x31,0xb7,0x31,0x4f,0x31,0x38,0xa3,0x33,0x31,0x31,0x73,0x31,0x42,0x31,0x35, + 0x61,0x32,0x41,0x31,0x56,0x31,0x3a,0x71,0x33,0x69,0x31,0x21,0x31,0x45,0x71,0x36, + 0x51,0x32,0x5d,0x31,0x5d,0x31,0x3c,0x51,0x33,0xb3,0x31,0x2f,0x31,0x49,0x31,0x37, + 0x41,0x32,0x79,0x31,0x64,0x31,0x3e,0x31,0x34,0x59,0x31,0xaf,0x31,0x4c,0x71,0x38, + 0x31,0x32,0xa7,0x31,0x6b,0x31,0x3f,0xa3,0x34,0xa3,0x31,0xbd,0x31,0x50,0x31,0x38, + 0xb3,0x33,0x31,0x31,0x72,0x31,0x41,0x71,0x35,0x49,0x32,0x39,0x31,0x53,0x71,0x39, + 0xa3,0x33,0x4d,0x31,0x79,0x31,0x43,0x51,0x35,0x21,0x32,0x47,0x31,0x57,0x31,0x3a, + 0x21,0x33,0x69,0x31,0xa2,0x31,0x45,0x31,0x36,0x39,0x32,0x55,0x31,0x5a,0x71,0x3b, + 0x71,0x33,0x25,0x31,0x27,0x31,0x46,0xa3,0x36,0x71,0x32,0x63,0x31,0x5e,0x31,0x3c, + 0x61,0x33,0xb3,0x31,0x2e,0x31,0x48,0x71,0x36,0xbb,0x32,0x71,0x31,0x61,0x71,0x3d, + 0x51,0x34,0x3d,0x31,0xa7,0x31,0x4a,0x51,0x37,0x61,0x32,0xa1,0x31,0x65,0x31,0x3e, + 0x41,0x34,0x59,0x31,0xae,0x31,0x4c,0x31,0x37,0xab,0x32,0x2d,0x31,0x68,0x71,0x3f, + 0x31,0x34,0x75,0x31,0xb5,0x31,0x4d,0xa3,0x38,0x51,0x32,0xad,0x31,0x6c,0x31,0x3f, + 0xb3,0x34,0xa3,0x31,0xbc,0x31,0x4f,0x71,0x38,0x29,0x32,0xbb,0x31,0x6f,0x71,0x40, + 0xa3,0x34,0xbf,0x32,0x31,0x31,0x6e,0x6b,0x71,0x69,0x31,0x34,0xb8,0xb9,0x32,0xa3, + 0x50,0x5f,0x21,0x3f,0x31,0x32,0x6e,0x6e,0x71,0x69,0x38,0xae,0x25,0x34,0x71,0x31, + 0x70,0x60,0x61,0x3f,0x32,0xbd,0xb8,0x31,0xb3,0x31,0x44,0xae,0xaf,0x34,0x71,0x6f, + 0x2e,0x51,0x4d,0x31,0x36,0xbd,0xbe,0x31,0xb3,0x40,0x28,0x59,0x38,0x31,0x32,0x2f, + 0x2f,0xa3,0x4d,0x34,0xb8,0xad,0x32,0xa3,0x31,0x70,0x28,0x29,0x38,0x31,0xc0,0x6b, + 0x71,0x69,0x31,0x42,0xb8,0xb9,0x32,0xa3,0x50,0x5f,0x21,0x3f,0x31,0x35,0xc0,0x6e, + 0x71,0x69,0x38,0xae,0x25,0x34,0x71,0x32,0x60,0x60,0x61,0x3f,0x32,0xbd,0xb8,0x31, + 0xb3,0x31,0x60,0xae,0xaf,0x34,0x71,0x6f,0x2e,0x51,0x4d,0x31,0x3d,0xbd,0xbe,0x31, + 0xb3,0x40,0x28,0x59,0x38,0x31,0x34,0x6f,0x2f,0xa3,0x4d,0x34,0xb8,0xad,0x32,0xa3, + 0x31,0xba,0x28,0x29,0x38,0x31,0xc0,0x6b,0x71,0x69,0x31,0x50,0xb8,0xb9,0x32,0xa3, + 0x50,0x5f,0x21,0x3f,0x31,0x39,0x6e,0x6e,0x71,0x69,0x38,0xae,0x25,0x34,0x71,0x33, + 0x50,0x60,0x61,0x3f,0x32,0xbd,0xb8,0x31,0xb3,0x31,0x7c,0xae,0xaf,0x34,0x71,0x6f, + 0x2e,0x51,0x4d,0x31,0x44,0xbd,0xbe,0x31,0xb3,0x40,0x28,0x59,0x38,0x31,0x36,0x4f, + 0x2f,0xa3,0x4d,0x34,0xb8,0xad,0x32,0xa3,0x32,0x60,0x28,0x29,0x38,0x31,0xc0,0x6b, + 0x71,0x69,0x31,0x5e,0xb8,0xb9,0x32,0xa3,0x50,0x5f,0x21,0x3f,0x31,0x3c,0xc0,0x6e, + 0x71,0x69,0x38,0xae,0x25,0x34,0x71,0x34,0x40,0x60,0x61,0x3f,0x32,0xbd,0xb8,0x31, + 0xb3,0x31,0xaa,0xae,0xaf,0x34,0x71,0x6f,0x2e,0x51,0x4d,0x31,0x4b,0xbd,0xbe,0x31, + 0xb3,0x40,0x28,0x59,0x38,0x31,0x37,0xc1,0x2f,0xa3,0x4d,0x34,0xb8,0xad,0x32,0xa3, + 0x32,0xaa,0x28,0x29,0x38,0x31,0xc0,0x6b,0x71,0x69,0x31,0x6c,0xb8,0xb9,0x32,0xa3, + 0x50,0x5f,0x21,0x3f,0x31,0x40,0x6e,0x6e,0x71,0x69,0x38,0xae,0x25,0x34,0x71,0x34, + 0xc2,0x60,0x61,0x3f,0x32,0xbd,0xb8,0x31,0xb3,0x32,0x34,0xae,0xaf,0x34,0x71,0x6f, + 0x2e,0x51,0x4d,0x31,0x52,0xbd,0xbe,0x31,0xb3,0x40,0x28,0x59,0x38,0x31,0x39,0x2f, + 0x2f,0xa3,0x4d,0x34,0xb8,0xad,0x32,0xa3,0x33,0x50,0x28,0x29,0x38,0x31,0xc0,0x6b, + 0x71,0x69,0x31,0x7a,0xb8,0xb9,0x32,0xa3,0x50,0x5f,0x21,0x3f,0x31,0x43,0xc0,0x6e, + 0x71,0x69,0x38,0xae,0x25,0x34,0x71,0x35,0xb2,0x60,0x61,0x3f,0x32,0xbd,0xb8,0x31, + 0xb3,0x32,0x50,0xae,0xaf,0x34,0x71,0x6f,0x2e,0x51,0x4d,0x31,0x59,0xbd,0xbe,0x31, + 0xb3,0x40,0x28,0x59,0x38,0x31,0x3b,0x6f,0x2f,0xa3,0x4d,0x34,0xb8,0xad,0x32,0xa3, + 0x33,0x28,0x28,0x29,0x38,0x31,0xc0,0x6b,0x71,0x69,0x31,0x28,0xb8,0xb9,0x32,0xa3, + 0x50,0x5f,0x21,0x3f,0x31,0x47,0x6e,0x6e,0x71,0x69,0x38,0xae,0x25,0x34,0x71,0x36, + 0x30,0x60,0x61,0x3f,0x32,0xbd,0xb8,0x31,0xb3,0x32,0x6c,0xae,0xaf,0x34,0x71,0x6f, + 0x2e,0x51,0x4d,0x31,0x60,0xbd,0xbe,0x31,0xb3,0x40,0x28,0x59,0x38,0x31,0x3d,0x4f, + 0x2f,0xa3,0x4d,0x34,0xb8,0xad,0x32,0xa3,0x34,0x40,0x28,0x29,0x38,0x31,0xc0,0x6b, + 0x71,0x69,0x31,0xa8,0xb8,0xb9,0x32,0xa3,0x50,0x5f,0x21,0x3f,0x31,0x4a,0xc0,0x6e, + 0x71,0x69,0x38,0xae,0x25,0x34,0x71,0x37,0xa2,0x60,0x61,0x3f,0x32,0xbd,0xb8,0x31, + 0xb3,0x32,0x28,0xae,0xaf,0x34,0x71,0x6f,0x2e,0x51,0x4d,0x31,0x67,0xbd,0xbe,0x31, + 0xb3,0x40,0x28,0x59,0x38,0x31,0x3e,0xc1,0x2f,0xa3,0x4d,0x34,0xb8,0xad,0x32,0xa3, + 0x34,0x78,0x28,0x29,0x38,0x31,0xc0,0x6b,0x71,0x69,0x31,0xb6,0xb8,0xb9,0x32,0xa3, + 0x50,0x5f,0x21,0x3f,0x31,0x4e,0x6e,0x6e,0x71,0x69,0x38,0xae,0x25,0x34,0x71,0x38, + 0x70,0x60,0x61,0x3f,0x32,0xbd,0xb8,0x31,0xb3,0x32,0xb6,0xae,0xaf,0x34,0x71,0x6f, + 0x2e,0x51,0x4d,0x31,0x6e,0xbd,0xbe,0x31,0xb3,0x40,0x28,0x59,0x38,0x31,0x40,0x2f, + 0x2f,0xa3,0x4d,0x34,0xb8,0xad,0x32,0xa3,0x34,0xc2,0x28,0x29,0x38,0x31,0xc0,0x6b, + 0x71,0x69,0x32,0x32,0xb8,0xb9,0x32,0xa3,0x50,0x5f,0x21,0x3f,0x31,0x51,0xc0,0x6e, + 0x71,0x69,0x38,0xae,0x25,0x34,0x71,0x39,0x60,0x60,0x61,0x3f,0x32,0xbd,0xb8,0x31, + 0xb3,0x33,0x40,0xae,0xaf,0x34,0x71,0x6f,0x2e,0x51,0x4d,0x31,0x75,0xbd,0xbe,0x31, + 0xb3,0x40,0x28,0x59,0x38,0x31,0x42,0x6f,0x2f,0xa3,0x4d,0x34,0xb8,0xad,0x32,0xa3, + 0x35,0x68,0x28,0x29,0x38,0x31,0xc0,0x6b,0x71,0x69,0x32,0x40,0xb8,0xb9,0x32,0xa3, + 0x50,0x5f,0x21,0x3f,0x31,0x55,0x6e,0x6e,0x71,0x69,0x38,0xae,0x25,0x34,0x71,0x3a, + 0x50,0x60,0x61,0x3f,0x32,0xbd,0xb8,0x31,0xb3,0x33,0x5c,0xae,0xaf,0x34,0x71,0x6f, + 0x2e,0x51,0x4d,0x31,0x7c,0xbd,0xbe,0x31,0xb3,0x40,0x28,0x59,0x38,0x31,0x44,0x4f, + 0x2f,0xa3,0x4d,0x34,0xb8,0xad,0x32,0xa3,0x35,0xb2,0x28,0x29,0x38,0x31,0xc0,0x6b, + 0x71,0x69,0x32,0x4e,0xb8,0xb9,0x32,0xa3,0x50,0x5f,0x21,0x3f,0x31,0x58,0xc0,0x6e, + 0x71,0x69,0x38,0xae,0x25,0x34,0x71,0x3b,0x40,0x60,0x61,0x3f,0x32,0xbd,0xb8,0x31, + 0xb3,0x33,0x78,0xae,0xaf,0x34,0x71,0x6f,0x2e,0x51,0x4d,0x31,0x23,0xbd,0xbe,0x31, + 0xb3,0x40,0x28,0x59,0x38,0x31,0x45,0xc1,0x2f,0xa3,0x4d,0x34,0xb8,0xad,0x32,0xa3, + 0x36,0x58,0x28,0x29,0x38,0x31,0xc0,0x6b,0x71,0x69,0x32,0x5c,0xb8,0xb9,0x32,0xa3, + 0x50,0x5f,0x21,0x3f,0x31,0x5c,0x6e,0x6e,0x71,0x69,0x38,0xae,0x25,0x34,0x71,0x3b, + 0xc2,0x60,0x61,0x3f,0x32,0xbd,0xb8,0x31,0xb3,0x33,0xa6,0xae,0xaf,0x34,0x71,0x6f, + 0x2e,0x51,0x4d,0x31,0x2a,0xbd,0xbe,0x31,0xb3,0x40,0x28,0x59,0x38,0x31,0x47,0x2f, + 0x2f,0xa3,0x4d,0x34,0xb8,0xad,0x32,0xa3,0x36,0x30,0x28,0x29,0x38,0x31,0xc0,0x6b, + 0x71,0x69,0x32,0x6a,0xb8,0xb9,0x32,0xa3,0x50,0x5f,0x21,0x3f,0x31,0x5f,0xc0,0x6e, + 0x71,0x69,0x38,0xae,0x25,0x34,0x71,0x3c,0xb2,0x60,0x61,0x3f,0x32,0xbd,0xb8,0x31, + 0xb3,0x33,0xc2,0xae,0xaf,0x34,0x71,0x6f,0x2e,0x51,0x4d,0x31,0xa3,0xbd,0xbe,0x31, + 0xb3,0x40,0x28,0x59,0x38,0x31,0x49,0x6f,0x2f,0xa3,0x4d,0x34,0xb8,0xad,0x32,0xa3, + 0x37,0x48,0x28,0x29,0x38,0x31,0xc0,0x6b,0x71,0x69,0x32,0x78,0xb8,0xb9,0x32,0xa3, + 0x50,0x5f,0x21,0x3f,0x31,0x63,0x6e,0x6e,0x71,0x69,0x38,0xae,0x25,0x34,0x71,0x3d, + 0x30,0x60,0x61,0x3f,0x32,0xbd,0xb8,0x31,0xb3,0x34,0x4c,0xae,0xaf,0x34,0x71,0x6f, + 0x2e,0x51,0x4d,0x31,0xaa,0xbd,0xbe,0x31,0xb3,0x40,0x28,0x59,0x38,0x31,0x4b,0x4f, + 0x2f,0xa3,0x4d,0x34,0xb8,0xad,0x32,0xa3,0x37,0xa2,0x28,0x29,0x38,0x31,0xc0,0x6b, + 0x71,0x69,0x32,0x26,0xb8,0xb9,0x32,0xa3,0x50,0x5f,0x21,0x3f,0x31,0x66,0xc0,0x6e, + 0x71,0x69,0x38,0xae,0x25,0x34,0x71,0x3e,0xa2,0x60,0x61,0x3f,0x32,0xbd,0xb8,0x31, + 0xb3,0x34,0x68,0xae,0xaf,0x34,0x71,0x6f,0x2e,0x51,0x4d,0x31,0xb1,0xbd,0xbe,0x31, + 0xb3,0x40,0x28,0x59,0x38,0x31,0x4c,0xc1,0x2f,0xa3,0x4d,0x34,0xb8,0xad,0x32,0xa3, + 0x38,0x38,0x28,0x29,0x38,0x31,0xc0,0x6b,0x71,0x69,0x32,0xa6,0xb8,0xb9,0x32,0xa3, + 0x50,0x5f,0x21,0x3f,0x31,0x6a,0x6e,0x6e,0x71,0x69,0x38,0xae,0x25,0x34,0x71,0x3f, + 0x70,0x60,0x61,0x3f,0x32,0xbd,0xb8,0x31,0xb3,0x34,0x24,0xae,0xaf,0x34,0x71,0x6f, + 0x2e,0x51,0x4d,0x31,0xb8,0xbd,0xbe,0x31,0xb3,0x40,0x28,0x59,0x38,0x31,0x4e,0x2f, + 0x2f,0xa3,0x4d,0x34,0xb8,0xad,0x32,0xa3,0x38,0x70,0x28,0x29,0x38,0x31,0xc0,0x6b, + 0x71,0x69,0x32,0xb4,0xb8,0xb9,0x32,0xa3,0x50,0x5f,0x21,0x3f,0x31,0x6d,0xc0,0x6e, + 0x71,0x69,0x38,0xae,0x25,0x34,0x71,0x40,0x60,0x60,0x61,0x3f,0x32,0xbd,0xb8,0x31, + 0xb3,0x34,0xb2,0xae,0xaf,0x34,0x71,0x6f,0x2e,0x51,0x4d,0x31,0xbf,0xbd,0xbe,0x31, + 0xb3,0x40,0x28,0x59,0x38,0x31,0x50,0x6f,0x2f,0xa3,0x4d,0x34,0xb8,0xad,0x32,0xa3, + 0x38,0xba,0x28,0x29,0x38,0x31,0xc0,0x6b,0x71,0x69,0x32,0xc2,0xb8,0xb9,0x32,0xa3, + 0x50,0x5f,0x21,0x3f,0x31,0x71,0x6e,0x6e,0x71,0x69,0x38,0xae,0xa7,0x36,0x71,0x31, + 0x5b,0xa3,0x3f,0x29,0x36,0x27,0x32,0x26,0x71,0x2e,0x61,0x4a,0x5d,0x37,0xae,0x32, + 0xad,0xa3,0x6f,0x29,0x49,0x27,0x38,0x26,0x72,0xc0,0x61,0x74,0x5d,0x42,0x5c,0x35, + 0x6b,0xa4,0x47,0x29,0x57,0x27,0x3a,0xb8,0x73,0x76,0x61,0x24,0x5d,0x46,0x5c,0x36, + 0x6b,0xa4,0x6b,0x29,0x63,0x27,0x3d,0xb8,0x74,0x56,0x64,0xad,0x71,0x50,0x7e,0x66, + 0x74,0x66,0x61,0xb2,0x5d,0x4e,0x5c,0x38,0x6b,0xa4,0xb9,0x29,0x6f,0x27,0x40,0xb8, + 0x75,0x3e,0x62,0x36,0x5d,0x52,0xae,0x39,0x7b,0xa5,0x47,0x29,0x77,0x27,0x42,0xb8, + 0x75,0x76,0x62,0x44,0x5d,0x56,0x5c,0x3a,0x7b,0xa5,0x6b,0x29,0xa2,0x27,0x45,0x46, + 0x76,0x3e,0x62,0x56,0x5d,0x5a,0xae,0x3b,0x30,0x5b,0x51,0xc1,0x27,0x27,0x46,0xb8, + 0x76,0x7e,0x62,0x66,0x5d,0x5e,0xae,0x3c,0x2b,0xa5,0xbd,0x29,0x30,0x27,0x49,0x46, + 0x77,0x3e,0x62,0x76,0x5d,0x62,0xae,0x3d,0x7b,0xa6,0x47,0x29,0xa9,0x27,0x4a,0xb8, + 0x77,0x76,0x62,0x24,0x5d,0x66,0x5c,0x3e,0x6b,0xa6,0x63,0x29,0xb0,0x27,0x4c,0x26, + 0x77,0xc0,0x62,0xa8,0x5d,0x6a,0xae,0x3f,0x2b,0xa6,0x2b,0x29,0xbc,0x27,0x4f,0xb8, + 0x78,0xa8,0x62,0xbe,0x5d,0x70,0x5c,0x40,0xbd,0xa7,0x3b,0x2a,0x38,0x27,0x53,0x46, + 0x79,0xb0,0x63,0x4e,0x5d,0x78,0xae,0x43,0x4b,0xa7,0x7b,0x2a,0x44,0x27,0x56,0x66, + 0x7a,0x66,0x63,0x60,0x5d,0x7d,0x5c,0x44,0x4b,0xa7,0xad,0x2a,0x4c,0x27,0x58,0x26, + 0x7b,0x46,0x63,0x78,0x5d,0x23,0x5c,0x45,0x2b,0xa8,0x4b,0x2a,0x58,0x27,0x5b,0xb8, + 0x7b,0xb0,0x63,0x2e,0x5d,0x29,0xae,0x47,0x5b,0xa8,0xa1,0x2a,0x65,0x27,0x5e,0x66, + 0x7c,0x66,0x63,0xb2,0x5d,0x2e,0x5c,0x48,0xad,0xa8,0xc1,0x2a,0x71,0x27,0x61,0x26, + 0x7d,0x4e,0x64,0x3c,0x5d,0xa6,0x5c,0x49,0xbd,0xa9,0x57,0x2a,0x7b,0x27,0x63,0xb8, + 0x7d,0xb0,0x64,0x4e,0x5d,0xaa,0xae,0x4b,0x3b,0xa9,0x77,0x2a,0x23,0x27,0x65,0xb8, + 0x7e,0x56,0x64,0x5e,0x5d,0xaf,0x5c,0x4c,0x4b,0xa9,0xad,0x2a,0x2c,0x27,0x68,0x46, + 0x7e,0xb0,0x64,0x6e,0x5d,0xb2,0xae,0x4d,0x5b,0xaa,0x3f,0x2a,0xa8,0x27,0x6a,0x26, + 0xa1,0x7e,0x64,0x28,0x5d,0xb9,0xae,0x4e,0xad,0xaa,0x7b,0x2a,0xb7,0x27,0x6e,0xb8, + 0xa2,0x76,0x64,0xb6,0x5d,0xc0,0x5c,0x50,0x6b,0xaa,0xbd,0x2a,0xc2,0x27,0x31,0x66, + 0x21,0x46,0x65,0x38,0x5e,0x33,0xae,0x51,0xbd,0xab,0x53,0x2b,0x3a,0x27,0x73,0x26, + 0x21,0x2e,0x65,0x4e,0x5e,0x39,0x5c,0x53,0x5b,0xab,0xa1,0x2c,0xb8,0x37,0x72,0x41, + 0x4e,0xa8,0x65,0x5c,0x5e,0x3c,0x5c,0x53,0xbd,0xab,0xa9,0x2b,0x4b,0x27,0x77,0xb8, + 0x22,0xb0,0x65,0x6e,0x5e,0x40,0xae,0x55,0x4b,0xac,0x3b,0x2b,0x54,0x27,0x7a,0x46, + 0x23,0x5e,0x65,0x7e,0x5e,0x44,0xae,0x56,0x3b,0xac,0x5b,0x2b,0x5c,0x27,0x7c,0x26, + 0x23,0xc0,0x65,0xa4,0x5e,0x49,0xae,0x57,0x5b,0xac,0xa2,0xad,0x79,0x2c,0x7e,0x26, + 0x24,0x6e,0x65,0xb6,0x5e,0x4e,0x5c,0x58,0x6b,0xac,0xb9,0x2b,0x6f,0x27,0xa2,0xb8, + 0x25,0x36,0x66,0x34,0x5e,0x52,0x5c,0x59,0x6b,0xad,0x4b,0x2b,0x79,0x27,0x23,0x26, + 0x25,0x2e,0x66,0x4a,0x5e,0x57,0xae,0x5a,0xad,0xad,0x6f,0x2b,0x22,0x27,0x25,0x26, + 0x26,0x4e,0x66,0x5c,0x5e,0x5c,0x5c,0x5b,0xc2,0x5b,0x51,0xc1,0x2a,0x27,0x27,0x26, + 0x26,0x2e,0x66,0x6a,0x5e,0x5f,0xae,0x5c,0xad,0xad,0xc1,0x2b,0xa3,0x27,0x29,0x26, + 0x27,0x56,0x66,0x7c,0x5e,0x64,0x5c,0x5d,0xbd,0xae,0x53,0x2b,0xac,0x27,0x2b,0x26, + 0x27,0x2e,0x66,0x2e,0x5e,0x68,0xae,0x5f,0x4b,0xae,0x7b,0x2b,0xba,0x27,0x2f,0x46, + 0x28,0x7e,0x66,0xb8,0x5e,0x70,0x5c,0x61,0x3b,0xaf,0x3f,0x2c,0x35,0x27,0xa4,0x66, + 0x29,0x66,0x67,0x40,0x5e,0x76,0x5c,0x62,0x6b,0xaf,0x67,0x2c,0x3f,0x27,0xa6,0xb8, + 0x2a,0x3e,0x67,0x56,0x5e,0x7a,0xae,0x63,0x7b,0xaf,0x27,0x2c,0x47,0x27,0xa8,0xb8, + 0x2a,0x76,0x67,0x64,0x5e,0x7e,0x5c,0x64,0x6b,0xaf,0xbd,0x2c,0x50,0x27,0xab,0x46, + 0x2b,0x3e,0x67,0x76,0x5e,0x22,0xae,0x65,0x2b,0xb0,0x4b,0x2c,0x58,0x27,0xad,0x46, + 0x2b,0x7e,0x67,0x26,0x5e,0x26,0xae,0x66,0x7b,0xb0,0x67,0x2c,0x5f,0x27,0xae,0xb8, + 0x2c,0x36,0x67,0xa6,0x5e,0x2a,0x5c,0x67,0x6b,0xb0,0x23,0x2c,0x66,0x27,0xb0,0x26, + 0x2c,0x76,0x67,0xb6,0x5e,0x2e,0x5c,0x68,0x6b,0xb0,0xb5,0x2c,0x6e,0x27,0xb2,0x26, + 0x2c,0xc0,0x68,0x36,0x5e,0xa4,0xae,0x69,0x2b,0xb1,0x4b,0x2c,0x78,0x27,0xb5,0x66, + 0x2d,0x26,0x68,0x48,0x5e,0xa9,0x5c,0x6a,0x2b,0xb1,0x6b,0x2c,0xa2,0x27,0xb7,0x26, + 0x2e,0x56,0x68,0x5c,0x5e,0xae,0x5c,0x6b,0xbd,0xb1,0xa5,0x2c,0x2a,0x27,0xb9,0x26, + 0x2e,0x2e,0x68,0x6c,0x5e,0xb2,0x5c,0x6c,0xbd,0xb2,0x37,0x2c,0xa5,0x27,0xbb,0xb8, + 0x2f,0x5e,0x68,0x7e,0x5e,0xb6,0xae,0x6e,0x3b,0xb2,0x57,0x2c,0xad,0x27,0xbd,0xb8, + 0x2f,0xa8,0x68,0x2c,0x5e,0xba,0x5c,0x6e,0xbd,0xb2,0x73,0x2c,0xb4,0x27,0xbf,0x26, + 0x30,0x4e,0x68,0xac,0x5e,0xbd,0xc0,0x66,0x30,0x66,0x68,0xb2,0xb8,0x37,0x72,0x50, + 0xb3,0x40,0xad,0x2c,0xbe,0x27,0xc2,0x66,0x30,0xb8,0x65,0x36,0x5f,0x32,0xae,0x71, + 0x7b,0xb3,0x47,0x2d,0x37,0x28,0x32,0xb8,0xa3,0x26,0x69,0x4a,0x5f,0x38,0x5c,0x72, + 0xbd,0xb3,0x73,0x2d,0x42,0x28,0x35,0x26,0xa4,0x4e,0x69,0x5c,0x5f,0x3c,0x5c,0x73, + 0xbd,0xb3,0xa5,0x2d,0x4a,0x28,0x37,0x26,0xa4,0x2e,0x69,0x6a,0x5f,0xbd,0x21,0x38, + 0xb4,0xb0,0x69,0x6e,0x5f,0x40,0xae,0x75,0x3b,0xb4,0x37,0x2d,0x53,0x28,0x39,0xb8, + 0xa5,0x56,0x69,0x7c,0x5f,0x44,0x5c,0x75,0xbd,0xb4,0x53,0x2d,0x5a,0x28,0x3b,0x26, + 0xa5,0x2e,0x69,0x2a,0x5f,0x47,0xae,0x76,0xad,0xb4,0x6f,0x2d,0x63,0x28,0x3d,0xb8, + 0xa6,0x5e,0x69,0xb0,0x5f,0x4d,0xae,0x78,0x6b,0xb4,0xb6,0xad,0x79,0x50,0xa2,0x66, + 0xa6,0xb8,0x69,0xc2,0x5f,0x52,0x5c,0x79,0x7b,0xb5,0x4f,0x2d,0x79,0x28,0x43,0x66, + 0xa7,0x2e,0x6a,0x50,0x5f,0x59,0xae,0x7b,0x5b,0xb5,0xa1,0x2d,0x26,0x28,0x46,0xb8, + 0xa8,0x76,0x6a,0x64,0x5f,0x5e,0x5c,0x7c,0x6b,0xb5,0xbd,0x2d,0xa5,0x28,0x49,0xb8, + 0xa9,0x56,0x6a,0x7e,0x5f,0x64,0xae,0x7e,0x5b,0xb6,0x5f,0x2d,0xb0,0x28,0x4c,0x26, + 0xa9,0xc0,0x6a,0xa6,0x5f,0x6a,0x5c,0xa1,0x6b,0xb6,0x23,0x2d,0xb8,0x28,0x4e,0x26, + 0xaa,0x6e,0x6a,0xb8,0x5f,0x70,0x5c,0xa2,0xbd,0xb7,0x33,0x2e,0x32,0x28,0x51,0x26, + 0xab,0x4e,0x6b,0x3e,0x5f,0x74,0xae,0x22,0x3b,0xb7,0x57,0x2e,0x3b,0x28,0x53,0xb8, + 0xab,0xb0,0x6b,0x4e,0x5f,0x78,0xae,0x23,0x3b,0xb7,0x77,0x2e,0x43,0x28,0x55,0xb8, + 0xac,0x56,0x6b,0x5c,0x5f,0x7c,0x5c,0x23,0xbd,0xb7,0xa5,0x2e,0x4a,0x28,0x57,0x26, + 0xac,0x2e,0x6b,0x6a,0x5f,0xa1,0xae,0x24,0xad,0xb7,0xc1,0x2e,0x51,0x28,0x59,0x66, + 0xad,0x46,0x6b,0x78,0x5f,0x23,0x5c,0x25,0x2b,0xb8,0x4b,0x2e,0x58,0x28,0x5b,0x46, + 0xad,0x7e,0x6b,0x26,0x5f,0x26,0xae,0x26,0x7b,0xb8,0x67,0x2e,0x5f,0x28,0x5c,0xb8, + 0xae,0x36,0x6b,0xa6,0x5f,0x2a,0x5c,0x27,0x6b,0xb8,0x23,0x2e,0x66,0x28,0x5e,0x26, + 0xae,0x6e,0x6b,0xb4,0x5f,0x2d,0xae,0x28,0x5b,0xb8,0xb1,0x2e,0x70,0x28,0x61,0x66, + 0xaf,0x46,0x6c,0x38,0x5f,0xa5,0xae,0x29,0xad,0xb9,0x4f,0x2e,0x79,0x28,0x63,0x66, + 0xaf,0x26,0x6c,0x48,0x5f,0xaa,0x5c,0x2b,0x5b,0xb9,0xa1,0x2e,0x25,0x28,0x66,0x66, + 0xb0,0x66,0x6c,0x60,0x5f,0xb0,0x5c,0x2c,0x6b,0xb9,0xb9,0x2e,0x2f,0x28,0x68,0xb8, + 0xb1,0x36,0x6c,0x74,0x5f,0xb4,0x5c,0x2d,0x6b,0xba,0x43,0x2e,0xa8,0xbd,0x23,0x51, + 0xb3,0x40,0x27,0x79,0x34,0x31,0x6a,0x26,0xb1,0x6e,0x6c,0x24,0x5f,0xb8,0x5c,0x2e, + 0x7b,0xba,0x6b,0x2e,0xb2,0x28,0x6d,0x46,0xb2,0x3e,0x6c,0xa8,0x5f,0xbc,0xae,0x2f, + 0x30,0x5e,0x6c,0xb0,0x5f,0xbe,0xae,0x30,0x4b,0xba,0xad,0x2e,0xbe,0x28,0x70,0x66, + 0xb2,0xb8,0x6c,0xc2,0x5f,0x31,0x5c,0xa3,0x4b,0xbb,0x3b,0x2f,0x34,0x28,0x72,0x46, + 0xb3,0x5e,0x70,0xad,0x71,0x50,0x72,0x26,0xb3,0x7e,0x6d,0x46,0x60,0x36,0xae,0xa4, + 0x7b,0xbb,0x6b,0x2f,0x40,0x28,0x75,0x66,0xb4,0x46,0x6d,0x58,0x60,0x3b,0x5c,0xa5, + 0x2b,0xbb,0x2b,0x2f,0x48,0x28,0x77,0x46,0xb4,0x7e,0x6d,0x66,0x60,0x3e,0xae,0xa6, + 0x7b,0xbb,0xb9,0x2f,0x4f,0x28,0x78,0xb8,0xb5,0x36,0x6d,0x74,0x60,0x42,0x5c,0xa7, + 0x70,0x5b,0x51,0xc1,0x55,0x28,0x7a,0x66,0xb5,0x66,0x6d,0xa2,0x60,0x45,0x5c,0xa8, + 0x4b,0xbc,0x5b,0x2f,0x5c,0x28,0x7c,0x26,0xb5,0xc0,0x6d,0xa6,0x60,0x4a,0xae,0xa9, + 0x2b,0xbc,0x2b,0x2f,0x68,0x28,0xa1,0x46,0xb6,0x7e,0x6d,0xb8,0x60,0x4e,0xae,0xaa, + 0xad,0xbd,0x33,0x2f,0x75,0x28,0x22,0x66,0xb7,0x66,0x6e,0x40,0x60,0x56,0x5c,0xac, + 0x6b,0xbd,0x63,0x2f,0x7e,0x28,0x24,0x26,0xb7,0xc0,0x6e,0x54,0x60,0x5a,0x5c,0xad, + 0x6b,0xbd,0x23,0x2f,0x26,0x28,0x26,0x26,0xb8,0x6e,0x6e,0x62,0x60,0x5d,0xae,0xae, + 0x5b,0xbd,0xb1,0x2f,0x2f,0x28,0x28,0xb8,0xb9,0x36,0x6e,0x74,0x60,0x62,0x5c,0xaf, + 0x6b,0xbe,0x4b,0x2f,0xaa,0x28,0x2b,0x46,0xb9,0x7e,0x6e,0x26,0x60,0x66,0xae,0xb0, + 0x7b,0xbe,0x67,0x2f,0xb1,0x28,0x2c,0xb8,0xba,0x36,0x6e,0xa6,0x60,0x6a,0x5c,0xb1, + 0x6b,0xbe,0x23,0x2f,0xb8,0x28,0x2e,0x26,0xba,0x6e,0x6e,0xb4,0x60,0x6e,0x5c,0xb2, + 0x6b,0xbe,0xb5,0x2f,0xc0,0x28,0x30,0x26,0xba,0xc0,0x6f,0x34,0x60,0x72,0x5c,0xb3, + 0x6b,0xbf,0x47,0x30,0x37,0x28,0xa4,0xb8,0xbb,0x7e,0x6f,0x46,0x60,0x76,0xae,0xb4, + 0x7b,0xbf,0x67,0x30,0x3f,0x28,0xa6,0xb8,0xbc,0x46,0x6f,0x58,0x60,0x7b,0x5c,0xb5, + 0xad,0xbf,0x2f,0x30,0x49,0x28,0xa9,0x66,0xbc,0x26,0x6f,0x68,0x60,0xa1,0xae,0xb6, + 0xad,0xbf,0xc1,0x30,0x51,0x28,0xab,0x66,0xbd,0x46,0x6f,0x78,0x60,0x23,0x5c,0xb7, + 0x2b,0xc0,0x4b,0x30,0x58,0x28,0xad,0x46,0xbd,0x7e,0x6f,0x26,0x60,0x26,0xae,0xb8, + 0x7b,0xc0,0x67,0x30,0x5f,0x28,0xae,0xb8,0xbe,0x36,0x6f,0xa6,0x60,0x2a,0x5c,0xb9, + 0x6b,0xc0,0x23,0x30,0x66,0x28,0xb0,0x26,0xbe,0x6e,0x6f,0xb8,0x60,0x2e,0xae,0xba, + 0x2b,0xc0,0xbe,0xad,0x7a,0x34,0x71,0x6f,0x2b,0x51,0x3d,0x32,0x70,0x28,0xb3,0x66, + 0xbf,0x46,0x70,0x38,0x60,0xa5,0x5c,0xbb,0x2b,0xc1,0x4b,0x30,0x7b,0x28,0xb6,0x46, + 0xbf,0xc0,0x70,0x52,0x60,0xab,0xae,0xbd,0x5b,0xc1,0xa1,0x30,0x26,0x28,0xb8,0x26, + 0xc0,0x6e,0x70,0x62,0x60,0xaf,0xae,0xbe,0x5b,0xc1,0xb1,0x30,0x2e,0x28,0xba,0x26, + 0xc0,0xc0,0x70,0x72,0x60,0xb3,0xc0,0x5a,0x3c,0x70,0x3b,0x30,0xa6,0x28,0xbc,0x46, + 0xc1,0x5e,0x70,0x7e,0x60,0xb6,0xae,0xc0,0x5b,0xc2,0x5f,0x30,0xaf,0x28,0xbe,0x66, + 0xc1,0xb8,0x70,0x30,0x60,0xbc,0x5c,0xc1,0x6b,0xc2,0x28,0xae,0x60,0xbe,0x5c,0xc1, + 0xbd,0xc2,0xa9,0x30,0xbd,0x28,0xc1,0xb8,0xc2,0xa8,0x70,0xbe,0x60,0xc2,0x5c,0xc2, + 0xbd,0xbb,0x3b,0xa3,0x34,0x29,0x6e,0x59,0x34,0xbb,0x47,0xa3,0x37,0x29,0x32,0xb9, + 0x31,0x76,0x71,0x44,0x61,0x36,0x5d,0x32,0x6c,0x31,0x67,0xa3,0x3f,0x29,0x34,0xb9, + 0x32,0x3e,0x71,0x56,0x61,0x3a,0xaf,0x33,0x2c,0x31,0x2b,0xa3,0x48,0x29,0x37,0x47, + 0x32,0x7e,0x71,0x66,0x61,0x3e,0xaf,0x34,0xae,0x31,0xc1,0xa3,0x51,0x29,0x39,0x67, + 0x33,0x46,0x71,0x78,0x61,0x43,0x5d,0x35,0x2c,0x32,0x4b,0xa3,0x58,0x29,0x3b,0x67, + 0x33,0x26,0x71,0x28,0x61,0x47,0x5d,0x36,0x2c,0x32,0x6b,0xa3,0x60,0x29,0x3d,0x47, + 0x34,0x3e,0x71,0xa8,0x61,0x4a,0xaf,0x37,0x7c,0x32,0x27,0xa3,0x67,0x29,0x3e,0xb9, + 0x34,0x76,0x71,0xb6,0x61,0x4e,0x5d,0x38,0x6c,0x32,0xb5,0xa3,0x6e,0x29,0x40,0x27, + 0x34,0xc0,0x72,0x32,0x61,0x51,0xaf,0x39,0x5c,0x33,0x3f,0xa3,0x77,0x29,0x42,0xb9, + 0x35,0x7e,0x72,0x48,0x61,0x57,0xaf,0x3a,0xbe,0x33,0x73,0xa3,0x22,0x29,0x45,0x27, + 0x36,0x66,0x72,0x62,0x61,0x5e,0x5d,0x3c,0x6c,0x33,0xb5,0xa3,0x2f,0x29,0x48,0xb9, + 0x37,0x36,0x72,0x74,0x61,0x62,0x5d,0x3d,0x6c,0x34,0x43,0xa3,0xa8,0x29,0x4a,0x27, + 0x37,0x6e,0x72,0x22,0x61,0x65,0xaf,0x3e,0x5c,0x34,0x5f,0xa3,0xaf,0x29,0x4c,0x67, + 0x37,0xb8,0x72,0x30,0x61,0x69,0x5d,0x3f,0x4c,0x34,0x7b,0xa3,0xb6,0x29,0x4e,0x47, + 0x38,0x5e,0x72,0xb0,0x61,0x6c,0xaf,0x40,0x3c,0x34,0xa9,0xa3,0xbd,0x29,0x4f,0xb9, + 0x38,0xb8,0x72,0xc2,0x61,0x71,0xaf,0x41,0x5c,0x35,0x3f,0xa4,0x36,0x29,0x52,0x27, + 0x39,0x6e,0x73,0x42,0x61,0x75,0xaf,0x42,0x5c,0x35,0x5f,0xa4,0x3f,0x29,0x55,0x47, + 0x3a,0x46,0x73,0x58,0x61,0x7b,0x5d,0x43,0x2c,0x35,0x2b,0xa4,0x48,0x29,0x57,0xb9, + 0x3a,0xb0,0x73,0x6e,0x61,0x22,0xaf,0x45,0xa2,0x5b,0x55,0x3f,0x32,0xbd,0xac,0x31, + 0x61,0x36,0x47,0xa4,0x57,0x29,0x5a,0xb9,0x3b,0x26,0x73,0xa4,0x61,0x2a,0x5d,0x47, + 0xae,0x36,0x2f,0xa4,0x6a,0x29,0x5f,0x27,0x3c,0x2e,0x73,0xbe,0x61,0x30,0x5d,0x48, + 0xbe,0x37,0x33,0xa4,0x72,0x29,0x61,0x27,0x3d,0x4e,0x74,0x3e,0x61,0xa8,0x5d,0x4a, + 0x6c,0x37,0x63,0xa4,0x7e,0x29,0x64,0x27,0x3d,0xc0,0x74,0x56,0xb8,0x55,0x5e,0xbd, + 0x6c,0x37,0x27,0xa4,0x27,0x29,0x66,0xb9,0x3e,0x7e,0x74,0x66,0x61,0xb0,0xaf,0x4c, + 0x7c,0x37,0xb9,0xa4,0x2f,0x29,0x68,0xb9,0x3f,0x3e,0x74,0x76,0x61,0xb4,0xaf,0x4d, + 0x7c,0x38,0x4b,0xa4,0xaa,0x29,0x6b,0x47,0x3f,0x7e,0x74,0x26,0x61,0xb8,0xaf,0x4e, + 0x7c,0x38,0x67,0xa4,0xb1,0x29,0x6c,0xb9,0x40,0x38,0x26,0x41,0x70,0xbb,0xaf,0x4f, + 0x5c,0x38,0xa1,0xa4,0xb7,0x29,0x6e,0x6f,0x2c,0x38,0x2b,0xa4,0xba,0x29,0x6f,0x47, + 0x40,0x7e,0x74,0xb8,0x61,0xc0,0xaf,0x50,0x7c,0x38,0xb9,0xa4,0xc1,0x29,0x70,0xb9, + 0x31,0x36,0x75,0x34,0x62,0x32,0x5d,0x51,0x6c,0x39,0x43,0xa5,0x36,0x29,0x72,0x27, + 0x41,0x6e,0x75,0x46,0x62,0x37,0xaf,0x52,0xae,0x39,0x6f,0xa5,0x42,0x29,0x76,0x47, + 0x42,0x5e,0x75,0x5e,0x62,0x3c,0xaf,0x54,0x5c,0x39,0xbd,0xa5,0x50,0x29,0x79,0x47, + 0x43,0x3e,0x75,0x76,0x62,0x44,0x5d,0x55,0xbe,0x3a,0x57,0xa5,0x5b,0x29,0x7b,0xb9, + 0x43,0xb0,0x75,0x2e,0x62,0x48,0xaf,0x57,0x3c,0x3a,0x77,0xa5,0x63,0x29,0x7d,0xb9, + 0x44,0x66,0x75,0xb8,0x62,0x4e,0xaf,0x58,0x7c,0x3a,0xb9,0xa5,0x6f,0x29,0xa2,0xb9, + 0x45,0x46,0x76,0x38,0x62,0x53,0xaf,0x59,0xae,0x3b,0x4f,0xa5,0x7a,0x29,0x23,0x27, + 0x45,0x2e,0x76,0x4a,0x62,0x57,0xaf,0x5a,0xae,0x3b,0x6f,0xa5,0x23,0x29,0x25,0xb9, + 0x46,0x66,0x76,0x60,0x62,0x5d,0xaf,0x5c,0x5c,0x3b,0xb1,0xa5,0x2e,0x29,0x28,0x27, + 0x46,0xc0,0x76,0x74,0x62,0x62,0x5d,0x5d,0x6c,0x3c,0x43,0xa5,0xa8,0x29,0x2a,0x27, + 0x47,0x6e,0x76,0x22,0x62,0x65,0xaf,0x5e,0x5c,0x3c,0x5f,0xa5,0xaf,0x29,0x2c,0x67, + 0x47,0xb8,0x76,0x30,0x62,0x69,0x5d,0x5f,0x4c,0x3c,0x7b,0xa5,0xb6,0x29,0x2e,0x47, + 0x48,0x5e,0x76,0xb0,0x62,0x6c,0xaf,0x60,0x5c,0x3c,0xb1,0xa5,0xc0,0x29,0x30,0x27, + 0x48,0xc0,0x77,0x34,0x62,0x72,0xaf,0x61,0x7c,0x3d,0x47,0xa6,0x37,0x29,0xa4,0xb9, + 0x49,0x26,0x77,0x4a,0x62,0x78,0x5d,0x62,0xbe,0x3d,0x73,0xa6,0x42,0x29,0xa8,0x67, + 0x4a,0x66,0x77,0x60,0x62,0x7d,0xaf,0x64,0x5c,0x3d,0xb1,0xa6,0x4e,0x29,0xc0,0x51, + 0x21,0x58,0xbf,0x34,0x4f,0x29,0xaa,0xb9,0x4b,0x36,0x77,0x74,0x62,0x22,0x5d,0x65, + 0x6c,0x3e,0x43,0xa6,0x56,0x29,0xac,0x27,0x4b,0x6e,0x77,0x24,0x62,0x26,0x5d,0x66, + 0x6c,0x3e,0x63,0xa6,0x5e,0x29,0xae,0x27,0x4b,0xc0,0x77,0xa4,0x62,0x29,0xaf,0x67, + 0x5c,0x3e,0xa1,0xa6,0x65,0x29,0xb0,0x67,0x4c,0x66,0x77,0xb2,0x62,0x2d,0x6e,0x5a, + 0x3c,0x6e,0xa9,0xa6,0x6b,0x29,0xb1,0xb9,0x4c,0xa8,0x77,0xbe,0x62,0x30,0x5d,0x68, + 0xbe,0x3f,0x33,0xa6,0x72,0x29,0xb3,0x27,0x4d,0x4e,0x78,0x3a,0x62,0xa5,0xaf,0x69, + 0xae,0x3f,0x4f,0xa6,0x79,0x29,0xb5,0x67,0x4d,0x26,0x78,0x48,0x62,0xa9,0xaf,0x6a, + 0xae,0x3f,0x6f,0xa6,0x22,0x29,0xb7,0x27,0x4e,0x4e,0x78,0x5c,0xb8,0x55,0x40,0xbd, + 0xae,0x3f,0x2f,0xa6,0x29,0x29,0xb9,0x67,0x4e,0x26,0x78,0x68,0x62,0xb2,0x5d,0x6d, + 0x3c,0x40,0x37,0xa6,0xa5,0x29,0xbb,0xb9,0x4f,0x56,0x78,0x7c,0x62,0xb6,0x5d,0x6d, + 0xbe,0x40,0x5b,0xa6,0xae,0x29,0xbe,0x67,0x4f,0xb8,0x78,0x30,0x62,0xbb,0xaf,0x6f, + 0x5c,0x40,0xa1,0xa6,0xb7,0x29,0xc0,0x6f,0x2c,0x40,0x2b,0xa6,0xba,0x29,0xc1,0x47, + 0x50,0x26,0x78,0xbc,0x62,0xc2,0x5d,0x70,0xbe,0x39,0x33,0xa7,0x32,0x2a,0x31,0x27, + 0x51,0x4e,0x79,0x3e,0x63,0x34,0xaf,0x72,0x4c,0x41,0x5b,0xa7,0x3e,0x2a,0x34,0x27, + 0x51,0xc0,0x79,0x52,0x63,0x39,0xaf,0x73,0x5c,0x41,0xa1,0xa7,0x47,0x2a,0x37,0x47, + 0x52,0x26,0x79,0x68,0x63,0x3f,0x5d,0x74,0x2c,0x41,0xbd,0xa7,0x50,0x2a,0x39,0x67, + 0x53,0x46,0x79,0x78,0x63,0x43,0x5d,0x75,0x2c,0x42,0x4b,0xa7,0x58,0x2a,0x3b,0x47, + 0x53,0x7e,0x79,0x26,0x63,0x46,0xaf,0x76,0x7c,0x42,0x67,0xa7,0x5f,0x2a,0x3c,0xb9, + 0x54,0x36,0x79,0xa6,0x63,0x4a,0x5d,0x77,0x6c,0x42,0x27,0xa7,0x67,0x2a,0x3e,0xb9, + 0x54,0x76,0x79,0xb6,0x63,0x4e,0x5d,0x78,0x6c,0x42,0xb9,0xa7,0x6f,0x2a,0x40,0xb9, + 0x55,0x36,0x7a,0x34,0x63,0x52,0x5d,0x79,0x6c,0x43,0x43,0xa7,0x76,0x2a,0x42,0x27, + 0x55,0x6e,0x7a,0x42,0x63,0x55,0xaf,0x7a,0x5c,0x43,0x5f,0xa7,0x7d,0x2a,0x44,0x67, + 0x55,0xb8,0x7a,0x50,0x63,0x59,0x5d,0x7b,0x4c,0x43,0x7b,0xa7,0x24,0x2a,0x46,0x47, + 0x56,0x5e,0x7a,0x5e,0x63,0x5c,0xaf,0x7c,0x4c,0x43,0xad,0xa7,0x2c,0x2a,0x48,0x67, + 0x56,0xb8,0x7a,0x70,0x63,0x61,0xaf,0x7d,0x5c,0x44,0x3f,0xa7,0xa7,0x2a,0x4a,0x67, + 0x57,0x66,0x7a,0xa2,0x63,0x66,0x5d,0x7e,0x6c,0x44,0x63,0xa7,0xb0,0x2a,0x4c,0x27, + 0x60,0x59,0x65,0x3a,0x32,0x4a,0x5d,0xa1,0x3c,0x44,0x77,0xa7,0xb5,0x2a,0x4d,0xb9, + 0x58,0x66,0x7a,0xb2,0x63,0x6d,0x5d,0xa2,0x4c,0x44,0xad,0xa7,0xbe,0x2a,0x50,0x67, + 0x58,0xb8,0x7a,0xc2,0x63,0x71,0x5d,0x21,0x4c,0x45,0x3b,0xa8,0x34,0x2a,0x52,0x27, + 0x59,0x6e,0x7b,0x42,0x63,0x76,0x5d,0x22,0x6c,0x45,0x63,0xa8,0x3e,0x2a,0x54,0x2f, + 0x25,0x76,0x2f,0x50,0x63,0x7a,0x5d,0x23,0x6c,0x45,0x27,0xa8,0x47,0x2a,0x56,0xb9, + 0x5a,0x2e,0x7b,0x6a,0x63,0xa1,0xaf,0x24,0xae,0x45,0xc1,0xa8,0x53,0x2a,0x5a,0x47, + 0x5b,0x6e,0x7b,0x22,0x63,0x25,0xaf,0x26,0x6c,0x46,0x67,0xa8,0x5f,0x2a,0x5c,0xb9, + 0x5c,0x3e,0x7b,0xa8,0x63,0x2a,0xaf,0x27,0x2c,0x46,0x2b,0xa8,0x68,0xbd,0x23,0x38, + 0xbe,0x76,0x7b,0xb6,0x63,0x2e,0x5d,0x28,0x6c,0x46,0xb5,0xa8,0x6e,0x2a,0x60,0x27, + 0x5c,0xc0,0x7c,0x32,0x63,0xa3,0xaf,0x29,0x5c,0x47,0x3f,0xa8,0x75,0x2a,0x62,0x67, + 0x5d,0x66,0x7c,0x40,0x63,0xa8,0x5d,0x2a,0x6c,0x47,0x67,0xa8,0xa1,0x2a,0x64,0xb9, + 0x5e,0x3e,0x7c,0x58,0x63,0xad,0x5d,0x2b,0x2c,0x47,0x2b,0xa8,0x28,0x2a,0x67,0x27, + 0x5e,0xa8,0x7c,0x6e,0x63,0xb2,0xaf,0x2d,0x3c,0x48,0x37,0xa8,0xa6,0x2a,0x6a,0xb9, + 0x5f,0x7e,0x7c,0x26,0x63,0xbb,0x5d,0x2f,0x4c,0x48,0x7b,0xa8,0xb9,0x2a,0x70,0x47, + 0x60,0xb0,0x7c,0xc0,0x63,0x32,0x5d,0xa3,0x6c,0x49,0x47,0xa9,0x37,0x2a,0x72,0xb9, + 0x61,0x7e,0x7d,0x46,0x64,0x36,0xaf,0xa4,0x7c,0x49,0x67,0xa9,0x3f,0x2a,0x74,0xb9, + 0x62,0x46,0x7d,0x5e,0x64,0x3c,0xaf,0xa6,0x3c,0x49,0xa9,0xa9,0x4b,0x2a,0x77,0xb9, + 0x62,0xb0,0x7d,0x6e,0x64,0x40,0xaf,0xa7,0x3c,0x4a,0x37,0xa9,0x53,0x2a,0x79,0xb9, + 0x63,0x56,0x7d,0x7c,0x64,0x44,0x5d,0xa7,0xbe,0x4a,0x53,0xa9,0x5a,0x2a,0x7b,0x27, + 0x63,0x2e,0x7d,0x2a,0x64,0x47,0xaf,0xa8,0xae,0x4a,0x6f,0xa9,0x61,0x2a,0x7d,0x67, + 0x64,0x46,0x7d,0xaa,0x64,0x4b,0x5d,0xa9,0x2c,0x4a,0x2b,0xa9,0x68,0x2a,0xa1,0x47, + 0x64,0x7e,0x7d,0xb8,0x64,0x4e,0xaf,0xaa,0x7c,0x4a,0xb9,0xa9,0x6f,0x2a,0xa2,0xb9, + 0x65,0x36,0x7e,0x34,0x64,0x52,0x5d,0xab,0x6c,0x4b,0x43,0xa9,0x76,0x2a,0x22,0x27, + 0x65,0x6e,0x7e,0x42,0x64,0x55,0xaf,0xac,0x5c,0x4b,0x5f,0xa9,0x7d,0x2a,0x24,0x67, + 0x65,0xb8,0x7e,0x50,0x64,0x59,0x5d,0xad,0x4c,0x4b,0x7b,0xa9,0x24,0x2a,0x26,0xb9, + 0x66,0x7e,0x7e,0x66,0x64,0x5f,0xaf,0xaf,0x3c,0x4c,0x37,0xa9,0xa5,0x2a,0x29,0xb9, + 0x70,0x59,0x65,0x3a,0x32,0x54,0x5d,0xb0,0x3c,0x4c,0x5b,0xa9,0xaf,0x2a,0x2c,0x67, + 0x67,0xc0,0x7e,0xa8,0x64,0x6a,0xaf,0xb1,0x2c,0x4c,0x2b,0xa9,0xba,0x2a,0x2f,0x67, + 0x68,0x26,0x7e,0xba,0x64,0x6f,0x5d,0xb2,0x2c,0x4c,0xbd,0xa9,0xc2,0x2a,0xa3,0x27, + 0x69,0x66,0xa1,0x40,0x64,0x75,0x5d,0xb4,0x4c,0x4d,0x5b,0xaa,0x3c,0x2a,0xa6,0x6f, + 0x25,0x76,0x2f,0x4e,0x64,0x78,0xaf,0xb5,0x4c,0x4d,0x7b,0xaa,0x44,0x2a,0xa8,0x67, + 0x6a,0x66,0xa1,0x60,0x64,0x7d,0x5d,0xb6,0x4c,0x4d,0xad,0xaa,0x4c,0x2a,0xaa,0x47, + 0x6a,0xb0,0xa1,0x6e,0x64,0xa2,0xaf,0xb7,0x5c,0x4e,0x3f,0xaa,0x55,0x2a,0xac,0x67, + 0x6b,0x66,0xa1,0xa2,0x64,0x25,0xaf,0xb8,0x5c,0x4e,0x5f,0xaa,0x5e,0xbd,0x23,0x38, + 0xbd,0xb8,0xa1,0x30,0x64,0x29,0x5d,0xb9,0x4c,0x4e,0x7b,0xaa,0x64,0x2a,0xb0,0x47, + 0x6c,0x5e,0xa1,0xb0,0x64,0x2c,0xaf,0xba,0x3c,0x4e,0xa9,0xaa,0x6b,0x2a,0xb1,0xb9, + 0x6c,0xa8,0xa1,0xbe,0x64,0x30,0x5d,0xba,0xbe,0x4f,0x33,0xaa,0x72,0x2a,0xb3,0x27, + 0x6d,0x4e,0xa2,0x3e,0x64,0xa6,0xaf,0xbc,0x4c,0x4f,0x5b,0xaa,0x7e,0x2a,0xb6,0xb9, + 0x6e,0x3e,0xa2,0x56,0x64,0xac,0xaf,0xbd,0xae,0x4f,0xa5,0xaa,0x2b,0x2a,0xba,0x47, + 0x6e,0xb8,0xa2,0x70,0x64,0xb3,0xaf,0xbf,0x5c,0x50,0x3f,0xaa,0xa8,0x2a,0xbc,0x27, + 0x6f,0x6e,0xa2,0x24,0x64,0xb8,0x5d,0xc0,0x6c,0x50,0x63,0xaa,0xb0,0x2a,0xbe,0x27, + 0x6f,0xc0,0xa2,0xa4,0x64,0xbb,0xaf,0xc1,0x5c,0x50,0xa1,0xaa,0xb7,0x2a,0xc0,0x6f, + 0x2c,0x50,0x2b,0xaa,0xba,0x2a,0xc1,0x47,0x70,0x7e,0xa2,0xb8,0x64,0xc0,0xaf,0xc2, + 0x2c,0x50,0xbd,0xaa,0xc2,0x2a,0x71,0x47,0x71,0x3e,0x21,0x36,0x65,0x32,0xb0,0x31, + 0x7c,0x51,0x47,0xab,0x37,0x2b,0x32,0xb9,0x71,0x76,0x21,0x44,0x65,0x36,0x5e,0x32, + 0x6c,0x51,0x63,0xab,0x3e,0x2b,0x34,0x27,0x71,0xc0,0x21,0x54,0x65,0x3a,0x5e,0x33, + 0x6c,0x51,0x23,0xab,0x46,0x2b,0x36,0x27,0x72,0x6e,0x21,0x64,0x65,0x3e,0x5e,0x34, + 0x6c,0x51,0xb9,0xab,0x4f,0x2b,0x38,0xb9,0x73,0x3e,0x21,0x76,0x65,0x42,0xb0,0x35, + 0x7c,0x52,0x47,0xab,0x57,0x2b,0x3a,0xb9,0x73,0x26,0x21,0x2a,0x65,0x47,0xb0,0x36, + 0xae,0x52,0x6f,0xab,0x61,0x2b,0x3d,0x67,0x74,0x46,0x21,0xaa,0x65,0x4b,0xb0,0x37, + 0xae,0x52,0x2f,0xab,0x69,0x2b,0x3f,0x67,0x74,0x26,0x21,0xba,0x65,0x4f,0x5e,0x38, + 0x2c,0x52,0xbd,0xab,0x70,0x2b,0x41,0x47,0x75,0x3e,0x22,0x36,0x65,0x52,0xb0,0x39, + 0x7c,0x58,0x25,0x4b,0x35,0x71,0xa5,0x27,0x75,0x66,0x22,0x40,0x65,0x55,0x5e,0x3a, + 0x4c,0x53,0x5b,0xab,0x7c,0x2b,0x44,0x47,0x75,0xb0,0x22,0x4e,0x65,0x58,0xb0,0x3b, + 0x5c,0x53,0xa1,0xab,0x26,0x2b,0x46,0x27,0x76,0x6e,0x22,0x64,0x65,0x5e,0x5e,0x3c, + 0x6c,0x53,0xb5,0xab,0x2e,0x2b,0x48,0x27,0x76,0xc0,0x22,0x76,0x65,0x63,0x5e,0x3d, + 0xb2,0x5b,0x53,0xb1,0xaa,0x2b,0x4b,0x47,0x77,0x7e,0x22,0x26,0x65,0x66,0xb0,0x3e, + 0x2c,0x54,0x6b,0xab,0xb2,0x2b,0x4d,0x47,0x78,0x3e,0x22,0xa8,0x65,0x6a,0xb0,0x3f, + 0x7c,0x54,0x27,0xab,0xb9,0x2b,0x4e,0xb9,0x78,0x76,0x22,0xb6,0x65,0x6e,0x5e,0x40, + 0x6c,0x54,0xb5,0xab,0xc0,0x2b,0x50,0x27,0x78,0xc0,0x23,0x34,0x65,0x72,0x6e,0x5a, + 0x34,0xbf,0x3f,0xac,0x35,0x2b,0x52,0x67,0x79,0x66,0x23,0x40,0x65,0x75,0xb0,0x42, + 0x5c,0x55,0x5f,0xac,0x3d,0x2b,0x54,0x67,0x79,0xb8,0x23,0x50,0x65,0x79,0x5e,0x43, + 0x4c,0x55,0x7b,0xac,0x44,0x2b,0x56,0x47,0x7a,0x5e,0x23,0x5e,0x65,0x7c,0xb0,0x44, + 0x3c,0x55,0xa9,0xac,0x4b,0x2b,0x57,0xb9,0x7a,0xa8,0x23,0x6e,0x65,0xa2,0xb0,0x45, + 0x3c,0x56,0x37,0xac,0x53,0x2b,0x59,0xb9,0x7b,0x5e,0x23,0x7e,0x65,0x24,0xb0,0x46, + 0x4c,0x56,0x5b,0xac,0x5c,0x2b,0x5c,0x67,0x7b,0xb8,0x23,0x30,0x65,0x29,0x5e,0x47, + 0x4c,0x56,0x7b,0xac,0x64,0x2b,0x5e,0x47,0x7c,0x66,0x23,0xb4,0x65,0x2e,0x5e,0x48, + 0x6c,0x56,0xb5,0xac,0x6e,0x2b,0x60,0x27,0x7c,0xc0,0x24,0x34,0x65,0xa4,0x5e,0x49, + 0x6c,0x57,0x47,0xac,0x77,0x2b,0x62,0xb9,0x7d,0x7e,0x24,0x46,0x65,0xa8,0xb0,0x4a, + 0x7c,0x57,0x67,0xac,0xa1,0x2b,0x64,0xb9,0x7e,0x3e,0x24,0x56,0x65,0xac,0xb0,0x4b, + 0x7c,0x57,0x2b,0xac,0x28,0x2b,0x67,0x47,0x7e,0x7e,0x24,0x66,0x65,0xb0,0xb0,0x4c, + 0xae,0x57,0xc1,0xac,0xa4,0x2b,0x69,0x27,0xa1,0x5e,0x24,0xa2,0x65,0xb7,0x5e,0x4e, + 0x4c,0x58,0x5b,0xac,0xae,0x2b,0x6c,0x27,0xa2,0x36,0x24,0xa8,0x65,0xbc,0xb0,0x4f, + 0x7c,0x58,0x28,0xae,0x65,0xbe,0x5e,0x4f,0xbe,0x58,0xa9,0xac,0xbd,0x2b,0x6f,0xb9, + 0xa2,0xa8,0x24,0xbe,0x65,0xc2,0x5e,0x50,0xbe,0x51,0x33,0xad,0x32,0x2b,0x71,0x27, + 0x21,0x4e,0x25,0x3a,0x66,0x33,0xb0,0x51,0xae,0x59,0x4f,0xad,0x39,0x2b,0x73,0x67, + 0x21,0x26,0x25,0x48,0x66,0x37,0x5e,0x52,0x2c,0x59,0x6b,0xad,0x40,0x2b,0x75,0x47, + 0x22,0x3e,0x25,0x56,0x66,0x3a,0xb0,0x53,0xae,0x59,0x2f,0xad,0x4a,0x2b,0x77,0x27, + 0x22,0xb0,0x28,0xad,0x3e,0x33,0x51,0x6c,0x5c,0x59,0xc1,0xad,0x51,0x2b,0x79,0x67, + 0x23,0x46,0x25,0x78,0x66,0x44,0x5e,0x56,0x6c,0x5a,0x63,0xad,0x5e,0x2b,0x7c,0x27, + 0x23,0xc0,0x25,0xa8,0x66,0x4a,0xb0,0x57,0x2c,0x5a,0x2b,0xad,0x68,0x2b,0xa1,0x67, + 0x24,0x26,0x25,0xba,0x66,0x4f,0x5e,0x58,0x2c,0x5a,0xbd,0xad,0x70,0x2b,0x21,0x27, + 0x25,0x68,0x26,0x42,0x68,0x54,0xb0,0x5a,0x3c,0x5b,0x57,0xad,0x7b,0x2b,0x24,0x27, + 0x25,0xc0,0x26,0x54,0x66,0x5a,0x5e,0x5b,0x6c,0x5b,0x27,0xad,0x27,0x2b,0x26,0xb9, + 0x26,0x76,0x26,0x64,0x66,0x5e,0x5e,0x5c,0x6c,0x5b,0xbd,0xad,0xa5,0x2b,0x29,0xb9, + 0x27,0x56,0x26,0x7c,0x66,0x64,0x5e,0x5d,0xbe,0x5c,0x53,0xad,0xac,0x2b,0x2b,0x2f, + 0x25,0x72,0xc0,0x28,0x66,0x67,0x5e,0x5e,0x2c,0x5c,0x6b,0xad,0xb2,0x2b,0x2d,0x47, + 0x28,0x3e,0x26,0xa8,0x66,0x6a,0xb0,0x5f,0x7c,0x5c,0x27,0xad,0xb9,0x2b,0x2e,0xb9, + 0x28,0x76,0x26,0xb6,0x66,0x6e,0x5e,0x60,0x6c,0x5c,0xb5,0xad,0xc0,0x2b,0x30,0x27, + 0x28,0xc0,0x27,0x32,0x66,0x71,0xb0,0x61,0x5c,0x5d,0x3f,0xae,0x35,0x2b,0xa4,0x67, + 0x29,0x66,0x27,0x40,0x66,0x75,0x5e,0x62,0x4c,0x5d,0x5b,0xae,0x3c,0x2b,0xa6,0x47, + 0x29,0xb0,0x27,0x4e,0x66,0x78,0xb0,0x63,0x3c,0x5d,0x77,0xae,0x43,0x2b,0xa7,0xb9, + 0x2a,0x56,0x27,0x5c,0x66,0x7c,0x5e,0x63,0xbe,0x5d,0xa5,0xae,0x4a,0x2b,0xa9,0x27, + 0x2a,0x2e,0x27,0x6a,0x66,0xa1,0xb0,0x64,0xae,0x5d,0xc1,0xae,0x53,0x2b,0xab,0xb9, + 0x2b,0x5e,0x27,0x7e,0x66,0x24,0xb0,0x66,0x4c,0x5e,0x63,0xae,0x5e,0x2b,0xae,0x27, + 0x2b,0xc0,0x27,0xa8,0x66,0x2c,0x5e,0x67,0xbe,0x5e,0xa5,0xae,0x6a,0x2b,0xb1,0x27, + 0x2c,0xb8,0x27,0xc2,0x66,0xa3,0xb0,0x69,0x5c,0x5f,0x3f,0xae,0x76,0x2b,0xb4,0x27, + 0x2d,0x6e,0x28,0x42,0x66,0xa7,0xb0,0x6a,0x5c,0x5f,0x5f,0xae,0xa1,0x2b,0xb7,0x27, + 0x2e,0x4e,0x28,0x5a,0x66,0xad,0xb0,0x6b,0xae,0x5f,0x2f,0xae,0x2a,0x2b,0xb9,0x27, + 0x2e,0x2e,0x28,0x6a,0x66,0xb1,0xb0,0x6c,0xae,0x5f,0xc1,0xae,0xa3,0x2b,0xbb,0x67, + 0x2f,0x46,0x28,0x78,0x66,0xb5,0x5e,0x6d,0x2c,0x60,0x4b,0xae,0xaa,0x2b,0xbd,0x47, + 0x2f,0x7e,0x28,0x26,0x66,0xb8,0xb0,0x6e,0x2c,0x60,0x6b,0xae,0xb2,0x2b,0xbf,0x47, + 0x30,0x3e,0x28,0xa8,0x66,0xbc,0xb0,0x6f,0x7c,0x60,0x28,0xae,0x66,0xbe,0x5e,0x6f, + 0xbe,0x60,0xa5,0xae,0xbc,0x2b,0xc1,0x27,0x30,0x2e,0x28,0xbc,0x66,0xc1,0xb0,0x70, + 0xae,0x60,0xc2,0xad,0x3e,0x33,0x70,0xa3,0x41,0x36,0x29,0x34,0x67,0x32,0x5e,0x71, + 0x6c,0x61,0x43,0xaf,0x36,0x2c,0x32,0x27,0xa3,0x6e,0x29,0x42,0x67,0x35,0xb0,0x72, + 0x5c,0x61,0x5f,0xaf,0x3d,0x2c,0x34,0x67,0xa3,0xb8,0x29,0x50,0x67,0x3a,0x5e,0x73, + 0x6c,0x61,0x27,0xaf,0x47,0x2c,0x36,0xb9,0xa4,0x7e,0x29,0x66,0x67,0x3e,0xb0,0x74, + 0x7c,0x61,0xb9,0xb0,0xb8,0x51,0x40,0x74,0xae,0x61,0xc1,0xaf,0x51,0x2c,0x39,0x67, + 0xa5,0x46,0x29,0x78,0x67,0x43,0x5e,0x75,0xae,0x62,0x4f,0xaf,0x59,0x2c,0x3b,0x67, + 0xa5,0x26,0x29,0x28,0x67,0x47,0xb0,0x76,0xae,0x62,0x6f,0xaf,0x61,0x2c,0x3d,0x67, + 0xa6,0x46,0x29,0xaa,0x67,0x4b,0xb0,0x77,0xae,0x62,0x2f,0xaf,0x69,0x2c,0x3f,0x67, + 0xa6,0x28,0x26,0x41,0x70,0x4e,0xb0,0x78,0x7c,0x62,0xb9,0xaf,0x6f,0x2c,0x40,0xb9, + 0xa7,0x36,0x2a,0x34,0x67,0x52,0x5e,0x79,0x6c,0x63,0x43,0xaf,0x76,0x2c,0x42,0x27, + 0xa7,0x6e,0x2a,0x44,0x67,0x56,0x5e,0x7a,0x6c,0x63,0x63,0xaf,0x7e,0x2c,0x44,0x27, + 0xa7,0xc0,0x2a,0x52,0x67,0x59,0xb0,0x7b,0x5c,0x63,0xa1,0xaf,0x25,0x2c,0x46,0x67, + 0xa8,0x66,0x2a,0x60,0x67,0x5d,0x5e,0x7c,0x4c,0x63,0xad,0xaf,0x2c,0x2c,0x48,0x47, + 0xa8,0xb0,0x2a,0x6e,0x67,0x60,0xb0,0x7d,0x3c,0x64,0x37,0xaf,0xa5,0x2c,0x49,0xb9, + 0xa9,0x5e,0x2a,0x7e,0x67,0x64,0xb0,0x7e,0x4c,0x64,0x5b,0xaf,0xae,0x2c,0x4c,0x47, + 0xa9,0xb0,0x2a,0x2e,0x67,0x68,0xb0,0xa1,0x3c,0x64,0x77,0xaf,0xb5,0x2c,0x4d,0xb9, + 0xaa,0x56,0x2a,0xae,0x67,0x6c,0x5e,0xa1,0xbe,0x64,0xa5,0xaf,0xbc,0x2c,0x4f,0x27, + 0xaa,0x2e,0x2a,0xbc,0x67,0x6f,0xb0,0xa2,0xae,0x64,0xc1,0xb0,0x31,0x2c,0x51,0x67, + 0xab,0x46,0x2b,0x38,0x67,0x73,0x5e,0x21,0x2c,0x65,0x4b,0xb0,0x38,0x2c,0x53,0x47, + 0xab,0x7e,0x2b,0x46,0x67,0x76,0xb0,0x22,0x7c,0x65,0x67,0xb0,0x3f,0x2c,0x54,0xb9, + 0xac,0x36,0x2b,0x54,0x67,0x7a,0x5e,0x23,0x6c,0x65,0x23,0xb0,0x46,0x2c,0x56,0x27, + 0xac,0x6e,0x2b,0x62,0x67,0x7d,0xb0,0x24,0x5c,0x65,0xb1,0xb0,0x4f,0x2c,0x58,0xb9, + 0xad,0x3e,0x2b,0x76,0x67,0x22,0xb0,0x25,0x2c,0x66,0x4b,0xb0,0x58,0x2c,0x5b,0x47, + 0xad,0x7e,0x2b,0x26,0x67,0x27,0xb0,0x26,0xae,0x66,0x6f,0xb0,0x61,0x2c,0x5d,0x27, + 0xae,0x4e,0x2b,0xac,0x67,0x2b,0xb0,0x27,0xae,0x66,0x2f,0xb0,0x69,0x2c,0x5f,0x67, + 0xae,0x26,0x2b,0xba,0x67,0x2f,0x5e,0x28,0x2c,0x66,0xbd,0xb0,0x70,0x2c,0x61,0x47, + 0xaf,0x3e,0x2c,0x36,0xb8,0x55,0x72,0xa3,0x50,0x5e,0x41,0x37,0x31,0xa4,0xb0,0x29, + 0x7c,0x67,0x47,0xb0,0x77,0x2c,0x62,0xb9,0xaf,0x76,0x2c,0x44,0x67,0xa8,0x5e,0x2a, + 0x6c,0x67,0x63,0xb0,0x7e,0x2c,0x64,0x27,0xaf,0xc0,0x2c,0x52,0x67,0xab,0xb0,0x2b, + 0x5c,0x67,0xa1,0xb0,0x26,0x2c,0x66,0x27,0xb0,0x6e,0x2c,0x62,0x67,0xaf,0xb0,0x2c, + 0x5c,0x67,0xb1,0xb0,0x2d,0x2c,0x68,0x6f,0x25,0x76,0x30,0x6e,0x67,0xb2,0xb0,0x2d, + 0x3c,0x68,0x37,0xb0,0xa5,0x2c,0x69,0xb9,0xb1,0x56,0x2c,0x7c,0x67,0xb6,0x5e,0x2d, + 0xbe,0x68,0x53,0xb0,0xac,0x2c,0x6b,0x27,0xb1,0x2e,0x2c,0x2a,0x67,0xb9,0xb0,0x2e, + 0xae,0x68,0x6f,0xb0,0xb4,0x2c,0x6d,0x27,0xb2,0x4e,0x2c,0xae,0xb8,0x2c,0x6e,0x27, + 0xb2,0x6e,0x2c,0xb6,0x67,0xc0,0x6e,0x5a,0x34,0xc2,0xb1,0xb0,0xbf,0x2c,0x70,0x67, + 0xb2,0xb8,0x2c,0xc2,0x67,0x32,0x5e,0xa3,0x6c,0x69,0x43,0xb1,0x37,0x2c,0x72,0xb9, + 0xb3,0x76,0x2d,0x44,0x68,0x36,0x5e,0xa4,0x6c,0x69,0x63,0xb1,0x3e,0x2c,0x74,0x27, + 0xb3,0xc0,0x2d,0x52,0x68,0x39,0xb0,0xa5,0x5c,0x69,0xa1,0xb1,0x45,0x2c,0x76,0x67, + 0xb4,0x66,0x2d,0x60,0x68,0x3d,0x5e,0xa6,0x4c,0x69,0xad,0xb1,0x4c,0x2c,0x78,0x47, + 0xb4,0xb0,0x2d,0x6e,0x68,0x40,0xb0,0xa7,0x3c,0x6a,0x37,0xb1,0x53,0x2c,0x79,0xb9, + 0xb5,0x56,0x2d,0x7c,0x68,0x44,0x5e,0xa7,0xbe,0x6a,0x5b,0xb1,0x5c,0x2c,0x7c,0x67, + 0xb5,0xb8,0x2d,0xa6,0x68,0x4a,0x5e,0xa9,0x6c,0x6a,0x23,0xb1,0x66,0x2c,0x7e,0x27, + 0xb6,0x6e,0x2d,0xb8,0x68,0x4f,0x5e,0xaa,0x2c,0x6a,0xbd,0xb1,0x70,0x2c,0x21,0x47, + 0xb7,0x3e,0x2e,0x36,0x68,0x52,0xb0,0xab,0x2c,0x6b,0x4b,0xb1,0x78,0x2c,0x23,0x67, + 0xb7,0x26,0x2e,0x48,0x68,0x57,0xb0,0xac,0xae,0x6b,0x6f,0xb1,0x21,0x2c,0x25,0x67, + 0xb8,0x46,0x2e,0x58,0x68,0x5c,0x5e,0xad,0xbe,0x6b,0xa5,0xb1,0x2a,0x2c,0x27,0x27, + 0xb8,0x2e,0x2e,0x6a,0x68,0x5f,0xb0,0xae,0xae,0x6b,0xc1,0xb1,0xa4,0x2c,0x29,0x27, + 0xb9,0x4e,0x2e,0x7c,0x68,0x64,0x5e,0xaf,0xbe,0x6c,0x57,0xb1,0xad,0x2c,0x2b,0xb9, + 0xb9,0xa8,0x2e,0x2c,0x68,0x68,0x5e,0xb0,0xbe,0x6c,0x7b,0xb1,0xb7,0x2c,0x2e,0x27, + 0xba,0x6e,0x2e,0xb4,0x68,0x6d,0xb0,0xb2,0x5c,0x6c,0xb1,0xb1,0xc1,0x2c,0x30,0xb9, + 0xbb,0x3e,0x2f,0x36,0x68,0x72,0xb0,0xb3,0x2c,0x6d,0x4b,0xb2,0x38,0x2c,0xa5,0x47, + 0xbb,0x7e,0x2f,0x46,0x68,0x76,0xb0,0xb4,0xae,0x6d,0xa1,0xb2,0x45,0x2c,0xa8,0x67, + 0xbc,0x26,0x2f,0x68,0x68,0xa1,0xb0,0xb6,0xae,0x70,0x25,0x3b,0x35,0xc2,0x71,0x64, + 0xbe,0x6e,0x37,0xb2,0x53,0x2c,0xab,0xb9,0xbd,0x56,0x2f,0x7c,0x68,0x24,0x5e,0xb7, + 0xbe,0x6e,0x5b,0xb2,0x5f,0x2c,0xae,0xb9,0xbe,0x36,0x2f,0xa6,0x68,0x2a,0x5e,0xb9, + 0x6c,0x6e,0x2b,0xb2,0x68,0x2c,0xb1,0x67,0xbe,0x26,0x2f,0xba,0x68,0x2f,0x5e,0xba, + 0x2c,0x6e,0xbd,0xb2,0x70,0x2c,0xb3,0x47,0xbf,0x40,0x26,0x42,0x68,0xa4,0x5e,0xbb, + 0x6c,0x6f,0x43,0xb2,0x76,0x2c,0xb4,0x27,0xbf,0x76,0x30,0x46,0x68,0xa8,0xb0,0xbc, + 0x7c,0x6f,0x67,0xb2,0xa1,0x2c,0xb6,0xb9,0xc0,0x36,0x30,0x54,0x68,0xac,0x5e,0xbd, + 0x6c,0x6f,0x23,0xb2,0x26,0x2c,0xb8,0x27,0xc0,0x6e,0x30,0x62,0x68,0xaf,0xb0,0xbe, + 0x5c,0x6f,0xb1,0xb2,0x2d,0x2c,0xba,0x6f,0x25,0x72,0xc2,0x6e,0x68,0xb2,0xb0,0xbf, + 0x3c,0x70,0x37,0xb2,0xa5,0x2c,0xbb,0xb9,0xc1,0x56,0x30,0x7c,0x68,0xb6,0x5e,0xbf, + 0xbe,0x70,0x53,0xb2,0xac,0x2c,0xbd,0x27,0xc1,0x2e,0x30,0x2e,0x68,0xba,0xb0,0xc1, + 0x4c,0x70,0x7b,0xb2,0xb6,0x2c,0xc0,0x6f,0x2c,0x70,0x2b,0xb2,0xba,0x2c,0xc1,0x47, + 0xc2,0x7e,0x30,0xb8,0x68,0xc0,0xb0,0xc2,0xae,0x69,0x3b,0xb3,0x34,0x2d,0x32,0x48, + 0x31,0x5e,0xa3,0x3e,0x69,0x36,0x5f,0x32,0x6c,0x71,0x67,0xb3,0x3f,0x2d,0x34,0xba, + 0x32,0x3e,0xa3,0x56,0x69,0x3a,0xb1,0x33,0x7c,0x71,0x27,0xb3,0x47,0x2d,0x36,0xba, + 0x32,0x26,0xa3,0x6a,0x69,0x40,0x5f,0x34,0xbe,0x72,0x33,0xb3,0x52,0x2d,0x39,0x28, + 0x33,0x4e,0xa3,0x7e,0x69,0x44,0xb1,0x36,0x4c,0x72,0x5b,0xb3,0x5c,0x2d,0x3c,0x68, + 0x33,0xb8,0xa3,0x30,0x69,0x49,0x5f,0x37,0x4c,0x72,0x7b,0xb3,0x64,0x2d,0x3e,0x28, + 0x34,0x26,0xa3,0xba,0x69,0x4f,0x5f,0x38,0x2c,0x72,0xbd,0xb3,0x70,0x2d,0x41,0x68, + 0x35,0x46,0xa4,0x38,0x69,0x53,0xb1,0x39,0xae,0x73,0x4f,0xb3,0x79,0x2d,0x43,0x68, + 0x35,0x26,0xa4,0x48,0x69,0x57,0x5f,0x3a,0x2c,0x73,0x6b,0xb3,0xa2,0x2d,0x45,0x48, + 0x36,0x46,0xa4,0x5a,0x69,0x5b,0xb1,0x3b,0xae,0x73,0x2f,0xb3,0x29,0x2d,0x47,0x68, + 0x36,0x26,0xa4,0x68,0x69,0x60,0x5f,0x3c,0xbe,0x74,0x37,0xb3,0xa5,0x2d,0x49,0xba, + 0x37,0x5e,0xa4,0x7e,0x69,0x64,0xb1,0x3e,0x3c,0x74,0x57,0xb3,0xad,0x2d,0x4b,0xba, + 0x37,0xb8,0xa4,0xa4,0x69,0x6a,0x5f,0x3f,0x6c,0x74,0x23,0xb3,0xb8,0x2d,0x4e,0x28, + 0x38,0x6e,0xa4,0xb6,0x69,0x6e,0x5f,0x40,0x6c,0x74,0xb9,0xb3,0xc1,0x2d,0x50,0xba, + 0x39,0x36,0xa5,0x34,0x69,0x72,0x5f,0x41,0x6c,0x75,0x43,0xb4,0xb8,0x33,0x72,0x50, + 0xb3,0x3d,0x47,0xb4,0x37,0x2d,0x52,0xba,0x39,0x76,0xa5,0x44,0x69,0x76,0x5f,0x42, + 0x6c,0x75,0x63,0xb4,0x3f,0x2d,0x54,0xba,0x3a,0x36,0xa5,0x54,0x69,0x7a,0x5f,0x43, + 0x6c,0x75,0x23,0xb4,0x46,0x2d,0x56,0x28,0x3a,0x6e,0xa5,0x62,0x69,0x7d,0xb1,0x44, + 0x5c,0x75,0xb1,0xb4,0x4d,0x2d,0x58,0x68,0x3a,0xb8,0xa5,0x70,0xb8,0x55,0x5e,0xb7, + 0x3c,0x76,0x37,0xb4,0x53,0x2d,0x59,0xba,0x3b,0x56,0xa5,0x7c,0x69,0x24,0x5f,0x45, + 0xbe,0x76,0x57,0xb4,0x5b,0x2d,0x5b,0xba,0x3b,0xa8,0xa5,0x2c,0x69,0x28,0x5f,0x46, + 0xbe,0x76,0x77,0xb4,0x63,0x2d,0x5d,0xba,0x3c,0x5e,0xa5,0xb0,0x69,0x2c,0xb1,0x48, + 0x4c,0x76,0xad,0xb4,0x6c,0x2d,0x60,0x48,0x3c,0xb2,0x26,0x41,0x70,0x30,0x5f,0x48, + 0xbe,0x77,0x3b,0xb4,0x75,0x2d,0x62,0x28,0x3d,0x6e,0xa6,0x42,0x69,0xa7,0xb1,0x4a, + 0x5c,0x77,0x5f,0xb4,0x7e,0x2d,0x64,0x28,0x3d,0xc0,0xa6,0x54,0x69,0xac,0x5f,0x4b, + 0x6c,0x77,0x27,0xb4,0x27,0x2d,0x66,0xba,0x3e,0x76,0xa6,0x64,0x69,0xb0,0x5f,0x4c, + 0x6c,0x77,0xb5,0xb4,0x2f,0x2d,0x69,0x48,0x3f,0x46,0xa6,0x78,0x69,0xb5,0x5f,0x4d, + 0x2c,0x78,0x4b,0xb4,0xaa,0x2d,0x6b,0x28,0x3f,0x2e,0xa6,0x2c,0x69,0xba,0x5f,0x4e, + 0xbe,0x78,0x77,0xb4,0xb5,0x2d,0x6d,0xba,0x40,0x56,0xa6,0xae,0xb8,0x2d,0x6e,0x28, + 0x40,0x6e,0xa6,0xb8,0x69,0xc1,0x5f,0x50,0xae,0x78,0xc1,0xb3,0x31,0x2d,0x71,0x68, + 0x41,0x46,0xa7,0x38,0x6a,0x33,0xb1,0x51,0xae,0x79,0x4f,0xb5,0x39,0x2d,0x73,0x68, + 0x41,0x26,0xa7,0x48,0x6a,0x37,0x5f,0x52,0x2c,0x79,0x6b,0xb5,0x40,0x2d,0x75,0x48, + 0x42,0x3e,0xa7,0x56,0x6a,0x3a,0xb1,0x53,0x7c,0x79,0x27,0xb5,0x47,0x2d,0x76,0xba, + 0x42,0x7e,0xa7,0x66,0x6a,0x3e,0xb1,0x54,0x7c,0x79,0xb9,0xb5,0x4f,0x2d,0x78,0xba, + 0x43,0x3e,0xa7,0x76,0x6a,0x42,0xb1,0x55,0x7c,0x7a,0x47,0xb5,0x57,0x2d,0x7a,0xba, + 0x43,0x76,0xa7,0x24,0x6a,0x46,0x5f,0x56,0x6c,0x7a,0x63,0xb5,0x5e,0x2d,0x7c,0x28, + 0x43,0xc0,0xa7,0xa4,0x6a,0x49,0xb1,0x57,0x5c,0x7a,0xa1,0xb5,0x65,0x2d,0x7e,0x68, + 0x44,0x66,0xa7,0xb2,0x6a,0x4d,0x5f,0x58,0x4c,0x7a,0xad,0xb5,0x6c,0x2d,0xa2,0x28, + 0x44,0xc0,0xa8,0x34,0x6a,0x52,0x5f,0x59,0x6c,0x7b,0x47,0xb5,0x77,0x2d,0x22,0xba, + 0x45,0x76,0xa8,0x44,0x6a,0x56,0x5f,0x5a,0x6c,0x7b,0x67,0xb5,0xa1,0x2d,0x25,0x48, + 0x46,0x46,0xa8,0x58,0x6a,0x5b,0x5f,0x5b,0x2c,0x7b,0x2b,0xb5,0x28,0x2d,0xc0,0x52, + 0x21,0x55,0x36,0x2a,0x6a,0x5e,0xb1,0x5c,0x2c,0x7b,0xbd,0xb5,0x30,0x2d,0x29,0x68, + 0x47,0x46,0xa8,0x78,0x6a,0x63,0x5f,0x5d,0x2c,0x7c,0x4b,0xb5,0xaa,0x2d,0x2b,0x28, + 0x47,0xa8,0xa8,0x2e,0x6a,0x68,0xb1,0x5f,0x3c,0x7c,0x77,0xb5,0xb5,0x2d,0x2d,0xba, + 0x48,0x66,0xa8,0xb2,0x6a,0x6d,0xb1,0x60,0x5c,0x7c,0xb1,0xb5,0xc0,0xbd,0x23,0x47, + 0xba,0xb8,0xa8,0xc2,0x6a,0x71,0x5f,0x61,0x4c,0x7d,0x3b,0xb6,0x34,0x2d,0xa4,0x28, + 0x49,0x76,0xa9,0x48,0x6a,0x77,0x5f,0x62,0xbe,0x7d,0x73,0xb6,0x42,0x2d,0xa7,0x28, + 0x4a,0x4e,0xa9,0x5a,0x6a,0x7b,0xb1,0x63,0xae,0x7d,0x2f,0xb6,0x49,0x2d,0xa9,0x68, + 0x4a,0x26,0xa9,0x68,0x6a,0xa1,0x5f,0x64,0x2c,0x7d,0xbe,0xad,0x79,0x50,0xaa,0xba, + 0x4b,0x36,0xa9,0x74,0x6a,0x22,0x5f,0x65,0x6c,0x7e,0x43,0xb6,0x56,0x2d,0xac,0x28, + 0x4b,0x6e,0xa9,0x22,0x6a,0x25,0xb1,0x66,0x5c,0x7e,0x5f,0xb6,0x5f,0x2d,0xae,0xba, + 0x4c,0x3e,0xa9,0xa8,0x6a,0x2a,0xb1,0x67,0x2c,0x7e,0x2b,0xb6,0x68,0x2d,0xb1,0x48, + 0x4c,0x7e,0xa9,0xb8,0x6a,0x2e,0xb1,0x68,0xae,0xa1,0x33,0xb6,0x73,0x2d,0xb3,0xba, + 0x4d,0x56,0xaa,0x3c,0x6a,0xa6,0x5f,0x69,0xbe,0xa1,0x5b,0xb6,0x7c,0x2d,0xb6,0x68, + 0x4e,0x4e,0xaa,0x5a,0x6a,0xad,0xb1,0x6b,0xae,0xa1,0x2f,0xb6,0x2b,0x2d,0xba,0x48, + 0x4e,0xc0,0xaa,0x72,0x6a,0xb4,0x5f,0x6d,0xae,0xa2,0x4f,0xb6,0xac,0x2d,0xbd,0x28, + 0x4f,0x2e,0xaa,0x2c,0x6a,0xba,0x5f,0x6e,0xbe,0xa2,0x73,0xb6,0xb4,0x2d,0xbf,0x28, + 0x50,0x4e,0xaa,0xb0,0x6a,0xc0,0xb1,0x70,0x7c,0xa2,0xb9,0xb6,0xc1,0x2d,0xc2,0xba, + 0x41,0x46,0xab,0x38,0x6b,0x33,0x5f,0x71,0x2c,0x21,0x4b,0xb7,0x38,0x2e,0x33,0x68, + 0x51,0x26,0xab,0x48,0x6b,0x37,0x5f,0x72,0x2c,0x21,0x6b,0xb7,0x40,0x2e,0x35,0x48, + 0x52,0x3e,0xab,0x56,0x6b,0x3a,0xb1,0x73,0x7c,0x21,0x2b,0xb7,0x48,0x2e,0x37,0x48, + 0x52,0x7e,0xab,0x66,0x6b,0x3e,0xb1,0x74,0x7c,0x21,0xb9,0xb7,0x4f,0x2e,0x38,0xba, + 0x53,0x36,0xab,0x74,0x6b,0x42,0x5f,0x75,0x6c,0x22,0x43,0xb7,0x56,0x2e,0x3a,0x28, + 0x53,0x6e,0xab,0x22,0x6b,0x45,0xb1,0x76,0x5c,0x22,0x5f,0xb7,0x5d,0x2e,0x3c,0x68, + 0x53,0xb8,0xab,0x30,0x6b,0x49,0x5f,0x77,0x4c,0x22,0x7b,0xb7,0x64,0x2e,0x3e,0x48, + 0x54,0x5e,0xab,0xb0,0x6b,0x4c,0xb1,0x78,0x5c,0x22,0xb1,0xb7,0x6e,0x2e,0x40,0x28, + 0x54,0xc0,0xac,0x34,0x6b,0x52,0xb1,0x79,0x7c,0x23,0x47,0xb7,0x77,0x2e,0x6e,0x52, + 0x21,0x55,0x37,0x5a,0x6b,0x56,0x5f,0x7a,0x7c,0x23,0x6f,0xb7,0x21,0x2e,0x45,0x68, + 0x56,0x46,0xac,0x5e,0x6b,0x5c,0xb1,0x7c,0x4c,0x23,0xad,0xb7,0x2c,0x2e,0x48,0x68, + 0x56,0xb8,0xac,0x70,0x6b,0x61,0x5f,0x7d,0x4c,0x24,0x3b,0xb7,0xa6,0x2e,0x4a,0x28, + 0x57,0x26,0xac,0x28,0x6b,0x67,0x5f,0x7e,0x2c,0x24,0x6b,0xb7,0xb2,0xbd,0x23,0x47, + 0xba,0x46,0xac,0xaa,0x6b,0x6b,0xb1,0xa1,0xae,0x24,0x2f,0xb7,0xbc,0x2e,0x4f,0x28, + 0x58,0x2e,0xac,0xbc,0x6b,0x6f,0xb1,0xa2,0xae,0x24,0xc1,0xb8,0x31,0x2e,0x51,0x68, + 0x59,0x46,0xad,0x3e,0x6b,0x75,0x5f,0x22,0x4c,0x25,0x5b,0xb8,0x3c,0x2e,0x54,0x68, + 0x59,0xb8,0xad,0x50,0x6b,0x79,0x5f,0x23,0x4c,0x25,0x7c,0xad,0x79,0x50,0xa7,0xba, + 0x5a,0x56,0xad,0x5c,0x6b,0x7c,0x5f,0x23,0xbe,0x25,0xa5,0xb8,0x4a,0x2e,0x57,0x28, + 0x5a,0x2e,0xad,0x6a,0x6b,0xa1,0xb1,0x24,0xae,0x25,0xc1,0xb8,0x51,0x2e,0x59,0x68, + 0x5b,0x46,0xad,0x78,0x6b,0x23,0x5f,0x25,0x2c,0x26,0x4b,0xb8,0x58,0x2e,0x5b,0x28, + 0x5b,0xb0,0xad,0x2e,0x6b,0x28,0xb1,0x27,0x4c,0x26,0xa1,0xb8,0x65,0x2e,0x5e,0x68, + 0x5c,0x66,0xad,0xb2,0x6b,0x2e,0x5f,0x28,0x7c,0x26,0xbd,0xb8,0x70,0x2e,0x61,0x48, + 0x5d,0x3e,0xae,0x36,0x6b,0xa4,0xb1,0x29,0x2c,0x27,0x4b,0xb8,0x78,0x2e,0x63,0x68, + 0x5d,0x26,0xae,0x48,0x6b,0xa9,0x5f,0x2a,0x2c,0x27,0x6b,0xb8,0xa2,0x2e,0x65,0x48, + 0x5e,0x3e,0xae,0x56,0x6b,0xac,0xb1,0x2b,0x7c,0x27,0x27,0xb8,0x27,0x2e,0x66,0xba, + 0x5e,0x26,0xae,0x68,0x6b,0xb1,0x5f,0x2c,0x2c,0x27,0xbd,0xb8,0x30,0x2e,0x69,0x48, + 0x5f,0x3e,0xae,0x76,0x6b,0xb4,0xb1,0x2d,0x7c,0x28,0x47,0xb8,0xa9,0x2e,0x6a,0xba, + 0x5f,0x76,0xae,0x24,0x6b,0xb8,0x5f,0x2e,0x6c,0x28,0x63,0xb8,0xb0,0x2e,0x6c,0x28, + 0x5f,0xc0,0xae,0xa4,0x6b,0xbb,0xb1,0x2f,0x5c,0x28,0xa1,0xb8,0xb7,0x2e,0x6e,0x6f, + 0x2c,0x28,0x2b,0xb8,0xba,0x2e,0x6f,0x48,0x60,0x7e,0xae,0xb8,0x6b,0xc0,0xb1,0x30, + 0x2c,0x28,0xbd,0xb8,0xc2,0x2e,0x31,0x68,0x61,0x46,0xaf,0x38,0x6c,0x33,0xb1,0xa3, + 0xae,0x29,0x4f,0xb9,0x39,0x2e,0x73,0x68,0x61,0x26,0xaf,0x48,0x6c,0x37,0x5f,0xa4, + 0xae,0x29,0x73,0xb9,0x43,0x2e,0x75,0xba,0x62,0x56,0xaf,0x5c,0x6c,0x3c,0x5f,0xa5, + 0xbe,0x29,0xa9,0xb9,0x4b,0x2e,0x77,0xba,0x62,0xb0,0xaf,0x6e,0x6c,0x40,0xb1,0xa7, + 0x4c,0x2a,0x3b,0xb9,0x54,0x2e,0x7a,0x48,0x63,0x5e,0xaf,0x7e,0x6c,0x44,0xb1,0xc1, + 0x21,0xab,0x43,0x34,0x25,0x2e,0x7b,0x28,0x63,0xa8,0xaf,0x2c,0x6c,0x48,0x5f,0xa8, + 0xbe,0x2a,0x73,0xb9,0x62,0x2e,0x7d,0x28,0x64,0x4e,0xaf,0xb2,0x6c,0x4d,0xb1,0xaa, + 0x5c,0x2a,0xc1,0xb9,0x71,0x2e,0x21,0x68,0x65,0x46,0xb0,0x38,0x6c,0x54,0x5f,0xac, + 0x3c,0x2b,0x5b,0xb9,0x7c,0x2e,0x24,0x48,0x65,0xb8,0xb0,0x54,0x6c,0x5a,0x6e,0x5a, + 0x3c,0x6b,0xa1,0xb9,0x26,0x2e,0x26,0x28,0x66,0x6e,0xb0,0x64,0x6c,0x5e,0x5f,0xae, + 0x6c,0x2b,0xb5,0xb9,0x2e,0x2e,0x28,0x28,0x66,0xc0,0xb0,0x72,0x6c,0x62,0x5f,0xaf, + 0x7c,0x2c,0x47,0xb9,0xa9,0x2e,0x2a,0xba,0x67,0x76,0xb0,0x24,0x6c,0x66,0x5f,0xb0, + 0x6c,0x2c,0x67,0xb9,0xb1,0x2e,0x2c,0xba,0x68,0x36,0xb0,0xa6,0xb8,0x55,0x40,0xb1, + 0x5c,0x2c,0xa1,0xb9,0xb7,0x2e,0x2e,0x68,0x68,0x66,0xb0,0xb2,0x6c,0x6d,0x5f,0xb2, + 0x4c,0x2c,0xad,0xb9,0xbe,0x2e,0x30,0x48,0x68,0xb0,0xb0,0xc0,0x6c,0x70,0xb1,0xb3, + 0x3c,0x2d,0x37,0xba,0x33,0x2e,0xa3,0xba,0x69,0x56,0xb1,0x3c,0x6c,0x74,0x5f,0xb3, + 0xbe,0x2d,0x57,0xba,0x3b,0x2e,0xa5,0xba,0x69,0xb0,0xb1,0x4e,0x6c,0x78,0xb1,0xb5, + 0x4c,0x2d,0x7b,0xba,0x44,0x2e,0xa8,0x48,0x6a,0x5e,0xb1,0x5e,0x6c,0x7c,0xb1,0xb6, + 0x3c,0x2d,0xa9,0xba,0x4b,0x2e,0xa9,0xba,0x6a,0xa8,0xb1,0x6c,0x6c,0xa2,0x5f,0xb6, + 0xbe,0x2e,0x33,0xba,0x52,0x2e,0xab,0x28,0x6b,0x4e,0xb1,0x7c,0x6c,0x24,0x5f,0xb7, + 0xbe,0x2e,0x57,0xba,0x5b,0x2e,0xad,0xba,0x6b,0xb0,0xb1,0x2e,0x6c,0x28,0xb1,0xb9, + 0x3c,0x2e,0x77,0xba,0x63,0x2e,0xaf,0xba,0x6c,0x5e,0xb1,0xb0,0x6c,0x2d,0x5f,0xba, + 0x4c,0x2e,0xad,0xba,0x6c,0x2e,0xb2,0x48,0x6c,0xb0,0xb1,0xc0,0x6c,0x30,0xb1,0xbb, + 0x4c,0x2f,0x3b,0xba,0x74,0x2e,0xb4,0x68,0x6d,0x66,0xb2,0x40,0x6c,0xa7,0xb1,0xbc, + 0x5c,0x2f,0x5f,0xba,0x7d,0x2e,0xb6,0x68,0x6d,0xb8,0xb2,0x50,0x6c,0xab,0xb1,0xbd, + 0x5c,0x2f,0x23,0xba,0x26,0x2e,0xb8,0x28,0x6e,0x6e,0xb2,0x62,0x6c,0xaf,0xb1,0xbe, + 0x5c,0x2f,0xb1,0xba,0x2d,0x2e,0xba,0x68,0x6e,0xb8,0xb2,0x70,0x6c,0xb3,0x5f,0xbf, + 0x4c,0x30,0x3b,0xba,0xa6,0x2e,0xbc,0x48,0x6f,0x5e,0xb2,0x7e,0x6c,0xb6,0xb1,0xc0, + 0x3c,0x30,0x57,0xba,0xad,0x2e,0xbd,0xba,0x6f,0xa8,0xb2,0x2c,0x6c,0xba,0x5f,0xc0, + 0xbe,0x30,0x73,0xba,0xb4,0x2e,0xbf,0x28,0x70,0x4e,0xb2,0xac,0x6c,0xbd,0xc0,0x68, + 0x70,0x66,0xb2,0xb2,0x6c,0xc0,0x5f,0xc2,0x6c,0x30,0xb9,0xba,0xc1,0x2e,0x71,0x68, + 0xa2,0x59,0x45,0x3a,0xc2,0x31,0x71,0xba,0x71,0x56,0xb3,0x3c,0x6d,0x34,0x60,0x31, + 0xbe,0xa3,0x5b,0xbb,0x3f,0x2f,0x35,0x48,0x72,0x46,0xb3,0x58,0x6d,0x3d,0xb2,0x34, + 0x5c,0xa4,0x33,0xbb,0x52,0x2f,0x39,0x28,0x73,0x4e,0xb3,0x7e,0x6d,0x45,0x60,0x36, + 0x5c,0xa4,0x5f,0xbb,0x5d,0x2f,0x3c,0x28,0x73,0xc0,0xb3,0xa8,0x6d,0x4a,0xb2,0x37, + 0x30,0x5b,0x53,0xb1,0x67,0x2f,0x3e,0xba,0x74,0x7e,0xb3,0xb8,0x6d,0x4e,0xb2,0x38, + 0x7c,0xa4,0xb9,0xbb,0x6f,0x2f,0x40,0xba,0x75,0x46,0xb4,0x3e,0x6d,0x54,0xb2,0x3a, + 0x3c,0xa5,0x5b,0xbb,0x7c,0x2f,0x44,0x28,0x75,0xc0,0xb4,0x54,0x6d,0x5a,0x60,0x3b, + 0x6c,0xa5,0x23,0xbb,0x26,0x2f,0x46,0x28,0x76,0x6e,0xb4,0x62,0x6d,0x5d,0xc0,0x5a, + 0x34,0xbd,0xad,0xbb,0x2c,0x2f,0x48,0x48,0x76,0xb8,0xb4,0x70,0x6d,0x61,0x60,0x3d, + 0x4c,0xa6,0x3b,0xbb,0xa6,0x2f,0x4a,0x48,0x77,0x5e,0xb4,0x7e,0x6d,0x64,0xb2,0x3e, + 0x3c,0xa6,0x57,0xbb,0xad,0x2f,0x4b,0xba,0x77,0xa8,0xb4,0x2c,0x6d,0x68,0x60,0x3e, + 0xbe,0xa6,0x73,0xbb,0xb4,0x2f,0x4d,0x28,0x78,0x4e,0xb4,0xac,0x6d,0x6b,0xb2,0x3f, + 0xae,0xa6,0x2f,0xbb,0xbb,0x2f,0x4f,0x68,0x78,0x26,0xb4,0xba,0x6d,0x6f,0x60,0x40, + 0x2c,0xa6,0xbd,0xbb,0xc2,0x2f,0x51,0x48,0x79,0x3e,0xb5,0x36,0x6d,0x72,0xb2,0x41, + 0xae,0xa7,0x4f,0xbc,0x3a,0x2f,0x53,0x28,0x79,0xb0,0xb5,0x50,0x6d,0x79,0x60,0x43, + 0x4c,0xa7,0x7b,0xbc,0x44,0x2f,0x56,0x28,0x7a,0x76,0xb5,0x68,0x6d,0xa1,0x60,0x44, + 0x2c,0xa7,0xbd,0xbc,0x50,0x2f,0x59,0x28,0x7b,0x4e,0xb5,0x7c,0x6d,0x24,0x60,0x46, + 0x4c,0xa8,0x5b,0xbc,0x5c,0x2f,0x5c,0x48,0x7b,0xb0,0xb5,0x2e,0x6d,0x28,0xb2,0x47, + 0x5c,0xa8,0x2b,0xbc,0x68,0x2f,0x5f,0x48,0x7c,0x7e,0xb5,0xb8,0x6d,0x2e,0xb2,0x48, + 0xae,0xa8,0xc1,0xbc,0x72,0x2f,0x61,0x28,0x7d,0x4e,0xb6,0x3c,0x6d,0xa6,0x60,0x49, + 0xbe,0xa9,0x53,0xbc,0x7a,0x2f,0x63,0x28,0x7d,0x2e,0xb6,0x4a,0x6d,0xaa,0x60,0x4b, + 0x5c,0xa9,0xa1,0xbc,0x25,0x2f,0x66,0x28,0x7e,0x6e,0xb6,0x64,0x6d,0xb0,0x60,0x4c, + 0x6c,0xa9,0xb9,0xbc,0x2f,0x2f,0x68,0xba,0xa1,0x36,0xb6,0x74,0x6d,0xb4,0x60,0x4d, + 0x6c,0xaa,0x43,0xbc,0xa8,0x2f,0x6a,0x28,0xa1,0x6e,0xb6,0x22,0x6d,0xb7,0xb2,0x4e, + 0x5c,0xaa,0x5f,0xbc,0xaf,0x2f,0x6c,0x68,0xa1,0xb8,0xb6,0x30,0x6d,0xbb,0x60,0x4f, + 0x4c,0xaa,0x7b,0xbc,0xb6,0x2f,0x6e,0xba,0xa2,0x7e,0xb6,0xb8,0x6d,0xc0,0xb2,0x50, + 0x30,0x59,0x65,0x3a,0xc2,0x31,0xc2,0x28,0xa2,0xc0,0xb3,0x32,0x6e,0x31,0xb2,0x51, + 0x5c,0xab,0x3f,0xbd,0x37,0x2f,0x73,0x48,0x21,0x26,0xb7,0x48,0x6e,0x37,0x60,0x52, + 0x2c,0xab,0x6b,0xbd,0x40,0x2f,0x75,0x68,0x22,0x46,0xb7,0x58,0x6e,0x3b,0xb2,0x53, + 0xae,0xab,0x2f,0xbd,0x49,0x2f,0x77,0x68,0x22,0x26,0xb7,0x68,0x6e,0x3f,0x60,0x54, + 0x2c,0xb2,0x26,0x31,0x70,0x40,0x60,0x54,0xbe,0xac,0x33,0xbd,0x52,0x2f,0x79,0x28, + 0x23,0x4e,0xb7,0x7c,0x6e,0x44,0x60,0x55,0xbe,0xac,0x53,0xbd,0x5a,0x2f,0x7b,0x28, + 0x23,0x2e,0xb7,0x2c,0x6e,0x48,0x60,0x56,0xbe,0xac,0x73,0xbd,0x62,0x2f,0x7d,0x28, + 0x24,0x4e,0xb7,0xac,0x6e,0x4b,0xb2,0x57,0xae,0xac,0x2f,0xbd,0x69,0x2f,0xa1,0x6f, + 0x25,0x72,0xbf,0xb8,0x6e,0x4e,0xb2,0x58,0x7c,0xac,0xb9,0xbd,0x6f,0x2f,0xa2,0xba, + 0x25,0x3e,0xb8,0x36,0x6e,0x52,0xb2,0x59,0x7c,0xad,0x47,0xbd,0x77,0x2f,0x22,0xba, + 0x25,0x26,0xb8,0x48,0x6e,0x57,0xb2,0x5a,0xae,0xad,0x6f,0xbd,0x22,0x2f,0x25,0x28, + 0x26,0x4e,0xb8,0x5a,0x6e,0x5b,0xb2,0x5b,0xae,0xad,0x2f,0xbd,0x2b,0x2f,0x27,0xba, + 0x26,0xa8,0xb8,0x6c,0x6e,0x60,0x60,0x5c,0xbe,0xae,0x33,0xbd,0xa4,0x2f,0x29,0x28, + 0x27,0x4e,0xb8,0x7c,0x6e,0x64,0x60,0x5d,0xbe,0xae,0x57,0xbd,0xad,0x2f,0x2b,0xba, + 0x27,0xa8,0xb8,0x2c,0x6e,0x68,0x60,0x5e,0xbe,0xae,0x73,0xbd,0xb4,0x2f,0x2d,0x28, + 0x28,0x4e,0xb8,0xac,0x6e,0x6b,0xb2,0x5f,0xae,0xae,0x2f,0xbd,0xbb,0x2f,0x2f,0x68, + 0x28,0x26,0xb8,0xba,0x6e,0x6f,0x60,0x60,0x2c,0xae,0xbd,0xbd,0xc2,0x2f,0xa3,0x28, + 0x29,0x4e,0xb9,0x3c,0x6e,0x74,0x60,0x62,0x6c,0xaf,0x63,0xbe,0x3e,0x2f,0xa6,0x28, + 0x29,0xc0,0xb9,0x56,0x6e,0x7b,0x60,0x63,0xae,0xaf,0x2f,0xbe,0x49,0x2f,0xa9,0xba, + 0x2a,0xb0,0xb9,0x6e,0x6e,0xa2,0xb2,0x65,0x3c,0xb0,0x37,0xbe,0x53,0x2f,0xab,0xba, + 0x2b,0x5e,0xb9,0x7e,0x6e,0x24,0xb2,0x66,0x3c,0xb0,0x57,0xbe,0x5b,0x2f,0xad,0xba, + 0x2b,0xa8,0xb9,0x2c,0x6e,0x28,0x60,0x66,0xbe,0xb0,0x77,0xbe,0x63,0x2f,0xaf,0xba, + 0x2c,0x56,0xb9,0xae,0x6e,0x2c,0x60,0x67,0xbe,0xb0,0xa9,0xbe,0x6b,0x2f,0xb1,0xba, + 0x2c,0xa8,0xb9,0xbe,0x6e,0x30,0x60,0x68,0xbe,0xb1,0x33,0xbe,0x72,0x2f,0xb3,0x28, + 0x2d,0x4e,0xba,0x3a,0x6e,0xa5,0xb2,0x69,0xae,0xb1,0x4f,0xbe,0x79,0x2f,0xb5,0x68, + 0x2d,0x26,0xba,0x48,0x6e,0xa9,0x60,0x6a,0x2c,0xb1,0x6b,0xbe,0xa2,0x2f,0xb7,0x48, + 0x2e,0x40,0x26,0x43,0x38,0x31,0xc0,0x65,0x71,0x49,0x34,0x56,0x6e,0xac,0xb2,0x6b, + 0xae,0xb1,0x2f,0xbe,0x2a,0x2f,0xb9,0x28,0x2e,0x2e,0xba,0x6c,0x6e,0xb2,0x60,0x6c, + 0xbe,0xb2,0x33,0xbe,0xa4,0x2f,0xbb,0x28,0x2f,0x4e,0xba,0x7a,0x6e,0xb5,0xb2,0x6d, + 0xae,0xb2,0x4f,0xbe,0xab,0x2f,0xbd,0x28,0x2f,0x2e,0xba,0x2a,0x6e,0xb9,0xb2,0x6e, + 0xae,0xb2,0x6f,0xbe,0xb4,0xbd,0x23,0x47,0xc2,0x46,0xba,0xaa,0x6e,0xbd,0xc0,0x68, + 0x30,0x66,0xba,0xb2,0x6e,0xbf,0xb2,0x70,0x5c,0xb2,0xb1,0xbe,0xbf,0x2f,0xc2,0x68, + 0x30,0xb8,0xba,0xc2,0x6e,0x31,0xb2,0x71,0x5c,0xb3,0x43,0xbf,0x37,0x30,0x32,0xba, + 0xa3,0x76,0xbb,0x44,0x6f,0x36,0x60,0x72,0x6c,0xb3,0x6b,0xbf,0x40,0x30,0x35,0x68, + 0xa4,0x46,0xbb,0x58,0x6f,0xbd,0x21,0x38,0xb4,0x5e,0xbb,0x5e,0x6f,0x3c,0xb2,0x74, + 0x3c,0xb3,0xa9,0xbf,0x4b,0x30,0x37,0xba,0xa4,0xb8,0xbb,0x72,0x6f,0x41,0xb2,0x75, + 0x5c,0xb4,0x3f,0xbf,0x55,0x30,0x3a,0x68,0xa5,0x66,0xbb,0xa2,0x6f,0x45,0x60,0x76, + 0x4c,0xb4,0x5b,0xbf,0x5c,0x30,0x3c,0x48,0xa5,0xb0,0xbb,0x2e,0x6f,0x48,0xb2,0x77, + 0x3c,0xb4,0x77,0xbf,0x63,0x30,0x3d,0xba,0xa6,0x56,0xbb,0xae,0x6f,0x4c,0x60,0x77, + 0xbe,0xb4,0xa5,0xbf,0x6a,0x30,0x3f,0x28,0xa6,0x2e,0xbb,0xbc,0x6f,0x4f,0xb2,0x78, + 0xae,0xb4,0xc1,0xbf,0x71,0x30,0x41,0x68,0xa7,0x46,0xbc,0x38,0x6f,0x54,0x60,0x79, + 0xbe,0xb5,0x57,0xbf,0x7b,0x30,0x43,0xba,0xa7,0xb0,0xbc,0x50,0x6f,0x59,0x60,0x7b, + 0x4c,0xb5,0x7b,0xbf,0x24,0x30,0x46,0x28,0xa8,0x76,0xbc,0x6a,0x6f,0x5f,0xb2,0x7c, + 0xae,0xb5,0xc1,0xbf,0xa5,0x30,0x49,0xba,0xa9,0x5e,0xbc,0x7e,0x6f,0x64,0xb2,0x7e, + 0x4c,0xb6,0x5f,0xbf,0xaf,0x30,0x4c,0x68,0xa9,0xb8,0xbc,0x30,0x6f,0x6a,0x60,0xa1, + 0xae,0xb6,0x2f,0xbf,0xbb,0x30,0x4f,0x68,0xaa,0x26,0xbc,0xc0,0x6f,0x70,0xb2,0x21, + 0x4c,0xb7,0x3b,0xc0,0x34,0x30,0x52,0x68,0xab,0x66,0xbd,0x40,0x6f,0x75,0x60,0x22, + 0x4c,0xb7,0x5b,0xc0,0x3c,0x30,0x54,0x28,0xac,0x46,0xbd,0x58,0x6f,0x7b,0x60,0x23, + 0x2c,0xb7,0x2b,0xc0,0x48,0x30,0x57,0x28,0xac,0x2e,0xbd,0x6a,0x6f,0xa1,0xb2,0x24, + 0xae,0xb7,0xc1,0xc0,0x51,0x30,0x59,0x68,0xad,0x46,0xbd,0x78,0x6f,0x23,0x60,0x25, + 0x2c,0xb8,0x4b,0xc0,0x58,0x30,0x5b,0x68,0xad,0x26,0xbd,0x28,0x6f,0x27,0x60,0x26, + 0x2c,0xb8,0x6b,0xc0,0x60,0x30,0x5d,0x48,0xae,0x3e,0xbd,0xa8,0x6f,0x2a,0xb2,0x27, + 0x7c,0xb8,0x27,0xc0,0x67,0x30,0x5e,0xc1,0x25,0x79,0x4d,0x34,0xb8,0x23,0x31,0xa3, + 0x3c,0x76,0xbd,0xb6,0x6f,0x2e,0x60,0x28,0x6c,0xb8,0xb5,0xc0,0x6e,0x30,0x60,0x28, + 0xae,0xc0,0xbe,0x32,0x6f,0xa3,0xb2,0x29,0x5c,0xb9,0x3f,0xc0,0x75,0x30,0x62,0x68, + 0xaf,0x66,0xbe,0x40,0x6f,0xa7,0x60,0x2a,0x4c,0xb9,0x5b,0xc0,0x7c,0x30,0x64,0x48, + 0xaf,0xb0,0xbe,0x4e,0x6f,0xaa,0xb2,0x2b,0x5c,0xb9,0xa2,0xad,0x79,0x2c,0xb8,0x68, + 0xb0,0x66,0xbe,0x64,0x6f,0xb0,0x60,0x2c,0x6c,0xb9,0xb5,0xc0,0x2e,0x30,0x68,0x28, + 0xb0,0xc0,0xbe,0x74,0x6f,0xb4,0x60,0x2d,0xae,0xba,0x4f,0xc0,0xab,0x30,0x6b,0x68, + 0xb1,0x26,0xbe,0x28,0x6f,0xb9,0xb2,0x2e,0xae,0xba,0x6f,0xc0,0xb3,0x30,0x6d,0x68, + 0xb2,0x46,0xbe,0xaa,0x6f,0xbd,0x60,0x2f,0x30,0x60,0x26,0x41,0x70,0xbe,0x60,0x2f, + 0xbe,0xba,0xa5,0xc0,0xbc,0x30,0x6f,0x28,0xb2,0x2e,0xbe,0xbc,0x6f,0xc1,0xb2,0x30, + 0xae,0xba,0xc1,0xbf,0x31,0x30,0x71,0x28,0xb3,0x4e,0xbf,0x3a,0x70,0x33,0xb2,0xa3, + 0xae,0xbb,0x4f,0xc1,0x3b,0x30,0x73,0xba,0xb3,0xa8,0xbf,0x4c,0x70,0x38,0x60,0xa4, + 0xbe,0xbb,0x73,0xc1,0x42,0x30,0x75,0x28,0xb4,0x4e,0xbf,0x5a,0x70,0x3b,0xb2,0xa5, + 0xae,0xbb,0x2f,0xc1,0x4b,0x30,0x78,0x28,0xb4,0xc0,0xbf,0x72,0x70,0x41,0xb2,0xa7, + 0x5c,0xbc,0x3f,0xc1,0x55,0x30,0x7a,0x68,0xb5,0x66,0xbf,0xa2,0x70,0x45,0x60,0xa8, + 0x4c,0xbc,0x5b,0xc1,0x5c,0x30,0x7c,0x48,0xb5,0xb0,0xbf,0x2e,0x70,0x48,0xb2,0xa9, + 0x3c,0xbc,0x77,0xc1,0x63,0x30,0x7d,0xba,0xb6,0x56,0xbf,0xae,0x70,0x4c,0x60,0xa9, + 0xbe,0xbc,0xa5,0xc1,0x6a,0x30,0xa1,0x28,0xb6,0x2e,0xbf,0xbc,0x70,0x4f,0xb2,0xaa, + 0xae,0xbc,0xc1,0xc1,0x73,0x30,0x21,0xba,0xb7,0x5e,0xc0,0x3e,0x70,0x54,0xb2,0xac, + 0x4c,0xbd,0x5b,0xc1,0x7c,0x30,0x24,0x48,0xb7,0xb0,0xc0,0x4e,0x70,0x58,0xb2,0xad, + 0x5c,0xbd,0xa1,0xc1,0x25,0x30,0x26,0x28,0xb8,0x6e,0xc0,0x62,0x70,0x5d,0xb2,0xae, + 0x5c,0xbd,0xb1,0xc1,0x2d,0x30,0x28,0x68,0xb8,0xb8,0xc0,0x70,0x70,0x61,0x60,0xaf, + 0x4c,0xbe,0x3b,0xc1,0xa6,0x30,0x2a,0x48,0xb9,0x5e,0xc0,0x7e,0x70,0x64,0xb2,0xb0, + 0x3c,0xbe,0x57,0xc1,0xad,0x30,0x2b,0xba,0xb9,0xa8,0xc0,0x2c,0x70,0x68,0x60,0xb0, + 0xbe,0xbe,0x73,0xc1,0xb4,0x30,0x2d,0x28,0xba,0x4e,0xc0,0xac,0x70,0x6b,0xb2,0xb1, + 0xae,0xbe,0x2f,0xc1,0xbb,0x30,0x2f,0x68,0xba,0x26,0xc0,0xba,0x70,0x6f,0x60,0xb2, + 0x2c,0xbe,0xbd,0xc1,0xc2,0x30,0xa3,0x48,0xbb,0x3e,0xc1,0x36,0x70,0xbd,0x72,0x51, + 0xa2,0xbb,0x37,0x38,0x70,0x73,0x60,0xb3,0x2c,0xbf,0x4b,0xc2,0x38,0x30,0xa5,0x48, + 0xbb,0x7e,0xc1,0x46,0x70,0x76,0xb2,0xb4,0x7c,0xbf,0x67,0xc2,0x3f,0x30,0xa6,0xba, + 0xbc,0x36,0xc1,0x54,0x70,0x7a,0x60,0xb5,0x6c,0xbf,0x27,0xc2,0x47,0x30,0xa8,0xba, + 0xbc,0x76,0xc1,0x64,0x70,0x7e,0x60,0xb6,0x6c,0xbf,0xb5,0xc2,0x4e,0xbd,0x23,0x47, + 0xbc,0xb8,0xc1,0x70,0x70,0x21,0x60,0xb7,0x4c,0xc0,0x3b,0xc2,0x54,0x30,0xac,0x48, + 0xbd,0x5e,0xc1,0x7e,0x70,0x24,0xb2,0xb8,0x3c,0xc0,0x57,0xc2,0x5b,0x30,0xad,0xba, + 0xbd,0xa8,0xc1,0x2c,0x70,0x28,0x60,0xb8,0xbe,0xc0,0x77,0xc2,0x63,0x30,0xaf,0xba, + 0xbe,0x56,0xc1,0xae,0x70,0x2c,0x60,0xb9,0xbe,0xc0,0xa6,0xad,0x79,0x50,0xb1,0x68, + 0xbe,0x26,0xc1,0xba,0x70,0x2f,0x60,0xba,0x2c,0xc0,0xbd,0xc2,0x70,0x30,0xb3,0x48, + 0xbf,0x3e,0xc2,0x36,0x70,0xa4,0xb2,0xbb,0x7c,0xc1,0x4b,0xc2,0x78,0x30,0xb5,0x48, + 0xbf,0x7e,0xc2,0x46,0x70,0xa8,0xb2,0xbc,0xae,0xc1,0x6f,0xc2,0x22,0x30,0xb7,0x28, + 0xc0,0x4e,0xc2,0x5c,0x70,0xae,0x60,0xbd,0xbe,0xc1,0xa5,0xc2,0x2a,0x30,0xb9,0x28, + 0xc0,0x2e,0xc2,0x6c,0x70,0xb2,0x60,0xbf,0x3c,0xc2,0x3b,0xc2,0xa6,0x30,0xbc,0x48, + 0xc1,0x5e,0xc2,0x7e,0x70,0xb6,0xb2,0xc0,0x3c,0xc2,0x57,0xc2,0xad,0x30,0xbd,0xba, + 0xc1,0xa8,0xc2,0x2c,0x70,0xba,0x60,0xc0,0xbe,0xc2,0x73,0xc2,0xb4,0x30,0xbf,0x28, + 0xc2,0x4e,0xc2,0xac,0x70,0xbd,0xc0,0x68,0xc2,0x66,0xc2,0xb2,0x70,0xbf,0x60,0xc2, + 0x4c,0xc2,0xad,0xc2,0xbe,0x30,0xc2,0x48,0xc2,0xb0,0xc2,0xc0,0x70,0xc2,0xb2,0xa3, + 0x3d,0x31,0x38,0x31,0x33,0xa3,0x31,0xbb,0x31,0x57,0x31,0x3c,0x71,0x34,0x61,0x31, + 0xbf,0x31,0x54,0x31,0x3a,0xa3,0x33,0x29,0x31,0x2f,0x31,0x4a,0x71,0x37,0xb3,0x32, + 0xaf,0x31,0x70,0x31,0x41,0xa3,0x35,0x69,0x32,0x47,0x31,0x58,0x71,0x3b,0x61,0x33, + 0x2d,0x31,0x2c,0x31,0x48,0xa3,0x37,0x49,0x32,0xa1,0x31,0x66,0x71,0x3e,0xb3,0x34, + 0x7d,0x31,0xba,0x31,0x4f,0xa3,0x38,0xbb,0x33,0x37,0x31,0x74,0x71,0x42,0x61,0x35, + 0x6d,0x32,0x44,0x31,0x56,0xa3,0x3a,0x29,0x33,0x6f,0x31,0x22,0x71,0x45,0xb3,0x36, + 0x5d,0x32,0x60,0x31,0x5d,0xa3,0x3c,0x69,0x33,0xb9,0x31,0x30,0x71,0x49,0x61,0x37, + 0x4d,0x32,0x7c,0x31,0x64,0xa3,0x3e,0x49,0x34,0x5f,0x31,0xb0,0x71,0x4c,0xb3,0x38, + 0x3d,0x32,0xaa,0x31,0x6b,0xa3,0x3f,0xbb,0x34,0xb1,0x31,0xc0,0x71,0x50,0xb3,0x4f, + 0x21,0xab,0x43,0x34,0x61,0xa3,0x41,0x69,0x35,0x47,0x32,0x38,0x71,0x53,0x61,0x39, + 0x2d,0x33,0x4c,0x31,0x78,0xa3,0x43,0x49,0x35,0xa1,0x32,0x46,0x71,0x56,0xb3,0x3a, + 0x7d,0x33,0x68,0x31,0xa1,0xa3,0x44,0xbb,0x36,0x37,0x32,0x56,0x71,0x5a,0xb3,0x3b, + 0x7d,0x33,0x28,0x31,0x27,0xa3,0x46,0xbb,0x36,0xa1,0x32,0x66,0x71,0x5e,0xc0,0x5a, + 0x3c,0x6b,0xba,0x31,0x2f,0xa3,0x48,0xbb,0x37,0x3f,0x32,0x76,0x71,0x62,0xb3,0x3d, + 0x7d,0x34,0x48,0x31,0xa9,0xa3,0x4a,0xbb,0x37,0x27,0x32,0x28,0x71,0x67,0x61,0x3e, + 0x2d,0x34,0x6c,0x31,0xb2,0xa3,0x4d,0x49,0x38,0x3f,0x32,0xa8,0x71,0x6a,0xb3,0x3f, + 0x7d,0x34,0x28,0x31,0xb9,0xa3,0x4e,0xbb,0x38,0x77,0x32,0xb6,0xb8,0x55,0x40,0xb2, + 0x5d,0x34,0xb2,0x31,0xbf,0xa3,0x50,0x69,0x38,0xb9,0x32,0xc2,0x71,0x71,0x61,0x41, + 0x4d,0x35,0x3c,0x32,0x34,0xa3,0x52,0x49,0x39,0x5f,0x33,0x3e,0x71,0x74,0xb3,0x42, + 0x3d,0x35,0x58,0x32,0x3b,0xa3,0x53,0xbb,0x39,0xa9,0x33,0x4c,0x71,0x78,0x61,0x42, + 0xbf,0x35,0x7c,0x32,0x44,0xa3,0x56,0x69,0x3a,0x67,0x33,0x60,0x71,0x7d,0xb3,0x44, + 0x5d,0x35,0xb2,0x32,0x4d,0xa3,0x58,0x69,0x3a,0xb9,0x33,0x70,0x71,0x22,0x61,0x45, + 0x7d,0x36,0x4c,0x32,0x58,0xa3,0x5b,0x49,0x3b,0xa1,0x33,0x26,0x71,0x26,0xb3,0x46, + 0xaf,0x36,0x78,0x32,0x63,0xa3,0x5e,0xbb,0x3c,0x77,0x33,0xb6,0x71,0x2e,0x61,0x48, + 0x6d,0x36,0xbe,0x32,0x73,0xa3,0x61,0xbb,0x3d,0x57,0x34,0x3e,0x71,0xa6,0xb3,0x4a, + 0x5d,0x37,0x60,0x32,0x7e,0xa3,0x64,0x29,0x3d,0xc1,0x34,0x54,0x71,0xac,0x61,0x4b, + 0x6d,0x37,0x24,0x32,0x26,0xa3,0x66,0x29,0x3e,0x6f,0x34,0x66,0x71,0xb2,0x61,0x4c, + 0xbf,0x38,0x34,0x32,0xa4,0xa3,0x69,0x29,0x3f,0x4f,0x34,0x7e,0x71,0xb6,0xb3,0x4e, + 0x4d,0x38,0x5c,0x32,0xae,0xa3,0x6c,0x69,0x3f,0xb9,0x34,0x30,0x71,0xbb,0x61,0x4f, + 0x4d,0x38,0x7c,0x32,0xb6,0xa3,0x6e,0x29,0x40,0x77,0x34,0xb8,0x71,0xc0,0xb3,0x50, + 0x7d,0x38,0xba,0x32,0xc1,0xa3,0x70,0xbb,0x31,0x3f,0x35,0x36,0x72,0x32,0xb3,0x51, + 0x2d,0x39,0x4c,0x33,0x38,0xa3,0x73,0x69,0x41,0x27,0x35,0x48,0x72,0x37,0x61,0x52, + 0x2d,0x39,0x6c,0x33,0x40,0xa3,0x75,0x69,0x42,0x47,0x35,0x58,0x72,0x3b,0x61,0x53, + 0xaf,0x39,0x30,0x33,0x49,0xa3,0x77,0x69,0x42,0x27,0x35,0x68,0x72,0x41,0xb3,0x55, + 0x5d,0x3a,0x48,0x33,0x59,0xa3,0x7b,0x69,0x43,0x27,0x35,0x28,0x72,0x48,0x61,0x6f, + 0x21,0xab,0x43,0x34,0xa1,0xa3,0x7d,0xbb,0x44,0x57,0x35,0xae,0x72,0x4c,0xb3,0x58, + 0x5d,0x3a,0xb2,0x33,0x6e,0xa3,0xa2,0x29,0x44,0xc1,0x36,0x34,0x72,0x52,0x61,0x59, + 0x6d,0x3b,0x44,0x33,0x76,0xa3,0x22,0x29,0x45,0x6f,0x36,0x46,0x72,0x58,0x61,0x5a, + 0xbf,0x3b,0x74,0x33,0x22,0xa3,0x25,0x29,0x46,0x4f,0x36,0x5e,0x72,0x5c,0xc0,0x5a, + 0x3c,0x6b,0xaa,0x33,0x2b,0xa3,0x27,0xbb,0x46,0xb1,0x36,0x6e,0x72,0x60,0xb3,0x5d, + 0x3d,0x3c,0x38,0x33,0xa5,0xa3,0x29,0xbb,0x47,0x67,0x36,0x26,0x72,0x66,0xb3,0x5e, + 0x7d,0x3c,0x68,0x33,0xb1,0xa3,0x2c,0xbb,0x48,0x3f,0x36,0xa8,0x72,0x6a,0xb3,0x5f, + 0x2d,0x3c,0x2c,0x33,0xba,0xa3,0x2f,0x69,0x48,0x27,0x36,0xba,0xb8,0x55,0x40,0xb2, + 0x7d,0x3c,0xba,0x33,0xc1,0xa3,0x30,0xbb,0x49,0x37,0x37,0x34,0x72,0x72,0x61,0x61, + 0x6d,0x3d,0x44,0x34,0x37,0xa3,0xa4,0xbb,0x49,0x77,0x37,0x44,0x72,0x76,0x61,0x62, + 0x6d,0x3d,0x70,0x34,0x42,0xa3,0xa7,0x29,0x4a,0x4f,0x37,0x5c,0x72,0x7c,0xb3,0x64, + 0x3d,0x3d,0xaa,0x34,0x4b,0xa3,0xa9,0xbb,0x4a,0xb9,0x37,0x72,0x72,0x22,0x61,0x65, + 0x6d,0x3e,0x44,0x34,0x57,0xa3,0xac,0xbb,0x4b,0x27,0x37,0x28,0x72,0x27,0xb3,0x66, + 0xaf,0x3e,0x70,0x34,0x62,0xa3,0xaf,0x29,0x4c,0x4f,0x37,0xac,0x72,0x2b,0xb3,0x67, + 0xaf,0x3e,0x30,0x34,0x69,0xa3,0xb1,0x69,0x4c,0x27,0x37,0xba,0x72,0x2f,0x61,0x68, + 0xaf,0x3e,0xc2,0x34,0x71,0xa3,0xb3,0x69,0x4d,0x47,0x38,0x38,0x72,0xa5,0xb3,0x69, + 0xaf,0x3f,0x50,0x34,0x7a,0xa3,0xb5,0x29,0x4d,0x2f,0x38,0x4c,0x72,0xaa,0x61,0x6a, + 0xbf,0x3f,0x74,0x34,0x22,0xa3,0xb7,0x29,0x4e,0x4f,0x38,0x5c,0x72,0xae,0x61,0x6c, + 0x4d,0x3f,0xae,0x34,0x2c,0xa3,0xba,0x49,0x4e,0xb1,0x38,0x6e,0x72,0xb2,0xb3,0x6d, + 0x4d,0x40,0x3c,0x34,0xa6,0xa3,0xbc,0x69,0x4f,0x67,0x38,0xa2,0x72,0xb7,0xb3,0x6e, + 0x5d,0x40,0x60,0x34,0xaf,0xa3,0xbe,0x69,0x4f,0xb9,0x38,0x30,0x72,0xbc,0x61,0x6f, + 0x7d,0x40,0x28,0xae,0x72,0xbe,0x61,0x6f,0xbf,0x40,0xa6,0x34,0xbc,0xa3,0xc1,0x29, + 0x50,0x2f,0x38,0xc0,0x72,0xc2,0xb3,0x51,0x4d,0x41,0x3c,0x35,0x34,0xa4,0x32,0x69, + 0x51,0x67,0x39,0x40,0x73,0x35,0x61,0x72,0x4d,0x41,0x5c,0x35,0x3c,0xa4,0x34,0x29, + 0x52,0x37,0x39,0x56,0x73,0x3a,0xb3,0x73,0x7d,0x41,0x28,0x35,0x47,0xa4,0x36,0xbb, + 0x52,0x27,0x39,0x68,0x73,0x3f,0xb3,0x74,0xaf,0x42,0x38,0x35,0x53,0xa4,0x39,0xbb, + 0x60,0x59,0x65,0x3a,0x32,0xb9,0x61,0x75,0x2d,0x42,0x4c,0x35,0x58,0xa4,0x3b,0x29, + 0x53,0xa9,0x39,0x2e,0x73,0x49,0x61,0x77,0x6d,0x42,0x28,0x35,0x67,0xa4,0x3e,0xbb, + 0x54,0x77,0x39,0xb6,0x73,0x4e,0x61,0x78,0x6d,0x42,0xb6,0x35,0x6e,0xa4,0x40,0x29, + 0x54,0xc1,0x3a,0x32,0x73,0x51,0xb3,0x79,0x5d,0x43,0x40,0x35,0x75,0xa4,0x42,0x6f, + 0x25,0x76,0x2e,0x3e,0x73,0x54,0xb3,0x7a,0x4d,0x43,0x5c,0x35,0x7c,0xa4,0x44,0x49, + 0x55,0xb1,0x3a,0x4e,0x73,0x58,0xb3,0x7b,0x5d,0x43,0xa2,0x35,0x26,0xa4,0x46,0x29, + 0x56,0x6f,0x3a,0x64,0x73,0x5e,0x61,0x7c,0x6d,0x43,0xb6,0x35,0x2e,0xa4,0x48,0x29, + 0x56,0xc1,0x3a,0x74,0x73,0x62,0x61,0x7d,0x6d,0x44,0x44,0x35,0xa9,0xbd,0x23,0x38, + 0xb9,0x6f,0x3a,0x22,0x73,0x65,0xb3,0x7e,0x5d,0x44,0x60,0x35,0xb1,0xa4,0x4c,0xbb, + 0x58,0x3f,0x3a,0xa8,0x73,0x6a,0xb3,0xa1,0x2d,0x44,0x2c,0x35,0xba,0xa4,0x4f,0x49, + 0x58,0xa1,0x3a,0xb8,0x73,0x6e,0xb3,0xa2,0xaf,0x45,0x34,0x36,0x33,0xa4,0x51,0xbb, + 0x59,0x57,0x3b,0x3c,0x73,0x74,0x61,0x21,0xbf,0x45,0x5c,0x36,0x3c,0xa4,0x54,0x49, + 0x59,0xb1,0x3b,0x4e,0x73,0x78,0xb3,0x23,0x4d,0x45,0x7c,0x36,0x44,0xa4,0x56,0x49, + 0x5a,0x5f,0x3b,0x5e,0x73,0x7c,0xb3,0x24,0x4d,0x45,0xae,0x36,0x4d,0xa4,0x58,0x29, + 0x5a,0xc1,0x3b,0x72,0x73,0x21,0xb3,0x25,0x5d,0x46,0x40,0x36,0x57,0xa4,0x5a,0xbb, + 0x5b,0xa1,0x3b,0x26,0x73,0x26,0xb3,0x26,0xaf,0x46,0x70,0x36,0x61,0xa4,0x5d,0x69, + 0x5c,0x47,0x3b,0xaa,0x73,0x2c,0x61,0x28,0x3d,0x46,0xae,0x36,0x6c,0xa4,0x60,0x49, + 0x5c,0xb1,0x3b,0xc0,0x73,0x30,0xb3,0x29,0x3d,0x47,0x38,0x36,0x73,0xa4,0x61,0xbb, + 0x5d,0x57,0x3c,0x3c,0x73,0xa6,0x61,0x29,0xbf,0x47,0x54,0x36,0x7a,0xa4,0x63,0x29, + 0x5d,0x2f,0x3c,0x4a,0x73,0xa9,0xb3,0x2a,0xaf,0x47,0x70,0x36,0x21,0xa4,0x65,0x69, + 0x5e,0x47,0x3c,0x58,0x73,0xad,0x61,0x2b,0x2d,0x47,0x2c,0x36,0x28,0xa4,0x67,0x49, + 0x5e,0xa1,0x3c,0x66,0x73,0xb0,0xb3,0x2c,0xaf,0x47,0xc2,0x36,0xa4,0xa4,0x69,0x29, + 0x5f,0x5f,0x3c,0x7e,0x73,0xb6,0xb3,0x2e,0x3d,0x48,0x58,0x36,0xad,0xa4,0x6c,0x29, + 0x60,0x37,0x3c,0xa8,0x73,0xbc,0xb3,0x2f,0x7d,0x48,0x28,0xae,0x73,0xbe,0xb3,0x30, + 0x5d,0x48,0xba,0x36,0xc1,0xa4,0x70,0xbb,0x51,0x3f,0x3d,0x36,0x74,0x32,0xb3,0xa3, + 0x7d,0x49,0x48,0x37,0x37,0xa4,0x72,0xbb,0x61,0x27,0x3d,0x48,0x74,0x38,0x61,0xa4, + 0xbf,0x50,0x25,0x3b,0x35,0xc2,0x71,0x53,0x3d,0x49,0x78,0x37,0x43,0xa4,0x76,0x29, + 0x62,0x6f,0x3d,0x64,0x74,0x3e,0x61,0xa6,0x6d,0x49,0xba,0x37,0x4f,0xa4,0x78,0xbb, + 0x63,0x37,0x3d,0x74,0x74,0x42,0x61,0xa7,0x6d,0x4a,0x4c,0x37,0x58,0xa4,0x7b,0x29, + 0x63,0x2f,0x3d,0x2a,0x74,0x47,0xb3,0xa8,0xaf,0x4a,0x70,0x37,0x61,0xa4,0x7d,0x69, + 0x64,0x48,0x26,0x42,0x68,0x4a,0xb3,0xa9,0x7d,0x4a,0x28,0x37,0x67,0xa4,0x7e,0xbb, + 0x64,0x77,0x3d,0xb6,0x74,0x4e,0x61,0xaa,0x6d,0x4a,0xb6,0x37,0x6e,0xa4,0xa2,0x29, + 0x64,0xc1,0x3e,0x32,0x74,0x51,0xb3,0xab,0x5d,0x4b,0x40,0x37,0x75,0xa4,0x22,0x29, + 0x65,0x6f,0x3e,0x42,0x74,0x55,0xb3,0xac,0x5d,0x4b,0x60,0x37,0x7d,0xa4,0x24,0x6f, + 0x25,0x72,0xc0,0x4e,0x74,0x58,0xb3,0xad,0x3d,0x4b,0x78,0x37,0x23,0xa4,0x25,0xbb, + 0x66,0x57,0x3e,0x5c,0x74,0x5c,0x61,0xad,0xbf,0x4b,0xa6,0x37,0x2a,0xa4,0x27,0x29, + 0x66,0x2f,0x3e,0x6a,0x74,0x5f,0xb3,0xae,0xaf,0x4b,0xc2,0x37,0xa3,0xa4,0x29,0x69, + 0x67,0x47,0x3e,0x78,0x74,0x63,0x61,0xaf,0x2d,0x4c,0x4c,0x37,0xaa,0xa4,0x2b,0x29, + 0x67,0x2f,0x3e,0x2c,0x74,0x68,0x61,0xb0,0xbf,0x4c,0x78,0x37,0xb6,0xa4,0x2e,0x49, + 0x68,0x5f,0x3e,0xb0,0x74,0x6c,0xb3,0xb2,0x5d,0x4c,0xb2,0x37,0xc1,0xa4,0x30,0xbb, + 0x69,0x37,0x3f,0x34,0x74,0x72,0x61,0xb3,0x6d,0x4d,0x48,0x38,0x37,0xa4,0xa4,0xbb, + 0x69,0xa1,0x3f,0x46,0x74,0x76,0xb3,0xb4,0x2d,0x4d,0x6c,0x38,0x40,0xa4,0xa7,0x49, + 0x6a,0x3f,0x3f,0x56,0x74,0x7a,0xb3,0xb5,0x7d,0x4d,0x28,0x38,0x47,0xa4,0xa8,0xbb, + 0x6a,0x77,0x3f,0x64,0x74,0x7e,0x61,0xb6,0x6d,0x4d,0xb6,0x38,0x4e,0xa4,0xaa,0x29, + 0x6a,0xc1,0x3f,0x72,0x74,0x21,0xb3,0xb7,0x5d,0x4e,0x40,0x38,0x55,0xa4,0xac,0x69, + 0x6b,0x67,0x3f,0xa2,0x74,0x25,0x61,0xb8,0x4d,0x4e,0x5c,0x38,0x5c,0xa4,0xae,0x49, + 0x6b,0xb1,0x3f,0x2e,0x74,0x28,0xb3,0xb9,0x3d,0x4e,0x78,0x38,0x63,0xa4,0xaf,0xbb, + 0x6c,0x57,0x3f,0xae,0x74,0x2c,0x61,0xb9,0xbf,0x4e,0xa6,0x38,0x6a,0xa4,0xb1,0x29, + 0x6c,0x2f,0x3f,0xbc,0x74,0x2f,0xb3,0xba,0xaf,0x4e,0xc2,0x38,0x72,0xa4,0xb3,0x29, + 0x6d,0x4f,0x40,0x3a,0x74,0xa5,0xb3,0xbb,0xaf,0x4f,0x50,0x38,0x79,0xa4,0xb5,0x69, + 0x6d,0x27,0x40,0x48,0x74,0xa9,0x61,0xbc,0x2d,0x4f,0x6c,0x38,0xa2,0xa4,0xb7,0x49, + 0x6e,0x3f,0x40,0x56,0x74,0xac,0xb3,0xbd,0x7d,0x4f,0x28,0x38,0x27,0xa4,0xb8,0xbb, + 0x6e,0x28,0x25,0x4b,0x35,0xc2,0x71,0x6c,0x6d,0x4f,0xba,0x38,0x2f,0xa4,0xbb,0x69, + 0x6f,0x4f,0x40,0x7a,0x74,0xb5,0xb3,0xbf,0xaf,0x50,0x50,0x38,0xad,0xa4,0xbd,0xbb, + 0x6f,0xa9,0x40,0x2e,0x74,0xba,0xb3,0xc1,0x3d,0x50,0x78,0x38,0xb5,0xa4,0xbf,0xbb, + 0x70,0x67,0x40,0xb2,0x74,0xbf,0xb3,0xc2,0x5d,0x50,0xb2,0x38,0xbf,0xa4,0xc2,0x69, + 0x70,0xba,0x26,0x42,0x68,0xc2,0xb3,0xa3,0x3d,0x51,0x38,0x39,0x33,0xa5,0x31,0xbb, + 0x71,0x57,0x41,0x3c,0x75,0x34,0x62,0x31,0xbf,0x51,0x58,0x39,0x3b,0xa5,0x33,0xbb, + 0x71,0xa9,0x41,0x4c,0x75,0x38,0x62,0x32,0xbf,0x51,0x78,0x39,0x43,0xa5,0x35,0xbb, + 0x72,0x57,0x41,0x5c,0x75,0x3c,0x62,0x33,0xbf,0x51,0xa6,0x39,0x4a,0xa5,0x37,0x29, + 0xa2,0x5b,0x31,0xc1,0x4c,0xa5,0x38,0x49,0x72,0xb1,0x41,0x6e,0x75,0x40,0xb4,0x35, + 0x3d,0x52,0x38,0x39,0x53,0xa5,0x39,0xbb,0x73,0x5f,0x41,0x7e,0x75,0x44,0xb4,0x36, + 0x3d,0x52,0x58,0x39,0x5b,0xa5,0x3b,0xbb,0x73,0xb1,0x41,0x2e,0x75,0x48,0xb4,0x37, + 0x4d,0x52,0x7c,0x39,0x64,0xa5,0x3e,0x69,0x74,0x67,0x41,0xb2,0x75,0x4d,0x62,0x38, + 0x4d,0x52,0xae,0x39,0x6c,0xa5,0x40,0x29,0x74,0xc1,0x42,0x32,0x75,0x51,0xb4,0x39, + 0x5d,0x53,0x40,0x39,0x75,0xa5,0x42,0x69,0x75,0x67,0x42,0x40,0x75,0x55,0xb4,0x3a, + 0x5d,0x53,0x60,0x39,0x7d,0xa5,0x44,0x69,0x75,0xb9,0x42,0x50,0x75,0x59,0x62,0x3b, + 0x4d,0x53,0x7c,0x39,0x24,0xa5,0x46,0x49,0x76,0x5f,0x42,0x5e,0x75,0x5c,0xb4,0x3c, + 0x3d,0x53,0xaa,0x39,0x2b,0xa5,0x47,0xbb,0x76,0xa9,0x42,0x6c,0x75,0x60,0x62,0x3c, + 0xbf,0x54,0x34,0x39,0xa4,0xa5,0x49,0x29,0x77,0x4f,0x42,0x7e,0x75,0x64,0xb4,0x3e, + 0x4d,0x54,0x5c,0x39,0xae,0xa5,0x4c,0x69,0x77,0xb9,0x42,0x30,0x75,0x69,0x62,0x3f, + 0x4d,0x54,0x7c,0x39,0xb6,0xa5,0x4e,0x29,0x78,0x6f,0x42,0xb4,0x75,0x6e,0x62,0x40, + 0x6d,0x54,0xb6,0x39,0xc0,0xa5,0x50,0x29,0x78,0xc1,0x43,0x34,0x75,0x72,0x62,0x41, + 0x6d,0x55,0x44,0x3a,0x36,0xa5,0x52,0x29,0x79,0x6f,0x43,0x42,0x75,0x75,0xb4,0x42, + 0x5d,0x55,0x60,0x3a,0x3d,0xa5,0x54,0x69,0x79,0xb9,0x43,0x50,0x75,0x79,0x62,0x43, + 0x4d,0x55,0x7c,0x3a,0x44,0xa5,0x56,0x69,0x7a,0x67,0x43,0x60,0x75,0x7d,0x62,0x44, + 0x4d,0x55,0xae,0x3a,0x4c,0xa5,0x58,0x69,0x7a,0xb9,0x43,0x70,0x75,0x21,0x62,0x45, + 0x4d,0x56,0x3c,0x3a,0x54,0xa5,0x5a,0x49,0x7b,0x5f,0x43,0x7e,0x75,0x24,0xb4,0x46, + 0x3d,0x56,0x58,0xad,0x7a,0x34,0x71,0x6f,0x2b,0x51,0x3d,0x32,0x5b,0xa5,0x5b,0xbb, + 0x7b,0xa9,0x43,0x2c,0x75,0x28,0x62,0x46,0xbf,0x56,0x74,0x3a,0x62,0xa5,0x5d,0x29, + 0x7c,0x4f,0x43,0xac,0x75,0x2b,0xb4,0x47,0xaf,0x56,0x30,0x3a,0x6a,0xa5,0x5f,0x29, + 0x7c,0x2f,0x43,0xbe,0x75,0x30,0x62,0x48,0xbf,0x57,0x34,0x3a,0x72,0xa5,0x61,0x29, + 0x7d,0x4f,0x44,0x3a,0x75,0xa5,0xc0,0x5a,0x3c,0x6f,0x4c,0x3a,0x78,0xa5,0x63,0x49, + 0x7d,0xa1,0x44,0x46,0x75,0xa8,0xb4,0x4a,0x7d,0x57,0x68,0x3a,0xa1,0xa5,0x64,0xbb, + 0x7e,0x37,0x44,0x54,0x75,0xac,0x62,0x4b,0x6d,0x57,0x24,0x3a,0x26,0xa5,0x66,0x29, + 0x7e,0x6f,0x44,0x62,0x75,0xaf,0xb4,0x4c,0x5d,0x57,0xb2,0x3a,0x2d,0xa5,0x68,0x69, + 0x7e,0xb9,0x44,0x70,0xb8,0x55,0x40,0xbf,0x3d,0x58,0x38,0x3a,0xa5,0xa5,0x69,0xbb, + 0xa1,0x57,0x44,0x7c,0x75,0xb6,0x62,0x4d,0xbf,0x58,0x54,0x3a,0xad,0xa5,0x6b,0xbb, + 0xa1,0xa9,0x44,0x2c,0x75,0xba,0x62,0x4e,0xbf,0x58,0x7c,0x3a,0xb6,0xa5,0x6e,0x6f, + 0x2d,0x58,0x2c,0x3a,0xba,0xa5,0x6f,0x69,0xa2,0x2f,0x44,0xbc,0x75,0xc1,0xb4,0x50, + 0xaf,0x51,0x3c,0x3b,0x34,0xa5,0x72,0x49,0x21,0x5f,0x45,0x3e,0x76,0x34,0xb4,0x52, + 0x3d,0x59,0x58,0x3b,0x3b,0xa5,0x73,0xbb,0x21,0xb1,0x45,0x4e,0x76,0x38,0xb4,0x53, + 0x4d,0x59,0x7c,0x3b,0x44,0xa5,0x76,0x69,0x22,0x67,0x45,0x60,0x76,0x3d,0x62,0x54, + 0x4d,0x59,0xae,0x3b,0x4c,0xa5,0x78,0x69,0x22,0xb9,0x45,0x70,0x76,0x41,0x62,0x55, + 0x4d,0x5a,0x3c,0x3b,0x54,0xa5,0x7a,0x49,0x23,0x5f,0x45,0x7e,0x76,0x44,0xb4,0x56, + 0x5d,0x5a,0x60,0x3b,0x5e,0xa5,0x7c,0x29,0x23,0xc1,0x45,0xa6,0x76,0x4a,0x62,0x57, + 0x6d,0x5a,0x24,0x3b,0x66,0xa5,0x7e,0x29,0x24,0x6f,0x45,0xb8,0x76,0x4f,0x62,0x58, + 0xaf,0x5a,0xc2,0x3b,0x71,0xa5,0x21,0x69,0x25,0x47,0x46,0x38,0x76,0x54,0x62,0x59, + 0xbf,0x5b,0x60,0x3b,0xa2,0xa5,0x25,0x49,0x26,0x3f,0x46,0x56,0x76,0x5c,0x62,0x5c, + 0x5d,0x5b,0xb2,0x3b,0x2d,0xa5,0x28,0xbb,0x27,0x47,0x46,0x78,0x76,0x63,0xb4,0x5d, + 0xaf,0x5c,0x50,0x3b,0xac,0xa5,0x2b,0x29,0x27,0x2f,0x46,0x2a,0x76,0x67,0xb4,0x5e, + 0xaf,0x5c,0x70,0x3b,0xb5,0xa5,0x2e,0x29,0x28,0x6f,0x46,0xb4,0x76,0x6d,0xb4,0x60, + 0x5d,0x5c,0xb2,0x3b,0xc1,0xa5,0x30,0xbb,0x29,0x3f,0x47,0x36,0x76,0x72,0xb4,0x61, + 0x2d,0x5d,0x4c,0x3c,0x39,0xa5,0xa5,0x69,0x29,0x27,0x47,0x48,0x76,0x78,0x62,0x63, + 0x3d,0x5d,0x7c,0x3c,0x44,0xa5,0xa8,0x49,0x30,0x59,0x45,0x3a,0xc2,0x31,0xa8,0x29, + 0x2a,0xa1,0x47,0x66,0x76,0x7e,0xb4,0x64,0x2d,0x5d,0xbe,0x3c,0x50,0xa5,0xab,0x69, + 0x2b,0x47,0x47,0x78,0x76,0x23,0x62,0x65,0x2d,0x5e,0x4c,0x3c,0x58,0xa5,0xad,0x49, + 0x2b,0x27,0x47,0x28,0x76,0x27,0x62,0x66,0x2d,0x5e,0x6c,0x3c,0x60,0xa5,0xaf,0x49, + 0x2c,0x3f,0x47,0xa8,0x76,0x2a,0xb4,0x67,0xb2,0x5b,0x53,0xb2,0x68,0xa5,0xb1,0x29, + 0x2c,0xc1,0x48,0x32,0x76,0xa3,0xb4,0x69,0x5d,0x5f,0x40,0x3c,0x7c,0xa5,0xb6,0x69, + 0x2d,0xc1,0x48,0x56,0x76,0xac,0xb4,0x6b,0x2d,0x5f,0x2c,0x3c,0x28,0xa5,0xb9,0x69, + 0x2e,0x27,0x48,0x68,0x76,0xb1,0x62,0x6c,0x2d,0x5f,0xbe,0x3c,0x30,0xa5,0xbb,0x29, + 0x2f,0x57,0x48,0x7e,0x76,0xb6,0xc0,0x5a,0x34,0xc2,0x54,0x3c,0xac,0xa5,0xbd,0x29, + 0x2f,0x2f,0x48,0x30,0x76,0xbb,0xb4,0x6f,0x5d,0x60,0xa2,0x3c,0xb8,0xbd,0xb4,0x70, + 0x3d,0x60,0xaa,0x3c,0xbd,0xa5,0xc1,0xbb,0x21,0x47,0x49,0x38,0x77,0x33,0x62,0x72, + 0x4d,0x61,0x5c,0x3d,0x3c,0xa6,0x34,0x69,0xa3,0xb9,0x49,0x50,0x77,0x39,0xb4,0x73, + 0x5d,0x61,0xa2,0x3d,0x45,0xa6,0x36,0x69,0xa4,0x67,0x49,0x60,0x77,0x3e,0x62,0x74, + 0x2d,0x61,0xbe,0x3d,0x50,0xa6,0x39,0x49,0xa5,0x3f,0x49,0x76,0x77,0x42,0xb4,0x75, + 0xaf,0x62,0x50,0x3d,0x5a,0xa6,0x3b,0x29,0xa5,0x2f,0x49,0x30,0x77,0x49,0xb4,0x77, + 0x5d,0x62,0x2c,0x3d,0x69,0xa6,0x3f,0x29,0xa6,0xa9,0x49,0xbe,0x77,0x50,0x62,0x78, + 0xbf,0x63,0x3c,0x3d,0x74,0xa6,0x42,0x69,0xa7,0x67,0x4a,0x40,0x77,0x55,0xb4,0x7a, + 0x5d,0x63,0x60,0x3d,0x7d,0xa6,0x44,0x69,0xa7,0xb9,0x4a,0x50,0x77,0x5a,0x62,0x7b, + 0xaf,0x63,0x30,0x3d,0x29,0xa6,0x47,0x69,0xa8,0x27,0x4a,0x68,0x77,0x60,0x62,0x7c, + 0xbf,0x64,0x38,0x3d,0xa5,0xa6,0x49,0xbb,0xa9,0x57,0x4a,0x7c,0x77,0x64,0x62,0x7d, + 0xbf,0x64,0x54,0x3d,0xac,0xa6,0x4b,0x29,0xa9,0x2f,0x4a,0x2c,0x77,0x68,0x62,0xa1, + 0x3d,0x64,0x7c,0x3d,0xb6,0xa6,0x4e,0x49,0xaa,0x5f,0x4a,0xb0,0x77,0x6c,0xb4,0xa2, + 0x5d,0x64,0xb2,0x3d,0xc0,0xa6,0x50,0x29,0xaa,0xc1,0x4b,0x34,0x77,0x72,0x62,0x21, + 0x6d,0x65,0x44,0x3e,0x36,0xa6,0x52,0x29,0xab,0x6f,0x4b,0x46,0x77,0x77,0x62,0x22, + 0xaf,0x65,0x70,0x3e,0x41,0xa6,0x55,0x69,0xac,0x47,0x4b,0x58,0x77,0x7c,0x62,0x23, + 0xbf,0x65,0xaa,0x3e,0x4b,0xa6,0x57,0xbb,0xac,0xb1,0x4b,0x6e,0x77,0xa2,0xb4,0x25, + 0x3d,0x66,0x38,0x3e,0x53,0xa6,0x59,0xbb,0xad,0x67,0x4c,0xad,0x36,0x33,0x70,0xa3, + 0x4b,0x77,0x4b,0x26,0x77,0x26,0xb4,0x26,0x7d,0x66,0x68,0x3e,0x5f,0xa6,0x5c,0xbb, + 0xae,0x47,0x4b,0xaa,0x77,0x2b,0xb4,0x27,0xaf,0x66,0x30,0x3e,0x6c,0xa6,0x60,0x49, + 0xae,0xb1,0x4b,0xc0,0x77,0x30,0xb4,0x29,0x5d,0x67,0x44,0x3e,0x77,0xa6,0x62,0xbb, + 0xaf,0x77,0x4c,0x44,0x77,0xa8,0x62,0x2a,0x6d,0x67,0x6c,0xad,0x79,0x2c,0xb6,0xbb, + 0xb0,0x3f,0x4c,0x56,0x77,0xac,0xb4,0x2b,0x2d,0x67,0x2c,0x3e,0x28,0xa6,0x67,0x49, + 0xb0,0xa1,0x4c,0x66,0x77,0xb0,0xb4,0x2c,0xaf,0x67,0xc2,0x3e,0xa5,0xa6,0x69,0xbb, + 0xb1,0x57,0x4c,0x7c,0x77,0xb6,0x62,0x2d,0xbf,0x68,0x5c,0x3e,0xae,0xa6,0x6c,0x69, + 0xb1,0xb9,0x4c,0x30,0x77,0xbb,0xb4,0x2f,0x60,0x5b,0x51,0xc2,0xb6,0xa6,0x6e,0x49, + 0xb2,0x60,0x28,0x3e,0xb9,0xa6,0x6e,0xbb,0xb2,0x27,0x4c,0xba,0x77,0xc1,0x62,0x30, + 0xaf,0x68,0xc2,0x3d,0x31,0xa6,0x71,0x69,0xb3,0x47,0x4d,0x38,0x78,0x34,0x62,0xa3, + 0xbf,0x69,0x58,0x3f,0x3b,0xa6,0x73,0xbb,0xb3,0xb1,0x4d,0x4e,0x78,0x38,0xb4,0xa5, + 0x3d,0x69,0x78,0x3f,0x43,0xa6,0x75,0xbb,0xb4,0x67,0x4d,0x62,0x78,0x3e,0x62,0xa6, + 0x6d,0x69,0xb6,0x3f,0x4e,0xa6,0x78,0x29,0xb4,0xc1,0x4d,0x76,0x78,0x42,0xb4,0xa7, + 0x2d,0x6a,0x4c,0x3f,0x58,0xa6,0x7b,0x69,0xb5,0x27,0x4d,0x28,0x78,0x47,0x62,0xa8, + 0x2d,0x6a,0x6c,0x3f,0x60,0xa6,0x7d,0x29,0xb6,0x57,0x4d,0xb0,0x78,0x4d,0x62,0xaa, + 0x4d,0x6a,0xae,0x3f,0x6c,0xa6,0xa2,0x29,0xb6,0xc1,0x4e,0x34,0x78,0x52,0x62,0xab, + 0x6d,0x6b,0x48,0x3f,0x77,0xa6,0x22,0xbb,0xb7,0x77,0x4e,0x44,0x78,0x56,0xb4,0xac, + 0xaf,0x6b,0x74,0x3f,0x2a,0xa6,0x27,0x29,0xb8,0x2f,0x4e,0x6c,0x78,0x60,0x62,0xae, + 0xbf,0x6c,0x38,0x3f,0xa5,0xa6,0x29,0xbb,0xb9,0x57,0x4e,0x7c,0x78,0x64,0x62,0xaf, + 0xbf,0x6c,0x58,0x3f,0xad,0xa6,0x2c,0x49,0xb9,0xb1,0x4e,0x2e,0x78,0x68,0xb4,0xb1, + 0x3d,0x6c,0x78,0x3f,0xb5,0xa6,0x2d,0xbb,0xba,0x67,0x4e,0xb2,0x78,0x6d,0xb4,0xb2, + 0x5d,0x6c,0xb2,0x3f,0xc2,0xa6,0xa3,0x49,0xbb,0x3f,0x4f,0x36,0x78,0x74,0x62,0xb4, + 0x6d,0x6d,0x64,0x40,0x3e,0xa6,0xa6,0xbb,0xbc,0x47,0x4f,0x58,0x78,0x7b,0xb4,0xb6, + 0x4d,0x6d,0xb2,0x40,0x4d,0xa6,0xaa,0x69,0xbc,0xb9,0x4f,0x70,0x78,0x22,0x62,0xb7, + 0xbf,0x6e,0x54,0x40,0x5a,0xa6,0xad,0x29,0xbd,0x2f,0x4f,0x2e,0x78,0x28,0xb4,0xb9, + 0x4d,0x6e,0x7c,0x40,0x64,0xa6,0xb0,0x69,0xbe,0x67,0x4f,0xb2,0x78,0xbd,0x74,0x51, + 0xa2,0xbb,0xa2,0x40,0x6a,0xa6,0xb1,0x29,0xbe,0x2f,0x4f,0xc0,0x78,0xa4,0x62,0xbb, + 0x6d,0x6f,0x44,0x40,0x76,0xa6,0xb4,0x29,0xbf,0x6f,0x50,0x46,0x78,0xa8,0xb4,0xbc, + 0x2d,0x6f,0x70,0x40,0x22,0xa6,0xb7,0x29,0xc0,0x4f,0x50,0x5a,0x78,0xad,0xb4,0xbd, + 0xaf,0x6f,0x30,0x40,0x2a,0xa6,0xb9,0x29,0xc0,0x2f,0x50,0x6a,0xb8,0x55,0x5e,0xbe, + 0xaf,0x6f,0xc2,0x40,0xa3,0xa6,0xbb,0x69,0xc1,0x47,0x50,0x78,0x78,0xb5,0xb4,0xbf, + 0xaf,0x70,0x50,0x40,0xac,0xa6,0xbd,0x29,0xc1,0x2f,0x50,0x2c,0x78,0xba,0x62,0xc0, + 0xbf,0x70,0x74,0x40,0xb4,0xa6,0xbf,0x29,0xc2,0x4f,0x50,0xac,0x78,0xbd,0xc0,0x69, + 0xc2,0x67,0x50,0xb2,0x78,0xbf,0x62,0xc2,0x4d,0x70,0xae,0xad,0x79,0x50,0xc1,0xbb, + 0xc2,0xa9,0x50,0xbe,0x78,0xc2,0x62,0xc2,0xbf,0x69,0x3c,0x41,0x34,0xa7,0x32,0x6a, + 0x31,0x67,0x51,0x40,0x79,0x35,0xb5,0x32,0x6d,0x71,0x64,0x41,0x3e,0xa7,0x34,0x2a, + 0x31,0xc1,0x51,0x56,0x79,0x3b,0x63,0x33,0xbf,0x71,0xa6,0x41,0x4a,0xa7,0x37,0x2a, + 0x32,0x2f,0x51,0x6e,0x79,0x40,0xb5,0x35,0x4d,0x72,0x3c,0x41,0x54,0xa7,0x3a,0x6a, + 0x33,0x67,0x51,0xa2,0x79,0x45,0x63,0x36,0x4d,0x72,0x5c,0x41,0x5c,0xa7,0x3c,0x2a, + 0x34,0x37,0x51,0xa8,0x79,0x4a,0xb5,0x37,0x7d,0x72,0x28,0x41,0x67,0xa7,0x3e,0xbc, + 0x34,0xa1,0x51,0xb8,0x79,0x4e,0xb5,0x38,0x2d,0x72,0xbe,0x41,0x70,0xa7,0x41,0x6a, + 0x35,0x47,0x52,0x38,0x79,0x53,0x63,0x39,0x2d,0x73,0x4c,0x41,0x78,0xa7,0x43,0x2a, + 0x35,0x2f,0x52,0x4e,0x79,0x58,0xb5,0x3b,0x3d,0x73,0x78,0x41,0x23,0xa7,0x45,0xbc, + 0x36,0x5f,0x52,0x5e,0x79,0x5c,0xb5,0x3c,0x3d,0x73,0xaa,0x41,0x2b,0xa7,0x47,0xbc, + 0x36,0xa9,0x52,0x6c,0x79,0x60,0x63,0x3c,0xbf,0x74,0x34,0x41,0xa4,0xa7,0x49,0x2a, + 0x37,0x4f,0x52,0x7a,0x79,0x63,0xb5,0x3d,0xaf,0x74,0x50,0x41,0xab,0xa7,0x4b,0x6a, + 0x37,0x27,0x52,0x28,0x79,0x67,0x63,0x3e,0x2d,0x74,0x6c,0x41,0xb2,0xa7,0x4d,0x2a, + 0x38,0x4f,0x52,0xae,0x79,0x6c,0x63,0x3f,0xbf,0x74,0xaa,0x41,0xbe,0xa7,0x50,0x4a, + 0x38,0xb1,0x52,0xc0,0x79,0x70,0xb5,0x41,0x5d,0x75,0x44,0x42,0x39,0xa7,0x53,0x6a, + 0x39,0x27,0x53,0x4e,0x79,0x78,0xb5,0x43,0x3d,0x75,0x78,0x42,0x43,0xa7,0x55,0xbc, + 0x3a,0x5f,0x53,0x5e,0x79,0x7c,0xb5,0x44,0x3d,0x75,0xaa,0x42,0x4b,0xa7,0x57,0xbc, + 0x3a,0xa9,0x53,0x6e,0x79,0x21,0x63,0x45,0x5d,0x76,0x40,0x42,0x55,0xa7,0x6e,0x52, + 0x21,0x58,0xbf,0xae,0x79,0x24,0x63,0x45,0xbf,0x76,0x58,0x42,0x5b,0xa7,0x5b,0xbc, + 0x3b,0xa9,0x53,0x2c,0x79,0x28,0x63,0x46,0xbf,0x76,0x74,0x42,0x62,0xa7,0x5d,0x2a, + 0x3c,0x4f,0x53,0xac,0x79,0x2b,0xb5,0x47,0xaf,0x76,0x30,0x42,0x69,0xa7,0x5f,0x6a, + 0x3c,0x27,0x53,0xba,0x79,0x30,0x63,0x48,0xbf,0x77,0x34,0x42,0x72,0xbd,0x23,0x47, + 0xbf,0x47,0x54,0x38,0x79,0xa5,0xb5,0x49,0xaf,0x77,0x50,0x42,0x7a,0xa7,0x63,0x2a, + 0x3d,0x2f,0x54,0x4c,0x79,0xaa,0x63,0x4a,0xbf,0x77,0x74,0x42,0x22,0xa7,0x65,0x2a, + 0x3e,0x4f,0x54,0x5e,0x79,0xaf,0x63,0x4c,0x5d,0x77,0xb2,0x42,0x2d,0xa7,0x68,0x6a, + 0x3e,0xb9,0x54,0x70,0x79,0xb4,0x63,0x4d,0x6d,0x78,0x48,0xad,0x79,0x50,0xbc,0x2a, + 0x3f,0x6f,0x54,0x22,0x79,0xb7,0xb5,0x4e,0x5d,0x78,0x60,0x42,0xaf,0xa7,0x6c,0x6a, + 0x3f,0xb9,0x54,0x30,0x79,0xbb,0x63,0x4f,0x4d,0x78,0x7c,0x42,0xb6,0xa7,0x6e,0x4a, + 0x40,0x67,0x54,0xb2,0x79,0xbf,0x63,0x50,0x4d,0x78,0xae,0x42,0xbe,0xa7,0x70,0x2a, + 0x40,0xc1,0x51,0x34,0x7a,0x32,0x63,0x51,0x6d,0x79,0x50,0x43,0x39,0xa7,0x73,0x6a, + 0x41,0x27,0x55,0x48,0x7a,0x38,0x63,0x51,0x34,0x31,0x35,0xa3,0x33,0x49,0x5e,0xa3, + 0x33,0x5a,0x31,0x7d,0x51,0x25,0x31,0x31,0x64,0x36,0x65,0x31,0x46,0x41,0x3a,0x55, + 0x54,0xaa,0xbf,0xbb,0x53,0x3d,0x39,0x34,0x43,0x31,0xb3,0x71,0x4e,0x41,0x36,0x37, + 0x32,0x5a,0x71,0x41,0x61,0x35,0x7d,0x32,0x54,0x31,0x5d,0xa3,0x3d,0x49,0x34,0x57, + 0x31,0xb4,0x71,0x4f,0x61,0x39,0x3d,0x33,0x44,0x36,0x75,0x32,0x28,0x31,0x6e,0xa3, + 0x37,0x32,0x3a,0x79,0x53,0x63,0x79,0x74,0xa5,0x42,0x21,0x76,0x61,0x31,0x3d,0x75, + 0x34,0x4a,0x31,0x37,0x52,0x46,0x79,0x6d,0x40,0xc2,0x38,0xc2,0xa8,0xc2,0x21,0x75, + 0xa7,0x32,0x49,0x71,0x53,0x23,0x79,0x73,0x53,0x49,0x39,0x75,0x38,0x42,0x49,0x55, + 0x56,0x42,0x3b,0xa1,0x31,0x4e,0x79,0x31,0xa5,0x61,0x45,0x7e,0x7c,0x43,0xb6,0xa7, + 0x2d,0xb4,0x48,0x3f,0x56,0xa6,0x3a,0x65,0x43,0x5e,0x31,0x7c,0x64,0x43,0xaf,0x75, + 0x2c,0xac,0x47,0xbb,0x56,0x7a,0x39,0x63,0x33,0x3d,0x75,0x74,0x44,0x41,0xa8,0x35, + 0x42,0x4a,0x72,0x25,0x53,0x66,0x79,0x74,0x53,0x42,0xb7,0x75,0x4e,0x42,0x3e,0x55, + 0x53,0x2a,0x39,0x29,0x53,0x35,0x39,0x72,0x63,0x45,0x49,0x76,0x38,0x42,0x51,0x75, + 0x59,0x4a,0x39,0x25,0x53,0x45,0x79,0x75,0xb5,0x42,0x51,0x76,0xa5,0xc2,0xc0,0x52, + 0x21,0x58,0xbf,0x4c,0x7a,0x3a,0x63,0x53,0x6d,0x79,0x24,0x43,0x46,0xa7,0x76,0x2a, + 0x42,0x6f,0x55,0x64,0x7a,0x3e,0x63,0x54,0x6d,0x79,0xb6,0x43,0x4e,0xa7,0x78,0x2a, + 0x42,0xc1,0x55,0x72,0x7a,0x41,0xb5,0x55,0x5d,0x7a,0x40,0x43,0x55,0xa7,0x7a,0x6a, + 0x43,0x67,0x55,0xa2,0x7a,0x45,0x63,0x56,0x4d,0x7a,0x5c,0x43,0x5c,0xa7,0xc0,0x59, + 0x34,0xbc,0x68,0x43,0x5f,0xa7,0x7c,0xbc,0x44,0x37,0x55,0xa6,0x7a,0x4a,0x63,0x57, + 0x6d,0x7a,0x28,0x43,0x67,0xa7,0x7e,0xbc,0x44,0x77,0x55,0xb6,0x7a,0x4e,0x63,0x58, + 0x6d,0x7a,0xb6,0x43,0x6e,0xa7,0xa2,0x2a,0x44,0xc1,0x56,0x32,0x7a,0x51,0xb5,0x59, + 0x5d,0x7b,0x40,0x43,0x75,0xa7,0x22,0x6a,0x45,0x67,0x56,0x40,0xb8,0x55,0x40,0xac, + 0x3d,0x7b,0x58,0x43,0x7b,0xa7,0x23,0xbc,0x45,0xa9,0x56,0x4c,0x7a,0x58,0x63,0x5a, + 0xbf,0x7b,0x7c,0x43,0x24,0xa7,0x26,0x6a,0x46,0x67,0x56,0x60,0x7a,0x5d,0xb5,0x5c, + 0x5d,0x7b,0xb2,0x43,0x2d,0xa7,0x28,0x6a,0x46,0xb9,0x56,0x70,0x7a,0x62,0x63,0x5d, + 0x7d,0x7c,0x48,0x43,0xa9,0xa7,0x2a,0xbc,0x47,0x77,0x56,0x24,0x7a,0x66,0x63,0x5e, + 0x6d,0x7c,0x68,0x43,0xb1,0xa7,0x2c,0xbc,0x4e,0x42,0x38,0x59,0x52,0x31,0x39,0x71, + 0x63,0x46,0x21,0x31,0x2f,0xc2,0xb4,0xa3,0x5e,0x71,0x3c,0x6b,0x33,0xb0,0x31,0x2c, + 0x41,0x46,0xa3,0x32,0x2c,0x32,0x59,0x51,0x3c,0xbb,0x34,0x51,0x33,0x48,0x39,0x73, + 0x43,0x41,0x6d,0x76,0x55,0x31,0x33,0x55,0x44,0x32,0x34,0x33,0x56,0xa3,0x3a,0x67, + 0xb5,0x5e,0x29,0x7b,0xa7,0x44,0x49,0x35,0xa9,0x3a,0x4a,0x7b,0x57,0x64,0x7a,0x7d, + 0x63,0x65,0xa7,0x76,0x79,0x43,0xab,0xa7,0x2e,0x32,0x48,0x53,0x56,0x7a,0x3a,0x65, + 0x73,0x5e,0x45,0x7c,0x59,0x43,0xac,0xa7,0x2b,0x62,0x47,0x23,0x56,0x65,0x3a,0x72, + 0xb5,0x61,0x69,0x7d,0x4d,0x44,0x38,0x75,0xae,0x61,0x31,0x71,0x51,0x41,0x79,0x43, + 0x23,0x3d,0x2d,0x74,0x4a,0x41,0xa8,0x75,0x4a,0x72,0x36,0x2b,0x57,0x65,0x7a,0x7e, + 0x53,0x64,0x61,0x7d,0xc2,0x4a,0x38,0x37,0x52,0x62,0x38,0x3f,0x64,0x42,0x39,0x69, + 0x54,0x4f,0xa3,0xa9,0x52,0x41,0xae,0x35,0x40,0x59,0x65,0x3a,0x21,0x4f,0xc0,0x5c, + 0x71,0x39,0x32,0xa6,0x7a,0x6a,0x63,0x5f,0x6d,0x7c,0x28,0x43,0xb9,0xa7,0x2e,0xbc, + 0x48,0x77,0x56,0xb6,0x7a,0x6e,0x63,0x60,0x6d,0x7c,0xba,0x43,0xc1,0xa7,0x30,0xbc, + 0x49,0x37,0x57,0x34,0x7a,0x72,0x63,0x61,0x6d,0x7d,0x44,0x44,0x36,0xa7,0xa4,0x2a, + 0x49,0x6f,0x57,0x46,0x7a,0x76,0xb5,0x62,0x2d,0x7d,0x6c,0x44,0x40,0xbd,0x23,0x68, + 0xb3,0x3d,0x78,0x44,0x43,0xa7,0xa7,0xbc,0x4a,0x57,0x57,0x5c,0x7a,0x7c,0x63,0x63, + 0xbf,0x7d,0xae,0x44,0x4d,0xa7,0xaa,0x2a,0x4a,0xc1,0x57,0x72,0x7a,0x21,0xb5,0x65, + 0x5d,0x7e,0x40,0x44,0x55,0xa7,0xac,0x6a,0x4b,0x67,0x57,0xa2,0x7a,0x25,0x63,0x66, + 0x4d,0x7e,0x5c,0x44,0x5c,0xa7,0xae,0x4a,0x4b,0xb1,0x57,0x2e,0xb8,0x55,0x40,0xb8, + 0xbf,0x7e,0x74,0x44,0x62,0xa7,0xaf,0x2a,0x4c,0x4f,0x57,0xac,0x7a,0x2b,0xb5,0x67, + 0xaf,0x7e,0x30,0x44,0x69,0xa7,0xb1,0x6a,0x4c,0x27,0x57,0xba,0x7a,0x2f,0x63,0x68, + 0x2d,0x7e,0xbe,0x44,0x70,0xa7,0xb3,0x2a,0x4d,0x4f,0x58,0x3c,0x7a,0xa6,0x63,0x6a, + 0x4d,0xa1,0x60,0x44,0x7d,0xa7,0xb6,0x6a,0x4d,0xb9,0x58,0x50,0x7a,0xac,0x63,0x6b, + 0x7d,0xa1,0x30,0x44,0x29,0xa7,0xb9,0xbc,0x41,0x40,0xbf,0x36,0xc2,0x32,0xc2,0xa3, + 0xa2,0xbb,0x48,0xc1,0x37,0xc2,0x72,0xc2,0xb3,0x78,0xbf,0x44,0xc2,0x36,0x70,0xa4, + 0x70,0xbb,0x64,0xc1,0x3e,0xc2,0x74,0x30,0xb3,0xc2,0xbf,0x52,0xc2,0x39,0xc2,0xa5, + 0x60,0xbb,0xa2,0xc1,0x45,0xc2,0x76,0x70,0xb4,0x68,0xbf,0x60,0xc2,0x3d,0x70,0xa6, + 0x50,0xbb,0xae,0xc1,0x4c,0xc2,0x78,0x50,0xb4,0xb2,0xbf,0x6e,0xc2,0x40,0xc2,0xa7, + 0x40,0xbc,0x38,0xc1,0x53,0xc2,0x79,0xc2,0xb5,0x58,0xbf,0x7c,0xc2,0x44,0x70,0xa7, + 0xc2,0xbc,0x54,0xc1,0x5a,0xc2,0x7b,0x30,0xb5,0x30,0xbf,0x2a,0xc2,0x47,0xc2,0xa8, + 0xb2,0xbc,0x70,0xc1,0x61,0xc2,0x7d,0x70,0xb6,0x48,0xbf,0xaa,0xc2,0x4b,0x70,0xa9, + 0x30,0xbc,0x2c,0xc1,0x68,0xc2,0xa1,0x50,0xb6,0xa2,0xbf,0xb8,0xc2,0x4e,0xc2,0xbf, + 0xb2,0xbc,0xba,0xc1,0x6f,0xc2,0xa2,0xc2,0xb7,0x38,0xc0,0x34,0xc2,0x52,0x70,0xab, + 0x70,0xbd,0x44,0xc1,0x76,0xc2,0x22,0x30,0xb7,0x70,0xc0,0x42,0xc2,0x55,0xc2,0xac, + 0x60,0xbd,0x60,0xc1,0x7d,0xc2,0x24,0x70,0xb7,0xba,0xc0,0x50,0xc2,0x59,0x70,0xad, + 0x50,0xbd,0x7c,0xc1,0x24,0xc2,0x26,0x50,0xb8,0x60,0xc0,0x5e,0xc2,0x5c,0xc2,0xae, + 0x40,0xbd,0xaa,0xc1,0x2b,0xc2,0x27,0xc2,0xb8,0xaa,0xc0,0x6c,0xc2,0xb4,0xc0,0x52, + 0x21,0x58,0xbf,0x38,0x2f,0xa7,0xba,0xbc,0x4f,0x3f,0x58,0x78,0x7a,0xb5,0xb5,0x6d, + 0xaf,0xa2,0x54,0x44,0xac,0xa7,0xbd,0x2a,0x4f,0x2f,0x58,0x2e,0x7a,0xbc,0x63,0x6f, + 0x6d,0xa2,0x24,0x44,0xb8,0xbd,0xb5,0x6f,0xaf,0xa2,0x30,0x44,0xbd,0xa7,0xc1,0xbc, + 0x50,0xb1,0x58,0xc0,0x7a,0xc2,0xb5,0x51,0x4d,0x21,0x3c,0x45,0x34,0xa8,0x32,0x4a, + 0x60,0x5b,0x31,0xc1,0x36,0xa8,0x32,0x2a,0x51,0x6f,0x59,0x46,0x7b,0x38,0x63,0x72, + 0xbf,0x21,0x74,0x45,0x42,0xa8,0x35,0x2a,0x52,0x4f,0x59,0x5c,0x7b,0x3c,0x63,0x73, + 0xbf,0x21,0xaa,0x45,0x4b,0xa8,0x37,0xbc,0x52,0xa9,0x59,0x6c,0x7b,0x40,0x63,0x74, + 0xbf,0x22,0x34,0x45,0x52,0xa8,0x39,0x2a,0x53,0x4f,0x59,0x7a,0x7b,0x43,0xc0,0x5a, + 0x34,0xbc,0x4c,0x45,0x58,0xa8,0x3b,0x4a,0x53,0x27,0x59,0x28,0x7b,0x47,0x63,0x76, + 0x2d,0x22,0x6c,0x45,0x60,0xa8,0x3d,0x4a,0x54,0x3f,0x59,0xa8,0x7b,0x4a,0xb5,0x77, + 0x7d,0x22,0x28,0x45,0x67,0xa8,0x3e,0xbc,0x54,0x77,0x59,0xb6,0x7b,0x4e,0x63,0x78, + 0x6d,0x22,0xb6,0x45,0x6e,0xa8,0x40,0x2a,0x54,0xc1,0x5a,0x32,0x7b,0x51,0xb5,0x79, + 0x5d,0x23,0x40,0x45,0x75,0xa8,0x42,0x6a,0x55,0x67,0x59,0xa5,0x62,0x4a,0x3d,0x57, + 0x64,0x3a,0x21,0xa5,0x66,0x49,0x7e,0x77,0x44,0x6a,0x75,0xb3,0x62,0x4d,0x7d,0x58, + 0x54,0x3a,0xaf,0xa5,0x6d,0x49,0xa2,0x57,0x44,0xb4,0x75,0xc1,0x62,0x51,0x3d,0x59, + 0x44,0x3b,0x39,0xa5,0x74,0x49,0x22,0x37,0x45,0x5a,0x76,0x3d,0x62,0x54,0x7d,0x5a, + 0x34,0x3b,0x55,0xa5,0x7b,0x49,0x23,0xa9,0x45,0xa4,0x76,0x4b,0x62,0x58,0x3d,0x5a, + 0xb6,0x3b,0x71,0xa5,0x22,0x49,0x25,0x77,0x46,0x4a,0x76,0x59,0x62,0x5b,0x7d,0x5b, + 0xa6,0x3b,0x2d,0xa5,0x29,0x49,0x27,0x57,0x46,0x22,0x76,0x67,0x62,0x5f,0x3d,0x5c, + 0x24,0x3b,0xbb,0xa5,0x30,0x49,0x29,0x37,0x47,0x3a,0x76,0x75,0x62,0x62,0x7d,0x5d, + 0x74,0x3c,0x45,0xa5,0xa9,0x49,0x2a,0xa9,0x47,0x72,0x76,0x23,0x62,0x66,0x3d,0x5e, + 0x64,0x3c,0x61,0xa5,0xb0,0x49,0x2c,0x77,0x47,0xbc,0x76,0xa3,0x62,0x69,0x7d,0x5f, + 0x54,0x3c,0x7d,0xa5,0xb7,0x49,0x2e,0x57,0x48,0x62,0x76,0xb1,0x62,0x6d,0x3d,0x60, + 0x44,0x3c,0xab,0xa5,0xbe,0x49,0x30,0x37,0x48,0xac,0x76,0xbf,0x62,0x70,0x7d,0x61, + 0x34,0x3d,0x35,0xa6,0x33,0x49,0xa3,0xa9,0x49,0x52,0x77,0x3b,0x62,0x74,0x3d,0x61, + 0xb6,0x3d,0x51,0xa6,0x3a,0x49,0xa5,0x77,0x49,0x2a,0x77,0x49,0x62,0x77,0x7d,0x62, + 0xb2,0x59,0x65,0x3a,0xbf,0xb6,0x42,0xbc,0x55,0x77,0x5a,0x44,0x7b,0x56,0x63,0x7a, + 0x6d,0x23,0x6c,0x45,0xa2,0xa8,0x45,0x6a,0x56,0x47,0x5a,0x58,0x7b,0x5b,0xb5,0x7b, + 0xaf,0x23,0x30,0x45,0x29,0xa8,0x47,0x6a,0x56,0x27,0x5a,0x68,0x7b,0x60,0x63,0x7d, + 0x5d,0x24,0x40,0x45,0xa7,0xa8,0x4a,0x6a,0x57,0x67,0x5a,0xa2,0x7b,0x65,0xb5,0x7e, + 0x60,0x5b,0x57,0xc1,0x32,0x66,0xb5,0x7e,0x7d,0x24,0x68,0x45,0xb1,0xa8,0x4c,0xbc, + 0x58,0x37,0x5a,0xa6,0x7b,0x6a,0x63,0xa1,0x6d,0x24,0x24,0x45,0xb8,0xa8,0x4e,0x2a, + 0x58,0x6f,0x5a,0xb4,0x7b,0x6d,0xb5,0xa2,0x5d,0x24,0xb2,0x45,0xbf,0xa8,0x50,0x2a, + 0x58,0xc1,0x5b,0x32,0x7b,0x71,0xb5,0x21,0x5d,0x25,0x40,0x46,0x36,0xa8,0x52,0x2f, + 0x25,0x72,0xc1,0x40,0x7b,0x75,0x63,0x22,0x4d,0x25,0x5c,0x46,0x3c,0xa8,0x54,0x4a, + 0x59,0xb1,0x5b,0x4e,0x7b,0x78,0xb5,0x23,0x3d,0x25,0x78,0x46,0x43,0xa8,0x55,0xbc, + 0x5a,0x57,0x5b,0x5c,0x7b,0x7c,0x63,0x23,0xbf,0x25,0xaa,0x46,0x4b,0xa8,0x57,0xbc, + 0x5a,0xa9,0x5b,0x6c,0x7b,0xa2,0x63,0x24,0xbf,0x26,0x34,0x46,0x52,0xa8,0x59,0x2a, + 0x5b,0x4f,0x5b,0x7a,0x7b,0x23,0xb5,0x25,0xaf,0x26,0x50,0x45,0xb3,0x41,0x2d,0x55, + 0x48,0x42,0x36,0xa9,0x52,0x6b,0x39,0x5f,0x23,0x3c,0x29,0x73,0xba,0x41,0x2f,0x35, + 0x48,0xa2,0x25,0xb7,0x25,0x35,0x31,0x5d,0x33,0x3c,0x35,0x73,0xa5,0x41,0x29,0xa7, + 0x47,0x52,0x36,0x7b,0x52,0x64,0x39,0x5d,0xb5,0x3c,0x51,0x73,0xac,0xbd,0x27,0xa1, + 0x51,0x71,0x37,0x53,0x34,0x7a,0x31,0xb5,0x61,0x4d,0x21,0x38,0x46,0x32,0xa8,0x71, + 0x6a,0x69,0x3f,0x61,0x34,0x7d,0x71,0xb6,0x51,0x4d,0xaf,0x38,0x4d,0x32,0xaa,0x51, + 0x6a,0xb3,0x3f,0x6f,0x34,0x21,0x31,0xb7,0x41,0x4e,0x3d,0x38,0x55,0x32,0xac,0x51, + 0x6b,0x61,0x3f,0xa1,0x34,0x25,0x31,0xb8,0x50,0x5c,0x5b,0xa3,0x75,0x31,0xaf,0x51, + 0x6c,0x41,0x3f,0xa9,0x34,0x2b,0x31,0xb9,0x21,0x4e,0x29,0x38,0x68,0x32,0xb1,0x31, + 0x6c,0x79,0x3f,0xb7,0x34,0x2e,0x71,0xba,0x71,0x4e,0xb7,0x38,0x6f,0x32,0xb2,0xa3, + 0x6d,0x31,0x40,0x33,0x34,0xa4,0x71,0xbb,0x71,0x4f,0x45,0x38,0x77,0x32,0xb4,0xa3, + 0x6d,0x71,0x40,0x44,0xb8,0x68,0x32,0x4f,0x35,0x51,0x37,0x22,0x7b,0x25,0xb5,0x26, + 0x5d,0x26,0x60,0x46,0x5d,0xa8,0x5c,0x6a,0x5b,0xb9,0x5b,0x30,0x7b,0x29,0x63,0x27, + 0x4d,0x26,0x7c,0x46,0x64,0xa8,0x5e,0x4a,0x5c,0x5f,0x5b,0xb0,0x7b,0x2c,0xb5,0x28, + 0x3d,0x26,0xaa,0x46,0x6b,0xa8,0x5f,0xbc,0x5c,0xb9,0x5b,0xc2,0x7b,0xa3,0xb5,0x29, + 0x5d,0x27,0x40,0x46,0x76,0xbd,0x23,0x68,0xb3,0x3f,0x4c,0x46,0x78,0xa8,0x63,0x4a, + 0x5d,0xa1,0x5c,0x46,0x7b,0xa8,0xb5,0x2a,0xaf,0x27,0x74,0x46,0x23,0xa8,0x66,0x4a, + 0x5e,0x5f,0x5c,0x5e,0x7b,0xae,0xb5,0x2c,0x5d,0x27,0xb2,0x46,0x2d,0xa8,0x68,0x6a, + 0x5e,0xb9,0x5c,0x70,0x7b,0xb3,0xb5,0x2d,0x5d,0x28,0x40,0x46,0xa7,0xa8,0x6a,0x6a, + 0x5f,0x67,0x5c,0xa2,0xb8,0x55,0x40,0xc0,0x3d,0x28,0x58,0x46,0xad,0xa8,0x6b,0xbc, + 0x5f,0xb1,0x5c,0x2e,0x7b,0xba,0xb5,0x2f,0x3d,0x28,0x78,0x46,0xb5,0xa8,0x6d,0xbc, + 0x60,0x60,0x28,0x46,0xb9,0xa8,0x6e,0xbc,0x60,0x77,0x5c,0xb6,0x7b,0xc0,0x63,0x30, + 0x6d,0x28,0xb6,0x46,0xc0,0xa8,0x70,0x2a,0x60,0xc1,0x59,0x32,0x7c,0x31,0xb5,0xa3, + 0x5d,0x29,0x40,0x47,0x35,0xa8,0x72,0x6a,0x61,0x67,0x5d,0x40,0x7c,0x35,0xb5,0xa4, + 0x5d,0x29,0x31,0x7b,0x33,0x43,0x74,0x35,0x22,0x32,0x45,0x61,0x56,0x3b,0x3a,0x54, + 0x73,0x5a,0x61,0x7b,0x55,0x43,0x7e,0x35,0x24,0xa4,0x45,0x33,0x56,0x32,0x7a,0x52, + 0xb5,0x59,0x7d,0x7b,0x4c,0x43,0x76,0xa7,0x23,0x4a,0x45,0xa9,0x56,0x46,0x7a,0x58, + 0x63,0x5b,0x5d,0x7b,0x51,0x43,0x7c,0xa7,0x23,0x72,0x45,0xb1,0x56,0x50,0x7a,0x54, + 0x23,0x5a,0x71,0x7b,0x56,0x43,0xa1,0x35,0x25,0x42,0x45,0x55,0x56,0x39,0x7a,0x54, + 0x53,0x59,0xa7,0x7b,0x47,0x43,0x76,0x55,0x21,0xb4,0x45,0x4b,0x56,0x40,0x3a,0x54, + 0xb5,0x5a,0x35,0x7b,0x53,0x43,0x7a,0x75,0x23,0x6a,0x45,0x23,0x56,0x46,0x3a,0x56, + 0x23,0x5a,0x69,0x7b,0x62,0x43,0x7d,0x75,0x24,0x5a,0x45,0xaf,0x56,0x4d,0x7a,0x58, + 0x53,0x5a,0xb7,0x7b,0x6f,0x43,0x21,0x35,0x25,0x3a,0x46,0x37,0x56,0x53,0x3a,0x59, + 0x23,0x5b,0x49,0x7b,0x78,0x43,0x23,0x35,0x25,0x7a,0x46,0x46,0xb8,0x28,0x32,0x6a, + 0x31,0x41,0x35,0x48,0x7c,0x37,0x63,0xa4,0x2d,0x29,0x6c,0x47,0x40,0xa8,0x75,0x6a, + 0x62,0x47,0x5d,0x58,0x7c,0x3b,0xb5,0xa5,0xaf,0x29,0x30,0x47,0x4a,0xa8,0x77,0x2a, + 0x62,0x2f,0x5d,0x6a,0x7c,0x3f,0xb5,0xa6,0xaf,0x29,0xc2,0x47,0x53,0xa8,0x79,0xbc, + 0x63,0x57,0x5d,0x7c,0x7c,0x44,0x63,0xa7,0xbf,0x2a,0x54,0x47,0x5a,0xa8,0xc0,0x59, + 0x34,0xbc,0x5c,0x47,0x5c,0xa8,0x7c,0x4a,0x63,0xb1,0x5d,0x2e,0x7c,0x48,0xb5,0xa9, + 0x3d,0x2a,0x78,0x47,0x63,0xa8,0x7d,0xbc,0x64,0x57,0x5d,0xae,0x7c,0x4c,0x63,0xa9, + 0xbf,0x2a,0xa6,0x47,0x6a,0xa8,0xa1,0x2a,0x64,0x2f,0x5d,0xbc,0x7c,0x4f,0xb5,0xaa, + 0xaf,0x2a,0xc2,0x47,0x71,0xa8,0x21,0x2a,0x65,0x4f,0x5e,0x3a,0xb8,0x55,0x40,0xab, + 0x2d,0x2b,0x4c,0x47,0x78,0xa8,0x23,0x2a,0x65,0x2f,0x5e,0x4c,0x7c,0x58,0x63,0xac, + 0xbf,0x2b,0x78,0x47,0x23,0xa8,0x25,0xbc,0x66,0x57,0x5e,0x5c,0x7c,0x5c,0x63,0xad, + 0xbf,0x2b,0xae,0x47,0x2c,0xa8,0x28,0x4a,0x66,0xb9,0x5e,0x70,0x7c,0x61,0x63,0xaf, + 0x4d,0x2c,0x3c,0x47,0xa6,0xa8,0x2a,0x6a,0x67,0x67,0x5e,0xa2,0x7c,0x65,0x63,0xb0, + 0x4d,0x2c,0x5c,0x47,0xae,0xa8,0x2c,0x4a,0x6a,0x5a,0xa1,0x5d,0x64,0x7c,0x7d,0xa5, + 0x63,0x3d,0xa3,0xaa,0x75,0x4a,0xab,0xa9,0x6b,0x52,0xa1,0x7b,0x64,0x24,0x3d,0xb6, + 0x44,0x4d,0xab,0xaa,0x4c,0x4a,0xaa,0x37,0x6a,0xac,0xa1,0x6d,0x64,0xa2,0x7d,0xb7, + 0x34,0x4e,0x35,0xaa,0x53,0x4a,0xb5,0x77,0x69,0xac,0xa1,0x4d,0x64,0x78,0x7d,0xbc, + 0xb6,0x4d,0x51,0xaa,0x3a,0x4a,0xb5,0x37,0x6b,0x6a,0xa1,0x21,0x64,0x29,0x3d,0xb9, + 0x44,0x4e,0x79,0xaa,0x64,0x4a,0xb0,0x37,0x6c,0x5a,0xa1,0xaf,0x64,0x2c,0x7d,0xba, + 0x34,0x4e,0xa7,0xaa,0x31,0x4a,0xa3,0x57,0x69,0x42,0xa1,0x37,0x64,0x73,0x3d,0xba, + 0x54,0x4e,0xaf,0xaa,0x6d,0x4a,0xb2,0x57,0x6c,0xb4,0xa1,0xc1,0x64,0x79,0x3d,0xb5, + 0x44,0x4d,0x79,0xaa,0x44,0x4a,0xa8,0x37,0x63,0x62,0x38,0x31,0x64,0xa3,0x7d,0xb4, + 0x54,0x4d,0x5d,0xaa,0x3d,0x4a,0xb8,0x77,0x6d,0x5a,0xa1,0x2b,0x64,0x28,0x3d,0xb8, + 0xb6,0x4f,0xaf,0xaa,0x5a,0x4a,0xad,0x77,0x6b,0x2a,0xa1,0x29,0x64,0xb1,0x7d,0xbd, + 0x34,0x4f,0x7d,0xaa,0x74,0x4a,0xb5,0x57,0x6e,0xa4,0xa2,0x3e,0xb8,0xc2,0x32,0x4c, + 0xb1,0x74,0x68,0x47,0xb1,0xa8,0x2c,0xbc,0x68,0x37,0x5e,0xa6,0x7c,0x6a,0x63,0xb1, + 0x6d,0x2c,0x24,0x47,0xb8,0xa8,0x2e,0x2a,0x68,0x6f,0x5e,0xb8,0x7c,0x6e,0xb5,0xb2, + 0x7d,0x2c,0xba,0x47,0xc1,0xa8,0x30,0xbc,0x69,0x37,0x5f,0x34,0x7c,0x72,0x63,0xb3, + 0x6d,0x2d,0x44,0x48,0x36,0xa8,0xa4,0x2a,0x69,0x6f,0x5f,0x42,0xb8,0x55,0xb2,0xa3, + 0x49,0xa1,0x5f,0x46,0x7c,0x76,0xb5,0xb4,0x7d,0x2d,0x68,0x48,0x3f,0xa8,0xa6,0xbc, + 0x6a,0x37,0x5f,0x54,0x7c,0x7a,0x63,0xb5,0x6d,0x2d,0x24,0x48,0x46,0xa8,0xa8,0x2a, + 0x6a,0x6f,0x5f,0x62,0x7c,0x7d,0xb5,0xb6,0x5d,0x2d,0xb2,0x48,0x4e,0xa8,0xaa,0x2a, + 0x6a,0xc1,0x5f,0x72,0x7c,0x21,0xb5,0xb7,0x5d,0x2e,0x40,0xad,0x79,0x50,0xac,0x4a, + 0x6b,0x5f,0x5f,0x7e,0x7c,0x24,0xb5,0xb8,0x3d,0x2e,0x58,0x48,0x5b,0xa8,0xad,0xbc, + 0x6b,0xa9,0x5f,0x2c,0x7c,0x28,0x63,0xb8,0xbf,0x2e,0x74,0x48,0x62,0xa8,0xaf,0x2a, + 0x6c,0x4f,0x5f,0xac,0x7c,0x2b,0xb5,0xb9,0xaf,0x2e,0x30,0x48,0x6a,0xa8,0xb1,0x2a, + 0x6c,0x2f,0x5f,0xbc,0x7c,0x2f,0xb5,0xba,0xaf,0x2e,0xc2,0x48,0x71,0xa8,0xb3,0x6a, + 0x6d,0x47,0x60,0x38,0x7c,0xa5,0x63,0xbb,0xa3,0x37,0x71,0x32,0x5b,0x31,0x3a,0x71, + 0x41,0x31,0x31,0xa7,0x32,0x31,0x31,0x38,0xb3,0x3b,0x35,0x34,0x29,0x31,0x45,0x71, + 0x4c,0x21,0x34,0x6d,0x31,0x64,0x31,0x5a,0x51,0x39,0x31,0x31,0xa3,0x4a,0x49,0x57, + 0x57,0x42,0x7a,0x77,0x63,0x63,0x3d,0x7d,0x24,0x44,0x49,0xa7,0xaa,0x4a,0x4b,0x37, + 0x57,0x7a,0x7a,0x25,0x63,0x66,0x7d,0x7e,0x74,0x44,0x65,0xa7,0xb1,0x4a,0x4c,0xa9, + 0x58,0x32,0x7a,0xa5,0x63,0x6a,0x3d,0xa1,0x64,0x44,0x21,0xa7,0xb8,0x4a,0x4e,0x77, + 0x58,0x6a,0x7a,0xb3,0x63,0x6d,0x7d,0xa2,0x54,0x44,0xaf,0xa8,0x21,0x43,0x65,0x55, + 0x7e,0x42,0x44,0x57,0x55,0xad,0x3a,0x4b,0x23,0x57,0x29,0x7a,0x28,0x43,0x67,0x35, + 0x7e,0x7a,0x44,0x65,0x55,0xb0,0x7a,0x4c,0x73,0x57,0xb7,0x7a,0x2f,0x43,0x68,0xa7, + 0xa1,0x32,0x44,0x73,0x55,0xb4,0x3a,0x4d,0x63,0x58,0x41,0x7a,0xa8,0x43,0x6a,0x75, + 0xa1,0x6a,0x44,0x21,0x55,0xb7,0x7a,0x3d,0x33,0x54,0x35,0x79,0xa5,0x43,0x49,0xa7, + 0x77,0x52,0x42,0x7b,0x55,0x64,0x3a,0x3d,0xb5,0x54,0x51,0x79,0xac,0x43,0x4b,0x75, + 0x77,0x2a,0x42,0x29,0x55,0x67,0x7a,0x3e,0xa5,0x56,0xb7,0x31,0x24,0x41,0x26,0x35, + 0x4c,0xa3,0x33,0xbf,0x31,0x5e,0x79,0x5c,0x73,0x3b,0xb7,0x73,0x2f,0xbd,0x74,0x71, + 0xa2,0xa3,0x69,0x34,0x76,0xa8,0xb4,0x2a,0x6d,0x6f,0x60,0x42,0x7c,0xa7,0xb5,0xbc, + 0x5d,0x2f,0x60,0x48,0x7d,0xa8,0xb6,0x6a,0x6d,0xb9,0x60,0x50,0x7c,0xab,0x63,0xbd, + 0x4d,0x2f,0x7c,0x48,0x24,0xa8,0xb8,0x6a,0x6e,0x67,0x60,0x60,0x7c,0xaf,0x63,0xbe, + 0x4d,0x2f,0xae,0x48,0x2c,0xa8,0xba,0x4a,0x6e,0xb1,0x60,0x6e,0x7c,0xb2,0xc0,0x5a, + 0x4c,0xbb,0x38,0x72,0x7c,0xb3,0xb5,0xbf,0x5d,0x30,0x40,0x48,0xa8,0xa8,0xbc,0x2a, + 0x6f,0x77,0x60,0x26,0x7c,0xb8,0xb5,0xc0,0x7d,0x30,0x68,0x48,0xb1,0xa8,0xbe,0xbc, + 0x70,0x37,0x60,0xa6,0x7c,0xbc,0x63,0xc1,0x6d,0x30,0x24,0x48,0xb8,0xbd,0xb5,0xc1, + 0xaf,0x30,0x30,0x48,0xbb,0xa8,0xc1,0x6a,0x70,0x27,0x60,0xba,0x7c,0xc1,0x6e,0x5a, + 0x34,0xc2,0xba,0x48,0xc1,0xa8,0xc2,0xbc,0x61,0x37,0x61,0x34,0x7d,0x32,0x64,0x31, + 0x6d,0xa3,0x44,0x49,0x36,0xa9,0x32,0x2a,0x71,0x6f,0x61,0x42,0x7d,0x35,0xb6,0x32, + 0x5d,0xa3,0x60,0x49,0x3f,0xa9,0x34,0xbc,0x72,0x3f,0x61,0x56,0x7d,0x3a,0xb6,0x33, + 0x2d,0xa3,0x2c,0x49,0x48,0xa9,0x37,0x4a,0x72,0xa1,0x61,0x66,0x7d,0x3e,0xb6,0x34, + 0xaf,0xa3,0xc2,0x49,0x51,0xa9,0x39,0xbc,0x73,0x57,0x64,0x7d,0x31,0x39,0x71,0x6f, + 0x31,0x32,0x4d,0x33,0x62,0x31,0x7d,0xa3,0x44,0x71,0x36,0x31,0x32,0x52,0x31,0x70, + 0x31,0x33,0x7d,0x34,0x30,0x31,0x70,0x71,0x37,0x69,0x36,0x47,0x32,0x55,0x71,0x51, + 0x34,0x41,0x35,0xa7,0x33,0x4a,0x31,0xa9,0x51,0x52,0x79,0x3b,0x63,0x34,0x3d,0x71, + 0xb6,0x41,0x51,0xa7,0x3a,0x4a,0x33,0x77,0x51,0x2a,0x79,0x49,0x63,0x37,0x7d,0x72, + 0xa6,0x41,0x6d,0xa7,0x41,0x4a,0x35,0x57,0x52,0x42,0x79,0x57,0x63,0x3b,0x3d,0x73, + 0x24,0x41,0x29,0xa7,0x48,0x4a,0x37,0x37,0x52,0x7a,0x79,0x65,0x63,0x3e,0x7d,0x24, + 0x73,0x55,0xb7,0x7a,0x4f,0x43,0x58,0xa7,0x7b,0x32,0x43,0x73,0x55,0x22,0x3a,0x45, + 0x63,0x56,0x41,0x7a,0x56,0x43,0x5a,0x75,0x7b,0x6a,0x43,0x21,0x55,0x25,0x7a,0x46, + 0x53,0x56,0x5d,0x7a,0x5d,0x43,0x5c,0x55,0x7b,0xb4,0x43,0x2f,0x55,0x29,0x3a,0x47, + 0x43,0x56,0x79,0x7a,0x64,0x43,0x5e,0x35,0x7c,0x5a,0x42,0xab,0x55,0x6b,0x7a,0x3f, + 0xa5,0x54,0x2d,0x79,0xbb,0x43,0x4f,0x55,0x78,0x22,0x42,0xb9,0x55,0x6f,0x3a,0x40, + 0x23,0x54,0xbb,0x79,0xc2,0x43,0x51,0x35,0x79,0x3a,0x43,0x35,0x55,0x2d,0x71,0x47, + 0x51,0x36,0x7d,0x31,0xb7,0x41,0x50,0xa7,0x39,0x3a,0x33,0x35,0x51,0x72,0x79,0x41, + 0xa2,0x59,0x69,0x3a,0xbf,0x3a,0x31,0x55,0x2d,0xa4,0x4c,0x49,0x5b,0xa9,0x3b,0xbc, + 0x73,0xb1,0x61,0x30,0x7d,0x49,0xb6,0x37,0x5d,0xa4,0xa2,0x49,0x65,0xa9,0x3e,0x6a, + 0x74,0x67,0x61,0xb2,0x7d,0x4e,0x64,0x38,0xbf,0xa5,0x34,0x49,0x72,0xa9,0x41,0x2a, + 0x75,0x4f,0x62,0x3e,0x7d,0x54,0xb6,0x3a,0x4d,0xa5,0x5c,0x49,0x7c,0xa9,0x44,0x6a, + 0x75,0xb9,0x64,0xad,0x71,0x50,0x24,0xbc,0x76,0x37,0x62,0x54,0x7d,0x5a,0x64,0x3b, + 0x6d,0xa5,0x2c,0x49,0x2b,0xa9,0x47,0xbc,0x76,0xa9,0x62,0x6c,0x7d,0x60,0x64,0x3c, + 0xbf,0xa6,0x38,0x49,0xa5,0xa9,0x49,0xbc,0x77,0x5f,0x62,0xa2,0x7d,0x65,0xb6,0x3e, + 0x5d,0xa6,0x60,0x49,0xaf,0xa9,0x4c,0x6a,0x77,0xb9,0x62,0x30,0x7d,0x69,0xb6,0x3f, + 0x60,0x5b,0x51,0xc1,0xb6,0xa9,0x4e,0x4a,0x78,0x67,0x62,0xb2,0x7d,0x6d,0x64,0x40, + 0x4d,0xa6,0xae,0x49,0xbe,0xa9,0x50,0x4a,0x78,0xb1,0x62,0xc0,0x7d,0x70,0xb6,0x41, + 0x3d,0xa7,0x38,0x4a,0x33,0xa9,0x51,0xbc,0x79,0x57,0x63,0x3c,0x7d,0x74,0x64,0x41, + 0xbf,0xa7,0x54,0x4a,0x3a,0xa9,0x53,0x2a,0x79,0x2f,0x63,0x4a,0x7d,0x77,0xb6,0x42, + 0xaf,0xa7,0x70,0x4a,0x41,0xa9,0x55,0x6a,0x7a,0x47,0x63,0x58,0x7d,0x51,0x7d,0x39, + 0x54,0x33,0x3d,0xa3,0x75,0x49,0x42,0x57,0x35,0x62,0x72,0x3f,0x61,0x55,0x3d,0x3a, + 0x44,0x33,0x59,0xa3,0x7c,0x49,0x44,0x37,0x35,0xac,0x72,0x4d,0x61,0x58,0x7d,0x3b, + 0x34,0x33,0x75,0xa3,0x23,0x49,0x45,0xa9,0x36,0x52,0x72,0x5b,0x61,0x5c,0x3d,0x3b, + 0xb6,0x33,0xa3,0xa3,0x2a,0x49,0x47,0x77,0x36,0x2a,0x72,0x69,0x61,0x5f,0x7d,0x3c, + 0xa6,0x33,0xbf,0xa3,0xa3,0x49,0x49,0x57,0x37,0x42,0x72,0x77,0x61,0x63,0x3d,0x3d, + 0x24,0x34,0x49,0xa3,0xaa,0x49,0x4b,0x37,0x37,0x7a,0x72,0x25,0x61,0x66,0x7d,0x3e, + 0x74,0x34,0x65,0xa3,0xb1,0x49,0x4c,0xa9,0x38,0x32,0x72,0xa5,0x61,0x6a,0x3d,0x3f, + 0x64,0x34,0x21,0xa3,0xb8,0x49,0x4e,0x77,0x38,0x6a,0x72,0xb3,0x61,0x6d,0x7d,0x40, + 0x54,0x34,0xaf,0xa3,0xbf,0x49,0x50,0x57,0x38,0xb4,0x72,0xc1,0x61,0x71,0x3d,0x41, + 0x44,0x35,0x39,0xa4,0x34,0x49,0x52,0x37,0x39,0x5a,0x73,0x3d,0x61,0x74,0x7d,0x42, + 0x34,0x35,0x55,0xa4,0x3b,0x49,0x53,0xa9,0x39,0xa4,0x73,0x4b,0x61,0x78,0x3d,0x42, + 0xb6,0x35,0x71,0xa4,0x42,0x49,0x55,0x77,0x3a,0x50,0x27,0xbd,0x35,0xb6,0x6e,0x43, + 0x7d,0xa7,0x28,0x4a,0x47,0xa9,0x56,0xbc,0x7a,0x27,0x63,0x68,0x7d,0xa1,0xb6,0x44, + 0xaf,0xa7,0xc2,0x4a,0x52,0xa9,0x59,0x2a,0x7b,0x4f,0x63,0x7a,0x7d,0x23,0xb6,0x45, + 0xaf,0xa8,0x50,0x4a,0x5b,0xa9,0x5c,0x2a,0x7b,0xc1,0x63,0xa4,0x7d,0x29,0xb6,0x47, + 0x5d,0xa8,0xa2,0x4a,0x67,0xa9,0x5e,0xbc,0x7c,0xa2,0x26,0x44,0x70,0x31,0xb1,0x2a, + 0x7c,0x2f,0x63,0xbe,0x7d,0x30,0x64,0x48,0xbf,0xa9,0x34,0x4a,0x72,0xa9,0x61,0x2a, + 0x7d,0x4f,0x64,0x3e,0x7d,0xa7,0x64,0x4a,0x5d,0xa9,0x60,0x4a,0x7d,0xa9,0x64,0x6a, + 0x7d,0xb9,0x64,0x50,0x7d,0xab,0xb6,0x4b,0x5d,0xa9,0xa2,0x4a,0x26,0xa9,0x66,0x2a, + 0x7e,0x6f,0x64,0x62,0x7d,0xaf,0xb6,0x4c,0x60,0x5b,0x51,0xc2,0x2c,0xa9,0x68,0x4a, + 0x7e,0xb1,0x64,0x6e,0x7d,0xb2,0xb6,0x4d,0x3d,0xaa,0x38,0x4a,0xa5,0xa9,0x69,0xbc, + 0xa1,0x5f,0x64,0x7e,0x7d,0xb6,0xb6,0x4e,0x3d,0xaa,0x58,0x4a,0xad,0xa9,0x6b,0xbc, + 0xa1,0xb1,0x64,0x2e,0x7d,0xba,0xb6,0x4f,0x4d,0xaa,0x7c,0x4a,0xb6,0xa9,0x6e,0x4a, + 0xa2,0x60,0x28,0x4a,0xb9,0xa9,0x6e,0xbc,0xa2,0x77,0x64,0xb6,0x7d,0xc0,0x64,0x50, + 0x6d,0xaa,0xb6,0x4a,0xc0,0xa9,0x59,0x57,0x3b,0x42,0x73,0x77,0x61,0x23,0x3d,0x45, + 0x24,0x36,0x49,0xa4,0x58,0x49,0x5b,0x37,0x3b,0x7a,0x73,0x25,0x61,0x26,0x7d,0x46, + 0x74,0x36,0x65,0xa4,0x5f,0x49,0x5c,0xa9,0x3c,0x32,0x73,0xa5,0x61,0x2a,0x3d,0x47, + 0x64,0x36,0x21,0xa4,0x66,0x49,0x5e,0x77,0x3c,0x6a,0x73,0xb3,0x61,0x2d,0x7d,0x48, + 0x54,0x36,0xaf,0xa4,0x6d,0x49,0x60,0x57,0x3c,0xb4,0x73,0xc1,0x61,0xa3,0x3d,0x49, + 0x44,0x37,0x39,0xa4,0x74,0x49,0x62,0x37,0x3d,0x5a,0x74,0x3d,0x61,0xa6,0x7d,0x4a, + 0x34,0x37,0x55,0xa4,0x7b,0x49,0x63,0xa9,0x3d,0xa4,0x74,0x4b,0x61,0xaa,0x3d,0x4a, + 0xb6,0x37,0x71,0xa4,0x22,0x49,0x65,0x77,0x3e,0x4a,0x74,0x59,0x61,0xad,0x7d,0x4b, + 0xa6,0x37,0x2d,0xa4,0x29,0x49,0x67,0x57,0x3e,0x22,0x74,0x67,0x61,0xb1,0x3d,0x4c, + 0x24,0x37,0xbb,0xa4,0x30,0x49,0x69,0x37,0x3f,0x3a,0x74,0x75,0x61,0xb4,0x7d,0x4d, + 0x74,0x38,0x45,0xa4,0xa9,0x49,0x6a,0xa9,0x3f,0x72,0x74,0x23,0x61,0xb8,0x3d,0x4e, + 0x64,0x38,0x61,0xa4,0xb0,0x49,0x6c,0x77,0x3f,0xbc,0x74,0xa3,0x61,0xbb,0x7d,0x4f, + 0x54,0x38,0x7d,0xa4,0xb7,0x49,0x6e,0x6f,0x24,0x38,0x2c,0xae,0x3e,0x33,0x32,0x51, + 0x60,0xb9,0x64,0xc2,0x7d,0x31,0x64,0x51,0x5d,0xab,0x40,0x4b,0x35,0xa9,0x72,0x6a, + 0x21,0x67,0x65,0x40,0x7e,0x36,0x64,0x52,0x6d,0xab,0x68,0x4b,0x3f,0xa9,0x74,0xbc, + 0x22,0x3f,0x65,0x56,0x7e,0x3a,0xb6,0x53,0x7d,0xab,0x28,0x4b,0x47,0xa9,0x76,0xbc, + 0x22,0x27,0x65,0x6a,0x7e,0x40,0x64,0x54,0xbf,0xac,0x34,0x4c,0xb8,0x51,0x40,0xa7, + 0x4d,0xac,0x3c,0x4b,0x54,0xa9,0x7a,0x6a,0x23,0x67,0x65,0xa2,0x7e,0x45,0xb6,0x56, + 0x5d,0xac,0x60,0x4b,0x5e,0xa9,0x7c,0x2a,0x23,0xc1,0x65,0xa4,0x7e,0x49,0xb6,0x57, + 0x5d,0xac,0xa2,0x4b,0x65,0xa9,0x7e,0x6a,0x24,0x67,0x65,0xb2,0x7e,0x4d,0x64,0x58, + 0x5d,0xac,0xb2,0x4b,0x6d,0xa9,0xa2,0x6a,0x24,0xba,0x26,0x41,0x70,0x50,0xb6,0x59, + 0x3d,0xad,0x38,0x4b,0x73,0xa9,0x21,0xbc,0x25,0x57,0x66,0x3c,0x7e,0x54,0x64,0x59, + 0xbf,0xad,0x54,0x4b,0x7a,0xa9,0x23,0x2a,0x25,0x2f,0x66,0x4a,0x7e,0x57,0xb6,0x5a, + 0xaf,0xad,0x70,0x4b,0x21,0xa9,0x25,0x6a,0x26,0x47,0x66,0x58,0x7e,0x5b,0x64,0x5b, + 0x2d,0xad,0x2c,0x4b,0x28,0xa9,0x27,0x4a,0x26,0xa1,0x66,0x66,0x7e,0x5e,0xb6,0x5c, + 0x2d,0xad,0xbe,0x4b,0x30,0xa9,0x75,0x31,0x72,0x39,0x41,0x55,0x35,0x3a,0x72,0x33, + 0x71,0x51,0x25,0x39,0x32,0x33,0x36,0x71,0x72,0x69,0x41,0x61,0x35,0x3d,0x72,0x34, + 0x51,0x51,0xaf,0x39,0x4d,0x33,0x38,0x51,0x72,0xb3,0x41,0x6f,0x35,0x41,0x32,0x35, + 0x41,0x52,0x39,0x39,0x54,0x33,0x3a,0x31,0x73,0x59,0x41,0x7d,0x35,0x44,0x72,0x36, + 0x31,0x52,0x55,0x39,0x5b,0x33,0x3b,0xa3,0x73,0xa3,0x41,0x2b,0x35,0x48,0x32,0x36, + 0xc2,0x5f,0xad,0x35,0x21,0x31,0x7d,0x31,0x74,0x39,0x41,0xa7,0x35,0x4a,0x72,0x37, + 0x71,0x52,0x25,0x39,0x22,0x33,0x3e,0x71,0x74,0x69,0x41,0xb3,0x35,0x4d,0x72,0x38, + 0x51,0x52,0xaf,0x39,0x6d,0x33,0x40,0x51,0x74,0xb3,0x41,0xc1,0x35,0x51,0x32,0x39, + 0x41,0x53,0x39,0x39,0x74,0x33,0x42,0x31,0x75,0x59,0x42,0x3d,0x35,0x54,0x72,0x3a, + 0x31,0x53,0x55,0x39,0x7b,0x33,0x43,0xa3,0x75,0xa3,0x42,0x4b,0x35,0x58,0x32,0x3a, + 0xc2,0x5f,0xbb,0x3a,0xa5,0x59,0x31,0x5d,0x4d,0xae,0x3c,0x4b,0xa6,0xa9,0x2a,0x6a, + 0x27,0x67,0x66,0xa2,0x7e,0x65,0x64,0x5e,0x4d,0xae,0x5c,0x4b,0xae,0xa9,0x2c,0x2a, + 0x28,0x37,0x66,0xa8,0x7e,0x6a,0xb6,0x5f,0x7d,0xae,0x28,0x4b,0xb9,0xa9,0x2e,0xbc, + 0x28,0xa1,0x66,0xb8,0x7e,0x6e,0xb6,0x60,0x7d,0xae,0xba,0x4b,0xc1,0xa9,0x30,0xbc, + 0x29,0x38,0x26,0x44,0x70,0x31,0xa3,0x6a,0x29,0x47,0x67,0x38,0x7e,0x73,0x64,0x61, + 0x2d,0xaf,0x4c,0x4c,0x38,0xa9,0xa5,0x6a,0x29,0x27,0x67,0x48,0x7e,0x77,0x64,0x62, + 0x2d,0xaf,0x6c,0x4c,0x40,0xa9,0xa7,0x4a,0x2a,0x3f,0x67,0x56,0x7e,0x7a,0xb6,0x63, + 0xaf,0xaf,0x30,0x4c,0x4a,0xa9,0xa9,0x2a,0x2a,0x2f,0x67,0x6c,0x7e,0xa2,0x64,0x64, + 0xc2,0x5b,0x51,0xc2,0x51,0xa9,0xab,0x6a,0x2b,0x47,0x67,0x78,0x7e,0x24,0x64,0x66, + 0x3d,0xb0,0x5c,0x4c,0x5c,0xa9,0xae,0x4a,0x2b,0xb1,0x67,0x2e,0x7e,0x28,0xb6,0x67, + 0x4d,0xb0,0x7c,0x4c,0x64,0xa9,0xb0,0x4a,0x2c,0x5f,0x67,0xb0,0x7e,0x2c,0xb6,0x68, + 0x3d,0xb0,0xaa,0x4c,0x6b,0xa9,0xb1,0xbc,0x2c,0xa9,0x67,0xbe,0x7e,0x30,0x64,0x68, + 0xbf,0xb1,0x34,0x4c,0x72,0xa9,0xb3,0x2a,0x2d,0x4f,0x68,0x3c,0xb8,0x55,0x43,0xc1, + 0x29,0x51,0x55,0x32,0x77,0xa9,0xb4,0xbc,0x2d,0x77,0x68,0x44,0x7e,0xa8,0x64,0x6a, + 0x6d,0xb1,0x68,0x4c,0xa1,0xa9,0xb6,0xbc,0x2e,0x3f,0x68,0x56,0x7e,0xac,0xb6,0x6b, + 0x7d,0xb1,0x28,0x4c,0x27,0xa9,0xb8,0xbc,0x2e,0x77,0x68,0x64,0x7e,0xb0,0x64,0x6c, + 0x6d,0xb1,0xb6,0x4c,0x2e,0xa9,0xba,0x2a,0x2e,0xc1,0x68,0x72,0x7e,0xb3,0xc0,0x5a, + 0x48,0x49,0x38,0x76,0x7e,0xb4,0xb6,0x6d,0x7d,0xb2,0x48,0x4c,0xa9,0xa9,0xbc,0xbc, + 0x2f,0xa1,0x68,0x26,0x7e,0xb8,0xb6,0x6e,0x2d,0xb2,0x6c,0x4c,0xb2,0xa9,0xbf,0x6a, + 0x30,0x47,0x68,0xaa,0x7e,0xbd,0x64,0x6f,0x30,0x5f,0x68,0xb0,0x7e,0xbe,0xb6,0x70, + 0x5d,0xb2,0xb6,0x4c,0xc1,0xa9,0xc2,0xbc,0x21,0x37,0x69,0x34,0xa1,0x32,0x64,0x2f, + 0x25,0x32,0xbf,0x38,0xa1,0x33,0xb6,0x71,0xaf,0xb3,0x50,0x4d,0x3a,0xaa,0x33,0x2a, + 0xa3,0x2f,0x69,0x4c,0xa1,0x38,0x64,0x72,0xbf,0xb3,0x74,0x4d,0x42,0xaa,0x35,0x2a, + 0xa4,0x4f,0x69,0x5c,0xa1,0x3c,0x64,0x73,0xbf,0xb3,0xa6,0x4d,0x4b,0xaa,0x37,0xbc, + 0xa4,0xa9,0x69,0x6c,0xa1,0x40,0x64,0x74,0xbf,0xb4,0x3c,0x4d,0x54,0xaa,0x3a,0x6a, + 0xa5,0x67,0x69,0xa2,0xa1,0x45,0xb6,0x76,0x5d,0xb4,0x60,0xad,0x79,0x56,0xc0,0x61, + 0x71,0x79,0x31,0x2a,0xa1,0x47,0xb6,0x76,0xaf,0xb4,0x70,0x4d,0x63,0xaa,0x3e,0x4a, + 0xa6,0x67,0x69,0xb2,0xa1,0x4d,0x64,0x78,0x4d,0xb4,0xae,0x4d,0x6c,0xaa,0x40,0x4a, + 0xa6,0xb1,0x69,0xc0,0xa1,0x50,0xb6,0x79,0x3d,0xb5,0x38,0x4d,0x73,0xaa,0x41,0xbc, + 0xa7,0x57,0x6a,0x3c,0xa1,0x54,0x64,0x79,0xbf,0xb5,0x54,0x4d,0x7a,0xbd,0x23,0x5f, + 0x61,0x3b,0x5c,0x4d,0x7c,0xaa,0x44,0x4a,0xa7,0xb1,0x6a,0x4e,0xa1,0x58,0xb6,0x7b, + 0x3d,0xb5,0x78,0x4d,0x23,0xaa,0x45,0xbc,0xa8,0x57,0x6a,0x5c,0xa1,0x5c,0x64,0x7b, + 0xbf,0xb5,0xae,0x4d,0x2c,0xaa,0x48,0x6a,0xa8,0xb9,0x6a,0x76,0xa1,0x62,0xb6,0x7d, + 0x7d,0xb6,0x48,0x4d,0xa9,0xaa,0x4a,0xbc,0xa9,0x27,0x6a,0x2a,0xb8,0x55,0x40,0xb0, + 0xaf,0xb6,0x70,0x4d,0xb3,0xaa,0x4d,0x6a,0xaa,0x47,0x6a,0xaa,0xa1,0x6c,0x64,0xa1, + 0xbf,0xb6,0xaa,0x4d,0xbd,0xaa,0x4f,0xbc,0xaa,0xb1,0x6a,0xc0,0xa1,0x70,0xb6,0x21, + 0x3d,0xb7,0x38,0x4e,0x33,0xaa,0x51,0xbc,0xab,0x67,0x6b,0x42,0xa1,0x76,0x64,0x22, + 0x6d,0xb7,0x64,0x4e,0x3e,0xaa,0x54,0x2a,0xab,0xc1,0x6b,0x56,0xa1,0x7a,0xb6,0x23, + 0x2d,0xb7,0x2c,0x4e,0x48,0xaa,0x57,0x6f,0x2f,0xab,0x58,0xc1,0x32,0x7e,0x64,0x24, + 0x6d,0xb7,0xb6,0x4e,0x4e,0xaa,0x58,0x2a,0xac,0xc1,0x6b,0x76,0xa1,0x24,0x64,0x25, + 0xbf,0xb8,0x54,0x4e,0x5a,0xaa,0x5b,0x2a,0xad,0x2f,0x6b,0x2e,0xa1,0x28,0xb6,0x27, + 0x3d,0xb8,0x78,0x4e,0x63,0xaa,0x5d,0xbc,0xae,0x57,0x6b,0xae,0xa1,0x2c,0x64,0x27, + 0xbf,0xb8,0xa6,0x4e,0x6a,0xaa,0x5f,0x2f,0x25,0x7c,0x7d,0x34,0x6c,0xaa,0x60,0x4a, + 0xae,0xb1,0x6b,0xc0,0xa1,0x30,0xb6,0x29,0x3d,0xb9,0x3c,0x4e,0x74,0xaa,0x62,0x4a, + 0xaf,0x5f,0x6c,0x3e,0xa1,0xa6,0xb6,0x2a,0x3d,0xb9,0x58,0x4e,0x7b,0xaa,0x63,0xbc, + 0xaf,0xa9,0x6c,0x4c,0xa1,0xaa,0x64,0x2a,0xbf,0xb9,0x74,0x4e,0x22,0xaa,0x65,0x2a, + 0xb0,0x4f,0x6c,0x5a,0xa1,0xad,0xc0,0x5a,0x34,0xc1,0x2c,0x4e,0x28,0xaa,0x67,0x4a, + 0xb0,0xa1,0x6c,0x66,0xa1,0xb0,0xb6,0x2c,0x7d,0xb9,0xba,0x4e,0x2f,0xaa,0x68,0xbc, + 0xb1,0x37,0x6c,0x74,0xa1,0xb4,0x64,0x2d,0x6d,0xba,0x4c,0x4e,0xaa,0xaa,0x6b,0x6a, + 0xb1,0x27,0x6c,0x2c,0xa1,0xba,0x64,0x2e,0xbf,0xba,0x74,0x4e,0xb4,0xaa,0x6d,0x2a, + 0xb2,0x4f,0x6c,0xb0,0xa1,0xc0,0x64,0x30,0x6d,0xba,0xb6,0x4e,0xc0,0xaa,0x70,0x2a, + 0xb2,0xc1,0x69,0x32,0x5d,0x31,0xae,0x31,0x7b,0xa3,0x4f,0x29,0x39,0x27,0x33,0x66, + 0x71,0x26,0x61,0x52,0x5d,0x39,0xae,0x33,0x5b,0xa3,0xa1,0x29,0x45,0x27,0x36,0x66, + 0x72,0x66,0x61,0x60,0x5d,0x3d,0xae,0x34,0x5b,0xa3,0xb1,0x29,0x4d,0x27,0x38,0x66, + 0x73,0x36,0x61,0x7a,0x5d,0x47,0x5c,0x36,0x2b,0xa4,0x6f,0x29,0x61,0x27,0x3d,0x66, + 0x74,0x76,0x61,0xb6,0x5d,0x4f,0x5c,0x39,0x3b,0xa5,0x5f,0x29,0x7e,0x27,0x46,0x46, + 0x76,0x76,0x62,0x6a,0x5d,0x69,0x5c,0x3f,0x4b,0xa6,0x23,0x29,0xba,0x27,0x4f,0x46, + 0x78,0x26,0x63,0x32,0x5d,0x71,0xae,0x41,0x6b,0xa7,0x43,0x2a,0x36,0x27,0x52,0x26, + 0x79,0x7e,0x63,0x46,0x5d,0x76,0xae,0x42,0x7b,0xa7,0x73,0x2a,0x45,0x27,0x58,0x46, + 0x7a,0xb0,0x63,0x70,0x5d,0x21,0x5c,0x45,0x4b,0xa8,0x53,0x2a,0x5a,0x27,0x5b,0x26, + 0x7b,0xa8,0x63,0x30,0x5d,0x29,0x5c,0x48,0x3b,0xa8,0xa9,0x2a,0x6c,0x27,0x60,0x46, + 0x7c,0xb0,0x64,0x34,0x5d,0xa5,0x5c,0x4a,0x3b,0xa9,0x63,0x2a,0x26,0x27,0x66,0xb8, + 0xa1,0x36,0x64,0x74,0x5d,0xb5,0x5c,0x4d,0xbd,0xaa,0x53,0x2a,0xad,0x27,0x6c,0x46, + 0xa1,0xc0,0x64,0xa4,0x5d,0xbb,0xae,0x4f,0x6b,0xaa,0x28,0xae,0x5d,0xbe,0x5c,0x50, + 0x7b,0xaa,0xb9,0x29,0x31,0x27,0x72,0x46,0x21,0x68,0x25,0x4b,0x35,0xc2,0x27,0xa3, + 0x5d,0xbb,0x40,0x4f,0x36,0xaa,0x72,0x2a,0xb3,0x6f,0x6d,0x44,0xa2,0x36,0x64,0xa4, + 0x6d,0xbb,0x64,0x4f,0x3e,0xaa,0x74,0x2a,0xb3,0xc1,0x6d,0x56,0xa2,0x3b,0x64,0xa5, + 0xaf,0xbb,0x30,0x4f,0x49,0xaa,0x77,0x6a,0xb4,0x27,0x6d,0x68,0xa2,0x3f,0xb6,0xa6, + 0xaf,0xbb,0xc2,0x4f,0x52,0xaa,0x79,0x2a,0xb5,0x4f,0x70,0xad,0x71,0x50,0x7a,0x6a, + 0xb5,0x67,0x6d,0xa2,0xa2,0x45,0x64,0xa8,0x4d,0xbc,0x5c,0x4f,0x5c,0xaa,0x7c,0x2a, + 0xb6,0x47,0x6d,0xaa,0xa2,0x4b,0x64,0xa9,0x2d,0xbc,0x2c,0x4f,0x68,0xaa,0xa1,0x6a, + 0xb6,0x27,0x6d,0xba,0xa2,0x4f,0x64,0xaa,0x2d,0xbc,0xbe,0x4f,0x70,0xaa,0x21,0x4a, + 0xb7,0x3f,0x6e,0x36,0xa2,0x52,0xb6,0xab,0xa2,0x5b,0x51,0xc1,0x76,0xaa,0x22,0x2a, + 0xb7,0x6f,0x6e,0x42,0xa2,0x55,0xb6,0xac,0x5d,0xbd,0x60,0x4f,0x7d,0xaa,0x24,0x6a, + 0xb7,0xb9,0x6e,0x50,0xa2,0x59,0x64,0xad,0x4d,0xbd,0x7c,0x4f,0x24,0xaa,0x26,0x2a, + 0xb8,0x6f,0x6e,0x64,0xa2,0x5e,0x64,0xae,0x6d,0xbd,0xba,0x4f,0x2f,0xaa,0x28,0xbc, + 0xb9,0x37,0x6e,0x74,0xa2,0x62,0x64,0xaf,0x6d,0xbe,0x4c,0x4f,0xab,0xaa,0x2b,0x2a, + 0xb9,0x2f,0x6e,0x2a,0xa2,0x37,0x5c,0x52,0x2b,0xab,0x6f,0x2b,0x42,0x27,0x77,0x46, + 0x22,0xa8,0x65,0x72,0x5e,0x45,0xae,0x56,0x7b,0xac,0x67,0x2b,0x65,0x27,0x7e,0x66, + 0x24,0x76,0x65,0xbc,0x5e,0x53,0x5c,0x59,0x2b,0xad,0x4f,0x2b,0x7a,0x27,0x25,0x46, + 0x26,0x56,0x66,0x62,0x5e,0x61,0xae,0x5d,0x6b,0xae,0x63,0x2b,0xb0,0x27,0x2d,0x46, + 0x28,0x4e,0x66,0xac,0x5e,0x6b,0xae,0x5f,0xad,0xae,0xb1,0x2b,0xbf,0x27,0x30,0x66, + 0x28,0xc0,0x67,0x34,0x5e,0x72,0x5c,0x62,0x3b,0xaf,0x57,0x2c,0x3d,0x27,0xa7,0x46, + 0x2a,0xa8,0x67,0x6c,0x5e,0x23,0x5c,0x67,0xbd,0xb1,0x33,0x2c,0x72,0x27,0xb4,0x46, + 0x2d,0x76,0x68,0x52,0x5e,0xab,0xae,0x6b,0x6b,0xb1,0xb5,0x2c,0xa3,0x27,0xbc,0x46, + 0x30,0x76,0x68,0xb6,0x5e,0xc1,0x5c,0x70,0xbd,0xab,0x33,0x2d,0x32,0x28,0x33,0x46, + 0xa3,0x7e,0x69,0x48,0x5f,0x37,0xae,0x73,0x7b,0xb4,0x73,0x2d,0x62,0x28,0x3e,0x46, + 0xa6,0x6e,0x69,0xb4,0x5f,0x4e,0x5c,0x79,0x3b,0xb5,0x37,0x2d,0x74,0x28,0x42,0x66, + 0xa7,0x66,0x6a,0x46,0x5f,0x57,0x5c,0x7a,0x2b,0xb5,0x6b,0x2d,0x21,0x28,0x46,0x46, + 0xa8,0x66,0x6a,0x6a,0x5f,0x5f,0xae,0x7c,0xbd,0xb6,0x33,0x2d,0xa4,0x28,0x4a,0x66, + 0xa9,0x76,0x6a,0x24,0x5f,0x67,0x5c,0xa1,0x3b,0xb6,0xa6,0xad,0x3e,0x33,0x3c,0x74, + 0xa9,0xb1,0x6e,0x2e,0xa2,0x68,0xb6,0xb1,0x5d,0xbe,0xa2,0x4f,0xb8,0xaa,0x2e,0x2a, + 0xba,0x6f,0x6e,0xb6,0xa2,0x6e,0x64,0xb2,0x6d,0xbe,0xb6,0x4f,0xc0,0xaa,0x30,0x2a, + 0xba,0xc1,0x6f,0x34,0xa2,0x72,0x64,0xb3,0x6d,0xbf,0x44,0x50,0x37,0xaa,0xa4,0xbc, + 0xbb,0x77,0x6f,0x44,0xa2,0x76,0x64,0xb4,0x6d,0xbf,0x68,0xad,0x7a,0x30,0x71,0x62, + 0xaf,0xbf,0x70,0x50,0x41,0xaa,0xa7,0x6a,0xbc,0x47,0x6f,0x58,0xa2,0x7b,0x64,0xb5, + 0x2d,0xbf,0x2c,0x50,0x48,0xaa,0xa9,0x4a,0xbc,0xa1,0x6f,0x66,0xa2,0x7e,0xb6,0xb6, + 0x7d,0xbf,0xba,0x50,0x4f,0xaa,0xaa,0xbc,0xbd,0x37,0x6f,0x76,0xa2,0x22,0xb6,0xb7, + 0x7d,0xc0,0x48,0x50,0x57,0xaa,0xac,0xbc,0xbd,0xa2,0x26,0x41,0x70,0x26,0x64,0xb8, + 0x6d,0xc0,0x64,0x50,0x5e,0xaa,0xae,0x2a,0xbd,0xc1,0x6f,0xa6,0xa2,0x2a,0x64,0xb9, + 0x6d,0xc0,0x24,0x50,0x66,0xaa,0xb0,0x2a,0xbe,0x6f,0x6f,0xb4,0xa2,0x2d,0xb6,0xba, + 0x5d,0xc0,0xb2,0x50,0x6d,0xaa,0xb2,0x6a,0xbe,0xb9,0x6f,0xc2,0xa2,0xa3,0x64,0xbb, + 0x4d,0xc1,0x3c,0x50,0x74,0xaa,0xb4,0x6a,0xbf,0x67,0x70,0x40,0xa2,0xa7,0x64,0xbc, + 0x4d,0xc1,0x5c,0x50,0x7c,0xaa,0x2f,0x66,0xaa,0x2e,0x6a,0xbc,0x5f,0x6f,0xae,0x21, + 0x7b,0xb7,0x47,0x2e,0x3d,0x28,0x60,0x46,0xae,0xb0,0x6b,0xc0,0x5f,0xa3,0x5c,0x29, + 0x7b,0xb9,0x63,0x2e,0x7e,0x28,0x64,0xb8,0xb0,0x36,0x6c,0x54,0x5f,0xaf,0x5c,0x2c, + 0x4b,0xb9,0xb5,0x2e,0xab,0x28,0x6b,0xb8,0xb1,0xb0,0x6c,0xac,0x5f,0xbf,0x5c,0x30, + 0x7b,0xb3,0x4f,0x2f,0x39,0x28,0x74,0x66,0xb4,0x36,0x6d,0x2a,0x60,0x47,0xae,0xa9, + 0x3b,0xbc,0x7b,0x2f,0x65,0x28,0xa2,0x46,0xb6,0xb0,0x6d,0xc2,0x60,0x51,0xae,0xab, + 0x5b,0xbd,0x3f,0x2f,0x79,0x28,0x23,0x66,0xb8,0x36,0x6e,0x6a,0x60,0x5f,0xae,0xaf, + 0x7b,0xbe,0x47,0x2f,0xbc,0x28,0xa3,0x46,0xbb,0x56,0x6f,0x42,0x60,0x79,0x5c,0xb5, + 0x4b,0xbf,0x27,0x30,0x4d,0x28,0xb1,0x46,0xbe,0x7e,0x6f,0xbc,0x60,0xa3,0x5c,0xbb, + 0xbd,0xc1,0x53,0x30,0x7a,0x28,0xb5,0xb8,0xbf,0xb0,0x70,0x4e,0x60,0xad,0x5c,0xbe, + 0x7b,0xc2,0x53,0x30,0xac,0x28,0xbf,0x46,0xc2,0x3e,0x70,0xac,0x60,0xbf,0x5c,0xa3, + 0x3c,0x31,0x37,0xa3,0x35,0x29,0x34,0x47,0x32,0x36,0x71,0x5a,0x61,0x3f,0x5d,0x34, + 0x2c,0x32,0x53,0xa3,0x75,0x29,0x42,0x67,0x35,0x76,0x72,0x46,0x61,0x57,0x5d,0x3a, + 0xae,0x33,0xa1,0xa3,0x25,0x29,0x46,0x67,0x36,0x6e,0x72,0x64,0xb8,0x37,0x72,0x50, + 0xb8,0xa1,0x64,0x50,0x7e,0xaa,0xb6,0x2a,0xbf,0xc1,0x70,0x52,0xa2,0xab,0xb6,0xbd, + 0x5d,0xc1,0xa2,0x50,0x25,0xaa,0xb8,0x6a,0xc0,0x67,0x70,0x60,0xa2,0xaf,0x64,0xbe, + 0x4d,0xc1,0xae,0x50,0x2c,0xaa,0xba,0x4a,0xc0,0xb1,0x70,0x6e,0xa2,0xb2,0xb6,0xbf, + 0x5d,0xc2,0x40,0x50,0xa8,0xaa,0xbc,0x2a,0xc1,0x6f,0x70,0x24,0xb8,0x55,0xb2,0xa3, + 0x4f,0x27,0x70,0x28,0xa2,0xb9,0x64,0xc0,0x2d,0xc2,0x6c,0x50,0xb2,0xaa,0xbf,0x2a, + 0xc2,0x57,0x70,0xb0,0xa2,0xbe,0xb6,0xc2,0x3d,0xc2,0xaa,0x50,0xbd,0xaa,0xc1,0xbc, + 0xc2,0xb1,0x70,0xc0,0xa2,0xc2,0xb6,0xa3,0x4e,0x31,0x3c,0x51,0x34,0xab,0x32,0x6b, + 0x31,0x67,0x71,0x40,0x21,0x35,0x65,0x32,0x4e,0x31,0x5c,0x52,0xb8,0x51,0x40,0xa4, + 0x6e,0x31,0x64,0x51,0x3e,0xab,0x34,0x2b,0x31,0xc1,0x71,0x52,0x21,0x3a,0x65,0x33, + 0x6e,0x31,0x24,0x51,0x46,0xab,0x36,0x2b,0x32,0x6f,0x71,0x64,0x21,0x3e,0x65,0x34, + 0x6e,0x31,0xb6,0x51,0x4e,0xab,0x38,0x2b,0x32,0xc1,0x71,0x72,0x21,0x41,0xb7,0x35, + 0x5e,0x32,0x40,0x51,0x55,0xab,0x3a,0x6b,0x33,0x67,0x71,0xa2,0x21,0x45,0x65,0x36, + 0x4e,0x32,0x5c,0x51,0x5c,0xab,0x3c,0x4b,0x36,0xb0,0x72,0xbc,0x61,0x6f,0xaf,0x41, + 0x3c,0x35,0x43,0xa4,0x3d,0x29,0x54,0x67,0x39,0xc0,0x73,0x54,0x61,0x7d,0x5d,0x44, + 0x4c,0x35,0xad,0xa4,0x4d,0x29,0x58,0xb9,0x3b,0x36,0x73,0x74,0x61,0x22,0x5d,0x46, + 0x3c,0x36,0x57,0xa4,0x5c,0x29,0x5c,0x47,0x3b,0xb0,0x73,0x2e,0x61,0x28,0xaf,0x47, + 0x4c,0x36,0xa1,0xa4,0x65,0x29,0x5e,0x67,0x3c,0x76,0x73,0xbc,0x61,0xa5,0x5d,0x49, + 0x2c,0x37,0x4f,0xa4,0x79,0x29,0x63,0x67,0x3e,0x36,0x74,0x54,0x61,0xad,0x5d,0x4c, + 0x3c,0x38,0x33,0xa4,0xa8,0x29,0x33,0x47,0x41,0x7e,0x75,0x48,0x62,0x37,0x5d,0x53, + 0x3c,0x39,0x7b,0xa5,0x44,0x29,0x77,0x47,0x42,0x7e,0x75,0x68,0x62,0x3f,0x5d,0x54, + 0x2c,0x3a,0x3f,0xa5,0x55,0x29,0x7a,0x67,0x43,0x76,0x75,0x2a,0x62,0x4b,0x5d,0x57, + 0x2c,0x3a,0x2f,0xa5,0x69,0x29,0xa1,0x67,0x45,0x36,0x76,0x34,0x62,0x53,0x5d,0x5a, + 0x3c,0x3b,0x73,0xa5,0x22,0x29,0x26,0x47,0x46,0x5e,0x76,0x62,0x62,0x5f,0x5d,0x5d, + 0x3c,0x3c,0xa5,0xa5,0xbc,0x29,0x30,0x47,0x49,0x36,0x77,0x36,0x62,0x75,0x5d,0x62, + 0x4c,0x3d,0x5f,0xa6,0x3e,0x29,0xa7,0x27,0x4a,0x4e,0x77,0x5a,0x62,0x7d,0x5d,0x64, + 0x7c,0x3e,0x53,0xa6,0x7d,0x29,0xb7,0x47,0x4e,0x56,0x78,0x6a,0x62,0xb1,0xc0,0x52, + 0x21,0x58,0xc0,0x63,0x5f,0xab,0x3c,0xbd,0x34,0x37,0x71,0xa6,0x21,0x4a,0x65,0x37, + 0x6e,0x32,0x2c,0x51,0x68,0xab,0x3f,0x6b,0x34,0x27,0x71,0xba,0x21,0x4f,0xb7,0x38, + 0xb0,0x32,0xc2,0x51,0x71,0xab,0x41,0x6b,0x35,0x47,0x72,0x38,0x21,0x54,0x65,0x3a, + 0x3e,0x33,0x5c,0x51,0x7c,0xab,0x44,0x4b,0x35,0xb1,0x72,0x4e,0x21,0x58,0xc0,0x5a, + 0x4c,0xbb,0x36,0x54,0x21,0x5a,0x65,0x3b,0x6e,0x33,0x28,0x51,0x27,0xab,0x46,0xbd, + 0x36,0xa1,0x72,0x66,0x21,0x5e,0xb7,0x3c,0x7e,0x33,0xba,0x51,0x2f,0xab,0x48,0xbd, + 0x37,0x3f,0x72,0x76,0x21,0x62,0xb7,0x3d,0x7e,0x34,0x48,0x51,0xa9,0xab,0x4a,0xbd, + 0x37,0x77,0x72,0x24,0x21,0x66,0x65,0x3e,0x6e,0x34,0x6c,0x51,0xb2,0xbd,0x23,0x38, + 0xba,0x3f,0x72,0xa8,0x21,0x6a,0xb7,0x3f,0x2e,0x34,0x2c,0x51,0xba,0xab,0x4f,0x4b, + 0x38,0xa1,0x72,0xb8,0x21,0x6e,0xb7,0x40,0xb0,0x34,0xc2,0x52,0x31,0xab,0x51,0x2b, + 0x39,0x4f,0x73,0x3a,0x21,0x73,0xb7,0x41,0xb0,0x35,0x50,0x52,0x39,0xab,0x53,0x6b, + 0x39,0x27,0x73,0x48,0x21,0x77,0x65,0x42,0x2e,0x35,0x6c,0x52,0x40,0xab,0x55,0x4b, + 0x3a,0x3f,0x73,0x56,0x21,0x7a,0xb7,0x43,0x7e,0x37,0xc1,0xa6,0xab,0x29,0xbd,0x67, + 0x4f,0xa8,0x78,0xa4,0x62,0xbf,0xaf,0x70,0x6c,0x40,0xb9,0xa5,0x35,0x2a,0x32,0x67, + 0x51,0x76,0x79,0x48,0x63,0x37,0x5d,0x73,0x7c,0x41,0x27,0xa7,0x48,0x2a,0x37,0x67, + 0x53,0x36,0x79,0xac,0x63,0x4f,0x5d,0x7c,0x3c,0x43,0xb5,0xa7,0xa3,0x2a,0x4b,0x47, + 0x57,0x7e,0x7a,0xac,0x63,0x6b,0xaf,0xa2,0x7c,0x45,0x43,0xa8,0x36,0x2a,0x53,0x67, + 0x5a,0x36,0x7b,0x54,0x63,0x7b,0x5d,0x24,0x3c,0x45,0xa9,0xa8,0x4b,0x2a,0x59,0x47, + 0x5b,0x3e,0x7b,0x78,0x63,0x23,0xaf,0x25,0xae,0x46,0x5b,0xa8,0x5d,0x2a,0x5d,0x47, + 0x5c,0x56,0x7c,0x42,0x63,0xa7,0xaf,0x2a,0x7c,0x47,0x73,0xa8,0x23,0x2a,0x67,0x47, + 0x5e,0x7e,0x7c,0x68,0x63,0xb1,0xaf,0x2d,0x5c,0x48,0x43,0xa8,0xa8,0x2a,0x6a,0x27, + 0x5f,0x76,0x7c,0x28,0x63,0xb9,0x5d,0x2e,0x2c,0x48,0x6b,0xa8,0xb2,0x2a,0x6d,0xb9, + 0x60,0x56,0x7c,0xae,0xb8,0x2a,0x6e,0xb9,0x60,0x76,0x7c,0xb6,0x63,0xc0,0x5d,0x30, + 0x6c,0x48,0xc1,0xa7,0x31,0x2a,0x71,0x67,0x61,0x56,0x7d,0x42,0x64,0x39,0x5d,0xa5, + 0x4c,0x49,0xa1,0xa9,0x45,0x2a,0x76,0x67,0x62,0xa8,0x7e,0x5a,0x64,0x5b,0xaf,0xad, + 0xae,0x4b,0xa5,0xa9,0x2c,0x2a,0x28,0x47,0x66,0xb8,0x7e,0x70,0x64,0x63,0x5d,0xaf, + 0x30,0x59,0x65,0x3a,0xc2,0x5c,0xa8,0x6b,0x3a,0x67,0x73,0x60,0x21,0x7d,0x65,0x44, + 0x4e,0x35,0xae,0x52,0x4c,0xab,0x58,0x4b,0x3a,0xb1,0x73,0x6e,0x21,0xa2,0xb7,0x45, + 0x3e,0x36,0x38,0x52,0x53,0xab,0x59,0xbd,0x3b,0x67,0x73,0xa2,0x21,0x25,0xb7,0x46, + 0x5e,0x36,0x60,0x52,0x5e,0xab,0x5c,0x2b,0x3b,0xc1,0x73,0xa4,0x21,0x29,0xb7,0x47, + 0x60,0x5b,0x57,0xc1,0x32,0x2a,0xb7,0x47,0xb0,0x36,0xa6,0x52,0x6b,0xab,0x5f,0xbd, + 0x3c,0xa9,0x73,0xbe,0x21,0x30,0x65,0x48,0xc0,0x37,0x3c,0x52,0x74,0xab,0x62,0x6b, + 0x3d,0x67,0x74,0x40,0x21,0xa8,0x65,0x4a,0x6e,0x37,0x64,0x52,0x7e,0xab,0x64,0x2b, + 0x3d,0xc1,0x74,0x56,0x21,0xae,0x65,0x4b,0xc0,0x37,0xa6,0x52,0x2a,0xab,0x67,0x2f, + 0x25,0x72,0xc2,0x68,0x21,0xb2,0x65,0x4c,0xc0,0x38,0x38,0x52,0xa5,0xab,0x69,0xbd, + 0x3f,0x5f,0x74,0x7e,0x21,0xb6,0xb7,0x4e,0x3e,0x38,0x58,0x52,0xad,0xab,0x6b,0xbd, + 0x3f,0xb9,0x74,0xa8,0x21,0xbc,0xb7,0x4f,0x7e,0x38,0x28,0xae,0x21,0xbe,0x65,0x4f, + 0xc0,0x38,0xaa,0x52,0xbd,0xab,0x6f,0xbd,0x40,0xa9,0x74,0xbe,0x21,0xc2,0x65,0x50, + 0xc0,0x31,0x34,0x53,0x32,0xab,0x71,0x2b,0x41,0x4f,0x75,0x3a,0x22,0x64,0xaf,0xb0, + 0x4c,0x4c,0x5f,0xa9,0xb1,0x2a,0x2d,0x47,0x68,0x3e,0x7e,0xac,0x64,0x6d,0x5d,0xb3, + 0x3c,0x4d,0x37,0xaa,0x34,0x2a,0xa4,0x47,0x69,0x5e,0xa1,0x4a,0x64,0x79,0x5d,0xb5, + 0x7c,0x4e,0x33,0xaa,0x52,0x2a,0xad,0x47,0x6b,0xa8,0xa2,0x3a,0x64,0xa5,0xaf,0xbc, + 0x3c,0x4f,0x5f,0xaa,0x7d,0x2a,0xb6,0x27,0x6e,0x36,0xa2,0x5a,0x64,0xad,0xaf,0xbd, + 0xbe,0x4f,0xa9,0xaa,0x2c,0x2a,0xba,0x67,0x6f,0x36,0xa2,0x7a,0x64,0xb7,0x5d,0xc2, + 0x7c,0x49,0x73,0xab,0x49,0x2b,0x38,0x47,0x73,0x36,0x21,0x22,0x65,0x45,0xb0,0x36, + 0x6c,0x52,0x23,0xab,0x21,0x2b,0x45,0x67,0x76,0x56,0x22,0x62,0x65,0x61,0x5e,0x3d, + 0x4c,0x54,0x3f,0xab,0xa8,0x2b,0x4c,0x47,0x79,0x36,0x23,0x42,0x65,0xa1,0xb0,0x45, + 0x7c,0x56,0x53,0xac,0x5d,0x2b,0x5e,0x67,0x7c,0x6e,0x23,0xb6,0x65,0xa3,0x5e,0x49, + 0x7c,0x57,0x53,0xac,0x21,0x2b,0x66,0x67,0x7e,0xa8,0x24,0x6c,0x65,0xb3,0x5e,0x4d, + 0x6c,0x58,0x43,0xac,0xa9,0x2b,0x6c,0x47,0xa1,0xb0,0x24,0x30,0x65,0xbb,0xb0,0x50, + 0x3c,0x51,0x23,0xad,0x46,0x2b,0x77,0x47,0x22,0x2e,0x25,0x6a,0x66,0x43,0x5e,0x55, + 0x2c,0x5a,0x4f,0xad,0x59,0x2b,0x7b,0x67,0x23,0x26,0x25,0xa4,0x66,0x49,0xb0,0x57, + 0x7c,0x5a,0xa6,0xad,0x3e,0x33,0x70,0xad,0x61,0x5f,0x75,0x3e,0x22,0x34,0xb7,0x52, + 0x3e,0x39,0x58,0x53,0x3b,0xab,0x73,0xbd,0x41,0xa9,0x75,0x4e,0x22,0x38,0xb7,0x53, + 0x3e,0x39,0x78,0x53,0x43,0xab,0x75,0xbd,0x42,0x57,0x75,0x5c,0x22,0x3c,0x65,0x53, + 0xc0,0x39,0xa6,0x53,0x4a,0xab,0x77,0x2b,0x42,0x2f,0x75,0x6a,0x22,0x3f,0xb7,0x54, + 0xb0,0x39,0xc2,0x54,0xb8,0x51,0x40,0xa7,0x3e,0x3a,0x38,0x53,0x53,0xab,0x79,0xbd, + 0x43,0x57,0x75,0x7c,0x22,0x44,0x65,0x55,0xc0,0x3a,0x54,0x53,0x5a,0xab,0x7b,0x2b, + 0x43,0x2f,0x75,0x2a,0x22,0x47,0xb7,0x56,0xb0,0x3a,0x70,0x53,0x63,0xab,0x7d,0xbd, + 0x44,0x5f,0x75,0xb0,0x22,0x4c,0xb7,0x58,0x4e,0x3a,0xb2,0x53,0x6d,0xab,0xa2,0x6b, + 0x44,0xba,0x26,0x41,0x70,0x50,0xb7,0x59,0x5e,0x3b,0x4c,0x53,0x78,0xab,0x23,0x4b, + 0x45,0xa1,0x76,0x46,0x22,0x56,0xb7,0x5a,0xb0,0x3b,0x70,0x53,0x22,0xab,0x25,0x2b, + 0x46,0x4f,0x76,0x5c,0x22,0x5c,0x65,0x5b,0xc0,0x3b,0xa6,0x53,0x2a,0xab,0x27,0x2b, + 0x46,0x2f,0x76,0x6e,0x22,0x61,0x65,0x5d,0x5e,0x3c,0x40,0x53,0xa7,0xab,0x2a,0x6b, + 0x47,0x67,0x76,0xa2,0x22,0x65,0xb7,0x5e,0x5e,0x3c,0x60,0x53,0xb0,0xab,0x21,0x47, + 0x25,0x3e,0x26,0x38,0x66,0x53,0x5e,0x59,0x2c,0x5b,0x5f,0xad,0x7d,0x2b,0x24,0x67, + 0x26,0x36,0x26,0x5a,0x66,0x5f,0x5e,0x5c,0x2c,0x5b,0xc1,0xad,0xa3,0x2b,0x29,0x67, + 0x2b,0x36,0x27,0x74,0x66,0x23,0x5e,0x66,0x3c,0x5e,0x5b,0xae,0x5c,0x2b,0xaf,0x47, + 0x2c,0x3e,0x27,0xaa,0x66,0x2b,0x5e,0x67,0x2c,0x5e,0xb1,0xae,0x6d,0x2b,0xb2,0x67, + 0x2d,0x36,0x28,0x3a,0x66,0xa9,0x5e,0x6a,0x2c,0x5f,0x6f,0xae,0x21,0x2b,0xb7,0x67, + 0x2e,0x76,0x28,0x2a,0x66,0x39,0x5e,0x73,0x4c,0x61,0x23,0xaf,0x49,0x2c,0x3a,0x67, + 0xa5,0xa8,0x29,0xac,0x67,0x55,0x5e,0x7d,0x7c,0x64,0x53,0xb0,0x4d,0x2c,0x58,0x67, + 0xad,0x36,0x2b,0x7a,0x67,0x26,0xb0,0x26,0x7c,0x66,0x77,0xb0,0x25,0x2c,0x6d,0x47, + 0xb2,0x56,0x2c,0xb4,0x67,0x31,0x5e,0xa3,0x4c,0x69,0x47,0xb1,0x59,0x2c,0x7b,0x67, + 0xb5,0xa8,0x2d,0x30,0x68,0x49,0x5e,0xaa,0x3c,0x6a,0xa9,0xb1,0x6c,0x2c,0x22,0x47, + 0xb7,0x76,0x2e,0x4a,0x68,0x5b,0x5e,0xad,0x2c,0x6c,0x33,0xb1,0xa7,0x2c,0x2b,0x47, + 0xba,0x36,0x2e,0xa6,0x68,0x6a,0xb0,0xb1,0x2c,0x6c,0xb5,0xb1,0xc0,0x2c,0xa3,0x47, + 0xbb,0x56,0x2f,0x4a,0x68,0x77,0xb0,0xb4,0xbe,0x6d,0x73,0xb2,0x42,0x2c,0xa7,0x27, + 0xbc,0x66,0x2f,0x60,0xb8,0x37,0x72,0x50,0xb8,0x3c,0x6c,0x53,0xb2,0xab,0x2d,0x4b, + 0x48,0x3f,0x76,0xa8,0x22,0x6a,0xb7,0x5f,0x7e,0x3c,0x28,0x53,0xb9,0xab,0x2e,0xbd, + 0x48,0x77,0x76,0xb6,0x22,0x6e,0x65,0x60,0x6e,0x3c,0xba,0x53,0xc1,0xab,0x30,0xbd, + 0x49,0x37,0x77,0x34,0x22,0x72,0x65,0x61,0x6e,0x3d,0x48,0x54,0x37,0xab,0xa4,0xbd, + 0x49,0xa1,0x77,0x46,0xb8,0x55,0xb2,0xa3,0x49,0x2f,0x77,0x4a,0x22,0x77,0xb7,0x62, + 0xb0,0x3d,0x70,0x54,0x41,0xab,0xa7,0x6b,0x4a,0x47,0x77,0x58,0x22,0x7b,0x65,0x63, + 0x2e,0x3d,0x2c,0x54,0x48,0xab,0xa9,0x4b,0x4a,0xa1,0x77,0x66,0x22,0x7e,0xb7,0x64, + 0x7e,0x3d,0xba,0x54,0x4f,0xab,0xaa,0xbd,0x4b,0x47,0x77,0x78,0x22,0x23,0xb7,0x65, + 0xb0,0x3e,0x50,0xad,0x79,0x50,0xad,0x6b,0x4b,0x27,0x77,0x28,0x22,0x27,0x65,0x66, + 0x2e,0x3e,0x6c,0x54,0x60,0xab,0xaf,0x2b,0x4c,0x57,0x77,0xb0,0x22,0x2c,0xb7,0x68, + 0x3e,0x3e,0xaa,0x54,0x6c,0xab,0xb2,0x6b,0x4c,0xb9,0x77,0xc2,0x22,0xa3,0xb7,0x69, + 0x5e,0x3f,0x40,0x54,0x75,0xab,0xb4,0x6b,0x4d,0x67,0x78,0x40,0x22,0xa7,0x65,0x6a, + 0x4e,0x3f,0x5c,0x54,0x7c,0xab,0xb6,0x4b,0x4d,0xb1,0x78,0x4e,0x22,0xaa,0xb7,0x64, + 0x3c,0x6d,0xa9,0xb2,0x4d,0x2c,0xab,0x47,0xbd,0x76,0x2f,0x24,0x68,0x26,0xb0,0xb8, + 0x7c,0x6e,0x67,0xb2,0x65,0x2c,0xb0,0x67,0xbe,0x76,0x30,0x40,0x68,0xa7,0xb0,0xc0, + 0x7c,0x70,0x67,0xb2,0xb3,0x2c,0xc0,0x47,0xc2,0xa8,0x30,0xbe,0x68,0xc2,0xb0,0xa3, + 0x3c,0x71,0x37,0xb3,0x38,0x2d,0x33,0x48,0x31,0x7e,0xa3,0x4a,0x69,0x39,0x5f,0x34, + 0x3c,0x71,0xa9,0xb3,0x4c,0x2d,0x38,0x68,0x33,0x56,0xa3,0x7c,0x69,0x45,0x5f,0x36, + 0x7c,0x72,0x23,0xb3,0x66,0x2d,0x3e,0xba,0x34,0x76,0xa3,0xb6,0x69,0x51,0x5f,0x39, + 0x7c,0x73,0x77,0xb3,0x24,0x2d,0x48,0x48,0x36,0xb0,0xa4,0x72,0x69,0x63,0x5f,0x3e, + 0x7c,0x74,0x67,0xb3,0xb2,0x2d,0x4d,0x68,0x38,0x76,0xa4,0xbc,0x69,0x77,0xb1,0x46, + 0x3c,0x76,0x73,0xb4,0x65,0x2d,0x5f,0x48,0x3d,0x36,0xa6,0x34,0x69,0xa4,0xb1,0x49, + 0x2c,0x77,0x63,0xb4,0x21,0x2d,0x66,0x48,0x3e,0xb0,0xa6,0x70,0x69,0xb3,0xb1,0x4e, + 0x3c,0x78,0x57,0xb4,0xaf,0x2d,0x6d,0x48,0x40,0x76,0xa6,0xb6,0x69,0xc0,0xb1,0x50, + 0x2c,0x71,0x43,0xb5,0x49,0x2d,0x79,0x48,0x44,0xa8,0xa7,0xbe,0x6a,0x51,0x5f,0x59, + 0x7c,0x7b,0x63,0xb5,0xa2,0x2d,0x25,0x68,0x46,0x76,0xa8,0x64,0x6a,0x5f,0x5f,0x5d, + 0x3c,0x7c,0x53,0xb5,0xac,0xbd,0x74,0x51,0xa2,0xbd,0x70,0x52,0x22,0xab,0xb7,0x6b, + 0x5e,0x3f,0xa2,0x54,0x25,0xab,0xb8,0x6b,0x4e,0x67,0x78,0x60,0x22,0xaf,0xb7,0x6c, + 0x5e,0x3f,0xb2,0x54,0x2d,0xab,0xba,0x6b,0x4e,0xb9,0x78,0x70,0x22,0xb3,0x65,0x6d, + 0x4e,0x40,0x3c,0x54,0xa6,0xab,0xbc,0x4b,0x4f,0x5f,0x78,0x7e,0x22,0xb6,0xb7,0x6e, + 0x3e,0x40,0x58,0x54,0xad,0xbd,0x23,0x68,0xb3,0x40,0x60,0x54,0xaf,0xab,0xbe,0x6b, + 0x4f,0xb9,0x78,0x30,0x22,0xbb,0x65,0x6f,0x4e,0x40,0x7c,0x54,0xb6,0xab,0xc0,0x6f, + 0x2e,0x40,0x2c,0x54,0xba,0xab,0xc1,0x6b,0x50,0x27,0x78,0xba,0x22,0xc1,0x65,0x70, + 0x2e,0x40,0xbe,0x54,0xc2,0xab,0x71,0x4b,0x51,0x3f,0x79,0x36,0x23,0x32,0xb7,0x71, + 0x7e,0x41,0x48,0x55,0x37,0xac,0x6e,0x59,0x34,0xbb,0x54,0x55,0x3b,0xac,0x33,0xbd, + 0x51,0xa9,0x79,0x4c,0x23,0x38,0x65,0x72,0xc0,0x41,0x78,0x55,0x43,0xac,0x35,0xbd, + 0x52,0x57,0x79,0x5c,0x23,0x3c,0x65,0x73,0xc0,0x41,0xa6,0x55,0x4a,0xac,0x37,0x2b, + 0x52,0x2f,0x79,0x6a,0x23,0x3f,0xb7,0x74,0xb0,0x41,0xc2,0x55,0x51,0xac,0x39,0x6b, + 0x53,0x47,0x79,0x78,0x23,0x43,0x65,0x75,0x2e,0x42,0x4c,0x55,0x58,0xac,0x3b,0x4b, + 0x53,0xa1,0x7a,0x28,0x6a,0x67,0xb1,0x5f,0x7c,0x7c,0x27,0xb5,0xbb,0x2d,0x30,0x48, + 0x49,0x56,0xa9,0x3c,0x6a,0x74,0xb1,0x62,0x4c,0x7d,0x5b,0xb6,0x3e,0x2d,0xa6,0x28, + 0x4b,0xa8,0xa9,0x2c,0x6a,0x29,0x5f,0x67,0x7c,0x7e,0xb5,0xb6,0x6e,0x2d,0xb2,0xba, + 0x4d,0x3e,0xaa,0x42,0x6a,0xa7,0xb1,0x6a,0x7c,0xa1,0x6b,0xb6,0xa2,0x2d,0xb7,0x48, + 0x4e,0x3e,0xaa,0x56,0x6a,0xaf,0x5f,0x6c,0x4c,0xa1,0xb1,0xb6,0x2e,0x2d,0xba,0x28, + 0x4f,0x3e,0xaa,0x78,0x6a,0xb5,0x5f,0x6d,0x2c,0xa2,0x53,0xb6,0xaf,0x2d,0xc0,0x48, + 0x50,0x60,0x27,0xb6,0xba,0x2d,0xc1,0x48,0x50,0x7e,0xaa,0xb8,0x6a,0x31,0x5f,0x71, + 0x4c,0x21,0x53,0xb7,0x46,0x2e,0x3f,0x48,0x54,0x7e,0xab,0xbc,0x6b,0x51,0x5f,0x79, + 0x5c,0x23,0x53,0xb7,0x7a,0x2e,0x43,0xba,0x55,0xb0,0xac,0x4e,0x6b,0x5a,0xb1,0x7b, + 0x7c,0x23,0x27,0xb7,0x29,0x2e,0x48,0x48,0x57,0x56,0xac,0x7c,0x6b,0x64,0xb1,0x7e, + 0x3c,0x24,0x57,0xb7,0xb3,0x2e,0x4d,0x68,0x58,0x56,0xac,0xb4,0x6b,0x72,0xb1,0x21, + 0x7c,0x25,0x47,0xb8,0x38,0x2e,0x54,0x48,0x5b,0x76,0xad,0x24,0x6b,0x26,0xb1,0x26, + 0x7c,0x26,0x73,0xb8,0x63,0x2e,0x5f,0x48,0x5c,0x7e,0xad,0xba,0x6b,0x2f,0xb1,0x29, + 0x7c,0x27,0x53,0xb8,0x29,0x2e,0x67,0x68,0x60,0xaa,0x25,0x4b,0x35,0xc2,0x24,0xa8, + 0x5e,0x42,0x60,0x55,0x5f,0xac,0x3c,0xbd,0x54,0x3f,0x79,0xa8,0x23,0x4a,0xb7,0x77, + 0x2e,0x42,0x2c,0x55,0x68,0xac,0x3f,0x4b,0x54,0xa1,0x79,0xb8,0x23,0x4e,0xb7,0x78, + 0xb0,0x43,0x34,0x55,0x73,0xac,0x41,0xbd,0x55,0x57,0x7a,0x3c,0x23,0x54,0x65,0x79, + 0xc0,0x43,0x58,0x55,0x7b,0xac,0x43,0xbd,0x55,0xaa,0x26,0x44,0x70,0x31,0x24,0x6b, + 0x55,0xb9,0x7a,0x50,0x23,0x59,0x65,0x7b,0x4e,0x43,0x7c,0x55,0x24,0xac,0x46,0x4b, + 0x56,0x5f,0x7a,0x5e,0x23,0x5c,0xb7,0x7c,0x3e,0x43,0xaa,0x55,0x2b,0xac,0x47,0xbd, + 0x56,0xb1,0x7a,0x6e,0x23,0x60,0xb7,0x7d,0x3e,0x44,0x38,0x55,0xa5,0xac,0x49,0xbd, + 0x57,0x5f,0x7a,0x7e,0x23,0x64,0xb7,0x7e,0x40,0x5b,0x51,0xc1,0xac,0xac,0x4b,0x2b, + 0x57,0x2f,0x7a,0x2a,0x23,0x67,0xb7,0x7e,0xb0,0x44,0x70,0x55,0xb3,0xac,0x4d,0x6b, + 0x58,0x47,0x7a,0xaa,0x23,0x6b,0x65,0xa1,0x2e,0x44,0x2c,0x55,0xba,0xac,0x4f,0x4b, + 0x58,0xa1,0x7a,0xb8,0x23,0x6e,0xb7,0xa2,0x7e,0x44,0xba,0x55,0xc1,0xac,0x50,0xbd, + 0x59,0x47,0x7b,0x38,0x23,0x73,0xb7,0x21,0xb0,0x45,0x50,0x56,0x3a,0xac,0x53,0x2b, + 0x59,0x2f,0x7b,0x4a,0x23,0x31,0x5f,0xa3,0x7c,0x29,0x67,0xb9,0x40,0x2e,0x75,0x68, + 0x62,0x76,0xaf,0x6a,0x6c,0x41,0x5f,0xa8,0x4c,0x2a,0x5f,0xb9,0x65,0x2e,0x7e,0x68, + 0x64,0x66,0xaf,0xb4,0x6c,0x4e,0xb1,0xaa,0x7c,0x2a,0xb9,0xb9,0x6f,0x2e,0x22,0x48, + 0x65,0x5e,0xb0,0x40,0x6c,0x55,0xb1,0xac,0x2c,0x2b,0x6f,0xb9,0x21,0x2e,0x26,0x48, + 0x66,0x76,0xb0,0x74,0x6c,0x62,0xb1,0xb0,0x7c,0x2d,0x53,0xba,0x3d,0x2e,0xa7,0x48, + 0x6b,0x56,0xb1,0x22,0x6c,0x27,0x5f,0xb9,0x7c,0x2e,0x2f,0xba,0x71,0x2e,0xb4,0x48, + 0x6d,0x76,0xb2,0x52,0x6c,0xac,0xb1,0xc2,0x3c,0x30,0xa9,0xba,0xbf,0x2e,0xc2,0xba, + 0x61,0x36,0xb3,0x36,0x6d,0x35,0x60,0x32,0x4c,0xa3,0x5f,0xbb,0x3d,0x2f,0x34,0x68, + 0x71,0xc0,0xb3,0x54,0x6d,0x3b,0x60,0x33,0x2c,0xa3,0x2b,0xbb,0x48,0x2f,0x37,0x48, + 0x72,0x2e,0xb3,0x6a,0x6d,0x3f,0xb2,0x34,0xae,0xa3,0xc1,0xbb,0x55,0x2f,0x3a,0x68, + 0x73,0x6e,0xb3,0x24,0x6d,0x47,0xb2,0x37,0x3c,0xa4,0x77,0xbb,0x65,0x2f,0x3f,0x48, + 0x75,0x36,0xb4,0x34,0x6d,0x52,0xb2,0x39,0x7c,0xa5,0x47,0xbb,0x7a,0x2f,0x44,0x48, + 0x75,0xb0,0xb4,0x52,0x6d,0x5f,0xb2,0x41,0x7c,0xa7,0x47,0xbc,0x39,0x2f,0x53,0xba, + 0x79,0xa8,0xb5,0x4e,0x6d,0x7b,0x60,0x43,0x2c,0xa7,0x30,0xad,0x3e,0x33,0x70,0xac, + 0x69,0xb1,0x7b,0x4e,0x23,0x78,0xb7,0x23,0x5e,0x45,0xa2,0x56,0x45,0xac,0x56,0x2b, + 0x5a,0x6f,0x7b,0x62,0x23,0x7d,0xb7,0x24,0x5e,0x45,0xb2,0x56,0x4e,0xac,0x58,0x2b, + 0x5a,0xc1,0x7b,0x74,0x23,0x22,0x65,0x25,0x6e,0x46,0x48,0x56,0x57,0xac,0x5a,0xbd, + 0x5b,0x77,0x7b,0x24,0x23,0x26,0x65,0x26,0x6e,0x46,0x68,0xad,0x7a,0x30,0x71,0x66, + 0xb0,0x46,0x70,0x56,0x61,0xac,0x5d,0x2b,0x5c,0x4f,0x7b,0xac,0x23,0x2b,0xb7,0x27, + 0xb0,0x46,0x30,0x56,0x6b,0xac,0x5f,0xbd,0x5c,0xb1,0x7b,0xc0,0x23,0xa3,0xb7,0x29, + 0x6e,0x47,0x44,0x56,0x76,0xac,0x62,0x2b,0x5d,0x6f,0x7c,0x46,0x23,0xa9,0x65,0x2a, + 0x2e,0x47,0x6c,0x56,0xa2,0xac,0x65,0x4b,0x5e,0x40,0x26,0x41,0x70,0xac,0x65,0x2b, + 0x6e,0x47,0x28,0x56,0x27,0xac,0x66,0xbd,0x5e,0xa1,0x7c,0x66,0x23,0xb0,0xb7,0x2c, + 0x2e,0x47,0xbe,0x56,0x30,0xac,0x69,0x4b,0x5f,0x3f,0x7c,0x76,0x23,0xb4,0xb7,0x2d, + 0xb0,0x48,0x50,0x56,0xab,0xac,0x6b,0x6b,0x5f,0x27,0x7c,0x28,0x23,0xb9,0x65,0x2e, + 0x2e,0x48,0x6c,0x56,0xb2,0xac,0x6d,0x2b,0x60,0x4f,0x7c,0xae,0xb8,0xac,0x6e,0x2b, + 0x60,0x6f,0x7c,0xb6,0x23,0xc0,0x65,0x24,0x4c,0xa7,0xad,0xbc,0x51,0x2f,0x59,0x68, + 0x7b,0x56,0xb5,0xa2,0x6d,0x25,0x60,0x47,0x3c,0xa8,0x77,0xbc,0x64,0x2f,0x5e,0x48, + 0x7c,0x5e,0xb5,0xbc,0x6d,0x2f,0xb2,0x49,0x3c,0xa9,0x43,0xbc,0x7e,0x2f,0x64,0xba, + 0x7e,0x36,0xb6,0x54,0x6d,0xad,0xb2,0x4c,0x3c,0xa9,0xb5,0xbc,0xb7,0x2f,0x6e,0x6f, + 0x2c,0xaa,0x2b,0xbc,0xbb,0x2f,0x70,0x48,0x71,0x56,0xb7,0x3c,0x6e,0x34,0xb2,0x52, + 0x4c,0xab,0x73,0xbd,0x45,0x2f,0x7a,0x48,0x23,0xa8,0xb8,0x32,0x6e,0x55,0x60,0x5a, + 0x4c,0xad,0x63,0xbd,0x21,0x2f,0x27,0x48,0x26,0x7e,0xb8,0x7a,0x6e,0x65,0x60,0x61, + 0x3c,0xaf,0x37,0xbe,0x35,0x2f,0xa4,0xba,0x29,0x76,0xb9,0x44,0x6e,0x76,0x60,0x63, + 0x3c,0xaf,0x77,0xbe,0x44,0x2f,0xa8,0x68,0x2a,0x7e,0xb9,0x66,0x6e,0xa1,0x60,0x65, + 0x7c,0xb0,0x73,0xbe,0x69,0x2f,0xb8,0x48,0x2e,0x5e,0xba,0x62,0x6e,0xb1,0x60,0x6e, + 0x4c,0xb2,0x73,0xbe,0xb7,0x2f,0xc1,0x48,0x21,0x36,0xbb,0x38,0x6f,0x33,0xb2,0x72, + 0x7c,0xb3,0x67,0xbf,0x41,0x30,0x36,0x48,0xa4,0xa8,0xbb,0x6c,0x6f,0x40,0xb2,0x79, + 0x7c,0xb5,0x47,0xbf,0x79,0x30,0x44,0x48,0xa7,0xb8,0xbc,0x5a,0x6f,0x5b,0xb2,0x7b, + 0xbe,0xb5,0xa9,0xbf,0x2b,0x30,0x47,0xba,0xa9,0x36,0xbc,0x74,0x6f,0x63,0x6e,0x52, + 0x21,0x58,0xc0,0x44,0xbe,0xac,0x70,0x4b,0x60,0xb1,0x7c,0xc0,0x23,0xc2,0xb7,0x71, + 0x5e,0x49,0x44,0x57,0x37,0xac,0x72,0xbd,0x61,0x77,0x7d,0x44,0x24,0x36,0x65,0xa4, + 0x6e,0x49,0x70,0x57,0x42,0xac,0x75,0x2b,0x62,0x4f,0x7d,0x5c,0x24,0x3c,0xb7,0xa6, + 0x3e,0x49,0xaa,0x57,0x4b,0xac,0x77,0xbd,0x62,0xb9,0x7d,0x76,0x24,0x42,0xb7,0xc1, + 0x25,0x32,0xbf,0x7a,0x24,0x44,0x65,0xa7,0xc0,0x4a,0x5c,0x57,0x5c,0xac,0x7c,0x6b, + 0x63,0xb9,0x7d,0x30,0x24,0x49,0xb7,0xa9,0x5e,0x4a,0xa2,0x57,0x65,0xac,0x7e,0x6b, + 0x64,0x67,0x7d,0xb2,0x24,0x4e,0x65,0xaa,0xb0,0x4a,0xc2,0x57,0x71,0xac,0x21,0x6b, + 0x65,0x47,0x7e,0x38,0x24,0x54,0x65,0xab,0xc0,0x4b,0x54,0x57,0x7a,0xbd,0x23,0x38, + 0xb7,0x27,0x7e,0x48,0x24,0x57,0x65,0xac,0x2e,0x4b,0x6c,0x57,0xa2,0xac,0x25,0x4b, + 0x66,0x3f,0x7e,0x56,0x24,0x5a,0xb7,0xad,0x7e,0x4b,0x28,0x57,0x27,0xac,0x26,0xbd, + 0x66,0x77,0x7e,0x64,0x24,0x5e,0x65,0xae,0x6e,0x4b,0xb6,0x57,0x2e,0xac,0x28,0x2b, + 0x66,0xc1,0x7e,0x72,0x24,0x61,0xb7,0xaf,0x5e,0x4c,0x40,0x57,0xa7,0xac,0x2a,0x6b, + 0x67,0x67,0x7e,0xa2,0x24,0x65,0x65,0xb0,0x4e,0x4c,0x53,0xbf,0xad,0x30,0x4d,0x48, + 0xaa,0x3e,0xbc,0xaa,0x6f,0x6b,0x60,0xa1,0x2c,0xb6,0xb1,0xbf,0xbf,0x30,0x50,0x68, + 0xab,0x36,0xbd,0x3a,0x6f,0x77,0x60,0x22,0x2c,0xb7,0x6f,0xc0,0x41,0x30,0x55,0x68, + 0xac,0x76,0xbd,0x64,0x6f,0x25,0x60,0x2b,0x3c,0xb9,0x77,0xc0,0x25,0x30,0x66,0xba, + 0xb0,0x76,0xbe,0x72,0x6f,0xb4,0xb2,0x2d,0x7c,0xba,0x47,0xc0,0xaf,0x30,0x31,0x68, + 0xb3,0x76,0xbf,0x44,0x70,0x3d,0x60,0xa6,0x4c,0xbb,0xb1,0xc1,0x4d,0x30,0x78,0x68, + 0xb7,0x36,0xc0,0x34,0x70,0x53,0x60,0xac,0x3c,0xbd,0x73,0xc1,0x22,0x30,0x26,0x68, + 0xbc,0x56,0xc1,0xa4,0x70,0xa5,0xb2,0xbc,0x7c,0xc1,0x67,0xc2,0x21,0x30,0xb8,0x48, + 0xc0,0xa8,0xc2,0x70,0x70,0xb3,0xb2,0xaa,0x7d,0x33,0x78,0x31,0x29,0xa3,0x48,0x49, + 0x37,0x37,0x32,0x22,0x71,0x65,0xb3,0x43,0x3d,0x35,0x78,0x32,0x45,0xa3,0x57,0x49, + 0x3b,0x37,0x33,0x74,0x71,0x22,0xb3,0x45,0x2d,0x36,0x64,0x32,0x5e,0xa3,0x5c,0xbb, + 0x3c,0x37,0x33,0xaa,0x71,0x2b,0x61,0x47,0x2d,0x36,0x2c,0x32,0x6d,0xa3,0x60,0x69, + 0x3c,0xc1,0x34,0x32,0x71,0xa3,0xb3,0x49,0x2d,0x37,0x54,0x32,0x7a,0xa3,0x64,0x49, + 0x3e,0x37,0x34,0x62,0x71,0xaf,0xb3,0x4c,0x6d,0x37,0xb6,0x32,0x2e,0xa3,0x6a,0x4f, + 0x21,0xab,0x44,0xc1,0x78,0x66,0x65,0xb0,0x6e,0x4c,0x64,0x57,0xb0,0xac,0x2c,0x2b, + 0x67,0xc1,0x7e,0xa4,0x24,0x69,0xb7,0xb1,0x5e,0x4c,0xa2,0x57,0xb7,0xac,0x2e,0x6b, + 0x68,0x67,0x7e,0xb2,0x24,0x6d,0x65,0xb2,0x4e,0x4c,0xae,0x57,0xbe,0xac,0x30,0x2b, + 0x68,0xc1,0xa1,0x34,0x24,0x72,0x65,0xb3,0x6e,0x4d,0x48,0x58,0x37,0xac,0xa4,0xc1, + 0x25,0x7e,0xbf,0x34,0x39,0xac,0xa5,0x6b,0x69,0x27,0xa1,0x48,0x24,0x78,0x65,0xb5, + 0x5e,0x4d,0xa2,0x58,0x45,0xac,0xa8,0x6b,0x6a,0x67,0xa1,0x60,0x24,0x7e,0x65,0xb6, + 0x6e,0x4d,0xba,0x58,0x4f,0xac,0xaa,0xbd,0x6b,0x3f,0xa1,0x76,0x24,0x22,0xb7,0xb7, + 0x7e,0x4e,0x48,0x58,0x57,0xac,0xac,0xbd,0x6b,0x27,0xa1,0x2a,0x24,0x28,0x6e,0x5a, + 0x34,0xc0,0x70,0x58,0x61,0xac,0xaf,0x6b,0x6c,0x47,0xa1,0xaa,0x24,0x2b,0xb7,0xb9, + 0xb0,0x4e,0x30,0x58,0x6a,0xac,0xb1,0x2b,0x6c,0x2f,0xa1,0xbe,0x24,0x30,0x65,0xba, + 0xc0,0x4f,0x34,0x58,0x72,0xac,0xb3,0x2b,0x6d,0x4f,0xa2,0x3e,0x24,0xa6,0xb7,0xbc, + 0x5e,0x4f,0x60,0x58,0x7d,0xac,0xb6,0x6b,0x6d,0xb9,0xa2,0x50,0x24,0xab,0xb7,0xbd, + 0x5e,0x4f,0xa2,0x58,0x25,0xac,0xb8,0x6b,0x6e,0x67,0xa2,0x7c,0x71,0xb7,0x61,0x4e, + 0x7d,0x38,0x24,0x32,0xb8,0xbd,0xb3,0x4f,0xbf,0x38,0xaa,0x31,0x31,0xa3,0x72,0x49, + 0x41,0x77,0x35,0x52,0x72,0x3b,0xb3,0x54,0x7d,0x39,0xba,0x33,0x4f,0xa3,0x78,0xbb, + 0x43,0x37,0x35,0x78,0x72,0x43,0x61,0x55,0xaf,0x3a,0x50,0x33,0x5d,0xa3,0x7c,0x69, + 0x43,0xc1,0x35,0xa4,0x72,0x49,0xb3,0x57,0xaf,0x3a,0xa6,0x33,0x6a,0xa3,0xa2,0x49, + 0x45,0x37,0x36,0x42,0x72,0x55,0xb3,0x5a,0x6d,0x3b,0x64,0x33,0x7e,0xa3,0x26,0x49, + 0x46,0x5f,0x36,0x62,0x72,0x5f,0x61,0x5d,0x7d,0x3c,0x48,0x33,0xaa,0xa3,0x2b,0x49, + 0x47,0xa1,0x36,0xa4,0x72,0x6b,0x61,0x60,0x3d,0x3d,0x48,0x34,0x3d,0xa3,0xa6,0x69, + 0x49,0xb9,0x37,0x52,0x72,0x7b,0x61,0x63,0xaf,0x3d,0xb6,0x34,0x4e,0xa3,0xaa,0xbb, + 0x4b,0x3f,0x37,0x7c,0x72,0x25,0x61,0x66,0x4d,0x3e,0x64,0x34,0x61,0xa3,0xb2,0x69, + 0x4d,0x57,0x38,0x42,0x72,0xa9,0x61,0x6b,0x7d,0x3f,0x30,0x34,0x29,0xa3,0xbb,0x49, + 0x4f,0x57,0x38,0x22,0x72,0xbb,0x61,0x6f,0x4d,0x40,0xa2,0x34,0xbf,0xa3,0xc2,0x69, + 0x41,0x37,0x39,0x3a,0x73,0x37,0x61,0x72,0x2d,0x41,0x70,0x35,0x42,0xa4,0x37,0x49, + 0x52,0xa1,0x39,0x6a,0x73,0x40,0xb3,0x75,0x3d,0x42,0x54,0x35,0x5a,0xa4,0x3b,0xbb, + 0x53,0xb2,0x25,0x4b,0x35,0xc2,0x22,0x6b,0xc0,0x4f,0xaa,0x58,0x2b,0xac,0xb9,0xbd, + 0x6e,0xa9,0xa2,0x6c,0x24,0xb2,0x65,0xbe,0xc0,0x50,0x34,0x58,0xa5,0xac,0xbc,0x4b, + 0x6f,0x5f,0xa2,0x7e,0x24,0xb6,0xb7,0xc0,0x3e,0x50,0x58,0x58,0xad,0xac,0xbd,0xbd, + 0x6f,0xb9,0xa2,0x30,0x24,0xbb,0xb7,0xc1,0x5e,0x50,0xa2,0x58,0xb8,0xbd,0xb7,0xc1, + 0xb0,0x50,0x30,0xad,0x7a,0x30,0x71,0x70,0x3e,0x50,0xaa,0x58,0xbd,0xac,0xc1,0xbd, + 0x70,0xb9,0x7d,0x32,0x25,0x32,0x66,0x31,0x6e,0x51,0x44,0x59,0x36,0xad,0x32,0x2b, + 0x71,0x6f,0x21,0x44,0x25,0x36,0x66,0x32,0x6e,0x51,0x64,0x59,0x3e,0xad,0x34,0x2b, + 0x71,0xc1,0x21,0x52,0x25,0x39,0xb8,0x33,0x5e,0x51,0xa2,0x59,0x45,0xad,0x36,0x6b, + 0x72,0x67,0x24,0xad,0x71,0x50,0x76,0xbd,0x72,0x77,0x21,0x64,0x25,0x3e,0x66,0x34, + 0x6e,0x51,0xb6,0x59,0x4f,0xad,0x38,0xbd,0x73,0x37,0x21,0x74,0x25,0x42,0x66,0x35, + 0x6e,0x52,0x44,0x59,0x56,0xad,0x3a,0x2b,0x73,0x6f,0x21,0x22,0x25,0x45,0xb8,0x36, + 0x5e,0x52,0x60,0x59,0x5d,0xad,0x3c,0x6b,0x73,0xb9,0x21,0x30,0x25,0x49,0x66,0x37, + 0x4e,0x52,0x7c,0x59,0x64,0xad,0x3e,0x4b,0x74,0x5f,0x21,0xb0,0x25,0x4c,0xb8,0x36, + 0xbf,0x42,0x78,0x35,0x63,0xa4,0x3e,0x49,0x55,0x77,0x3a,0x52,0x73,0x59,0xb3,0x7b, + 0x7d,0x43,0xa6,0x35,0xa3,0xa4,0x4a,0x69,0x57,0xa9,0x3a,0x2c,0x73,0x69,0x61,0xa1, + 0x7d,0x44,0xb6,0x35,0xc0,0xa4,0x50,0xbb,0x59,0x3f,0x3b,0x42,0x73,0x75,0xb3,0x23, + 0x3d,0x45,0xa6,0x36,0x4c,0xa4,0x58,0x69,0x5b,0x57,0x3b,0x7c,0x73,0x25,0x61,0x26, + 0x7d,0x46,0x68,0x36,0x65,0xa4,0x5e,0x69,0x5c,0x6f,0x3b,0xb6,0x73,0xb1,0x61,0x2c, + 0x2d,0x48,0x34,0x36,0xa6,0xa4,0x6a,0x49,0x5f,0x2f,0x3c,0x2a,0x73,0xb9,0xb3,0x2e, + 0xbf,0x48,0x78,0x36,0xb9,0xa4,0x6f,0x49,0x60,0xa1,0x3c,0xba,0x73,0xc1,0x61,0x71, + 0x3d,0x49,0x54,0x37,0x3a,0xa4,0x74,0x49,0x61,0xb1,0x3d,0x58,0x74,0x3b,0x61,0xa5, + 0x2d,0x49,0xa6,0x37,0x4d,0xa4,0x7a,0x49,0x63,0x5f,0x3d,0x22,0x74,0x45,0xb3,0xab, + 0x2d,0x4c,0x54,0x37,0xac,0xa4,0x2c,0x49,0x68,0x37,0x3e,0xa8,0x74,0x6d,0x61,0xb2, + 0x4d,0x4c,0xb6,0x37,0xc0,0xa4,0xa4,0x49,0x69,0x77,0x3f,0x4a,0x74,0xa3,0x61,0xbe, + 0x3d,0x4f,0xaa,0x38,0x2d,0xa4,0xba,0xbb,0x6f,0x37,0x40,0x76,0x74,0xb7,0x61,0xc0, + 0x4d,0x50,0x68,0x38,0xb7,0xa4,0xc0,0x6f,0x2d,0x50,0xa6,0x37,0x39,0xa5,0x35,0x49, + 0x73,0x57,0x41,0x2a,0x75,0x49,0x6e,0x52,0x21,0x58,0xc0,0x33,0x69,0xad,0x3f,0x6b, + 0x74,0x27,0x21,0xba,0x25,0x4f,0x66,0x38,0x2e,0x52,0xbe,0x59,0x70,0xad,0x41,0x6b, + 0x75,0x47,0x22,0x38,0x25,0x53,0xb8,0x39,0xb0,0x53,0x50,0x59,0x79,0xad,0x43,0x6b, + 0x75,0x27,0x22,0x48,0x25,0x57,0x66,0x3a,0x2e,0x53,0x6c,0x59,0xa2,0xad,0x45,0x4b, + 0x76,0x3f,0x22,0x56,0x25,0x5a,0xc0,0x5a,0x4c,0xbb,0x36,0x5a,0x25,0x5b,0xb8,0x3b, + 0xb0,0x53,0x30,0x59,0x29,0xad,0x47,0x6b,0x76,0x27,0x22,0x68,0x25,0x5f,0xb8,0x3c, + 0xb0,0x53,0xc2,0x59,0xa4,0xad,0x49,0x2b,0x77,0x4f,0x22,0x7c,0x25,0x64,0x66,0x3d, + 0xc0,0x54,0x54,0x59,0xac,0xad,0x4b,0x2b,0x77,0x2f,0x22,0x2a,0x25,0x68,0x66,0x3f, + 0x3e,0x54,0x78,0x59,0xb5,0xbd,0x23,0x38,0xba,0x4f,0x22,0xac,0x25,0x6b,0xb8,0x3f, + 0xb0,0x54,0x30,0x59,0xbd,0xad,0x4f,0xbd,0x78,0xb1,0x22,0xc0,0x25,0x71,0xb8,0x41, + 0x6e,0x55,0x44,0x5a,0x36,0xad,0x52,0x2b,0x79,0x6f,0x23,0x46,0x25,0x77,0x66,0x42, + 0xb0,0x55,0x70,0x5a,0x41,0xad,0x55,0x6b,0x7a,0x47,0x23,0x58,0x25,0x7b,0xb8,0x43, + 0xb0,0x55,0x30,0x5a,0x49,0xad,0x57,0x6b,0x7a,0x27,0x23,0x68,0x25,0xa1,0x66,0x44, + 0x2e,0x52,0x24,0x39,0x6d,0xa5,0x40,0x69,0x75,0x77,0x42,0x7a,0x75,0x63,0xb4,0x3e, + 0x3d,0x54,0x64,0x39,0xb7,0xa5,0x4e,0x69,0x78,0xa1,0x43,0x32,0x75,0x7b,0x62,0x44, + 0x7d,0x56,0xa6,0x3a,0x6d,0xa5,0x6b,0x69,0xa2,0x37,0x44,0xa6,0x75,0xbd,0x62,0x50, + 0x3d,0x58,0xae,0x3a,0xc2,0xa5,0x31,0x49,0x21,0x3f,0x45,0x4a,0x76,0x39,0x62,0x53, + 0x7d,0x59,0xb6,0x3b,0x59,0xa5,0x7b,0x69,0x23,0xa9,0x45,0xa4,0x76,0x4d,0x62,0x58, + 0x4d,0x5a,0xb2,0x3b,0x6e,0xa5,0x22,0x49,0x25,0x5f,0x46,0x42,0x76,0x55,0xb4,0x5a, + 0x5d,0x5b,0x64,0x3b,0x7e,0xa5,0x24,0x29,0x26,0x4f,0x46,0x5a,0x76,0x5b,0xb4,0x5b, + 0xbf,0x5b,0xa6,0x3b,0x2a,0xa5,0x28,0x69,0x26,0xb9,0x46,0x72,0x76,0x61,0xb4,0x5d, + 0x7d,0x5c,0x54,0x3b,0xb3,0xa5,0x2d,0x69,0x28,0x4f,0x46,0xac,0x76,0x6b,0xb4,0x60, + 0x7d,0x5c,0xba,0x3c,0x31,0xa5,0xa4,0x49,0x29,0x6f,0x47,0x4a,0x76,0x77,0xb4,0x62, + 0xbf,0x5d,0x78,0x3c,0x46,0xa5,0xa8,0xbb,0x2a,0x77,0x47,0x6a,0x76,0x21,0x62,0x66, + 0x4d,0x5e,0x24,0x3c,0x66,0xa5,0xb1,0x49,0x2c,0xa1,0x47,0xba,0x76,0x2f,0x62,0x68, + 0x2d,0x5e,0xbe,0x3c,0x75,0xa5,0xb4,0x69,0x2d,0x67,0x48,0x40,0x76,0xa7,0x62,0x6a, + 0x4d,0x5f,0x5c,0x3c,0x7d,0xa5,0xb6,0x2f,0x21,0xab,0x44,0xc1,0x72,0xa2,0x66,0x44, + 0xc0,0x56,0x34,0x5a,0x52,0xad,0x59,0x2b,0x7b,0x4f,0x23,0x7a,0x25,0x23,0xb8,0x45, + 0xb0,0x56,0x50,0x5a,0x59,0xad,0x5b,0x2b,0x7b,0x2f,0x23,0x2a,0x25,0x27,0xb8,0x46, + 0xb0,0x56,0x70,0x5a,0x61,0xad,0x5d,0x6b,0x7c,0x47,0x23,0xaa,0x25,0x2b,0x66,0x47, + 0x2e,0x56,0x2c,0x5a,0x68,0xad,0x5f,0x4f,0x25,0x7e,0xbf,0x34,0x6a,0xad,0x5f,0x2b, + 0x7c,0x2f,0x23,0xbc,0x25,0x2f,0xb8,0x48,0xb0,0x56,0xc2,0x5a,0x71,0xad,0x61,0x6b, + 0x7d,0x47,0x24,0x38,0x25,0xa5,0x66,0x49,0x2e,0x57,0x4c,0x5a,0x78,0xad,0x63,0x4b, + 0x7d,0xa1,0x24,0x46,0x25,0xa8,0xb8,0x4a,0x2e,0x57,0x6c,0x5a,0xa2,0xad,0x65,0x6b, + 0x7e,0x47,0x24,0x58,0x25,0xad,0xc0,0x5a,0x34,0xc1,0x2c,0x5a,0x28,0xad,0x67,0x4b, + 0x7e,0xa1,0x24,0x66,0x25,0xb0,0xb8,0x4c,0x2e,0x57,0xbe,0x5a,0xa3,0xad,0x69,0x6b, + 0xa1,0x47,0x24,0x78,0x25,0xb5,0x66,0x4d,0x2e,0x58,0x4c,0x5a,0xaa,0xad,0x6b,0x6b, + 0xa1,0x27,0x24,0x28,0x25,0xb9,0xb8,0x4e,0xb0,0x58,0x70,0x5a,0xb4,0xad,0x6d,0x2b, + 0xa2,0x4f,0x24,0xac,0x25,0xbd,0xc0,0x6b,0xa2,0x67,0x24,0xb2,0x25,0xbf,0xb8,0x50, + 0x5e,0x58,0xb6,0x5a,0x21,0xa5,0xb7,0x69,0x2e,0x57,0x48,0x62,0x76,0xb3,0x62,0x6d, + 0x4d,0x60,0x40,0x3c,0xa8,0xa5,0xbe,0x49,0x2f,0xb1,0x48,0x2e,0x76,0xbb,0x62,0x6f, + 0x7d,0x60,0x2c,0x3c,0xba,0xa5,0xc2,0x49,0x30,0xb1,0x48,0xc0,0x76,0xc2,0xb4,0x51, + 0x3d,0x61,0x38,0x3d,0x36,0xa6,0x32,0x29,0xa3,0x6f,0x49,0x42,0x77,0x37,0x62,0x73, + 0x3d,0x61,0xa6,0x3d,0x4a,0xa6,0x37,0xbb,0xa4,0xa9,0x49,0x7a,0x77,0x43,0xb4,0x76, + 0x3d,0x62,0x64,0x3d,0x5e,0xa6,0x3c,0x29,0xa6,0x37,0x49,0xaa,0x77,0x4b,0x62,0x77, + 0x2d,0x62,0x30,0x3d,0x6a,0xa6,0x3f,0xbb,0xa7,0x37,0x4a,0x34,0x77,0x53,0x62,0x7a, + 0x3d,0x63,0x74,0x3d,0x22,0xa6,0x45,0xbb,0xa8,0x57,0x4a,0x5c,0x77,0x5f,0x62,0x7c, + 0x2d,0x64,0x34,0x3d,0xaf,0xa6,0x4c,0xbb,0xaa,0x3f,0x4a,0xb4,0x77,0x6d,0xb4,0xa2, + 0x7d,0x65,0x34,0x3e,0x39,0xa6,0x53,0x69,0xab,0x2f,0x4b,0x4c,0x77,0x7b,0x62,0x23, + 0x2d,0x65,0xa6,0x3e,0x4d,0xa6,0x5a,0x49,0xad,0x5f,0x4b,0xa2,0x77,0x25,0xb4,0x27, + 0x3d,0x66,0x78,0x3e,0x65,0xa6,0x5f,0x49,0xae,0xa1,0x4b,0xb8,0x77,0xa3,0x62,0x29, + 0x4d,0x67,0x40,0x3e,0x76,0xa6,0x64,0x49,0xaf,0xb1,0x4c,0x52,0x77,0xad,0x62,0x2c, + 0x7d,0x67,0xba,0x3e,0xa3,0xa6,0x69,0x69,0xb1,0x78,0x25,0x4b,0x35,0xc2,0x21,0x70, + 0xb0,0x58,0xc2,0x59,0x31,0xad,0x71,0x6b,0x21,0x47,0x25,0x38,0x26,0x33,0xb8,0x51, + 0xb0,0x59,0x50,0x5b,0x3a,0xad,0x73,0x2b,0x21,0x2f,0x25,0x4c,0x26,0x38,0x66,0x52, + 0xc0,0x59,0x74,0x5b,0x42,0xad,0x75,0x2b,0x22,0x4f,0x25,0x5e,0x26,0x3d,0x66,0x54, + 0x4e,0x59,0xae,0x5b,0x4c,0xad,0x78,0x4b,0x22,0xb1,0x28,0xad,0x71,0x50,0x78,0x2b, + 0x22,0xc1,0x25,0x72,0x26,0x41,0xb8,0x55,0x5e,0x5a,0x40,0x5b,0x55,0xad,0x7a,0x6b, + 0x23,0x67,0x25,0xa2,0x26,0x45,0x66,0x56,0x4e,0x5a,0x5c,0x5b,0x5c,0xad,0x7c,0x4b, + 0x23,0xb1,0x25,0x2e,0x26,0x48,0xb8,0x57,0x3e,0x5a,0x78,0x5b,0x63,0xad,0x7d,0xbd, + 0x24,0x57,0x25,0xae,0x26,0x4c,0x66,0x57,0xc2,0x5b,0x51,0xc1,0x69,0xad,0xa1,0x6b, + 0x24,0x27,0x25,0xba,0x26,0x50,0x66,0x58,0xc0,0x5b,0x38,0x5b,0x73,0xad,0x21,0xbd, + 0x25,0x5f,0x26,0x3e,0x26,0x54,0xb8,0x5a,0x3e,0x5b,0x58,0x5b,0x7b,0xad,0x23,0xbd, + 0x25,0xb9,0x26,0x52,0x26,0x5a,0x66,0x5b,0x6e,0x5b,0x24,0x5b,0x26,0xad,0x26,0x2b, + 0x26,0x6f,0x26,0x66,0x26,0x5e,0xb8,0x5c,0x2e,0x5b,0xbe,0x5b,0x30,0xad,0x29,0x6b, + 0x27,0x47,0x26,0x78,0x26,0xb7,0xb4,0x2e,0x7d,0x68,0x74,0x3e,0xbb,0xa6,0x6f,0x69, + 0xb2,0xb1,0x49,0x3a,0x78,0x33,0xb4,0xa4,0x3d,0x69,0x64,0x3f,0x45,0xa6,0x76,0x69, + 0xb4,0x6f,0x4d,0x64,0x78,0x41,0x62,0xa7,0x4d,0x6a,0x44,0x3f,0x59,0xa6,0x7d,0x49, + 0xb6,0x3f,0x4d,0xaa,0x78,0x4b,0xb4,0xa9,0xbf,0x6a,0xb6,0x3f,0x6e,0xa6,0x21,0x49, + 0xb7,0x57,0x4e,0x46,0x78,0x57,0x62,0xac,0x2d,0x6b,0x70,0x3f,0x22,0xa6,0x25,0x29, + 0xb8,0x4f,0x4e,0x5a,0x78,0x5b,0xb4,0xad,0xaf,0x6b,0x30,0x3f,0x29,0xa6,0x28,0x49, + 0xb9,0x37,0x4e,0x22,0x78,0x66,0xb4,0xb1,0x7d,0x6c,0x28,0x3f,0xbb,0xa6,0x30,0x49, + 0xba,0xb1,0x4e,0xc0,0x78,0x72,0xb4,0xb3,0x7d,0x6d,0x48,0x40,0x38,0xa6,0xa5,0x49, + 0xbb,0xa1,0x4f,0x46,0x78,0x78,0x62,0xb5,0x3d,0x6d,0x78,0x40,0x45,0xa6,0xa8,0x29, + 0xbc,0x6f,0x4f,0x62,0x78,0x7e,0x62,0xb7,0x3d,0x6e,0x38,0x40,0x54,0xa6,0xac,0x49, + 0xbd,0x5f,0x4f,0x7e,0x78,0x27,0x62,0xb8,0x2d,0x6e,0x74,0x40,0x65,0xa6,0xb2,0x49, + 0xbe,0xb1,0x4f,0xc2,0x78,0xa3,0x62,0xbb,0x4d,0x6f,0x54,0x40,0x7a,0xa6,0xb6,0x49, + 0xbf,0xb9,0x50,0x52,0x78,0xaf,0x62,0xbe,0x2d,0x70,0x44,0x40,0xab,0xa6,0xbe,0x49, + 0xb3,0x37,0x51,0x34,0x79,0x33,0x63,0x32,0x3d,0x71,0x5c,0xad,0x3e,0x33,0x70,0xaa, + 0xb9,0x57,0x26,0x7e,0x26,0x64,0xb8,0x5e,0x5e,0x5c,0x64,0x5b,0xb1,0xad,0x2c,0xbd, + 0x28,0x37,0x26,0xa6,0x26,0x6a,0x66,0x5f,0x6e,0x5c,0x2c,0x5b,0xba,0xad,0x2f,0x6b, + 0x28,0x27,0x26,0xba,0x26,0x6f,0xb8,0x60,0xb0,0x5c,0xc2,0x5c,0x31,0xad,0xa3,0x6b, + 0x29,0x47,0x27,0x38,0x26,0x74,0x66,0x62,0x5e,0x5d,0x60,0xad,0x7a,0x30,0x71,0x62, + 0x7e,0x5d,0x68,0x5c,0x3f,0xad,0xa6,0xbd,0x2a,0x3f,0x27,0x56,0x26,0x7a,0xb8,0x63, + 0x7e,0x5d,0x28,0x5c,0x47,0xad,0xa8,0xbd,0x2a,0x77,0x27,0x64,0x26,0x7e,0x66,0x64, + 0x6e,0x5d,0xb6,0x5c,0x4e,0xad,0xaa,0x2b,0x2a,0xc1,0x27,0x72,0x26,0x21,0xb8,0x65, + 0x5e,0x5e,0x40,0x5c,0x55,0xad,0xac,0x2b,0x2b,0x70,0x26,0x41,0x70,0x25,0x66,0x66, + 0x4e,0x5e,0x5c,0x5c,0x5c,0xad,0xae,0x4b,0x2b,0xb1,0x27,0x2e,0x26,0x28,0xb8,0x67, + 0x3e,0x5e,0x78,0x5c,0x63,0xad,0xaf,0xbd,0x2c,0x57,0x27,0xae,0x26,0x2c,0x66,0x67, + 0xc0,0x5e,0xa6,0x5c,0x6a,0xad,0xb1,0x2b,0x2c,0x2f,0x27,0xbc,0x26,0x2f,0xb8,0x68, + 0xb0,0x5e,0xc2,0x5c,0x71,0xad,0xb3,0x6b,0x2d,0x47,0x28,0x38,0x26,0xa5,0x66,0x69, + 0x2e,0x5f,0x4c,0x5c,0x78,0xad,0x75,0x4a,0x32,0x3f,0x51,0x58,0x79,0x3b,0xb5,0x33, + 0xaf,0x71,0xb6,0x41,0x4e,0xa7,0x39,0x4a,0x33,0x57,0x51,0x2a,0x79,0x47,0xb5,0x36, + 0xbf,0x72,0x78,0x41,0x69,0xa7,0x40,0x4a,0x35,0x37,0x52,0x42,0x79,0x55,0xb5,0x3a, + 0x7d,0x73,0x68,0x41,0x25,0xa7,0x4d,0x4a,0x38,0x3f,0x52,0xac,0x79,0x6d,0x63,0x40, + 0x5d,0x75,0x34,0x42,0x32,0xa7,0x51,0xbc,0x39,0x5f,0x53,0x3e,0x79,0x74,0xb5,0x42, + 0x6d,0x75,0x64,0x42,0x3e,0xa7,0x56,0x4a,0x3a,0xb1,0x53,0x70,0x79,0x21,0xb5,0x46, + 0x3d,0x76,0xb6,0x42,0x6e,0xa7,0x62,0x4a,0x3d,0x77,0x54,0x4a,0x79,0xad,0x63,0x4b, + 0x2d,0x77,0x30,0x42,0x2a,0xa7,0x69,0x4a,0x3f,0x3f,0x54,0x7a,0x79,0xbd,0xc0,0x6a, + 0x40,0xa9,0x54,0xbe,0x79,0x31,0x63,0x51,0x7d,0x79,0x48,0x43,0x37,0xa7,0x74,0x4a, + 0x41,0xb1,0x55,0x50,0x7a,0x39,0xb5,0x54,0x3d,0x7a,0x64,0x43,0x65,0xa7,0x25,0x4a, + 0x46,0x3f,0x56,0x5a,0x7a,0x5d,0x63,0x5d,0x3d,0x7c,0x38,0x43,0xa6,0xa7,0x2c,0x4a, + 0x48,0x37,0x56,0xac,0x7a,0x6f,0x63,0x62,0x3d,0x7d,0x58,0x44,0x3d,0xa7,0xa7,0x4a, + 0x4a,0x77,0x57,0x64,0x7a,0x7e,0xb5,0x64,0x2d,0xa1,0x34,0x44,0x72,0xa7,0xb4,0x4a, + 0x4d,0x6f,0x58,0x42,0x7a,0xa8,0x63,0x6b,0x3d,0xa1,0x78,0x44,0x24,0xbd,0x23,0x51, + 0xb6,0xb2,0x27,0x79,0x34,0x31,0x63,0x2b,0x2d,0x2f,0x28,0x4c,0x26,0xaa,0x66,0x6a, + 0xc0,0x5f,0x78,0x5c,0x24,0xad,0xb8,0x4b,0x2e,0x5f,0x28,0x5e,0x26,0xae,0xb8,0x6c, + 0x5e,0x5f,0xb6,0x5c,0x2f,0xad,0xba,0xbd,0x2f,0x37,0x28,0x74,0x26,0xb4,0x66,0x6d, + 0x6e,0x60,0x4c,0x5c,0xaa,0xad,0xbd,0x6b,0x2f,0x27,0x28,0x28,0x26,0xb9,0xb8,0x6e, + 0xb2,0x5b,0x57,0xc1,0x32,0xba,0xb8,0x6f,0x3e,0x60,0x78,0x5c,0xb5,0xad,0xbf,0xbd, + 0x30,0x67,0x28,0xb4,0x26,0xc0,0x66,0x70,0x6e,0x60,0xb6,0x5c,0xc0,0xad,0xc2,0x2b, + 0x30,0xc1,0x25,0x36,0x27,0x32,0xb8,0x71,0x2e,0x61,0x4c,0x5d,0x38,0xae,0x33,0x6b, + 0xa3,0x27,0x29,0x48,0x27,0x37,0x66,0x72,0x2e,0x61,0x6c,0x5d,0x40,0xae,0x35,0x2b, + 0xb2,0x5b,0x31,0xc1,0x47,0xae,0x36,0xbd,0xa4,0x77,0x29,0x64,0x27,0x3e,0x66,0x74, + 0x6e,0x61,0xba,0x5d,0x4f,0xae,0x38,0xbd,0xa5,0x3f,0x29,0x76,0x27,0x42,0xb8,0x75, + 0x2e,0x62,0x4c,0x5d,0x58,0xae,0x3b,0x4b,0xa5,0xa1,0x29,0x26,0x27,0x46,0xb8,0x76, + 0x7e,0x62,0x6c,0x5d,0x60,0xae,0x3d,0x4b,0xa6,0x3f,0x29,0xa8,0x27,0x4a,0xb8,0x77, + 0x7e,0x62,0x28,0x5d,0x67,0xae,0x3e,0xbd,0xa6,0x27,0x29,0xba,0x27,0xad,0xb5,0x6b, + 0xaf,0xa1,0xaa,0x44,0x2b,0xa7,0xba,0x4a,0x4e,0xb1,0x58,0x72,0x7a,0xb4,0x63,0x6d, + 0x7d,0xa2,0x50,0x44,0xaf,0xa7,0xbe,0x6a,0x4f,0xc1,0x58,0xa4,0x7a,0xbb,0xb5,0x70, + 0x3d,0xa2,0xaa,0x44,0xbf,0xa7,0x71,0x4a,0x51,0x77,0x59,0x44,0x7b,0x36,0xb5,0x72, + 0x7d,0x21,0x68,0x45,0x45,0xa8,0x37,0x4a,0x53,0xa1,0x5a,0x4a,0x7b,0x57,0xb5,0x7b, + 0x3d,0x23,0x24,0x45,0x2d,0xa8,0x48,0x6a,0x56,0xc1,0x5a,0x72,0x7b,0x61,0xb5,0x7e, + 0x3d,0x24,0xba,0x46,0x35,0xa8,0x57,0x4a,0x5c,0xa9,0x5b,0xbe,0x7b,0xa3,0x63,0x29, + 0x7d,0x27,0x64,0x46,0x7e,0xa8,0x64,0xbc,0x5e,0x3f,0x5c,0x58,0x7b,0xaf,0x63,0x2c, + 0x4d,0x28,0x34,0x46,0xaf,0xa8,0x6e,0x4a,0x51,0x77,0x5d,0x52,0x7c,0x3b,0x63,0xa6, + 0x3d,0x2a,0x34,0x47,0x52,0xa8,0x21,0x6a,0x65,0x77,0x5e,0x44,0x7c,0x57,0x63,0xad, + 0x3d,0x2b,0xa6,0x47,0x2a,0xa8,0x28,0x6a,0x67,0x57,0x5e,0xb4,0x7c,0x6d,0xb5,0xb6, + 0x7d,0x2e,0xa6,0x48,0x25,0xa8,0xbc,0x4a,0x6f,0x6f,0x60,0x24,0x7c,0x37,0x64,0x32, + 0x2d,0xa3,0x74,0x49,0x45,0xa9,0x38,0x4a,0x72,0xb1,0x61,0x74,0x7d,0x42,0x64,0x35, + 0xbf,0xa4,0x54,0x49,0x5a,0xa9,0x3c,0x4a,0x73,0xb9,0x61,0xa4,0x7d,0x4d,0x64,0x38, + 0x4d,0xa4,0xb2,0xad,0x7a,0x34,0x7c,0xc1,0x2b,0x51,0x3d,0x31,0x6e,0xae,0x40,0x2b, + 0xa6,0xc1,0x2a,0x34,0x27,0x52,0x66,0x79,0x6e,0x63,0x44,0x5d,0x77,0xae,0x42,0xbd, + 0xa7,0x27,0x2a,0x4a,0x27,0x58,0x66,0x7a,0xc0,0x63,0x74,0x5d,0x23,0xae,0x45,0xbd, + 0xa8,0x67,0x2a,0x60,0x27,0x5d,0xb8,0x7c,0x5e,0x63,0xb2,0x5d,0x2e,0xae,0x48,0x2b, + 0xa8,0xc1,0x2a,0x72,0x27,0x61,0xc0,0x5a,0x4c,0xbb,0x36,0x76,0x27,0x62,0xb8,0x7d, + 0x7e,0x64,0x48,0x5d,0xa9,0xae,0x4b,0x4b,0xa9,0x27,0x2a,0x28,0x27,0x67,0x66,0x7e, + 0x2e,0x64,0x6c,0x5d,0xb2,0xae,0x4d,0x2b,0xaa,0x4f,0x2a,0xae,0x27,0x6c,0x66,0xa1, + 0xc0,0x64,0xa6,0x5d,0xbc,0xae,0x4f,0x2b,0xaa,0x2f,0x2a,0xbc,0x27,0x6f,0xb8,0xa2, + 0xb0,0x64,0xc2,0x5e,0x31,0xbd,0x23,0x38,0xbb,0x3f,0x2b,0x36,0x27,0x73,0x66,0x21, + 0xb0,0x65,0x50,0x5e,0x39,0xae,0x53,0x6b,0xab,0x27,0x2b,0x48,0x27,0x78,0x66,0x22, + 0xc0,0x65,0x78,0x5e,0x43,0xae,0x55,0xbd,0xac,0x5f,0x2b,0x5e,0x27,0x7c,0xb8,0x24, + 0x3e,0x65,0xaa,0x5e,0x4b,0xae,0x57,0xbd,0xac,0xa9,0x2b,0x6e,0x27,0x21,0x66,0x25, + 0x5e,0x66,0x40,0x5e,0x55,0xae,0x5a,0x6b,0xad,0x67,0x2b,0xa2,0x27,0x25,0xb8,0x26, + 0x5e,0x62,0xb6,0x49,0x6e,0xa9,0x40,0x2a,0x75,0x57,0x62,0x3c,0x7d,0x55,0x64,0x3a, + 0x7d,0xa5,0x24,0x49,0x26,0xa9,0x46,0xbc,0x76,0x77,0x62,0x64,0x7d,0x61,0x64,0x3d, + 0x7d,0xa6,0x4c,0x49,0xab,0xa9,0x4d,0x4a,0x78,0x5f,0x63,0x62,0x7d,0x7d,0xb6,0x44, + 0x7d,0xa8,0x34,0x4a,0x59,0xa9,0x5b,0x6a,0x7b,0x2f,0x63,0x2a,0x7d,0x27,0xb6,0x47, + 0x7d,0xa8,0x28,0x4a,0x69,0xa9,0x60,0x4a,0x7d,0x57,0x64,0x3c,0x7d,0xa6,0xb6,0x4a, + 0x4d,0xa9,0x74,0x4a,0x25,0xa9,0x6a,0x4a,0xa1,0xa9,0x64,0xa4,0x7d,0x31,0xb6,0x52, + 0x3d,0xab,0x58,0x4b,0x3d,0xa9,0x75,0x4a,0x22,0x77,0x65,0x64,0x7e,0x3e,0xb6,0x54, + 0x2d,0xac,0x44,0x4b,0x59,0xa9,0x7c,0x4a,0x24,0xa1,0x66,0x6a,0x7e,0x61,0x64,0x5d, + 0x7d,0xae,0x64,0x4b,0xb0,0xa9,0x2c,0xbc,0x28,0x3f,0x66,0xb4,0x7e,0x75,0x64,0x63, + 0x7d,0xaf,0x28,0x4c,0x49,0xa9,0xaa,0x4a,0x2b,0x57,0x67,0x7c,0x7e,0x24,0xb6,0x66, + 0x4d,0xb0,0x74,0x4c,0x75,0xa9,0xb6,0x4a,0x2e,0x37,0x68,0x22,0x7e,0xb9,0x64,0x6f, + 0x3d,0xb2,0xa6,0x4c,0xbc,0xa9,0xc1,0xbc,0x30,0xb1,0x65,0x3a,0xa1,0x35,0x64,0x72, + 0x7d,0xb3,0x24,0x4d,0x4a,0xaa,0x39,0x4a,0xa5,0x3f,0x69,0x7a,0xa1,0x45,0x64,0x77, + 0x3d,0xb4,0x78,0x4d,0x64,0xaa,0x3e,0x6f,0x21,0xab,0x43,0xb9,0x59,0x26,0xb8,0x26, + 0x2e,0x66,0x6c,0x5e,0x60,0xae,0x5d,0x6b,0xae,0x47,0x2b,0xaa,0x27,0x2b,0x66,0x27, + 0x2e,0x66,0x2c,0x5e,0x68,0xae,0x5f,0x4b,0xae,0x27,0x2b,0xbc,0x27,0x2f,0xb8,0x28, + 0xb0,0x66,0xc2,0x5e,0x71,0xae,0x61,0x6b,0xaf,0x47,0x2c,0x38,0x27,0xa6,0x66,0x29, + 0xc0,0x67,0x58,0x5e,0x7b,0xae,0x63,0xc1,0x25,0x7e,0xbf,0x34,0x7e,0xae,0x64,0x2b, + 0xaf,0xc1,0x2c,0x52,0x27,0xac,0x66,0x2b,0x6e,0x67,0x28,0x5e,0x27,0xae,0x67,0x4b, + 0xb0,0x27,0x2c,0x68,0x27,0xb1,0x66,0x2c,0x2e,0x67,0xbe,0x5e,0x30,0xae,0x69,0x6b, + 0xb1,0x47,0x2c,0x78,0x27,0xb5,0xb8,0x2d,0xb0,0x68,0x50,0x5e,0xac,0xae,0x6b,0x2b, + 0xb1,0x2f,0x2c,0x2a,0x27,0xb9,0xc0,0x5a,0x34,0xc2,0x6c,0x5e,0xb2,0xae,0x6d,0x6b, + 0xb2,0x47,0x2c,0xaa,0x27,0xbd,0x66,0x2f,0xb0,0x68,0x30,0x5e,0xbb,0xae,0x6f,0x6b, + 0xb2,0x27,0x2c,0xba,0x27,0xc2,0x66,0x30,0xc0,0x61,0x38,0x5f,0x33,0xae,0x71,0xbd, + 0xb3,0x5f,0x2d,0x3e,0x28,0x34,0xb8,0xa4,0x3e,0x69,0x58,0x5f,0x3b,0xae,0x73,0xbd, + 0xb3,0xa9,0x2d,0x4c,0x28,0x38,0x66,0xa4,0xc0,0x69,0x74,0x5f,0x43,0xae,0x75,0xbd, + 0xb4,0x57,0x2e,0x62,0xa1,0x5d,0xb6,0x7c,0x7d,0xb5,0xc2,0x4d,0xa3,0xaa,0x49,0x6a, + 0xa9,0x77,0x6a,0x24,0xa1,0x66,0xb6,0x7e,0x2d,0xb6,0x24,0x4d,0xb8,0xaa,0x4f,0x4a, + 0xaa,0xa9,0x6b,0x3a,0xa1,0x73,0xb6,0x21,0xbf,0xb7,0x58,0x4e,0x41,0xaa,0x55,0x6a, + 0xac,0x57,0x6b,0x62,0xa1,0x21,0x64,0x25,0x4d,0xb8,0x40,0x4e,0x55,0xaa,0x5a,0x6a, + 0xad,0xa9,0x6b,0x2c,0xa1,0xa3,0xb6,0x2d,0x7d,0xba,0x48,0x4e,0xab,0xaa,0x6b,0xbc, + 0xb1,0xa9,0x6c,0xac,0xa1,0xbd,0xc0,0x6a,0xb2,0x6f,0x6c,0xb4,0xa1,0xbf,0xb6,0x71, + 0x3d,0xbb,0x38,0x4f,0x35,0xaa,0x73,0x4a,0xb4,0x37,0x6d,0x54,0xa2,0x3a,0xb6,0xa5, + 0x2d,0xbb,0xb6,0x4f,0x51,0xaa,0x7a,0x4a,0xb5,0xa9,0x6d,0x2c,0xa2,0x48,0xb6,0xa9, + 0x3d,0xbc,0x78,0x4f,0x69,0xaa,0x26,0x4a,0xb8,0x5f,0x6e,0x62,0xa2,0x5f,0x64,0xaf, + 0x7d,0xbe,0x48,0x4f,0xaa,0xaa,0x2b,0x6a,0xba,0x37,0x6e,0xa6,0xa2,0x6b,0x64,0xb2, + 0x3d,0xbf,0x34,0x50,0x36,0xaa,0xa6,0x4a,0xbd,0x3f,0x6f,0x22,0xa2,0x29,0x64,0xbb, + 0x7d,0xc2,0x34,0x50,0xa4,0xaa,0xbc,0x4a,0xc1,0x77,0x70,0xa4,0xa2,0xbb,0xb6,0xc1, + 0x6d,0xc2,0x28,0xae,0xa2,0xc1,0x64,0xa3,0x3e,0x31,0x44,0x51,0x42,0xab,0x37,0x4b, + 0x33,0xb1,0x71,0xac,0x21,0x4b,0xb7,0x38,0x3e,0x32,0xb6,0xad,0x7a,0x34,0x78,0xc1, + 0x2b,0x51,0x3d,0x31,0x46,0xae,0x76,0x2b,0xb4,0x6f,0x2d,0x66,0x28,0x3e,0xb8,0xa6, + 0x2e,0x69,0xbe,0x5f,0x50,0xae,0x79,0x6b,0xb5,0x47,0x2d,0x78,0x28,0x43,0x66,0xa7, + 0x2e,0x6a,0x4c,0x5f,0x58,0xae,0x7b,0x2b,0xb5,0xa9,0x2d,0x2e,0x28,0x48,0xb8,0xa9, + 0x3e,0x6a,0x78,0x5f,0x63,0xae,0x7d,0xbd,0xb6,0x67,0x2d,0xb2,0x28,0x4d,0xb8,0xc1, + 0x25,0x32,0xbf,0xb8,0x28,0x4e,0xb8,0xaa,0x2e,0x6a,0xbe,0x5f,0x70,0xae,0x21,0x4b, + 0xb7,0x3f,0x2e,0x36,0x28,0x52,0xb8,0xab,0x2e,0x6b,0x4c,0x5f,0x79,0xae,0x23,0x2b, + 0xb7,0x2f,0x2e,0x4a,0x28,0x57,0xb8,0xac,0xb0,0x6b,0x70,0x5f,0x23,0xae,0x25,0xbd, + 0xb8,0x5f,0x2e,0x66,0x28,0x5e,0xb8,0xae,0x7e,0x6b,0xba,0x5f,0x2f,0xbd,0x23,0x38, + 0xb8,0xc1,0x2e,0x76,0x28,0x63,0x66,0xaf,0xb0,0x6c,0x50,0x5f,0xab,0xae,0x2b,0x2b, + 0xb9,0x2f,0x2e,0x2c,0x28,0x68,0x66,0xb0,0xc0,0x6c,0x78,0x5f,0xb5,0xae,0x2d,0xbd, + 0xba,0x5f,0x2e,0xb0,0x28,0x6c,0xb8,0xb2,0x3e,0x6c,0xaa,0x5f,0xbd,0xae,0x2f,0xbd, + 0xba,0xb9,0x2e,0xc2,0x28,0x71,0x66,0xb3,0x5e,0x6d,0x40,0x60,0x35,0xae,0xa4,0x6b, + 0xbb,0x67,0x2f,0x40,0x28,0x76,0x66,0xb4,0x6e,0x6b,0x44,0x51,0x76,0xab,0x42,0xbd, + 0x35,0xa1,0x72,0x52,0x21,0x5b,0x65,0x3c,0x3e,0x34,0x34,0x51,0xaf,0xab,0x4c,0x6b, + 0x38,0x37,0x72,0xac,0x21,0x6f,0x65,0x40,0x2e,0x35,0x38,0x52,0x55,0xab,0x5a,0x6b, + 0x3b,0x77,0x73,0x2a,0x21,0x2b,0x65,0x47,0x2e,0x36,0x30,0x52,0x6a,0xab,0x61,0x4b, + 0x3d,0x3f,0x74,0x3a,0x21,0xa7,0x65,0x4a,0x4e,0x37,0x74,0x52,0x22,0xab,0x65,0xbd, + 0x3e,0x57,0x74,0x5c,0x21,0xb1,0x65,0x4c,0x2e,0x38,0x34,0x52,0xa7,0xab,0x6c,0x4b, + 0x3f,0xb1,0x74,0x30,0x21,0xbb,0x65,0x4f,0x4e,0x38,0xa6,0x51,0x3e,0xab,0x7d,0x4b, + 0x44,0x3f,0x75,0xac,0x22,0x4d,0x65,0x58,0x5e,0x3b,0x34,0x53,0x72,0xab,0x21,0xbd, + 0x45,0x57,0x76,0x3c,0x22,0x57,0x65,0x5a,0x2e,0x3b,0x74,0x53,0x25,0xab,0x28,0x4b, + 0x46,0xb1,0x76,0x70,0x22,0x61,0xb7,0x5e,0x3e,0x3c,0x64,0x53,0xbf,0xab,0xa4,0x4b, + 0x49,0x77,0x77,0x72,0x22,0x21,0xb7,0x65,0x7e,0x3e,0x54,0x54,0x61,0xab,0xaf,0x6b, + 0x4c,0x4f,0x77,0xae,0x22,0x2e,0x65,0x68,0x7e,0x3f,0x34,0x54,0x29,0xab,0xc0,0x4b, + 0x50,0x77,0x75,0x40,0x23,0x35,0xb7,0x73,0x3e,0x42,0x64,0x55,0x5e,0xac,0x3d,0x4b, + 0x54,0x57,0x79,0xbc,0x23,0x4f,0xb7,0x78,0xc0,0x43,0x38,0x55,0x79,0xac,0x48,0x4f, + 0x25,0x79,0x4d,0x60,0xb8,0x23,0x31,0xa3,0x39,0xb1,0x2f,0x4e,0x28,0x78,0xb8,0xb5, + 0x4e,0x6d,0x7c,0x60,0x44,0xae,0xa8,0x4b,0xbc,0x5f,0x2f,0x5e,0x28,0x7c,0xb8,0xb6, + 0x5e,0x6d,0xb6,0x60,0x4f,0xae,0xaa,0xbd,0xbd,0x37,0x2f,0x74,0x28,0x22,0x66,0xb7, + 0x70,0x5b,0x57,0x2f,0x32,0xbd,0x2a,0x31,0x71,0x34,0x44,0x56,0x31,0xac,0x51,0x6b, + 0x59,0x57,0x7b,0x42,0x23,0x79,0x65,0x23,0x4e,0x45,0x28,0x56,0x4d,0xac,0x59,0x4b, + 0x5b,0x57,0x7b,0x2a,0x23,0x29,0xb7,0x28,0x3e,0x46,0xaa,0x56,0x6d,0xac,0x60,0xbd, + 0x5d,0x37,0x7c,0x36,0x23,0xa7,0x65,0x2a,0x4e,0x47,0x60,0x56,0x25,0xac,0x67,0x4b, + 0x5e,0xa9,0x7c,0x7a,0x23,0xb5,0xb7,0x2f,0x3e,0x48,0x78,0x56,0xb7,0xac,0x6f,0x4b, + 0x51,0x37,0x7d,0x34,0x24,0x32,0xb7,0xa3,0x2e,0x49,0x64,0x57,0x3e,0xac,0x74,0x2b, + 0x62,0x37,0x7d,0x5a,0x24,0x3c,0x65,0xa6,0x7e,0x49,0xba,0x57,0x50,0xac,0x79,0x4b, + 0x63,0x3f,0x7d,0x7c,0x24,0x45,0x65,0xa8,0x4e,0x4a,0x64,0x57,0x61,0xac,0xa1,0x4b, + 0x64,0xa1,0x7d,0xba,0x24,0x4f,0x65,0xaa,0x2e,0x4b,0x44,0x57,0x76,0xac,0x30,0x4b, + 0x68,0xb1,0xa1,0x32,0x24,0x73,0x65,0xb4,0x7e,0x4d,0x68,0x58,0x40,0xac,0xa7,0x4b, + 0x6a,0x3f,0xa1,0x62,0x24,0x7d,0xb7,0xb6,0x7e,0x4e,0x34,0x58,0x59,0xac,0xad,0x6b, + 0x6b,0x2f,0xa1,0x2c,0x24,0x2b,0x65,0xba,0x3e,0x4e,0xb6,0x58,0x75,0xac,0xb4,0x6b, + 0x6d,0x77,0xa2,0x44,0x24,0xab,0x65,0xbe,0x3e,0x50,0x38,0x58,0xa6,0xac,0xbe,0x4b, + 0x6f,0xb1,0xa2,0xa4,0x24,0xbd,0x65,0xc2,0x7e,0x50,0xba,0x58,0xc2,0xac,0x71,0x6f, + 0x25,0x79,0x4d,0x50,0xb8,0x23,0x33,0x51,0x31,0x77,0x21,0x6c,0x25,0x51,0x66,0x39, + 0x7e,0x53,0xb6,0x59,0xa3,0xad,0x4a,0x4b,0x77,0xb1,0x22,0x30,0x25,0x6d,0x66,0x40, + 0x4e,0x54,0xb6,0x59,0xc2,0xad,0x51,0x4b,0x79,0x47,0x23,0x42,0x25,0x75,0xb8,0x42, + 0x6e,0x55,0x68,0x5a,0x45,0xad,0x5b,0x6b,0x7d,0xa9,0x24,0x52,0x25,0xad,0x66,0x4c, + 0x7e,0x57,0xc2,0x5a,0xab,0xad,0x6c,0x4b,0xa2,0x37,0x24,0xb4,0x25,0xc0,0xb8,0x50, + 0x2e,0x51,0x44,0x5b,0x39,0xad,0x74,0x4b,0x22,0x57,0x25,0x5c,0x26,0x3c,0xb8,0x58, + 0x7e,0x5a,0xba,0x5b,0x71,0xad,0x22,0x4b,0x25,0xa9,0x26,0x4c,0x26,0x58,0xb8,0x5b, + 0x4e,0x5b,0xa6,0x5b,0x2a,0xad,0x28,0x4b,0x27,0x37,0x26,0x7c,0x26,0x65,0x66,0x5e, + 0x4e,0x5c,0x60,0x5b,0xb0,0xad,0x2e,0x4b,0x28,0x5f,0x26,0xb4,0x26,0x6f,0x66,0x61, + 0x7e,0x5d,0x48,0x5c,0x38,0xad,0xa5,0x4b,0x29,0xa1,0x27,0x52,0x26,0x23,0xb8,0x6a, + 0x3e,0x5f,0x58,0x5c,0x7d,0xad,0xb7,0x4b,0x2e,0x47,0x28,0x62,0x26,0xaf,0xb8,0x6c, + 0x6e,0x5f,0xba,0x5c,0xa7,0xad,0xbc,0x6b,0x2f,0x77,0x28,0x2a,0x26,0xbd,0x66,0x6f, + 0x30,0x5f,0x28,0xb2,0x26,0xbf,0xb8,0x51,0x3e,0x61,0x38,0x5d,0x35,0xae,0x33,0x4b, + 0xa4,0x37,0x29,0x54,0x27,0x3a,0xb8,0x73,0x7e,0x61,0x28,0x5d,0x4d,0xae,0x39,0x4f, + 0x25,0x79,0x4d,0x40,0xb8,0x23,0x33,0x51,0x33,0x57,0x29,0x2c,0x27,0x4d,0x66,0x78, + 0x4e,0x62,0xb6,0x5d,0x71,0xae,0x42,0x6b,0xa7,0x77,0x2a,0x44,0x27,0x56,0xb8,0x7a, + 0x2e,0x63,0x78,0x5d,0x25,0xae,0x46,0x6b,0xa8,0x77,0x2a,0x6a,0x27,0x64,0xb8,0x7e, + 0x4e,0x64,0x74,0x5d,0xb4,0xae,0x4e,0x4b,0xab,0x4f,0x2b,0x3c,0x27,0x77,0x66,0x22, + 0x2e,0x65,0x74,0x5e,0x45,0xae,0x58,0x6b,0xac,0xc1,0x2b,0x74,0x27,0x25,0x66,0x26, + 0x7e,0x66,0x74,0x5e,0x6a,0xae,0x5f,0xbd,0xaf,0x57,0x2c,0x3c,0x27,0xa7,0x66,0x2a, + 0x7e,0x67,0x78,0x5e,0x25,0xae,0x66,0xbd,0xb0,0xa1,0x2c,0x72,0x27,0xb5,0x66,0x2e, + 0x3e,0x68,0x74,0x5e,0xb8,0xbd,0xb8,0x30,0x7e,0x68,0xba,0x5d,0x31,0xae,0x72,0x4b, + 0xb4,0x3f,0x2d,0x62,0x28,0x3d,0xb8,0xa6,0x7e,0x6a,0x34,0x5f,0x59,0xae,0x7b,0x6b, + 0xb5,0x2f,0x2d,0x2c,0x28,0x4b,0x66,0xa9,0x2e,0x6a,0xa6,0x5f,0x6d,0xae,0x22,0x4b, + 0xb7,0x6f,0x2e,0x44,0x28,0x59,0x66,0xad,0x4e,0x6b,0x24,0x5f,0x27,0xae,0x26,0xbd, + 0xb8,0x77,0x2e,0x64,0x28,0x61,0x66,0xaf,0x4e,0x6c,0x40,0x5f,0xa8,0xae,0x2b,0x6b, + 0xb9,0xa9,0x2e,0xa4,0x28,0x6b,0x66,0xb2,0x7e,0x6c,0xba,0x60,0x32,0xae,0xa5,0x4b, + 0xbb,0xa1,0x2f,0x4a,0x28,0x79,0x66,0xb6,0x3e,0x6d,0xaa,0x60,0x4c,0xae,0xaa,0x6f, + 0x2d,0xab,0x42,0x5f,0x36,0xbd,0x7c,0x31,0x21,0x38,0x31,0x34,0xa3,0x32,0x69,0x31, + 0x6f,0x31,0x44,0x71,0x36,0xb3,0x32,0x2d,0x31,0x70,0x31,0x42,0xa3,0x35,0xbb,0x32, + 0x5f,0x31,0x60,0x71,0x3d,0xb3,0x34,0x6d,0x31,0xba,0x31,0x50,0xa3,0x39,0x69,0x33, + 0x4f,0x31,0x7c,0x71,0x44,0xb3,0x36,0x4d,0x32,0x60,0x31,0x5e,0xa3,0x3c,0xbb,0x34, + 0x3f,0x31,0xaa,0x71,0x4b,0xb3,0x37,0xbf,0x32,0xaa,0x31,0x6c,0xa3,0x40,0x69,0x34, + 0xc1,0x32,0x34,0x71,0x52,0xb3,0x39,0x2d,0x33,0x50,0x31,0x7a,0xa3,0x43,0xbb,0x35, + 0xb1,0x32,0x50,0x71,0x59,0xb3,0x3b,0x6d,0x33,0x28,0x31,0x28,0xa3,0x47,0x69,0x36, + 0x2f,0x32,0x6c,0x71,0x60,0xb3,0x3d,0x4d,0x34,0x40,0x31,0xa8,0xa3,0x4a,0xbb,0x37, + 0xa1,0x32,0x28,0x71,0x67,0xb3,0x3e,0xbf,0x34,0x78,0x31,0xb6,0xa3,0x4e,0x69,0x38, + 0x6f,0x32,0xb6,0x71,0x6e,0xb3,0x40,0x2d,0x34,0xc2,0x32,0x32,0xa3,0x51,0xbb,0x39, + 0x5f,0x33,0x40,0x71,0x75,0xb3,0x42,0x6d,0x35,0x68,0x32,0x40,0xa3,0x55,0x69,0x3a, + 0x4f,0x33,0x5c,0x71,0x7c,0xb3,0x44,0x4d,0x35,0xb2,0x32,0x4e,0xa3,0x58,0xbb,0x3b, + 0x3f,0x33,0x78,0x71,0x23,0xb3,0x45,0xbf,0x36,0x58,0x32,0x5c,0xa3,0x5c,0x69,0x3b, + 0xc1,0x33,0xa6,0x71,0x2a,0xb3,0x47,0x2d,0x36,0x30,0x32,0x6a,0xa3,0x5f,0xbb,0x4f, + 0x21,0x59,0x5c,0xbf,0x32,0x4f,0x24,0xb1,0x65,0xbd,0x4e,0x52,0xbc,0x59,0x59,0x3b, + 0x5f,0xbd,0x7e,0xad,0x25,0xb5,0x26,0x32,0x46,0x67,0x36,0x66,0x67,0x5e,0xa4,0xaf, + 0xae,0x64,0x4f,0xb1,0xaa,0xba,0x2a,0xac,0x77,0x30,0x25,0x33,0xa1,0x61,0x40,0x40, + 0x5e,0x2d,0x39,0x3a,0x34,0x5c,0xa5,0x42,0x39,0x72,0x2b,0x46,0x79,0x77,0x64,0xb4, + 0x30,0x2d,0x6c,0x7e,0x40,0xad,0xa9,0x58,0x66,0x44,0x22,0x57,0x35,0x5b,0x4b,0x7d, + 0x37,0x54,0x37,0xbb,0xae,0xaa,0x2d,0xa6,0x59,0x3e,0xad,0x44,0x23,0x75,0xab,0xb5, + 0x29,0x4b,0x6d,0x45,0x23,0x30,0x47,0x40,0x36,0xa2,0x4a,0x63,0xb5,0x60,0x4f,0x5c, + 0xaf,0x6c,0x38,0x31,0xa6,0x54,0x4a,0xc0,0x77,0x6c,0xc0,0x22,0x48,0x68,0x24,0xa1, + 0xa3,0x2c,0x30,0xae,0xb8,0x6d,0x33,0x40,0x60,0xbe,0xab,0x73,0xbf,0xa1,0xa3,0x3e, + 0xab,0x44,0x77,0x36,0xae,0x76,0x55,0xb5,0x27,0x2b,0x6b,0x6b,0x26,0xbe,0x2a,0x77, + 0x77,0xb8,0x3e,0xb4,0xb0,0x6e,0x47,0xb3,0x72,0x35,0x56,0x4e,0x38,0x25,0x56,0xbe, + 0x36,0x43,0x6a,0x5f,0x5b,0x5d,0x44,0x3c,0x22,0xbe,0x37,0xbf,0xa4,0x41,0x29,0x7d, + 0x57,0x5f,0x76,0xa1,0x75,0x66,0x37,0xb0,0xa4,0x74,0x27,0xa9,0xb8,0xb4,0x2e,0x27, + 0x38,0x6a,0xac,0xbe,0x60,0x79,0x45,0x63,0x76,0x45,0x23,0x5c,0x50,0xbd,0x72,0x52, + 0x60,0xbb,0x35,0x77,0x24,0x27,0x48,0x37,0x58,0x5f,0xb1,0x31,0x71,0x7a,0x57,0x43, + 0x26,0x2b,0x79,0x41,0x29,0xb1,0x47,0x65,0x46,0xa3,0x2e,0x6c,0x68,0x60,0x3f,0x7c, + 0xb7,0x23,0xc0,0xb1,0xa4,0x60,0x2c,0x40,0x58,0x5d,0x4a,0xae,0xa3,0x6f,0x4d,0xb2, + 0x2c,0x3c,0xb9,0x49,0xc2,0x5b,0x51,0x55,0x49,0x45,0x77,0x3b,0x72,0x75,0x77,0xb4, + 0x70,0xa7,0x7a,0x4c,0x47,0x54,0xaa,0x4a,0x65,0xba,0x2e,0x4d,0x3c,0x59,0x6d,0x5b, + 0x45,0xbd,0xa3,0xb1,0xa4,0x50,0x49,0x5e,0x37,0x3a,0xa8,0x7c,0xad,0x65,0x75,0x5e, + 0xbd,0x5c,0x27,0x3d,0xb9,0xae,0x4e,0x21,0xba,0x2e,0x47,0x36,0x7c,0x73,0x31,0x50, + 0x4b,0x6d,0xa1,0x48,0x46,0x71,0x46,0x65,0x56,0x2b,0x76,0x5f,0x32,0xbf,0xaf,0xb2, + 0x7c,0x7c,0xc1,0xae,0x42,0x45,0x45,0x48,0x66,0x4b,0x46,0x6a,0xab,0x5f,0xb7,0x7d, + 0x57,0xb6,0x40,0x65,0xa7,0xb6,0x2a,0x35,0x37,0xb8,0x62,0xa3,0x2c,0x6d,0xba,0x62, + 0x22,0xb7,0x69,0x36,0xbc,0x6f,0xa7,0x39,0x2a,0x48,0xa5,0x55,0xc1,0x58,0x6e,0x7a, + 0xa9,0x5b,0x74,0xbf,0x2e,0xc0,0x48,0x71,0xa9,0x3b,0x2e,0x23,0xb4,0x71,0x26,0x41, + 0xa7,0x6d,0x6a,0xae,0x44,0x46,0xa9,0x7c,0xa7,0xb7,0x76,0x51,0xb3,0x64,0x21,0x3e, + 0x31,0x7b,0x77,0x4b,0x23,0x7a,0x45,0x25,0x60,0x60,0x45,0x40,0xbf,0xa4,0x6e,0x52, + 0x71,0x41,0x33,0xbb,0xba,0x39,0x55,0x2b,0x7a,0xb8,0x5e,0x55,0x60,0x61,0x6d,0x22, + 0xb7,0x73,0x73,0x23,0xa4,0xb9,0x29,0xbc,0x57,0x52,0xb4,0x22,0x35,0x66,0x61,0x3e, + 0xbb,0x75,0x37,0x74,0x3a,0x7b,0x56,0x71,0x26,0x74,0xb8,0xa8,0x5d,0x6a,0x32,0x3f, + 0x28,0x7c,0xb8,0x2b,0xc1,0x25,0xa3,0x42,0x69,0x7c,0x23,0x47,0xa6,0x79,0x45,0x64, + 0x29,0x7c,0x3a,0xb7,0xaf,0x5b,0x4c,0xad,0x38,0xac,0xac,0xc1,0x54,0x76,0x50,0x3b, + 0x45,0x24,0x37,0x6b,0xbe,0x3d,0xa5,0xad,0xbc,0x45,0x63,0x58,0x5d,0x58,0x65,0xac, + 0xb4,0xb5,0x73,0xbf,0x21,0x34,0x45,0x69,0x46,0x47,0x66,0x55,0xc2,0x5a,0x2d,0x3b, + 0xbb,0x4b,0xa5,0x65,0x2f,0x79,0x28,0xb1,0xa9,0x3e,0x62,0x74,0xa1,0x63,0x4c,0x3d, + 0x27,0xbe,0x4b,0xb9,0xa9,0xbd,0x4a,0x23,0xb9,0x75,0x4e,0x2c,0x36,0x69,0x6d,0x5f, + 0x3a,0xbe,0x23,0x7b,0xb7,0xa8,0x4e,0x4c,0x48,0x5c,0x62,0xb4,0xaf,0x6d,0x68,0xb2, + 0x60,0x64,0xac,0x3b,0xc0,0x7a,0x30,0x53,0x29,0x32,0xc1,0x31,0x4c,0x71,0xa8,0x21, + 0x67,0x65,0x5d,0x5c,0x40,0x3b,0xa7,0x4d,0x4a,0x49,0x3f,0x61,0x69,0x7d,0x47,0x24, + 0x5f,0x75,0xb2,0x35,0xa2,0x5a,0x26,0x58,0x56,0x73,0x76,0x63,0xa6,0x5e,0x22,0x7c, + 0x7c,0x74,0x31,0x55,0xa5,0x52,0x4b,0x47,0x40,0x60,0x45,0x40,0xbf,0xa7,0x6e,0x52, + 0x71,0x41,0x34,0x21,0xab,0x26,0x4c,0x7a,0x78,0x5c,0xa4,0xb0,0xa1,0x6d,0x40,0x60, + 0x60,0x2c,0xb4,0x27,0xc1,0x6f,0x50,0x72,0x39,0x26,0x37,0x45,0x70,0x77,0x54,0x23, + 0xaf,0x55,0xba,0x79,0x24,0xb7,0x25,0xac,0x56,0x54,0x76,0x5a,0xbd,0x5c,0x65,0x5c, + 0x47,0x53,0xaf,0xb9,0x2d,0x26,0x28,0x2f,0xb9,0x42,0x2e,0x7b,0x76,0x63,0x2d,0x7d, + 0x2b,0x34,0x4b,0x2f,0xaa,0xa3,0x2b,0x68,0x27,0xaa,0xb4,0xae,0x41,0x6c,0x50,0xa1, + 0xb6,0xbe,0xad,0x59,0xc2,0x32,0xa3,0x45,0x49,0x35,0x6f,0x34,0xa9,0x72,0x70,0x61, + 0x60,0x35,0x40,0x34,0x36,0x49,0xa5,0x47,0x79,0x76,0x47,0x45,0x34,0xbf,0xaa,0x42, + 0xb5,0xb7,0xa2,0x40,0x47,0x64,0xa9,0x4c,0x3a,0x21,0xa1,0x70,0xb0,0x5b,0x57,0xaf, + 0x30,0x44,0x4b,0x4f,0xab,0x51,0x4f,0x77,0xbb,0xa6,0x33,0x6c,0xb3,0x5c,0x4a,0x3b, + 0xb4,0x3b,0xb7,0x3d,0xa9,0x29,0x2b,0x4a,0x27,0x78,0xbc,0x2d,0x59,0x6b,0x58,0x22, + 0x3f,0x55,0xb0,0x21,0xaf,0x33,0x6f,0x66,0x3a,0x25,0xb0,0x4f,0xaf,0x59,0x2d,0x5b, + 0x4a,0xbd,0x7a,0x59,0x2c,0xb5,0x28,0x5b,0x37,0x34,0x66,0x72,0xb4,0x62,0x5a,0xaf, + 0x64,0x2c,0x48,0x63,0xb6,0x6e,0x4f,0x25,0x69,0x66,0x3b,0x4a,0x40,0x7c,0x7d,0x7a, + 0xb1,0x3b,0xaf,0x41,0xa5,0xa1,0x4a,0xbe,0xa2,0x60,0x45,0x40,0xbf,0x2a,0x6e,0x52, + 0x71,0x41,0x34,0x53,0xbc,0xac,0xa3,0xb3,0xbb,0x26,0x7b,0x46,0xab,0x77,0x24,0x23, + 0x35,0x2d,0x7e,0x3e,0x49,0xac,0x28,0x2e,0x37,0xa2,0xc1,0x3c,0xb0,0x79,0x32,0x70, + 0x4b,0x33,0x77,0x61,0x2c,0xb9,0x47,0xaf,0x67,0x40,0xac,0x21,0x6f,0x66,0x24,0x3f, + 0x33,0xbe,0x24,0x61,0xb7,0x21,0x2f,0xad,0x38,0xc1,0x47,0x38,0x71,0x75,0xad,0xb4, + 0x7e,0xa7,0x25,0x22,0x4a,0x48,0x45,0x7c,0x27,0x38,0x62,0x75,0x33,0x79,0x53,0x7a, + 0xb7,0x7b,0x75,0x73,0x24,0xaf,0x27,0x4d,0x66,0xba,0x32,0x7d,0x69,0x67,0xa9,0xa1, + 0x3d,0x44,0x7c,0x5d,0xb6,0x59,0x4f,0xc1,0x49,0x33,0xb1,0x59,0xa9,0x5a,0xa9,0xaf, + 0x67,0x2c,0xc0,0x5d,0xa1,0x71,0x45,0x3a,0x56,0x77,0xbc,0x61,0x5b,0x61,0x3a,0xc1, + 0x21,0x3f,0x79,0xab,0xac,0x51,0xa9,0xb4,0xb8,0x29,0xa4,0xbe,0x62,0x71,0x48,0xb4, + 0xbd,0x53,0x6c,0x53,0x21,0x27,0x46,0x46,0x76,0x59,0x62,0x68,0x51,0x5f,0xbc,0xae, + 0x23,0x24,0x46,0x4d,0xa8,0x41,0x2b,0x3a,0x67,0x28,0x36,0xa8,0x3f,0x6c,0x6c,0xb1, + 0xb8,0xb6,0xba,0xb5,0xc2,0x21,0x51,0x5a,0xab,0x5f,0xc1,0x3d,0x34,0x78,0x24,0x22, + 0xbf,0x25,0x71,0x38,0x4a,0x5b,0xa9,0x26,0x6a,0x29,0xa4,0x4d,0x76,0x58,0x48,0x5a, + 0xaf,0x6b,0x6c,0xa5,0xa2,0x6c,0x25,0x70,0xb2,0x60,0x45,0x40,0xbf,0xbf,0x6e,0x52, + 0x71,0x41,0x32,0x31,0x24,0xb4,0x25,0xbf,0x26,0x4d,0x6a,0x59,0x45,0x5c,0x4e,0x5b, + 0xbd,0x43,0x30,0x3f,0x2c,0x74,0x28,0x6b,0x36,0xba,0xb4,0x74,0x29,0x62,0x45,0x5d, + 0x2c,0x74,0x50,0x23,0xaa,0xa8,0x2b,0x5b,0x37,0x2f,0x4a,0x28,0xaf,0x66,0x21,0x7e, + 0x7a,0xae,0x6a,0xb3,0xb3,0xae,0x2d,0x23,0xaa,0x49,0x3e,0xac,0x70,0x6c,0xbd,0x5f, + 0xba,0x64,0xac,0xc1,0xc0,0x35,0xa3,0x50,0x79,0x39,0x47,0x35,0x3b,0x72,0x68,0xb3, + 0x57,0x45,0x51,0xaa,0x3c,0xc1,0x54,0x49,0x39,0xb3,0x77,0x52,0x62,0x79,0x4a,0x43, + 0x5c,0x65,0x7c,0x56,0x4a,0x53,0xa9,0x2e,0x4a,0xa9,0x2f,0x6c,0x4d,0xa2,0x73,0xad, + 0xb7,0x33,0xb6,0x46,0x34,0x21,0x56,0xb8,0x6a,0x6e,0x23,0x6d,0x4c,0x5b,0x57,0x40, + 0x5b,0x54,0xc2,0x64,0x39,0xa9,0xa6,0x2d,0x4a,0x31,0x32,0x61,0x79,0x5f,0x57,0x3d, + 0x6a,0xbe,0xad,0x2d,0x2c,0x3a,0x28,0xb2,0x48,0x26,0x6a,0xb8,0x3f,0x72,0x5c,0x42, + 0xa5,0x63,0x71,0xb3,0x23,0xbf,0x45,0xa1,0xb8,0x49,0x52,0x60,0xb6,0x62,0x4d,0x7d, + 0x61,0x24,0x60,0x37,0xb0,0x4c,0x2e,0xb7,0x26,0x4b,0x2e,0xa9,0xab,0x73,0x2e,0x22, + 0xb0,0x5d,0x25,0xb7,0xaa,0xa4,0x2b,0xa1,0x37,0xbe,0x67,0x46,0x7d,0x78,0x43,0xb6, + 0x41,0x68,0xa8,0xb1,0xa9,0x6d,0x4b,0xb9,0x79,0xaa,0x25,0x3b,0x3b,0xc2,0x71,0x58, + 0x7a,0x29,0x50,0xb6,0xae,0x5a,0x7c,0x5b,0xb7,0xb5,0xaa,0x3d,0xa6,0xc0,0x2b,0x6e, + 0x58,0x4b,0x46,0xb4,0x6b,0x6e,0x62,0x60,0x60,0xb6,0xb4,0xae,0x35,0x78,0xa5,0x5f, + 0x69,0xac,0x27,0x52,0x59,0x7b,0xc1,0xad,0x55,0x6b,0x2e,0x3f,0xb8,0x61,0x4f,0xbc, + 0x79,0x49,0xbd,0x55,0x39,0xbf,0x27,0x3e,0x55,0x2b,0x76,0x47,0x23,0x74,0x25,0x74, + 0xb9,0x47,0xa4,0x21,0xb8,0x65,0xa9,0x63,0xaf,0x5b,0x73,0x79,0x23,0xb5,0x45,0x29, + 0x67,0x3e,0x42,0x7b,0x6a,0x65,0x70,0xb0,0x48,0xb6,0x22,0x47,0xbe,0x2d,0xa3,0x2e, + 0x69,0x4e,0x7b,0x43,0x6a,0x76,0xb7,0x62,0xb7,0x7d,0xa7,0x44,0xbc,0xa8,0x44,0x23, + 0xb8,0xa1,0x7a,0x79,0x42,0x64,0x54,0x7e,0x54,0x54,0x23,0x33,0xbc,0x2f,0x2f,0x66, + 0x49,0x44,0xbd,0x41,0xc2,0x75,0x48,0xb4,0x41,0x28,0xa7,0x7e,0x44,0x36,0x24,0xbc, + 0x56,0x4a,0x46,0x71,0xb4,0x62,0x4d,0x7e,0x72,0x24,0xb8,0x7d,0xc0,0x7d,0x44,0x7d, + 0x56,0x3f,0xb4,0xb2,0x60,0x71,0x31,0x5a,0xb3,0xb5,0x6e,0xaf,0x22,0x71,0x45,0x6c, + 0x76,0x5c,0x52,0x5d,0x6c,0x5c,0xc1,0x7b,0xc2,0xa5,0x2d,0x59,0x2a,0x54,0x27,0x63, + 0x66,0xa1,0x42,0x68,0x41,0x5f,0x34,0x7c,0x30,0x3b,0xb8,0xbf,0x2f,0xa9,0x48,0xb3, + 0x37,0x47,0x2e,0x7c,0xa6,0xbd,0xbc,0x51,0xc2,0xa9,0x2c,0xad,0x3d,0x32,0x31,0x34, + 0xa9,0x69,0xc0,0xa1,0x2f,0x64,0xb5,0xb0,0x3d,0x54,0x52,0x6f,0xad,0x4e,0x4b,0xa7, + 0x67,0xa6,0xb8,0x2a,0x33,0x67,0x62,0xb0,0x2a,0x74,0x7d,0x7d,0xb7,0x46,0x4e,0x41, + 0x58,0x56,0x3e,0xab,0xbb,0x6b,0x30,0xb1,0x29,0x3c,0xa6,0x2f,0xbb,0x51,0x2f,0x59, + 0xba,0x7b,0x52,0xb5,0xbd,0x6d,0xa8,0x60,0x61,0x34,0xb9,0xb7,0xc0,0x75,0x50,0xa3, + 0xab,0x32,0x67,0x32,0x3d,0x71,0x37,0x42,0x55,0xbf,0x5e,0x42,0x3d,0x6c,0xa6,0x55, + 0x4a,0x4a,0x43,0x58,0xa5,0x7d,0x45,0x64,0x41,0xb7,0xab,0x50,0x4b,0x63,0xa9,0x23, + 0x5a,0xb9,0x5a,0xbd,0xb9,0x58,0x73,0x5b,0xa1,0xb6,0x3a,0x59,0xab,0xab,0xa7,0x66, + 0x66,0x5a,0xac,0x53,0x3c,0xbf,0x74,0x50,0x42,0xa5,0xae,0x7d,0xa4,0x37,0xc1,0x6a, + 0xb9,0x48,0xc0,0x75,0x3f,0xbf,0x74,0xc2,0x42,0x38,0xa7,0x54,0xbc,0x3a,0x6f,0x53, + 0x70,0x7e,0x3f,0x51,0x45,0xbf,0x76,0x70,0x42,0x68,0xa7,0x60,0xbc,0x3d,0x6f,0x70, + 0xab,0x21,0xaa,0xb5,0x4b,0xbf,0x77,0xc2,0x42,0xaa,0xa9,0x5d,0xa9,0x3f,0xc1,0x5b, + 0xaa,0x39,0xbe,0xb5,0x50,0xbf,0xbb,0xb5,0xa5,0x38,0xa8,0x4f,0xa6,0x6e,0x49,0xad, + 0xb8,0x4a,0x38,0xb6,0x40,0x64,0x29,0x3e,0x48,0x4c,0x69,0x76,0xbc,0x4c,0x2e,0x55, + 0x70,0x7a,0x44,0xb5,0x56,0xbf,0xc0,0x51,0x21,0x28,0xbf,0x33,0x3e,0x6f,0x7a,0x30, + 0x43,0x70,0xa8,0xa8,0x39,0xa8,0x46,0x74,0x36,0x22,0x54,0xb5,0x5a,0xbf,0x7b,0x30, + 0x43,0x30,0xa7,0x2a,0xbc,0x52,0x24,0x76,0x30,0x7c,0x4e,0x53,0x79,0x5d,0xbf,0x3d, + 0xb4,0x35,0x31,0x2e,0xbc,0x6a,0x27,0x5f,0x76,0xb7,0xac,0x7a,0x7b,0x6d,0xc0,0x6f, + 0x26,0xbe,0x62,0x72,0x79,0x62,0x4f,0xaf,0x6f,0x6b,0xb2,0x5f,0x2c,0x26,0x45,0x76, + 0xc2,0x7c,0x22,0x63,0x5a,0x60,0x75,0x7d,0x34,0x38,0xa7,0xa6,0xbc,0x4a,0x6f,0x5c, + 0x48,0x52,0xa2,0xb5,0x65,0xbf,0x7e,0x70,0x44,0x68,0xa7,0xb2,0xbc,0x4d,0x6f,0x6b, + 0x4a,0x7a,0xaa,0xb5,0x6b,0xbf,0xa1,0xc2,0x44,0xaa,0xa7,0xbe,0xbc,0x50,0x6f,0x58, + 0xc2,0x7b,0x34,0xb5,0x72,0xbf,0x21,0x30,0x45,0x50,0xaa,0x37,0xb2,0x53,0x6f,0x59, + 0x30,0x7e,0xc1,0x34,0x63,0x78,0xbf,0x5d,0x35,0x68,0xa8,0x40,0xbc,0x64,0x51,0x5a, + 0x40,0x7b,0x58,0xb5,0x70,0x5f,0x43,0x30,0x45,0x30,0xa8,0x4a,0xbc,0x57,0xc1,0x5a, + 0xb2,0x7b,0x70,0xb5,0x21,0xbf,0x25,0x70,0x4f,0x7b,0xab,0x7c,0x3b,0x6e,0x2a,0xa5, + 0x38,0xad,0x7c,0xb5,0x24,0xbf,0x26,0x50,0x46,0x60,0xa8,0x5e,0xbc,0x5c,0xc1,0x70, + 0x29,0x33,0xa6,0xb5,0x2a,0xbf,0xa2,0x3c,0xa1,0x5c,0x61,0xc1,0x24,0x2e,0x4c,0x74, + 0x56,0x7a,0x2b,0x38,0xb8,0x33,0x73,0x30,0xb3,0x3a,0xa8,0x4e,0x67,0x58,0x42,0x7a, + 0xbd,0xb5,0x25,0x61,0x28,0xa6,0x27,0x3b,0xa8,0xc0,0x2e,0x7c,0xa9,0x63,0xa3,0x3e, + 0x5c,0x5c,0x5e,0x4b,0xb1,0xb9,0x2e,0xc0,0xba,0x21,0xbc,0xbc,0x2f,0x6f,0xb5,0xb3, + 0xac,0x45,0x51,0xa8,0x42,0x5e,0xa7,0xba,0x67,0x56,0xbc,0x2f,0xbd,0x6a,0xb1,0x3f, + 0x26,0x55,0x72,0x5d,0x26,0x57,0x26,0xba,0x57,0x3f,0x22,0x7a,0x78,0x64,0x69,0x5e, + 0x26,0x2c,0x6a,0x2b,0xb2,0x2d,0x2c,0xc1,0x38,0x5b,0x3f,0x32,0x6e,0x71,0x21,0x61, + 0x29,0x4d,0x58,0x40,0x3b,0x5e,0x53,0xa6,0xbc,0x4d,0x7e,0x29,0x24,0x6b,0x26,0x40, + 0x61,0xbf,0x6a,0x6c,0x41,0x39,0x46,0x51,0x56,0x73,0xa4,0x61,0xa5,0x60,0x32,0xaf, + 0x5a,0xb6,0x44,0x71,0xab,0x6c,0x4e,0x6b,0xaa,0xa8,0xa1,0x40,0xab,0xa2,0x69,0xac, + 0xab,0x73,0x2e,0x2d,0x28,0x44,0x27,0x52,0x26,0xa8,0x76,0x69,0x67,0x60,0x52,0x5c, + 0xb6,0x54,0x3c,0x73,0xa7,0x2a,0x2d,0xc2,0x59,0x3d,0x5f,0x42,0x69,0x77,0x53,0x23, + 0xb0,0x2d,0xbd,0x3b,0x2c,0x2c,0x28,0xb9,0x67,0x31,0x7a,0x51,0x31,0x5a,0x3d,0x3b, + 0x52,0x63,0x2d,0xad,0x29,0x5c,0x27,0x32,0xa8,0xa6,0x32,0x6a,0xb9,0x5f,0x53,0xae, + 0x2b,0x63,0xbd,0x55,0x30,0x2f,0x49,0x33,0x47,0x4d,0x56,0x77,0x48,0x63,0x41,0xc1, + 0x21,0xab,0x5c,0xc1,0x3e,0xbf,0x2b,0x49,0x57,0x27,0xa4,0x2b,0x52,0x68,0x66,0x3e, + 0xb1,0x54,0x70,0xbf,0xb4,0xb1,0x4e,0xa2,0x48,0x6e,0x76,0xb5,0x6c,0x6e,0x32,0x41, + 0x7b,0x7d,0x58,0x2c,0x3d,0xbc,0xa6,0x5a,0x39,0xb3,0x3f,0x51,0x45,0x79,0x45,0xb5, + 0x40,0xaf,0x72,0x4c,0x44,0x6c,0x56,0x2c,0x7a,0x6f,0x7a,0x27,0x37,0x69,0x47,0x3f, + 0x5b,0x44,0x7a,0x21,0xb6,0x62,0x2e,0xba,0xba,0xa2,0x42,0xba,0x4c,0x70,0x51,0x42, + 0x6b,0x7b,0xa6,0x3f,0xa3,0x64,0x4a,0x70,0x27,0x5e,0xbc,0x7e,0x3d,0x67,0x38,0xa1, + 0x4d,0x7c,0x76,0x66,0x3d,0x3a,0xa9,0x3e,0x25,0xb7,0x36,0xb8,0x2e,0x58,0x5c,0x3b, + 0x4d,0xad,0x78,0x5b,0x23,0x37,0x46,0x45,0xb9,0x3c,0x76,0xa1,0x21,0x65,0x68,0xb0, + 0x32,0xb6,0x66,0xbb,0xb2,0x2f,0x4e,0x67,0x68,0x70,0x46,0xb8,0xb7,0x71,0x49,0xb3, + 0x79,0x5d,0x7a,0x69,0x22,0x7c,0x2a,0x5c,0x77,0x6d,0x7e,0xa2,0x29,0x6b,0xb4,0xb2, + 0x58,0x4d,0x3e,0x66,0xbc,0x54,0x54,0x33,0xbc,0x32,0x67,0x61,0xb2,0x5f,0x61,0x41, + 0x4a,0x25,0x3a,0x34,0x41,0x68,0xa7,0x32,0x2a,0x45,0x2e,0x70,0x4e,0x5f,0x27,0x5e, + 0x5d,0x74,0x76,0xb9,0xb9,0x55,0x2f,0xbf,0x79,0x59,0x43,0x47,0x58,0x79,0x7d,0x44, + 0x59,0x6b,0x28,0xaf,0xa4,0x5e,0xc1,0x5e,0x48,0x65,0x48,0xae,0xa8,0x34,0xc2,0x46, + 0x60,0x59,0x61,0x35,0x31,0x50,0xa4,0x28,0x59,0x70,0xa5,0x42,0x40,0x79,0x48,0x50, + 0x42,0x2c,0x68,0x63,0xb3,0xb2,0x4d,0xaf,0x48,0xac,0xb9,0x39,0x2e,0xbf,0x2b,0x23, + 0x50,0x3d,0xa8,0x6e,0xbc,0x72,0x44,0xa1,0x26,0x49,0x42,0x27,0x43,0x66,0xa2,0xa1, + 0x32,0x2c,0x79,0x2c,0x37,0x40,0x58,0x7a,0x76,0x46,0x3f,0x4f,0x21,0x5f,0xbc,0x5d, + 0x73,0xa6,0x45,0x5d,0xae,0xb8,0x2c,0xab,0x68,0xa7,0xb4,0xc0,0x7e,0x73,0x2a,0x42, + 0x4c,0xaf,0x58,0x43,0xa5,0xaf,0x51,0x54,0xbb,0x77,0x5a,0x6d,0x48,0x64,0x2b,0x7e, + 0x30,0xa6,0x79,0x3b,0xb7,0x68,0x2e,0x41,0x59,0x6f,0xbd,0x52,0x37,0x58,0x74,0x5c, + 0x2b,0x33,0xbf,0x46,0x35,0x2c,0x25,0x65,0x37,0x4c,0x46,0xae,0x5f,0x58,0x32,0x7b, + 0x37,0x7b,0x78,0x43,0x22,0x71,0x2b,0x33,0x47,0x26,0x6a,0xbc,0x62,0x6f,0x6a,0xb2, + 0x77,0xbf,0x3c,0x56,0x3b,0x3e,0xa6,0xbc,0xbc,0x3e,0x2a,0x4f,0x68,0x59,0xc0,0x6f, + 0x26,0x43,0x3a,0x5a,0xaf,0x60,0x4c,0x7d,0x44,0xb6,0x3c,0x3b,0xa8,0xb0,0x4b,0x30, + 0xa9,0xbc,0x5a,0xb6,0x2d,0x73,0x79,0xb4,0x3b,0xaf,0x26,0x76,0x4b,0x66,0x57,0x23, + 0xbc,0xb9,0x6b,0x6e,0x4c,0x5a,0x62,0x7d,0xaa,0x6c,0x5d,0x6b,0xb3,0x46,0x2f,0x5d, + 0x59,0xbd,0x3b,0x60,0x41,0x61,0x71,0x3d,0x53,0x4c,0x45,0x78,0xb8,0xb5,0x72,0xc2, + 0x7d,0xaa,0x25,0x49,0x33,0x31,0x43,0x5f,0x49,0x7c,0x24,0xab,0xc0,0x68,0xa3,0x4e, + 0xab,0x52,0x4b,0x4f,0x54,0x79,0x43,0x23,0x6c,0xad,0x75,0x5f,0x23,0x22,0x25,0x72, + 0x77,0xb1,0x52,0xa4,0x73,0x75,0x63,0x5c,0xab,0x44,0x47,0x2d,0xae,0xa4,0x4c,0xaa, + 0xaa,0xa6,0x26,0xaa,0xa7,0x58,0x3e,0x7a,0xc2,0x7b,0x2a,0x70,0xbc,0x2e,0x48,0x48, + 0x56,0xab,0xb4,0x72,0x63,0x6a,0x7c,0x60,0x6a,0x24,0xc2,0x4d,0xc2,0x54,0x51,0x34, + 0xac,0x32,0x23,0x56,0xb9,0x7c,0x43,0x43,0xb4,0x75,0xa4,0x74,0x50,0x76,0x24,0xb7, + 0xb9,0xc0,0x6a,0xb6,0x65,0x79,0xb0,0xb5,0xb0,0xb5,0x7a,0x72,0xbc,0x75,0x4a,0x49, + 0x77,0x57,0x7e,0x25,0x2f,0x68,0x77,0x3f,0x32,0x34,0x7c,0xa1,0xb9,0x31,0xa3,0x31, + 0xab,0x63,0xb5,0x3e,0xb2,0x77,0x72,0x62,0xb6,0x45,0x2e,0x30,0x4c,0xc0,0x58,0x5f, + 0x2a,0xb7,0x62,0xb3,0xc2,0x6d,0xab,0x40,0x2d,0x7d,0x3d,0x3a,0x44,0x70,0xaa,0x23, + 0x6a,0xb9,0x2b,0x46,0x30,0x5d,0x32,0x3c,0xb5,0x6c,0x4d,0xa1,0xb3,0xaa,0x2e,0x3d, + 0x38,0xa6,0xbd,0x31,0x52,0x59,0x7b,0x3f,0x37,0x44,0x7c,0x45,0xbb,0xa4,0x54,0x4c, + 0x59,0xaa,0x23,0x4a,0xba,0x7c,0x52,0x7a,0xb0,0x23,0x74,0x2d,0x2c,0xae,0x48,0x24, + 0x47,0x5f,0x6a,0xa5,0x73,0x6c,0x5c,0x5f,0xb7,0x25,0x34,0xbc,0x35,0xbd,0x72,0x52, + 0x60,0xbb,0x36,0xbc,0x41,0x44,0xa9,0xb4,0x2a,0xc1,0xa4,0x61,0x72,0x5e,0x49,0x7c, + 0x72,0x4c,0x5c,0x65,0xb0,0x38,0x2c,0xaa,0x68,0x62,0x6e,0xbd,0x68,0x70,0x38,0x21, + 0x24,0x75,0x58,0x7a,0x44,0x56,0xa8,0x22,0x46,0x47,0x7a,0x7c,0xb6,0x64,0xb0,0x3e, + 0x45,0x3c,0x67,0x69,0xb1,0x38,0x2d,0x32,0x48,0x54,0x32,0xab,0x2a,0x6b,0x7a,0x3f, + 0xa9,0x2c,0xa3,0x2a,0x3c,0x60,0x57,0x3e,0x26,0x3a,0x6a,0x75,0xbb,0x7c,0x56,0x7a, + 0xb5,0x2b,0x71,0x63,0x2e,0xb8,0x4c,0x68,0x38,0xac,0x5b,0x50,0x3c,0x60,0x22,0x3d, + 0x42,0x6c,0x52,0x74,0xbc,0x74,0x56,0x2b,0x56,0x45,0x5f,0x32,0x2d,0x59,0xb6,0x3b, + 0x46,0xb6,0x55,0x69,0xbd,0x30,0x50,0x6f,0x49,0x4c,0x27,0x5e,0x2b,0x58,0x7b,0x5b, + 0x5a,0x73,0x7d,0x4f,0x25,0x38,0x46,0x5d,0x26,0xa8,0x4e,0x71,0xa1,0x64,0xad,0x3e, + 0x37,0xa6,0x67,0x33,0xb5,0xbf,0x4d,0x71,0xaa,0x55,0x3e,0xab,0xa5,0xbf,0xbb,0xa1, + 0x27,0xa6,0xb4,0xb5,0xc2,0x2d,0x50,0xb4,0x49,0x4f,0x6f,0x42,0xa4,0x75,0x64,0x43, + 0x4e,0x35,0x78,0x76,0x47,0xa7,0xa9,0xa6,0x26,0x54,0xbc,0x30,0x21,0x69,0xa9,0x3f, + 0xa2,0x25,0x47,0x26,0x3f,0x22,0xa8,0x7b,0xbc,0xa7,0xc1,0x6e,0x48,0x64,0xb5,0xb0, + 0x24,0x4c,0x24,0x22,0x32,0x3c,0x56,0xa8,0xa2,0x60,0x45,0x40,0xbf,0x30,0x6e,0x52, + 0x71,0x41,0x34,0x47,0xbd,0x41,0x4f,0xb5,0x58,0xa6,0x56,0x79,0xad,0x6b,0x6d,0xa1, + 0x2c,0xa6,0xa6,0x21,0xbb,0x27,0x57,0x5b,0x7a,0x2e,0xb1,0x6e,0x2f,0x5e,0x26,0x5c, + 0xa5,0x34,0x6f,0x6a,0x32,0x26,0xa3,0xb4,0x3a,0x31,0x4e,0x4d,0x7e,0x5a,0x7b,0x5c, + 0x5e,0x43,0xb8,0x4d,0x30,0x62,0x49,0x58,0x27,0x4c,0x56,0x7e,0xbf,0x64,0x70,0xb0, + 0xa5,0x2c,0x6e,0x77,0xb3,0xa2,0x4e,0xa8,0x79,0x51,0xa1,0x3b,0x6c,0x75,0x35,0xb4, + 0xb7,0x5d,0xa7,0xba,0x4d,0x3f,0x46,0x68,0x47,0x42,0x5e,0xa2,0x5c,0x67,0x33,0x61, + 0x67,0x25,0x56,0xb8,0x48,0x21,0x24,0x21,0x76,0xa1,0xa4,0x70,0x2a,0x60,0x77,0xaf, + 0xbe,0x44,0xb8,0x59,0xc2,0x7a,0x51,0x76,0x69,0x4e,0xb9,0x37,0x4f,0x78,0xa9,0x63, + 0x3d,0x2b,0x2f,0xb5,0x2a,0x7a,0x47,0x2b,0x36,0x2a,0x4e,0x7e,0x4b,0x64,0xa4,0x5e, + 0x3d,0xbe,0x5e,0x79,0xb4,0x6b,0x30,0xb9,0xbb,0xaa,0x3f,0x4a,0x32,0x79,0x42,0x64, + 0x61,0x75,0x37,0x46,0x3d,0x57,0x56,0x79,0x3a,0x26,0x47,0x6d,0x30,0x5e,0x75,0xb0, + 0x72,0x2c,0xa2,0xa7,0xb9,0xb2,0x2e,0x72,0x79,0x56,0x5a,0x54,0x44,0x75,0x24,0x5b, + 0x4a,0x5b,0x78,0x43,0x23,0xa7,0x2b,0x43,0x77,0xa3,0x42,0xb1,0x51,0x6c,0xb2,0xb2, + 0x2f,0xa6,0xb8,0x76,0x48,0x2b,0xaa,0x29,0x30,0x60,0x45,0x40,0xbf,0xad,0x6e,0x52, + 0x71,0x41,0x31,0x54,0x36,0x23,0x25,0x52,0x26,0x54,0xb8,0x59,0x3f,0x64,0x58,0x5d, + 0xa5,0x6c,0x57,0x6f,0xb1,0x30,0x2e,0x23,0x48,0x69,0x2f,0x38,0x73,0x73,0x58,0xb3, + 0xb9,0x7d,0x77,0x62,0x43,0xbd,0x58,0x41,0x59,0x76,0x6a,0x50,0x43,0x59,0xba,0xad, + 0x5d,0x63,0xa7,0xbd,0x2f,0x5b,0x29,0x60,0x37,0x54,0xa8,0x7a,0x5f,0x64,0x65,0x3d, + 0xb5,0x3c,0x5c,0x4b,0xae,0xb0,0x2b,0xae,0xba,0x44,0x36,0xa7,0x72,0x6b,0x3f,0x3f, + 0xc0,0x2c,0x2d,0x60,0x31,0x2f,0x51,0x71,0x29,0x49,0x33,0x47,0x59,0x76,0xa6,0x42, + 0x73,0x74,0x4f,0x51,0xaf,0x64,0x2d,0x2e,0xaa,0x64,0x4a,0xb1,0x77,0x6e,0x5b,0x64, + 0x28,0xbe,0x5f,0x55,0xaf,0x42,0x47,0x55,0xa9,0x6d,0xa9,0x39,0xb2,0x5a,0xa7,0xae, + 0x3a,0x7b,0xaa,0x6f,0x2f,0xaa,0x29,0xa9,0x77,0x64,0x7e,0xa1,0x6b,0x68,0x3b,0xb1, + 0x6e,0x6c,0xae,0x60,0x33,0x45,0x55,0xbe,0x46,0x48,0x5e,0x6c,0x5f,0x61,0xb5,0xaf, + 0x41,0x24,0x3c,0x3f,0xa5,0x26,0x2a,0x4d,0x37,0x5b,0xa8,0x23,0xa9,0x66,0xb5,0xb0, + 0x63,0x3c,0x78,0xb1,0xb6,0x5f,0x2e,0x59,0xaa,0xb3,0xbd,0x35,0x33,0x72,0x2b,0x21, + 0x2b,0x4d,0x5b,0xc2,0x3d,0x44,0xa8,0xaf,0x4a,0xb0,0x52,0x62,0x29,0xa2,0x35,0x5b, + 0x31,0xb5,0x79,0xb9,0x25,0x58,0x26,0x61,0xc2,0x59,0x65,0x46,0xc2,0x39,0x2e,0x7e, + 0x71,0x24,0xb7,0x47,0xc0,0x60,0x51,0x42,0x59,0x65,0x33,0x5c,0xb2,0x7c,0x70,0xad, + 0x5a,0x5c,0x62,0x23,0xb5,0x6a,0x26,0x44,0x56,0x22,0xbc,0x69,0x7c,0x5f,0x24,0x3c, + 0xbd,0xb5,0xbf,0x25,0xaa,0x2c,0x4b,0x3d,0x67,0x7a,0xb4,0x2d,0x75,0x68,0x33,0x5f, + 0xba,0x4c,0xb5,0x4d,0xc2,0x74,0xa4,0x52,0xab,0x30,0x2f,0x4f,0xa4,0x7c,0xc0,0x44, + 0xae,0x6b,0xb5,0xaf,0xa3,0x37,0x29,0x66,0x67,0x3b,0x6e,0x7c,0xbe,0x63,0xc2,0x3d, + 0x22,0x3c,0x64,0x2f,0xaf,0xa2,0x2d,0xbc,0x48,0x50,0x36,0xbe,0x45,0x7b,0xb4,0x7c, + 0x62,0xa7,0x4d,0x52,0x3c,0x5f,0x25,0x7c,0x56,0x4f,0x66,0x75,0x40,0x63,0x5d,0x7d, + 0x74,0x54,0x4d,0xb3,0xad,0xa8,0x4c,0x49,0x38,0x4d,0xbc,0xac,0x45,0x6e,0xa8,0x60, + 0x72,0x2c,0xbd,0x46,0x32,0x4c,0x51,0x21,0x79,0x60,0x5f,0x50,0xbc,0x7c,0x61,0x64, + 0x44,0x53,0x6e,0x45,0x24,0xa9,0x25,0xbe,0x66,0x4f,0x62,0x75,0x5d,0x63,0x31,0x3d, + 0x2a,0x3c,0x48,0x37,0xac,0xba,0x4c,0x3c,0x37,0xc2,0x66,0xa9,0x25,0x6b,0x79,0xa1, + 0xb1,0x54,0x2c,0xbb,0xb9,0xab,0x4f,0x50,0x68,0x72,0x62,0xb5,0x77,0x6f,0x7c,0x41, + 0x5f,0x35,0x50,0x5a,0x40,0x3a,0x57,0x4e,0xbc,0x77,0x3e,0x56,0x25,0x62,0x5a,0x5d, + 0x73,0x54,0x6a,0x54,0xb8,0x37,0x73,0x30,0xb3,0x7c,0xb4,0xb0,0x7c,0x77,0xaf,0x63, + 0x47,0x45,0x7c,0x2e,0x4b,0x52,0xa9,0xa7,0x66,0x35,0x66,0x51,0x7b,0x5c,0xad,0x3c, + 0x43,0x73,0xb4,0x3f,0x2f,0x6c,0x28,0xaa,0xb9,0x42,0xbc,0x7c,0x6a,0x63,0xb3,0x5d, + 0x21,0x7c,0x4b,0x47,0xaa,0xa1,0x4b,0x69,0x57,0xb9,0x46,0xb3,0x52,0x6f,0xad,0x21, + 0x39,0x35,0x35,0x28,0x33,0x2a,0xa3,0x25,0x49,0x55,0x63,0x3d,0x5b,0x76,0x36,0xb4, + 0x6b,0x65,0x71,0xa8,0x47,0x79,0x58,0xa4,0x26,0x38,0x7e,0x4f,0xa6,0xbf,0xc1,0x5b, + 0xbc,0x73,0xc2,0x69,0xa5,0x7a,0x49,0xb0,0xb9,0x6b,0x3e,0x2d,0x4a,0x69,0xb3,0xb1, + 0xaf,0xa7,0x34,0x66,0x31,0xbd,0x53,0x4f,0x30,0x5d,0x51,0x64,0x3a,0xb3,0x54,0x36, + 0x49,0xbd,0x67,0x53,0xad,0x7c,0x3c,0xac,0xba,0x33,0x6d,0x67,0x2f,0xaa,0x2a,0xa7, + 0x57,0x74,0xb8,0xaf,0xc1,0x6c,0x42,0x44,0x67,0x3b,0xbb,0x45,0xad,0x65,0x2d,0x6b, + 0x78,0x3c,0x5a,0xad,0xa7,0xbf,0x21,0x60,0xa7,0x4d,0x48,0x24,0x36,0xb1,0x57,0x33, + 0x35,0xbd,0x6e,0xb9,0xb3,0x70,0xac,0x63,0x2f,0x3b,0x75,0x3d,0x2f,0x2b,0x2b,0x38, + 0xa9,0xa5,0x6a,0x2a,0x2c,0x67,0x5c,0xb1,0x5d,0x54,0xaf,0x38,0x34,0xad,0x2c,0x38, + 0x58,0x58,0xb0,0x52,0x39,0x5a,0x61,0x5c,0x3e,0x74,0x43,0x5f,0xad,0x24,0x2e,0x3b, + 0xb2,0x60,0x45,0x40,0xbf,0xa8,0x6e,0x52,0x71,0x41,0x33,0xa1,0xbb,0x3c,0xa4,0x2d, + 0x5a,0x5a,0xa9,0x5f,0xa8,0xbf,0x28,0x7b,0x61,0x3b,0xc1,0x46,0x3c,0x25,0x54,0xb8, + 0xbb,0xbf,0x5b,0x51,0x56,0x5a,0x5a,0x5f,0xb7,0x7d,0xb3,0x42,0x50,0x3d,0x24,0x71, + 0x56,0x34,0x26,0x53,0x2c,0x5f,0x4e,0xae,0xa4,0xb6,0x49,0xb7,0xa9,0xa5,0x4a,0xbb, + 0x27,0x76,0x7e,0xa3,0x32,0x6b,0xb4,0x5f,0x2d,0x7c,0xaa,0x6b,0xbd,0x44,0xa6,0xa7, + 0x3a,0x79,0x53,0x66,0x2e,0x58,0x79,0x5c,0x34,0x3b,0xa6,0xaf,0x2c,0x68,0x4a,0x7d, + 0x27,0x29,0x76,0x2b,0xbd,0x68,0x50,0x5e,0xc1,0x54,0x7d,0x27,0xb8,0xb7,0xa3,0xbe, + 0x79,0x71,0xa1,0x43,0x2d,0x76,0x76,0x42,0xb3,0xbd,0x70,0x5b,0x21,0x39,0x45,0xae, + 0x76,0x4d,0x7e,0x68,0x5a,0x60,0x74,0x5d,0xbb,0xbe,0xa8,0xb6,0x32,0x48,0xa3,0xa5, + 0x79,0x59,0x4f,0x44,0x37,0x75,0xa1,0x62,0xb6,0x2d,0x6f,0x7c,0x4a,0x3a,0x58,0x36, + 0x77,0x6c,0x2a,0x4e,0xbb,0x58,0x23,0x5c,0x41,0x3b,0xb6,0x2f,0x2d,0xbb,0x48,0x3d, + 0xb9,0x4f,0x7a,0x22,0xc0,0x69,0x59,0xa1,0x43,0x2c,0x21,0x27,0xc1,0xb9,0x52,0x31, + 0x59,0x6a,0x3b,0x52,0x23,0x7a,0x6d,0xb6,0x71,0xad,0x6c,0x61,0xa1,0xba,0x24,0xb3, + 0x26,0x33,0x2a,0x55,0xb2,0x5a,0x3a,0x7b,0x7a,0x33,0x24,0x71,0x28,0x46,0x27,0x5d, + 0xb2,0x60,0x49,0x40,0xbf,0x33,0x31,0x6f,0x21,0xa3,0x39,0x31,0x2b,0x5e,0x2e,0x5c, + 0x6d,0xa5,0xb1,0x69,0x2f,0x64,0x6f,0x5f,0xa9,0x44,0x2e,0x7c,0x58,0x63,0x2c,0x7e, + 0x2b,0x5c,0x69,0xaf,0xb5,0x44,0x4f,0xaa,0xba,0xa4,0x2a,0xc1,0x21,0x71,0x25,0x61, + 0x4a,0x25,0x36,0x32,0x33,0x7d,0xa3,0x26,0x49,0x49,0x3f,0x46,0x51,0x77,0x6a,0x22, + 0xa2,0x2d,0x62,0xac,0x3e,0x2e,0x54,0x6e,0x3a,0x37,0xb5,0x53,0x4d,0x7c,0x42,0x43, + 0xb0,0x7d,0xaa,0xa2,0x4d,0x3c,0x25,0xa3,0xa8,0x42,0x56,0x59,0xb7,0x5c,0x5d,0xae, + 0x36,0x53,0xa8,0x2d,0x2a,0xc2,0x28,0xb7,0x77,0x3c,0x6a,0x75,0x41,0x64,0x50,0x7e, + 0x72,0x24,0x78,0x3d,0xb9,0x75,0x30,0x4c,0xaa,0xa3,0xb0,0xbe,0x5d,0x72,0x61,0x62, + 0xa2,0x35,0x2a,0xa2,0xbc,0x5e,0x24,0xa5,0xb8,0xbe,0xc0,0x70,0x73,0x62,0x3b,0x5c, + 0x21,0x2c,0x50,0x65,0xab,0x6f,0x4f,0x39,0x68,0xb6,0x63,0x6b,0x46,0x58,0x57,0x5b, + 0x32,0x5b,0x7d,0x25,0x24,0x59,0x25,0xb3,0x66,0x7c,0x3a,0x66,0x38,0x60,0x5d,0x7d, + 0x39,0x24,0x36,0x43,0xa5,0x6d,0x29,0x23,0x37,0x5d,0x4e,0xa2,0x58,0x65,0xb8,0x3e, + 0x6e,0x64,0x60,0x5f,0xae,0xaf,0x4b,0xba,0x37,0xa6,0x54,0xb5,0x66,0x6b,0x6f,0xa1, + 0x22,0x44,0xa5,0x53,0xbb,0xad,0x2f,0x6c,0x38,0x7d,0x3e,0xbc,0x7c,0x6f,0xbb,0x60, + 0xbd,0x60,0x25,0x4b,0x3b,0xc1,0x5f,0x78,0xab,0x3f,0x3b,0x34,0xb5,0x72,0x77,0x21, + 0xc1,0x75,0x53,0xb6,0x3b,0x67,0x53,0xba,0x69,0xa3,0xa9,0x53,0x2f,0x7c,0xb9,0xb6, + 0x34,0x2d,0xc1,0x29,0x27,0x46,0x47,0xb0,0x76,0xbf,0x62,0x7c,0x64,0x66,0x5c,0xb0, + 0x66,0xa6,0x68,0xa5,0xb2,0x3b,0x2d,0x3c,0x28,0x46,0x66,0xaa,0x58,0x77,0x65,0xb4, + 0x74,0x2d,0xa5,0x53,0xa4,0x4c,0x2c,0x3c,0x39,0x31,0x37,0x65,0x7e,0x58,0x53,0xac, + 0xac,0x2b,0x6c,0x5b,0xa1,0x4e,0x44,0xaa,0x75,0xbe,0xc0,0x50,0x30,0x58,0xc2,0xad, + 0x40,0x43,0xa2,0xb3,0x24,0x34,0x46,0x6d,0x66,0x5f,0xb0,0x5e,0xae,0x5d,0x49,0x7c, + 0x42,0x3b,0xae,0x27,0x2c,0xc0,0x47,0xa3,0x76,0xaa,0x7e,0x6b,0x5c,0x60,0x57,0x5c, + 0xb4,0xae,0x32,0x21,0xa6,0xa1,0x4a,0x66,0xb9,0x60,0x2a,0xa2,0xbe,0x64,0xae,0x5e, + 0x38,0x2c,0x5f,0x63,0xaf,0xae,0x2c,0x35,0x67,0xb3,0x56,0xa3,0x76,0x6a,0x71,0xa2, + 0x34,0xb6,0xa8,0x31,0xbc,0x61,0x4f,0x69,0x48,0xa2,0x56,0xb9,0x48,0x6f,0x2d,0xa2, + 0x29,0x65,0x31,0x4c,0x33,0x78,0x51,0xbd,0x49,0x57,0x4f,0x3e,0x30,0x75,0x45,0x42, + 0x56,0xb7,0x59,0x6c,0x3c,0xb1,0x54,0x3d,0xab,0xb0,0x67,0x50,0x5b,0x79,0x70,0x44, + 0x3e,0xbf,0xa9,0x6c,0x4f,0x56,0x45,0x7e,0x50,0x79,0x22,0xa1,0xad,0xbd,0x74,0x52, + 0x60,0xbb,0xa9,0x61,0x21,0x46,0x45,0xa1,0x46,0xa6,0x3e,0x7b,0x26,0x67,0x63,0xa1, + 0x63,0x4c,0x27,0x6b,0xb8,0x7c,0x2f,0xb6,0x79,0x54,0xa5,0x53,0x61,0x7c,0x2e,0xac, + 0xac,0x44,0x43,0xb7,0xae,0x60,0x4d,0x66,0x49,0x59,0x56,0x4d,0xae,0xbf,0x23,0x5d, + 0xc1,0xb6,0x51,0x5f,0xb1,0xa2,0xa3,0x74,0x39,0x5c,0x5f,0x42,0xba,0x62,0xa3,0x5e, + 0xb4,0x45,0x7b,0x30,0x49,0x36,0x44,0x27,0xb8,0x37,0x6e,0x51,0x50,0x59,0x22,0x7b, + 0x2b,0x23,0x25,0x5f,0x27,0x51,0x47,0xa6,0x46,0xaa,0x32,0x69,0x69,0x60,0x53,0x7c, + 0xad,0x33,0xbe,0x35,0x2f,0xbc,0x29,0x3b,0x47,0x74,0x36,0x25,0x29,0x68,0x40,0x5f, + 0x55,0x34,0x7c,0x31,0xb5,0xbf,0x4e,0x7d,0x28,0x7e,0x76,0xba,0x25,0x70,0xbf,0xb4, + 0x40,0x55,0x56,0xaa,0x3b,0x61,0xa6,0x4c,0xab,0xa3,0xb5,0x5f,0x2f,0x5d,0x60,0x5f, + 0xa2,0xaf,0x64,0x3f,0x26,0x67,0x6f,0x5d,0x48,0x22,0x3a,0xbd,0xb5,0x72,0x4d,0xa1, + 0x52,0xbe,0x25,0x7b,0xb8,0x67,0xc1,0x54,0x48,0x2d,0x46,0x62,0xbe,0x5d,0x60,0x3c, + 0x29,0xbd,0xbd,0xaf,0x2f,0x79,0x48,0xad,0x27,0x35,0x7a,0x75,0xc2,0x62,0x24,0x5d, + 0x2a,0x3c,0x4c,0x63,0xa9,0xbf,0x4a,0x73,0xa9,0x78,0x7a,0x22,0x31,0x6a,0x48,0xa1, + 0x77,0xb6,0xb0,0x2d,0xc0,0xae,0x50,0x5f,0x60,0x59,0x65,0x46,0xc2,0x3b,0xbc,0x61, + 0x32,0x45,0x3b,0x30,0x36,0x70,0xa5,0x63,0x69,0x21,0xb9,0x52,0xa7,0x7a,0x64,0x64, + 0xa5,0x35,0xbf,0x5b,0x2a,0x67,0x27,0x56,0x26,0xb9,0xb4,0x71,0x45,0x64,0x4d,0xaf, + 0xac,0x34,0x4e,0x51,0xaf,0xa5,0x2c,0x5c,0xb9,0xc2,0x7e,0xb2,0x5a,0x6d,0x62,0x21, + 0x7d,0x2d,0x75,0x28,0x44,0xaf,0x24,0x2a,0x56,0x33,0x52,0x54,0x35,0x5b,0x73,0xae, + 0x6b,0x4b,0xb0,0x3f,0xa5,0x70,0x4a,0x6a,0x67,0x5a,0x7a,0x2d,0xc0,0x69,0x71,0x5f, + 0x75,0x54,0x23,0x3f,0xb7,0x30,0x2e,0x3e,0x78,0x66,0x5a,0xb6,0x2b,0x6f,0x26,0x60, + 0xad,0x74,0xc0,0xb8,0x32,0x2a,0xa3,0x58,0x49,0x41,0xad,0x3e,0xaf,0x74,0x2e,0x62, + 0x5f,0x4d,0x66,0xb4,0x41,0x79,0xa7,0x75,0x2a,0x53,0x67,0x64,0x5f,0x7e,0x2b,0x3b, + 0x66,0x3b,0xb4,0x59,0xac,0xa5,0x4c,0x36,0x47,0xac,0x5e,0x2d,0x3d,0x72,0x57,0xb3, + 0x24,0x2d,0x55,0x2c,0x3b,0x26,0x53,0x2e,0x5a,0x64,0x4f,0x6f,0xa4,0x5a,0x5f,0x5d, + 0xae,0x44,0x5f,0x5d,0xc1,0xc2,0x52,0xa4,0x29,0xaf,0x3f,0x5b,0x2e,0x7c,0x38,0x5d, + 0x29,0x7c,0x68,0x2d,0xb4,0x68,0x6f,0x6a,0xa8,0x6f,0x7e,0x64,0x5d,0x5e,0x7a,0xaf, + 0x40,0x24,0x31,0x51,0xa5,0x40,0x2a,0x7c,0xb9,0x62,0x56,0xaa,0xbc,0x6a,0xb9,0xb1, + 0xa3,0x3c,0x2e,0x2a,0xb8,0xb5,0x72,0xc2,0x7d,0x28,0x25,0x49,0x33,0x31,0x46,0x21, + 0x38,0x45,0x32,0x7c,0x32,0x21,0x53,0x23,0x5a,0x39,0x2a,0x4e,0xa5,0x5a,0x4d,0x7e, + 0x62,0x6c,0x65,0x3b,0xbd,0x4d,0x2f,0xa9,0x38,0xae,0x70,0xb6,0x61,0x77,0x6c,0x3b, + 0x63,0xbd,0x2a,0x53,0x29,0x2b,0x27,0xa4,0xb8,0xa3,0x76,0x6a,0xa5,0x5f,0x21,0x3d, + 0x59,0x4c,0x3d,0x59,0xa7,0x47,0x2a,0x27,0x67,0x76,0xb4,0x2a,0x39,0x67,0xae,0xb0, + 0xa4,0xbe,0x73,0x79,0xb3,0xac,0x4d,0x55,0xaa,0x5d,0x6e,0xae,0x3f,0x6b,0x77,0x5f, + 0xa4,0x3c,0xb2,0x71,0xbe,0x46,0x30,0x35,0x38,0xac,0xa8,0xbd,0x5d,0x73,0x2c,0x61, + 0x21,0x6d,0x49,0xac,0x3b,0x37,0xa7,0x3d,0x4a,0x36,0x27,0x52,0x68,0x7a,0x6e,0x23, + 0xb6,0x6d,0xae,0x5f,0xa2,0x67,0x48,0x3c,0xb9,0x6d,0x76,0x2c,0x50,0x6f,0x54,0x40, + 0xa4,0x65,0x5d,0x5e,0x3e,0x40,0xa7,0x3e,0x66,0x30,0xb8,0x6b,0x3e,0x63,0x61,0x41, + 0x76,0xa7,0x74,0x74,0x49,0x74,0x2d,0xb4,0x66,0x2d,0xac,0x71,0xc1,0x64,0xba,0x7e, + 0x22,0xbf,0x5b,0x7e,0x3b,0x31,0xa7,0x32,0x7a,0x72,0x2e,0x55,0xb3,0xbf,0x25,0x5f, + 0x39,0xb6,0xa5,0x5e,0x44,0x69,0x53,0x4b,0xbc,0x40,0x6a,0x50,0x28,0x5a,0xc2,0x5b, + 0x2e,0x23,0x2b,0x35,0x28,0xc1,0x27,0x49,0x56,0x25,0x52,0x68,0x5c,0x5f,0x61,0x3c, + 0x73,0x5b,0xbb,0x34,0xb8,0xb6,0x32,0xc2,0x71,0x31,0x38,0xad,0x3d,0x32,0x31,0x32, + 0x27,0x43,0x5e,0x76,0x39,0x62,0x78,0x3d,0x74,0x64,0x46,0xb3,0xa8,0x4d,0x2b,0x22, + 0x57,0x2a,0x22,0x29,0x4a,0x67,0x7d,0x5e,0xc1,0x6c,0x78,0x23,0xb5,0x6d,0x4d,0xa3, + 0xba,0x56,0x7a,0xab,0x57,0x6c,0x49,0x5f,0xbf,0x34,0xa8,0x5f,0xbd,0xb8,0x4f,0x28, + 0x48,0xa7,0x6e,0xbe,0x5d,0x6f,0x29,0x60,0xac,0xb6,0xbf,0x24,0x32,0x49,0xa3,0xb5, + 0x39,0x57,0xad,0x3a,0xad,0x73,0xa8,0x22,0x3c,0x35,0x5b,0x52,0x3c,0x4d,0x54,0xab, + 0x5a,0x35,0x3f,0x51,0xaf,0x79,0xa8,0x23,0x5c,0x7d,0x7b,0x48,0x47,0x24,0xa8,0x26, + 0x3a,0x67,0x2b,0x5d,0x31,0x7c,0x73,0x44,0x3a,0x65,0xaa,0x58,0x4b,0x3e,0x57,0xbd, + 0x76,0x4c,0xbc,0x61,0x4a,0x5d,0x2d,0x3c,0x6c,0xbd,0xb2,0x53,0xb0,0x5e,0x4c,0xb6, + 0xba,0x3a,0x36,0xac,0x6a,0x6b,0x52,0x61,0x40,0xaf,0x40,0x73,0x2e,0x74,0x28,0xb8, + 0x56,0xbd,0x3a,0x72,0xaf,0x63,0x75,0x7e,0x37,0xbe,0x56,0x57,0xad,0x75,0x2b,0xa9, + 0x27,0xb2,0x7e,0x2c,0xa6,0x6a,0xc2,0xa1,0xad,0xa6,0x2e,0x4b,0xbe,0x3b,0x50,0x55, + 0x69,0x39,0xb5,0x35,0x71,0x72,0xc0,0x41,0x77,0x4d,0x46,0x76,0x3b,0xa5,0x53,0x21, + 0xbc,0x39,0xbd,0x57,0x37,0x7d,0x5e,0x44,0x41,0xa6,0x3a,0x58,0x39,0xbb,0x54,0xaf, + 0x2a,0x41,0x4e,0x6b,0x58,0xbd,0xbc,0x71,0xc2,0xa3,0x59,0x34,0xb8,0x37,0x31,0x71, + 0x37,0x7b,0xb8,0x6f,0xb7,0xa1,0xa3,0x5e,0x39,0x6f,0x26,0x30,0xc1,0x62,0x65,0xa2, + 0xb6,0x65,0x56,0xa8,0x3a,0x40,0x44,0x7c,0x35,0xba,0x4e,0x52,0x2e,0x5a,0x42,0xad, + 0x68,0xbe,0x39,0x3f,0xa9,0x65,0x30,0x71,0x29,0x73,0xbd,0x5e,0x3e,0x58,0x77,0x5b, + 0x64,0x63,0x2c,0x47,0x2a,0x23,0x47,0x78,0x36,0xa5,0x6a,0x69,0x7e,0x5f,0x31,0x7c, + 0xa4,0x3b,0xc0,0x37,0xa3,0x2f,0x2a,0x56,0xb9,0x63,0x3a,0x7e,0x6f,0x64,0xc0,0x3d, + 0xb4,0xa6,0xa2,0x75,0xba,0x4e,0x4f,0x69,0x28,0xbf,0x23,0x3a,0x7e,0x73,0x56,0x22, + 0x47,0x65,0x5a,0x24,0x3b,0xb3,0xa5,0x7b,0x29,0xa6,0xad,0x4a,0xb7,0x5c,0xb8,0x3c, + 0x61,0xbd,0xc0,0x2f,0xa3,0xb9,0x29,0x72,0x27,0x7d,0x2a,0x27,0x2d,0x68,0x52,0x3f, + 0x4e,0x44,0xb0,0x5c,0x38,0x5d,0x53,0xc2,0xab,0xb9,0xc1,0x62,0xc1,0x7d,0x3f,0x3a, + 0xbb,0x3b,0x70,0x73,0xa2,0x6e,0x26,0x35,0x36,0x26,0xa4,0x67,0x6d,0x61,0xaf,0x3d, + 0x27,0x74,0x4c,0xbb,0xb4,0x4a,0x2e,0x5c,0xaa,0x7a,0x7e,0xbd,0xa1,0x71,0xbb,0xb3, + 0x4a,0x75,0x3f,0x26,0x36,0xaa,0x52,0x51,0x69,0x69,0x5b,0x46,0x5c,0x78,0x57,0xb4, + 0xba,0x40,0xaa,0x3c,0x40,0x49,0x27,0x65,0x76,0x30,0x4a,0x68,0x3a,0x61,0x6b,0x5c, + 0x61,0x2b,0xb6,0x37,0x30,0x71,0xc0,0x6d,0x21,0x70,0xb6,0x2e,0xb8,0x37,0x31,0x71, + 0x38,0x48,0xaa,0xa5,0xb0,0x36,0x2d,0x34,0x58,0x5e,0x6f,0x36,0xb9,0x76,0x61,0x3a, + 0xa7,0x3b,0x7e,0xaa,0xbc,0xaf,0xa8,0x72,0xb9,0xa7,0xbc,0x4e,0x75,0x58,0x25,0x7b, + 0x46,0xb5,0x25,0x7b,0x2b,0xb7,0x48,0x33,0x47,0x43,0xa8,0xa8,0x6e,0x72,0x5b,0x21, + 0x70,0xb7,0x4a,0x64,0x39,0x3f,0xa5,0x78,0xbc,0x67,0x47,0x5d,0x44,0x7d,0x73,0x64, + 0x26,0xaf,0xb7,0x45,0x29,0x2a,0x28,0x48,0x26,0xad,0x42,0x6e,0xa4,0x61,0x36,0x5d, + 0x4f,0x3c,0x3d,0x35,0xad,0x43,0x2c,0x71,0x5a,0x3b,0x23,0x57,0xa1,0x7d,0x35,0x44, + 0x78,0x6d,0xc1,0x43,0x2c,0x2d,0x48,0x32,0x47,0x4b,0x6e,0x7d,0x79,0x65,0x40,0x3f, + 0xbf,0x3d,0x2b,0x4c,0x48,0x5b,0x57,0x44,0xbc,0x2e,0x36,0x7b,0x32,0x76,0xb5,0xb4, + 0xae,0xa7,0x25,0xad,0x26,0x25,0x28,0x4b,0xa8,0xb0,0x26,0x6e,0x48,0x64,0x44,0x3f, + 0xb2,0x55,0x40,0x40,0x46,0xac,0x27,0x48,0x77,0x47,0x6a,0xa7,0x59,0xa1,0xbf,0x3a, + 0xa5,0xb5,0xa7,0x4f,0xa3,0x4e,0x2a,0x21,0x67,0x30,0x4e,0xb5,0x57,0xa1,0xa7,0xad, + 0x6d,0x33,0x24,0x37,0x28,0x3c,0x48,0x54,0x67,0x3f,0x2a,0x7e,0x60,0x67,0xa6,0x60, + 0x38,0xb7,0x3b,0x62,0x47,0x53,0x56,0xb3,0x76,0x4c,0xb4,0x76,0x47,0x62,0xaf,0x7e, + 0x21,0x24,0xbc,0x48,0x32,0x57,0xa9,0x4f,0x21,0x59,0x5c,0xc1,0x32,0xc0,0x2b,0x7a, + 0x78,0xc0,0x6f,0x6b,0x4b,0xa2,0x48,0xac,0xa6,0x2b,0x73,0xaf,0x22,0x3f,0x47,0x70, + 0x47,0x38,0x2a,0x77,0x61,0x65,0xa1,0xa1,0x54,0x65,0x32,0xac,0xbc,0xaa,0x55,0x57, + 0x46,0xbe,0x28,0xb5,0xb9,0xbf,0x72,0x40,0x2f,0x5d,0x3a,0x30,0x35,0x2e,0xa4,0x4d, + 0x29,0x5d,0x67,0x4d,0xba,0xbf,0x2c,0xac,0xba,0x78,0xa8,0xb6,0xbc,0xb5,0x47,0x39, + 0x66,0x2b,0xa8,0x72,0x2b,0x62,0x77,0x3d,0x27,0xae,0x47,0x61,0xa9,0x6e,0x6f,0x5a, + 0x57,0x7a,0x3e,0x25,0x3c,0x67,0x71,0x5f,0x37,0xa6,0x78,0x55,0xb8,0x37,0x2e,0x27, + 0x68,0x7c,0x72,0xb7,0xbe,0xbf,0xa5,0xa2,0xba,0xaa,0xa8,0x3a,0x3a,0x6f,0xc1,0x63, + 0x69,0x2f,0x33,0x53,0xc0,0x7c,0x50,0x30,0x41,0x25,0xa7,0x39,0x28,0x21,0x28,0xba, + 0x77,0x59,0x36,0x2f,0x31,0x6c,0x5a,0xa2,0x4a,0xb7,0x5b,0x2c,0x4a,0x5e,0x57,0xb0, + 0x7a,0xbb,0x42,0x54,0x67,0x61,0xa7,0x5d,0x59,0xae,0x5c,0x3e,0x32,0x52,0x25,0x37, + 0x36,0x74,0x4a,0x6f,0x3a,0x69,0x71,0x42,0x60,0x25,0x5a,0xbb,0x2c,0x3c,0x52,0x30, + 0x55,0xbc,0xb4,0x54,0x65,0x5c,0x42,0x3c,0x4b,0x7c,0x40,0xb5,0xb0,0x26,0x48,0x5e, + 0x27,0x7d,0x4a,0x54,0x39,0x58,0x47,0x5a,0xba,0xc2,0xa9,0x32,0xbc,0x71,0xc1,0x61, + 0x56,0x7d,0x3c,0xad,0x3e,0x36,0x70,0xa4,0x29,0x50,0xa8,0x6f,0xae,0x5f,0x2c,0x41, + 0xa2,0x7e,0x26,0xab,0x47,0x6d,0xa4,0x70,0x41,0x6d,0x3a,0x3c,0x33,0x4d,0xa3,0xaa, + 0xbb,0xbd,0xb9,0x50,0x37,0xbf,0x77,0x44,0x49,0x70,0xa9,0x42,0xbc,0x75,0xc1,0x65, + 0xa7,0xb7,0x5c,0xb6,0x30,0x5c,0x2f,0x5c,0xb4,0x4c,0x4b,0x48,0xbc,0x77,0x6f,0x66, + 0x68,0x5c,0xa8,0xbf,0xb2,0x76,0xa6,0x70,0x41,0x65,0x72,0x68,0x4b,0x23,0x26,0x75, + 0xb8,0x78,0xa4,0x63,0x50,0x5e,0x5e,0x3c,0x69,0xba,0xaa,0xaf,0x2f,0x78,0xc1,0x63, + 0x40,0x7b,0x72,0x77,0x6c,0x62,0xa7,0x70,0x44,0xae,0x57,0x3f,0xaf,0x30,0x2c,0x42, + 0xa9,0xaf,0x7e,0x2c,0xb8,0xbd,0x2c,0x53,0x77,0xbf,0x7c,0xb6,0x30,0x69,0x3e,0xa1, + 0x46,0x7c,0x77,0x58,0xbc,0xa4,0x2d,0x6b,0x28,0x3d,0x24,0xb5,0xa2,0x6d,0x4c,0xb2, + 0x3a,0x60,0xa8,0xad,0xbe,0xb4,0x30,0x63,0xb2,0x7a,0x6e,0xc0,0x48,0xbf,0x24,0x62, + 0x3e,0xbf,0x6b,0x62,0xbc,0x7d,0xc1,0x64,0x60,0x7b,0xb1,0x56,0x4c,0xbf,0xc0,0x24, + 0x7a,0xaa,0xa9,0x6c,0xbc,0xa2,0x6f,0x61,0x27,0x35,0x46,0x2c,0x50,0xbf,0xaf,0x5f, + 0x4b,0x38,0xa9,0x74,0xbc,0x29,0xa8,0x66,0x26,0x4e,0x3c,0xb6,0x54,0xbf,0xac,0x50, + 0x4e,0x4c,0x4f,0x7c,0xbc,0x78,0x6e,0x51,0x46,0x54,0xa4,0xab,0xb9,0x72,0x65,0x21, + 0x60,0x59,0x45,0x46,0xc2,0x31,0xac,0x30,0x4c,0x2d,0x28,0x7c,0x4b,0x6f,0xaa,0x29, + 0x77,0x66,0x50,0xb6,0x72,0x69,0x23,0x61,0x7b,0x78,0xa9,0x24,0xbc,0x56,0x27,0x46, + 0x60,0x7e,0x60,0xb6,0x69,0x5f,0x2d,0x5c,0xbd,0xaa,0xa7,0x71,0xa9,0x78,0x4a,0xa2, + 0x47,0x7e,0x6a,0x23,0x69,0x67,0x6d,0xb0,0x74,0x64,0x6a,0x33,0xb2,0xb0,0x4c,0xa6, + 0x68,0x32,0x6e,0xa3,0x21,0x69,0xba,0xb1,0x48,0x34,0xa1,0x2c,0xbc,0x5e,0x2e,0x46, + 0xb2,0xa1,0x22,0xac,0x79,0x6c,0x44,0xa2,0x5a,0x4c,0xbd,0x30,0xbc,0x29,0x6f,0x6f, + 0x49,0x44,0x33,0x46,0xa1,0x78,0xaf,0x70,0x45,0x75,0xa1,0xa8,0xbc,0x3d,0xa8,0xb9, + 0x70,0x7e,0x24,0xb5,0x73,0x58,0x3b,0x7b,0x3c,0x60,0xa7,0x41,0x23,0xb3,0x25,0xc1, + 0x67,0x64,0x66,0x2a,0x7b,0x68,0x73,0xa1,0x68,0xbe,0x2e,0x75,0xbd,0x28,0x51,0x2c, + 0x29,0x59,0x3b,0x3e,0x67,0xbf,0xb8,0x42,0x37,0x4d,0x5a,0xbe,0x3c,0x66,0xa6,0x47, + 0xc2,0x7e,0xa1,0x56,0x69,0xbf,0x75,0xb5,0xb4,0x35,0xa5,0x59,0xa1,0x37,0x24,0xbc, + 0x45,0xc0,0x7a,0x51,0x79,0x5a,0xa2,0x7b,0x74,0x4b,0x24,0x65,0x26,0x62,0x47,0x48, + 0x56,0x74,0x4e,0x63,0x4c,0x5e,0x6a,0x3c,0x6a,0xbe,0x33,0xb6,0xbc,0xa8,0x49,0x5b, + 0xa9,0x60,0xc0,0x7b,0xa7,0x64,0x5a,0xb0,0x36,0x24,0x63,0xaa,0xb8,0x37,0x73,0x30, + 0xb4,0xa1,0x6e,0xa4,0x5d,0x69,0x25,0xa1,0x68,0xae,0xaf,0x42,0x38,0x23,0x53,0x77, + 0x5a,0xa3,0x4f,0x6f,0x7c,0x5f,0x51,0xb0,0x75,0x54,0xa1,0x43,0xb6,0x4e,0x55,0x26, + 0x67,0xb6,0x46,0xab,0x50,0x6c,0x4b,0x60,0x52,0x5c,0xbb,0x46,0x37,0x51,0x45,0x69, + 0x26,0x77,0x36,0x7a,0xb1,0x6b,0x36,0x5f,0x28,0x34,0x2c,0x33,0xc2,0x7b,0xa7,0x4a, + 0x2a,0x63,0x23,0x63,0x57,0x68,0x6a,0xa1,0x7b,0x7c,0xad,0x25,0xbd,0xb5,0xa3,0x6c, + 0x49,0x64,0xa5,0x3f,0x4c,0x76,0x43,0x5c,0x59,0xa5,0xb1,0x67,0x2c,0x21,0x2b,0x31, + 0x37,0x7c,0x3e,0x2c,0x5a,0x6a,0x75,0xb1,0x73,0xa6,0x23,0x5f,0xbb,0xb7,0x30,0x6e, + 0x68,0xbb,0xa5,0x33,0x26,0x71,0xaa,0x21,0x65,0xa7,0x61,0x2e,0x47,0x39,0xa9,0x4f, + 0x37,0x65,0x32,0x70,0xbd,0x63,0xa5,0x5d,0xb9,0x24,0x63,0x47,0xb6,0x47,0x25,0x31, + 0x66,0x24,0x5a,0x28,0xb1,0x6c,0x76,0x7c,0x47,0xa5,0xba,0x4b,0x2e,0x43,0x2d,0xac, + 0xba,0x5e,0xae,0xb6,0x6c,0xbf,0xbc,0x5b,0x40,0x7b,0x75,0x2f,0x29,0x47,0x27,0x63, + 0xa8,0xa1,0xac,0x64,0xa8,0x5e,0xb2,0x50,0x4c,0xb2,0xa9,0x75,0x2e,0xae,0x29,0x73, + 0xa9,0x55,0x7e,0x7a,0xc1,0x63,0x60,0x30,0x4e,0xa6,0x4b,0xc2,0xbc,0x55,0x4b,0x29, + 0x40,0xa2,0xc0,0xa5,0xa7,0x6b,0x61,0x6f,0x21,0xab,0x5c,0xc1,0x36,0x75,0x4f,0x26, + 0xba,0x23,0x4e,0xbf,0x2f,0x70,0x31,0x41,0x38,0x35,0x38,0x36,0xbc,0xba,0xa4,0xb3, + 0x49,0x7a,0x33,0x47,0x2a,0x79,0x61,0xc2,0x49,0x35,0x72,0x56,0x4a,0x70,0x49,0x57, + 0x57,0x2c,0x22,0x2b,0x50,0x70,0x3a,0x62,0x4c,0x3d,0x70,0x53,0xa2,0x27,0x25,0x43, + 0xc2,0x59,0x38,0x2d,0x22,0x5c,0xa5,0x5c,0x3c,0x7b,0xb1,0xb3,0x2f,0x52,0x49,0x63, + 0x27,0x7d,0x62,0x2b,0xaa,0x68,0x5e,0x7e,0xac,0x54,0x76,0x75,0xb7,0x45,0x4e,0x56, + 0x78,0x5c,0xa1,0x31,0x69,0x72,0xb5,0x61,0x71,0x25,0x6b,0x5a,0x44,0xb2,0x55,0xbb, + 0xa2,0x7d,0x6a,0x4d,0x22,0x58,0x2e,0x7b,0x33,0x23,0x78,0x41,0x24,0xa8,0x25,0xc1, + 0x66,0x4d,0x4e,0x68,0x24,0x5e,0x7a,0x3c,0x72,0x24,0x37,0x35,0xa4,0xbd,0x4a,0x5c, + 0x68,0x45,0x2e,0xa9,0x71,0x6b,0x61,0xa1,0xa8,0x34,0xa9,0x53,0xbc,0x2d,0x2f,0x51, + 0xaa,0xb0,0xb8,0xc2,0x3c,0x72,0x66,0x61,0x26,0xb7,0x4c,0x36,0x40,0x54,0xa7,0x4f, + 0x30,0x5d,0x74,0x26,0x42,0x73,0xa8,0x2e,0x3a,0x68,0x57,0x5e,0x27,0x5a,0x4a,0xae, + 0xc1,0xae,0x45,0xa5,0xa9,0x48,0x2b,0x3c,0x78,0x3a,0x2a,0xb8,0x72,0x79,0x33,0x24, + 0x3a,0x3b,0x6c,0x3c,0xbc,0x5a,0x4b,0x24,0xa9,0x2d,0x72,0x30,0x3a,0x69,0x77,0x41, + 0x3c,0x75,0x3a,0x58,0x36,0xbd,0x72,0x52,0x60,0xbb,0x36,0x48,0x41,0x7b,0xa8,0x2f, + 0x5a,0x68,0xb1,0x5f,0x4b,0x73,0x7d,0x64,0x6a,0x33,0x6b,0x45,0xb4,0xa5,0x56,0x79, + 0x66,0x3d,0xc0,0x58,0xa4,0x5b,0x35,0xad,0xb4,0x43,0x2f,0x77,0x28,0x7e,0x27,0x29, + 0x76,0x27,0x3e,0x67,0x59,0x61,0x40,0xaf,0x50,0x54,0x3f,0x3b,0xaf,0x4d,0x2c,0x5f, + 0x57,0xb7,0x72,0x2d,0x61,0x6a,0x40,0xb1,0x66,0x6c,0x24,0x54,0x33,0x71,0xa5,0x39, + 0x29,0xbe,0x33,0x52,0x77,0xbf,0x29,0x23,0xa8,0x75,0xa3,0x68,0x4e,0x35,0x4a,0xb4, + 0x59,0xad,0xbd,0x55,0x7e,0x58,0x23,0x5b,0x3e,0xb5,0x72,0xa5,0x24,0x37,0x26,0xbd, + 0x76,0x79,0x36,0x65,0x3a,0x5f,0x4d,0x3d,0x4a,0x34,0x49,0x2b,0xb1,0x4a,0x4d,0x7a, + 0x68,0x58,0x6e,0xbe,0x74,0x71,0x34,0x21,0x77,0x65,0x41,0xc2,0x36,0x60,0xa4,0xae, + 0x69,0x71,0xa5,0x43,0x33,0x76,0x26,0x63,0x3d,0x2d,0x2e,0x50,0x4c,0x6a,0x24,0x23, + 0x45,0xbb,0x7a,0x53,0xad,0x59,0xb4,0xc2,0x43,0xbd,0x27,0x23,0x26,0x6e,0x47,0xb7, + 0x26,0x2c,0xb4,0x6d,0xc0,0x60,0x60,0x7c,0xad,0x34,0x34,0x6f,0xa3,0x35,0x49,0x52, + 0x47,0x3f,0x42,0x77,0x69,0x63,0x73,0x5d,0xbf,0x78,0xaa,0x59,0xaa,0xb0,0x4a,0xbc, + 0x50,0x7c,0x36,0x23,0xa5,0x65,0xb1,0x5e,0x73,0x6c,0x68,0x46,0xbc,0x4d,0x4c,0x2a, + 0x70,0x59,0x65,0x46,0xc2,0x32,0xbb,0x5e,0xb6,0x64,0x7d,0xb1,0xb6,0xa9,0x6f,0x5c, + 0x78,0x52,0x76,0xae,0x7e,0xbf,0x25,0xa1,0xaf,0xba,0xaa,0x50,0xbc,0x27,0x30,0x70, + 0xab,0x3a,0xa5,0x3a,0x26,0x75,0x57,0x42,0x5e,0x2d,0x5c,0x2c,0x3b,0x49,0x54,0x79, + 0x59,0xb5,0x5b,0x51,0x6f,0x79,0x4f,0x23,0x35,0x7d,0x78,0x44,0x42,0x68,0x55,0xbd, + 0x40,0xa1,0x78,0xb5,0x3a,0x5d,0x65,0x30,0x4e,0x4c,0x5f,0x44,0x31,0x2a,0x51,0x4b, + 0x70,0xa1,0x24,0xb5,0x72,0x59,0x2b,0xae,0x44,0x7b,0xb6,0x5c,0xbc,0xae,0x6f,0x5d, + 0x77,0xc0,0x4e,0xaa,0xa7,0x71,0x32,0xb4,0x2e,0x70,0xa7,0x60,0x43,0x78,0xa8,0x6c, + 0x40,0xa1,0xaa,0xb6,0x2b,0xbf,0xb9,0xc2,0x48,0xbf,0x31,0x4d,0xa5,0x3f,0x4d,0x3e, + 0x38,0xaf,0x67,0x40,0x2d,0xbf,0xab,0x3b,0xb9,0x7c,0x32,0x3f,0xa4,0x2c,0x2b,0xba, + 0xab,0x25,0x33,0x56,0x62,0x7c,0x47,0x5a,0xa4,0xbd,0x24,0x27,0xb0,0x47,0xa4,0x5f, + 0x3a,0x68,0xa1,0x60,0xb1,0x7d,0x66,0x7d,0x6f,0x4c,0x63,0x54,0x41,0xb1,0x25,0x6a, + 0x47,0x3e,0xad,0x34,0xbc,0xa1,0xaa,0x5a,0xb4,0x23,0x71,0x31,0x22,0xa1,0x47,0xa4, + 0xb9,0x40,0xc0,0x74,0xaf,0x63,0x32,0x5e,0x4d,0x5c,0x5f,0x53,0xb8,0xb4,0x2e,0xb8, + 0x48,0xbe,0x43,0x36,0x40,0x73,0xc1,0xb3,0xb9,0x4d,0x53,0xbc,0x3b,0xbd,0x72,0x52, + 0x60,0xbb,0x36,0xa4,0x3c,0x26,0xa7,0x62,0x75,0xba,0x46,0x4d,0x3b,0x58,0xba,0x70, + 0x4e,0xba,0xa7,0xb1,0x2a,0xb7,0x47,0x6c,0xc2,0xa2,0x7a,0x6b,0x4c,0x60,0x27,0xae, + 0xb5,0x3c,0x34,0x72,0xbc,0xb3,0xc1,0x6d,0x60,0xa2,0x40,0xb5,0x6f,0x6a,0x6a,0x5f, + 0x6f,0x58,0xa8,0xa3,0xb8,0xa9,0x2e,0x6d,0x30,0xa2,0xb0,0xb6,0xa9,0xbf,0x74,0x41, + 0x34,0x4d,0x33,0x3a,0x31,0xb3,0xa3,0x7b,0x49,0x50,0x50,0xb6,0xab,0xbf,0xb2,0x62, + 0x7c,0x4d,0x63,0x40,0x41,0xb7,0xc1,0x6e,0x60,0xa2,0x23,0x61,0x3d,0x7d,0xbd,0xc2, + 0x4f,0xaa,0xa7,0xb1,0xb3,0xa8,0x4e,0x2a,0x58,0xc1,0x62,0xc2,0xbf,0x70,0x77,0x22, + 0x6c,0x23,0x6c,0x33,0xa1,0x32,0x25,0xa1,0x36,0x50,0x68,0xb6,0x6e,0x5b,0x69,0x3b, + 0xb2,0x2b,0xaa,0x3b,0x2c,0x3b,0x28,0xbc,0x26,0xbe,0x6a,0x2e,0xb1,0xbf,0xbe,0xc2, + 0x47,0x24,0xb7,0xae,0x34,0xbb,0x6f,0x63,0x69,0x65,0x67,0x46,0xb4,0xbf,0x2c,0x63, + 0xba,0x6d,0x30,0xa8,0xbc,0xbc,0xc1,0x51,0x35,0xb5,0xac,0x4f,0xc1,0x58,0xc1,0x5c, + 0x3f,0x5c,0x47,0x75,0xb1,0x4d,0x55,0x47,0x3a,0x4e,0xa9,0x64,0xbe,0x58,0x6c,0x3c, + 0x39,0x23,0xaa,0x63,0x2a,0x51,0x29,0x4f,0xa2,0xa2,0x28,0xae,0xbc,0x3b,0x4f,0x2f, + 0xb2,0x7b,0x6f,0x38,0x74,0x77,0x4a,0x5b,0x45,0x58,0x28,0x7d,0x38,0xc1,0x3d,0x71, + 0x50,0x59,0x61,0x35,0x31,0xbe,0xc1,0x70,0x40,0xa2,0xaa,0xb6,0x7e,0x58,0x4b,0x5b, + 0x56,0x5b,0xb1,0xc2,0x33,0xad,0x44,0x78,0x56,0x46,0x52,0x5a,0x7a,0x5d,0xc2,0xae, + 0x46,0x33,0xb0,0x5f,0x2c,0x5f,0x47,0xaf,0x67,0x33,0x52,0x74,0x7c,0x68,0x57,0x5f, + 0x37,0xb6,0x77,0x3d,0xb6,0xbe,0x2e,0x47,0x28,0x5f,0x36,0xb3,0x5c,0x6f,0x72,0x61, + 0x3f,0x25,0x35,0x22,0x34,0x3c,0xa4,0x6a,0x49,0x60,0x6b,0x46,0x78,0x77,0x64,0x43, + 0xa8,0xa5,0x70,0xb7,0x23,0x2f,0x46,0x26,0x67,0x5a,0x52,0x7d,0xbf,0x69,0x5f,0x3f, + 0x34,0x5c,0x7b,0xbd,0xc0,0x77,0xa3,0x7a,0x7a,0x3f,0x33,0x5d,0xb5,0xa1,0x2d,0x5c, + 0x6f,0x6c,0x53,0x61,0xae,0x6e,0x4c,0xbe,0xaa,0x65,0x76,0x6a,0x5c,0x64,0x47,0xb0, + 0xbe,0x54,0xaf,0x25,0xbf,0x4c,0x53,0x4c,0x7a,0x61,0x52,0x4e,0x28,0x58,0x39,0x3b, + 0x64,0x53,0xa5,0xb9,0x29,0xba,0x27,0x3e,0x76,0x79,0x4e,0x69,0x64,0x60,0x52,0x3c, + 0xa6,0x5b,0xc1,0x49,0xa6,0x2a,0x4a,0x7b,0xa9,0x69,0xc0,0x26,0x54,0x66,0x34,0x3e, + 0x64,0xbe,0x6e,0x3d,0xb5,0xc0,0x6f,0x5b,0x38,0x4d,0x5e,0xac,0xa3,0x6e,0x5a,0xb2, + 0x78,0x75,0x38,0x70,0x32,0xb6,0xa3,0x62,0x59,0x4c,0x63,0x39,0x54,0x73,0xa8,0x41, + 0x2d,0xbf,0x48,0x6c,0x39,0x3a,0xa6,0x66,0x7a,0x3c,0x2f,0x5c,0xb8,0x33,0x73,0x30, + 0xb3,0x3d,0xb5,0x5e,0x3e,0x59,0xb5,0x5b,0x73,0x73,0x2f,0xa3,0x2c,0x57,0x29,0x7b, + 0x37,0x6a,0xb8,0x22,0x44,0x65,0x40,0x5e,0xb0,0x4c,0x6a,0xbd,0xb3,0x41,0x30,0x29, + 0x49,0x76,0x37,0x49,0x3a,0x78,0x23,0xb6,0xb7,0xb7,0xbf,0x2b,0xb5,0x78,0x2f,0xbc, + 0x29,0x21,0xad,0x57,0x78,0x58,0x24,0x7a,0xb6,0x43,0x77,0x31,0x25,0xab,0x47,0x63, + 0x26,0xb8,0x26,0x75,0xb8,0x64,0x2c,0x7e,0x42,0x6c,0x5b,0x2d,0xaf,0x3e,0x4c,0x2c, + 0x48,0x42,0x5a,0xaa,0x6e,0x6b,0xb1,0x40,0x64,0x5c,0xba,0xa2,0x33,0xbf,0xa3,0xad, + 0xbb,0x58,0x2f,0x3b,0x2c,0x76,0x5c,0xb4,0x79,0x6d,0x69,0x64,0x41,0x2d,0x55,0x4a, + 0xac,0x63,0xc1,0x70,0xa6,0x5a,0x33,0x7b,0xa1,0x3b,0xae,0x35,0x2c,0x5d,0x4a,0x3f, + 0x27,0x60,0x22,0x2e,0x75,0x6a,0x6f,0xc2,0x49,0x54,0x2a,0x4b,0xbd,0x3e,0x2f,0xac, + 0x28,0xa4,0xbc,0xc0,0x30,0x70,0x2f,0xb3,0x63,0x2d,0x60,0x46,0x3d,0x63,0x54,0x6d, + 0x49,0xad,0xc1,0x4e,0xad,0x78,0xc1,0x62,0xb9,0x7d,0x74,0x54,0x44,0x52,0x24,0xb2, + 0x55,0xc0,0x7e,0x51,0xab,0x59,0x2f,0x3b,0x45,0xad,0x7a,0x25,0x23,0x61,0x27,0x40, + 0x76,0x74,0x32,0x63,0x39,0x5f,0x46,0x5c,0x7e,0x2b,0xbd,0x67,0xa3,0x49,0x49,0x73, + 0x67,0x76,0xc0,0x27,0x39,0x67,0x5d,0x6f,0x21,0xab,0x5c,0xc1,0x3e,0x58,0x4d,0x55, + 0x38,0x52,0x72,0xad,0x69,0x6b,0x25,0x5f,0x28,0x44,0x2a,0x49,0xbe,0x76,0x2f,0xb8, + 0x28,0x2f,0x4a,0xba,0x40,0x70,0x4c,0x22,0x54,0xb7,0x6e,0x44,0x40,0x50,0xa7,0x23, + 0x6a,0x42,0x3b,0x57,0x5c,0x7b,0x6f,0xb5,0xa8,0x25,0xa4,0x28,0x49,0x40,0x57,0x51, + 0xb8,0x42,0x5a,0x76,0x49,0x62,0x47,0x5e,0x27,0x54,0x2c,0x45,0xbd,0xa3,0x4f,0xb1, + 0xaa,0xae,0x32,0x58,0x6f,0x5f,0x56,0xae,0xa6,0x74,0x6f,0xb5,0xb3,0x7d,0x50,0x33, + 0x4a,0x6d,0x6b,0x68,0x2f,0xa2,0x5a,0x5d,0x68,0x24,0x42,0xb0,0x38,0x31,0x24,0x23, + 0x25,0xb8,0x66,0x4d,0x2d,0x59,0x4e,0x5b,0x35,0x73,0x24,0x37,0x2a,0x7e,0x47,0xab, + 0x36,0xb8,0x66,0x6e,0xba,0x60,0x51,0x5c,0xbf,0x5c,0x31,0xb7,0xa6,0x50,0x2a,0x5f, + 0x77,0x5f,0x62,0x7b,0xb9,0x64,0x4f,0x3d,0xb2,0xb6,0x4e,0x21,0xac,0x75,0x2b,0x7d, + 0x67,0x2b,0x32,0x2a,0x71,0x67,0xbd,0x3e,0x22,0xbe,0x6a,0x6d,0xb1,0x40,0x4d,0x45, + 0x48,0x35,0x6a,0xaa,0xc0,0x6a,0xa1,0xa1,0x26,0x2c,0x2f,0x3f,0xbb,0x78,0x4f,0x52, + 0x68,0x24,0xb8,0xb8,0x6f,0x6f,0x54,0xa2,0x25,0x6d,0x39,0x36,0x3b,0xb8,0x53,0x24, + 0xab,0xa4,0x67,0x53,0x7b,0x79,0xb9,0x43,0x47,0x65,0x7c,0x4a,0x43,0x41,0x55,0xa3, + 0xac,0x6b,0x2b,0x60,0xb8,0x33,0x73,0x30,0xb3,0x3b,0xb5,0x5f,0x33,0x7d,0x34,0x24, + 0xb6,0x63,0x7b,0x53,0x23,0x6f,0x46,0x55,0x76,0x71,0xb8,0x6d,0x50,0x60,0xa6,0x3d, + 0x3e,0x34,0x3f,0x2f,0xab,0xb2,0x2c,0xb0,0x28,0x7a,0x62,0xba,0x7e,0x71,0xb1,0x21, + 0x30,0xaf,0x54,0xb4,0x3b,0x53,0x54,0x22,0x2a,0x3c,0x43,0x5e,0x4c,0x7c,0x40,0x63, + 0xb7,0xa7,0xa4,0x46,0x50,0xaa,0x44,0xab,0xa8,0x3f,0x5e,0x54,0x5a,0x5a,0x3d,0x7b, + 0xa4,0x53,0xc0,0x27,0x30,0x26,0x49,0xbc,0x27,0x58,0x56,0x7b,0x72,0x64,0x6f,0x7d, + 0xb2,0x7c,0x49,0x6b,0xaa,0xa1,0x2b,0x4b,0xb9,0x78,0xb8,0x23,0x46,0x68,0x2c,0x7e, + 0xb9,0x6c,0x78,0x7b,0xb4,0x46,0x4d,0x26,0x58,0x52,0xac,0xb1,0x27,0x6d,0x27,0xa2, + 0x4e,0xbe,0xa7,0x71,0xbd,0x7b,0x2f,0x23,0xba,0xa9,0xc0,0xbb,0x75,0x6f,0x2d,0x40, + 0xab,0x6d,0x34,0xba,0x36,0x23,0x52,0x7b,0x79,0x26,0xc1,0x46,0x4a,0x77,0xa3,0x62, + 0xa5,0x35,0x72,0x2c,0x41,0xb4,0xa7,0x58,0x6a,0x67,0x27,0x5e,0xa8,0xa1,0x64,0xaf, + 0x21,0x6c,0xb5,0xaa,0x3e,0xa4,0xa7,0xae,0x36,0x29,0x5a,0x69,0x23,0x5a,0xb9,0x5d, + 0x52,0xae,0x7d,0xa1,0x21,0x7c,0x27,0xb6,0xa8,0xc0,0x72,0x71,0xae,0x61,0xb8,0x5e, + 0x3e,0x7c,0x65,0x2d,0xb7,0x48,0x4f,0x79,0x58,0xaf,0xb4,0xbd,0x62,0x70,0x4b,0xb3, + 0x50,0x59,0x45,0x46,0xc2,0x31,0x7b,0x22,0xa6,0x5d,0x6a,0xc0,0x44,0x3d,0x56,0x3b, + 0x35,0xbd,0x72,0x60,0xa9,0x5f,0xac,0xae,0xa5,0x2c,0x3e,0x25,0xc2,0x4e,0x24,0x7a, + 0xb7,0xbf,0x6e,0x4f,0x2b,0x59,0x68,0x5c,0x4d,0x55,0x32,0x25,0x25,0x65,0x46,0x50, + 0xa8,0x5b,0x6e,0x64,0x4a,0x5e,0xba,0x7c,0x2e,0x23,0xbc,0x6b,0xa9,0x49,0x2a,0xc1, + 0x47,0x6a,0x5a,0x22,0xab,0x67,0x3d,0x7e,0x25,0x24,0x6b,0x4b,0xb2,0x2c,0x2d,0x4d, + 0x38,0x4d,0x4e,0xad,0x7d,0x6f,0x31,0xa2,0x23,0xa6,0xb9,0x75,0xc0,0x40,0xa3,0x2c, + 0x69,0x62,0xb1,0x46,0x36,0x76,0x4d,0x42,0x29,0x25,0x69,0xaa,0x40,0x49,0xa7,0x3a, + 0xac,0x3b,0x7b,0x53,0x75,0x7b,0x65,0x44,0x50,0x7c,0xad,0x7b,0xbf,0xa8,0x44,0xa3, + 0x46,0x3f,0x4a,0x54,0x79,0x5c,0xbe,0xae,0x70,0x2b,0xb4,0x63,0xa9,0x4f,0x2b,0x7c, + 0x57,0xaf,0x2a,0x2e,0xaf,0x68,0x74,0x3f,0x47,0xbe,0x28,0x77,0xbd,0x42,0x53,0x35, + 0x4a,0x34,0x27,0x52,0x7c,0x7c,0x70,0xb6,0x41,0x3d,0x3d,0x2b,0xa1,0xbc,0x44,0x79, + 0xab,0x77,0x67,0x53,0xc0,0x5a,0xb9,0xb0,0x57,0x2c,0x56,0x33,0xaf,0x6e,0x52,0x44, + 0xa8,0x75,0x6a,0x74,0xc1,0x64,0x6c,0xaf,0x5e,0xae,0x71,0x53,0xb8,0xa6,0x2e,0x5b, + 0x58,0xb8,0xa5,0x39,0x7a,0x76,0x73,0x42,0x25,0x2b,0x6c,0x26,0xb8,0x37,0x73,0x30, + 0xb3,0x7e,0x5e,0x59,0x61,0x5c,0x21,0x3b,0xc0,0x6b,0xbf,0x33,0xa6,0x34,0x29,0xb0, + 0xb9,0x52,0x6e,0x7c,0xab,0x63,0x2f,0x7d,0xac,0xae,0x4f,0xa9,0xaa,0x62,0x4b,0xaf, + 0x37,0xa7,0xac,0x29,0x5d,0x68,0xbc,0x5f,0xb5,0x5c,0xa4,0x43,0xbc,0x5c,0x2f,0x54, + 0x48,0xb0,0x3b,0x31,0x33,0x71,0xbf,0xb3,0x4a,0xaf,0x3b,0xb2,0x33,0x3d,0x52,0xb4, + 0x79,0x28,0xb6,0xb5,0x35,0x77,0xb2,0x22,0x28,0x45,0x74,0xab,0xb9,0x3d,0x2f,0x77, + 0xba,0x23,0x22,0xbf,0xba,0x71,0x32,0xad,0x2e,0x53,0x26,0xad,0x29,0x48,0x29,0xa7, + 0x57,0x53,0x56,0x7d,0x7c,0x64,0x4c,0x5e,0x3a,0x2c,0x57,0x39,0xae,0x43,0x2c,0x67, + 0x47,0xb9,0x66,0xa9,0xab,0x6b,0x59,0x5f,0x76,0x2c,0x27,0xb5,0xb8,0xb3,0x2e,0x74, + 0xaa,0x6d,0x5e,0xb2,0xa9,0x6d,0x73,0x60,0xa4,0xae,0xbe,0xba,0x32,0x48,0xa4,0x63, + 0xbb,0x72,0xad,0x46,0x22,0x77,0x6b,0xb4,0xae,0x35,0x6d,0xa8,0x41,0x27,0xa7,0xaf, + 0x6a,0x64,0xa1,0x5d,0x38,0x7c,0xa4,0x3a,0xc2,0x3b,0xa2,0x25,0x2a,0xa7,0x27,0x74, + 0x46,0xb5,0x6a,0x22,0x77,0x6b,0x60,0xa1,0x2f,0x7c,0xa9,0x55,0xbd,0x22,0xa3,0x6e, + 0x29,0x68,0x5b,0x4a,0x7d,0x77,0xbe,0x62,0xbc,0xbe,0x45,0x5b,0xaa,0xc1,0xc1,0x6f, + 0xb8,0x6b,0x2e,0x30,0x2e,0x6f,0x7c,0xb4,0xc2,0x59,0x45,0x46,0xc2,0x31,0xc0,0x23, + 0x6d,0x65,0x2b,0xad,0x30,0xbc,0x49,0x61,0x77,0xbb,0x22,0x4e,0x49,0x58,0x78,0xad, + 0x3d,0x7b,0xa2,0x6f,0x26,0x68,0x28,0x6e,0xa8,0xac,0x36,0x27,0xa7,0x66,0xb5,0xb2, + 0x3a,0x24,0xb2,0xc0,0xbc,0x55,0xa6,0x2a,0x59,0xb6,0x6b,0x51,0x7a,0x62,0xa2,0x7d, + 0x75,0x34,0x2f,0x39,0xbd,0x48,0xa7,0xb2,0xbc,0x54,0x5b,0x70,0x61,0x63,0x5c,0xb0, + 0xc1,0x64,0x77,0x21,0xb7,0xb0,0x4e,0x49,0x78,0x21,0x7a,0xbc,0x33,0x70,0x5d,0xa2, + 0x7a,0x74,0xbd,0x66,0x3c,0x36,0x54,0x60,0x2a,0x51,0x73,0x63,0x7d,0x7d,0xa1,0x5b, + 0x5e,0xbd,0xb2,0x7d,0xa7,0x47,0x2a,0xa8,0xaa,0xb2,0x66,0x52,0x74,0x5a,0x2f,0x5c, + 0x36,0x74,0x36,0x63,0xa4,0xc0,0x49,0x66,0x77,0x5f,0xa8,0xb8,0x43,0x76,0xa8,0x22, + 0x61,0x7b,0x71,0x73,0x21,0x6b,0x25,0x77,0x46,0x5a,0xb4,0x66,0xa3,0x60,0x4d,0x3c, + 0xb6,0x54,0x36,0x6d,0xa8,0x37,0x4a,0x77,0xa9,0x66,0x3a,0x7e,0x7e,0x65,0xb4,0x3e, + 0xa6,0x44,0x6d,0x5d,0xb6,0x41,0x2e,0x23,0x68,0x22,0xa9,0x33,0x2a,0x72,0x66,0x21, + 0x6c,0xa7,0x43,0xad,0x21,0xbb,0x46,0xbb,0x36,0x30,0x52,0x67,0xac,0x60,0xab,0x5d, + 0x63,0x64,0xa5,0xad,0xc0,0xb1,0x51,0xa7,0x49,0x5f,0x4f,0x54,0xb8,0xbd,0xa7,0x62, + 0x56,0x40,0x28,0xad,0xaa,0x5c,0x6e,0x52,0x21,0x28,0xbf,0x7c,0x5d,0x77,0x62,0x3b, + 0x4c,0x2b,0xa9,0xbd,0xa3,0x5b,0xa4,0x74,0x76,0x38,0xc2,0xb5,0x25,0x5a,0x3f,0x7c, + 0x78,0xae,0x35,0x65,0xa5,0xac,0x29,0x2f,0x57,0x56,0x46,0x7c,0x7d,0x68,0x39,0x3f, + 0xa3,0x25,0x36,0x72,0x3f,0x60,0xa8,0x28,0x6a,0x67,0xc0,0x4d,0x74,0x5a,0xa9,0x3b, + 0x23,0x7b,0xaa,0x6b,0x2e,0xa5,0x2a,0x4a,0x47,0xaa,0xac,0x2c,0x45,0x6a,0x30,0xb2, + 0x52,0x2d,0x3b,0x7e,0x36,0xb5,0x54,0x33,0x39,0xb6,0x2f,0x52,0xaa,0x79,0xbb,0x63, + 0x23,0x3d,0x2c,0x3e,0x48,0xbf,0x45,0x6f,0x56,0x55,0x4a,0x5c,0x6a,0x60,0xac,0x3d, + 0x79,0x74,0x6f,0xab,0xc0,0x40,0xa6,0xac,0x29,0xbc,0x27,0x5a,0x7a,0x59,0x36,0x7c, + 0x7c,0xb6,0x64,0xb9,0xb0,0x3e,0x2e,0x68,0x68,0x6a,0xb8,0xbb,0xa7,0x6f,0x4f,0x62, + 0x5d,0x45,0x59,0x6d,0x29,0x30,0x47,0x53,0xa8,0xb6,0x2e,0x77,0x23,0x6a,0x53,0xa1, + 0x27,0x2c,0x30,0x6a,0x3b,0x2f,0x54,0x33,0x59,0xc2,0x7e,0x6d,0xb7,0x64,0x6f,0x3e, + 0x28,0xaf,0x34,0x34,0x34,0xa8,0xa5,0x7b,0x4a,0x6f,0x2b,0x67,0x31,0xc0,0x41,0xad, + 0x60,0xbe,0x4b,0x5b,0xb0,0xba,0x2c,0x2d,0x38,0xb2,0x4b,0x45,0x5f,0x79,0x48,0x23, + 0x3e,0x55,0xab,0x6b,0x23,0x70,0x25,0x2e,0x36,0x55,0x22,0x74,0x35,0x62,0x67,0xaf, + 0x5b,0x48,0x25,0x4b,0x3b,0xc2,0x21,0x53,0x57,0x7b,0xac,0x23,0x66,0x66,0x55,0xa1, + 0x33,0x64,0x76,0x6b,0xbb,0x31,0x2f,0x52,0xaa,0xa1,0x7a,0xb5,0x3e,0x6e,0x56,0x21, + 0x38,0x75,0x3c,0x5c,0x33,0x55,0xa3,0xac,0x49,0x5d,0x3b,0x4a,0x36,0x77,0x29,0x23, + 0x49,0x2d,0x77,0x2e,0x42,0xa4,0x24,0xbd,0x46,0x68,0x66,0xa6,0x28,0x6c,0x71,0x41, + 0xc2,0x75,0x58,0xb3,0x2c,0xae,0x48,0xad,0x47,0x6e,0x53,0x52,0xa5,0x5a,0x27,0x7c, + 0x40,0x60,0x26,0x68,0x55,0x61,0x51,0x5d,0x47,0x34,0x41,0xbd,0xc1,0x69,0x51,0x35, + 0x29,0x5d,0x3f,0x56,0x5f,0x63,0x5c,0x3b,0x32,0x53,0xb7,0x31,0xaa,0xa1,0x47,0x48, + 0x27,0x46,0x52,0x77,0x3f,0x65,0x2f,0x3e,0x42,0xb6,0x5a,0x27,0xb1,0x2e,0x4e,0x2a, + 0x68,0x7e,0xb1,0x35,0x5a,0x73,0x64,0xb4,0x5b,0x75,0x68,0xbe,0x40,0x3a,0x55,0x5a, + 0x6a,0x3d,0xb5,0x53,0x41,0x7a,0x77,0x43,0x6a,0x25,0xa2,0x68,0x47,0x4c,0x57,0x72, + 0x2a,0xa3,0x76,0x4d,0x2d,0x6b,0x28,0x60,0x50,0x24,0xac,0x53,0xbe,0xa7,0x2f,0xa8, + 0xaa,0xb9,0x43,0x39,0x2a,0x78,0x4e,0x42,0xb2,0x75,0x69,0x52,0x41,0x43,0x2a,0x78, + 0xb9,0x7b,0x3e,0xac,0xbd,0x59,0x7c,0x7d,0xc0,0xa7,0xbc,0x3b,0x22,0xb3,0x48,0xb5, + 0xa9,0xaa,0x7b,0x3f,0x2e,0x75,0x4e,0xb4,0x3c,0x54,0x33,0xae,0x32,0x32,0xc0,0x52, + 0x21,0x28,0xbf,0xbd,0x36,0x77,0xb8,0x7b,0x64,0x7b,0x21,0xab,0x27,0x4c,0x47,0x77, + 0x46,0xa7,0x5a,0xa4,0xa3,0x70,0x27,0x21,0x31,0x65,0x38,0x2c,0x32,0x22,0xa6,0x62, + 0x4a,0x3b,0xc1,0x66,0xb5,0xa1,0x2e,0x3b,0x3d,0x53,0x6b,0x71,0x24,0xc0,0x29,0x36, + 0x77,0xb6,0x42,0x6a,0x39,0x58,0x7a,0x3b,0x3f,0x53,0x28,0x63,0x2d,0x60,0x28,0x7d, + 0x27,0x35,0x22,0x22,0x6c,0x67,0x62,0x3e,0x2c,0xb6,0x78,0x59,0xb8,0xbd,0x4e,0x5d, + 0x48,0x61,0xac,0xb7,0x7a,0x6e,0x62,0xb2,0x30,0x2c,0xb8,0x2d,0xc2,0xbd,0x51,0x66, + 0x49,0x61,0xb5,0x50,0x7a,0x7c,0x5d,0xb6,0x46,0x45,0xc0,0x3f,0x23,0xa5,0x25,0x2e, + 0x2a,0x76,0x5b,0x43,0x34,0x58,0x65,0x7d,0xb3,0x64,0x6f,0xad,0xa2,0xb4,0x47,0xb5, + 0x27,0x6d,0x52,0x29,0xbb,0x67,0x77,0xb1,0x73,0x6c,0xa6,0x6c,0x42,0x6f,0x55,0xbb, + 0x79,0x70,0x42,0xb5,0x62,0x6e,0x6b,0xae,0xc0,0x63,0x6b,0x79,0x25,0x50,0x46,0x66, + 0xa8,0x76,0x46,0x64,0xb3,0x61,0x45,0xaf,0x5e,0x64,0x39,0xaf,0xaa,0x5b,0x2b,0x57, + 0x29,0x43,0x33,0x5e,0x62,0x7d,0xba,0x64,0x43,0xa5,0x72,0x57,0x24,0x53,0x46,0x60, + 0x76,0x69,0x38,0xb7,0x29,0x62,0x31,0x30,0x5f,0x44,0x42,0x27,0xa9,0xb1,0x2a,0xbb, + 0x47,0xc2,0x6e,0x2f,0x53,0x6b,0x3f,0x3f,0x72,0x70,0x25,0x4b,0x3b,0xc2,0x76,0x58, + 0x3a,0x53,0x76,0x59,0x37,0x5c,0x4a,0x7b,0xb7,0x73,0xc1,0x65,0xa4,0x58,0x4b,0xae, + 0x38,0x36,0x66,0xa4,0x6c,0x6f,0xa8,0x62,0x57,0x23,0xa7,0x28,0x32,0x22,0x49,0xa4, + 0x38,0x6a,0xb9,0x32,0x5b,0x77,0x46,0x3c,0x33,0xae,0x43,0xb9,0xac,0x7b,0x27,0xa5, + 0x46,0xb6,0x6e,0x2d,0x34,0xc0,0x4b,0x61,0x25,0xa5,0x78,0xa3,0x24,0x46,0x47,0x55, + 0x37,0x33,0x5e,0x74,0x37,0x66,0x2d,0x3e,0xa2,0x34,0x61,0x6d,0xbe,0xaa,0x51,0x4b, + 0x79,0x47,0x4b,0x4c,0x61,0x79,0x5d,0x64,0x31,0x58,0xae,0x3f,0xa7,0x23,0x4c,0xb5, + 0x47,0x51,0x42,0x7b,0xa1,0x59,0x75,0x3b,0x72,0xbd,0x2d,0x4e,0x3b,0x60,0x29,0x5f, + 0xa9,0x71,0x48,0xb8,0x2c,0x6b,0x25,0xa2,0x68,0x3c,0xb7,0x66,0x41,0x34,0x47,0x4a, + 0x77,0x7c,0xc1,0x33,0x5b,0x75,0x71,0x43,0x34,0x7d,0xa4,0xb3,0x21,0x5c,0x27,0x66, + 0x76,0x7d,0x26,0x75,0x40,0x79,0x3b,0x24,0x66,0xae,0x36,0xb5,0xb5,0xae,0x56,0x5d, + 0x46,0x6b,0x4a,0x66,0xb7,0x5f,0xa5,0x7d,0x5b,0xae,0x44,0xb7,0xa7,0x6c,0x2a,0xbf, + 0x57,0xa4,0xbc,0x2b,0x5d,0x6a,0x3e,0xa1,0x74,0x54,0xa4,0xb1,0xc2,0x27,0xa3,0x2c, + 0x69,0xab,0x2f,0x61,0x55,0x5a,0x41,0x7b,0xba,0xbe,0x4e,0x41,0xb5,0xb4,0x2e,0x46, + 0x49,0xa8,0x4b,0x4f,0x42,0x7a,0x6e,0x52,0x21,0x28,0xbf,0x4c,0x47,0x66,0x25,0x6e, + 0x26,0x4b,0x62,0x77,0xac,0x58,0x72,0x3b,0x2a,0x64,0x32,0x5f,0xa8,0x7e,0x2c,0x40, + 0xb9,0xad,0x62,0xa8,0xc0,0x6a,0x36,0xb2,0x59,0x6d,0x57,0x6c,0x3d,0x67,0x28,0xb4, + 0xa9,0xc2,0xa8,0xa4,0x59,0x71,0x74,0x7d,0x4c,0xbd,0x6e,0x4f,0x21,0x51,0x29,0x79, + 0xba,0x47,0x4e,0xba,0xab,0x6f,0xbd,0x60,0xb7,0xaf,0x73,0x2c,0x48,0x3d,0xa9,0x27, + 0xab,0xa6,0x5a,0x5f,0xb6,0x60,0x5d,0x3d,0xb3,0xaf,0x42,0x5c,0x3b,0x41,0x46,0x33, + 0xa8,0x2c,0x3e,0x6e,0xa5,0x60,0x33,0x7c,0xbb,0x4c,0x47,0xb8,0x31,0x4f,0xa4,0x62, + 0x4a,0x5b,0xb1,0x5d,0x79,0x58,0x72,0x5b,0x61,0xad,0x7d,0x4f,0x24,0x74,0x46,0x50, + 0x56,0x51,0x3e,0x5f,0x34,0x60,0x36,0x7d,0x3a,0x2c,0x3b,0xa5,0xa5,0x5b,0x29,0xa3, + 0xb2,0x28,0x36,0x29,0xa9,0x67,0xaf,0x5f,0x24,0x44,0xa6,0x6e,0x31,0x48,0xa3,0x6c, + 0xab,0x44,0x37,0x3a,0x63,0x73,0x54,0x62,0x32,0x45,0x55,0x48,0x41,0xb8,0x55,0x30, + 0x2a,0x75,0x77,0x67,0x76,0x60,0x5e,0x3d,0xb0,0xae,0x49,0x53,0xb3,0x34,0x4d,0x71, + 0xc2,0x28,0x28,0xad,0xa2,0x6f,0x25,0x7e,0x56,0xbd,0x7e,0x73,0x24,0x64,0x77,0x5e, + 0x51,0x44,0x70,0x75,0xb7,0x65,0x4f,0x5e,0x39,0x74,0xa9,0x4a,0x78,0x7d,0x62,0x44, + 0x35,0x4d,0xae,0xad,0x36,0x36,0x70,0xa3,0x4d,0x3b,0x21,0x6f,0xbd,0x5a,0x2b,0x6f, + 0xbb,0x23,0x5b,0x4a,0x59,0x7d,0x5c,0x24,0x48,0xa5,0xc1,0x27,0xa5,0x2a,0x4e,0x66, + 0xaa,0x66,0x5f,0x41,0xc2,0x79,0x41,0x23,0xa6,0x7b,0x7d,0xbb,0x30,0xa5,0x28,0xbc, + 0x77,0xa9,0x62,0xa9,0xa5,0x6b,0xa5,0xb1,0x25,0x64,0xb2,0xc0,0x33,0xa1,0xa9,0x5a, + 0xb7,0xb4,0xb5,0x51,0x3c,0x58,0x46,0x5a,0xbd,0x63,0x7d,0x4f,0x2a,0xa7,0x48,0x77, + 0x37,0x66,0x7e,0x29,0x26,0x6b,0x4e,0xb3,0x67,0x65,0x50,0x32,0x3d,0x59,0x55,0x34, + 0xac,0x69,0x27,0x6a,0x22,0x5d,0x4f,0x3c,0x66,0x35,0x49,0x5a,0x3c,0x2b,0x58,0x6b, + 0x56,0x2c,0x52,0x72,0x3e,0x61,0x6d,0x5d,0x26,0x6c,0x61,0x75,0xb2,0x22,0x2c,0xa6, + 0x58,0x33,0x26,0xc2,0xb3,0x70,0xa7,0x63,0x2a,0x45,0x26,0x52,0x47,0xac,0xa8,0xb1, + 0x56,0x43,0x43,0x50,0xc0,0x59,0x7b,0xad,0x7c,0x73,0x22,0x77,0x26,0x76,0x46,0x68, + 0x67,0x26,0x26,0x2c,0x29,0x6f,0x2a,0x21,0x5a,0xa7,0x7a,0xb2,0x47,0x6d,0xaa,0x72, + 0x36,0x57,0x52,0x5a,0x23,0x6c,0x6a,0x41,0xad,0x55,0x28,0x5a,0x46,0x5f,0x56,0x25, + 0x55,0xb3,0x56,0x50,0xb1,0x5d,0xbc,0x7c,0x60,0x6b,0xb8,0x55,0xa3,0x7c,0x29,0x7e, + 0x27,0x6b,0x36,0x22,0x37,0x67,0x3c,0xb0,0xa6,0x74,0xc1,0x68,0x31,0x46,0x6e,0x52, + 0x21,0x28,0xbf,0x7b,0x39,0xc0,0x33,0x70,0x51,0x5d,0xa5,0x7b,0xa1,0x5b,0x25,0x47, + 0x66,0x55,0x7e,0x5f,0x2b,0x5d,0x2b,0x5c,0x6c,0x4b,0xb2,0x41,0xa4,0x6c,0x2b,0x5f, + 0xb9,0xac,0x3e,0xa4,0xbc,0x74,0xbb,0xb4,0x48,0x45,0x5c,0xa2,0x3b,0x72,0x55,0x4e, + 0x2a,0x7e,0xa5,0x66,0x6f,0x5a,0x3f,0x3e,0x32,0x63,0x72,0xb3,0x2f,0x58,0x2a,0xab, + 0xbb,0x4b,0x63,0x42,0x5c,0x58,0x35,0x5b,0x7b,0xb5,0x2c,0x7d,0xb6,0x3b,0xa7,0x70, + 0xbc,0x69,0x57,0x63,0x28,0x7d,0xa9,0x64,0x46,0x4b,0x2b,0x6f,0x29,0x5e,0xa4,0x77, + 0x49,0x26,0x7a,0x74,0xb9,0x66,0x4f,0xb1,0x6e,0x45,0x6a,0x3f,0xae,0x26,0x56,0x7b, + 0xbc,0x23,0x26,0x63,0x31,0x6a,0x4b,0xb4,0x27,0x7d,0x30,0x59,0xa2,0xbd,0x48,0x35, + 0xa8,0xc2,0xa4,0x73,0x2c,0x64,0x6b,0xb0,0x7b,0x2c,0x73,0x39,0xb6,0x2d,0x2d,0xc2, + 0xaa,0x4a,0x56,0xb1,0x7e,0x6c,0x21,0xb2,0x27,0x44,0xb7,0x77,0xc1,0x4c,0xa3,0x7b, + 0x59,0x71,0x5c,0xb8,0xa5,0x77,0x43,0x63,0x57,0xbf,0xa4,0x53,0x2c,0x6b,0x4f,0x79, + 0x39,0x71,0x37,0x62,0x7d,0x5e,0x69,0x3a,0xb8,0x53,0x7d,0xbf,0x2a,0xc1,0x28,0x38, + 0xa9,0x4c,0xa8,0x2c,0xbc,0x6a,0x32,0x61,0x41,0x6d,0x37,0x76,0x34,0xaa,0xa7,0x77, + 0x3a,0x76,0x52,0x4d,0x75,0x59,0x75,0x5b,0x59,0x30,0x28,0x7d,0x38,0xc1,0x42,0x71, + 0x50,0x59,0x61,0x35,0x31,0x62,0x48,0xbb,0x57,0xa9,0x6a,0x2d,0x36,0x69,0x45,0x3f, + 0x3b,0xbe,0x73,0x55,0xb4,0xb7,0x2d,0xb0,0x48,0x53,0x5b,0x38,0x53,0x74,0x29,0x62, + 0x31,0x75,0x73,0x76,0x41,0x22,0xa7,0xb8,0x3a,0x7c,0x6a,0x53,0x28,0x60,0xbb,0x3d, + 0x37,0x6c,0x37,0xa9,0xa9,0x5d,0xa4,0x5a,0x59,0xb8,0x6f,0x54,0x3c,0x7c,0x24,0x7a, + 0xac,0x43,0x6a,0xbb,0x25,0xad,0x27,0x50,0x56,0x74,0xb8,0x64,0x66,0x5f,0x3a,0xae, + 0xb6,0x64,0x3a,0x41,0xa5,0x36,0x4a,0x7d,0xb9,0x68,0x5e,0x27,0xac,0x67,0xb6,0xb0, + 0x26,0x64,0x6c,0xb3,0xb1,0x7b,0x4c,0xbf,0x37,0xc2,0x56,0x2f,0x2e,0x69,0x65,0x3f, + 0x53,0x5c,0x22,0x65,0xb7,0xb3,0x4e,0x43,0x68,0x63,0xb4,0xb6,0x7b,0x6f,0x38,0xa2, + 0xb1,0x3d,0x33,0x7e,0x33,0x66,0xa4,0x48,0xbb,0x53,0x6b,0x3d,0x30,0x74,0x4e,0x41, + 0xba,0x6d,0x5e,0x26,0x3d,0x27,0x55,0xa3,0x3a,0x74,0x47,0x62,0x22,0x61,0x36,0x7d, + 0x58,0x6d,0x76,0x65,0x2b,0x38,0x2a,0x2f,0xb9,0xac,0xbc,0x2d,0x70,0x6b,0x41,0x24, + 0x70,0xad,0xc2,0x65,0xa3,0x38,0x2f,0xbb,0x76,0x51,0xa4,0x6f,0x2f,0x67,0x65,0xb0, + 0x73,0x24,0x68,0x61,0xb3,0x33,0x30,0x60,0x49,0x61,0x63,0x45,0x6c,0xa1,0x76,0x7b, + 0x69,0xa5,0x21,0x3b,0x2c,0x4e,0x4b,0x7e,0x68,0x34,0x28,0xae,0xa9,0x34,0xc2,0x32, + 0x71,0x40,0x25,0x49,0x33,0x31,0x54,0x60,0x4c,0xb6,0xa9,0xa6,0x33,0xba,0xa3,0xb1, + 0x49,0x23,0x37,0x48,0x59,0x77,0x4e,0x43,0xb3,0x30,0xae,0xab,0xa7,0x46,0x2a,0x68, + 0x58,0x76,0xb0,0xb3,0xae,0x6e,0x3f,0x3a,0xac,0x23,0x26,0x51,0x2a,0x24,0x47,0xb2, + 0x66,0xb8,0x3e,0x72,0x2c,0x62,0x29,0x5e,0x67,0x5c,0x4a,0x57,0xab,0x3d,0x2c,0x7d, + 0x28,0x3e,0x72,0xab,0x39,0x6f,0xa4,0x43,0x37,0x7d,0xab,0x7c,0x4d,0x4e,0x2c,0x6b, + 0x47,0xb4,0xbc,0xa9,0x72,0x77,0x63,0x23,0x30,0x33,0x76,0x49,0x2f,0x25,0x48,0xac, + 0x27,0x38,0x2a,0x71,0x61,0x61,0x24,0x3d,0x45,0x4c,0x4a,0x39,0xa9,0x23,0x2b,0x69, + 0x47,0xa5,0xc0,0x2e,0x7a,0x68,0x49,0x7e,0xb7,0xa6,0x77,0x69,0xb7,0x74,0x2e,0x29, + 0x48,0x2a,0x4e,0xbb,0x23,0x72,0x26,0xb3,0xb8,0x3d,0x73,0x4c,0x47,0xa4,0xaa,0x76, + 0xb8,0x4f,0xbc,0x5e,0xbe,0x60,0x53,0x7c,0xb9,0x44,0x33,0x59,0xa3,0xbe,0x29,0x5d, + 0xa9,0x61,0x3e,0xa2,0x4d,0x66,0x6c,0x7e,0x2b,0xb6,0x6e,0xa3,0xb3,0x66,0x4d,0xb0, + 0x58,0xb8,0xbd,0x33,0x65,0x72,0xb8,0x41,0xad,0x75,0x5c,0x3a,0x3d,0x72,0x25,0xa1, + 0x58,0x4d,0x2a,0x67,0xae,0x66,0x32,0x43,0xa1,0xb5,0x23,0x3d,0x27,0x5f,0x27,0xac, + 0x37,0x5d,0x46,0x7c,0x7a,0x64,0x58,0xb0,0x39,0xae,0x68,0x3e,0xb8,0xb6,0x32,0xc2, + 0x72,0xb3,0x38,0xad,0x3d,0x32,0x31,0x38,0x68,0x46,0x23,0x31,0xb8,0x79,0x24,0x64, + 0x5b,0xbd,0x6d,0x63,0x21,0x7e,0x45,0xa4,0xa8,0x52,0xb4,0x5a,0x3a,0x5b,0xb4,0x5b, + 0x24,0xbd,0xbd,0x49,0x30,0x4f,0x2a,0xaf,0xaa,0x3f,0xb8,0xa9,0x36,0x79,0x67,0xad, + 0x60,0x4b,0x7a,0x79,0x29,0xaa,0x47,0x31,0x78,0x3d,0x6e,0xa6,0xbe,0x69,0xaf,0x41, + 0x22,0x4d,0x5b,0x41,0xa9,0x25,0x52,0x65,0xb8,0x5d,0x42,0x7d,0x7b,0x69,0x7d,0x61, + 0x75,0x7b,0xa1,0x63,0x26,0xa3,0x2b,0xae,0x46,0xc0,0xb8,0x70,0xb1,0x62,0xa5,0x5d, + 0xa7,0x6c,0x78,0xa6,0x3b,0x3f,0xa6,0xba,0xac,0xb3,0x76,0x4f,0x6b,0x63,0x63,0xb1, + 0x37,0x64,0x26,0xa2,0x37,0x63,0x49,0x3a,0xab,0x30,0xa5,0x6b,0x78,0x59,0xc0,0x7b, + 0x41,0x73,0x7d,0xaf,0xb0,0xbf,0x51,0x4b,0x4a,0xb3,0x26,0x7d,0x54,0x66,0xa9,0x3f, + 0x3e,0x5c,0x25,0x37,0x25,0x6d,0x28,0x31,0xba,0xab,0x2b,0x45,0x51,0x66,0xa2,0x5e, + 0x65,0x64,0x5d,0xb3,0x25,0x69,0x49,0x38,0x27,0xb1,0x26,0xc1,0x39,0x72,0x66,0x7b, + 0x3e,0xb5,0x77,0x69,0x26,0x66,0x26,0x2a,0x26,0x68,0x62,0x63,0x3a,0x5e,0x74,0x3c, + 0xac,0x7c,0x37,0x61,0xa4,0x49,0x29,0x7c,0xa9,0x68,0x4a,0x7e,0x4a,0x69,0xb1,0x5f, + 0x4c,0x24,0x77,0xa1,0xb5,0x24,0x2f,0x51,0x38,0x26,0x7a,0xc1,0xb3,0xbd,0x74,0x52, + 0x60,0xbb,0x66,0x6e,0xa3,0x60,0xbb,0x3d,0x3f,0x34,0x38,0x71,0xa5,0xb3,0x49,0xbf, + 0x37,0x58,0x32,0x7c,0xa3,0x64,0x69,0x3d,0xc1,0x34,0x54,0x71,0xac,0xb3,0x4b,0x2d, + 0x37,0x30,0x32,0x2a,0xa3,0x67,0xbb,0x3e,0xb1,0x34,0x70,0x71,0xb3,0xb3,0x4d,0x6d, + 0x38,0x48,0x32,0xaa,0xa3,0x6b,0x69,0x3f,0x2f,0x34,0x2c,0x71,0xba,0xb3,0x4f,0x4d, + 0x38,0xa2,0x32,0xb8,0xa3,0x6e,0xbb,0x40,0xa1,0x34,0xba,0x71,0xc1,0xb3,0x50,0xbf, + 0x39,0x38,0x33,0x34,0xa3,0x72,0x69,0x41,0x6f,0x35,0x44,0x72,0x36,0xb3,0x52,0x2d, + 0x39,0x70,0x33,0x42,0xa3,0x75,0xbb,0x42,0x5f,0x35,0x60,0x72,0x3d,0xb3,0x54,0x6d, + 0x39,0xba,0x33,0x50,0xa3,0x79,0x69,0x43,0x4f,0x35,0x7c,0x72,0x44,0xb3,0x56,0x4d, + 0x3a,0x60,0x33,0x5e,0xa3,0x7c,0xbb,0x44,0x3f,0x35,0xaa,0x72,0x4b,0xb3,0x57,0xbf, + 0x3a,0xaa,0x33,0x6c,0xa3,0xa2,0x69,0x44,0xc1,0x36,0x34,0x72,0x52,0xb3,0x59,0x2d, + 0x3b,0x50,0x33,0x7a,0xa3,0x23,0xbb,0x45,0xb1,0x36,0x50,0x72,0x59,0xb3,0x5b,0x6d, + 0x3b,0x28,0x33,0x28,0xa3,0x27,0x69,0x46,0x2f,0x36,0x6c,0x72,0x60,0xb3,0x5d,0x4d, + 0x3c,0x40,0x33,0xa8,0xa3,0x2a,0xbb,0x47,0xa1,0x36,0x28,0x72,0x67,0xb3,0x5e,0xbf, + 0x3c,0x78,0x33,0xb6,0xa3,0x2e,0x69,0x48,0x70,0x59,0x65,0x46,0xc2,0x65,0xc0,0x6b, + 0x71,0x59,0x31, +} ; + +// BIG5とUTF-16の対応表を圧縮したもの +u8 CP950ToUTF16Table[] = +{ + 0x40,0x5a,0x31,0x31,0x31,0x31,0x31,0x31,0x51,0x31,0xbd,0x79,0x31,0x31,0x5a,0x71, + 0x31,0x31,0x35,0x31,0x33,0x31,0x31,0xa3,0x31,0x51,0x31,0x3b,0x31,0x34,0x31,0x31, + 0xb3,0x31,0x51,0x31,0x3a,0x31,0x33,0x71,0x31,0x29,0x31,0x49,0x31,0x37,0x71,0x32, + 0xa3,0x31,0x6d,0x31,0x41,0x31,0x35,0x51,0x32,0x41,0x31,0x57,0x31,0x3b,0x31,0x33, + 0x21,0x31,0x29,0x31,0x48,0x31,0x37,0x31,0x32,0x79,0x31,0x65,0x31,0x3e,0x71,0x34, + 0x71,0x31,0xb7,0x31,0x4f,0x31,0x38,0xa3,0x33,0x31,0x31,0x73,0x31,0x42,0x31,0x35, + 0x61,0x32,0x41,0x31,0x56,0x31,0x3a,0x71,0x33,0x69,0x31,0x21,0x31,0x45,0x71,0x36, + 0x51,0x32,0x5d,0x31,0x5d,0x31,0x3c,0x51,0x33,0xb3,0x31,0x2f,0x31,0x49,0x31,0x37, + 0x41,0x32,0x79,0x31,0x64,0x31,0x3e,0x31,0x34,0x59,0x31,0xaf,0x31,0x4c,0x71,0x38, + 0x31,0x32,0xa7,0x31,0x6b,0x31,0x3f,0xa3,0x34,0xa3,0x31,0xbd,0x31,0x50,0x31,0x38, + 0xb3,0x33,0x31,0x31,0x72,0x31,0x41,0x71,0x35,0x49,0x32,0x39,0x31,0x53,0x71,0x39, + 0xa3,0x33,0x4d,0x31,0x79,0x31,0x43,0x51,0x35,0x21,0x32,0x47,0x31,0x57,0x31,0x3a, + 0x21,0x33,0x69,0x31,0xa2,0x31,0x45,0x31,0x36,0x39,0x32,0x55,0x31,0x5a,0x71,0x3b, + 0x71,0x33,0x25,0x31,0x27,0x31,0x46,0xa3,0x36,0x71,0x32,0x63,0x31,0x5e,0x31,0x3c, + 0x61,0x33,0xb3,0x31,0x2e,0x31,0x48,0x71,0x36,0xbb,0x32,0x71,0x31,0x61,0x71,0x3d, + 0x51,0x34,0x3d,0x31,0xa7,0x31,0x4a,0x51,0x37,0x61,0x32,0xa1,0x31,0x65,0x31,0x3e, + 0x41,0x34,0x59,0x31,0xae,0x31,0x4c,0x31,0x37,0xab,0x32,0x2d,0x31,0x68,0x71,0x3f, + 0x31,0x34,0x75,0x31,0xb5,0x31,0x4d,0xa3,0x38,0x51,0x32,0xad,0x31,0x6c,0x31,0x3f, + 0xb3,0x34,0xa3,0x31,0xbc,0x31,0x4f,0x71,0x38,0x29,0x32,0xbb,0x31,0x6f,0x71,0x40, + 0xa3,0x34,0xbf,0x32,0x31,0x31,0x5a,0x2b,0x21,0x69,0x31,0x34,0x57,0xb9,0x72,0xa3, + 0x4b,0x67,0x25,0x3f,0x31,0x32,0x5a,0x2e,0x21,0x69,0x37,0x7e,0x26,0x34,0x71,0x31, + 0x6b,0x68,0x65,0x3f,0x32,0x24,0x66,0x51,0xb3,0x31,0x43,0x7e,0xb0,0x34,0x71,0x65, + 0xb0,0x59,0x4d,0x31,0x36,0x24,0x6c,0x51,0xb3,0x3e,0x4c,0x5b,0x38,0x31,0x32,0x25, + 0xb1,0xab,0x4d,0x34,0x57,0xad,0x72,0xa3,0x31,0x6e,0x4c,0x2b,0x38,0x31,0xac,0x2b, + 0x21,0x69,0x31,0x42,0x57,0xb9,0x72,0xa3,0x4b,0x67,0x25,0x3f,0x31,0x35,0xac,0x2e, + 0x21,0x69,0x37,0x7e,0x26,0x34,0x71,0x32,0x5b,0x68,0x65,0x3f,0x32,0x24,0x66,0x51, + 0xb3,0x31,0x5f,0x7e,0xb0,0x34,0x71,0x65,0xb0,0x59,0x4d,0x31,0x3d,0x24,0x6c,0x51, + 0xb3,0x3e,0x4c,0x5b,0x38,0x31,0x34,0x65,0xb1,0xab,0x4d,0x34,0x57,0xad,0x72,0xa3, + 0x31,0xb8,0x4c,0x2b,0x38,0x31,0xac,0x2b,0x21,0x69,0x31,0x50,0x57,0xb9,0x72,0xa3, + 0x4b,0x67,0x25,0x3f,0x31,0x39,0x5a,0x2e,0x21,0x69,0x37,0x7e,0x26,0x34,0x71,0x33, + 0x4b,0x68,0x65,0x3f,0x32,0x24,0x66,0x51,0xb3,0x31,0x7b,0x7e,0xb0,0x34,0x71,0x65, + 0xb0,0x59,0x4d,0x31,0x44,0x24,0x6c,0x51,0xb3,0x3e,0x4c,0x5b,0x38,0x31,0x36,0x45, + 0xb1,0xab,0x4d,0x34,0x57,0xad,0x72,0xa3,0x32,0x5e,0x4c,0x2b,0x38,0x31,0xac,0x2b, + 0x21,0x69,0x31,0x5e,0x57,0xb9,0x72,0xa3,0x4b,0x67,0x25,0x3f,0x31,0x3c,0xac,0x2e, + 0x21,0x69,0x37,0x7e,0x26,0x34,0x71,0x34,0x3b,0x68,0x65,0x3f,0x32,0x24,0x66,0x51, + 0xb3,0x31,0xa9,0x7e,0xb0,0x34,0x71,0x65,0xb0,0x59,0x4d,0x31,0x4b,0x24,0x6c,0x51, + 0xb3,0x3e,0x4c,0x5b,0x38,0x31,0x37,0xb7,0xb1,0xab,0x4d,0x34,0x57,0xad,0x72,0xa3, + 0x32,0xa8,0x4c,0x2b,0x38,0x31,0xac,0x2b,0x21,0x69,0x31,0x6c,0x57,0xb9,0x72,0xa3, + 0x4b,0x67,0x25,0x3f,0x31,0x40,0x5a,0x2e,0x21,0x69,0x37,0x7e,0x26,0x34,0x71,0x34, + 0xbd,0x68,0x65,0x3f,0x32,0x24,0x66,0x51,0xb3,0x32,0x33,0x7e,0xb0,0x34,0x71,0x65, + 0xb0,0x59,0x4d,0x31,0x52,0x24,0x6c,0x51,0xb3,0x3e,0x4c,0x5b,0x38,0x31,0x39,0x25, + 0xb1,0xab,0x4d,0x34,0x57,0xad,0x72,0xa3,0x33,0x4e,0x4c,0x2b,0x38,0x31,0xac,0x2b, + 0x21,0x69,0x31,0x7a,0x57,0xb9,0x72,0xa3,0x4b,0x67,0x25,0x3f,0x31,0x43,0xac,0x2e, + 0x21,0x69,0x37,0x7e,0x26,0x34,0x71,0x35,0xad,0x68,0x65,0x3f,0x32,0x24,0x66,0x51, + 0xb3,0x32,0x4f,0x7e,0xb0,0x34,0x71,0x65,0xb0,0x59,0x4d,0x31,0x59,0x24,0x6c,0x51, + 0xb3,0x3e,0x4c,0x5b,0x38,0x31,0x3b,0x65,0xb1,0xab,0x4d,0x34,0x57,0xad,0x72,0xa3, + 0x33,0x26,0x4c,0x2b,0x38,0x31,0xac,0x2b,0x21,0x69,0x31,0x28,0x57,0xb9,0x72,0xa3, + 0x4b,0x67,0x25,0x3f,0x31,0x47,0x5a,0x2e,0x21,0x69,0x37,0x7e,0x26,0x34,0x71,0x36, + 0x2b,0x68,0x65,0x3f,0x32,0x24,0x66,0x51,0xb3,0x32,0x6b,0x7e,0xb0,0x34,0x71,0x65, + 0xb0,0x59,0x4d,0x31,0x60,0x24,0x6c,0x51,0xb3,0x3e,0x4c,0x5b,0x38,0x31,0x3d,0x45, + 0xb1,0xab,0x4d,0x34,0x57,0xad,0x72,0xa3,0x34,0x3e,0x4c,0x2b,0x38,0x31,0xac,0x2b, + 0x21,0x69,0x31,0xa8,0x57,0xb9,0x72,0xa3,0x4b,0x67,0x25,0x3f,0x31,0x4a,0xac,0x2e, + 0x21,0x69,0x37,0x7e,0x26,0x34,0x71,0x37,0x7b,0x68,0x65,0x3f,0x32,0x24,0x66,0x51, + 0xb3,0x32,0x27,0x7e,0xb0,0x34,0x71,0x65,0xb0,0x59,0x4d,0x31,0x67,0x24,0x6c,0x51, + 0xb3,0x3e,0x4c,0x5b,0x38,0x31,0x3e,0xb7,0xb1,0xab,0x4d,0x34,0x57,0xad,0x72,0xa3, + 0x34,0x76,0x4c,0x2b,0x38,0x31,0xac,0x2b,0x21,0x69,0x31,0xb6,0x57,0xb9,0x72,0xa3, + 0x4b,0x67,0x25,0x3f,0x31,0x4e,0x5a,0x2e,0x21,0x69,0x37,0x7e,0x26,0x34,0x71,0x38, + 0x6b,0x68,0x65,0x3f,0x32,0x24,0x66,0x51,0xb3,0x32,0xb5,0x7e,0xb0,0x34,0x71,0x65, + 0xb0,0x59,0x4d,0x31,0x6e,0x24,0x6c,0x51,0xb3,0x3e,0x4c,0x5b,0x38,0x31,0x40,0x25, + 0xb1,0xab,0x4d,0x34,0x57,0xad,0x72,0xa3,0x34,0xc0,0x4c,0x2b,0x38,0x31,0xac,0x2b, + 0x21,0x69,0x32,0x32,0x57,0xb9,0x72,0xa3,0x4b,0x67,0x25,0x3f,0x31,0x51,0xac,0x2e, + 0x21,0x69,0x37,0x7e,0x26,0x34,0x71,0x39,0x5b,0x68,0x65,0x3f,0x32,0x24,0x66,0x51, + 0xb3,0x33,0x3f,0x7e,0xb0,0x34,0x71,0x65,0xb0,0x59,0x4d,0x31,0x75,0x24,0x6c,0x51, + 0xb3,0x3e,0x4c,0x5b,0x38,0x31,0x42,0x65,0xb1,0xab,0x4d,0x34,0x57,0xad,0x72,0xa3, + 0x35,0x66,0x4c,0x2b,0x38,0x31,0xac,0x2b,0x21,0x69,0x32,0x40,0x57,0xb9,0x72,0xa3, + 0x4b,0x67,0x25,0x3f,0x31,0x55,0x5a,0x2e,0x21,0x69,0x37,0x7e,0x26,0x34,0x71,0x3a, + 0x4b,0x68,0x65,0x3f,0x32,0x24,0x66,0x51,0xb3,0x33,0x5b,0x7e,0xb0,0x34,0x71,0x65, + 0xb0,0x59,0x4d,0x31,0x7c,0x24,0x6c,0x51,0xb3,0x3e,0x4c,0x5b,0x38,0x31,0x44,0x45, + 0xb1,0xab,0x4d,0x34,0x57,0xad,0x72,0xa3,0x35,0xb0,0x4c,0x2b,0x38,0x31,0xac,0x2b, + 0x21,0x69,0x32,0x4e,0x57,0xb9,0x72,0xa3,0x4b,0x67,0x25,0x3f,0x31,0x58,0xac,0x2e, + 0x21,0x69,0x37,0x7e,0x26,0x34,0x71,0x3b,0x3b,0x68,0x65,0x3f,0x32,0x24,0x66,0x51, + 0xb3,0x33,0x77,0x7e,0xb0,0x34,0x71,0x65,0xb0,0x59,0x4d,0x31,0x23,0x24,0x6c,0x51, + 0xb3,0x3e,0x4c,0x5b,0x38,0x31,0x45,0xb7,0xb1,0xab,0x4d,0x34,0x57,0xad,0x72,0xa3, + 0x36,0x56,0x4c,0x2b,0x38,0x31,0xac,0x2b,0x21,0x69,0x32,0x5c,0x57,0xb9,0x72,0xa3, + 0x4b,0x67,0x25,0x3f,0x31,0x5c,0x5a,0x2e,0x21,0x69,0x37,0x7e,0x26,0x34,0x71,0x3b, + 0xbd,0x68,0x65,0x3f,0x32,0x24,0x66,0x51,0xb3,0x33,0xa5,0x7e,0xb0,0x34,0x71,0x65, + 0xb0,0x59,0x4d,0x31,0x2a,0x24,0x6c,0x51,0xb3,0x3e,0x4c,0x5b,0x38,0x31,0x47,0x25, + 0xb1,0xab,0x4d,0x34,0x57,0xad,0x72,0xa3,0x36,0x2e,0x4c,0x2b,0x38,0x31,0xac,0x2b, + 0x21,0x69,0x32,0x6a,0x57,0xb9,0x72,0xa3,0x4b,0x67,0x25,0x3f,0x31,0x5f,0xac,0x2e, + 0x21,0x69,0x37,0x7e,0x26,0x34,0x71,0x3c,0xad,0x68,0x65,0x3f,0x32,0x24,0x66,0x51, + 0xb3,0x33,0xc1,0x7e,0xb0,0x34,0x71,0x65,0xb0,0x59,0x4d,0x31,0xa3,0x24,0x6c,0x51, + 0xb3,0x3e,0x4c,0x5b,0x38,0x31,0x49,0x65,0xb1,0xab,0x4d,0x34,0x57,0xad,0x72,0xa3, + 0x37,0x46,0x4c,0x2b,0x38,0x31,0xac,0x2b,0x21,0x69,0x32,0x78,0x57,0xb9,0x72,0xa3, + 0x4b,0x67,0x25,0x3f,0x31,0x63,0x5a,0x2e,0x21,0x69,0x37,0x7e,0x26,0x34,0x71,0x3d, + 0x2b,0x68,0x65,0x3f,0x32,0x24,0x66,0x51,0xb3,0x34,0x4b,0x7e,0xb0,0x34,0x71,0x65, + 0xb0,0x59,0x4d,0x31,0xaa,0x24,0x6c,0x51,0xb3,0x3e,0x4c,0x5b,0x38,0x31,0x4b,0x45, + 0xb1,0xab,0x4d,0x34,0x57,0xad,0x72,0xa3,0x37,0x7e,0x4c,0x2b,0x38,0x31,0xac,0x2b, + 0x21,0x69,0x32,0x26,0x57,0xb9,0x72,0xa3,0x4b,0x67,0x25,0x3f,0x31,0x66,0xac,0x2e, + 0x21,0x69,0x37,0x7e,0x26,0x34,0x71,0x3e,0x7b,0x68,0x65,0x3f,0x32,0x24,0x66,0x51, + 0xb3,0x34,0x67,0x7e,0xb0,0x34,0x71,0x65,0xb0,0x59,0x4d,0x31,0xb1,0x24,0x6c,0x51, + 0xb3,0x3e,0x4c,0x5b,0x38,0x31,0x4c,0xb7,0xb1,0xab,0x4d,0x34,0x57,0xad,0x72,0xa3, + 0x38,0x36,0x4c,0x2b,0x38,0x31,0xac,0x2b,0x21,0x69,0x32,0xa6,0x57,0xb9,0x72,0xa3, + 0x4b,0x67,0x25,0x3f,0x31,0x6a,0x5a,0x2e,0x21,0x69,0x37,0x7e,0x26,0x34,0x71,0x3f, + 0x6b,0x68,0x65,0x3f,0x32,0x24,0x66,0x51,0xb3,0x34,0x23,0x7e,0xb0,0x34,0x71,0x65, + 0xb0,0x59,0x4d,0x31,0xb8,0x24,0x6c,0x51,0xb3,0x3e,0x4c,0x5b,0x38,0x31,0x4e,0x25, + 0xb1,0xab,0x4d,0x34,0x57,0xad,0x72,0xa3,0x38,0x6e,0x4c,0x2b,0x38,0x31,0xac,0x2b, + 0x21,0x69,0x32,0xb4,0x57,0xb9,0x72,0xa3,0x4b,0x67,0x25,0x3f,0x31,0x6d,0xac,0x2e, + 0x21,0x69,0x37,0x7e,0x26,0x34,0x71,0x40,0x5b,0x68,0x65,0x3f,0x32,0x24,0x66,0x51, + 0xb3,0x34,0xb1,0x7e,0xb0,0x34,0x71,0x65,0xb0,0x59,0x4d,0x31,0xbf,0x24,0x6c,0x51, + 0xb3,0x3e,0x4c,0x5b,0x38,0x31,0x50,0x65,0xb1,0xab,0x4d,0x34,0x57,0xad,0x72,0xa3, + 0x38,0xb8,0x4c,0x2b,0x38,0x31,0xac,0x2b,0x21,0x69,0x32,0xc2,0x57,0xb9,0x72,0xa3, + 0x4b,0x67,0x25,0x3f,0x31,0x71,0x5a,0x2e,0x21,0x69,0x37,0x7e,0x26,0x36,0x71,0x48, + 0x3f,0xb8,0xaa,0x2e,0x6b,0xba,0x5f,0xc0,0xae,0xaa,0x6b,0xbe,0xb1,0x30,0x6c,0x28, + 0xc1,0xb9,0x34,0x2e,0x72,0xba,0x61,0x2e,0xaf,0x50,0x6c,0x3a,0xb1,0xa5,0xbe,0x29, + 0xb1,0xb9,0x50,0x2e,0x79,0xba,0x63,0x6e,0xaf,0x28,0x6c,0x48,0xb1,0xa9,0x6c,0x2a, + 0x2f,0xb9,0x6c,0x2e,0xa2,0xba,0x65,0x4e,0xb0,0x40,0x6c,0x56,0xb1,0xac,0xbe,0x2b, + 0xa1,0xb9,0x28,0x2e,0x27,0xba,0x66,0xc0,0xb0,0x78,0x6c,0x64,0xb1,0xb0,0x6c,0x2c, + 0x6f,0xb9,0xb6,0x2e,0x2e,0xba,0x68,0x2e,0xb0,0xc2,0x6c,0x72,0xb1,0xb3,0xbe,0x2d, + 0x5f,0xba,0x40,0x2e,0xa7,0xba,0x6a,0x6e,0xb1,0x68,0x6c,0xa2,0xb1,0xb7,0x6c,0x2e, + 0x4f,0xba,0x5c,0x2e,0xae,0xba,0x6c,0x4e,0xb1,0xb2,0x6c,0x2e,0xb1,0xba,0xbe,0x2f, + 0x3f,0xba,0x78,0x2e,0xb5,0xba,0x6d,0xc0,0xb2,0x58,0x6c,0xae,0xb1,0xbe,0x6c,0x25, + 0xa3,0x51,0x3c,0x34,0xba,0xba,0x6f,0x4e,0xb2,0xa2,0x6c,0xb8,0xb1,0xc0,0xbe,0x30, + 0xa1,0xba,0xba,0x2e,0xc1,0xba,0x70,0xc0,0xa3,0x38,0x6d,0x34,0xb2,0x32,0x6c,0xa3, + 0x6f,0xbb,0x44,0x2f,0x36,0xba,0x72,0x2e,0xb3,0x70,0x6d,0x42,0xb2,0x35,0xbe,0xa4, + 0x5f,0xbb,0x60,0x2f,0x3d,0xba,0x74,0x6e,0xb3,0xba,0x6d,0x50,0xb2,0x39,0x6c,0xa5, + 0x4f,0xbb,0x7c,0x2f,0x44,0xba,0x76,0x4e,0xb4,0x60,0x6d,0x5e,0xb2,0x3c,0xbe,0xa6, + 0x3f,0xbb,0xaa,0x2f,0x4b,0xba,0x77,0xc0,0xb4,0xaa,0x6d,0x6c,0xb2,0x40,0x6c,0xa6, + 0xc1,0xbc,0x34,0x2f,0x52,0xba,0x79,0x2e,0xb5,0x50,0x6d,0x7a,0xb2,0x43,0xbe,0xa7, + 0xb1,0xbc,0x50,0x2f,0x59,0xba,0x7b,0x6e,0xb5,0x28,0x6d,0x28,0xb2,0x47,0x6c,0xa8, + 0x2f,0xbc,0x6c,0x2f,0x60,0xba,0x7d,0x4e,0xb6,0x40,0x6d,0xa8,0xb2,0x4a,0xbe,0xa9, + 0xa1,0xbc,0x28,0x2f,0x67,0xba,0x7e,0xc0,0xb6,0x78,0x6d,0xb6,0xb2,0x4e,0x6c,0xaa, + 0x6f,0xbc,0xb6,0x2f,0x6e,0xba,0xa2,0x2e,0xb6,0xc2,0x6e,0x32,0xb2,0x51,0xbe,0xab, + 0x5f,0xbd,0x40,0x2f,0x75,0xba,0x22,0x6e,0xb7,0x68,0x6e,0x40,0xb2,0x55,0x6c,0xac, + 0x4f,0xbd,0x5c,0x2f,0x7c,0xba,0x24,0x4e,0xb7,0xb2,0x6e,0x4e,0xb2,0x58,0xbe,0xad, + 0x3f,0xbd,0x78,0x2f,0x23,0xba,0x25,0xc0,0xb8,0x58,0x6f,0x7e,0xc1,0x32,0x30,0xae, + 0x5f,0xbd,0x2c,0x2f,0x28,0xba,0x27,0x4e,0xb8,0xa2,0x6e,0x66,0xb2,0x5e,0xbe,0xae, + 0xa1,0xbd,0xba,0x2f,0x2f,0xba,0x28,0xc0,0xb9,0x38,0x6e,0x74,0xb2,0x62,0x6c,0xaf, + 0x6f,0xbe,0x44,0x2f,0xa8,0xba,0x2a,0x2e,0xb9,0x70,0x6e,0x22,0xb2,0x65,0xbe,0xb0, + 0x5f,0xbe,0x60,0x2f,0xaf,0xba,0x2c,0x6e,0xb9,0xba,0x6e,0x30,0xb2,0x69,0x6c,0xb1, + 0x4f,0xbe,0x7c,0x2f,0xb6,0xba,0x2e,0x4e,0xba,0x60,0x6e,0xb0,0xb2,0x6c,0xbe,0xb2, + 0x3f,0xbe,0xaa,0x2f,0xbd,0xba,0x2f,0xc0,0xba,0xaa,0x6e,0xbe,0xb2,0x70,0x6c,0xb2, + 0xc1,0xbf,0x34,0x30,0x32,0xba,0xa3,0x2e,0xbb,0x50,0x6f,0x3a,0xb2,0x73,0xbe,0xb3, + 0xb1,0xbf,0x50,0x30,0x39,0xba,0xa5,0x6e,0xbb,0x28,0x6f,0x48,0xb2,0x77,0x6c,0xb4, + 0x2f,0xbf,0x6c,0x30,0x40,0xba,0xa7,0x4e,0xbc,0x40,0x6f,0x56,0xb2,0x7a,0xac,0x72, + 0x21,0x48,0xbf,0x32,0x45,0xba,0xa8,0x6e,0xbc,0x68,0x6f,0x60,0xb2,0x7d,0x6c,0xb6, + 0x4f,0xbf,0xae,0x30,0x4c,0xba,0xaa,0x4e,0xbc,0xb2,0x6f,0x6e,0xb2,0xa2,0xbe,0xb7, + 0x3f,0xc0,0x38,0x30,0x53,0xba,0xab,0xc0,0xbd,0x58,0x6f,0x7c,0xb2,0x24,0x5a,0x2e, + 0xbd,0x70,0x6f,0x22,0xb2,0x25,0xbe,0xb8,0x5f,0xc0,0x60,0x30,0x5d,0xba,0xae,0x6e, + 0xbd,0xba,0x6f,0x30,0xb2,0x29,0x6c,0xb9,0x4f,0xc0,0x7c,0x30,0x64,0xba,0xb0,0x4e, + 0xbe,0x60,0x6f,0xb0,0xb2,0x2c,0xbe,0xba,0x3f,0xc0,0xaa,0x30,0x6b,0xba,0xb1,0xc0, + 0xbe,0xaa,0x6f,0xbe,0xb2,0x30,0x6c,0xba,0xc1,0xc1,0x34,0x30,0x72,0xba,0xb3,0x2e, + 0xbf,0x50,0x70,0x3a,0xb2,0xa5,0xbe,0xbb,0xb1,0xc1,0x50,0x30,0x79,0xba,0xb5,0x6e, + 0xbf,0x28,0x70,0x48,0xb2,0xa9,0x6c,0xbc,0x2f,0xc1,0x6c,0x30,0xa2,0xba,0xb7,0x4e, + 0xc0,0x40,0x70,0x56,0xb2,0xac,0xbe,0xbd,0xa1,0xc1,0x28,0x30,0x27,0xba,0xb8,0xc0, + 0xc0,0x78,0x70,0x64,0xb2,0xb0,0x6c,0xbe,0x6f,0xc1,0xb6,0x30,0x2e,0xba,0xba,0x2e, + 0xc0,0xc2,0x70,0x72,0xb2,0xb3,0xbe,0xbf,0x5f,0xc2,0x40,0x30,0xa7,0xba,0xbc,0x6e, + 0xc1,0x68,0x70,0xa2,0xb2,0xb7,0x6c,0xc0,0x4f,0xc2,0x5c,0x30,0xae,0xba,0xbe,0x4e, + 0xc1,0xb2,0x70,0x2e,0xb2,0xba,0xbe,0xc1,0x3f,0xc2,0x77,0x7e,0xc1,0x32,0xc2,0xa3, + 0x50,0x48,0x70,0xaa,0xb2,0xbd,0x6c,0xc1,0x2f,0xc2,0x2c,0x30,0xba,0xba,0xc1,0x4e, + 0xc2,0xa2,0x70,0xb8,0xb2,0xc0,0xbe,0xc2,0xa1,0xc2,0xba,0x30,0xc1,0xba,0xc2,0xc0, + 0xb3,0x38,0x71,0x34,0xb3,0x32,0x6d,0x31,0x70,0x31,0x44,0xa3,0x36,0xbb,0x32,0x2f, + 0x31,0x70,0x71,0x42,0xb3,0x35,0xbf,0x32,0x60,0x31,0x60,0xa3,0x3d,0xbb,0x34,0x6f, + 0x31,0xba,0x71,0x50,0xb3,0x39,0x6d,0x33,0x50,0x31,0x7c,0xa3,0x44,0xbb,0x36,0x4f, + 0x32,0x60,0x71,0x5e,0xb3,0x3c,0xbf,0x34,0x40,0x31,0xaa,0xa3,0x4b,0xbb,0x37,0xc1, + 0x32,0xaa,0x71,0x6c,0xb3,0x40,0x6d,0x34,0xc2,0x32,0x34,0xa3,0x52,0xbb,0x39,0x2f, + 0x33,0x50,0x71,0x7a,0xb3,0x43,0xbf,0x35,0xb2,0x32,0x50,0xa3,0x59,0xbb,0x3b,0x6f, + 0x33,0x28,0x71,0x28,0xb3,0x47,0x6d,0x36,0x30,0x32,0x6c,0xa3,0x60,0xbb,0x3d,0x4f, + 0x3b,0x61,0x41,0x36,0x72,0x49,0xbf,0x37,0x60,0x32,0xa2,0xa3,0x65,0xbb,0x3e,0x6f, + 0x34,0x68,0x71,0xb2,0xb3,0x4d,0x6d,0x38,0x50,0x32,0xae,0xa3,0x6c,0xbb,0x40,0x4f, + 0x34,0xb2,0x71,0xc0,0xb3,0x50,0xbf,0x39,0x40,0x33,0x38,0xa3,0x73,0xbb,0x41,0xc1, + 0x35,0x58,0x72,0x3c,0xb3,0x54,0x6d,0x39,0xc2,0x33,0x54,0xa3,0x7a,0xbb,0x43,0x2f, + 0x35,0x30,0x72,0x4a,0xb3,0x57,0xbf,0x3a,0xb2,0x33,0x70,0xa3,0x21,0xbb,0x45,0x6f, + 0x36,0x48,0x72,0x58,0xb3,0x5b,0x6d,0x3b,0x30,0x33,0x2c,0xa3,0x28,0xbb,0x47,0x4f, + 0x36,0xa2,0x72,0x66,0xb3,0x5e,0xbf,0x3c,0xa2,0x33,0xba,0xa3,0x2f,0xbb,0x48,0xc1, + 0x37,0x38,0x72,0x74,0xb3,0x62,0x6d,0x3d,0x70,0x34,0x44,0xa3,0xa8,0xbb,0x4a,0x2f, + 0x37,0x70,0x72,0x22,0xb3,0x65,0xbf,0x3e,0x60,0x34,0x60,0xa3,0xaf,0xbb,0x4c,0x6f, + 0x37,0xba,0x72,0x30,0xb3,0x69,0x6d,0x3f,0x50,0x34,0x7c,0xa3,0xb6,0xbb,0x4e,0x4f, + 0x38,0x60,0x72,0xb0,0xb3,0x6c,0xbf,0x40,0x40,0x34,0xaa,0xa3,0xbd,0xbb,0x4f,0xc1, + 0x38,0xaa,0x72,0xbe,0xb3,0x70,0x6d,0x40,0xc2,0x35,0x34,0xa4,0x32,0xbb,0x51,0x2f, + 0x39,0x50,0x73,0x3a,0xb3,0x73,0xbf,0x41,0xb2,0x35,0x50,0xa4,0x39,0xbb,0x53,0x6f, + 0x39,0x28,0x73,0x48,0xb3,0x77,0x6d,0x42,0x30,0x35,0x6b,0x7d,0x3e,0x32,0x70,0xa3, + 0x3b,0x67,0x25,0x33,0x31,0x78,0xbf,0x43,0x40,0x35,0x78,0xa4,0x43,0xbb,0x55,0xc1, + 0x3a,0x58,0x73,0x5c,0xb3,0x7c,0x6d,0x43,0xc2,0x35,0xa6,0xa4,0x4a,0xbb,0x57,0x2f, + 0x3a,0x30,0x73,0x6a,0xb3,0xa1,0xbf,0x44,0xb2,0x35,0xc2,0xa4,0x51,0xbb,0x59,0x6f, + 0x3b,0x48,0x73,0x78,0xb3,0x23,0x6d,0x45,0x30,0x36,0x4b,0x7e,0xb3,0x24,0xbf,0x46, + 0x40,0x36,0x58,0xa4,0x5b,0xbb,0x5b,0xc1,0x3b,0xaa,0x73,0x2c,0xb3,0x28,0x6d,0x46, + 0xc2,0x36,0x74,0xa4,0x62,0xbb,0x5d,0x2f,0x3c,0x50,0x73,0xac,0xb3,0x2b,0xbf,0x47, + 0xb2,0x36,0x30,0xa4,0x69,0xbb,0x5f,0x6f,0x3c,0x28,0x73,0xba,0xb3,0x2f,0x6d,0x48, + 0x30,0x36,0xbe,0xa4,0x70,0xbb,0x61,0x4f,0x3d,0x40,0x74,0x36,0xb3,0xa4,0xbf,0x49, + 0xa2,0x37,0x48,0xa4,0x77,0xbb,0x62,0xc1,0x3d,0x78,0x74,0x44,0xb3,0xa8,0x6d,0x4a, + 0x70,0x37,0x64,0xa4,0x7e,0x24,0x34,0x51,0x60,0xbb,0x34,0x4e,0xb3,0xaa,0xbf,0x4b, + 0x40,0x37,0x78,0xa4,0x23,0xbb,0x65,0xc1,0x3e,0x58,0x74,0x5c,0xb3,0xae,0x6d,0x4b, + 0xc2,0x37,0xa6,0xa4,0x2a,0xbb,0x67,0x2f,0x3e,0x30,0x74,0x6a,0xb3,0xb1,0xbf,0x4c, + 0xb2,0x37,0xc2,0xa4,0xa3,0xbb,0x69,0x6f,0x3f,0x48,0x74,0x78,0xb3,0xb5,0x6d,0x4d, + 0x30,0x38,0x4c,0xa4,0xaa,0xbb,0x6b,0x4f,0x3f,0xa2,0x74,0x26,0xb3,0xb8,0xbf,0x4e, + 0xa2,0x38,0x68,0xa4,0xb1,0xbb,0x6c,0xc1,0x40,0x38,0x74,0xa6,0xb3,0xbc,0x6d,0x4f, + 0x70,0x38,0x24,0xa4,0xb8,0xbb,0x6e,0x2f,0x40,0x70,0x74,0xb4,0xb3,0xbf,0xbf,0x50, + 0x60,0x38,0xb2,0xa4,0xbf,0xbb,0x70,0x6f,0x40,0xba,0x74,0xc2,0xb3,0x31,0x6d,0x51, + 0x50,0x39,0x3c,0xa5,0x34,0xbb,0x72,0x4f,0x41,0x60,0x75,0x3e,0xb4,0x34,0xbf,0x52, + 0x40,0x39,0x58,0xa5,0x3b,0xbb,0x73,0xc1,0x41,0xaa,0x75,0x4c,0xb4,0x38,0x6d,0x52, + 0xc2,0x39,0x74,0xa5,0x42,0xbb,0x75,0x2f,0x42,0x50,0x75,0x5a,0xb4,0x3b,0xbf,0x53, + 0xb2,0x39,0x30,0xa5,0x49,0xbb,0x77,0x6f,0x42,0x28,0x75,0x68,0xb4,0x3f,0x6d,0x54, + 0x30,0x39,0xbe,0xa5,0x50,0xbb,0x79,0x4f,0x43,0x40,0x75,0x76,0xb4,0x42,0xbf,0x55, + 0xa2,0x3a,0x48,0xa5,0x57,0xbb,0x7a,0xc1,0x43,0x78,0x75,0x24,0xb4,0x46,0x6d,0x56, + 0x70,0x3e,0x4c,0xbf,0x34,0x70,0xaf,0x2f,0x43,0xb2,0x75,0x2e,0xb4,0x48,0xbf,0x57, + 0x40,0x3a,0x78,0xa5,0x63,0xbb,0x7d,0xc1,0x44,0x58,0x75,0xae,0xb4,0x4c,0x6d,0x57, + 0xc2,0x3a,0xa6,0xa5,0x6a,0xbb,0xa1,0x2f,0x44,0x30,0x75,0xbc,0xb4,0x4f,0xbf,0x58, + 0xb2,0x3a,0xc2,0xa5,0x71,0xbb,0x21,0x6f,0x45,0x48,0x76,0x38,0xb4,0x53,0x6d,0x59, + 0x30,0x3b,0x4c,0xa5,0x78,0xbb,0x23,0x4f,0x45,0xa2,0x76,0x46,0xb4,0x56,0xbf,0x5a, + 0xa2,0x3b,0x68,0xa5,0xa1,0xbb,0x24,0xc1,0x46,0x38,0x76,0x54,0xb4,0x5a,0x6d,0x5b, + 0x70,0x3b,0x24,0xa5,0x26,0xbb,0x26,0x2f,0x46,0x70,0x76,0x62,0xb4,0x5d,0xbf,0x5c, + 0x60,0x3b,0xb2,0xa5,0x2d,0xbb,0x28,0x6f,0x46,0xba,0x76,0x70,0xb4,0x61,0x6d,0x5d, + 0x50,0x3c,0x3c,0xa5,0xa6,0xbb,0x2a,0x4f,0x47,0x60,0x76,0x7e,0xb4,0x64,0xbf,0x5e, + 0x40,0x3c,0x58,0xa5,0xad,0x24,0x34,0x51,0x60,0xbb,0x32,0x28,0xb4,0x67,0x6d,0x5e, + 0x30,0x3c,0x6c,0xa5,0xb2,0xbb,0x2d,0x4f,0x48,0x40,0x76,0xa8,0xb4,0x6a,0xbf,0x5f, + 0xa2,0x3c,0x28,0xa5,0xb9,0xbb,0x2e,0xc1,0x48,0x78,0x76,0xb6,0xb4,0x6e,0x6d,0x60, + 0x70,0x3c,0xb6,0xa5,0xc0,0xbb,0x30,0x2f,0x48,0xc2,0x77,0x32,0xb4,0x71,0xbf,0x61, + 0x60,0x3d,0x40,0xa6,0x35,0xbb,0xa4,0x6f,0x49,0x68,0x77,0x40,0xb4,0x75,0x6d,0x62, + 0x50,0x3d,0x5c,0xa6,0x3c,0xbb,0xa6,0x4f,0x49,0xb2,0x77,0x4e,0xb4,0x78,0xbf,0x63, + 0x40,0x3d,0x78,0xa6,0x43,0xbb,0xa7,0xc1,0x4a,0x58,0x77,0x5c,0xb4,0x7c,0x6d,0x63, + 0xc2,0x3d,0xa6,0xa6,0x4a,0xbb,0xa9,0x2f,0x4a,0x30,0x77,0x6a,0xb4,0xa1,0xbf,0x64, + 0xb2,0x3d,0xc2,0xa6,0x51,0xbb,0xab,0x6f,0x4b,0x48,0x77,0x78,0xb4,0x23,0x6d,0x65, + 0x30,0x3e,0x4b,0x7e,0xb4,0x24,0xbf,0x66,0x40,0x3e,0x58,0xa6,0x5b,0xbb,0xad,0xc1, + 0x4b,0xaa,0x77,0x2c,0xb4,0x28,0x6d,0x66,0xc2,0x3e,0x74,0xa6,0x62,0xbb,0xaf,0x2f, + 0x4c,0x50,0x77,0xac,0xb4,0x2b,0xbf,0x67,0xb2,0x3e,0x30,0xa6,0x69,0xbb,0xb1,0x6f, + 0x4c,0x28,0x77,0xba,0xb4,0x2f,0x6d,0x68,0x30,0x3e,0xbe,0xa6,0x70,0xbb,0xb3,0x4f, + 0x4d,0x40,0x78,0x36,0xb4,0xa4,0xbf,0x69,0xa2,0x3f,0x48,0xa6,0x77,0xbb,0xb4,0xc1, + 0x4d,0x76,0x4c,0xbf,0x34,0xc2,0x71,0x6a,0x50,0x3f,0x5c,0xa6,0x7c,0xbb,0xb6,0x4f, + 0x4d,0xb2,0x78,0x4e,0xb4,0xaa,0xbf,0x6b,0x40,0x3f,0x78,0xa6,0x23,0xbb,0xb7,0xc1, + 0x4e,0x58,0x78,0x5c,0xb4,0xae,0x6d,0x6b,0xc2,0x3f,0xa6,0xa6,0x2a,0xbb,0xb9,0x2f, + 0x4e,0x30,0x78,0x6a,0xb4,0xb1,0xbf,0x6c,0xb2,0x3f,0xc2,0xa6,0xa3,0xbb,0xbb,0x6f, + 0x4f,0x48,0x78,0x78,0xb4,0xb5,0x6d,0x6d,0x30,0x40,0x4c,0xa6,0xaa,0xbb,0xbd,0x4f, + 0x4f,0xa2,0x78,0x26,0xb4,0xb8,0xbf,0x6e,0xa2,0x40,0x68,0xa6,0xb1,0xbb,0xbe,0xc1, + 0x50,0x38,0x78,0xa6,0xb4,0xbc,0x6d,0x6f,0x70,0x40,0x24,0xa6,0xb8,0xbb,0xc0,0x2f, + 0x50,0x70,0x78,0xb4,0xb4,0xbf,0xbf,0x70,0x60,0x40,0xb2,0xa6,0xbf,0xbb,0xc2,0x6f, + 0x50,0xba,0x78,0xc2,0xb4,0x31,0x6d,0x71,0x50,0x41,0x3c,0xa7,0x34,0xbc,0x32,0x4f, + 0x51,0x60,0x79,0x3e,0xb5,0x34,0xbf,0x25,0xa3,0x51,0x3c,0x33,0x39,0xbc,0x33,0x6f, + 0x51,0x28,0x79,0x48,0xb5,0x37,0x6d,0x72,0x30,0x41,0x6c,0xa7,0x40,0xbc,0x35,0x4f, + 0x52,0x40,0x79,0x56,0xb5,0x3a,0xbf,0x73,0xa2,0x41,0x28,0xa7,0x47,0xbc,0x36,0xc1, + 0x52,0x78,0x79,0x64,0xb5,0x3e,0x6d,0x74,0x70,0x41,0xb6,0xa7,0x4e,0xbc,0x38,0x2f, + 0x52,0xc2,0x79,0x72,0xb5,0x41,0xbf,0x75,0x60,0x42,0x40,0xa7,0x55,0xbc,0x3a,0x6f, + 0x53,0x68,0x79,0xa2,0xb5,0x45,0x6d,0x76,0x50,0x42,0x5c,0xa7,0x5c,0xbc,0x3c,0x4f, + 0x53,0xb2,0x79,0x2e,0xb5,0x48,0xbf,0x77,0x40,0x42,0x78,0xa7,0x63,0xbc,0x3d,0xc1, + 0x54,0x58,0x79,0xae,0xb5,0x4c,0x6d,0x77,0xc2,0x42,0xa6,0xa7,0x6a,0xbc,0x3f,0x2f, + 0x54,0x30,0x79,0xbc,0xb5,0x4f,0xbf,0x78,0xb2,0x42,0xc2,0xa7,0x71,0xbc,0x41,0x6f, + 0x55,0x48,0x7a,0x38,0xb5,0x53,0x6d,0x79,0x30,0x43,0x4c,0xa7,0x78,0xbc,0x43,0x4f, + 0x55,0xa2,0x7a,0x46,0xb5,0x56,0xbf,0x7a,0xa2,0x43,0x68,0xa7,0xa1,0xbc,0x44,0xc1, + 0x56,0x38,0x7a,0x54,0xb5,0x5a,0x6d,0x7b,0x70,0x43,0x24,0xa7,0x26,0xbc,0x46,0x2f, + 0x56,0x70,0x7a,0x62,0xb5,0x5d,0xbf,0x7c,0x60,0x43,0xb2,0xa7,0x2d,0xbc,0x48,0x6f, + 0x56,0xba,0x7a,0x70,0xb5,0x61,0x6d,0x7d,0x50,0x44,0x3c,0xa7,0xa6,0xbc,0x4a,0x4f, + 0x57,0x5e,0x49,0x4b,0x33,0xc2,0x71,0x45,0xb0,0x59,0x35,0x31,0xa9,0xbc,0x4a,0xc1, + 0x57,0x78,0x7a,0x24,0xb5,0x66,0x6d,0x7e,0x70,0x44,0x64,0xa7,0xb0,0xbc,0x4c,0x2f, + 0x57,0xc2,0x7a,0xa4,0xb5,0x69,0xbf,0xa1,0x60,0x44,0xa2,0xa7,0xb7,0xbc,0x4e,0x6f, + 0x58,0x68,0x7a,0xb2,0xb5,0x6d,0x6d,0xa2,0x50,0x44,0xae,0xa7,0xbe,0xbc,0x50,0x4f, + 0x58,0xb2,0x7a,0xc0,0xb5,0x70,0xbf,0x21,0x40,0x45,0x38,0xa8,0x33,0xbc,0x51,0xc1, + 0x59,0x58,0x7b,0x3c,0xb5,0x74,0x6d,0x21,0xc2,0x45,0x54,0xa8,0x3a,0xbc,0x53,0x2f, + 0x59,0x30,0x7b,0x4a,0xb5,0x77,0xbf,0x22,0xb2,0x45,0x70,0xa8,0x41,0xbc,0x55,0x6f, + 0x5a,0x48,0x7b,0x58,0xb5,0x7b,0x6d,0x23,0x30,0x45,0x2c,0xa8,0x48,0xbc,0x57,0x4f, + 0x5a,0xa2,0x7b,0x66,0xb5,0x7e,0xbf,0x24,0xa2,0x45,0xba,0xa8,0x4f,0xbc,0x58,0xc1, + 0x5b,0x38,0x7b,0x74,0xb5,0x22,0x6d,0x25,0x70,0x46,0x43,0x7d,0x3e,0x32,0x70,0xa3, + 0x3b,0x60,0x7b,0x7e,0x57,0xbc,0x5a,0xc1,0x5b,0x78,0x7b,0x24,0xb5,0x26,0x6d,0x26, + 0x70,0x46,0x64,0xa8,0x5e,0xbc,0x5c,0x2f,0x5b,0xc2,0x7b,0xa4,0xb5,0x29,0xbf,0x27, + 0x60,0x46,0xa2,0xa8,0x65,0xbc,0x5e,0x6f,0x5c,0x68,0x7b,0xb2,0xb5,0x2d,0x6d,0x28, + 0x50,0x46,0xae,0xa8,0x6c,0xbc,0x60,0x4f,0x5c,0xb2,0x7b,0xc0,0xb5,0x30,0xbf,0x29, + 0x40,0x47,0x38,0xa8,0x73,0xbc,0x61,0xc1,0x5d,0x58,0x7c,0x3c,0xb5,0xa6,0x6d,0x29, + 0xc2,0x47,0x54,0xa8,0x7a,0xbc,0x63,0x2f,0x5d,0x30,0x7c,0x4a,0xb5,0xa9,0xbf,0x2a, + 0xb2,0x47,0x70,0xa8,0x21,0xbc,0x65,0x6f,0x5e,0x48,0x7c,0x58,0xb5,0xad,0x6d,0x2b, + 0x30,0x47,0x2c,0xa8,0x28,0xbc,0x67,0x4f,0x5e,0xa2,0x7c,0x66,0xb5,0xb0,0xbf,0x2c, + 0xa2,0x47,0xba,0xa8,0x2f,0xbc,0x68,0xc1,0x5f,0x38,0x7c,0x74,0xb5,0xb4,0x6d,0x2d, + 0x70,0x48,0x44,0xa8,0xa8,0xbc,0x6a,0x2f,0x5f,0x70,0x7c,0x22,0xb5,0xb7,0xbf,0x2e, + 0x60,0x48,0x60,0xa8,0xaf,0xbc,0x6c,0x6f,0x5f,0xba,0x7c,0x30,0xb5,0xbb,0x6d,0x2f, + 0x50,0x48,0x7c,0xa8,0xb6,0xbc,0x6e,0x4f,0x60,0x60,0x7c,0xb0,0xb5,0xbe,0xbf,0x30, + 0x40,0x48,0xaa,0xa8,0xbd,0xbc,0x6f,0xc1,0x60,0xaa,0x7c,0xbe,0xb5,0xc2,0x6d,0x30, + 0xc2,0x41,0x34,0xa9,0x32,0xbc,0x71,0x2f,0x6b,0x68,0x29,0x38,0xc2,0x31,0x71,0xc1, + 0x61,0x58,0x7d,0x3c,0xb6,0x34,0x6d,0xa3,0xc2,0x49,0x54,0xa9,0x3a,0xbc,0x73,0x2f, + 0x61,0x30,0x7d,0x4a,0xb6,0x37,0xbf,0xa4,0xb2,0x49,0x70,0xa9,0x41,0xbc,0x75,0x6f, + 0x62,0x48,0x7d,0x58,0xb6,0x3b,0x6d,0xa5,0x30,0x49,0x2c,0xa9,0x48,0xbc,0x77,0x4f, + 0x62,0xa2,0x7d,0x66,0xb6,0x3e,0xbf,0xa6,0xa2,0x49,0xba,0xa9,0x4f,0xbc,0x78,0xc1, + 0x63,0x38,0x7d,0x74,0xb6,0x42,0x6d,0xa7,0x70,0x4a,0x44,0xa9,0x56,0xbc,0x7a,0x2f, + 0x63,0x70,0x7d,0x22,0xb6,0x45,0xbf,0xa8,0x60,0x4a,0x60,0xa9,0x5d,0xbc,0x7c,0x6f, + 0x63,0xba,0x7d,0x30,0xb6,0x49,0x6d,0xa9,0x50,0x4a,0x7c,0xa9,0x64,0xbc,0x7e,0x4f, + 0x64,0x60,0x7d,0xb0,0xb6,0x4c,0xbf,0xaa,0x40,0x4a,0xaa,0xa9,0x6b,0xbc,0xa1,0xc1, + 0x64,0xaa,0x7d,0xbe,0xb6,0x50,0x6d,0xaa,0xc2,0x4b,0x34,0xa9,0x72,0x24,0x34,0x51, + 0x60,0xbb,0x32,0x36,0xb6,0x52,0xbf,0xab,0xa2,0x4b,0x48,0xa9,0x77,0xbc,0x22,0xc1, + 0x65,0x78,0x7e,0x44,0xb6,0x56,0x6d,0xac,0x70,0x4b,0x64,0xa9,0x7e,0xbc,0x24,0x2f, + 0x65,0xc2,0x7e,0x52,0xb6,0x59,0xbf,0xad,0x60,0x4b,0xa2,0xa9,0x25,0xbc,0x26,0x6f, + 0x66,0x68,0x7e,0x60,0xb6,0x5d,0x6d,0xae,0x50,0x4b,0xae,0xa9,0x2c,0xbc,0x28,0x4f, + 0x66,0xb2,0x7e,0x6e,0xb6,0x60,0xbf,0xaf,0x40,0x4c,0x38,0xa9,0xa5,0xbc,0x29,0xc1, + 0x67,0x58,0x7e,0x7c,0xb6,0x64,0x6d,0xaf,0xc2,0x4c,0x54,0xa9,0xac,0xbc,0x2b,0x2f, + 0x67,0x30,0x7e,0x2a,0xb6,0x67,0xbf,0xb0,0xb2,0x4c,0x70,0xa9,0xb3,0xbc,0x2d,0x6f, + 0x68,0x48,0x7e,0xaa,0xb6,0x6b,0x6d,0xb1,0x30,0x4c,0x2c,0xa9,0xba,0xbc,0x2f,0x4f, + 0x68,0xa2,0x7e,0xb8,0xb6,0x6e,0xbf,0xb2,0xa2,0x4c,0xba,0xa9,0xc1,0xbc,0x30,0xc1, + 0x69,0x38,0xa1,0x34,0xb6,0x72,0x6d,0xb3,0x70,0x4d,0x44,0xaa,0x36,0xbc,0xa4,0x2f, + 0x69,0x70,0xa1,0x42,0xb6,0x75,0xbf,0xb4,0x60,0x4d,0x60,0xaa,0x3d,0xbc,0xa6,0x6f, + 0x69,0xba,0xa1,0x50,0xb6,0x79,0x6d,0xb5,0x50,0x4d,0x7c,0xaa,0x44,0xbc,0xa8,0x4f, + 0x6a,0x60,0xa1,0x5e,0xb6,0x7c,0xbf,0xb6,0x40,0x4d,0xaa,0xaa,0x4b,0xbc,0xa9,0xc1, + 0x6a,0xaa,0xa1,0x6c,0xb6,0xa2,0x6d,0xb6,0xbd,0x68,0xbb,0x38,0xc2,0x31,0xab,0x4f, + 0x6b,0x40,0xa1,0x76,0xb6,0x22,0xbf,0xb7,0xa2,0x4e,0x48,0xaa,0x57,0x24,0x6d,0xb7, + 0xc2,0x4e,0x54,0xaa,0x5a,0xbc,0xad,0x2f,0x6b,0x30,0xa1,0x2a,0xb6,0x27,0xbf,0xb8, + 0xb2,0x4e,0x70,0xaa,0x61,0xbc,0xaf,0x6f,0x6c,0x48,0xa1,0xaa,0xb6,0x2b,0x6d,0xb9, + 0x30,0x4e,0x2c,0xaa,0x68,0xbc,0xb1,0x4f,0x6c,0xa2,0xa1,0xb8,0xb6,0x2e,0xbf,0xba, + 0xa2,0x4e,0xba,0xaa,0x6f,0xbc,0xb2,0xc1,0x6d,0x38,0xa2,0x34,0xb6,0xa4,0x6d,0xbb, + 0x70,0x4f,0x44,0xaa,0x76,0xbc,0xb4,0x2f,0x6d,0x70,0xa2,0x42,0xb6,0xa7,0xbf,0xbc, + 0x60,0x4f,0x60,0xaa,0x7d,0xbc,0xb6,0x6f,0x6d,0xba,0xa2,0x50,0xb6,0xab,0x6d,0xbd, + 0x50,0x4f,0x7c,0xaa,0x24,0xbc,0xb8,0x4f,0x6e,0x60,0xa2,0x5e,0xb6,0xae,0xbf,0xbe, + 0x40,0x4f,0xaa,0xaa,0x2b,0xbc,0xb9,0xc1,0x6e,0xaa,0xa2,0x6c,0xb6,0xb2,0x5a,0x72, + 0x21,0x48,0xbf,0x32,0x30,0xbc,0xbb,0x4f,0x6f,0x40,0xa2,0x76,0xb6,0xb4,0xbf,0xbf, + 0xa2,0x50,0x48,0xaa,0xa9,0xbc,0xbc,0xc1,0x6f,0x78,0xa2,0x24,0xb6,0xb8,0x6d,0xc0, + 0x70,0x50,0x64,0xaa,0xb0,0xbc,0xbe,0x2f,0x6f,0xc2,0xa2,0xa4,0xb6,0xbb,0xbf,0xc1, + 0x60,0x50,0xa2,0xaa,0xb7,0xbc,0xc0,0x6f,0x70,0x68,0xa2,0xb2,0xb6,0xbf,0x6d,0xc2, + 0x50,0x50,0xae,0xaa,0xbe,0xbc,0xc2,0x4f,0x70,0xb2,0xa2,0xc0,0xb6,0xc2,0xbf,0xa3, + 0x40,0x51,0x38,0xab,0x33,0xbd,0x31,0xc1,0x71,0x58,0x21,0x3c,0xb7,0x34,0x6e,0x31, + 0xc2,0x51,0x54,0xab,0x3a,0xbd,0x33,0x2f,0x71,0x30,0x21,0x4a,0xb7,0x37,0xc0,0x32, + 0xb2,0x51,0x70,0xab,0x41,0xbd,0x35,0x6f,0x72,0x48,0x21,0x58,0xb7,0x3b,0x6e,0x33, + 0x30,0x51,0x2c,0xab,0x48,0xbd,0x37,0x4f,0x72,0xa2,0x21,0x66,0xb7,0x3e,0xc0,0x34, + 0xa2,0x51,0xba,0xab,0x4f,0xbd,0x38,0xc1,0x73,0x38,0x21,0x74,0xb7,0x42,0x6e,0x35, + 0x70,0x52,0x44,0xab,0x56,0xbd,0x3a,0x2f,0x73,0x70,0x21,0x22,0xb7,0x45,0xc0,0x36, + 0x60,0x52,0x60,0xab,0x5d,0xbd,0x3c,0x6f,0x73,0xba,0x21,0x30,0xb7,0x49,0x6e,0x37, + 0x50,0x52,0x7c,0xab,0x64,0xbd,0x3e,0x4f,0x74,0x60,0x21,0xb0,0xb7,0x4c,0xc0,0x38, + 0x40,0x52,0xaa,0xab,0x6b,0xbd,0x3f,0xc1,0x74,0xaa,0x23,0x7e,0xc1,0x32,0x30,0xb6, + 0x60,0x52,0xbe,0xab,0x70,0xbd,0x41,0x4f,0x75,0x40,0x22,0x36,0xb7,0x52,0xc0,0x39, + 0xa2,0x53,0x48,0xab,0x77,0xbd,0x42,0xc1,0x75,0x78,0x22,0x44,0xb7,0x56,0x6e,0x3a, + 0x70,0x53,0x64,0xab,0x7e,0xbd,0x44,0x2f,0x75,0xc2,0x22,0x52,0xb7,0x59,0xc0,0x3b, + 0x60,0x53,0xa2,0xab,0x25,0xbd,0x46,0x6f,0x76,0x68,0x22,0x60,0xb7,0x5d,0x6e,0x3c, + 0x50,0x53,0xae,0xab,0x2c,0xbd,0x48,0x4f,0x76,0xb2,0x22,0x6e,0xb7,0x60,0xc0,0x3d, + 0x40,0x54,0x38,0xab,0xa5,0xbd,0x49,0xc1,0x77,0x58,0x22,0x7c,0xb7,0x64,0x6e,0x3d, + 0xc2,0x54,0x54,0xab,0xac,0xbd,0x4b,0x2f,0x77,0x30,0x22,0x2a,0xb7,0x67,0xc0,0x3e, + 0xb2,0x54,0x70,0xab,0xb3,0xbd,0x4d,0x6f,0x78,0x48,0x22,0xaa,0xb7,0x6b,0x6e,0x3f, + 0x30,0x54,0x2c,0xab,0xba,0xbd,0x4f,0x4f,0x78,0xa2,0x22,0xb8,0xb7,0x6e,0xac,0x72, + 0x21,0x48,0xbf,0x31,0xbf,0xbd,0x50,0x6f,0x78,0xba,0x22,0xc2,0xb7,0x71,0x6e,0x41, + 0x50,0x55,0x3c,0xac,0x34,0xbd,0x52,0x4f,0x79,0x60,0x23,0x3e,0xb7,0x74,0xc0,0x42, + 0x40,0x55,0x58,0xac,0x3b,0xbd,0x53,0xc1,0x79,0xaa,0x23,0x4c,0xb7,0x78,0x6e,0x42, + 0xc2,0x55,0x74,0xac,0x42,0xbd,0x55,0x2f,0x7a,0x50,0x23,0x5a,0xb7,0x7b,0xc0,0x43, + 0xb2,0x55,0x30,0xac,0x49,0xbd,0x57,0x6f,0x7a,0x28,0x23,0x68,0xb7,0xa1,0x6e,0x44, + 0x30,0x55,0xbe,0xac,0x50,0xbd,0x59,0x4f,0x7b,0x40,0x23,0x76,0xb7,0x22,0xc0,0x45, + 0xa2,0x56,0x48,0xac,0x57,0x24,0x6e,0x45,0xc2,0x56,0x54,0xac,0x5a,0xbd,0x5b,0x2f, + 0x7b,0x30,0x23,0x2a,0xb7,0x27,0xc0,0x46,0xb2,0x56,0x70,0xac,0x61,0xbd,0x5d,0x6f, + 0x7c,0x48,0x23,0xaa,0xb7,0x2b,0x6e,0x47,0x30,0x56,0x2c,0xac,0x68,0xbd,0x5f,0x4f, + 0x7c,0xa2,0x23,0xb8,0xb7,0x2e,0xc0,0x48,0xa2,0x56,0xba,0xac,0x6f,0xbd,0x60,0xc1, + 0x7d,0x38,0x24,0x34,0xb7,0xa4,0x6e,0x49,0x70,0x57,0x44,0xac,0x76,0xbd,0x62,0x2f, + 0x7d,0x70,0x24,0x42,0xb7,0xa7,0xc0,0x4a,0x60,0x57,0x60,0xac,0x7d,0xbd,0x64,0x6f, + 0x7d,0xba,0x24,0x50,0xb7,0xab,0x6e,0x4b,0x50,0x57,0x7c,0xac,0x24,0xbd,0x66,0x4f, + 0x7e,0x60,0x24,0x5e,0xb7,0xae,0xc0,0x4c,0x40,0x57,0xa9,0x7e,0xc1,0x32,0xc2,0xa3, + 0x4e,0x28,0x24,0x68,0xb7,0xb1,0x6e,0x4c,0x30,0x57,0xbe,0xac,0x30,0xbd,0x69,0x4f, + 0xa1,0x40,0x24,0x76,0xb7,0xb4,0xc0,0x4d,0xa2,0x58,0x48,0xac,0xa9,0xbd,0x6a,0xc1, + 0xa1,0x78,0x24,0x24,0xb7,0xb8,0x6e,0x4e,0x70,0x58,0x64,0xac,0xb0,0xbd,0x6c,0x2f, + 0xa1,0xc2,0x24,0xa4,0xb7,0xbb,0xc0,0x4f,0x60,0x58,0xa2,0xac,0xb7,0xbd,0x6e,0x6f, + 0xa2,0x68,0x24,0xb2,0xb7,0xbf,0x6e,0x50,0x50,0x58,0xae,0xac,0xbe,0xbd,0x70,0x4f, + 0xa2,0xb2,0x24,0xc0,0xb7,0xc2,0xc0,0x31,0x40,0x59,0x38,0xad,0x33,0xbd,0x71,0xc1, + 0x21,0x58,0x25,0x3c,0xb8,0x34,0x6e,0x51,0xc2,0x59,0x54,0xad,0x3a,0xbd,0x73,0x2f, + 0x21,0x30,0x25,0x4a,0xb8,0x37,0xc0,0x52,0xb2,0x59,0x70,0xad,0x41,0xbd,0x75,0x6f, + 0x22,0x48,0x25,0x58,0xb8,0x3b,0x6e,0x53,0x30,0x59,0x2c,0xad,0x48,0xbd,0x77,0x4f, + 0x2b,0x61,0x41,0x36,0x72,0x3d,0xc0,0x54,0x60,0x59,0xb2,0xad,0x4d,0xbd,0x78,0x6f, + 0x22,0xba,0x25,0x70,0xb8,0x41,0x6e,0x55,0x50,0x5a,0x3c,0xad,0x54,0xbd,0x7a,0x4f, + 0x23,0x60,0x25,0x7e,0xb8,0x44,0xc0,0x56,0x40,0x5a,0x58,0xad,0x5b,0xbd,0x7b,0xc1, + 0x23,0xaa,0x25,0x2c,0xb8,0x48,0x6e,0x56,0xc2,0x5a,0x74,0xad,0x62,0xbd,0x7d,0x2f, + 0x24,0x50,0x25,0xac,0xb8,0x4b,0xc0,0x57,0xb2,0x5a,0x30,0xad,0x69,0xbd,0xa1,0x6f, + 0x24,0x28,0x25,0xba,0xb8,0x4f,0x6e,0x58,0x30,0x5a,0xbe,0xad,0x70,0xbd,0x21,0x4f, + 0x25,0x40,0x26,0x36,0xb8,0x52,0xc0,0x59,0xa2,0x5b,0x48,0xad,0x77,0xbd,0x22,0xc1, + 0x25,0x78,0x26,0x44,0xb8,0x56,0x6e,0x5a,0x70,0x5b,0x64,0xad,0x7e,0xbd,0x24,0x2f, + 0x25,0xc2,0x26,0x52,0xb8,0x59,0xc0,0x5b,0x60,0x5b,0xa2,0xad,0x25,0xbd,0x26,0x6f, + 0x26,0x68,0x26,0x60,0xb8,0x5d,0x6e,0x5c,0x50,0x5b,0xae,0xad,0x2c,0xbd,0x28,0x4f, + 0x26,0xb2,0x26,0x6e,0xb8,0x60,0xc0,0x5d,0x40,0x5c,0x38,0xad,0xa5,0xbd,0x29,0xc1, + 0x27,0x58,0x26,0x7c,0xb8,0x64,0x6e,0x5d,0xc2,0x5c,0x54,0xad,0xac,0xbd,0x2b,0x2f, + 0x27,0x30,0x26,0x2a,0xb8,0x67,0xc0,0x5e,0xb2,0x5c,0x70,0xad,0xb3,0xbd,0x2d,0x6f, + 0x28,0x48,0x26,0xaa,0xb8,0x6b,0x6e,0x5f,0x30,0x5c,0x2b,0x7d,0x3e,0x32,0x70,0xa3, + 0x3b,0x67,0x25,0x33,0x31,0x6c,0xc0,0x60,0x40,0x5c,0xaa,0xad,0xbd,0xbd,0x2f,0xc1, + 0x28,0xaa,0x26,0xbe,0xb8,0x70,0x6e,0x60,0xc2,0x5d,0x34,0xae,0x32,0xbd,0xa3,0x2f, + 0x29,0x50,0x27,0x3a,0xb8,0x73,0xc0,0x61,0xb2,0x5d,0x50,0xae,0x39,0xbd,0xa5,0x6f, + 0x29,0x28,0x27,0x48,0xb8,0x77,0x6e,0x62,0x30,0x5d,0x6c,0xae,0x40,0xbd,0xa7,0x4f, + 0x2a,0x40,0x27,0x56,0xb8,0x7a,0xc0,0x63,0xa2,0x5d,0x28,0xae,0x47,0xbd,0xa8,0xc1, + 0x2a,0x78,0x27,0x64,0xb8,0x7e,0x6e,0x64,0x70,0x5d,0xb6,0xae,0x4e,0xbd,0xaa,0x2f, + 0x2a,0xc2,0x27,0x72,0xb8,0x21,0xc0,0x65,0x60,0x5e,0x40,0xae,0x55,0xbd,0xac,0x6f, + 0x2b,0x66,0x4c,0xae,0x58,0xbd,0xad,0x4f,0x2b,0xa2,0x27,0x26,0xb8,0x26,0xc0,0x66, + 0xa2,0x5e,0x68,0xae,0x5f,0xbd,0xae,0xc1,0x2c,0x38,0x27,0xa6,0xb8,0x2a,0x6e,0x67, + 0x70,0x5e,0x24,0xae,0x66,0x24,0x34,0x51,0x60,0xbb,0x33,0xb0,0xb8,0x2c,0xc0,0x68, + 0x40,0x5e,0xaa,0xae,0x6b,0xbd,0xb1,0xc1,0x2c,0xaa,0x27,0xbe,0xb8,0x30,0x6e,0x68, + 0xc2,0x5f,0x34,0xae,0x72,0xbd,0xb3,0x2f,0x2d,0x50,0x28,0x3a,0xb8,0xa5,0xc0,0x69, + 0xb2,0x5f,0x50,0xae,0x79,0xbd,0xb5,0x6f,0x2d,0x28,0x28,0x48,0xb8,0xa9,0x6e,0x6a, + 0x30,0x5f,0x6c,0xae,0xa2,0xbd,0xb7,0x4f,0x2e,0x40,0x28,0x56,0xb8,0xac,0xc0,0x6b, + 0xa2,0x5f,0x28,0xae,0x27,0xbd,0xb8,0xc1,0x2e,0x78,0x28,0x64,0xb8,0xb0,0x6e,0x6c, + 0x70,0x5f,0xb6,0xae,0x2e,0xbd,0xba,0x2f,0x2e,0xc2,0x28,0x72,0xb8,0xb3,0xc0,0x6d, + 0x60,0x60,0x40,0xae,0xa7,0xbd,0xbc,0x6f,0x2f,0x68,0x28,0xa2,0xb8,0xb7,0x6e,0x6e, + 0x50,0x60,0x5c,0xae,0xae,0xbd,0xbe,0x4f,0x2f,0xb2,0x28,0x2e,0xb8,0xba,0xc0,0x6f, + 0x40,0x60,0x78,0xae,0xb5,0xbd,0xbf,0xc1,0x30,0x58,0x28,0xae,0xb8,0xbe,0x6e,0x6f, + 0xc2,0x60,0xa6,0xae,0xbc,0xbd,0xc1,0x2f,0x30,0x30,0x28,0xbc,0xb8,0xc1,0xc0,0x70, + 0xb2,0x60,0xc2,0xad,0x31,0xbe,0x31,0x6f,0xa3,0x48,0x29,0x38,0xb9,0x33,0x6e,0x71, + 0x30,0x61,0x4c,0xaf,0x38,0xbe,0x33,0x4f,0xa3,0xa2,0x29,0x46,0xb9,0x36,0xc0,0x72, + 0xa2,0x61,0x68,0xaf,0x3f,0xbe,0x34,0xc1,0xa4,0x38,0x29,0x54,0xb9,0x3a,0x6e,0x73, + 0x70,0x66,0x4c,0xbf,0x34,0x70,0xbf,0x2f,0xa4,0x60,0x29,0x5e,0xb9,0x3c,0xc0,0x74, + 0x40,0x61,0xaa,0xaf,0x4b,0xbe,0x37,0xc1,0xa4,0xaa,0x29,0x6c,0xb9,0x40,0x6e,0x74, + 0xc2,0x62,0x34,0xaf,0x52,0xbe,0x39,0x2f,0xa5,0x50,0x29,0x7a,0xb9,0x43,0xc0,0x75, + 0xb2,0x62,0x50,0xaf,0x59,0xbe,0x3b,0x6f,0xa5,0x28,0x29,0x28,0xb9,0x47,0x6e,0x76, + 0x30,0x62,0x6c,0xaf,0x60,0xbe,0x3d,0x4f,0xa6,0x40,0x29,0xa8,0xb9,0x4a,0xc0,0x77, + 0xa2,0x62,0x28,0xaf,0x67,0xbe,0x3e,0xc1,0xa6,0x78,0x29,0xb6,0xb9,0x4e,0x6e,0x78, + 0x70,0x62,0xb6,0xaf,0x6e,0xbe,0x40,0x2f,0xa6,0xc2,0x2a,0x32,0xb9,0x51,0xc0,0x79, + 0x60,0x63,0x40,0xaf,0x75,0xbe,0x42,0x6f,0xa7,0x68,0x2a,0x40,0xb9,0x55,0x6e,0x7a, + 0x50,0x63,0x5c,0xaf,0x7c,0xbe,0x44,0x4f,0xa7,0xb2,0x2a,0x4e,0xb9,0x58,0xc0,0x7b, + 0x40,0x63,0x78,0xaf,0x23,0x24,0x34,0x51,0x60,0xbb,0x32,0x58,0xb9,0x5b,0x6e,0x7b, + 0x30,0x63,0x2c,0xaf,0x28,0xbe,0x47,0x4f,0xa8,0xa2,0x2a,0x66,0xb9,0x5e,0xc0,0x7c, + 0xa2,0x63,0xba,0xaf,0x2f,0xbe,0x48,0xc1,0xa9,0x38,0x2a,0x74,0xb9,0x62,0x6e,0x7d, + 0x70,0x64,0x44,0xaf,0xa8,0xbe,0x4a,0x2f,0xa9,0x70,0x2a,0x22,0xb9,0x65,0xc0,0x7e, + 0x60,0x64,0x60,0xaf,0xaf,0xbe,0x4c,0x6f,0xa9,0xba,0x2a,0x30,0xb9,0x69,0x6e,0xa1, + 0x50,0x64,0x7c,0xaf,0xb6,0xbe,0x4e,0x4f,0xaa,0x60,0x2a,0xb0,0xb9,0x6c,0xc0,0xa2, + 0x40,0x64,0xaa,0xaf,0xbd,0xbe,0x4f,0xc1,0xaa,0xaa,0x2a,0xbe,0xb9,0x70,0x6e,0xa2, + 0xc2,0x65,0x34,0xb0,0x32,0xbe,0x51,0x2f,0xab,0x50,0x2b,0x3a,0xb9,0x73,0xc0,0x21, + 0xb2,0x65,0x50,0xb0,0x39,0xbe,0x53,0x6f,0xab,0x28,0x2b,0x48,0xb9,0x77,0x6e,0x22, + 0x30,0x65,0x6c,0xb0,0x40,0xbe,0x55,0x4f,0xac,0x40,0x2b,0x56,0xb9,0x7a,0xc0,0x23, + 0xa2,0x65,0x28,0xb0,0x47,0xbe,0x56,0xc1,0xac,0x78,0x2b,0x64,0xb9,0x7e,0x6e,0x24, + 0x70,0x65,0xb6,0xb0,0x4e,0xbe,0x58,0x2f,0xac,0xc2,0x2b,0x72,0xb9,0x21,0xc0,0x25, + 0x60,0x66,0x40,0xb0,0x55,0xbe,0x5a,0x6f,0xad,0x66,0x4c,0xb0,0x58,0xbe,0x5b,0x4f, + 0xad,0xa2,0x2b,0x26,0xb9,0x26,0xc0,0x26,0xa2,0x66,0x68,0xb0,0x5f,0xbe,0x5c,0xc1, + 0xae,0x36,0x4c,0xbf,0x34,0xc2,0x71,0x53,0x4f,0x49,0x7c,0x77,0x44,0xb4,0x76,0x4d, + 0x62,0x60,0x3d,0x5e,0xa6,0x3c,0xbb,0xa6,0x3f,0x49,0xaa,0x77,0x4b,0xb4,0x77,0xbf, + 0x62,0xaa,0x3d,0x6c,0xa6,0x40,0x69,0xa6,0xc1,0x4a,0x34,0x77,0x52,0xb4,0x79,0x2d, + 0x63,0x50,0x3d,0x7a,0xa6,0x43,0xbb,0xa7,0xb1,0x4a,0x50,0x77,0x59,0xb4,0x7b,0x6d, + 0x63,0x28,0x3d,0x28,0xa6,0x47,0x69,0xa8,0x2f,0x4a,0x6c,0x77,0x60,0xb4,0x7d,0x4d, + 0x64,0x40,0x3d,0xa8,0xa6,0x4a,0xbb,0xa9,0xa1,0x4a,0x28,0x77,0x67,0xb4,0x7e,0xbf, + 0x64,0x78,0x3d,0xb6,0xa6,0x4e,0x69,0xaa,0x6f,0x4a,0xb6,0x77,0x6e,0xb4,0xa2,0x2d, + 0x64,0xc2,0x3e,0x32,0xa6,0x51,0xbb,0xab,0x5f,0x4b,0x40,0x77,0x75,0xb4,0x22,0x6d, + 0x65,0x68,0x3e,0x40,0xa6,0x55,0x69,0xac,0x4f,0x4b,0x5c,0x77,0x7c,0xb4,0x24,0x4d, + 0x65,0xb2,0x3e,0x4e,0xa6,0x58,0xbb,0xb7,0xa3,0x51,0x3c,0x33,0x21,0xb4,0x25,0x6d, + 0x66,0x48,0x3e,0x58,0xa6,0x5b,0x69,0xad,0x2f,0x4b,0x2c,0x77,0x28,0xb4,0x27,0x4d, + 0x66,0xa2,0x3e,0x66,0xa6,0x5e,0xbb,0xae,0xa1,0x4b,0xba,0x77,0x2f,0xb4,0x28,0xbf, + 0x67,0x38,0x3e,0x74,0xa6,0x62,0x69,0xaf,0x6f,0x4c,0x44,0x77,0xa8,0xb4,0x2a,0x2d, + 0x67,0x70,0x3e,0x22,0xa6,0x65,0xbb,0xb0,0x5f,0x4c,0x60,0x77,0xaf,0xb4,0x2c,0x6d, + 0x67,0xba,0x3e,0x30,0xa6,0x69,0x69,0xb1,0x4f,0x4c,0x7c,0x77,0xb6,0xb4,0x2e,0x4d, + 0x68,0x60,0x3e,0xb0,0xa6,0x6c,0xbb,0xb2,0x3f,0x4c,0xaa,0x77,0xbd,0xb4,0x2f,0xbf, + 0x68,0xaa,0x3e,0xbe,0xa6,0x70,0x69,0xb2,0xc1,0x4d,0x34,0x78,0x32,0xb4,0xa3,0x2d, + 0x69,0x50,0x3f,0x3a,0xa6,0x73,0xbb,0xb3,0xb1,0x4d,0x50,0x78,0x39,0xb4,0xa5,0x6d, + 0x69,0x28,0x3f,0x48,0xa6,0x77,0x69,0xb4,0x2f,0x4d,0x6c,0x78,0x40,0xb4,0xa7,0x4d, + 0x6a,0x40,0x3f,0x56,0xa6,0x7a,0xbb,0xb5,0xa1,0x4d,0x28,0x78,0x47,0xb4,0xa8,0xbf, + 0x6a,0x78,0x3f,0x64,0xa6,0x7e,0x69,0xb6,0x6f,0x4d,0xb6,0x78,0x4e,0xb4,0xaa,0x2d, + 0x6a,0xc2,0x3f,0x72,0xa6,0x21,0xbb,0xb7,0x5f,0x4e,0x40,0x78,0x55,0xb4,0xac,0x6d, + 0x6b,0x66,0x4c,0x78,0x58,0xb4,0xad,0x4d,0x6b,0xa2,0x3f,0x26,0xa6,0x26,0xbb,0xb8, + 0xa1,0x4e,0x67,0x7d,0x3e,0x32,0x70,0xa3,0x3b,0x67,0x25,0x33,0x31,0x28,0x69,0xb8, + 0xc1,0x4e,0x74,0x78,0x62,0xb4,0xaf,0x2d,0x6c,0x50,0x3f,0xac,0xa6,0x2b,0xbb,0xb9, + 0xb1,0x4e,0x30,0x78,0x69,0xb4,0xb1,0x6d,0x6c,0x28,0x3f,0xba,0xa6,0x2f,0x69,0xba, + 0x2f,0x4e,0xbe,0x78,0x70,0xb4,0xb3,0x4d,0x6d,0x40,0x40,0x36,0xa6,0xa4,0xbb,0xbb, + 0xa1,0x4f,0x48,0x78,0x77,0xb4,0xb4,0xbf,0x6d,0x78,0x40,0x44,0xa6,0xa8,0x69,0xbc, + 0x6f,0x4f,0x64,0x78,0x7e,0xb4,0xb6,0x2d,0x6d,0xc2,0x40,0x52,0xa6,0xab,0xbb,0xbd, + 0x5f,0x4f,0xa2,0x78,0x25,0xb4,0xb8,0x6d,0x6e,0x68,0x40,0x60,0xa6,0xaf,0x69,0xbe, + 0x4f,0x4f,0xae,0x78,0x2c,0xb4,0xba,0x4d,0x6e,0xb2,0x40,0x6e,0xa6,0xb2,0xbb,0xbf, + 0x3f,0x50,0x38,0x78,0xa5,0xb4,0xbb,0xbf,0x6f,0x58,0x40,0x7c,0xa6,0xb6,0x69,0xbf, + 0xc1,0x50,0x54,0x78,0xac,0xb4,0xbd,0x2d,0x6f,0x30,0x40,0x2a,0x57,0x37,0x71,0x30, + 0xb3,0x38,0x68,0x78,0xb1,0xb4,0xbe,0xbf,0x70,0x38,0x40,0xa6,0xa6,0xbc,0x69,0xc1, + 0x6f,0x50,0x24,0x78,0xb8,0xb4,0xc0,0x2d,0x70,0x70,0x40,0xb4,0xa6,0xbf,0xbb,0xc2, + 0x5f,0x50,0xb2,0x78,0xbf,0xb4,0xc2,0x6d,0x70,0xba,0x40,0xc2,0xa6,0x31,0x6a,0x31, + 0x4f,0x51,0x3c,0x79,0x34,0xb5,0x32,0x4d,0x71,0x60,0x41,0x3e,0xa7,0x34,0xbc,0x32, + 0x3f,0x51,0x58,0x79,0x3b,0xb5,0x33,0xbf,0x71,0xaa,0x41,0x4c,0xa7,0x38,0x6a,0x32, + 0xc1,0x51,0x74,0x79,0x42,0xb5,0x35,0x2d,0x72,0x50,0x41,0x5a,0xa7,0x3b,0xbc,0x33, + 0xb1,0x51,0x30,0x79,0x49,0xb5,0x37,0x6d,0x72,0x28,0x41,0x68,0xa7,0x3f,0x6a,0x34, + 0x2f,0x51,0xbe,0x79,0x50,0xb5,0x39,0x4d,0x73,0x40,0x41,0x76,0xa7,0x42,0xbc,0x35, + 0xa1,0x52,0x48,0x79,0x57,0xb5,0x3a,0xbf,0x73,0x78,0x41,0x24,0xa7,0x46,0x6a,0x36, + 0x6f,0x52,0x64,0x79,0x5e,0xb5,0x3c,0x2d,0x73,0xc2,0x41,0xa4,0xa7,0x49,0xbc,0x37, + 0x5f,0x52,0xa2,0x79,0x65,0xb5,0x3e,0x6d,0x74,0x68,0x41,0xb2,0xa7,0x4d,0x6a,0x38, + 0x4f,0x52,0xae,0x79,0x6c,0xb5,0x40,0x4d,0x74,0xb2,0x41,0xc0,0xa7,0x50,0xbc,0x39, + 0x3f,0x53,0x38,0x79,0x73,0xb5,0x41,0xbf,0x75,0x58,0x42,0x3c,0xa7,0x54,0x6a,0x39, + 0xc1,0x53,0x54,0x79,0x7a,0xb5,0x43,0x2d,0x7b,0x68,0xbb,0x37,0xc2,0x76,0x6a,0x3a, + 0xa1,0x53,0x68,0x79,0xa1,0xb5,0x44,0xbf,0x76,0x38,0x42,0x54,0xa7,0x5a,0x6a,0x3b, + 0x6f,0x53,0x24,0x79,0x26,0xb5,0x46,0x2d,0x76,0x70,0x42,0x62,0xa7,0x5d,0xbc,0x3c, + 0x5f,0x53,0xb2,0x79,0x2d,0xb5,0x48,0x6d,0x76,0xba,0x42,0x70,0xa7,0x61,0x6a,0x3d, + 0x4f,0x54,0x3c,0x79,0xa6,0xb5,0x4a,0x4d,0x77,0x60,0x42,0x7e,0xa7,0x64,0xbc,0x3e, + 0x3f,0x54,0x58,0x79,0xad,0xb5,0x4b,0xbf,0x77,0xaa,0x42,0x2c,0xa7,0x68,0x6a,0x3e, + 0xc1,0x54,0x74,0x79,0xb4,0xb5,0x4d,0x2d,0x78,0x50,0x42,0xac,0xa7,0x6b,0xbc,0x3f, + 0xb1,0x54,0x30,0x79,0xbb,0xb5,0x4f,0x6d,0x78,0x28,0x42,0xba,0xa7,0x6f,0x6a,0x40, + 0x2f,0x54,0xbe,0x79,0xc2,0xb5,0x51,0x4d,0x79,0x40,0x43,0x36,0xa7,0x72,0xbc,0x41, + 0xa1,0x55,0x48,0x7a,0x37,0xb5,0x52,0xbf,0x79,0x78,0x43,0x44,0x57,0x37,0x71,0x30, + 0xb3,0x35,0x5c,0x7a,0x3c,0xb5,0x54,0x4d,0x79,0xb2,0x43,0x4e,0xa7,0x78,0xbc,0x43, + 0x3f,0x55,0x78,0x7a,0x43,0xb5,0x55,0xbf,0x7a,0x58,0x43,0x5c,0xa7,0x7c,0x6a,0x43, + 0xc1,0x55,0xa6,0x7a,0x4a,0xb5,0x57,0x2d,0x7a,0x30,0x43,0x6a,0xa7,0xa1,0xbc,0x44, + 0xb1,0x55,0xc2,0x7a,0x51,0xb5,0x59,0x6d,0x7b,0x48,0x43,0x78,0xa7,0x23,0x6a,0x45, + 0x2f,0x56,0x4b,0x7e,0xa7,0x24,0xbc,0x46,0x3f,0x56,0x58,0x7a,0x5b,0xb5,0x5b,0xbf, + 0x7b,0xaa,0x43,0x2c,0xa7,0x28,0x6a,0x46,0xc1,0x56,0x74,0x7a,0x62,0xb5,0x5d,0x2d, + 0x7c,0x50,0x43,0xac,0xa7,0x2b,0xbc,0x47,0xb1,0x56,0x30,0x7a,0x69,0xb5,0x5f,0x6d, + 0x7c,0x28,0x43,0xba,0xa7,0x2f,0x6a,0x48,0x2f,0x56,0xbe,0x7a,0x70,0xb5,0x61,0x4d, + 0x7d,0x40,0x44,0x36,0xa7,0xa4,0xbc,0x49,0xa1,0x57,0x48,0x7a,0x77,0xb5,0x62,0xbf, + 0x7d,0x78,0x44,0x44,0xa7,0xa8,0x6a,0x4a,0x6f,0x57,0x64,0x7a,0x7e,0xb5,0x64,0x2d, + 0x7d,0xc2,0x44,0x52,0xa7,0xab,0xbc,0x4b,0x5f,0x57,0xa2,0x7a,0x25,0xb5,0x66,0x6d, + 0x7e,0x68,0x44,0x60,0xa7,0xaf,0x6a,0x4c,0x4f,0x57,0xae,0x7a,0x2c,0xb5,0x68,0x4d, + 0x7e,0xb2,0x44,0x6e,0xa7,0xb2,0xbc,0x4d,0x3f,0x58,0x38,0x7a,0xa5,0xb5,0x69,0xbf, + 0xa1,0x58,0x44,0x7c,0xa7,0xb6,0x6a,0x4d,0xbd,0x68,0xbb,0x38,0xc2,0x31,0xbd,0x4d, + 0xa1,0xa2,0x44,0x26,0xa7,0xb8,0xbc,0x4e,0xa1,0x58,0x68,0x7a,0xb1,0xb5,0x6c,0xbf, + 0xa2,0x38,0x44,0xa6,0xa7,0xbc,0x6a,0x4f,0x6f,0x58,0x24,0x7a,0xb8,0xb5,0x6e,0x2d, + 0xa2,0x70,0x44,0xb4,0xa7,0xbf,0xbc,0x50,0x5f,0x58,0xb2,0x7a,0xbf,0xb5,0x70,0x6d, + 0xa2,0xba,0x44,0xc2,0xa7,0x31,0x6a,0x51,0x4f,0x59,0x3c,0x7b,0x34,0xb5,0x72,0x4d, + 0x21,0x60,0x45,0x3e,0xa8,0x34,0xbc,0x52,0x3f,0x59,0x58,0x7b,0x3b,0xb5,0x73,0xbf, + 0x21,0xaa,0x45,0x4c,0xa8,0x38,0x6a,0x52,0xc1,0x59,0x74,0x7b,0x42,0xb5,0x75,0x2d, + 0x22,0x50,0x45,0x5a,0xa8,0x3b,0xbc,0x53,0xb1,0x59,0x30,0x7b,0x49,0xb5,0x77,0x6d, + 0x22,0x28,0x45,0x68,0xa8,0x3f,0x6a,0x54,0x2f,0x59,0xbe,0x7b,0x50,0xb5,0x79,0x4d, + 0x23,0x40,0x45,0x76,0xa8,0x42,0xbc,0x55,0xa1,0x5a,0x48,0x7b,0x57,0xb5,0xac,0x71, + 0x71,0x47,0x35,0xa2,0xa8,0x45,0x6a,0x56,0x4f,0x5a,0x5c,0x7b,0x5c,0xb5,0x7c,0x4d, + 0x23,0xb2,0x45,0x2e,0xa8,0x48,0xbc,0x57,0x3f,0x5a,0x78,0x7b,0x63,0xb5,0x7d,0xbf, + 0x24,0x58,0x45,0xae,0xa8,0x4c,0x6a,0x57,0xc1,0x5a,0xa6,0x7b,0x6a,0xb5,0xa1,0x2d, + 0x24,0x30,0x45,0xbc,0xa8,0x4f,0xbc,0x58,0xb1,0x5a,0xc2,0x7b,0x71,0xb5,0x21,0x6d, + 0x25,0x48,0x46,0x38,0xa8,0x53,0x6a,0x59,0x2f,0x5b,0x4c,0x7b,0x78,0xb5,0x23,0x4d, + 0x25,0xa2,0x46,0x46,0xa8,0x56,0xbc,0x5a,0xa1,0x5b,0x68,0x7b,0xa1,0xb5,0x24,0xbf, + 0x26,0x38,0x46,0x54,0xa8,0x5a,0x6a,0x5b,0x6f,0x5b,0x24,0x7b,0x26,0xb5,0x26,0x2d, + 0x26,0x70,0x46,0x62,0xa8,0x5d,0xbc,0x5c,0x5f,0x5b,0xb2,0x7b,0x2d,0xb5,0x28,0x6d, + 0x26,0xba,0x46,0x70,0xa8,0x61,0x6a,0x5d,0x4f,0x5c,0x3c,0x7b,0xa6,0xb5,0x2a,0x4d, + 0x27,0x60,0x46,0x7e,0xa8,0x64,0xbc,0x5e,0x3f,0x5c,0x58,0x7b,0xad,0xb5,0x2b,0xbf, + 0x27,0xaa,0x46,0x2c,0xa8,0x68,0x6a,0x5e,0xc1,0x5c,0x74,0x7b,0xb4,0xb5,0x2d,0x2d, + 0x28,0x50,0x46,0xac,0xa8,0x6b,0xbc,0x5f,0xb1,0x5c,0x30,0x7b,0xbb,0xb5,0x2f,0x6d, + 0x28,0x28,0x46,0xba,0xa8,0x6f,0x6a,0x60,0x2f,0x5c,0xbe,0x7b,0xc2,0xb5,0xa3,0x4d, + 0x29,0x40,0x47,0x36,0xa8,0x72,0xbc,0x61,0x7b,0x61,0x65,0x36,0xc2,0x31,0x5a,0x2b, + 0x21,0x39,0x33,0x3c,0xa8,0x74,0x6a,0x61,0xc1,0x5d,0x54,0x7c,0x3a,0xb5,0xa5,0x2d, + 0x29,0x30,0x47,0x4a,0xa8,0x77,0xbc,0x62,0xb1,0x5d,0x70,0x7c,0x41,0xb5,0xa7,0x6d, + 0x2a,0x48,0x47,0x58,0xa8,0x7b,0x6a,0x63,0x2f,0x5d,0x2c,0x7c,0x48,0xb5,0xa9,0x4d, + 0x2a,0xa2,0x47,0x66,0xa8,0x7e,0xbc,0x64,0xa1,0x5d,0xba,0x7c,0x4f,0xb5,0xaa,0xbf, + 0x2b,0x38,0x47,0x74,0xa8,0x22,0x6a,0x65,0x6f,0x5e,0x44,0x7c,0x56,0xb5,0xac,0x25, + 0xb1,0x5e,0x50,0x7c,0x59,0xb5,0xad,0x6d,0x2b,0x28,0x47,0x28,0xa8,0x27,0x6a,0x66, + 0x2f,0x5e,0x6c,0x7c,0x60,0xb5,0xaf,0x4d,0x2c,0x40,0x47,0xa8,0xa8,0x2a,0xbc,0x67, + 0xa1,0x5e,0x28,0x7c,0x67,0xb5,0xb0,0xbf,0x2c,0x78,0x47,0xb6,0xa8,0x2e,0x6a,0x68, + 0x6f,0x5e,0xb6,0x7c,0x6e,0xb5,0xb2,0x2d,0x2c,0xc2,0x48,0x32,0xa8,0xa3,0xbc,0x69, + 0x5f,0x5f,0x3f,0x7d,0x3e,0x32,0x70,0xa3,0x3d,0x58,0x48,0x3c,0xa8,0xa6,0x6a,0x69, + 0xc1,0x5f,0x54,0x7c,0x7a,0xb5,0xb5,0x2d,0x2d,0x30,0x48,0x4a,0xa8,0xa9,0xbc,0x6a, + 0xb1,0x5f,0x70,0x7c,0x21,0xb5,0xb7,0x6d,0x2e,0x48,0x48,0x58,0xa8,0xad,0x6a,0x6b, + 0x2f,0x5f,0x2c,0x7c,0x28,0xb5,0xb9,0x4d,0x2e,0xa2,0x48,0x66,0xa8,0xb0,0xbc,0x6c, + 0xa1,0x5f,0xba,0x7c,0x2f,0xb5,0xba,0xbf,0x2f,0x38,0x48,0x74,0xa8,0xb4,0x6a,0x6d, + 0x6f,0x60,0x44,0x7c,0xa8,0xb5,0xbc,0x2d,0x2f,0x70,0x48,0x22,0xa8,0xb7,0xbc,0x6e, + 0x5f,0x60,0x60,0x7c,0xaf,0xb5,0xbe,0x6d,0x2f,0xba,0x48,0x30,0xa8,0xbb,0x6a,0x6f, + 0x4f,0x60,0x7c,0x7c,0xb6,0xb5,0xc0,0x4d,0x30,0x60,0x48,0xb0,0xa8,0xbe,0xbc,0x70, + 0x3f,0x60,0xaa,0x7c,0xbd,0xb5,0xc1,0xbf,0x30,0xaa,0x48,0xbe,0xa8,0xc2,0x6a,0x70, + 0xc1,0x59,0x34,0x7d,0x32,0xb6,0x31,0x2d,0xa3,0x50,0x49,0x3a,0xa9,0x33,0xbc,0x71, + 0xb1,0x61,0x50,0x7d,0x39,0xb6,0x33,0x6d,0xa3,0x28,0x49,0x48,0xa9,0x37,0x6a,0x72, + 0x2f,0x61,0x6c,0x7d,0x40,0xb6,0x35,0x4d,0xa4,0x40,0x49,0x56,0xa9,0x3a,0xbc,0x73, + 0xa1,0x61,0x28,0x7d,0x47,0xb6,0x36,0xbf,0xa4,0x78,0x49,0x64,0xa9,0x3e,0x6a,0x74, + 0x6f,0x61,0xb6,0x7d,0x4e,0xb6,0x38,0x2d,0xa4,0xc2,0x49,0x72,0xa9,0x41,0xbc,0x25, + 0xb2,0xb3,0x3e,0xc2,0xa5,0xb6,0x39,0xbf,0xa5,0x58,0x49,0x7c,0xa9,0x44,0x6a,0x75, + 0xc1,0x62,0x54,0x7d,0x5a,0xb6,0x3b,0x2d,0xa5,0x30,0x49,0x2a,0xa9,0x47,0xbc,0x76, + 0xb1,0x62,0x70,0x7d,0x61,0xb6,0x3d,0x6d,0xa6,0x48,0x49,0xaa,0xa9,0x4b,0x6a,0x77, + 0x2f,0x62,0x2c,0x7d,0x68,0xb6,0x3f,0x4d,0xa6,0xa2,0x49,0xb8,0xa9,0x4e,0xbc,0x78, + 0xa1,0x62,0xba,0x7d,0x6f,0xb6,0x40,0xbf,0xa7,0x38,0x4a,0x34,0xa9,0x52,0x6a,0x79, + 0x6f,0x63,0x44,0x7d,0x76,0xb6,0x42,0x2d,0xa7,0x70,0x4a,0x42,0xa9,0x55,0xbc,0x7a, + 0x5f,0x63,0x60,0x7d,0x7d,0xb6,0x44,0x6d,0xa7,0xba,0x4a,0x50,0xa9,0x59,0x6a,0x7b, + 0x4f,0x63,0x7c,0x7d,0x24,0xb6,0x46,0x4d,0xa8,0x60,0x4a,0x5e,0xa9,0x5c,0xbc,0x7c, + 0x3f,0x63,0xaa,0x7d,0x2b,0xb6,0x47,0xbf,0xa8,0xaa,0x4a,0x6c,0xa9,0x60,0x6a,0x7c, + 0xc1,0x64,0x33,0x7d,0x3e,0x32,0x70,0xa3,0x37,0x40,0x4a,0x76,0xa9,0x62,0xbc,0x7d, + 0xa1,0x64,0x48,0x7d,0xa9,0xb6,0x4a,0xbf,0xa9,0x78,0x4a,0x24,0xa9,0x66,0x6a,0x7e, + 0x6f,0x64,0x64,0x7d,0xb0,0xb6,0x4c,0x2d,0xa9,0xc2,0x4a,0xa4,0xa9,0x69,0xbc,0xa1, + 0x5f,0x64,0xa2,0x7d,0xb7,0xb6,0x4e,0x6d,0xaa,0x68,0x4a,0xb2,0xa9,0x6d,0x6a,0xa2, + 0x4f,0x64,0xae,0x7d,0xbe,0xb6,0x50,0x4d,0xaa,0xb2,0x4a,0xc0,0xa9,0x70,0xbc,0x21, + 0x3f,0x65,0x38,0x7e,0x33,0xb6,0x51,0xbf,0xab,0x58,0x4b,0x3c,0xa9,0x74,0x6a,0x21, + 0xc1,0x65,0x54,0x7e,0x3a,0xb6,0x53,0x2d,0xab,0x30,0x4b,0x4a,0xa9,0x77,0xbc,0x22, + 0xb1,0x65,0x70,0x7e,0x41,0xb6,0x55,0x6d,0xac,0x48,0x4b,0x58,0xa9,0x7b,0x6a,0x23, + 0x2f,0x65,0x2c,0x7e,0x48,0xb6,0x57,0x4d,0xac,0xa2,0x4b,0x66,0xa9,0x7e,0xbc,0x24, + 0xa1,0x65,0xba,0x7e,0x4f,0xb6,0x58,0xbf,0xad,0x38,0x4b,0x74,0xa9,0x22,0x6a,0x25, + 0x6f,0x66,0x44,0x7e,0x56,0xb6,0x5a,0x25,0xb1,0x66,0x50,0x7e,0x59,0xb6,0x5b,0x6d, + 0xad,0x28,0x4b,0x28,0xa9,0x27,0x6a,0x26,0x2f,0x66,0x6c,0x7e,0x60,0xb6,0x5d,0x4d, + 0xae,0x40,0x4b,0xa8,0xa9,0x2a,0xbc,0x27,0xa1,0x66,0x28,0x7e,0x67,0xb6,0x5e,0xbf, + 0xae,0x78,0x4b,0xb6,0xa9,0x2e,0x6a,0x28,0x6f,0x66,0xb6,0x7e,0x6e,0xb6,0x60,0x25, + 0xb2,0xb3,0x40,0xc1,0x32,0x30,0xbc,0x29,0x3f,0x67,0x38,0x7e,0x73,0xb6,0x61,0xbf, + 0xaf,0x58,0x4c,0x3c,0xa9,0xa6,0x6a,0x29,0xc1,0x67,0x54,0x7e,0x7a,0xb6,0x63,0x2d, + 0xaf,0x30,0x4c,0x4a,0xa9,0xa9,0xbc,0x2a,0xb1,0x67,0x70,0x7e,0x21,0xb6,0x65,0x6d, + 0xb0,0x48,0x4c,0x58,0xa9,0xad,0x6a,0x2b,0x2f,0x67,0x2c,0x7e,0x28,0xb6,0x67,0x4d, + 0xb0,0xa2,0x4c,0x66,0xa9,0xb0,0xbc,0x2c,0xa1,0x67,0xba,0x7e,0x2f,0xb6,0x68,0xbf, + 0xb1,0x38,0x4c,0x74,0xa9,0xb4,0x6a,0x2d,0x6f,0x68,0x44,0x7e,0xa8,0xb6,0x6a,0x2d, + 0xb1,0x70,0x4c,0x22,0xa9,0xb7,0xbc,0x2e,0x5f,0x68,0x60,0x7e,0xaf,0xb6,0x6c,0x6d, + 0xb1,0xba,0x4c,0x30,0xa9,0xbb,0x6a,0x2f,0x4f,0x68,0x7c,0x7e,0xb6,0xb6,0x6e,0x4d, + 0xb2,0x60,0x4c,0xb0,0xa9,0xbe,0xbc,0x30,0x3f,0x68,0xaa,0x7e,0xbd,0xb6,0x6f,0xbf, + 0xb2,0xaa,0x4c,0xbe,0x57,0x37,0x71,0x30,0xb3,0x38,0xbe,0x7e,0xc2,0xb6,0x31,0x4d, + 0xb3,0x40,0x4d,0x36,0xaa,0x32,0xbc,0xa3,0xa1,0x69,0x48,0xa1,0x37,0xb6,0x72,0xbf, + 0xb3,0x78,0x4d,0x44,0xaa,0x36,0x6a,0xa4,0x6f,0x69,0x64,0xa1,0x3e,0xb6,0x74,0x2d, + 0xb3,0xc2,0x4d,0x52,0xaa,0x39,0xbc,0xa5,0x5f,0x69,0xa2,0xa1,0x45,0xb6,0x76,0x6d, + 0xb4,0x68,0x4d,0x60,0xaa,0x3d,0x6a,0xa6,0x4f,0x69,0xae,0xa1,0x4c,0xb6,0x78,0x4d, + 0xb4,0xb2,0x4d,0x6e,0xaa,0x40,0xbc,0xa7,0x3f,0x6a,0x38,0xa1,0x53,0xb6,0x79,0xbf, + 0xb5,0x58,0x4d,0x7c,0xaa,0x44,0x6a,0xa7,0xc1,0x6a,0x54,0xa1,0x5a,0xb6,0x7b,0x2d, + 0xb5,0x30,0x4d,0x2a,0xaa,0x47,0xbc,0xa8,0xb1,0x6a,0x70,0xa1,0x61,0xb6,0x7d,0x6d, + 0xb6,0x48,0x4d,0xaa,0xaa,0x4b,0x6a,0xa9,0x2f,0x6a,0x2c,0xa1,0x68,0xb6,0xa1,0x4d, + 0xb6,0xa2,0x4d,0xb8,0xaa,0x4e,0xbc,0xaa,0xa1,0x6a,0xba,0xa1,0x6f,0xb6,0xa2,0xbf, + 0xb7,0x38,0x4e,0x34,0xaa,0x52,0x6a,0xab,0x6f,0x6b,0x44,0xa1,0x76,0xb6,0x22,0x2d, + 0xb7,0x70,0x4e,0x42,0xaa,0x55,0xbc,0xac,0x5f,0x6b,0x60,0xa1,0x7d,0xb6,0x24,0x6d, + 0xb7,0xba,0x4e,0x50,0xaa,0x59,0x6a,0xad,0x4f,0x6b,0x7c,0xa1,0x24,0xb6,0x26,0x4d, + 0xb8,0x60,0x4e,0x5e,0xaa,0x5c,0xbc,0xae,0x3f,0x6b,0xaa,0xa1,0x2b,0xb6,0x27,0xbf, + 0xbd,0x68,0xbb,0x37,0xc2,0x6a,0x6a,0xae,0x2f,0x6b,0xbe,0xa1,0x30,0xb6,0x29,0x4d, + 0xb9,0x40,0x4e,0x76,0xaa,0x62,0xbc,0xaf,0xa1,0x6c,0x48,0xa1,0xa9,0xb6,0x2a,0xbf, + 0xb9,0x78,0x4e,0x24,0xaa,0x66,0x6a,0xb0,0x6f,0x6c,0x64,0xa1,0xb0,0xb6,0x2c,0x2d, + 0xb9,0xc2,0x4e,0xa4,0xaa,0x69,0xbc,0xb1,0x5f,0x6c,0xa2,0xa1,0xb7,0xb6,0x2e,0x6d, + 0xba,0x68,0x4e,0xb2,0xaa,0x6d,0x6a,0xb2,0x4f,0x6c,0xae,0xa1,0xbe,0xb6,0x30,0x4d, + 0xba,0xb2,0x4e,0xc0,0xaa,0x70,0xbc,0xb3,0x3f,0x6d,0x38,0xa2,0x33,0xb6,0xa3,0xbf, + 0xbb,0x58,0x4f,0x3c,0xaa,0x74,0x6a,0xb3,0xc1,0x6d,0x54,0xa2,0x3a,0xb6,0xa5,0x2d, + 0xbb,0x30,0x4f,0x4a,0xaa,0x77,0xbc,0xb4,0xb1,0x6d,0x70,0xa2,0x41,0xb6,0xa7,0x6d, + 0xbc,0x48,0x4f,0x58,0xaa,0x7b,0x6a,0xb5,0x2f,0x6d,0x2c,0xa2,0x48,0xb6,0xa9,0x4d, + 0xbc,0xa2,0x4f,0x66,0x57,0x37,0x71,0x30,0xb3,0x35,0xb2,0xa2,0x4d,0xb6,0xaa,0x6d, + 0xbc,0xba,0x4f,0x70,0xaa,0x21,0x6a,0xb7,0x4f,0x6e,0x3c,0xa2,0x54,0xb6,0xac,0x4d, + 0xbd,0x60,0x4f,0x7e,0x57,0xb6,0xac,0xbf,0xbd,0x78,0x4f,0x24,0xaa,0x26,0x6a,0xb8, + 0x6f,0x6e,0x64,0xa2,0x5e,0xb6,0xae,0x2d,0xbd,0xc2,0x4f,0xa4,0xaa,0x29,0xbc,0xb9, + 0x5f,0x6e,0xa2,0xa2,0x65,0xb6,0xb0,0x6d,0xbe,0x68,0x4f,0xb2,0xaa,0x2d,0x6a,0xba, + 0x4f,0x6e,0xae,0xa2,0x6c,0xb6,0xb2,0x4d,0xbe,0xb2,0x4f,0xc0,0xaa,0x30,0xbc,0xbb, + 0x3f,0x6f,0x38,0xa2,0x73,0xb6,0xb3,0xbf,0xbf,0x58,0x50,0x3c,0xaa,0xa6,0x6a,0xbb, + 0xc1,0x6f,0x54,0xa2,0x7a,0xb6,0xb5,0x2d,0xbf,0x30,0x50,0x4a,0xaa,0xa9,0xbc,0xbc, + 0xb1,0x6f,0x70,0xa2,0x21,0xb6,0xb7,0x6d,0xc0,0x48,0x50,0x58,0xaa,0xad,0x6a,0xbd, + 0x2f,0x6f,0x2c,0xa2,0x28,0xb6,0xb9,0x4d,0xc0,0xa2,0x50,0x66,0xaa,0xb0,0xbc,0xbe, + 0xa1,0x6f,0xba,0xa2,0x2f,0xb6,0xba,0xbf,0xc1,0x38,0x50,0x74,0xaa,0xb4,0x6a,0xbf, + 0x6f,0x70,0x44,0xa2,0xa8,0xb6,0xbc,0x2d,0xc1,0x70,0x50,0x22,0xaa,0xb7,0xbc,0xc0, + 0x5f,0x70,0x60,0xa2,0xaf,0xb6,0xbe,0x6d,0xc1,0xba,0x50,0x30,0xaa,0xbb,0x6a,0xc1, + 0x4f,0x70,0x7c,0xa2,0xb6,0xb6,0xc0,0x4d,0xc2,0x60,0x50,0xb0,0xaa,0xbe,0xbc,0xc2, + 0x3b,0x68,0xbb,0x38,0xc2,0x31,0xc1,0x6d,0xc2,0x28,0x50,0xba,0xaa,0xc1,0x6a,0xc2, + 0x2f,0x70,0xbe,0xa2,0xc2,0xb6,0x71,0x4e,0x31,0x40,0x51,0x36,0xab,0x32,0xbd,0x31, + 0xa1,0x71,0x48,0x21,0x37,0xb7,0x32,0xc0,0x31,0x78,0x51,0x44,0xab,0x36,0x6b,0x32, + 0x6f,0x71,0x64,0x21,0x3e,0xb7,0x34,0x2e,0x31,0xc2,0x51,0x52,0xab,0x39,0xbd,0x33, + 0x5f,0x71,0xa2,0x21,0x45,0xb7,0x36,0x6e,0x32,0x68,0x51,0x60,0xab,0x3d,0x6b,0x34, + 0x4f,0x71,0xae,0x21,0x4c,0xb7,0x38,0x4e,0x32,0xb2,0x51,0x6e,0xab,0x40,0xbd,0x35, + 0x3f,0x72,0x38,0x21,0x53,0xb7,0x39,0xc0,0x33,0x58,0x51,0x7c,0xab,0x44,0x6b,0x35, + 0xc1,0x72,0x54,0x21,0x5a,0xb7,0x3b,0x2e,0x33,0x30,0x51,0x2a,0xab,0x47,0xbd,0x36, + 0xb1,0x72,0x70,0x21,0x61,0xb7,0x3d,0x6e,0x34,0x48,0x51,0xaa,0xab,0x4b,0x6b,0x37, + 0x2f,0x72,0x2c,0x21,0x68,0xb7,0x5a,0x71,0x71,0x47,0x35,0xb4,0xab,0x4d,0xbd,0x38, + 0x5f,0x72,0xb2,0x21,0x6d,0xb7,0x40,0x6e,0x34,0xba,0x51,0xc2,0xab,0x51,0x6b,0x39, + 0x4f,0x73,0x3c,0x21,0x74,0xb7,0x42,0x4e,0x35,0x60,0x52,0x3e,0xab,0x54,0xbd,0x3a, + 0x3f,0x73,0x58,0x21,0x7b,0xb7,0x43,0xc0,0x35,0xaa,0x52,0x4c,0xab,0x58,0x6b,0x3a, + 0xc1,0x73,0x74,0x21,0x22,0xb7,0x45,0x2e,0x36,0x50,0x52,0x5a,0xab,0x5b,0xbd,0x3b, + 0xb1,0x73,0x30,0x21,0x29,0xb7,0x47,0x6e,0x36,0x28,0x52,0x68,0xab,0x5f,0x6b,0x3c, + 0x2f,0x73,0xbe,0x21,0x30,0xb7,0x49,0x4e,0x37,0x40,0x52,0x76,0xab,0x62,0xbd,0x3d, + 0xa1,0x74,0x48,0x21,0xa9,0xb7,0x4a,0xc0,0x37,0x78,0x52,0x24,0xab,0x66,0x6b,0x3e, + 0x6f,0x74,0x64,0x21,0xb0,0xb7,0x4c,0x2e,0x37,0xc2,0x52,0xa4,0xab,0x69,0xbd,0x3f, + 0x5f,0x74,0xa2,0x21,0xb7,0xb7,0x4e,0x6e,0x38,0x68,0x52,0xb2,0xab,0x6d,0x6b,0x40, + 0x4f,0x74,0xae,0x21,0xbe,0xb7,0x50,0x4e,0x38,0xb2,0x52,0xc0,0xab,0x70,0xbd,0x41, + 0x3f,0x75,0x38,0x22,0x33,0xb7,0x51,0xc0,0x39,0x58,0x53,0x3c,0xab,0x74,0x6b,0x41, + 0xc1,0x75,0x54,0x22,0x3a,0xb7,0x53,0x2e,0x39,0x30,0x53,0x4a,0xab,0x77,0xbd,0x42, + 0xb1,0x75,0x70,0x22,0x41,0xb7,0x55,0x6e,0x3a,0x48,0x53,0x58,0xab,0x7b,0x6b,0x43, + 0x2b,0x61,0x65,0x36,0xc2,0x31,0x5a,0x2b,0x21,0x39,0x33,0x5e,0xab,0x7c,0xbd,0x44, + 0x3f,0x75,0xaa,0x22,0x4b,0xb7,0x57,0xc0,0x3a,0xaa,0x53,0x6c,0xab,0xa2,0x6b,0x44, + 0xc1,0x76,0x34,0x22,0x52,0xb7,0x59,0x2e,0x3b,0x50,0x53,0x7a,0xab,0x23,0xbd,0x45, + 0xad,0x68,0x53,0xa2,0xab,0x25,0x6b,0x46,0x4f,0x76,0x5c,0x22,0x5c,0xb7,0x5c,0x4e, + 0x3b,0xb2,0x53,0x2e,0xab,0x28,0xbd,0x47,0x3f,0x76,0x78,0x22,0x63,0xb7,0x5d,0xc0, + 0x3c,0x58,0x53,0xae,0xab,0x2c,0x6b,0x47,0xc1,0x76,0xa6,0x22,0x6a,0xb7,0x5f,0x2e, + 0x3c,0x30,0x53,0xbc,0xab,0x2f,0xbd,0x48,0xb1,0x76,0xc2,0x22,0x71,0xb7,0x61,0x6e, + 0x3d,0x48,0x54,0x38,0xab,0xa5,0x6b,0x49,0x2f,0x77,0x4c,0x22,0x78,0xb7,0x63,0x4e, + 0x3d,0xa2,0x54,0x46,0xab,0xa8,0xbd,0x4a,0xa1,0x77,0x68,0x22,0xa1,0xb7,0x64,0xc0, + 0x3e,0x38,0x54,0x54,0xab,0xac,0x6b,0x4b,0x6f,0x77,0x23,0x7d,0x3e,0x32,0x70,0xa3, + 0x3e,0x60,0x54,0x5e,0xab,0xae,0xbd,0x4c,0x3f,0x77,0xaa,0x22,0x2b,0xb7,0x67,0xc0, + 0x3e,0xaa,0x54,0x6c,0xab,0xb2,0x6b,0x4c,0xc1,0x78,0x34,0x22,0xa4,0xb7,0x69,0x2e, + 0x3f,0x50,0x54,0x7a,0xab,0xb5,0xbd,0x4d,0xb1,0x78,0x50,0x22,0xab,0xb7,0x6b,0x6e, + 0x3f,0x28,0x54,0x28,0xab,0xb9,0x6b,0x4e,0x2f,0x78,0x6c,0x22,0xb2,0xb7,0x6d,0x4e, + 0x40,0x40,0x54,0xa8,0xab,0xbc,0xbd,0x4f,0xa1,0x78,0x28,0x22,0xb9,0xb7,0x6e,0xc0, + 0x40,0x78,0x54,0xb6,0xab,0xc0,0x6b,0x50,0x6f,0x78,0xb6,0x22,0xc0,0xb7,0x70,0x2e, + 0x40,0xc2,0x51,0x32,0xac,0x31,0xbd,0x51,0x5f,0x79,0x40,0x23,0x35,0xb7,0x72,0x6e, + 0x41,0x68,0x55,0x40,0xac,0x35,0x6b,0x52,0x4f,0x79,0x5c,0x23,0x3c,0xb7,0x74,0x4e, + 0x41,0xb2,0x55,0x4e,0xac,0x38,0xbd,0x53,0x3f,0x79,0x78,0x23,0x43,0xb7,0x75,0xc0, + 0x42,0x58,0x55,0x5c,0xac,0x3c,0x6b,0x53,0xc1,0x79,0xa6,0x23,0x4a,0xb7,0x77,0x2e, + 0x42,0x30,0x55,0x6a,0xac,0x3f,0xbd,0x54,0xb1,0x79,0xc2,0x23,0x51,0xb7,0x79,0x6e, + 0x43,0x48,0x55,0x78,0xac,0x43,0x6b,0x55,0x2f,0x7a,0x4c,0x23,0x58,0xb7,0x7b,0x4e, + 0x43,0xa2,0x55,0x26,0xac,0x46,0xbd,0x56,0xa1,0x7a,0x68,0x23,0x5f,0xb7,0x7c,0xc0, + 0x44,0x38,0x55,0xa6,0xac,0x4a,0x6b,0x65,0xb2,0xb3,0x3e,0xc2,0x7b,0xb7,0x7e,0x4e, + 0x44,0x60,0x55,0xb0,0xac,0x4c,0xbd,0x58,0x3f,0x7a,0xaa,0x23,0x6b,0xb7,0xa1,0xc0, + 0x44,0xaa,0x55,0xbe,0xac,0x50,0x6b,0x58,0xc1,0x7b,0x34,0x23,0x72,0xb7,0x21,0x2e, + 0x45,0x50,0x56,0x3a,0xac,0x53,0xbd,0x59,0xb1,0x7b,0x50,0x23,0x79,0xb7,0x23,0x6e, + 0x45,0x28,0x56,0x48,0xac,0x57,0x6b,0x5a,0x2f,0x7b,0x6c,0x23,0xa2,0xb7,0x25,0x4e, + 0x46,0x40,0x56,0x56,0xac,0x5a,0xbd,0x5b,0xa1,0x7b,0x28,0x23,0x27,0xb7,0x26,0xc0, + 0x46,0x78,0x56,0x64,0xac,0x5e,0x6b,0x5c,0x6f,0x7b,0xb6,0x23,0x2e,0xb7,0x28,0x2e, + 0x46,0xc2,0x56,0x72,0xac,0x61,0xbd,0x5d,0x5f,0x7c,0x40,0x23,0xa7,0xb7,0x2a,0x6e, + 0x47,0x68,0x56,0xa2,0xac,0x65,0x6b,0x5e,0x4f,0x7c,0x5c,0x23,0xae,0xb7,0x2c,0x4e, + 0x47,0xb2,0x56,0x2e,0xac,0x68,0xbd,0x5f,0x3f,0x7c,0x77,0x7d,0x3e,0x32,0x70,0xa3, + 0x38,0x48,0x56,0xaa,0xac,0x6b,0x6b,0x5f,0x2f,0x7c,0x2c,0x23,0xba,0xb7,0x2f,0x4e, + 0x48,0xa2,0x56,0xb8,0xac,0x6e,0xbd,0x60,0xa1,0x7c,0xba,0x23,0xc1,0xb7,0x30,0xc0, + 0x49,0x38,0x57,0x34,0xac,0x72,0x6b,0x61,0x6f,0x7d,0x44,0x24,0x36,0xb7,0xa4,0x2e, + 0x49,0x70,0x57,0x42,0xac,0x75,0xbd,0x62,0x5f,0x7d,0x60,0x24,0x3d,0xb7,0xa6,0x6e, + 0x49,0xba,0x57,0x50,0xac,0x79,0x6b,0x63,0x4f,0x7d,0x7c,0x24,0x44,0xb7,0xa8,0x4e, + 0x4a,0x60,0x57,0x5e,0xac,0x7c,0xbd,0x64,0x3f,0x7d,0xaa,0x24,0x4b,0xb7,0xa9,0xc0, + 0x4a,0xaa,0x57,0x6c,0xac,0xa2,0x6b,0x64,0xc1,0x7e,0x34,0x24,0x52,0xb7,0xab,0x2e, + 0x4b,0x50,0x57,0x7a,0xac,0x23,0xbd,0x65,0xad,0x68,0x57,0xa2,0xac,0x25,0x6b,0x66, + 0x4f,0x7e,0x5c,0x24,0x5c,0xb7,0xae,0x4e,0x4b,0xb2,0x57,0x2e,0xac,0x28,0xbd,0x67, + 0x3f,0x7e,0x78,0x24,0x63,0xb7,0xaf,0xc0,0x4c,0x58,0x57,0xae,0xac,0x2c,0x6b,0x67, + 0xc1,0x7e,0xa6,0x24,0x6a,0xb7,0xb1,0x2e,0x4c,0x30,0x57,0xbc,0xac,0x2f,0xbd,0x68, + 0xb1,0x7e,0xc2,0x24,0x71,0xb7,0xb3,0x6e,0x4d,0x48,0x58,0x38,0xac,0xa5,0x6b,0x69, + 0x2f,0xa1,0x4c,0x24,0x78,0xb7,0xb5,0x4e,0x4d,0xa2,0x58,0x46,0xac,0xa8,0xbd,0x6a, + 0xa1,0xa1,0x68,0x24,0xa1,0xb7,0xb6,0xb7,0xb2,0xb3,0x40,0xc1,0x32,0xab,0x6b,0x6b, + 0x4f,0xa1,0x7c,0x24,0x24,0xb7,0xb8,0x4e,0x4e,0x60,0x58,0x5e,0xac,0xae,0xbd,0x6c, + 0x3f,0xa1,0xaa,0x24,0x2b,0xb7,0xb9,0xc0,0x4e,0xaa,0x58,0x6c,0xac,0xb2,0x6b,0x6c, + 0xc1,0xa2,0x34,0x24,0xa4,0xb7,0xbb,0x2e,0x4f,0x50,0x58,0x7a,0xac,0xb5,0xbd,0x6d, + 0xb1,0xa2,0x50,0x24,0xab,0xb7,0xbd,0x6e,0x4f,0x28,0x58,0x28,0xac,0xb9,0x6b,0x6e, + 0x2f,0xa2,0x6c,0x24,0xb2,0xb7,0xbf,0x4e,0x50,0x40,0x58,0xa8,0xac,0xbc,0xbd,0x6f, + 0xa1,0xa2,0x28,0x24,0xb9,0xb7,0xc0,0xc0,0x50,0x78,0x58,0xb6,0xac,0xc0,0x6b,0x70, + 0x6f,0xa2,0xb6,0x24,0xc0,0xb7,0xc2,0x2e,0x50,0xc2,0x55,0x32,0xad,0x31,0xbd,0x71, + 0x5f,0x21,0x40,0x25,0x35,0xb8,0x32,0x6e,0x51,0x68,0x59,0x40,0xad,0x35,0x6b,0x72, + 0x4f,0x21,0x5c,0x25,0x3c,0xb8,0x34,0x4e,0x51,0xb2,0x59,0x4e,0xad,0x24,0x32,0x31, + 0x5d,0x39,0x70,0x25,0x41,0xb8,0x35,0x6e,0x52,0x48,0x59,0x58,0xad,0x3b,0x6b,0x73, + 0x2f,0x21,0x2c,0x25,0x48,0xb8,0x37,0x4e,0x52,0xa2,0x59,0x66,0xad,0x3e,0xbd,0x74, + 0xa1,0x21,0xba,0x25,0x4f,0xb8,0x38,0xc0,0x53,0x38,0x59,0x74,0xad,0x42,0x6b,0x75, + 0x6f,0x22,0x44,0x25,0x56,0xb8,0x3a,0x2e,0x53,0x70,0x59,0x22,0xad,0x45,0xbd,0x76, + 0x5f,0x22,0x60,0x25,0x5d,0xb8,0x3c,0x6e,0x53,0xba,0x59,0x30,0xad,0x49,0x6b,0x77, + 0x4f,0x22,0x7c,0x25,0x64,0xb8,0x3e,0x4e,0x54,0x60,0x59,0xb0,0xad,0x4c,0xbd,0x78, + 0x3f,0x22,0xaa,0x25,0x6b,0xb8,0x3f,0xc0,0x54,0xaa,0x59,0xbe,0xad,0x50,0x6b,0x78, + 0xc1,0x23,0x34,0x25,0x72,0xb8,0x41,0x2e,0x55,0x50,0x5a,0x3a,0xad,0x53,0xbd,0x79, + 0xb1,0x23,0x50,0x25,0x79,0xb8,0x43,0x6e,0x55,0x28,0x5a,0x48,0xad,0x57,0x6b,0x7a, + 0x2f,0x23,0x6c,0x25,0xa2,0xb8,0x45,0x4e,0x56,0x40,0x5a,0x56,0xad,0x5a,0xbd,0x7b, + 0xa1,0x23,0x28,0x25,0x27,0xb8,0x46,0xc0,0x56,0x78,0x5a,0x64,0xad,0x5e,0x6b,0x7c, + 0x6f,0x23,0xb6,0x25,0x2e,0xb8,0x48,0x2e,0x56,0xc2,0x5a,0x72,0xad,0x61,0xbd,0x7d, + 0x5f,0x24,0x40,0x25,0xa7,0xb8,0x4a,0x6e,0x57,0x68,0x5a,0xa2,0xad,0x65,0x6b,0x7e, + 0x4f,0x24,0x5c,0x25,0xae,0xb8,0x4c,0x45,0xa3,0xab,0x3c,0xc1,0x31,0x24,0x66,0x51, + 0x41,0x34,0x68,0x25,0xb1,0xb8,0x4c,0xc0,0x58,0x38,0x5a,0xa6,0xad,0x6a,0x6b,0xa1, + 0x6f,0x24,0x24,0x25,0xb8,0xb8,0x4e,0x2e,0x58,0x70,0x5a,0xb4,0xad,0x6d,0xbd,0xa2, + 0x5f,0x24,0xb2,0x25,0xbf,0xb8,0x50,0x6e,0x58,0xba,0x5a,0xc2,0xad,0x71,0x6b,0x21, + 0x4f,0x25,0x3c,0x26,0x34,0xb8,0x52,0x4e,0x59,0x60,0x5b,0x3e,0xad,0x74,0xbd,0x22, + 0x3f,0x25,0x58,0x26,0x3b,0xb8,0x53,0xc0,0x59,0xaa,0x5b,0x4c,0xad,0x78,0x6b,0x22, + 0xc1,0x25,0x74,0x26,0x42,0xb8,0x55,0x2e,0x5a,0x50,0x5b,0x5a,0xad,0x7b,0xbd,0x23, + 0xb1,0x25,0x30,0x26,0x49,0xb8,0x57,0x6e,0x5a,0x28,0x5b,0x68,0xad,0xa1,0x6b,0x24, + 0x2f,0x25,0xbe,0x26,0x50,0xb8,0x59,0x4e,0x5b,0x40,0x5b,0x76,0xad,0x22,0xbd,0x25, + 0xa1,0x26,0x48,0x26,0x57,0x24,0x6b,0x25,0xc1,0x26,0x54,0x26,0x5a,0xb8,0x5b,0x2e, + 0x5b,0x2e,0x49,0x4b,0x33,0xc2,0x71,0x46,0xa1,0x26,0x68,0x26,0x5f,0xb8,0x5c,0xc0, + 0x5c,0x38,0x5b,0xa6,0xad,0x2a,0x6b,0x27,0x6f,0x26,0x24,0x26,0x66,0xb8,0x5e,0x2e, + 0x5c,0x70,0x5b,0xb4,0xad,0x2d,0xbd,0x28,0x5f,0x26,0xb2,0x26,0x6d,0xb8,0x60,0x6e, + 0x5c,0xba,0x5b,0xc2,0xad,0xa3,0x6b,0x29,0x4f,0x27,0x3c,0x26,0x74,0xb8,0x62,0x4e, + 0x5d,0x60,0x5c,0x3e,0xad,0xa6,0xbd,0x2a,0x3f,0x27,0x58,0x26,0x7b,0xb8,0x63,0xc0, + 0x5d,0xaa,0x5c,0x4c,0xad,0xaa,0x6b,0x2a,0xc1,0x27,0x74,0x26,0x22,0xb8,0x65,0x2e, + 0x5e,0x50,0x5c,0x5a,0xad,0xad,0xbd,0x2b,0xb1,0x27,0x30,0x26,0x29,0xb8,0x67,0x6e, + 0x5e,0x28,0x5c,0x68,0xad,0xb1,0x6b,0x2c,0x2f,0x27,0xbe,0x26,0x30,0xb8,0x69,0x4e, + 0x5f,0x40,0x5c,0x76,0xad,0xb4,0xbd,0x2d,0xa1,0x28,0x48,0x26,0xa9,0xb8,0x6a,0xc0, + 0x5f,0x78,0x5c,0x24,0xad,0xb8,0x6b,0x2e,0x6f,0x28,0x64,0x26,0xb0,0xb8,0x6c,0x2e, + 0x5f,0xc2,0x5c,0xa4,0xad,0xbb,0xbd,0x2f,0x5f,0x28,0xa2,0x26,0xb7,0xb8,0x6e,0x6e, + 0x60,0x68,0x5c,0xb2,0xad,0xbf,0x6b,0x30,0x4f,0x28,0xae,0x26,0xbe,0xb8,0x70,0x4e, + 0x60,0xb2,0x5c,0xc0,0xad,0xc2,0xbd,0x71,0x3f,0x29,0x38,0x27,0x33,0xb8,0x71,0xc0, + 0x61,0x58,0x5d,0x3c,0xae,0x34,0x6b,0xa3,0xc1,0x29,0x54,0x27,0x3a,0xb8,0xac,0x2f, + 0xa3,0x50,0xbf,0x33,0x3b,0xb8,0x73,0xc0,0x61,0xaa,0x5d,0x4c,0xae,0x38,0x6b,0xa4, + 0xc1,0x29,0x74,0x27,0x42,0xb8,0x75,0x2e,0x62,0x50,0x5d,0x5a,0xae,0x3b,0xbd,0xa5, + 0xb1,0x29,0x30,0x27,0x49,0xb8,0x77,0x6e,0x62,0x28,0x5d,0x68,0xae,0x3f,0x6b,0xa6, + 0x2f,0x29,0xbe,0x27,0x50,0xb8,0x79,0x4e,0x63,0x40,0x5d,0x76,0xae,0x42,0xbd,0xa7, + 0xa1,0x2a,0x48,0x27,0x57,0xb8,0x7a,0xc0,0x63,0x78,0x5d,0x24,0xae,0x46,0x6b,0xa8, + 0x6f,0x2a,0x64,0x27,0x5e,0xb8,0x7c,0x2e,0x63,0xc2,0x5d,0xa4,0xae,0x49,0xbd,0xa9, + 0x5f,0x2a,0xa2,0x27,0x65,0xb8,0x7e,0x6e,0x64,0x68,0x5d,0xb2,0xae,0x4d,0x6b,0xaa, + 0x4f,0x2a,0xae,0x27,0x6c,0xb8,0xa2,0x4e,0x64,0xb2,0x5d,0xc0,0xae,0x50,0xbd,0xab, + 0x3f,0x2b,0x38,0x27,0x73,0xb8,0x21,0xc0,0x65,0x58,0x5e,0x3c,0xae,0x54,0x6b,0xab, + 0xc1,0x2b,0x53,0x7d,0x3e,0x32,0x70,0xa3,0x35,0xa2,0x5e,0x46,0xae,0x56,0xbd,0xac, + 0xa1,0x2b,0x68,0x27,0xa1,0xb8,0x24,0xc0,0x66,0x38,0x5e,0x54,0xae,0x5a,0x6b,0xad, + 0x6f,0x2b,0x24,0x27,0x26,0xb8,0x26,0x2e,0x66,0x70,0x5e,0x62,0xae,0x5d,0xbd,0xae, + 0x5f,0x2b,0xb2,0x27,0x2d,0xb8,0x28,0x6e,0x66,0xba,0x5e,0x70,0xae,0x61,0x6b,0xaf, + 0x4f,0x2c,0x3c,0x27,0xa6,0xb8,0x2a,0x4e,0x67,0x60,0x5e,0x7e,0xae,0x64,0xbd,0xb0, + 0x3f,0x2c,0x58,0x27,0xad,0xb8,0x2b,0xc0,0x67,0xaa,0x5e,0x2c,0xae,0x68,0x6b,0xb0, + 0xc1,0x2c,0x74,0x27,0xb4,0xb8,0x2d,0x2e,0x68,0x50,0x5e,0xac,0xae,0x6b,0xbd,0xb1, + 0xb1,0x2c,0x30,0x27,0xbb,0xb8,0x2f,0x6e,0x68,0x28,0x5e,0xba,0xae,0x6f,0x6b,0xb2, + 0x2f,0x2c,0xbe,0x27,0xc2,0xb8,0xa3,0x4e,0x69,0x40,0x5f,0x36,0xae,0x72,0xbd,0xb3, + 0xa1,0x2d,0x48,0x28,0x37,0xb8,0xa4,0xc0,0x69,0x78,0x5f,0x44,0xae,0x76,0x6b,0xb4, + 0x6f,0x2d,0x64,0x28,0x3e,0xb8,0xa6,0x2e,0x69,0xc2,0x5f,0x52,0xae,0x79,0xbd,0xb5, + 0x5f,0x2d,0xa2,0x28,0x45,0xb8,0xa8,0x6e,0x6a,0x68,0x5f,0x60,0xae,0x7d,0x6b,0xb6, + 0x4f,0x2d,0xae,0x28,0x4c,0xb8,0xaa,0x4e,0x6a,0xb2,0x5f,0x6e,0xae,0xa2,0xbd,0xb7, + 0x3f,0x2e,0x38,0x28,0x53,0xb8,0xab,0xc0,0x6b,0x58,0x5f,0x7c,0xae,0x24,0x5a,0x25, + 0xb2,0xb3,0x40,0xc1,0x32,0x24,0xbd,0xb8,0x3f,0x2e,0x58,0x28,0x5b,0xb8,0xad,0xc0, + 0x6b,0xaa,0x5f,0x2c,0xae,0x28,0x6b,0xb8,0xc1,0x2e,0x74,0x28,0x62,0xb8,0xaf,0x2e, + 0x6c,0x50,0x5f,0xac,0xae,0x2b,0xbd,0xb9,0xb1,0x2e,0x30,0x28,0x69,0xb8,0xb1,0x6e, + 0x6c,0x28,0x5f,0xba,0xae,0x2f,0x6b,0xba,0x2f,0x2e,0xbe,0x28,0x70,0xb8,0xb3,0x4e, + 0x6d,0x40,0x60,0x36,0xae,0xa4,0xbd,0xbb,0xa1,0x2f,0x48,0x28,0x77,0xb8,0xb4,0xc0, + 0x6d,0x78,0x60,0x44,0xae,0xa8,0x6b,0xbc,0x6f,0x2f,0x64,0x28,0x7e,0xb8,0xb6,0x2e, + 0x6d,0xc2,0x60,0x52,0xae,0xab,0xbd,0xbd,0x5f,0x2f,0xa2,0x28,0x25,0xb8,0xb8,0x6e, + 0x6e,0x68,0x60,0x60,0xae,0xaf,0x6b,0xbe,0x4f,0x2f,0xae,0x28,0x2c,0xb8,0xba,0x4e, + 0x6e,0xb2,0x60,0x6e,0xae,0xb2,0xbd,0xbf,0x3f,0x30,0x38,0x28,0xa5,0xb8,0xbb,0xc0, + 0x6f,0x58,0x60,0x7c,0x57,0x37,0x71,0x30,0xb3,0x38,0x4c,0x28,0xaa,0xb8,0xbd,0x4e, + 0x6f,0xa2,0x60,0x26,0xae,0xb8,0xbd,0xc0,0xa1,0x30,0x68,0x28,0xb1,0xb8,0xbe,0xc0, + 0x70,0x38,0x60,0xa6,0xae,0xbc,0x6b,0xc1,0x6f,0x30,0x24,0x28,0xb8,0xb8,0xc0,0x2e, + 0x70,0x70,0x60,0xb4,0xae,0xbf,0xbd,0xc2,0x5f,0x30,0xb2,0x28,0xbf,0xb8,0xc2,0x6e, + 0x70,0xba,0x60,0xc2,0xae,0x31,0x6c,0x31,0x4f,0xa3,0x3c,0x29,0x34,0xb9,0x32,0x4e, + 0x71,0x60,0x61,0x3e,0xaf,0x34,0xbe,0x32,0x3f,0xa3,0x58,0x29,0x3b,0xb9,0x33,0xc0, + 0x71,0xaa,0x61,0x4c,0xaf,0x38,0x6c,0x32,0xc1,0xa3,0x74,0x29,0x42,0xb9,0x35,0x2e, + 0x72,0x50,0x61,0x5a,0xaf,0x3b,0xbe,0x33,0xb1,0xa3,0x30,0x29,0x49,0xb9,0x37,0x6e, + 0x72,0x28,0x61,0x68,0xaf,0x3f,0x6c,0x34,0x2f,0xa3,0xbe,0x29,0x50,0xb9,0x39,0x4e, + 0x73,0x40,0x61,0x76,0xaf,0x42,0xbe,0x35,0xa1,0xa4,0x48,0x29,0x57,0xb9,0x3a,0xc0, + 0x73,0x78,0x61,0x24,0xaf,0x46,0x6c,0x36,0x6f,0xa4,0x64,0x29,0x5e,0xb9,0x3c,0x2e, + 0x73,0xc2,0x61,0xa4,0xaf,0x49,0xbe,0x37,0x5f,0xa4,0xa2,0x29,0x65,0xb9,0x3e,0x6e, + 0x74,0x68,0x61,0xb2,0xaf,0x4d,0x6c,0x38,0x4f,0xa4,0xae,0x29,0x6c,0xb9,0x40,0x4e, + 0x74,0xb2,0x61,0xc0,0xaf,0x50,0xbe,0x39,0x3f,0xa5,0x38,0x29,0x73,0xb9,0x41,0xc0, + 0x7b,0x68,0xbb,0x37,0xc2,0x2a,0x6c,0x39,0x2f,0xa5,0x4c,0x29,0x78,0xb9,0x43,0x4e, + 0x75,0xa2,0x62,0x46,0xaf,0x56,0xbe,0x3a,0xa1,0xa5,0x68,0x29,0xa1,0xb9,0x44,0xc0, + 0x76,0x38,0x62,0x54,0xaf,0x5a,0x6c,0x3b,0x6f,0xa5,0x24,0x29,0x26,0xb9,0x46,0x2e, + 0x76,0x70,0x62,0x62,0xaf,0x5d,0xbe,0x3c,0x5f,0xa5,0xb2,0x29,0x2d,0xb9,0x48,0x6e, + 0x76,0xba,0x62,0x70,0xaf,0x61,0x6c,0x3d,0x4f,0xa6,0x3c,0x29,0xa6,0xb9,0x4a,0x4e, + 0x77,0x60,0x62,0x7e,0xaf,0x64,0xbe,0x3e,0x3f,0xa6,0x58,0x29,0xad,0xb9,0x4b,0xc0, + 0x77,0xaa,0x62,0x2c,0xaf,0x68,0x6c,0x3e,0xc1,0xa6,0x74,0x29,0xb4,0xb9,0x4d,0x2e, + 0x78,0x50,0x62,0xac,0xaf,0x6b,0xbe,0x3f,0xb1,0xa6,0x30,0x29,0xbb,0xb9,0x4f,0x6e, + 0x78,0x28,0x62,0xba,0xaf,0x6f,0x6c,0x40,0x2f,0xa6,0xbe,0x29,0xc2,0xb9,0x51,0x4e, + 0x79,0x40,0x63,0x36,0x57,0x37,0x71,0x30,0xb3,0x35,0x40,0x2a,0x35,0xb9,0x52,0x6e, + 0x79,0x68,0x63,0x40,0xaf,0x75,0x6c,0x42,0x4f,0xa7,0x5c,0x2a,0x3c,0xb9,0x54,0x4e, + 0x79,0xb2,0x63,0x4e,0xaf,0x78,0xbe,0x43,0x3f,0xa7,0x78,0x2a,0x43,0xb9,0x55,0xc0, + 0x7a,0x58,0x63,0x5c,0xaf,0x7c,0x6c,0x43,0xc1,0xa7,0xa6,0x2a,0x4a,0xb9,0x57,0x2e, + 0x7a,0x30,0x63,0x6a,0xaf,0xa1,0xbe,0x44,0xb1,0xa7,0xc2,0x2a,0x51,0xb9,0x59,0x6e, + 0x7b,0x48,0x63,0x78,0xaf,0x23,0x6c,0x45,0x2f,0xa8,0x4b,0x7e,0xaf,0x24,0xbe,0x46, + 0x3f,0xa8,0x58,0x2a,0x5b,0xb9,0x5b,0xc0,0x7b,0xaa,0x63,0x2c,0xaf,0x28,0x6c,0x46, + 0xc1,0xa8,0x74,0x2a,0x62,0xb9,0x5d,0x2e,0x7c,0x50,0x63,0xac,0xaf,0x2b,0xbe,0x47, + 0xb1,0xa8,0x30,0x2a,0x69,0xb9,0x5f,0x6e,0x7c,0x28,0x63,0xba,0xaf,0x2f,0x6c,0x48, + 0x2f,0xa8,0xbe,0x2a,0x70,0xb9,0x61,0x4e,0x7d,0x40,0x64,0x36,0xaf,0xa4,0xbe,0x49, + 0xa1,0xa9,0x48,0x2a,0x77,0xb9,0x62,0xc0,0x7d,0x78,0x64,0x44,0xaf,0xa8,0x6c,0x4a, + 0x6f,0xa9,0x64,0x2a,0x7e,0xb9,0x64,0x2e,0x7d,0xc2,0x64,0x52,0xaf,0xab,0xbe,0x4b, + 0x5f,0xa9,0xa2,0x2a,0x25,0xb9,0x66,0x6e,0x7e,0x68,0x64,0x60,0xaf,0xaf,0x6c,0x4c, + 0x4f,0xa9,0xae,0x2a,0x2c,0xb9,0x68,0x4e,0x7e,0xb2,0x64,0x6e,0xaf,0xb2,0xbe,0x4d, + 0x3b,0x68,0xbb,0x38,0xc2,0x31,0xbb,0x6e,0xa1,0x48,0x64,0x78,0xaf,0xb5,0x6c,0x4d, + 0x2f,0xaa,0x4c,0x2a,0xaa,0xb9,0x6b,0x4e,0xa1,0xa2,0x64,0x26,0xaf,0xb8,0xbe,0x4e, + 0xa1,0xaa,0x68,0x2a,0xb1,0xb9,0x6c,0xc0,0xa2,0x38,0x64,0xa6,0xaf,0xbc,0x6c,0x4f, + 0x6f,0xaa,0x24,0x2a,0xb8,0xb9,0x6e,0x2e,0xa2,0x70,0x64,0xb4,0xaf,0xbf,0xbe,0x50, + 0x5f,0xaa,0xb2,0x2a,0xbf,0xb9,0x70,0x6e,0xa2,0xba,0x64,0xc2,0xaf,0x31,0x6c,0x51, + 0x4f,0xab,0x3c,0x2b,0x34,0xb9,0x72,0x4e,0x21,0x60,0x65,0x3e,0xb0,0x34,0xbe,0x52, + 0x3f,0xab,0x58,0x2b,0x3b,0xb9,0x73,0xc0,0x21,0xaa,0x65,0x4c,0xb0,0x38,0x6c,0x52, + 0xc1,0xab,0x74,0x2b,0x42,0xb9,0x75,0x2e,0x22,0x50,0x65,0x5a,0xb0,0x3b,0xbe,0x53, + 0xb1,0xab,0x30,0x2b,0x49,0xb9,0x77,0x6e,0x22,0x28,0x65,0x68,0xb0,0x3f,0x6c,0x54, + 0x2f,0xab,0xbe,0x2b,0x50,0xb9,0xac,0x71,0x71,0x47,0x35,0x72,0xb0,0x41,0xbe,0x55, + 0x5f,0xac,0x40,0x2b,0x55,0xb9,0x7a,0x6e,0x23,0x68,0x65,0xa2,0xb0,0x45,0x6c,0x56, + 0x4f,0xac,0x5c,0x2b,0x5c,0xb9,0x7c,0x4e,0x23,0xb2,0x65,0x2e,0xb0,0x48,0xbe,0x57, + 0x3f,0xac,0x78,0x2b,0x63,0xb9,0x7d,0xc0,0x24,0x58,0x65,0xae,0xb0,0x4c,0x6c,0x57, + 0xc1,0xac,0xa6,0x2b,0x6a,0xb9,0xa1,0x2e,0x24,0x30,0x65,0xbc,0xb0,0x4f,0xbe,0x58, + 0xb1,0xac,0xc2,0x2b,0x71,0xb9,0x21,0x6e,0x25,0x48,0x66,0x38,0xb0,0x53,0x6c,0x59, + 0x2f,0xad,0x4c,0x2b,0x78,0xb9,0x23,0x4e,0x25,0xa2,0x66,0x46,0xb0,0x56,0xbe,0x5a, + 0xa1,0xad,0x68,0x2b,0xa1,0xb9,0x24,0xc0,0x26,0x38,0x66,0x54,0xb0,0x5a,0x6c,0x5b, + 0x6f,0xad,0x24,0x2b,0x26,0xb9,0x26,0x2e,0x26,0x70,0x66,0x62,0xb0,0x5d,0xbe,0x5c, + 0x5f,0xad,0xb2,0x2b,0x2d,0xb9,0x28,0x6e,0x26,0xba,0x66,0x70,0xb0,0x61,0x6c,0x5d, + 0x4f,0xae,0x3c,0x2b,0xa6,0xb9,0x2a,0x4e,0x27,0x60,0x66,0x7e,0xb0,0x64,0xbe,0x5e, + 0x3f,0xae,0x58,0x2b,0xad,0xb9,0x2b,0xc0,0x27,0xaa,0x66,0x2c,0xb0,0x68,0x6c,0x5e, + 0xc1,0xae,0x74,0x2b,0xb4,0xb9,0x2d,0x2e,0x28,0x50,0x66,0xac,0xb0,0x6b,0xbe,0x5f, + 0xb1,0xae,0x30,0x2b,0xbb,0xb9,0x2f,0x6e,0x28,0x28,0x66,0xba,0xb0,0x6f,0x6c,0x60, + 0x2b,0x61,0x65,0x36,0xc2,0x31,0x5a,0x2b,0x21,0x39,0x32,0xc0,0xb0,0x70,0xbe,0x61, + 0x3f,0xaf,0x38,0x2c,0x33,0xb9,0xa3,0xc0,0x29,0x58,0x67,0x3c,0xb0,0x74,0x6c,0x61, + 0xc1,0xaf,0x54,0x2c,0x3a,0xb9,0xa5,0x2e,0x29,0x30,0x67,0x4a,0xb0,0x77,0xbe,0x62, + 0xb1,0xaf,0x70,0x2c,0x41,0xb9,0xa7,0x6e,0x2a,0x48,0x67,0x58,0xb0,0x7b,0x6c,0x63, + 0x2f,0xaf,0x2c,0x2c,0x48,0xb9,0xa9,0x4e,0x2a,0xa2,0x67,0x66,0xb0,0x7e,0xbe,0x64, + 0xa1,0xaf,0xba,0x2c,0x4f,0xb9,0xaa,0xc0,0x2b,0x38,0x67,0x74,0xb0,0x22,0x6c,0x65, + 0x6f,0xb0,0x44,0x2c,0x56,0xb9,0xac,0x25,0xb1,0xb0,0x50,0x2c,0x59,0xb9,0xad,0x6e, + 0x2b,0x28,0x67,0x28,0xb0,0x27,0x6c,0x66,0x2f,0xb0,0x6c,0x2c,0x60,0xb9,0xaf,0x4e, + 0x2c,0x40,0x67,0xa8,0xb0,0x2a,0xbe,0x67,0xa1,0xb0,0x28,0x2c,0x67,0xb9,0xb0,0xc0, + 0x2c,0x78,0x67,0xb6,0xb0,0x2e,0x6c,0x68,0x6f,0xb0,0xb5,0x7d,0x3e,0x32,0x70,0xa3, + 0x3c,0xb2,0x67,0xc0,0xb0,0x30,0xbe,0x69,0x3f,0xb1,0x38,0x2c,0x73,0xb9,0xb3,0xc0, + 0x2d,0x58,0x68,0x3c,0xb0,0xa6,0x6c,0x69,0xc1,0xb1,0x54,0x2c,0x7a,0xb9,0xb5,0x2e, + 0x2d,0x30,0x68,0x4a,0xb0,0xa9,0xbe,0x6a,0xb1,0xb1,0x70,0x2c,0x21,0xb9,0xb7,0x6e, + 0x2e,0x48,0x68,0x58,0xb0,0xad,0x6c,0x6b,0x2f,0xb1,0x2c,0x2c,0x28,0xb9,0xb9,0x4e, + 0x2e,0xa2,0x68,0x66,0xb0,0xb0,0xbe,0x6c,0xa1,0xb1,0xba,0x2c,0x2f,0xb9,0xba,0xc0, + 0x2f,0x38,0x68,0x74,0xb0,0xb4,0x6c,0x6d,0x6f,0xb2,0x44,0x2c,0xa8,0xb9,0xbc,0x2e, + 0x2f,0x70,0x68,0x22,0xb0,0xb7,0xbe,0x6e,0x5f,0xb2,0x60,0x2c,0xaf,0xb9,0xbe,0x6e, + 0x2f,0xba,0x68,0x30,0xb0,0xbb,0x6c,0x6f,0x4f,0xb2,0x7c,0x2c,0xb6,0xb9,0xc0,0x4e, + 0x30,0x60,0x68,0xb0,0xb0,0xbe,0xbe,0x70,0x3f,0xb2,0xaa,0x2c,0xbd,0xb9,0xc1,0xc0, + 0x30,0xaa,0x68,0xbe,0xb0,0xc2,0x6c,0x70,0xc1,0xab,0x34,0x2d,0x32,0xba,0x31,0x2e, + 0xa3,0x50,0x69,0x3a,0xb1,0x33,0xbe,0x71,0xb1,0xb3,0x50,0x2d,0x39,0xba,0x33,0x6e, + 0xa3,0x28,0x69,0x48,0xb1,0x37,0x6c,0x72,0x2f,0xb3,0x6c,0x2d,0x40,0xba,0x35,0x4e, + 0xa4,0x40,0x69,0x56,0xb1,0x3a,0xbe,0x73,0xa1,0xb3,0x28,0x2d,0x47,0xba,0x36,0xc0, + 0xa4,0x78,0x69,0x64,0xb1,0x3e,0x5a,0x72,0x21,0x48,0xbf,0xbc,0x57,0xad,0x71,0x51, + 0x32,0x30,0x69,0x6a,0xb1,0x3f,0xbe,0x74,0xb1,0xb3,0xc2,0x2d,0x51,0xba,0x39,0x6e, + 0xa5,0x48,0x69,0x78,0xb1,0x43,0x6c,0x75,0x2f,0xb4,0x4c,0x2d,0x58,0xba,0x3b,0x4e, + 0xa5,0xa2,0x69,0x26,0xb1,0x46,0xbe,0x76,0xa1,0xb4,0x68,0x2d,0x5f,0xba,0x3c,0xc0, + 0xa6,0x38,0x69,0xa6,0xb1,0x4a,0x6c,0x77,0x6f,0xb4,0x24,0x2d,0x66,0xba,0x3e,0x2e, + 0xa6,0x70,0x69,0xb4,0xb1,0x4d,0xbe,0x78,0x5f,0xb4,0xb2,0x2d,0x6d,0xba,0x40,0x6e, + 0xa6,0xba,0x69,0xc2,0xb1,0x51,0x6c,0x79,0x4f,0xb5,0x3c,0x2d,0x74,0xba,0x42,0x4e, + 0xa7,0x60,0x6a,0x3e,0xb1,0x54,0xbe,0x7a,0x3f,0xb5,0x58,0x2d,0x7b,0xba,0x43,0xc0, + 0xa7,0xaa,0x6a,0x4c,0xb1,0x58,0x6c,0x7a,0xc1,0xb5,0x74,0x2d,0x22,0xba,0x45,0x2e, + 0xa8,0x50,0x6a,0x5a,0xb1,0x5b,0xbe,0x7b,0xb1,0xb5,0x30,0x2d,0x29,0xba,0x47,0x65, + 0xa3,0xab,0x3c,0xc1,0x31,0x5e,0x6c,0x7c,0x6f,0xb5,0xb6,0x2d,0x2e,0xba,0x48,0x2e, + 0xa8,0xc2,0x6a,0x72,0xb1,0x61,0xbe,0x7d,0x5f,0xb6,0x40,0x2d,0xa7,0xba,0x4a,0x6e, + 0xa9,0x68,0x6a,0xa2,0xb1,0x65,0x6c,0x7e,0x4f,0xb6,0x5c,0x2d,0xae,0xba,0x4c,0x4e, + 0xa9,0xb2,0x6a,0x2e,0xb1,0x68,0xbe,0xa1,0x3f,0xb6,0x78,0x2d,0xb5,0xba,0x4d,0xc0, + 0xaa,0x58,0x6a,0xae,0xb1,0x6c,0x6c,0xa1,0xc1,0xb6,0xa6,0x2d,0xbc,0xba,0x4f,0x2e, + 0xaa,0x30,0x6a,0xbc,0xb1,0x6f,0xbe,0xa2,0xb1,0xb6,0xc2,0x2e,0x31,0xba,0x51,0x6e, + 0xab,0x48,0x6b,0x38,0xb1,0x73,0x6c,0x21,0x2f,0xb7,0x4c,0x2e,0x38,0xba,0x53,0x4e, + 0xab,0xa2,0x6b,0x46,0xb1,0x76,0xbe,0x22,0xa1,0xb7,0x68,0x2e,0x3f,0xba,0x54,0xc0, + 0xac,0x38,0x6b,0x54,0xb1,0x7a,0x6c,0x23,0x6f,0xb7,0x24,0x2e,0x46,0xba,0x56,0x2e, + 0xac,0x70,0x6b,0x62,0xb1,0x7d,0xbe,0x24,0x5f,0xb7,0xb2,0x2e,0x4d,0xba,0x58,0x6e, + 0xac,0xba,0x6b,0x70,0xb1,0x21,0x6c,0x25,0x4f,0xb8,0x3c,0x2e,0x54,0xba,0x5a,0x4e, + 0xad,0x60,0x6b,0x7e,0x57,0xba,0x5a,0xc0,0xad,0x78,0x6b,0x24,0xb1,0x26,0x6c,0x26, + 0x6f,0xb8,0x64,0x2e,0x5e,0xba,0x5c,0x2e,0xad,0xc2,0x6b,0xa4,0xb1,0x29,0xbe,0x27, + 0x5f,0xb8,0xa2,0x2e,0x65,0xba,0x5e,0x6e,0xae,0x68,0x6b,0xb2,0x57,0xc2,0x31,0xc2, + 0xb3,0x39,0x31,0xa3,0x3d,0xc2,0x71,0x57,0x31,0x42,0x71,0x4e,0xc2,0x44,0x79,0x34, + 0x70,0xbb,0xae,0xc1,0x50,0xc2,0x71,0x70,0xb6,0x38,0xbb,0x7d,0x51,0x43,0x79,0x3b, + 0x40,0xb5,0x78,0xbf,0x23,0xc2,0x5e,0xa3,0x36,0x58,0xbc,0x5c,0xc1,0x5c,0x70,0x7b, + 0xc2,0xb5,0xb6,0xc1,0x44,0x41,0x3d,0x70,0xa4,0x52,0x31,0xaa,0xc1,0x6b,0x3a,0x57, + 0xa2,0xb5,0x70,0xbf,0x39,0xc2,0x73,0x70,0xb6,0x60,0xbb,0xb0,0xc1,0x5e,0xc2,0xae, + 0x30,0xbc,0x30,0xbf,0x69,0xc2,0x36,0x37,0x32,0x5a,0x71,0xb6,0xc1,0x4e,0x70,0x73, + 0x34,0x31,0x75,0xa3,0x6c,0xc2,0x40,0x50,0xa3,0x22,0x71,0x47,0x61,0x4f,0xc2,0x78, + 0xb2,0xb3,0x51,0xa3,0x3a,0x49,0x40,0xc2,0xa7,0x38,0xbb,0x49,0x61,0x37,0x7d,0x39, + 0x50,0xb5,0x3c,0xbf,0x3f,0x49,0x34,0xa9,0x35,0x50,0xbc,0x3a,0xc1,0x5d,0xc2,0x7c, + 0x60,0xb8,0x49,0x39,0x33,0xa3,0x47,0xc2,0xa8,0xaa,0xbc,0x6c,0xc1,0x60,0x70,0x74, + 0x33,0x31,0xa7,0x71,0x4d,0x41,0x38,0x55,0x32,0xac,0x71,0x6d,0x61,0x4b,0x79,0x37, + 0x53,0x31,0x40,0xc1,0x37,0xc2,0x73,0x30,0xb6,0x2a,0x33,0xa1,0x31,0x32,0x7d,0x4a, + 0x63,0x5f,0x6d,0x7c,0x64,0x43,0xaf,0x75,0x2d,0xb4,0x45,0x3d,0x57,0x33,0x7a,0x29, + 0xb5,0x5f,0x49,0x7c,0x52,0x43,0xab,0x35,0x2c,0xac,0x47,0xbb,0x56,0x22,0x7d,0x71, + 0x23,0x3e,0x6d,0x32,0xa6,0xc2,0xa2,0xc2,0xbf,0xab,0x3a,0x44,0xc1,0x56,0x70,0x7a, + 0x30,0xb5,0x6c,0xbf,0x7c,0xc2,0x44,0x50,0xa8,0xc2,0xbc,0x72,0xc1,0x61,0xc2,0x72, + 0x70,0xbb,0x68,0xc2,0x28,0x31,0x6e,0xa3,0x3c,0x39,0x31,0x65,0x53,0x3f,0x70,0xa6, + 0xb2,0xbb,0xba,0xc1,0xa9,0x42,0x4a,0xa7,0x57,0x32,0x39,0x6d,0x53,0x5a,0x39,0x7d, + 0x43,0x44,0x3c,0xbf,0xa6,0xc2,0x4a,0x50,0xa9,0x60,0xbc,0x7e,0xc1,0x60,0x70,0xa8, + 0x43,0x42,0x59,0x76,0x56,0x42,0x39,0x35,0x52,0xbc,0x3b,0xc1,0x53,0xac,0x3d,0xbd, + 0x44,0x4a,0x5d,0x75,0x5f,0x42,0x3e,0x55,0x54,0x52,0x3a,0x31,0x57,0x52,0x3a,0x23, + 0x23,0x45,0xa7,0x76,0x42,0x41,0xa7,0xa7,0x4a,0x32,0x37,0x55,0x52,0x7c,0x39,0x63, + 0xb5,0x3d,0xa7,0x74,0x49,0x41,0x7a,0x55,0x53,0x4a,0x39,0x50,0xc2,0x24,0x70,0x71, + 0x68,0xc1,0x64,0xc1,0x46,0x42,0x4b,0x50,0xa3,0x58,0xc2,0x7c,0xc2,0x3a,0x3d,0x4d, + 0x40,0xc2,0x38,0xc1,0x36,0xc2,0x79,0x50,0xb3,0x4a,0x35,0x43,0x52,0x65,0xc2,0x7e, + 0x60,0xb6,0x60,0xc0,0x26,0x4a,0xaa,0x37,0x6a,0xac,0xa1,0x6d,0x64,0xaa,0x3d,0xb7, + 0x44,0x4d,0x69,0xaa,0x40,0x4a,0xb4,0x37,0x6c,0x31,0x32,0x63,0x22,0x5e,0x25,0x5c, + 0xa8,0x3b,0xb8,0x53,0xa4,0x59,0x29,0xad,0x4f,0x6b,0x28,0x23,0xb7,0xaa,0x50,0x41, + 0x43,0x5d,0x39,0x7c,0x34,0x43,0xa4,0x35,0x29,0x5a,0x47,0x3d,0x56,0x74,0x7a,0x62, + 0x33,0x5d,0x6d,0x7c,0x3f,0x43,0xa6,0x55,0x29,0xa4,0x47,0x47,0x56,0x76,0x3a,0x62, + 0x43,0x5a,0xb3,0x7b,0x65,0x43,0x7c,0x35,0x23,0x52,0x45,0x69,0x56,0x7b,0x3a,0x51, + 0x33,0x59,0x39,0x7c,0x46,0x43,0x74,0x35,0x22,0x32,0x45,0x59,0x56,0x3d,0x3a,0x5e, + 0x2b,0x61,0x65,0x36,0xbf,0xbf,0x2c,0x75,0x28,0x32,0x46,0x2f,0x56,0x59,0x3a,0x5c, + 0xa5,0x5c,0x59,0x7b,0xa4,0x43,0xbb,0x75,0x2f,0x4a,0x48,0x7b,0x56,0xb5,0x3a,0x5f, + 0x43,0x5c,0x79,0x7b,0xb6,0x43,0x75,0x50,0xb4,0x40,0xbf,0x56,0xc2,0x3a,0xc2,0xa5, + 0xa2,0xbb,0x28,0xc1,0x47,0xc2,0x76,0xc2,0xb4,0x78,0xbf,0x64,0xc2,0x61,0x39,0x5d, + 0x43,0x3c,0x39,0x73,0xa6,0x41,0x2a,0x35,0x47,0x5a,0x36,0x7d,0x52,0x64,0x79,0x5e, + 0x33,0x3c,0x55,0x73,0x52,0x49,0x39,0x77,0x33,0x4a,0x71,0x79,0x61,0x43,0x7d,0x35, + 0xa6,0x32,0x4d,0xa3,0x59,0x49,0x3b,0x57,0x35,0x3b,0x7e,0x39,0x24,0x53,0x25,0xa7, + 0x50,0xbc,0x3c,0xc1,0x54,0xc2,0x7a,0x50,0xb5,0x60,0xbf,0x7e,0xc2,0x44,0xc2,0xa8, + 0x40,0xbc,0x58,0xc1,0x5b,0xc2,0x7b,0xc2,0xb5,0xaa,0xbf,0x2c,0xc2,0x48,0x70,0xa8, + 0xc2,0xbc,0x74,0xc1,0x62,0xc2,0x7d,0x30,0xb6,0x50,0xbf,0xac,0xc2,0x4b,0xc2,0xa9, + 0xb2,0xbc,0x30,0xc1,0x69,0xc2,0xa1,0x70,0xb6,0x28,0xc0,0x34,0xc2,0x52,0x70,0xab, + 0x70,0xbd,0x44,0xc1,0x76,0xc2,0x22,0x30,0xb7,0x70,0xc0,0x42,0xc2,0x55,0xc2,0xac, + 0x60,0xbd,0x60,0xc1,0x7d,0xc2,0x24,0x70,0xb7,0xba,0xc0,0x50,0xc2,0x59,0x70,0xad, + 0x50,0xbd,0x7c,0xc1,0x24,0xc2,0x26,0x50,0xb8,0x60,0xc0,0x5e,0x57,0xc2,0x31,0xc2, + 0xb3,0x3b,0x30,0xc1,0x29,0xc2,0x27,0x70,0xb8,0x28,0xc1,0x53,0x34,0x7a,0x31,0xb5, + 0x61,0x4d,0x21,0x38,0x46,0x32,0xa8,0x71,0x6a,0x69,0x3f,0x61,0x34,0x7d,0x71,0xb6, + 0x51,0x4d,0xaf,0x38,0x4d,0x32,0xaa,0x51,0x6a,0xb3,0x3f,0x6f,0x34,0x21,0x31,0xb7, + 0x41,0x4e,0x3d,0x38,0x55,0x32,0xac,0x51,0x6b,0x66,0x49,0x38,0x58,0x32,0xad,0x31, + 0x6b,0x79,0x3f,0xa5,0x34,0x2a,0x31,0xb9,0x61,0x4e,0x21,0x38,0x66,0x32,0xb0,0x71, + 0x6c,0x69,0x3f,0xb3,0x34,0x2d,0x71,0xba,0x51,0x4e,0xaf,0x38,0x6d,0x32,0xb2,0x51, + 0x6c,0xb3,0x3f,0xc1,0x34,0xa3,0x31,0xbb,0x41,0x4f,0x3d,0x38,0x75,0x32,0xb4,0x51, + 0x6d,0x61,0x40,0x3f,0x34,0xa7,0x31,0xbc,0x41,0x49,0x45,0xa5,0x37,0x49,0x72,0xa9, + 0x41,0x72,0x75,0x43,0x62,0x36,0x3d,0x52,0x64,0x39,0x61,0xa5,0x3e,0x49,0x74,0x77, + 0x41,0xc0,0x49,0x4b,0x33,0xc1,0x69,0xa5,0x34,0x39,0x75,0xa5,0x43,0x49,0x75,0xa9, + 0x42,0x52,0x75,0x5b,0x62,0x3c,0x3d,0x53,0xb6,0x39,0xa3,0xa5,0x4a,0x49,0x77,0x77, + 0x42,0x2a,0x75,0x69,0x62,0x3f,0x7d,0x54,0xa6,0x39,0xbf,0xa5,0x51,0x49,0x79,0x57, + 0x43,0x42,0x75,0x77,0x62,0x43,0x3d,0x55,0x24,0x3a,0x49,0xa5,0x58,0x49,0x7b,0x37, + 0x43,0x7a,0x78,0x63,0x33,0xa7,0x71,0x2a,0x51,0x47,0x4d,0x36,0x7c,0x24,0x70,0xa3, + 0x48,0xb5,0x39,0x34,0x5d,0x24,0x66,0xa3,0x2d,0x41,0x49,0x33,0xa1,0x5d,0x24,0x71, + 0x45,0xb3,0x3e,0x4d,0x74,0x58,0x48,0x5a,0xab,0x63,0x6b,0x49,0xa1,0x2e,0x44,0x78, + 0xb8,0x3c,0x46,0x53,0xae,0x59,0xbb,0x3b,0x41,0x33,0x79,0x33,0x23,0x7e,0x25,0x73, + 0x26,0x4b,0x36,0x57,0x2d,0x5a,0xb5,0x3b,0x61,0x7b,0x69,0x47,0xa1,0x35,0x44,0x72, + 0x55,0xb4,0x5e,0x4d,0x69,0x58,0x69,0x5b,0x45,0x5b,0x6a,0x41,0xa1,0x60,0x24,0x7c, + 0xa7,0xb7,0x6a,0x4e,0x52,0x58,0x41,0x3b,0x41,0x4b,0x7c,0xb7,0x23,0x52,0x25,0xbc, + 0x46,0x50,0x3e,0x57,0x50,0x5c,0xbd,0xae,0x32,0x5b,0xa7,0xa1,0x2a,0x6a,0x27,0x5b, + 0x36,0x2b,0x76,0x67,0x24,0x5e,0xc1,0x3c,0x61,0xbd,0xb3,0x75,0x2d,0x4d,0x48,0x3f, + 0x46,0xa9,0xb8,0x6c,0xa8,0x5f,0xbf,0x5c,0x30,0x43,0xba,0xa9,0x2e,0xc2,0x48,0x5f, + 0x56,0xba,0xbc,0x6d,0x3c,0x60,0x75,0xae,0xb7,0xb0,0x49,0x4b,0x33,0xc1,0x51,0xa5, + 0x45,0xb3,0x72,0x4d,0x3e,0x58,0x3c,0x5a,0xa6,0x33,0x69,0xb5,0xa1,0x56,0x24,0x78, + 0x46,0xa7,0x52,0x4e,0x42,0x58,0x56,0x5a,0xac,0x43,0x6b,0x59,0xa1,0x22,0x44,0x29, + 0x45,0xb9,0x32,0x4e,0x74,0x58,0x62,0x7a,0xaf,0x6b,0x6c,0x4b,0xa1,0xa8,0x44,0x2a, + 0x65,0xb9,0x42,0x4d,0x74,0x59,0x21,0x5b,0x47,0x6b,0x76,0x2b,0x22,0x68,0x45,0x5e, + 0x76,0x3d,0x2e,0x54,0xb9,0x59,0x72,0x7b,0x51,0x6b,0x79,0x41,0x23,0xc0,0x25,0x30, + 0xa8,0x48,0xc0,0x55,0x47,0x5a,0xa1,0x5b,0x65,0x73,0x7e,0x3f,0x24,0x53,0x25,0xae, + 0xa8,0x4d,0x42,0x58,0x7c,0x5a,0xb5,0x7b,0x6d,0xad,0xa2,0x29,0x29,0x45,0x27,0x56, + 0x66,0x7a,0x5a,0x63,0x5e,0x5d,0x26,0x3c,0x62,0x3b,0xb3,0x79,0x2d,0x4e,0x48,0x3e, + 0xb8,0xaa,0x22,0x6b,0xbe,0x60,0x70,0xae,0xa4,0x53,0xbf,0x5b,0x30,0xa4,0x28,0xa4, + 0x37,0x42,0x2a,0x75,0x7c,0x62,0x44,0x7d,0x53,0xbe,0x47,0x3f,0xa8,0x7c,0x2a,0x65, + 0x77,0x5e,0xa8,0x7c,0xa8,0x63,0xbf,0x3d,0xa3,0x74,0x4d,0x21,0xaa,0x41,0x4b,0xaf, + 0x57,0x2c,0xa8,0x28,0x7c,0x66,0xb8,0x3e,0x6e,0x2c,0x5d,0x4f,0xaf,0x4b,0x4c,0x3e, + 0x68,0x32,0x5a,0xa7,0x67,0x6a,0x3f,0xb1,0x55,0x6c,0x7a,0x63,0xb5,0x5e,0x2d,0x26, + 0x78,0x45,0x5e,0xa9,0x4a,0x24,0x70,0x71,0x70,0xa8,0x61,0x5d,0xa1,0x3b,0x24,0x73, + 0x75,0xb3,0xa4,0x4d,0x6c,0x58,0x44,0x5a,0xa7,0xbd,0x6a,0x4d,0xa1,0xb5,0x24,0x2c, + 0x35,0xb9,0x22,0x4e,0x26,0x58,0x66,0x7a,0xb0,0x6b,0x6c,0x77,0xa1,0xb5,0x44,0x2c, + 0x45,0xb9,0xbc,0x4d,0x76,0x59,0x22,0x3b,0x49,0x7b,0x77,0x45,0x22,0x27,0x45,0x70, + 0x46,0x40,0xac,0x54,0xbb,0x59,0x73,0x7b,0x5b,0x33,0x7b,0x6f,0x23,0x33,0x25,0xa3, + 0xa8,0x49,0x2e,0x57,0x4e,0x5a,0xba,0xac,0xa7,0x23,0x7e,0x43,0x24,0x61,0x25,0xaf, + 0x36,0x4c,0x6e,0x57,0xb1,0x5a,0xb1,0xad,0x6f,0xbd,0xa2,0x79,0x24,0xbc,0x25,0xc0, + 0x76,0x50,0x6a,0x58,0xac,0x5a,0xbd,0x3b,0x70,0xa5,0xa2,0xb3,0x24,0xbd,0x25,0xc0, + 0x66,0x50,0x4a,0x58,0xad,0x5a,0xbf,0x7b,0x70,0x3b,0xa2,0xa3,0x24,0xb5,0x25,0xc0, + 0x26,0x50,0xb0,0x58,0x2c,0x5c,0x67,0x7b,0xa4,0x66,0x49,0x4b,0x33,0xc1,0x56,0xa8, + 0xa8,0x7a,0x76,0x63,0xb7,0x5d,0x2e,0x7c,0x46,0x5b,0xb1,0x37,0x2c,0x4f,0x48,0x4e, + 0x36,0xb2,0x4e,0x6c,0xa9,0x5f,0x71,0x7c,0xa3,0x4b,0xbc,0xa9,0x2f,0x6f,0x48,0x71, + 0x46,0xbb,0xa4,0x6f,0x48,0x60,0xb4,0x5c,0xb3,0x24,0x3a,0x57,0xa5,0x5b,0x49,0x7b, + 0x57,0x43,0x76,0x76,0x56,0x63,0xbc,0x7d,0x23,0xb6,0x4d,0x29,0xaa,0x46,0x4a,0xa8, + 0x67,0x6a,0x66,0xa1,0xa6,0x66,0xb6,0x5e,0x62,0x3c,0x61,0x51,0xaf,0x4d,0x4c,0x39, + 0x47,0xa5,0x32,0x29,0x6f,0x67,0x5c,0xb1,0x59,0x54,0xa1,0x43,0xb6,0xb1,0x4e,0x4d, + 0xaa,0x51,0xa4,0xad,0x50,0x6b,0x7b,0x3f,0x23,0x7c,0x25,0xa3,0xb8,0x49,0x2e,0x57, + 0x58,0x5a,0x7e,0xae,0x3c,0x6b,0x30,0x5f,0xad,0xb6,0x2b,0xc1,0xb9,0xba,0x4e,0x2c, + 0x68,0x70,0x3a,0xb2,0xb6,0x6c,0xa1,0xa2,0x4c,0xb6,0xa8,0xab,0xbd,0xa8,0x2f,0x74, + 0xa7,0xb3,0xc0,0x4d,0x23,0x58,0x45,0xac,0xa9,0x7b,0x6b,0x63,0xa1,0x23,0x44,0x25, + 0xad,0x63,0x6b,0x7b,0xa1,0xc2,0x24,0x72,0x45,0xbb,0xa8,0x4f,0x3b,0x58,0x76,0x5a, + 0xb3,0xad,0x6d,0x51,0xa2,0x39,0x24,0xa4,0xb7,0xc2,0x7a,0x4e,0xb9,0x58,0x6f,0xac, + 0xb2,0x33,0x6c,0xa9,0xa1,0xc1,0x24,0x71,0x45,0xbb,0x5e,0x4f,0x7a,0x59,0x22,0xad, + 0x45,0x63,0x76,0x41,0x22,0x65,0x5a,0x30,0xa3,0x50,0xb5,0x21,0xb4,0x59,0xa6,0x5b, + 0x4c,0x33,0x75,0x5f,0x23,0x39,0x25,0x73,0x56,0x41,0x6a,0x55,0x47,0x5a,0x59,0xad, + 0x51,0x73,0x7d,0x73,0x24,0x41,0x45,0xb1,0x36,0x4c,0x76,0x57,0x3a,0x5b,0x34,0xad, + 0x71,0xa5,0x21,0x45,0x25,0x39,0x46,0x31,0x46,0x51,0x5e,0x59,0x35,0x5b,0x35,0x5b, + 0x71,0xad,0x21,0x41,0x25,0x32,0x26,0x32,0xa8,0x51,0x4a,0x59,0x43,0x5b,0x69,0x3b, + 0xb0,0xb5,0x2c,0x6b,0x27,0x4a,0x26,0xa9,0x36,0x6a,0x52,0x5f,0x5e,0x5c,0x7c,0x3b, + 0xb5,0xbd,0x2d,0x23,0x28,0x3d,0x27,0x54,0x56,0x7a,0x2e,0x63,0x69,0x5d,0xa4,0x3c, + 0x48,0x73,0xa9,0x37,0x2a,0x6f,0x27,0x60,0x46,0x7d,0x3a,0x64,0x32,0x5d,0x26,0xae, + 0x66,0x73,0xb1,0x3f,0x2c,0x75,0x47,0xb3,0x26,0x2d,0x56,0x68,0xbd,0x5e,0x76,0x7c, + 0x78,0x7b,0xb6,0x6d,0x2e,0x34,0x48,0xa1,0xa8,0xb6,0x23,0x7d,0x3e,0x32,0x70,0x42, + 0xb3,0xbd,0xbf,0x67,0x30,0xaf,0x28,0xbd,0xa8,0xbb,0x6a,0x75,0x3d,0x62,0x34,0x5d, + 0x52,0x34,0x3a,0x77,0xa5,0x5e,0x29,0x7c,0x37,0x42,0x2a,0x7c,0xac,0x63,0xbd,0x3d, + 0x2f,0xa6,0x48,0x2b,0xa8,0xbc,0x4a,0x2f,0x67,0x61,0x56,0xa1,0x6e,0x64,0x7e,0x3d, + 0xb6,0x3c,0x4d,0xad,0xaa,0x41,0x2b,0xaf,0x77,0x2c,0xb0,0x27,0x47,0x67,0x48,0x5e, + 0x76,0x6c,0x62,0x63,0xaf,0x60,0x2c,0x3d,0x37,0xa5,0x72,0x29,0x26,0x67,0x49,0x5e, + 0x76,0x2c,0x62,0x4b,0xaf,0x58,0x4c,0x3f,0x38,0x33,0xc0,0xa7,0x2e,0x6a,0x50,0xa1, + 0xb2,0x7c,0xac,0xa9,0xbf,0xbf,0x50,0x37,0xaa,0xbf,0x5a,0xc2,0x6e,0x70,0x71,0x61, + 0x31,0x4d,0x31,0x4a,0x31,0x3a,0x51,0x37,0x69,0x34,0xc1,0x32,0x3a,0x71,0x53,0xb3, + 0x39,0xa7,0x34,0x78,0x32,0xb8,0x51,0x6f,0x69,0x40,0xb5,0x33,0x3d,0x72,0x37,0xb3, + 0x52,0xbf,0x3a,0x2e,0x33,0x6a,0x51,0xa2,0xab,0x44,0x5f,0x3d,0x71,0x75,0x44,0x42, + 0x37,0x4d,0x52,0xc2,0x3a,0x41,0xa8,0x77,0x55,0xb8,0x52,0x4d,0x7e,0x58,0x24,0xac, + 0xb7,0x6b,0x6e,0x5f,0xa2,0x60,0x44,0xa9,0x75,0xbd,0xb0,0x4f,0x26,0x58,0x7d,0x3a, + 0xb8,0x33,0x6e,0x53,0xa2,0x4f,0x24,0xaa,0x55,0xbc,0xa4,0x4f,0x74,0x58,0x26,0x3a, + 0xb6,0xa5,0x6e,0x3d,0xa2,0x62,0xac,0x30,0xa3,0x50,0xb5,0x2d,0x2d,0x58,0x29,0x3a, + 0xb5,0xbd,0x6e,0x4d,0xa2,0x4c,0x44,0xae,0x45,0xbd,0xb8,0x4f,0x79,0x58,0x27,0x7a, + 0xb7,0xa5,0x76,0x47,0x22,0x57,0x25,0x5f,0x26,0x3e,0x2a,0x54,0x68,0x59,0x7a,0x5b, + 0x53,0x53,0x79,0x23,0x23,0x46,0x45,0x76,0x36,0x46,0x5e,0x56,0x5a,0x5a,0x5b,0x7b, + 0x5b,0xa5,0x79,0x77,0x24,0x6a,0x25,0xb1,0x26,0x49,0xb8,0x59,0x5e,0x5b,0x38,0x7b, + 0x74,0xb5,0x21,0x7d,0x25,0x58,0x46,0x35,0xb8,0x53,0x4a,0x59,0x74,0x5b,0x3d,0xad, + 0x75,0x73,0x22,0x35,0x25,0x3e,0x26,0x36,0x46,0x53,0x5a,0x59,0x6a,0x5b,0x3f,0xad, + 0x74,0x73,0x21,0x2d,0x25,0x4b,0x26,0x37,0xa8,0x52,0x32,0x59,0x6d,0x5b,0x41,0x3b, + 0x74,0x3b,0x21,0x27,0x25,0x40,0x26,0x36,0x76,0x58,0x5a,0x5e,0xb3,0x5c,0x6a,0x3b, + 0xb1,0x2b,0x2a,0x45,0x28,0x59,0x26,0xab,0x36,0x6b,0x67,0x7d,0x3e,0x32,0x70,0x44, + 0xb7,0x6b,0x2e,0x4d,0x28,0x50,0x46,0xad,0x36,0x6b,0x6e,0x5f,0x6c,0x5c,0xbe,0xae, + 0x34,0xb5,0xa9,0x6b,0x2a,0x7a,0x47,0x66,0x36,0x7d,0xbc,0x64,0x54,0x5d,0xa9,0x5c, + 0x4a,0x63,0xa9,0x4b,0x2a,0x23,0x47,0x63,0x66,0x7d,0x5a,0x64,0x56,0x5d,0x28,0x5c, + 0x66,0xa5,0xb0,0x65,0x2c,0x5e,0x27,0xb4,0x76,0x2d,0x5e,0x68,0x40,0x5e,0x7c,0x3c, + 0x75,0x33,0xb4,0x33,0x2d,0x50,0x28,0x38,0xa8,0xa7,0x72,0x6a,0x42,0x5f,0x56,0x3c, + 0x79,0xa5,0xb6,0x27,0x2e,0x37,0x48,0x22,0xb8,0xb7,0x4e,0x6e,0x3b,0x60,0x6e,0xae, + 0xa3,0x53,0xbf,0x6f,0x30,0x63,0x48,0xaf,0x56,0xbe,0x2e,0x6f,0xbc,0x60,0xb9,0x3c, + 0xbf,0xa5,0xc2,0x5f,0x30,0xa9,0x28,0xc1,0x46,0xc2,0x5e,0x70,0xbb,0x60,0xbd,0x7c, + 0xb4,0x44,0x39,0x53,0xa5,0x73,0x49,0x23,0xb9,0x45,0x2a,0x76,0x31,0x62,0x4e,0x7d, + 0x59,0x7c,0x3a,0x2b,0xa5,0x76,0x49,0xa2,0x77,0x44,0xbc,0x75,0xbc,0x62,0x4d,0xaf, + 0x5a,0x44,0x3a,0x2f,0xa5,0x7d,0x49,0x7e,0xa9,0x45,0x26,0x76,0x44,0x62,0x55,0x5d, + 0x59,0x64,0x39,0xb5,0xa8,0x4e,0x2a,0x58,0x37,0x60,0x76,0x7c,0xb7,0x64,0x48,0xaf, + 0xb7,0xb6,0x4e,0x4f,0xaa,0x59,0x4a,0xad,0x47,0x6b,0xb4,0xa1,0x27,0x64,0x28,0x7d, + 0xb7,0x7c,0x4e,0x3d,0xaa,0x61,0x5a,0x30,0xa3,0x50,0xb5,0x31,0x24,0x64,0x26,0xaf, + 0xb9,0x5c,0x60,0x4f,0xae,0x52,0x4c,0x3c,0xa9,0xa7,0xa8,0x2a,0x32,0x67,0x53,0x3e, + 0x79,0x7c,0x63,0x3b,0xaf,0x7e,0x2c,0x3e,0x57,0xa6,0xac,0x2a,0x41,0x67,0x4d,0x3e, + 0x79,0xa6,0x62,0x21,0xaf,0x7c,0x4c,0x43,0x57,0xa6,0xb8,0x2a,0x34,0x67,0x4d,0x7e, + 0x78,0xb6,0x62,0xab,0xaf,0x74,0x4c,0x3f,0xa9,0xa7,0x66,0x2a,0x45,0x67,0x57,0x3e, + 0x79,0x44,0x62,0xaf,0xb3,0x6f,0x4d,0x40,0x28,0x34,0xa4,0xa3,0xa5,0x6a,0x49,0x5f, + 0x57,0x34,0x7c,0x39,0xb5,0xa4,0x4d,0x23,0xaa,0x4a,0x62,0xad,0x5c,0x6b,0x7e,0xb1, + 0x24,0x74,0x27,0x35,0xb9,0xba,0x2e,0x2d,0x68,0x6f,0x36,0xb6,0x71,0x6d,0xb2,0xb2, + 0x48,0x64,0xae,0xb9,0xbf,0x5b,0x30,0xb5,0xab,0x35,0xa1,0x32,0x4e,0x71,0x57,0x41, + 0x3a,0x2d,0x33,0x66,0x31,0x2a,0x51,0x3e,0xbb,0x45,0x7b,0x36,0x57,0x33,0x31,0x29, + 0x49,0x2d,0x3b,0x4c,0x33,0x76,0xa5,0x6b,0x59,0x79,0x33,0x45,0x68,0x77,0x42,0x22, + 0x76,0x5d,0x63,0x6c,0x3d,0x63,0x54,0x5f,0x39,0xb0,0xa1,0x4c,0x5c,0x78,0x63,0x22, + 0xac,0x2d,0x6f,0xa4,0x40,0xa4,0x54,0xbb,0xab,0xc1,0x47,0x50,0x75,0x78,0xbb,0x5c, + 0x2a,0x3d,0x73,0x76,0x41,0x26,0x55,0x45,0xad,0x65,0x73,0x78,0x41,0x55,0xa7,0x69, + 0xac,0x3f,0x63,0x53,0x63,0x7c,0x3c,0x23,0xa6,0x3d,0x29,0x26,0x47,0x47,0x56,0x75, + 0xa7,0xb5,0x2a,0x4d,0xb6,0x58,0x53,0xac,0xac,0x2b,0x6b,0x6d,0xa1,0x26,0x24,0x26, + 0x75,0xb6,0x6e,0x50,0x4e,0x58,0xa6,0x5a,0xba,0x4b,0x6e,0xc1,0xa2,0x67,0x44,0xb6, + 0x65,0xbf,0x5e,0x50,0x37,0x58,0xa3,0xac,0xba,0x33,0x6e,0xad,0xa2,0x75,0x44,0xb0, + 0x45,0xbe,0xb0,0x50,0x47,0x58,0x30,0x7a,0xbb,0xbd,0x6f,0x53,0xa2,0x6e,0x44,0xad, + 0x76,0x3b,0x7a,0x53,0x26,0x59,0x2b,0x5b,0x48,0x6b,0x76,0xaf,0x22,0x6d,0x45,0x68, + 0x26,0x40,0xb8,0x53,0x6c,0x5a,0x3f,0x3b,0x54,0x6b,0x79,0xb7,0x23,0x49,0x45,0x76, + 0xa8,0x42,0x2a,0x55,0x72,0x5a,0x60,0x7b,0x5c,0x2b,0x7a,0x55,0x24,0x5b,0x45,0xad, + 0x66,0x4b,0x76,0x57,0xa9,0x5a,0x2e,0xad,0x68,0x73,0x7e,0xb5,0x24,0xae,0x45,0xbd, + 0x76,0x4f,0x2e,0x57,0xb6,0x5b,0x4e,0x65,0xb2,0xb3,0x40,0xbc,0x59,0x7c,0x46,0x40, + 0x36,0x55,0x26,0x5a,0x31,0x5b,0x4f,0xad,0x78,0x6b,0x23,0x39,0x25,0x7a,0x46,0x41, + 0xa8,0x54,0xb4,0x5a,0x41,0x5b,0x4d,0x5b,0x78,0x63,0x23,0x49,0x25,0x7e,0x46,0x3d, + 0x56,0x54,0x52,0x5a,0x3c,0x5b,0x50,0x5b,0x79,0xb5,0x24,0xb7,0x27,0x72,0x26,0xb1, + 0xb8,0x6c,0x5a,0x5f,0xac,0x5c,0x29,0x5b,0xb9,0x63,0x2e,0x79,0x28,0x6f,0x46,0xa6, + 0x76,0x7b,0x56,0x63,0x78,0x5d,0x23,0x3c,0x45,0x53,0xa8,0x59,0x2a,0x30,0x47,0x68, + 0x66,0xa1,0x22,0x64,0x6a,0x5d,0xae,0x7c,0x4e,0x3b,0xaa,0x3d,0x2a,0xab,0x47,0x6a, + 0x26,0xa1,0x5e,0x64,0x24,0x5d,0xb5,0x7c,0x4b,0xbd,0xa9,0xa9,0x2a,0xac,0x47,0x69, + 0x26,0x7b,0xc0,0x67,0xa7,0x5e,0x29,0xae,0x6a,0x6b,0xb1,0x65,0x2c,0x7d,0x47,0xb6, + 0x76,0x2d,0xa8,0x68,0x4c,0x5e,0x77,0x7c,0x75,0x73,0xb4,0x3c,0x57,0x37,0x71,0x30, + 0x7a,0x7b,0x4a,0x6a,0x68,0x5f,0x59,0x5c,0x7c,0x73,0xb5,0x23,0x2d,0x26,0x28,0x47, + 0x46,0xa8,0x7e,0x69,0x49,0x60,0x37,0x7c,0xa4,0x63,0xbb,0x5b,0x2f,0x3e,0x28,0x73, + 0x46,0xb6,0xa4,0x6e,0x4b,0x60,0x56,0xae,0xac,0xa5,0xbd,0x5b,0x2f,0x7c,0x48,0x2f, + 0xa8,0xb4,0x4a,0x6f,0x58,0x60,0x7b,0x5c,0xbb,0x33,0xc1,0x33,0x30,0x70,0x28,0xb2, + 0x76,0xc1,0xb8,0x70,0xa3,0x60,0xc2,0x5c,0xc2,0x5b,0xc2,0xc1,0x30,0x38,0x29,0x33, + 0x77,0x32,0x6e,0x71,0x66,0x61,0x36,0x7d,0x33,0x24,0x31,0x5b,0xa3,0x41,0x29,0x35, + 0xb9,0x32,0x56,0x71,0x5c,0x61,0x37,0xaf,0x32,0x64,0x39,0x5b,0xa5,0x50,0x29,0x78, + 0xa9,0x43,0x32,0x75,0xc2,0x62,0x63,0x5d,0x5d,0xa6,0x3c,0x39,0xa5,0x30,0x29,0x29, + 0x57,0x46,0xa8,0x76,0x23,0x62,0x67,0xaf,0x5b,0x2c,0x3c,0x57,0xa5,0xad,0x49,0x2a, + 0x67,0x47,0x52,0x76,0x59,0x62,0x60,0x5d,0x5c,0xa6,0x3c,0x51,0xa5,0xaf,0x29,0x29, + 0xb9,0x47,0x66,0x76,0x66,0x62,0x67,0x7d,0x5c,0x3c,0x3c,0x61,0xa5,0xae,0x49,0x2b, + 0xb9,0x47,0x4a,0x76,0x5d,0x62,0x64,0x7d,0x54,0xb6,0x47,0xa1,0xa8,0x2f,0x4a,0x70, + 0x57,0x59,0x22,0x7d,0x44,0x64,0x34,0x3d,0xa3,0x64,0x49,0x35,0xa9,0x38,0x4a,0x71, + 0x37,0x61,0x6e,0x7d,0x46,0x64,0x33,0x25,0xb2,0xb3,0x40,0xbc,0x37,0x34,0x2a,0x72, + 0x27,0x69,0x5e,0xa1,0xb0,0x64,0xa5,0xaf,0xbc,0x5c,0x4e,0xa5,0xaa,0xa1,0x4a,0xb1, + 0x67,0x6c,0x2e,0xa2,0x38,0x64,0xaa,0x5d,0xbc,0x6c,0x4e,0x2f,0xaa,0x69,0x4a,0xb2, + 0xb9,0x6d,0x56,0xa1,0xc1,0x64,0xa7,0x3d,0xba,0x5c,0x4f,0x65,0xaa,0x7a,0x2a,0xb2, + 0x77,0x6c,0x5a,0xa1,0xb5,0x64,0x79,0xb0,0x67,0x64,0x5e,0xa1,0xae,0x70,0x2b,0xa5, + 0x67,0xa3,0xb0,0x2a,0xa6,0x67,0x6b,0x3e,0xa2,0x4c,0x63,0xa5,0xaf,0xa9,0x4c,0x4d, + 0x27,0xa8,0x7e,0x2a,0x6e,0x67,0x60,0x7e,0x7c,0xa6,0x64,0x75,0xaf,0x26,0x2c,0x4b, + 0x27,0xa9,0x7e,0x2a,0x69,0x67,0x62,0x3e,0x7c,0x7c,0x64,0x33,0xaf,0x28,0x4c,0x4b, + 0xb9,0xa9,0x46,0x2a,0xb4,0x67,0x60,0xb0,0x7c,0x2c,0x64,0x73,0xaf,0xb0,0x2c,0x4a, + 0x57,0xa8,0x62,0x2a,0xb2,0x67,0x68,0x3e,0x7e,0x64,0x64,0x72,0x57,0x37,0x71,0x30, + 0x78,0x2d,0x26,0xa4,0x3f,0x69,0x55,0xa1,0x39,0x24,0x73,0x63,0xb3,0x47,0x4d,0x76, + 0x28,0x42,0xa4,0xa7,0x79,0x6a,0x4a,0xb1,0x57,0x7c,0x7c,0x31,0xb5,0xaa,0x4d,0x2c, + 0x48,0x47,0x2e,0xa8,0x21,0x6a,0x5b,0x5f,0x6b,0x74,0xa1,0x6f,0xb6,0x26,0x2d,0xb7, + 0x28,0x4a,0xb8,0xae,0x4e,0x6b,0xa9,0x5f,0x2a,0x24,0x27,0x39,0xb9,0xa4,0x4e,0x2f, + 0x58,0x68,0x22,0xb0,0xa8,0x6c,0xc2,0x5f,0xb6,0xb6,0xa8,0x31,0xbc,0x51,0x2f,0x6a, + 0x48,0xa1,0x52,0xb5,0xbd,0x6e,0x4f,0x60,0x60,0x24,0xae,0xbf,0xbf,0x5b,0x50,0xb4, + 0x78,0xbf,0x5e,0xc1,0x36,0x71,0x5f,0x21,0x3b,0x5d,0x33,0x76,0x31,0x29,0xa3,0x45, + 0x49,0x36,0x5f,0x32,0x5a,0x71,0x5e,0x41,0x3b,0x25,0x33,0x30,0x31,0xb5,0xa3,0x70, + 0xab,0x39,0x67,0x36,0x64,0x72,0x58,0x61,0x5a,0x7d,0x3b,0x2c,0x33,0x2f,0xa3,0x24, + 0xbb,0x46,0xa9,0x36,0x62,0x72,0x5c,0x41,0x5b,0x5d,0x3b,0x30,0x33,0x2d,0x51,0x25, + 0x69,0x46,0x73,0x36,0x6f,0x72,0x5e,0xb3,0x55,0xb7,0x4a,0xa6,0x37,0x3f,0x25,0x7e, + 0x39,0x77,0x5f,0x4e,0xa1,0x78,0xb8,0x42,0xc0,0x3d,0x6f,0xae,0x41,0x2d,0x55,0x47, + 0x4a,0x36,0x2b,0x52,0x78,0x79,0xb7,0x63,0x48,0x6d,0x27,0x32,0x46,0x3f,0x56,0x79, + 0x3a,0x62,0xc1,0x5d,0x6c,0x7c,0x42,0x43,0xad,0x68,0xbb,0x37,0xc2,0xac,0x56,0x28, + 0x4a,0x68,0x53,0x5d,0x23,0x7c,0x28,0x23,0xbc,0xbd,0x6b,0x2b,0xa1,0x28,0x44,0x2d, + 0x45,0xc0,0x26,0x50,0x60,0x58,0xb2,0xac,0xc1,0x33,0x70,0x53,0xa2,0xaa,0x24,0xbe, + 0x25,0xc1,0x3e,0x50,0x67,0x58,0xb9,0x3a,0xc0,0xbd,0x70,0x45,0xa2,0xae,0x24,0xb8, + 0xa7,0xc1,0x72,0x50,0x75,0x58,0xb3,0x7a,0xc0,0x23,0x70,0x4d,0xa2,0xb2,0x44,0xb9, + 0xb7,0xbd,0x2e,0x54,0x43,0x59,0xa7,0x5b,0x4b,0x33,0x76,0x4d,0x23,0x52,0x25,0x7a, + 0x56,0x43,0x66,0x55,0x7d,0x5a,0x43,0xad,0x55,0x6b,0x7c,0x3f,0x23,0xa7,0x25,0x29, + 0x66,0x47,0x36,0x55,0x3e,0x5a,0x26,0xad,0x68,0x2b,0xa1,0x65,0x24,0xb0,0x25,0xb8, + 0x76,0x57,0x32,0x5a,0x59,0x5b,0x64,0x7b,0x7d,0x7b,0x23,0xb3,0x25,0x24,0x5a,0x7b, + 0x7c,0x4b,0x24,0x3f,0x25,0xa4,0x46,0x48,0x26,0x56,0x5a,0x5a,0x72,0x24,0x34,0x51, + 0x60,0xbb,0x44,0x39,0x25,0xa7,0x46,0x46,0xb8,0x56,0x5e,0x5a,0x62,0x5b,0x5f,0xad, + 0x7b,0x7b,0x23,0xa1,0x25,0x30,0x26,0x50,0xb8,0x65,0x3a,0x60,0x3c,0x5c,0xab,0x3b, + 0xbd,0x4b,0x2f,0x75,0x28,0xaa,0x46,0xb8,0xa8,0x6d,0x7e,0x5f,0x26,0x5d,0x25,0x5c, + 0x45,0xbd,0xa8,0x4d,0x2a,0x59,0x47,0x6c,0x76,0xa1,0xa4,0x64,0xc2,0x5d,0xbb,0xae, + 0x4f,0x73,0xa7,0x37,0x2b,0xb5,0x27,0x6e,0x56,0xa1,0xac,0x64,0xa9,0x5d,0x71,0x5c, + 0x60,0x2b,0xa8,0x23,0x2c,0x22,0x27,0xb7,0xad,0x63,0xb1,0x79,0x2c,0x22,0x47,0xb7, + 0x26,0x29,0x36,0x69,0xa1,0x5f,0x44,0xae,0x75,0xad,0xb4,0x47,0x2d,0xaf,0x28,0x4b, + 0x56,0xaa,0x2e,0x6b,0x4e,0x60,0x3a,0x5c,0xa4,0xbd,0xbc,0xbd,0x2f,0x21,0x48,0x25, + 0xad,0x63,0xbe,0xb7,0x2f,0x35,0x48,0xa8,0x26,0xbe,0x46,0x70,0x39,0x60,0xa4,0x5c, + 0xbb,0x23,0xc1,0x47,0x30,0x74,0x28,0xb4,0x76,0xbf,0x56,0x6f,0x43,0x61,0x38,0x5d, + 0x33,0x34,0x31,0x7b,0xa3,0x38,0x49,0x36,0x37,0x33,0x66,0x71,0xb3,0x61,0x4b,0x3d, + 0x37,0x44,0x32,0x3d,0xa3,0x52,0x29,0x3e,0x77,0x34,0x5e,0x71,0xad,0x61,0x4a,0x3d, + 0x35,0x3c,0x3c,0x69,0xa5,0x3c,0x49,0xa4,0x47,0x50,0xb4,0x76,0xb0,0x62,0x31,0x5d, + 0x6f,0xb6,0x3c,0xbd,0xa5,0x34,0x29,0xc1,0x47,0x48,0x2f,0x7e,0xc1,0x32,0xc2,0x43, + 0x5f,0xbe,0x3c,0x29,0xa5,0xc2,0x49,0x2f,0x77,0x41,0x76,0x77,0x33,0x62,0xa2,0xaf, + 0x25,0x5c,0x47,0x27,0xa8,0x2f,0x2a,0x6d,0x57,0x5a,0x46,0x7d,0x5e,0x64,0x39,0x3d, + 0xa5,0x6c,0x49,0x2f,0xa9,0x40,0x2a,0x76,0x37,0x62,0x76,0x7d,0x55,0x64,0x6e,0xaf, + 0xb2,0xbe,0x50,0x57,0xaa,0xbb,0x2a,0xbd,0x77,0x6f,0x72,0xa2,0xaf,0x64,0xb0,0x7d, + 0xbd,0xbe,0x50,0xad,0xaa,0xb7,0x2a,0xc0,0xb9,0x6f,0x42,0xa2,0x22,0x64,0xb0,0x3d, + 0xc0,0x24,0x50,0x7b,0xaa,0x2d,0x4a,0xbc,0xb9,0x6f,0xbc,0xa2,0xb6,0x64,0xaf,0x3d, + 0xc0,0x7c,0x50,0x75,0xaa,0xb1,0x2a,0xbd,0x57,0x6c,0x5a,0x28,0x34,0x66,0xa4,0x7e, + 0x6c,0x5c,0x60,0x55,0xae,0xae,0x2b,0xa6,0xb9,0xa9,0x56,0x29,0x3c,0x67,0x7d,0x7e, + 0x23,0x24,0x66,0x33,0xb0,0x43,0x2c,0x52,0x77,0xac,0x76,0x2b,0x4f,0x67,0x76,0xb7, + 0xa3,0xab,0x3c,0xbb,0xc0,0x4e,0x2c,0x58,0x27,0xac,0xbc,0x2b,0x67,0x67,0x77,0xb0, + 0x30,0x5c,0x61,0xb5,0xb0,0x44,0x2c,0x58,0x37,0xac,0x56,0x2b,0x5f,0x67,0x7e,0x5e, + 0x21,0xb6,0x65,0x27,0xb0,0x26,0x2d,0x48,0x58,0x36,0x7e,0xa4,0x5d,0x69,0x5c,0xb1, + 0x3b,0xae,0x73,0xb3,0xb3,0x28,0x4d,0x45,0x78,0x32,0x72,0xa7,0xb5,0x6a,0x4c,0xb1, + 0x58,0x54,0x7c,0x23,0xb5,0xb3,0x4d,0x2d,0x48,0x46,0x2e,0xaa,0x7b,0x6a,0xb1,0xb1, + 0x6c,0x44,0xa2,0x4b,0xb6,0xa3,0x4d,0xb9,0x68,0x49,0xac,0xad,0x5e,0x6b,0x24,0xb1, + 0x25,0xa6,0x26,0x4d,0xb8,0x56,0x2e,0x66,0x68,0x5e,0x42,0xae,0x56,0x6b,0xab,0xa1, + 0x2b,0x4c,0x26,0xb3,0xb9,0x74,0x4e,0x21,0xba,0x65,0x52,0xb0,0x79,0x6c,0x62,0xa1, + 0xaf,0x4c,0x2c,0x3b,0xb9,0x31,0x2e,0xc2,0x48,0x68,0xa4,0xaf,0x3a,0x6c,0x73,0xb1, + 0xc2,0xb6,0x2c,0xbb,0xb9,0x34,0x2e,0xbe,0x78,0x69,0x3a,0xb3,0x45,0x6d,0x34,0x40, + 0x31,0xae,0xa4,0x3d,0xbc,0x55,0x2f,0x5a,0x38,0x7b,0x4e,0xb6,0x6a,0x6d,0xb1,0xa2, + 0x4e,0x3c,0xaa,0x55,0xbc,0xa8,0x2f,0x60,0xba,0x25,0x36,0xb8,0xc2,0x6e,0x70,0x60, + 0x58,0xae,0xb3,0x35,0xc0,0x33,0x30,0x51,0x38,0xab,0x56,0xbd,0x38,0x6f,0x72,0x40, + 0x21,0x64,0xb7,0xb3,0xc2,0x78,0x50,0xba,0xba,0xbb,0x43,0x7e,0xc1,0x32,0xc2,0x3c, + 0x32,0x35,0x31,0x4c,0x31,0x39,0xa3,0x37,0xab,0x37,0x2b,0x32,0xa8,0x71,0x67,0x21, + 0x3d,0x4d,0x34,0x3a,0x31,0xa9,0x51,0x4d,0x49,0x37,0xb1,0x32,0xa1,0x71,0x68,0x21, + 0x3f,0x55,0x34,0x6c,0x31,0xbd,0x51,0x55,0x59,0x48,0x4f,0x35,0x34,0x72,0x72,0x61, + 0x6f,0x4d,0x3c,0x68,0x33,0xb6,0x51,0x71,0x79,0x50,0x47,0x35,0x33,0x72,0x73,0x61, + 0x6e,0x45,0x3c,0x60,0x33,0xbb,0xa3,0x71,0x49,0x4f,0xb5,0x36,0x25,0x72,0x65,0x61, + 0x5e,0xb7,0x3c,0x58,0x33,0xb2,0xa3,0x2e,0xbb,0x41,0x4b,0x37,0x21,0x74,0x4f,0x61, + 0xaa,0x2d,0x4a,0xb8,0x37,0x57,0xa5,0x3e,0x69,0x75,0x37,0x44,0x25,0x75,0x73,0x42, + 0x51,0x45,0x59,0x38,0x3b,0xa2,0x54,0x45,0x39,0xa6,0x23,0x4b,0xb6,0x77,0xb0,0x42, + 0x2d,0xaf,0x6c,0x4a,0x3f,0xbb,0x54,0xbf,0xab,0xc2,0x3b,0x50,0xad,0x78,0xbc,0x62, + 0xbd,0x61,0x41,0x36,0x72,0xb9,0xa6,0xc0,0x69,0xc2,0x43,0x50,0xab,0x78,0xb5,0x23, + 0x3d,0xb7,0x74,0x34,0x41,0xa4,0xa7,0x3a,0x6a,0x3b,0x5b,0x54,0x7e,0x79,0xa3,0x23, + 0x26,0x35,0x2a,0x48,0x47,0x57,0x56,0x7a,0x2a,0x64,0x3b,0x5f,0xac,0x7c,0xb5,0xb5, + 0xc1,0xaf,0x30,0xaa,0x48,0x31,0xa9,0x46,0x3a,0x77,0xb1,0x62,0x30,0x7d,0x56,0x24, + 0x4a,0x7d,0xa8,0x61,0xa1,0x2a,0x24,0x72,0x76,0x31,0x66,0x51,0x54,0x59,0x6c,0xac, + 0xb5,0x63,0x71,0x7b,0x21,0xbf,0x44,0xa8,0x46,0x31,0x2a,0x51,0x37,0x59,0x40,0x3b, + 0x32,0xbd,0x71,0x65,0x21,0x3a,0x45,0x33,0x46,0x38,0xac,0x4f,0x31,0x59,0x36,0x3b, + 0x33,0x73,0x74,0xa5,0xa2,0x41,0x25,0x32,0x66,0x31,0xa8,0x51,0x49,0x59,0x6d,0xac, + 0xc1,0xb5,0x6d,0x2b,0x21,0x46,0x45,0x50,0xa7,0xbc,0x5e,0x51,0x3a,0x59,0x50,0x3b, + 0x4b,0x53,0x77,0x7b,0x22,0x22,0x45,0x6a,0x26,0x3f,0x62,0x54,0x77,0x59,0xb5,0xad, + 0x46,0x63,0x7a,0x69,0x23,0x5b,0x45,0x7c,0x66,0x43,0xb8,0x55,0x5b,0x5a,0x30,0xad, + 0x6a,0xbd,0xa1,0x6b,0x24,0xb2,0x25,0xc0,0x36,0x51,0x72,0x5b,0x32,0x5b,0x7e,0xad, + 0x30,0xa5,0x24,0x7b,0x25,0xbc,0x46,0x31,0xa8,0x60,0xac,0x59,0x45,0x5b,0xbd,0x5b, + 0xa1,0xad,0x24,0x73,0x25,0x35,0x26,0x6e,0xa8,0x58,0x5b,0x7e,0xc1,0x32,0xc2,0xa4, + 0x4f,0x63,0x21,0xa1,0x26,0x34,0x26,0x70,0x26,0x51,0x6e,0x5b,0x34,0x5c,0x72,0x3b, + 0xbf,0x43,0x30,0x59,0x28,0xa8,0x26,0xbb,0x66,0x69,0x56,0x61,0x40,0x5d,0x26,0xae, + 0x46,0x73,0xa8,0x65,0x2a,0x39,0x27,0x74,0x36,0x21,0xb4,0x65,0x50,0x5e,0x37,0xae, + 0x52,0x4b,0xae,0x29,0x2a,0x41,0x47,0x75,0x66,0x22,0x56,0x65,0x56,0x5e,0x34,0x3c, + 0x51,0x7b,0xac,0x27,0x2c,0x5d,0x48,0x47,0x36,0x2e,0x7e,0x68,0x67,0x5e,0xb0,0x3c, + 0x6b,0xb5,0xb1,0xad,0x2c,0x2d,0x27,0xba,0x36,0x29,0x42,0x69,0x22,0x5f,0x46,0x5c, + 0x76,0x33,0xb6,0x2b,0x2d,0xc1,0x28,0x50,0x66,0xaa,0x5a,0x6a,0xab,0x5f,0x6d,0x3c, + 0xa2,0x63,0xb3,0x33,0x2e,0xbd,0x48,0x4e,0xa8,0xac,0x66,0x6d,0x5c,0x60,0x5b,0xae, + 0xad,0xad,0xbd,0xa1,0x2f,0x49,0x28,0xb5,0x56,0xbf,0x76,0x70,0x41,0x60,0x27,0x65, + 0xa3,0xab,0x3c,0xbc,0x4c,0x62,0x29,0x3d,0x27,0x33,0x72,0x71,0x26,0x61,0x4c,0x5d, + 0x37,0x7c,0x32,0x2f,0xa3,0x73,0x49,0x44,0xb9,0x35,0xac,0x72,0x3e,0x61,0x56,0x3d, + 0x39,0xa6,0x33,0x3b,0xa3,0x7c,0x49,0x39,0xb9,0x48,0x7e,0x75,0x39,0x62,0xc2,0xaf, + 0x55,0xb6,0x3d,0xbf,0xa6,0x48,0x29,0xad,0x27,0x4b,0x3a,0x77,0x77,0x62,0x24,0xaf, + 0x65,0x7c,0x3d,0xb7,0xa6,0x59,0x49,0xaa,0x27,0x4a,0x5a,0x77,0x5c,0x62,0x7b,0x3d, + 0x65,0xae,0x3e,0x49,0xa6,0x55,0x4a,0x5a,0x47,0x5d,0xa8,0x7c,0x72,0x63,0xb4,0x5d, + 0x25,0x44,0x4a,0x43,0xa9,0x58,0x2a,0x79,0x67,0x63,0x7a,0x7d,0x7d,0x64,0x42,0x5d, + 0xa7,0x3c,0x4c,0xb3,0xa9,0x3b,0x4a,0xa5,0x27,0x69,0x2e,0xa1,0x52,0x65,0x3f,0x3e, + 0x35,0x74,0x52,0x3d,0xab,0x5a,0x2b,0x38,0x47,0x73,0x3a,0x21,0x25,0x65,0x3b,0x5e, + 0x3c,0x4c,0x51,0x5f,0xab,0x57,0x4b,0x3b,0x47,0x72,0xb8,0x22,0xb7,0x64,0x25,0x3e, + 0x35,0x34,0x51,0xbb,0xab,0x52,0x2b,0x36,0x57,0x73,0x46,0x21,0x44,0x65,0x37,0x3e, + 0x35,0x3c,0x53,0x45,0xae,0x75,0x2b,0xb9,0xb9,0x2a,0x3e,0x29,0x58,0x67,0x3b,0x3e, + 0x73,0x64,0x61,0x79,0xaf,0xbb,0x4c,0x3e,0x57,0xaf,0x26,0x2c,0x39,0x67,0xa4,0xb0, + 0x27,0x64,0x66,0xb3,0xb0,0x6c,0x2c,0x5c,0x47,0xaf,0xa1,0x7e,0xc1,0x32,0xc2,0x41, + 0x57,0xa6,0x67,0x43,0xb0,0x68,0x4c,0x5c,0x57,0xae,0x22,0x2b,0xac,0x67,0xa6,0x3e, + 0x29,0x24,0x66,0xb5,0xb0,0x73,0x2c,0x5d,0x27,0xaf,0x22,0x2c,0x7b,0x69,0x67,0x3f, + 0x3f,0x54,0x74,0x63,0xb3,0xa7,0x4d,0x4a,0xba,0x32,0xa8,0xa7,0xbc,0x6a,0x70,0x3f, + 0x60,0x7c,0x7c,0xbd,0xb5,0xbf,0x4d,0x2f,0xba,0x45,0x4a,0xaa,0xb0,0x6a,0x73,0x5f, + 0xa1,0xb6,0xa2,0x71,0xb6,0xb8,0x4d,0xbe,0xaa,0x4b,0x22,0xad,0x2e,0x6b,0x28,0x3f, + 0x26,0x24,0x26,0x63,0xb8,0x30,0x4e,0x69,0x28,0x5f,0x4e,0xae,0x63,0x6b,0xaf,0xb1, + 0x2c,0xae,0x27,0xbb,0xb8,0x2d,0x2e,0x69,0x58,0x5e,0xa4,0xae,0x3c,0x6c,0x5d,0x3f, + 0xaf,0x24,0x2c,0x4b,0xb9,0xaa,0x4e,0x76,0x48,0x69,0xc0,0xb1,0x51,0x6c,0x7b,0x3f, + 0xc1,0x7c,0x2d,0xa3,0xbb,0x44,0x2f,0x38,0x38,0x71,0xb8,0xb3,0x65,0x6d,0x3e,0xb7, + 0xa3,0xab,0x3c,0xbb,0xb0,0x43,0x2f,0x36,0x28,0x72,0x32,0xb3,0x50,0x6d,0x3d,0xa2, + 0x36,0x5c,0xa8,0x51,0xbc,0x61,0x4f,0x5c,0xba,0x7b,0x2a,0xb5,0x2f,0x6d,0x28,0x60, + 0x46,0x6c,0xa8,0x65,0xbc,0xb5,0x4f,0x6d,0x68,0xa2,0x4e,0xb6,0x30,0x6d,0xbc,0xa2, + 0x4f,0x7c,0xaa,0x61,0xbc,0x73,0x4f,0x22,0x38,0x27,0xa8,0xb7,0x37,0x6e,0x75,0x60, + 0x69,0x7c,0xb3,0x73,0xc0,0x3c,0x30,0x52,0x68,0xab,0x5a,0xbd,0x51,0x6f,0x79,0xa2, + 0x22,0x54,0xb7,0x51,0xc0,0x3b,0x30,0x54,0x58,0xab,0xb4,0xbd,0x3e,0x6f,0x77,0x60, + 0x22,0x2c,0xb7,0xb7,0xc2,0x60,0x30,0xb5,0x78,0xc1,0x46,0xc2,0x72,0x70,0x72,0x21, + 0x32,0x75,0x31,0x5c,0x31,0x3d,0xa3,0x33,0xbb,0x32,0xb9,0x31,0x70,0x71,0x6d,0x61, + 0x31,0x45,0x38,0xa4,0x31,0x33,0xa3,0x6e,0x29,0x38,0x23,0x31,0x37,0x71,0xc1,0x41, + 0x40,0x4d,0x31,0x42,0x32,0xc1,0xa3,0x32,0x59,0x40,0xb5,0x32,0xb2,0x71,0x6c,0x61, + 0x4f,0xa7,0x35,0x32,0x33,0x39,0x51,0x76,0x59,0x42,0x5f,0x35,0x59,0x72,0x3c,0x41, + 0x5c,0x2d,0x39,0x28,0x34,0x5a,0x51,0xad,0x79,0x4b,0x5b,0x37,0x69,0x72,0x25,0x41, + 0x65,0x7d,0x3d,0xae,0x34,0x4b,0x51,0xac,0xbb,0x4a,0x7b,0x37,0x6a,0x72,0x7e,0x21, + 0x62,0x6d,0x3e,0x32,0x34,0x49,0xa3,0xa8,0x39,0x4b,0x3f,0x38,0x57,0xc2,0x31,0xb2, + 0xbe,0x75,0x4b,0x46,0x37,0x26,0x52,0x23,0x69,0x66,0x43,0x3e,0x5a,0x74,0x54,0x41, + 0xad,0x4d,0x4b,0x6a,0x37,0x69,0x53,0x3f,0xbb,0x75,0x37,0x42,0x33,0x75,0x50,0x62, + 0x38,0x7d,0x51,0x62,0x3b,0x39,0x53,0x72,0xab,0x21,0x63,0x45,0x46,0x76,0x33,0x22, + 0x52,0x6d,0x59,0x58,0x3b,0x3c,0x53,0x72,0xbb,0x21,0x77,0x45,0x79,0x77,0x4f,0x22, + 0x78,0x7d,0x63,0x74,0x3d,0x22,0x54,0x3f,0xbb,0xb0,0x63,0x4e,0x23,0x78,0x66,0x42, + 0xaf,0xbf,0x6b,0xa6,0x40,0x31,0xa7,0x31,0xac,0x38,0x2f,0x4f,0x31,0x79,0x6f,0x22, + 0xc2,0x55,0x6d,0x38,0x41,0xc1,0xa6,0xa3,0x2a,0x38,0xa5,0x50,0x46,0x79,0x69,0x63, + 0x3e,0xaf,0x74,0x76,0x41,0x5a,0x55,0x5a,0x2a,0x3b,0x63,0x54,0x29,0x79,0xba,0x63, + 0x4e,0x6d,0x78,0x6a,0x42,0xaf,0xa7,0x61,0x6a,0x5c,0x3b,0x5d,0xa6,0x7c,0x49,0x65, + 0xa3,0xab,0x3c,0xc1,0x3b,0x5e,0xa8,0x7c,0x2a,0x64,0x43,0x5d,0x29,0x7c,0x48,0x23, + 0xae,0x2d,0x2c,0x76,0x49,0x27,0x57,0x66,0x3a,0x27,0xa5,0x65,0x56,0x7e,0x7d,0x24, + 0x64,0xa7,0xb0,0xbf,0xa1,0x6e,0x45,0x40,0x26,0x33,0xb4,0x51,0x78,0x59,0x41,0xad, + 0x35,0xa5,0x72,0x65,0x21,0x55,0x25,0x3d,0x26,0x34,0x2a,0x51,0xa1,0x59,0x46,0x5b, + 0x38,0x5b,0x72,0xab,0x21,0x6c,0x25,0x3a,0xb8,0x31,0x6e,0x51,0xb2,0x59,0x4c,0x5b, + 0x36,0xa5,0x77,0x5b,0x22,0xbb,0x45,0x5e,0x56,0x44,0x6e,0x56,0x23,0x5a,0x67,0x5b, + 0x5e,0x73,0x7c,0x5b,0x23,0x39,0x45,0xa4,0xb8,0x49,0xa8,0x57,0x70,0x5a,0x21,0x3b, + 0x64,0xb5,0xa2,0x37,0x24,0xc1,0x4a,0x79,0xa8,0x5c,0x5a,0x5b,0xa9,0x5b,0x22,0x3b, + 0x26,0xb5,0x26,0x73,0x26,0x52,0x26,0x5a,0x56,0x5a,0x76,0x5b,0x27,0x5b,0x24,0xad, + 0x26,0x5b,0x25,0x2f,0x26,0x63,0x46,0x58,0x36,0x5a,0x6a,0x5b,0x2d,0x5b,0x7c,0x3b, + 0x27,0x4b,0x25,0xa9,0x26,0x51,0x26,0x5b,0xb8,0x59,0x52,0x5f,0x3c,0x5c,0x73,0x5b, + 0xc0,0xbd,0x2d,0x3b,0x29,0x36,0x47,0x31,0xa8,0x78,0x32,0x60,0xa7,0x5c,0xc1,0x7b, + 0xb3,0x43,0xa3,0xad,0x29,0xbe,0x26,0xc2,0x46,0x6a,0x32,0x63,0xa5,0x5d,0x7e,0x7c, + 0x55,0x3b,0xac,0x43,0x2b,0x64,0x47,0x7e,0x56,0x23,0x33,0x7e,0xc1,0x32,0xc2,0x46, + 0x74,0xa5,0xac,0x75,0x2b,0x5e,0x47,0x79,0xa8,0x23,0x5a,0x65,0xb3,0x5e,0xb4,0xae, + 0x6d,0x5b,0xb2,0x39,0x2c,0xa4,0x47,0xba,0xb8,0x2f,0x4a,0x67,0x3a,0x5f,0x33,0x3c, + 0x71,0x6b,0xb4,0x71,0x2d,0x5f,0x48,0x3c,0x26,0xa3,0x4e,0x6b,0x37,0x5f,0x74,0x7c, + 0x22,0x2b,0xb7,0x5d,0x2e,0x42,0x48,0x53,0x46,0xac,0x56,0x6b,0x45,0x5f,0x77,0x5c, + 0x23,0x53,0xb7,0xa1,0x2e,0x3c,0x28,0x6d,0x56,0xac,0xa4,0x6d,0x67,0x60,0x3d,0xae, + 0xa6,0x6b,0xbd,0xb1,0x2f,0x2d,0x48,0x27,0xa8,0xb8,0x26,0x6e,0x6f,0x60,0x3e,0x5c, + 0xb6,0x6b,0xc0,0x5f,0x30,0x67,0x48,0xb0,0x46,0xbe,0x5e,0x70,0x48,0x60,0xa9,0x5c, + 0xbc,0xb5,0xc1,0x61,0x30,0x21,0x28,0xb7,0x36,0xbf,0xb4,0x6f,0xc2,0x61,0x59,0xaf, + 0x39,0x7c,0x33,0x71,0xa3,0x25,0x49,0x4a,0x67,0x36,0x22,0x72,0xa9,0x61,0x60,0x65, + 0xa3,0xab,0x3c,0xc1,0x36,0xa5,0x29,0x48,0x67,0x36,0x26,0x72,0x2d,0x61,0x60,0x3d, + 0x3e,0x74,0x34,0x5b,0xa3,0xa6,0x49,0x4c,0xb9,0x36,0xa4,0x72,0x2b,0x61,0x62,0xaf, + 0x32,0x24,0x39,0x67,0xa5,0x55,0x49,0x25,0x37,0x4e,0x4e,0x77,0xb5,0x62,0xa8,0x7d, + 0x6b,0x44,0x3f,0x7b,0xa6,0x6c,0x29,0xaf,0xb9,0x4d,0xa4,0x78,0x5b,0x62,0x2d,0x5d, + 0x6b,0x7c,0x3f,0x43,0xa6,0x72,0x29,0xb6,0x67,0x4c,0x5e,0x78,0x59,0x62,0xa4,0x3d, + 0x69,0x74,0x3f,0x63,0xa6,0x21,0x29,0xb8,0x77,0x4d,0x7a,0x78,0x40,0x62,0xa3,0x3d, + 0x68,0x2c,0x3e,0x23,0xa6,0x65,0x49,0xb2,0x57,0x4b,0xb8,0x7b,0x27,0x63,0x25,0x5d, + 0x26,0x7c,0x46,0x5f,0xa8,0x60,0x26,0x5a,0xb9,0x5b,0xa4,0x7b,0x26,0x63,0x26,0x3d, + 0x2a,0xa6,0x47,0x67,0xa8,0x27,0x4a,0x6a,0xb9,0x5f,0x5e,0x7c,0x7d,0x63,0xb6,0x7d, + 0x26,0xae,0x4a,0x65,0xa9,0x63,0x4a,0x7e,0x37,0x64,0x4a,0x7d,0x2f,0x64,0x6f,0x5d, + 0xb0,0x6b,0x79,0x67,0xaa,0x71,0x2b,0x46,0xb9,0x76,0x3a,0x22,0x44,0x65,0x5e,0x5e, + 0x38,0xbe,0x52,0xaf,0xab,0x29,0x2b,0x45,0xb9,0x75,0x2e,0x22,0x61,0x65,0x51,0xb0, + 0x3d,0x54,0x53,0x2b,0xab,0x74,0x4b,0x41,0x27,0x75,0x22,0x22,0x4e,0x65,0x5b,0x3e, + 0x3a,0xbe,0x53,0x73,0xab,0x72,0x4b,0x37,0x57,0x2e,0xad,0x7e,0xc1,0x32,0xc2,0x42, + 0xa1,0x2c,0x60,0x29,0xae,0x46,0x2c,0x42,0xa9,0xb0,0xb4,0x2c,0xb6,0x67,0xb9,0x5e, + 0x2c,0x44,0x68,0x73,0xb0,0xa9,0x4c,0x6d,0x77,0xb2,0xb0,0x2c,0xbd,0x67,0x72,0x5e, + 0xaf,0x6c,0x68,0x47,0xb0,0x28,0x2c,0x6b,0x47,0xb0,0x6a,0x2c,0x2f,0x67,0xc1,0x5e, + 0x2c,0x74,0x68,0xb1,0xb0,0xbd,0x2c,0x69,0x27,0xb1,0x7a,0x2b,0x4b,0x68,0x5e,0x5e, + 0x2e,0x24,0x68,0x27,0xb0,0xaf,0x4c,0x6e,0x57,0xb2,0x76,0x2c,0xb1,0x67,0xbd,0x3e, + 0x2d,0x64,0x68,0x39,0xb0,0x26,0x4c,0x6e,0x77,0xb0,0xc0,0x2c,0xa9,0x67,0xc1,0x5f, + 0x31,0x7c,0x75,0x45,0xb4,0xc1,0x2d,0x4e,0xba,0x32,0xb8,0xa7,0xc0,0x6a,0x51,0x5f, + 0x52,0xa6,0x7d,0x67,0xb6,0x3c,0x4d,0xa5,0x68,0x49,0xa8,0xaa,0x38,0x6a,0x72,0x5f, + 0x71,0x24,0x21,0x37,0xb7,0x34,0x4e,0x50,0xaa,0x49,0x66,0xac,0xa3,0x6b,0x6e,0x25, + 0xa3,0xab,0x3c,0xbb,0xbe,0xbe,0x2e,0x34,0x78,0x5a,0x3a,0xad,0xa8,0x6b,0x2a,0xa1, + 0x27,0x44,0x26,0xa3,0xb8,0x78,0x2e,0x6b,0x78,0x5f,0x26,0xae,0x66,0x6b,0xb5,0xa1, + 0x2d,0xae,0x27,0x4d,0xb9,0xad,0x4e,0x2b,0x58,0x67,0xb0,0xaf,0x68,0x6c,0xa2,0xa1, + 0xb6,0xa6,0x2d,0xaf,0xba,0x4d,0x4e,0xaa,0x58,0x6c,0x5e,0xb3,0x74,0x6d,0x44,0xa2, + 0x37,0x5c,0xa8,0x21,0xbc,0x67,0x2f,0x70,0x68,0x7d,0x7a,0xb8,0x46,0x6e,0x39,0x40, + 0x63,0x74,0xaf,0x67,0xbe,0x47,0x4f,0xa7,0xaa,0x29,0xa8,0xb9,0x4f,0x6e,0x7c,0xa2, + 0x6a,0x44,0xb5,0x5f,0xbf,0x7b,0x30,0x39,0xaa,0xad,0x3e,0xbd,0xb4,0x6f,0x7c,0xa2, + 0x24,0x7c,0xb7,0xbb,0xc0,0x51,0x50,0x57,0x38,0xac,0x7e,0xbd,0x75,0x6f,0x7c,0xb2, + 0x25,0x44,0xb7,0xa7,0xc0,0x49,0x30,0x58,0x28,0xbf,0xbc,0xc2,0x4b,0x70,0xb6,0x40, + 0xbf,0xb6,0xc2,0x55,0xc2,0x3f,0x51,0x3a,0x59,0x33,0x4b,0x31,0x60,0x71,0x76,0x21, + 0x43,0x4d,0x35,0x28,0x32,0x45,0xa3,0x57,0x39,0x3a,0x43,0x33,0x33,0x72,0x3e,0x61, + 0x54,0x6d,0x39,0xb0,0x33,0x4d,0xa3,0x22,0xab,0x4d,0xbd,0x38,0x49,0x72,0x2f,0x41, + 0x6b,0x45,0x3f,0x5e,0x34,0x2f,0xa3,0xb8,0x69,0x4d,0x7b,0x38,0x3b,0x72,0xa7,0xb3, + 0x69,0x7d,0x3f,0x72,0x34,0x6c,0xa3,0xb2,0x69,0x4c,0xb5,0x7e,0xc1,0x32,0xc2,0xa3, + 0x29,0x65,0x3f,0xa2,0x34,0x5b,0xa4,0x7e,0x56,0xc1,0x4f,0x3e,0x71,0x74,0x5e,0x21, + 0xaf,0x55,0x4b,0xae,0x37,0xa6,0x52,0x2a,0x69,0x66,0x77,0x3e,0x60,0x74,0x63,0x61, + 0xa8,0x4d,0x53,0x6e,0x39,0x75,0x53,0x46,0x69,0x75,0x7b,0x42,0x47,0x75,0x54,0x62, + 0x39,0x2d,0x53,0x58,0x3a,0x78,0xa5,0x56,0x59,0x21,0xb9,0x45,0x54,0x76,0x3a,0x62, + 0x54,0x3d,0x59,0x2c,0x3b,0x40,0xa5,0x74,0x69,0x22,0x3b,0x45,0x7a,0x77,0x47,0x22, + 0x7b,0x7d,0x63,0x2a,0x3d,0x26,0xa6,0x46,0x39,0xa8,0x5b,0x4a,0x58,0x77,0x4a,0xb4, + 0x27,0x65,0x67,0xc0,0x3e,0x2e,0x54,0x6c,0x69,0xb9,0xc1,0x4d,0x4a,0x79,0x34,0x63, + 0x32,0x25,0x71,0x60,0x41,0x42,0xa7,0x34,0xbc,0x31,0xb9,0x51,0x41,0x79,0x36,0x63, + 0x32,0xb7,0x71,0x72,0x41,0x38,0xa7,0x35,0x5a,0x31,0x2b,0x51,0x4c,0x79,0x36,0x43, + 0x3b,0x61,0x41,0x36,0x72,0xb7,0x55,0x4e,0x2a,0x38,0xb9,0x51,0x28,0x79,0xb6,0x23, + 0x50,0x5d,0x78,0x7e,0x42,0xb4,0xa7,0x6d,0xbc,0x40,0x67,0x54,0xac,0x79,0xa5,0x63, + 0x27,0x25,0x2a,0xae,0x47,0x6a,0xa8,0xa2,0x3a,0x64,0x73,0x5d,0xb7,0x7c,0x4e,0x23, + 0xaa,0x6d,0x2a,0x2a,0x47,0xa3,0x56,0x2e,0x5a,0x68,0x57,0x5e,0xa3,0x6e,0x68,0xb2, + 0x51,0x45,0xa3,0x38,0x49,0x5e,0x57,0xbf,0x2a,0xa6,0x27,0x6d,0xc2,0xa2,0x5a,0x64, + 0xae,0x2d,0xbd,0x75,0x21,0x77,0x25,0x41,0x26,0x35,0xa8,0x52,0x42,0x59,0x51,0x3b, + 0x3a,0x63,0x73,0x61,0x21,0x7e,0x45,0x31,0x37,0x70,0x76,0x53,0xb5,0x5a,0x4e,0x3b, + 0x58,0x5b,0x7a,0x23,0x23,0xb2,0x45,0x2c,0x26,0x47,0xb0,0x55,0x2b,0x5a,0xac,0x5b, + 0x68,0x2b,0x27,0x31,0x26,0x24,0x26,0x60,0x76,0x5d,0x5a,0x5c,0x4e,0x5b,0xa9,0x3b, + 0x29,0x43,0x27,0x69,0x26,0x26,0x46,0x63,0x76,0x5d,0x4e,0x5c,0x3c,0x5b,0xa3,0xad, + 0x2c,0x4b,0x27,0x2d,0x26,0xa2,0x26,0x58,0xa8,0x5e,0x7a,0x5c,0x4b,0x5b,0xb1,0xad, + 0x2b,0xa5,0x27,0xa5,0x26,0x70,0x46,0x62,0x46,0x5e,0x5e,0x5c,0x4a,0x5b,0x74,0x5b, + 0xb5,0xbd,0xa3,0x25,0x29,0x4b,0x47,0x35,0x76,0x72,0x72,0x61,0x62,0x5d,0x39,0x5c, + 0x32,0xad,0xa3,0x71,0x29,0xbf,0x27,0x50,0x56,0x74,0x33,0x7e,0xc1,0x32,0xc2,0x47, + 0x78,0x6b,0xad,0x65,0x2b,0x70,0x27,0x23,0x56,0x25,0xb0,0x66,0x58,0x5e,0x4d,0xae, + 0x68,0x3b,0xb2,0x55,0x2c,0xa9,0x47,0xbd,0x66,0x2f,0x72,0x67,0x3b,0x5f,0x33,0xae, + 0x74,0x3b,0xb4,0x49,0x2e,0x59,0x48,0x57,0x76,0xad,0x4e,0x6c,0xc0,0x5f,0x22,0x5c, + 0xa6,0xad,0xbc,0x31,0x2f,0x52,0x28,0xa2,0xa8,0xb9,0x5a,0x6e,0x72,0x60,0x61,0x7c, + 0xaf,0x53,0xbb,0xbb,0x30,0x67,0x28,0xb8,0x46,0xc0,0x5a,0x70,0x59,0x60,0xb7,0x5d, + 0x3f,0x3c,0x33,0xa7,0xa3,0x2c,0x49,0x4d,0x37,0x31,0xb4,0x73,0x54,0x61,0xc1,0x7d, + 0x32,0x5c,0x38,0xa3,0xa3,0xc0,0x29,0x4f,0x77,0x34,0x52,0x74,0xb4,0x61,0x34,0x7d, + 0x50,0x64,0x31,0x43,0xa4,0x31,0x49,0x53,0x57,0x39,0xc0,0x75,0x7a,0x62,0x59,0xaf, + 0x69,0xa6,0x40,0x4f,0xa6,0xa3,0x49,0xc0,0x47,0x4f,0x56,0x78,0x77,0x62,0xb6,0x65, + 0xa3,0xab,0x3c,0xbc,0x52,0xac,0x49,0xbf,0x67,0x4f,0x72,0x78,0xa4,0x62,0xb8,0x7d, + 0x6f,0xae,0x40,0x2d,0xa6,0x6c,0x49,0xc1,0x77,0x50,0x5a,0x78,0x2c,0x62,0x25,0x7d, + 0x7e,0x24,0x40,0xb5,0xa6,0x60,0x4a,0x5d,0xa9,0x5c,0x3a,0x7b,0xa6,0x63,0xa7,0x5d, + 0x2a,0x34,0x47,0x2f,0xa8,0x68,0x4a,0xa1,0x37,0x64,0x22,0x7d,0xb9,0x64,0x4c,0xaf, + 0xac,0x3c,0x4a,0xb7,0xa9,0x70,0x4a,0xa1,0xb9,0x68,0xbc,0x7e,0xc2,0x64,0x38,0xaf, + 0xb4,0xae,0x50,0xb7,0xab,0xad,0x2b,0x4d,0x37,0x77,0xa4,0x22,0x28,0x65,0x32,0x5e, + 0x4e,0xbe,0x54,0xad,0xab,0xba,0x4b,0x4d,0xb9,0x78,0xa8,0x22,0x23,0x65,0x6d,0x7e, + 0x3f,0x4c,0x54,0x47,0xab,0xa9,0x2b,0x32,0x27,0x79,0x7a,0x23,0x3f,0x65,0xb5,0x5e, + 0x3e,0x24,0x52,0x2d,0xac,0xc0,0x2b,0x38,0xa9,0x2a,0xac,0x27,0x6e,0x66,0xa9,0x3e, + 0x6a,0x64,0x5f,0xbb,0xae,0xba,0x2b,0xa8,0xa9,0xa4,0x6e,0x29,0x5d,0x67,0x3c,0xb0, + 0xa6,0x74,0x6a,0x59,0xb1,0x41,0x2c,0x77,0x57,0xb6,0x4e,0x2d,0x7b,0x68,0x39,0x3e, + 0xa5,0x5c,0x69,0x77,0xb1,0x3e,0x2c,0x7c,0x67,0xb5,0xa4,0x2d,0x55,0x68,0x46,0x7e, + 0xa9,0xb6,0x69,0x2b,0xb1,0x44,0x4c,0x7e,0xb9,0xb4,0x22,0x2d,0x7e,0x68,0x3f,0x7e, + 0xa5,0xa6,0x6a,0x37,0xb1,0x3f,0x2c,0x78,0xa9,0xb9,0x5f,0x7e,0xc1,0x32,0xc2,0x42, + 0x79,0x7c,0x69,0x63,0xb1,0x58,0x4c,0x7d,0x67,0xb5,0x42,0x2d,0xb5,0x68,0x4b,0x5e, + 0xa8,0xbe,0x69,0x63,0xb4,0x3e,0x4d,0x55,0xaa,0x3a,0x72,0xa5,0x52,0x69,0x7e,0xa1, + 0x47,0xb6,0x75,0x69,0xb4,0x57,0x4d,0x21,0x78,0x45,0x32,0xa7,0x67,0x6a,0x7a,0x5f, + 0x64,0x54,0x7d,0x23,0xb6,0x4e,0x4e,0x36,0x58,0x52,0x7e,0xab,0x53,0x6b,0x3a,0x5f, + 0x74,0x5c,0x21,0xaf,0xb7,0x4b,0x4e,0x36,0xba,0x51,0xb0,0xab,0x57,0x6b,0x3b,0x3f, + 0x73,0x5c,0x25,0x7d,0xb8,0x66,0x2e,0x5e,0x58,0x60,0x3a,0xae,0x2c,0x6b,0xbb,0xb1, + 0x2e,0x7c,0x28,0x61,0xb8,0xb2,0x4e,0x6d,0x38,0x5c,0xb0,0xaf,0xbf,0x6c,0x56,0xa1, + 0xac,0x4c,0x2b,0xab,0xb9,0xb1,0x4e,0x7a,0xba,0x70,0x66,0xb1,0x2e,0x6d,0x4c,0x40, + 0x37,0xbe,0xa3,0x4b,0xbd,0x35,0x4f,0x72,0x68,0x21,0x46,0xb7,0x31,0x6e,0x57,0x45, + 0xa3,0xab,0x3c,0xbb,0xb8,0x7c,0x2f,0x23,0xaa,0x28,0x46,0xb8,0xa6,0x6e,0x43,0x60, + 0x66,0x64,0xb0,0x3d,0xbe,0x59,0x4f,0xad,0x58,0x2b,0x22,0xb9,0x7e,0x6e,0x23,0xb2, + 0x65,0xbe,0xb0,0x53,0xbe,0xa2,0x30,0x45,0x28,0xa5,0xbc,0xbd,0x21,0x6f,0x2b,0x40, + 0x26,0x5c,0xb7,0x27,0xc0,0x68,0x50,0x5f,0x58,0xae,0x36,0xbd,0xa9,0x6f,0x29,0xa2, + 0x28,0x34,0xb8,0xa9,0xc0,0x73,0x46,0x6b,0x78,0xc1,0x26,0xc1,0x3c,0x71,0x45,0x21, + 0x39,0x5d,0x32,0x5c,0x32,0x5b,0x51,0x5a,0x69,0x3b,0x77,0x33,0xa1,0x71,0xa1,0x61, + 0x45,0x65,0x35,0xc0,0x32,0x57,0x51,0x5b,0x69,0x3c,0x23,0x33,0x43,0x72,0x38,0x41, + 0x5f,0x7d,0x3d,0x38,0x35,0xbf,0x51,0xa4,0x29,0x58,0x33,0x38,0x76,0x72,0x73,0xb3, + 0x7d,0x3d,0x40,0x30,0x34,0xbb,0xa3,0xc1,0x79,0x4b,0x2f,0x39,0x3b,0x73,0x6d,0x41, + 0x61,0xa7,0x44,0x4a,0x34,0xc1,0xa3,0xc1,0x59,0x4f,0x5b,0x37,0x69,0x73,0x34,0x21, + 0x71,0x55,0x44,0x6a,0x34,0x34,0xa4,0x4b,0x79,0x4f,0xc1,0x37,0x2c,0x74,0x68,0xb3, + 0xb0,0x7d,0x4c,0x2c,0x37,0xad,0x52,0x2c,0x69,0x68,0x43,0x3e,0x21,0x74,0x68,0x21, + 0xa8,0x6d,0x54,0x34,0x39,0xa4,0x53,0x47,0x49,0x75,0x3f,0x44,0x47,0x75,0xa1,0xb4, + 0x57,0x35,0x5a,0x5c,0x3b,0x60,0x53,0x78,0x79,0x23,0x37,0x46,0x57,0xc2,0x31,0xc2, + 0xb3,0x2d,0x5a,0x68,0x3b,0x59,0x53,0x79,0xab,0x22,0x23,0x45,0x6b,0x76,0x3e,0x22, + 0x56,0x65,0x5a,0x74,0x3d,0x72,0x54,0x46,0xbb,0xa8,0xb5,0x4a,0x64,0x77,0x60,0x62, + 0x7d,0x3d,0x63,0xba,0x3d,0xa3,0x54,0x47,0x79,0xa8,0x2f,0x4a,0x67,0x77,0x60,0xb4, + 0x7c,0x75,0x63,0x46,0x3e,0x73,0xa6,0x61,0x49,0xb1,0x6b,0x4c,0x2e,0x77,0xb5,0xb4, + 0x2e,0x25,0x68,0x54,0x3e,0xa9,0x54,0x6c,0x69,0xb1,0x4b,0x4c,0xbe,0x78,0x6f,0x42, + 0xb2,0xa7,0x6b,0x6a,0x40,0x48,0x55,0x37,0x2a,0x32,0x77,0x51,0x69,0x79,0x3d,0x23, + 0x34,0x65,0x71,0x36,0x42,0xbd,0xa7,0x32,0x4a,0x40,0xbd,0x51,0xa6,0x79,0x2a,0x63, + 0x4d,0xbf,0x75,0x5a,0x43,0x3b,0xa7,0x75,0x6a,0x41,0x57,0x55,0x4f,0x7a,0x34,0x63, + 0x52,0x35,0x79,0x40,0x43,0x39,0xa7,0x23,0x7a,0x5d,0x6f,0x5c,0x3c,0x7b,0xa7,0x63, + 0x2b,0x61,0x41,0x36,0x72,0x7a,0xa8,0x63,0x5a,0x5d,0x6b,0x5c,0x3b,0x7c,0x54,0x23, + 0xab,0x2d,0x2a,0xbe,0x47,0x73,0xa8,0x21,0xac,0x65,0x67,0x5d,0xb5,0x7c,0x52,0x43, + 0xaf,0x3d,0x2c,0x3c,0x47,0xa5,0x56,0x29,0xac,0x67,0x4f,0x5e,0xb2,0x7c,0x6d,0x23, + 0xaf,0xa7,0x2d,0x3c,0x49,0x34,0x57,0x32,0x3a,0x78,0x4f,0x62,0xad,0x7d,0x6c,0xb6, + 0x3f,0x7d,0xa6,0xa8,0x49,0xb9,0xa9,0x46,0xac,0x7e,0x67,0x64,0x74,0xa2,0x64,0x64, + 0xb0,0x3d,0xbd,0x35,0xa1,0x27,0x25,0x47,0x26,0x36,0x7a,0x52,0x64,0x59,0x62,0x5b, + 0x3c,0xb5,0x73,0x29,0x21,0x2c,0x25,0x48,0x66,0x36,0x6e,0x52,0x78,0x59,0x50,0xad, + 0x58,0x6b,0x7a,0xbd,0x23,0xb2,0x25,0x2d,0xa8,0x48,0x42,0x56,0xa5,0x5a,0x69,0xad, + 0x53,0xbd,0xa2,0x6f,0x26,0xb7,0x46,0x6b,0x66,0x60,0x4a,0x5c,0xa1,0x5b,0xba,0x3b, + 0x2d,0x6b,0x28,0x53,0x26,0xb4,0x26,0x6d,0x76,0x60,0x6e,0x5c,0x2b,0x5b,0xbb,0x5b, + 0x2d,0x5b,0x28,0x3d,0x26,0xb5,0x26,0x6a,0x46,0x59,0x7a,0x5f,0x44,0x5c,0x28,0x7c, + 0x36,0x3b,0xa4,0x61,0x29,0x5c,0x27,0x3c,0x56,0x73,0x22,0x61,0xae,0x5d,0x44,0x3c, + 0x37,0xad,0xa4,0x45,0x29,0x62,0x47,0x3b,0x56,0x73,0x5e,0x61,0xaa,0x5d,0xb3,0x5c, + 0x5d,0x7b,0xae,0x49,0x2b,0x30,0x47,0x28,0x26,0x26,0xb5,0x7e,0xc1,0x32,0xc2,0xa4, + 0x6c,0x4b,0xae,0x35,0x2b,0x2a,0x47,0x7e,0x46,0xae,0x6e,0x6b,0x7d,0x60,0x4f,0x5c, + 0xaf,0x7b,0xbe,0x41,0x2f,0x3a,0x48,0xae,0x46,0xc0,0x62,0x70,0x5f,0x60,0x77,0x7d, + 0x41,0xbe,0x36,0x41,0xa4,0x40,0x29,0x6f,0x67,0x31,0xb0,0x74,0xbc,0x61,0x31,0x5d, + 0x41,0x74,0x36,0x4d,0xa4,0x57,0x49,0x59,0x77,0x3b,0x66,0x73,0x6f,0x61,0x7e,0x3d, + 0x43,0x6c,0x35,0x4b,0xa4,0x34,0x49,0x57,0xb9,0x3a,0x36,0x75,0x53,0x62,0x35,0xaf, + 0x74,0xb6,0x41,0x6d,0xa7,0x46,0x4a,0x36,0x27,0x52,0xb8,0x79,0x5d,0x63,0x34,0xaf, + 0x72,0xa6,0x41,0x59,0xa7,0x37,0x2a,0x37,0xa9,0x51,0x2a,0x79,0x48,0x63,0x32,0x7d, + 0x77,0xa6,0x47,0x6f,0xa8,0x29,0x4a,0x63,0xb9,0x65,0x56,0x7e,0x38,0x64,0x53,0x3d, + 0xac,0x64,0x4b,0x39,0xa9,0x7d,0x4a,0x22,0x27,0x61,0x3e,0xa2,0x45,0x65,0x2c,0x65, + 0xa3,0xab,0x3c,0xbc,0x4c,0x5e,0x4b,0x5f,0xb9,0x7c,0x32,0x23,0x25,0x65,0x2e,0x5e, + 0x44,0x34,0x57,0x35,0xac,0x56,0x4b,0x5e,0x37,0x7c,0x5e,0x23,0x2f,0x65,0x25,0xb0, + 0x48,0x7c,0x57,0x3d,0xac,0x5f,0x2b,0x5d,0x67,0x7b,0xb0,0x23,0x78,0x66,0x2d,0x7e, + 0x6d,0x34,0x5f,0xc1,0xae,0xac,0x2b,0xc2,0x27,0x2e,0x3a,0x2e,0x60,0x68,0x65,0xb0, + 0xae,0x64,0x6c,0x35,0xb1,0x79,0x4c,0x24,0x27,0xb9,0x4e,0x2e,0x76,0x68,0x5a,0x5e, + 0xac,0x74,0x6b,0xbb,0xb1,0x2e,0x4c,0x26,0x67,0xb9,0x76,0x2e,0x47,0x68,0x58,0x3e, + 0xaf,0x54,0x6c,0x59,0xb1,0x26,0x4c,0x25,0xb9,0xb8,0x22,0x2d,0xa1,0x69,0x27,0x5f, + 0x47,0x7c,0x76,0x79,0xb4,0x55,0x2d,0x5d,0xba,0x3b,0xb4,0xa5,0xaf,0x69,0x2a,0xa1, + 0x45,0xa6,0x76,0x7b,0xb4,0x60,0x4d,0x59,0xaa,0x3c,0x52,0xa5,0x27,0x69,0xa1,0xa1, + 0x56,0x44,0x79,0xb1,0xb6,0x53,0x2d,0xaa,0xba,0x4a,0xbc,0xa9,0xb2,0x6b,0x47,0xa1, + 0x76,0x5c,0x22,0x6f,0xb7,0x60,0x4e,0x39,0x48,0x52,0xc0,0xab,0x2a,0x6b,0x47,0xb1, + 0x76,0xa6,0x22,0xaf,0xb8,0x6d,0x4e,0x51,0x38,0x68,0x72,0xad,0x32,0x6c,0x6d,0xa1, + 0x30,0x3c,0x28,0xb7,0xb8,0xc2,0x2e,0x6f,0x78,0x60,0x7e,0xae,0x2f,0x6c,0x68,0xb1, + 0xa8,0x2c,0x2e,0x27,0xba,0x64,0x4e,0xae,0xaa,0x6c,0x3f,0x7e,0xc1,0x32,0xc2,0x41, + 0x38,0x7c,0x2e,0x25,0xba,0x67,0x4e,0xae,0x78,0x6c,0x46,0xb1,0xab,0x6c,0x29,0xa1, + 0xc1,0xb6,0x2f,0x4d,0xbb,0x29,0x4f,0x43,0xba,0x75,0xa4,0xb4,0x3d,0x6d,0x53,0x60, + 0x38,0xa6,0xa5,0x53,0xbb,0x7a,0x2f,0x40,0xba,0x74,0xac,0xb5,0xc2,0x6d,0xa3,0x60, + 0x43,0xa7,0x43,0xbd,0xbc,0x3f,0x4f,0x74,0x58,0x22,0x32,0xb7,0x45,0x6e,0x38,0xb2, + 0x52,0xb6,0xad,0x6f,0xbd,0x21,0x4f,0xa1,0xba,0x2f,0x32,0xb9,0xa3,0x6e,0x2c,0xa2, + 0x67,0x6c,0xb1,0xa5,0xbf,0x2a,0x30,0x47,0x28,0xa7,0x7e,0xbd,0xbc,0x6f,0xa7,0x60, + 0x29,0x3c,0xb9,0x4f,0xc0,0x5e,0x30,0x5e,0xaa,0xbe,0x56,0xc1,0xad,0x70,0x2d,0xa2, + 0xbd,0x7c,0xc1,0x21,0xc2,0x23,0x50,0xad,0xab,0x33,0xa5,0x32,0x37,0x71,0x52,0x41, + 0x38,0x3d,0x36,0xa4,0x32,0x6d,0x51,0x5d,0x29,0x3c,0x6b,0x33,0xb6,0x71,0x2b,0xb3, + 0x4b,0x61,0x61,0x36,0x72,0x71,0x2f,0x21,0x47,0x65,0x35,0x3c,0x33,0x54,0xa3,0x21, + 0x59,0x54,0x2f,0x39,0x6e,0x73,0x3d,0x61,0x78,0x5d,0x42,0x7e,0x35,0x66,0xa4,0x3a, + 0x49,0x54,0x63,0x39,0x2c,0x73,0x40,0x41,0x74,0x5d,0x42,0x74,0x35,0x62,0xa4,0x3e, + 0x49,0x54,0x67,0x39,0x77,0x73,0x48,0x21,0xa8,0xa7,0x4a,0x70,0x37,0xbf,0xa4,0x73, + 0x69,0x69,0x53,0x3f,0x38,0x74,0x71,0x41,0xc2,0xb7,0x4c,0xba,0x37,0x32,0x52,0xa3, + 0x69,0x69,0x4b,0x3f,0x3b,0x74,0x27,0x62,0x3e,0xbf,0x54,0x5a,0x39,0xaf,0xa5,0x4c, + 0x79,0x77,0xa5,0x42,0x2e,0x75,0x69,0x62,0x3d,0x25,0x54,0x5c,0x39,0xac,0x53,0x44, + 0x79,0xa2,0x3f,0x43,0xae,0x76,0x4d,0x22,0x58,0x4d,0x5a,0x7e,0x3b,0x65,0xa5,0xa1, + 0x39,0x25,0x4f,0x45,0xbf,0x76,0x49,0xb4,0x5b,0x35,0x5a,0xa6,0x3b,0x73,0xa5,0x7e, + 0x29,0x24,0x3b,0x45,0xb1,0x76,0x4c,0x42,0x58,0x7d,0x5a,0xba,0x3b,0x50,0x53,0x7e, + 0x39,0x24,0x3b,0x4a,0x3b,0x77,0x53,0x62,0x7d,0x25,0x64,0x40,0x3d,0xa7,0x54,0x49, + 0x79,0xa8,0x7b,0x4a,0x74,0x77,0x61,0x22,0x7d,0x5d,0x64,0x74,0x3e,0xb2,0xa6,0x6e, + 0x39,0xb2,0x6f,0x4c,0xb6,0x77,0xc1,0x22,0x2f,0x25,0x68,0x7a,0x3e,0xb6,0x54,0x67, + 0x59,0xb3,0x3f,0x4f,0x3a,0x78,0xc2,0x22,0xa3,0x26,0x49,0x4b,0x33,0xc2,0x76,0x25, + 0xb0,0x59,0x35,0x32,0x50,0x78,0xaf,0x22,0xb7,0x2d,0x72,0x46,0x41,0x5a,0xa7,0x39, + 0x5a,0x33,0x23,0x51,0x6d,0x79,0x46,0x63,0x36,0x35,0x72,0x40,0x41,0x58,0xa7,0x3a, + 0xac,0x33,0x67,0x51,0x22,0x79,0x40,0x23,0x35,0x3d,0x71,0x56,0x42,0x3c,0xa7,0x5e, + 0x7a,0x3c,0x5b,0x53,0xac,0x79,0xb5,0x63,0x44,0x6d,0x7a,0x60,0x43,0x4d,0x55,0x78, + 0x2a,0x43,0x33,0x55,0x6f,0x7a,0x47,0xb5,0x55,0x2d,0x7a,0x7a,0x43,0x59,0xa7,0x77, + 0x7a,0x43,0x57,0x55,0x7e,0x7a,0x42,0x63,0x54,0x7d,0x79,0xc2,0x43,0x5e,0x55,0x24, + 0x3a,0x5d,0xa5,0x5e,0x45,0x7c,0x56,0x63,0xaf,0xaf,0x2c,0x48,0x47,0xa7,0xa8,0x2a, + 0x5a,0x68,0x2f,0x5e,0xbe,0x7c,0x6f,0x63,0xb2,0x65,0x2a,0x5e,0x48,0x6b,0x56,0xb1, + 0xac,0x69,0x73,0x61,0x42,0x7d,0x35,0xb6,0x31,0x25,0xa3,0x56,0x49,0x37,0x57,0x50, + 0x7a,0x78,0x23,0x62,0x57,0x33,0x31,0x29,0x50,0xaf,0xa6,0xc0,0x49,0x2a,0xa9,0x67, + 0x4a,0x7e,0x23,0x64,0xa4,0x7e,0x6b,0x64,0x79,0x45,0xbb,0x4e,0x50,0x3a,0xaa,0xa7, + 0x3a,0xc2,0x4e,0x52,0xb1,0x59,0x6a,0x5b,0x3e,0x63,0x74,0x2b,0x21,0xb0,0x45,0x4b, + 0x26,0x37,0x6e,0x52,0x22,0x59,0x6d,0x5b,0x3d,0xb5,0x74,0x23,0x21,0x62,0x45,0x6f, + 0x66,0x3d,0x3e,0x56,0x33,0x5a,0x3d,0x5b,0x6b,0xad,0xa2,0xbf,0x26,0x31,0x46,0x74, + 0x66,0x61,0x2e,0x5e,0xc0,0x5b,0x76,0x3b,0xa3,0x63,0x29,0x43,0x27,0x37,0x26,0x72, + 0xa8,0x68,0x2e,0x5b,0x47,0x5c,0x38,0xad,0xa3,0x73,0x29,0x51,0x27,0xbe,0x46,0x54, + 0x36,0x69,0x2a,0x5f,0xb8,0x5d,0x50,0x7c,0x39,0x4b,0xa5,0x57,0x29,0x76,0x47,0x40, + 0x46,0x75,0x46,0x61,0xc0,0x5d,0x70,0x5c,0x33,0x5b,0xa7,0x75,0x2a,0x43,0x47,0x5e, + 0x56,0x7c,0x56,0x64,0xa4,0x5e,0x6a,0x7c,0x5f,0x7b,0xae,0x5f,0x2b,0xae,0x47,0x2c, + 0x36,0x28,0x3e,0x65,0xb8,0x5e,0xba,0x7c,0x6f,0x6b,0xb2,0x73,0x2c,0xb5,0x27,0xbf, + 0xa8,0x30,0x52,0x68,0xa5,0x5e,0xbc,0x3c,0x6e,0xbd,0xaf,0x4b,0x2d,0x62,0x48,0x41, + 0x76,0xaf,0x4e,0x6b,0x2c,0x60,0x49,0xae,0xa8,0x5b,0xbc,0x5f,0x2f,0x5b,0x48,0x2b, + 0x66,0xb9,0x2a,0x6d,0x3b,0x60,0x22,0x7c,0xba,0x33,0xc1,0xb5,0x30,0x54,0xac,0x30, + 0xa3,0x50,0xb5,0xa3,0x70,0x61,0x23,0xaf,0x48,0x6c,0x36,0x75,0xa4,0x62,0x29,0x5c, + 0xb9,0x3b,0xac,0x73,0x29,0x61,0x2e,0x5d,0x43,0x24,0x3b,0x3f,0xa7,0x5d,0x4a,0x3b, + 0x77,0x56,0x42,0x79,0xbb,0x63,0x48,0xaf,0x78,0x24,0x42,0x53,0xa7,0x64,0x2a,0x37, + 0x77,0x54,0x66,0x79,0xbe,0x63,0x4d,0x7d,0x2b,0x3c,0x48,0x5f,0xa8,0xae,0x4a,0x65, + 0x57,0x66,0x52,0x7e,0x4e,0x64,0x58,0x3e,0x4b,0x74,0x57,0x5b,0xac,0xa3,0x2b,0x66, + 0xa9,0xa1,0x7e,0x24,0x7c,0x65,0xa9,0xb0,0x4c,0x6c,0x57,0xb9,0xac,0x26,0x2b,0x67, + 0x77,0xa1,0x72,0x24,0x7e,0x65,0xae,0x5e,0x4d,0xa6,0x57,0x7e,0x57,0x65,0xb3,0xb0, + 0x4b,0x4c,0x56,0x43,0xae,0x57,0x4b,0xa9,0x67,0xa4,0x7e,0x2f,0x45,0x68,0xc2,0x7e, + 0xa4,0x4c,0x70,0xab,0xb1,0x45,0x2c,0xaa,0xa9,0xbc,0x32,0x2f,0x5d,0x68,0x74,0xb0, + 0xb3,0x44,0x6d,0x76,0x57,0x37,0x71,0x30,0x7a,0x60,0xc0,0x2e,0xb2,0x68,0x32,0x7e, + 0xb6,0x3c,0x6d,0xb3,0xb2,0x4a,0x4c,0xa7,0x67,0xbb,0x26,0x2f,0x5c,0x68,0x7c,0xb0, + 0xbb,0x74,0x6d,0x25,0xb2,0xb9,0x4c,0x71,0x47,0xc2,0x7a,0x2e,0x7d,0x68,0x6e,0xb0, + 0xac,0x54,0x77,0x63,0xb4,0x6f,0x2d,0x62,0x58,0x3d,0x42,0xa6,0x43,0x69,0xa2,0xa1, + 0x5a,0x44,0x7b,0x5d,0xb5,0x53,0x4d,0xad,0x38,0x4c,0x42,0xab,0xa6,0x6b,0x4b,0xa1, + 0x78,0x34,0x22,0x2b,0xb7,0x33,0x4e,0x63,0x48,0x5a,0x4e,0xaf,0x3e,0x6c,0x33,0xb1, + 0xa3,0x7c,0x29,0x57,0xb9,0xb3,0x2e,0x2d,0x68,0x65,0x42,0xb1,0xc0,0x6c,0x30,0xb1, + 0xb9,0x3c,0x30,0x33,0xbb,0xa2,0x2f,0x45,0xba,0x76,0x7e,0xb4,0x5a,0x6d,0x59,0xb2, + 0x39,0xb6,0xa9,0x4f,0xbc,0x77,0x2f,0x56,0xaa,0x22,0x76,0xb8,0x5b,0x6e,0x5b,0x60, + 0x5f,0xae,0xae,0x2f,0xbd,0x21,0x2f,0xb5,0x28,0x2d,0x5e,0xb9,0xb8,0x6e,0xa8,0xb2, + 0x6a,0xae,0xb1,0x59,0xbe,0x78,0x2f,0xba,0x38,0x2d,0x4e,0xba,0x35,0x6e,0xb1,0x60, + 0x7c,0xae,0xb5,0xbf,0xbf,0x2e,0x30,0x67,0x38,0xaf,0xb4,0xbe,0x6e,0x6f,0xb2,0xa2, + 0x2b,0x34,0xba,0x45,0xc0,0x2b,0x50,0x67,0x58,0xb0,0x76,0xbe,0x6b,0x6f,0xab,0xa2, + 0x2c,0xbe,0xb9,0xad,0xc0,0x2d,0x50,0x66,0x28,0xb1,0x7a,0xbe,0x78,0x6f,0xae,0x45, + 0xb2,0xb3,0x40,0xbb,0xbd,0x69,0x50,0xbf,0x38,0xc2,0x36,0xc2,0x30,0x70,0x28,0x21, + 0x36,0x25,0x33,0x40,0x31,0x59,0x51,0x61,0x39,0x3d,0x6f,0x34,0x39,0x71,0xa5,0x21, + 0x48,0xbf,0x37,0x36,0x32,0xb6,0xa3,0x70,0x59,0x39,0x4f,0x35,0x45,0x72,0x38,0x21, + 0x55,0x2d,0x3c,0x44,0x35,0x30,0xa4,0x49,0xab,0x57,0x43,0x3a,0x4a,0x73,0x58,0x21, + 0x7c,0x45,0x43,0x6a,0x35,0xa8,0xa4,0x48,0x39,0x57,0x33,0x3a,0x24,0x73,0x55,0x41, + 0x7c,0xa7,0x44,0x54,0x35,0xa8,0x52,0x38,0xbb,0x69,0xb5,0x3f,0x6c,0x74,0x79,0x21, + 0xb5,0x5d,0x4d,0xac,0x38,0x3d,0x52,0xad,0x29,0x6a,0x2f,0x3f,0x5a,0x74,0xbf,0xb4, + 0x31,0x45,0x58,0xac,0x39,0xbf,0xa5,0x50,0x39,0x78,0xb9,0x42,0xab,0x75,0x37,0x22, + 0x4f,0xbf,0x53,0x7e,0x57,0x76,0x54,0x42,0x5a,0xb7,0x5b,0x78,0x3b,0x77,0xa5,0x25, + 0x49,0x25,0xa1,0x46,0x55,0x24,0x34,0x51,0x60,0xbb,0x5b,0x26,0x3b,0x23,0xa5,0x26, + 0x39,0x25,0xa5,0x46,0x42,0x76,0x57,0x22,0x5b,0x6d,0x5a,0x26,0x3d,0x77,0xa6,0x42, + 0x79,0xa9,0xa1,0x4a,0x22,0x77,0x65,0x22,0x77,0x2d,0x67,0x64,0x3e,0x7b,0xa6,0x70, + 0x79,0xab,0x23,0x4f,0x43,0x78,0x76,0x62,0xb4,0x4d,0x6f,0x78,0x40,0x61,0x55,0x3c, + 0x3a,0x33,0xb5,0x51,0xa6,0x79,0x47,0x63,0x36,0xb7,0x72,0x76,0x41,0x5f,0xa7,0x3c, + 0x6a,0x31,0xa9,0x53,0x49,0x79,0x78,0x23,0x48,0x5d,0x76,0xb4,0x42,0x6c,0xa7,0x5f, + 0x7a,0x3c,0xa5,0x56,0x31,0x7a,0x52,0x63,0x5a,0x75,0x7b,0x5e,0x43,0x6e,0xa7,0x23, + 0x6a,0x45,0xb5,0x56,0x59,0x7a,0x50,0x43,0x5a,0x3d,0x7b,0x74,0x46,0x25,0x56,0x66, + 0x4a,0x5e,0x3f,0x5c,0x56,0x7b,0xac,0x43,0x2a,0x7d,0x2b,0x6a,0x47,0x7e,0xa8,0x2a, + 0x7a,0x67,0x7b,0x5d,0x31,0x7c,0x30,0x43,0xbb,0x5d,0x30,0xb0,0x48,0x3c,0xa9,0x34, + 0x3a,0x76,0x6f,0x62,0x62,0x7d,0x31,0xb6,0x41,0x5d,0xa7,0x4a,0x4a,0x35,0xa9,0x69, + 0x4a,0x7e,0x6f,0x66,0x61,0x7e,0x6a,0x24,0x55,0x3d,0xb0,0x36,0x4c,0xbd,0x58,0x4f, + 0xac,0xaa,0xa1,0x6a,0x6d,0xa2,0x3f,0xb6,0xb7,0x25,0xbf,0x39,0x22,0x31,0x45,0x70, + 0x66,0x38,0x26,0x52,0xbc,0x59,0x31,0x7b,0x41,0x73,0x75,0x43,0x22,0x33,0x25,0x6c, + 0x7b,0x68,0xbb,0x38,0xc2,0x46,0xa4,0xad,0x59,0x73,0x7b,0x43,0x23,0x77,0x25,0x22, + 0x56,0x48,0x72,0x56,0x63,0x5a,0x7c,0x7b,0xa6,0x2b,0x29,0xb5,0x27,0x4a,0x46,0x78, + 0xb8,0x62,0x22,0x5d,0x5a,0x5c,0x45,0xad,0xa7,0xb5,0x2a,0x5f,0x27,0x6b,0x46,0x77, + 0xa8,0x62,0x6e,0x5d,0x61,0x5c,0x51,0x3c,0x3a,0xbd,0xa5,0x6d,0x29,0x2a,0x27,0x44, + 0x76,0x76,0x6a,0x62,0x5a,0x5d,0x5a,0x25,0xa8,0x74,0x66,0x63,0x3a,0x5e,0xc1,0xae, + 0x51,0x2b,0xb2,0xad,0x2b,0x37,0x47,0xa4,0x36,0x30,0x6a,0x68,0xaf,0x5e,0xbd,0x5c, + 0x6f,0x2b,0xb0,0x79,0x2d,0x63,0x28,0x44,0x26,0xaf,0x22,0x6b,0xa5,0x60,0x48,0xae, + 0xa9,0x3b,0xbe,0x75,0x2f,0xb0,0x48,0x2c,0xb8,0xb9,0xb8,0x6e,0xa6,0x60,0x69,0x3c, + 0xa7,0x73,0xc0,0xa5,0x30,0x2c,0x28,0xb9,0x26,0xbe,0x2a,0x73,0xaa,0x61,0x2c,0x7d, + 0x46,0xae,0x36,0x5b,0xa4,0x72,0x5a,0x72,0x21,0x48,0xbf,0x39,0xbf,0x61,0x2d,0x3d, + 0x47,0x2c,0x36,0xbf,0xa4,0x24,0x29,0x63,0x37,0x3e,0x5e,0x74,0x3f,0x61,0xae,0x3d, + 0x4a,0x24,0x37,0x79,0xa4,0x7b,0x49,0x66,0xa9,0x3a,0x6a,0x75,0xac,0x63,0x4c,0xaf, + 0x78,0x7c,0x43,0x6d,0xa7,0x2a,0x4a,0x42,0x37,0x55,0x72,0x7a,0x61,0x63,0x5a,0x5d, + 0x7a,0x4c,0x43,0x5b,0xa7,0x25,0x2a,0x43,0x57,0x56,0x6a,0x7a,0x5e,0x63,0x5b,0xaf, + 0x7a,0x24,0x43,0x29,0xa7,0x7d,0x2a,0x45,0x57,0x56,0x7e,0x79,0xb8,0x63,0x2e,0xaf, + 0x28,0x74,0x47,0x2d,0xa9,0x26,0x2a,0x27,0x77,0x66,0x76,0x7d,0x54,0x66,0x38,0xb0, + 0x5f,0x74,0x55,0x33,0xad,0x40,0x4b,0x74,0x47,0x28,0xb8,0x23,0x52,0x66,0x35,0xb0, + 0x51,0x24,0x5c,0xa9,0xac,0x32,0x4b,0x71,0x27,0x28,0x66,0x23,0x42,0x66,0x45,0x3e, + 0x65,0xb6,0x5f,0x79,0xae,0xa5,0x2b,0xbb,0xa9,0x2a,0xc0,0x2f,0xbf,0x68,0xa4,0x3e, + 0xb8,0x3c,0x6e,0x7d,0xb2,0x5b,0x4c,0xb3,0xa9,0xbe,0x66,0x2f,0x2c,0x68,0x2f,0x3e, + 0xb9,0xb6,0x6f,0x4d,0xb2,0x6e,0x4c,0xb1,0x37,0xbe,0x42,0x30,0x48,0x68,0x27,0x3e, + 0xc0,0x5c,0x6a,0x2f,0xb2,0x61,0x4c,0xae,0xb9,0xbf,0xc0,0xa6,0x5d,0x69,0xaf,0x5f, + 0x4b,0x74,0x76,0x5d,0xb5,0x7e,0x2d,0x7a,0xaa,0x4b,0x2e,0xa9,0xac,0x6b,0x53,0xb1, + 0x79,0x4e,0x4c,0xbf,0x34,0xc1,0x55,0x40,0xaa,0x55,0x32,0xab,0xc2,0x6b,0x79,0x3f, + 0xa5,0x7c,0x29,0x6f,0xb9,0x43,0x4e,0x75,0xaa,0x62,0x36,0xaf,0x53,0x6c,0x57,0xa1, + 0xae,0x24,0x2c,0x79,0xb9,0x78,0x4e,0xb3,0xba,0x6d,0x62,0xb2,0x42,0x6c,0xa5,0xb1, + 0xbf,0x2c,0xa6,0x3b,0xbb,0x2e,0x4f,0x4a,0x58,0x76,0xbc,0xb4,0x26,0x6d,0x60,0x40, + 0x3e,0x34,0xa3,0xc1,0xbd,0x4f,0x4f,0x79,0x38,0x22,0xb8,0xb7,0x68,0x6e,0x3f,0xb2, + 0x5b,0xbe,0xad,0x2d,0xbd,0x27,0x2f,0xb9,0x48,0x2f,0x42,0xba,0x65,0x6e,0xb4,0xa2, + 0x6d,0x6c,0xb2,0x33,0xbe,0x21,0x4f,0xbc,0x78,0x2f,0x5a,0xbc,0xa3,0x6f,0xc0,0x40, + 0x2f,0xbe,0xba,0xb9,0xc0,0xaf,0x50,0x6e,0x78,0xb1,0xb8,0xbe,0xab,0x6f,0xbb,0xb2, + 0x2e,0x24,0xba,0x6d,0xc0,0xb7,0x30,0x64,0xaa,0xb1,0xa8,0xbe,0xb5,0x6f,0xc1,0x60, + 0x28,0x5c,0xc0,0xb1,0xc2,0x28,0xac,0x72,0x21,0x48,0xb4,0xba,0xac,0x70,0x7a,0x21, + 0x3a,0x2d,0x37,0x6a,0x32,0xa1,0xa3,0x65,0x39,0x3d,0xad,0x34,0x49,0x71,0x76,0xb3, + 0x24,0xaf,0x45,0x66,0x36,0xba,0x52,0x36,0x79,0x5a,0x67,0x3b,0x44,0x73,0x75,0x61, + 0x23,0x4d,0x45,0x74,0x36,0x3b,0x52,0x6e,0x79,0x52,0x47,0x3c,0xc2,0x73,0x32,0x21, + 0x29,0x45,0x4e,0xac,0x38,0x6c,0x52,0xaf,0x39,0x6c,0x4b,0x3f,0xbb,0x74,0x2b,0x41, + 0xb8,0x7d,0x4e,0x60,0x38,0x57,0x52,0xad,0x69,0x6b,0xb1,0x41,0x2e,0x75,0x35,0x42, + 0x41,0x6d,0x55,0x56,0x3a,0x3a,0xa5,0x53,0x29,0x79,0x5b,0x44,0x6d,0x76,0x65,0x22, + 0x5d,0x6d,0x5c,0x3a,0x3b,0x7b,0xa5,0x2a,0x69,0x28,0xa5,0x46,0x63,0x76,0x63,0x62, + 0x5d,0x45,0x5b,0xc2,0x3b,0x29,0x53,0x2b,0xab,0x27,0x67,0x46,0x67,0x76,0x5f,0x62, + 0x5e,0x2d,0x5a,0x4a,0x3d,0x58,0x54,0x3e,0x79,0xaa,0x33,0x4a,0x2f,0x77,0x6a,0x22, + 0xa1,0x55,0x64,0x2a,0x3d,0xb9,0xa6,0x4d,0x59,0xaa,0x3f,0x4a,0x2d,0x77,0x6b,0x22, + 0xa1,0x3d,0x62,0x2c,0x3e,0xa2,0xa6,0x65,0x69,0xac,0x5f,0x4d,0x41,0x78,0x38,0x62, + 0xa5,0x45,0x69,0x50,0x3f,0x45,0xa6,0x74,0xbb,0xb4,0x37,0x4d,0x4f,0x78,0x5f,0x22, + 0xa4,0xaf,0x6d,0x68,0x40,0x40,0xa6,0xa8,0x49,0xbc,0x4b,0x4f,0x5b,0x78,0x78,0x42, + 0xb4,0xb8,0x4c,0xbf,0x34,0xc2,0x73,0x55,0x29,0xbe,0x57,0x51,0xb1,0x79,0x4b,0x43, + 0x37,0xaf,0x72,0xb2,0x41,0x49,0x55,0x56,0x2a,0x3a,0x4f,0x53,0x62,0x79,0xa4,0xb5, + 0x49,0x7d,0x77,0x48,0x42,0x72,0xa7,0x69,0x2a,0x46,0xb1,0x56,0x68,0x7a,0x6b,0x23, + 0x5b,0xa7,0x7c,0x7a,0x43,0xa3,0xa7,0x27,0x6a,0x46,0xb5,0x56,0x23,0x7a,0x62,0xb5, + 0x60,0x35,0x7b,0xa8,0x43,0x27,0xa8,0x67,0x4a,0x59,0x43,0x5f,0x37,0x7c,0x72,0xb5, + 0xb3,0x7d,0x2e,0x72,0x48,0x77,0xa8,0xb4,0x6a,0x6d,0x6f,0x5f,0x52,0x7d,0x3b,0xb6, + 0x32,0xa7,0xa5,0xaa,0x49,0x36,0x57,0x53,0x6a,0x79,0x7b,0x63,0x49,0x7d,0xba,0x64, + 0x4e,0x35,0xaa,0x70,0x4a,0xb0,0xa9,0x6b,0x4a,0xa1,0x27,0x64,0x23,0x7d,0xb9,0x64, + 0x4c,0x6d,0xae,0x2e,0x4b,0xba,0xa9,0x75,0xbc,0x2b,0x47,0x67,0x75,0x7e,0x2e,0xb6, + 0x67,0xbf,0xaf,0x3e,0x4e,0x35,0xaa,0x65,0xa3,0x51,0x3c,0x33,0x34,0xa1,0xad,0x64, + 0xae,0xb7,0xbe,0x4e,0x4f,0x25,0x47,0x3b,0x5a,0xbb,0x7a,0x53,0x49,0x59,0x76,0x3b, + 0x42,0x33,0x75,0x5b,0x22,0x71,0x45,0x66,0x56,0x3f,0xb8,0x54,0x42,0x5a,0x55,0xad, + 0x60,0x4b,0x7a,0x63,0x27,0x66,0x26,0xa2,0x46,0x64,0x56,0x5d,0xa7,0x5c,0x4f,0x3b, + 0xa9,0x23,0x2a,0x21,0x27,0x63,0x26,0xa1,0x46,0x64,0x6e,0x5d,0xaf,0x5c,0x49,0x7b, + 0xaa,0x63,0x2c,0x33,0x29,0x30,0x47,0x49,0xb8,0x77,0x46,0x61,0xb1,0x5d,0x78,0x5c, + 0x64,0x53,0xb0,0xb3,0x2c,0xbb,0x47,0xa4,0xa8,0xa5,0x5a,0x70,0x63,0x61,0xa7,0x5d, + 0x4b,0x7c,0x37,0x45,0xa4,0xa9,0x29,0x67,0xa9,0x3e,0xbc,0x74,0x7b,0x61,0xb5,0x3d, + 0x44,0x34,0x3c,0x3b,0xa7,0xa3,0x2a,0x4a,0x67,0x56,0xb0,0x7a,0x6d,0x63,0x67,0x7d, + 0x7d,0x54,0x44,0x3f,0xa7,0xa4,0x4a,0x4a,0x27,0x56,0xc0,0x7a,0x23,0x63,0x66,0x3d, + 0x7c,0xb6,0x42,0xab,0xa8,0xa6,0x4a,0x2a,0x47,0x66,0xa8,0x7e,0x75,0x64,0x62,0xaf, + 0xae,0x74,0x49,0xbd,0xad,0x4d,0x4b,0x78,0x57,0x23,0xa8,0x25,0xae,0x66,0x47,0x3e, + 0x54,0x7c,0x5a,0x39,0xad,0x62,0x4b,0x7d,0x47,0x23,0x5e,0x25,0x78,0x66,0x3e,0x5e, + 0x56,0xbe,0x5a,0x41,0xad,0x5d,0x2b,0xb1,0xb9,0x29,0x46,0x2a,0x73,0x68,0xaf,0x5e, + 0xbd,0x3e,0x4c,0xbf,0x34,0xc1,0x58,0x29,0x67,0xc0,0x42,0x30,0x72,0x68,0xac,0xb0, + 0xbe,0x4c,0x70,0x31,0xb2,0x2d,0x2c,0xb9,0xa9,0xc0,0x4b,0x7d,0xb2,0x21,0x4c,0xb9, + 0x77,0xc0,0xbc,0xa6,0x7a,0x69,0xb7,0x3f,0x4e,0x44,0x78,0x41,0xb4,0xad,0x2d,0x68, + 0x48,0x3f,0x6a,0xa6,0x2a,0x69,0xba,0x3f,0x4d,0x4c,0x78,0x39,0xb4,0x65,0x4d,0xb6, + 0x78,0x56,0x3e,0xac,0x49,0x6b,0x58,0xb1,0x7a,0xb6,0x24,0x75,0xb7,0x37,0x4e,0x52, + 0x28,0x5a,0x22,0xaf,0x69,0x6c,0x3f,0xa1,0xb1,0x6c,0x2c,0x7b,0xb9,0x21,0x4e,0xb6, + 0xaa,0x6d,0xc0,0xb2,0x56,0x6c,0xbd,0x40,0x3e,0x24,0xa6,0x29,0xbb,0xb6,0x2f,0x45, + 0xad,0x64,0xa8,0x4b,0xbd,0x58,0x4f,0x79,0xaa,0x23,0x62,0xb7,0x7c,0x6e,0x5f,0xa2, + 0x5e,0x7c,0xaf,0x53,0xbf,0xa7,0x2f,0xbf,0x78,0x2f,0xb0,0xba,0xa4,0x6e,0xbd,0x60, + 0x6f,0x64,0xb2,0x5b,0xbf,0xae,0x50,0x32,0x5b,0x61,0x65,0x36,0xbf,0x71,0x75,0x60, + 0xa3,0x74,0xbb,0x67,0xc1,0x42,0x30,0x74,0xaa,0xb3,0xb8,0xbf,0x3a,0x70,0x35,0x40, + 0xaa,0x7c,0xc1,0xa7,0xc2,0xbb,0x50,0xc1,0x48,0xc2,0x6a,0xc1,0x59,0x71,0x5d,0xb3, + 0x4b,0x7d,0x37,0x22,0x32,0xc0,0xa3,0x52,0x39,0x43,0xa5,0x35,0x2a,0x72,0x43,0x21, + 0x26,0x7d,0x46,0x42,0x36,0x65,0x52,0x5e,0x49,0x5b,0x3f,0x3b,0x7a,0x73,0x2c,0x61, + 0x27,0x25,0x46,0x6e,0x36,0x72,0xa4,0xb6,0xbb,0x6d,0xbd,0x40,0x53,0x74,0xa6,0x61, + 0xb9,0x3d,0x51,0x26,0x3a,0x4a,0x53,0x55,0x29,0x7a,0x5f,0x43,0x52,0x75,0xad,0x22, + 0x4b,0x66,0x4b,0x44,0xa9,0x76,0x6f,0x22,0x5f,0x2d,0x5c,0xa6,0x3b,0x31,0x53,0xbe, + 0x79,0x28,0x4f,0x46,0xb1,0x76,0x70,0x22,0x51,0x3d,0x5d,0x36,0x3c,0xbe,0xa5,0x2e, + 0x29,0x28,0xa1,0x46,0xb9,0x76,0x70,0x42,0x57,0x2d,0x62,0x2c,0x3d,0x7a,0xa6,0x4f, + 0x79,0xa5,0x43,0x4d,0x62,0x78,0x3e,0x42,0xa7,0x45,0x69,0xb6,0x3f,0x4b,0xa6,0x78, + 0x69,0xbc,0x6f,0x4f,0x69,0x78,0x7d,0xb4,0xbd,0x75,0x6f,0x7e,0x57,0x78,0x2e,0x63, + 0x38,0x55,0x72,0xb4,0x41,0x6a,0x55,0x40,0x7a,0x34,0xad,0x51,0x65,0x79,0xa7,0x23, + 0x43,0x35,0x7d,0xb0,0x44,0xbf,0x55,0x77,0x6a,0x4a,0x6f,0x57,0x53,0x7a,0xc2,0x43, + 0x53,0x2d,0x7d,0x3a,0x44,0x3e,0x55,0xb7,0xb2,0xb3,0x40,0xc1,0x56,0x7a,0x7a,0x23, + 0x63,0x3d,0x7d,0x5c,0x44,0x48,0x55,0xa6,0x4a,0x4e,0xb1,0x5c,0x58,0x7c,0x5b,0x43, + 0xad,0x25,0x2c,0x5c,0x47,0x38,0x56,0xa5,0x4a,0x69,0x2b,0x5f,0x3e,0x7c,0x75,0xb5, + 0xb3,0xbf,0x2e,0x68,0x48,0x5f,0x56,0xaf,0xac,0x6d,0xa5,0x5f,0x61,0x7d,0x3f,0x44, + 0x34,0x2d,0xa3,0xb2,0x49,0x47,0xa9,0x38,0x4a,0x72,0x43,0x61,0x41,0x7d,0x7b,0x44, + 0x42,0xb7,0xa7,0x68,0x4a,0x41,0xa9,0x54,0x5a,0xa2,0x67,0x64,0xa5,0x7d,0xbf,0x64, + 0x4c,0x75,0xad,0xbc,0x4b,0xc0,0xa9,0x2e,0x2a,0x22,0x53,0x68,0x42,0x7e,0x76,0x64, + 0x23,0x4d,0xb7,0x7e,0x4e,0x45,0x58,0x53,0x5a,0xab,0xb1,0x6c,0x29,0xa2,0x66,0x44, + 0xab,0xaf,0xc1,0x6a,0x50,0x46,0x45,0x54,0xb8,0x3a,0x36,0x53,0x63,0x59,0xc0,0x5b, + 0x59,0xb5,0x2b,0x31,0x27,0x79,0x46,0x21,0x26,0x65,0x4f,0x7d,0x3e,0x32,0x70,0x4b, + 0x69,0xbd,0x2c,0x5b,0x29,0xac,0x27,0x4b,0x46,0x77,0x6a,0x61,0x61,0x5e,0x7b,0x7c, + 0x63,0x53,0xb0,0xb7,0x2c,0x4c,0x28,0x3e,0x36,0xa8,0xb4,0x6c,0x6b,0x5f,0xb2,0x5c, + 0x2c,0x73,0xb8,0x27,0x2f,0x57,0x48,0xba,0x26,0xc1,0x56,0x74,0x73,0x61,0xb4,0xaf, + 0x4f,0x64,0x38,0x47,0xa4,0x4a,0x49,0x77,0x77,0x47,0x6a,0x7a,0x7b,0x63,0x67,0x3d, + 0xa1,0x34,0x44,0xa3,0xa7,0xb6,0x4a,0x4e,0x77,0x58,0x76,0x7a,0xa5,0x63,0x6c,0x5d, + 0x79,0x44,0x47,0x37,0xa8,0xaf,0x2a,0x2b,0xa9,0x65,0x32,0x26,0x45,0x66,0x52,0x3e, + 0x5b,0x44,0x5b,0x69,0xad,0xb0,0x2b,0x25,0x67,0x24,0xbc,0x26,0x48,0x66,0x55,0x3e, + 0x5b,0x34,0x5a,0x69,0xae,0x28,0x4b,0xbe,0x57,0x29,0x52,0x2a,0x29,0x68,0xbf,0x5e, + 0xc0,0xbe,0x70,0x71,0xb2,0xb0,0x2c,0xbf,0x77,0xc2,0x5e,0x30,0xb2,0x68,0xa3,0x3e, + 0xc1,0xa6,0x70,0x73,0xb2,0xb7,0x2c,0xbd,0x27,0xc2,0x6a,0x30,0xb3,0x68,0xbc,0xb1, + 0x4e,0xbe,0x78,0x2d,0xb4,0xb6,0x4d,0x6d,0x28,0x40,0x66,0xa6,0xaf,0x69,0xc0,0x3f, + 0x4f,0x34,0x75,0xad,0xb5,0x54,0x4d,0xa1,0x38,0x4c,0x7a,0xaa,0x5a,0x6b,0x5d,0x3f, + 0x7b,0x66,0x4a,0xac,0x59,0x6b,0x42,0xa1,0xa7,0x44,0x2a,0x49,0xb9,0xb8,0x4e,0x27, + 0x68,0x6e,0x5a,0xb2,0x61,0x6c,0xae,0x45,0xb2,0xb3,0x40,0xc1,0x42,0x24,0x2e,0xb8, + 0x28,0x70,0x6e,0xb2,0xba,0x6d,0x6f,0xa2,0x40,0x54,0xa6,0x2f,0xbb,0x31,0x2f,0x65, + 0xba,0x7e,0x5a,0xb5,0x28,0x6e,0x60,0xb2,0x51,0x6c,0xb3,0x4b,0xbf,0xc2,0x4f,0xc1, + 0xba,0x29,0x62,0xbc,0xa3,0x6e,0xbb,0x40,0x7e,0xa6,0xb6,0x6d,0xbf,0xb4,0x50,0x4c, + 0xba,0xa9,0xa8,0xbc,0x2e,0x6f,0x3c,0xa2,0xa6,0xb6,0xbc,0x3d,0xc1,0x4c,0x30,0x77, + 0x58,0xb5,0x3e,0xbf,0x5c,0x70,0x40,0x60,0xa6,0x3c,0xbc,0x3b,0xc1,0x51,0x30,0x77, + 0x78,0xb4,0xa8,0xbf,0x79,0x70,0x3e,0x60,0xa6,0xbe,0xbb,0x2f,0xc1,0x53,0x50,0xc1, + 0x68,0xc2,0xb4,0xc1,0xb4,0x71,0x4d,0x21,0x38,0x35,0x32,0x30,0x31,0x6a,0xa3,0x49, + 0xab,0x3f,0x3f,0x34,0x6b,0x71,0xb3,0x21,0x4d,0x35,0x37,0xc2,0x32,0x2f,0xa3,0x6a, + 0x49,0x3e,0xbd,0x34,0xab,0x71,0x73,0x61,0x58,0x3d,0x3b,0x26,0x36,0x24,0x32,0x31, + 0x5d,0x3d,0x43,0x3b,0xc1,0x73,0xaa,0x41,0x2a,0x3d,0x47,0x5a,0x36,0x28,0xa4,0x64, + 0x69,0x5d,0x4f,0x3c,0x59,0x73,0xa5,0x21,0x27,0x6d,0x4c,0x32,0x38,0xab,0xa4,0xb9, + 0x69,0x6f,0x7b,0x40,0x77,0x74,0xad,0xb3,0xbe,0x2d,0x4f,0xb8,0x38,0xa7,0x52,0xbc, + 0x69,0x6a,0xb1,0x43,0x67,0x75,0x22,0x42,0x44,0x75,0x55,0xbe,0x3a,0x27,0x53,0x52, + 0xab,0x29,0x2f,0x47,0x4a,0x76,0x77,0xb4,0x61,0x25,0x5d,0x72,0x3c,0x3f,0xa5,0xa3, + 0x79,0x29,0x73,0x47,0x72,0x77,0x40,0xb4,0x78,0x4d,0x64,0xb8,0x3d,0xc1,0xa6,0x50, + 0x79,0xaa,0xa5,0x4a,0xbe,0x77,0x5b,0x42,0x25,0x7d,0x6a,0x48,0x3f,0x55,0x54,0x7a, + 0x59,0xb5,0x43,0x4f,0x6f,0x78,0x21,0x22,0xb7,0x5d,0x6d,0xc2,0x40,0x70,0xa7,0x40, + 0x2a,0x35,0x43,0x52,0x32,0x79,0x51,0x23,0x39,0x35,0x71,0xb6,0x42,0x22,0xa7,0x64, + 0xac,0x3d,0xb5,0x53,0x7e,0x7a,0xa3,0x23,0x63,0x75,0x7e,0xae,0x44,0x56,0x55,0xaf, + 0x2a,0x4b,0x5f,0x57,0x49,0x7a,0x30,0x23,0x67,0xa7,0x7e,0x68,0x44,0x69,0x55,0xae, + 0x5a,0x4b,0x23,0x58,0x7b,0x7b,0xb5,0xb5,0x2d,0xa7,0x28,0x42,0x46,0xa6,0x56,0x67, + 0x4a,0x66,0xa5,0x5e,0x27,0x7c,0x38,0x43,0xb4,0xb7,0x2f,0x72,0x48,0xac,0xa8,0xab, + 0xac,0x76,0x2b,0x61,0x66,0x7d,0x71,0x64,0x5b,0x68,0x29,0x38,0xc2,0x31,0xc2,0xb6, + 0x4b,0xb7,0xb1,0x28,0x4c,0x26,0x57,0xb8,0x2a,0x2a,0xb1,0x6b,0x70,0xa1,0xa5,0xb6, + 0xaf,0xbf,0xbe,0x6e,0x4f,0xb1,0x58,0x2c,0x2a,0xb9,0xb1,0x6d,0x6f,0xa2,0x23,0xb6, + 0xc1,0x43,0xa1,0x5b,0x27,0x28,0x46,0x2c,0x46,0x77,0xa4,0x61,0x69,0x5e,0x28,0x5c, + 0xc1,0x4c,0x35,0xa9,0xa5,0xbd,0x4a,0x4f,0x57,0x58,0xbc,0x79,0x37,0x63,0xc1,0x7d, + 0xa2,0x2c,0x44,0xb1,0xa7,0x2c,0x2a,0x6c,0x77,0x62,0x4a,0xa2,0x64,0x66,0x5c,0x3e, + 0x5d,0x4c,0x5b,0xb9,0xad,0x2d,0x4b,0x29,0x57,0x26,0x6a,0x26,0x60,0x66,0x48,0xb0, + 0x68,0x74,0x5f,0x2f,0xae,0x35,0x2d,0x32,0x68,0x38,0xbc,0x2f,0x37,0x69,0x6f,0x7e, + 0xb4,0x3c,0x71,0x4f,0xb3,0xc0,0x2d,0x70,0x78,0x40,0xbc,0xa6,0xbb,0x69,0x2e,0xb1, + 0x68,0x5c,0xa1,0xa1,0xb7,0x30,0x2e,0x33,0x28,0x5b,0x2a,0xaf,0x29,0x24,0x34,0x51, + 0x60,0xa7,0x2e,0x55,0xb9,0x2f,0x2e,0xba,0xba,0x6e,0xb0,0xb2,0x6d,0x6c,0x74,0xa2, + 0x4b,0xb6,0xa8,0x73,0xbd,0x62,0x4f,0x7d,0x38,0x27,0x42,0xb8,0x76,0x6e,0x3b,0xb2, + 0x73,0x6c,0xb3,0x25,0xbf,0x40,0x50,0x35,0x68,0xa4,0x36,0xbc,0xaa,0x6f,0x46,0x40, + 0xa8,0x5c,0xbc,0x6d,0xc1,0x5e,0x50,0x7d,0x48,0xb5,0x7a,0xbf,0x2a,0x70,0x43,0x40, + 0xc2,0x7c,0xc2,0xb9,0xc2,0x6c,0xa3,0x3f,0xab,0x37,0x67,0x34,0xa2,0x71,0x73,0x21, + 0x5d,0xbf,0x47,0x24,0x36,0xa9,0xa4,0x6b,0x39,0x5f,0x57,0x3c,0x61,0x73,0xb1,0x21, + 0x2c,0x7d,0x47,0x7e,0x57,0x73,0xbe,0xb3,0xc1,0xa7,0x50,0xa8,0x38,0xb3,0x52,0xb3, + 0xab,0x7e,0x7b,0x44,0xb7,0x75,0x7b,0x42,0x64,0x7d,0x5d,0x2a,0x3c,0x46,0xa5,0xad, + 0x39,0xa3,0x47,0x4b,0x2a,0x78,0x49,0xb4,0xa9,0x65,0x6a,0x7a,0x3f,0x60,0xa6,0x7b, + 0x29,0xb9,0x33,0x4d,0x7a,0x78,0x24,0x62,0xbb,0x6d,0x73,0x38,0x41,0x75,0x55,0x46, + 0x6a,0x3e,0x63,0x54,0x21,0x79,0xa8,0x43,0x69,0x25,0xa1,0x5e,0x44,0x22,0x55,0xb9, + 0x6a,0x4e,0x6b,0x58,0x5d,0x7a,0xaf,0x43,0x6a,0x75,0xa1,0x66,0x44,0x7c,0xa7,0xbd, + 0x7a,0x5f,0x2b,0x5c,0x21,0x7b,0xb8,0x63,0x2f,0x45,0x2c,0x6a,0x47,0xaf,0xa8,0x2c, + 0x6a,0x67,0xbd,0x5d,0x55,0x7c,0xab,0xb5,0xbd,0x66,0x4b,0x60,0x57,0xbe,0x31,0xc2, + 0xb3,0x3e,0x67,0x60,0xbc,0x7c,0x24,0x64,0x35,0xbf,0xa4,0x4a,0x49,0x58,0x57,0x3b, + 0x6a,0x76,0xad,0x61,0x6f,0x7d,0xa2,0xb6,0x44,0xaf,0xa7,0x2e,0x4a,0x23,0xa9,0x52, + 0xac,0x27,0x37,0x65,0x34,0x7e,0x72,0x24,0x65,0xbf,0xb0,0x4e,0x4c,0x57,0xa9,0xbc, + 0x5a,0x2f,0x57,0x68,0xc0,0x7e,0xb5,0x44,0x6d,0x35,0xb0,0x54,0x4e,0x5f,0xaa,0x5d, + 0x3a,0xb2,0x33,0x6d,0x46,0xa2,0x7c,0x44,0xb6,0x4b,0x77,0x7b,0x27,0xb2,0x47,0x4c, + 0xb8,0x78,0x3a,0x62,0xb8,0x5e,0xa7,0x44,0xc1,0xa5,0xbe,0xa7,0xa4,0xbe,0x29,0x6f, + 0xa9,0x40,0x26,0x73,0x31,0x63,0x74,0xaf,0x2f,0x34,0x4c,0x6b,0xa9,0xb5,0x2b,0x2c, + 0x27,0x27,0xac,0x26,0x24,0x66,0x37,0xb1,0x32,0xbe,0x71,0x21,0xb3,0x3e,0x4d,0x34, + 0x28,0x31,0x26,0xa3,0x49,0x69,0x32,0xa1,0x51,0xae,0x7a,0x61,0xb5,0x22,0x4d,0xa2, + 0x3b,0x61,0x65,0x36,0xbf,0xa2,0x2f,0xa1,0x6c,0xae,0x24,0x45,0xb7,0xb4,0x2e,0x41, + 0xba,0x5d,0x4a,0xad,0x30,0x6c,0x49,0x5f,0xaf,0x6c,0x2d,0x63,0xbc,0x29,0x2f,0x5e, + 0x68,0x24,0x56,0xb7,0x6f,0x6f,0x40,0xb2,0x74,0x74,0xb3,0xbd,0xbf,0x4c,0x30,0x39, + 0x38,0xa6,0x5e,0xbf,0xb0,0x70,0x4f,0x60,0xa9,0x7c,0xbc,0x25,0xc1,0x73,0x30,0xb1, + 0x68,0xb8,0x2a,0xc2,0x6a,0x70,0xb1,0x40,0xc0,0x75,0x38,0x24,0x36,0xb1,0xa4,0x6e, + 0x59,0x5f,0x27,0x3c,0xa7,0x73,0xbc,0x61,0x30,0x6d,0x48,0xba,0x38,0x33,0xa5,0x32, + 0x29,0x78,0xa9,0x40,0xc1,0x74,0x29,0x42,0x46,0xbf,0x56,0x5e,0x3a,0x60,0x53,0x59, + 0x49,0x2b,0xb5,0x47,0x29,0x76,0x23,0x62,0x66,0x25,0x5e,0x4e,0x3c,0x58,0xa5,0xab, + 0xab,0x2b,0xa9,0x47,0x39,0x77,0x73,0x22,0x28,0xa7,0x6a,0xa8,0x3f,0x74,0xa6,0xa1, + 0xab,0xb6,0x63,0x4d,0xbd,0x78,0x4e,0x42,0xa8,0x55,0x6e,0x4e,0x40,0x27,0xa6,0xb4, + 0x5a,0x35,0x5f,0x52,0x62,0x79,0xae,0x23,0x4f,0x3d,0xa2,0x54,0x44,0xb2,0xa7,0xbb, + 0x6a,0x4f,0x53,0x58,0x2d,0x7a,0xba,0x63,0x6e,0x65,0xa2,0x76,0x44,0xa9,0xa7,0xbe, + 0x3a,0x50,0x43,0x58,0x28,0x7a,0xbd,0x43,0x6e,0xa7,0x27,0xac,0x47,0xb4,0xa8,0x76, + 0x5a,0x6a,0x4f,0x5f,0xa4,0x7c,0xba,0x43,0xc2,0x2d,0x2e,0x6e,0x57,0x37,0x71,0x30, + 0xb4,0x56,0x4c,0x5b,0x32,0x31,0x47,0x44,0x36,0x2d,0xa5,0xbc,0x49,0x53,0xa9,0x5a, + 0x4a,0x79,0x2b,0x65,0x4a,0x7e,0x34,0x64,0x6f,0x75,0xb2,0xa2,0x4c,0xae,0x57,0xbe, + 0x6a,0x2d,0x57,0x6b,0xa4,0xa1,0x2d,0x24,0x27,0x25,0xb8,0x2a,0x4e,0x7a,0x58,0x23, + 0xbc,0xb7,0xa1,0x6e,0x65,0xa2,0x6f,0x3b,0x5b,0x73,0x2b,0xb1,0x27,0x2c,0x46,0x27, + 0x76,0x66,0xb4,0x5e,0xa7,0x5d,0x41,0x3c,0x65,0x4b,0xb0,0xbd,0x2c,0xbe,0x47,0xbc, + 0x46,0xb2,0xa4,0x74,0xbd,0x61,0x77,0x3d,0x22,0x54,0x45,0x63,0xa8,0xb6,0x4a,0x75, + 0xb9,0x70,0x62,0x25,0x6f,0x69,0x3d,0x3f,0x34,0x44,0x71,0x51,0xb5,0x6e,0x2d,0xbc, + 0xba,0x54,0x3a,0xaf,0xa8,0x6c,0x3a,0xa2,0x43,0x24,0xa7,0x29,0xbc,0x46,0x2f,0x69, + 0xba,0x28,0x2a,0xb7,0x7d,0x6f,0x41,0xb2,0x75,0xae,0xb6,0x2f,0xbf,0xbb,0x50,0x46, + 0xab,0xbe,0xb8,0xbf,0xbf,0x24,0x34,0x51,0x60,0xbb,0x57,0x35,0xc1,0x57,0x50,0xa3, + 0x39,0x37,0xad,0x33,0xa9,0x72,0x6f,0xb3,0x30,0x7d,0x45,0x54,0x37,0xc0,0x52,0x51, + 0xab,0x61,0x5f,0x3d,0x38,0x74,0x33,0x21,0xa4,0x55,0x51,0x5c,0x39,0x63,0x53,0x68, + 0x59,0xa2,0xa5,0x43,0xb3,0x76,0x2c,0x42,0x67,0x65,0x5e,0x30,0x3c,0x60,0xa5,0xb0, + 0x69,0x29,0x6f,0x4b,0x3e,0x77,0xa5,0x62,0xab,0x3d,0x6b,0x3c,0x3f,0x72,0x54,0x27, + 0x7a,0x3f,0x5f,0x53,0x49,0x7b,0x31,0xb5,0xa2,0xaf,0xa2,0x74,0x46,0x49,0x56,0xbb, + 0x7a,0x73,0x7b,0x63,0x22,0x7d,0xad,0x44,0x43,0x2d,0xab,0xa4,0x4b,0x4c,0xa9,0x77, + 0x2a,0x21,0xa1,0x69,0x3e,0xa1,0x4f,0x64,0xae,0x5d,0xbe,0x22,0x4f,0x48,0xaa,0xae, + 0xbc,0xbe,0x3f,0x6f,0xa4,0xa2,0x7e,0xad,0x44,0x73,0x78,0x33,0x27,0xa3,0x46,0x29, + 0x56,0x61,0x22,0x63,0xaf,0x5f,0x64,0x5c,0x30,0xa6,0x38,0xbf,0xa4,0x3f,0x2a,0x54, + 0x77,0x5d,0x26,0x7c,0xac,0x64,0x6f,0xb0,0x51,0x54,0x60,0xb7,0xad,0x2a,0x4b,0xac, + 0x78,0x31,0xb0,0xa8,0x58,0x6a,0x66,0xa1,0x7e,0x54,0x22,0x23,0xb9,0xac,0x2e,0xad, + 0x38,0xa7,0x6e,0xc0,0x3d,0x70,0x60,0x40,0xb4,0x6d,0x49,0x2c,0x37,0x3e,0x52,0x75, + 0x69,0x72,0x3b,0x41,0x52,0x75,0x38,0xb4,0x37,0x25,0x56,0x2a,0x3a,0x2f,0xa5,0x5f, + 0x79,0x2e,0x4c,0xbf,0x34,0xc2,0x79,0x62,0x68,0xaf,0x5d,0x58,0x3e,0x76,0x54,0x22, + 0x29,0xb7,0x5f,0x4d,0x30,0x78,0xae,0xb4,0xbe,0x25,0x75,0x2e,0x45,0x4a,0xa8,0x37, + 0x2a,0x52,0xad,0x59,0x69,0x7b,0x3d,0x23,0x73,0x2d,0x24,0x76,0x46,0x4d,0x56,0xaa, + 0x4a,0x6a,0x7b,0x60,0xc2,0x7c,0x2a,0xb6,0x37,0x5d,0xa4,0x60,0x4a,0x53,0xa9,0x79, + 0x6a,0x23,0x33,0x65,0x6f,0x7e,0x64,0xb6,0x56,0x55,0xb0,0x54,0x4c,0x47,0xaa,0x35, + 0x2a,0xa8,0x6f,0x6c,0x65,0xa1,0xb3,0x24,0x2c,0x75,0xb9,0x6c,0x4f,0xba,0xaa,0x74, + 0x4a,0xbd,0xb5,0x6f,0xa9,0xa2,0x2a,0xb6,0xb6,0xa5,0x75,0xb9,0x22,0xa7,0x46,0x2a, + 0x56,0x67,0x56,0x5d,0xc2,0x5e,0xb8,0x3c,0x2e,0x43,0xb8,0x4d,0x30,0xc2,0x29,0x55, + 0x77,0x59,0x5a,0x27,0xa4,0x66,0x25,0x5f,0x36,0x74,0x73,0x31,0xb6,0xb5,0x4e,0x42, + 0x58,0x5c,0x6a,0xaf,0xaf,0x24,0x34,0x51,0x60,0xbb,0x47,0xa9,0xbc,0x61,0x50,0x3c, + 0xba,0xa6,0xbd,0x31,0xc0,0x71,0x68,0xb3,0x48,0x45,0x56,0x30,0x3a,0xc1,0x53,0x61, + 0x39,0x29,0x2b,0x4b,0x48,0x77,0xa7,0x62,0xac,0x4d,0x6a,0x74,0x40,0x55,0x55,0x59, + 0x7a,0x53,0x77,0x59,0x23,0x7b,0x40,0x63,0xb6,0xb7,0x30,0x38,0x48,0xa3,0xa8,0xb0, + 0x6a,0x73,0x27,0x63,0x26,0x7e,0x44,0x64,0x5e,0x45,0xab,0x66,0x4c,0x55,0xaa,0x37, + 0x4a,0xa4,0xbd,0x69,0x6c,0xa1,0x65,0xb6,0x2e,0x6d,0xb7,0xac,0x50,0x67,0x58,0xb0, + 0x5a,0xbf,0x23,0x70,0x7d,0x5c,0x66,0x7c,0x21,0x34,0x39,0x77,0xa8,0x46,0x2a,0x56, + 0x57,0x60,0x62,0x7d,0x41,0x66,0xb9,0xa1,0x7d,0x24,0xac,0x79,0xbf,0x62,0x30,0x3d, + 0x28,0xa7,0x7e,0xc0,0x47,0x70,0x56,0x40,0xb1,0x45,0x35,0xb4,0x37,0x50,0xa4,0x77, + 0x49,0x75,0x5b,0x48,0x41,0x79,0x54,0xb5,0x37,0x4d,0x22,0x72,0x45,0x63,0x56,0x3e, + 0x3a,0x6c,0x6f,0x61,0x2d,0x7d,0x27,0x24,0x56,0x2d,0xac,0x60,0x4b,0xac,0xa9,0x2b, + 0x7a,0x27,0x77,0x65,0x25,0xa1,0x46,0xb6,0x76,0x65,0xb6,0x7c,0x4e,0xa2,0xaa,0x2f, + 0x7a,0xb9,0x76,0x5e,0xac,0x5d,0x3c,0x3d,0x26,0xb6,0x72,0xa5,0xb9,0x6a,0x4e,0x2b, + 0xba,0x6b,0x72,0xc2,0x39,0x70,0x7e,0x22,0x34,0x7d,0x52,0x76,0x39,0x7a,0xa5,0xb5, + 0x5b,0x68,0xbb,0x38,0xc2,0x31,0xa8,0x22,0x68,0x6d,0x39,0x68,0x3e,0xa3,0x55,0x5e, + 0x5a,0x53,0x3b,0x5f,0x79,0x7c,0x22,0x43,0xbf,0x65,0x2e,0xa4,0x49,0x60,0xa9,0x75, + 0x5a,0x2b,0xa5,0x67,0x30,0xa1,0x6f,0x64,0x30,0x25,0xb8,0xbc,0x4f,0x6f,0xaa,0x71, + 0xbc,0xbe,0x2f,0x6f,0xb5,0xa2,0xbf,0xae,0xa4,0x64,0x5e,0x77,0xb3,0x67,0x50,0x3e, + 0xaa,0xa4,0xb1,0x42,0x71,0x75,0xab,0x62,0xaf,0x3d,0x76,0xa8,0x45,0x69,0x56,0x3f, + 0x4a,0x73,0xbd,0x64,0x27,0x7e,0x39,0xb6,0x6d,0xa7,0xbc,0x79,0xb3,0xb0,0x4e,0xb6, + 0x59,0x2c,0x2f,0x5a,0x7a,0x7c,0x29,0x24,0x57,0x5d,0xad,0x69,0xc1,0xa1,0x53,0xb8, + 0x59,0xb9,0x47,0x53,0xc0,0x7b,0x50,0x23,0x78,0xa7,0x22,0xb2,0x4d,0x6d,0x58,0x4f, + 0xbc,0xb5,0x23,0x49,0xc2,0x7b,0x37,0x24,0xa5,0x74,0x7a,0x26,0x4b,0x49,0xa9,0xa6, + 0x6a,0xb3,0xbd,0x6d,0xb5,0x24,0x34,0x51,0x60,0xa7,0xa1,0xa6,0xb9,0x2a,0x6e,0x27, + 0x70,0x66,0x24,0xb0,0x66,0xbe,0x5e,0x2f,0xae,0x70,0x2b,0xb4,0xb9,0x2d,0xc0,0x28, + 0x60,0x66,0xb2,0xb0,0x6d,0xbe,0x60,0x6f,0xae,0xba,0x2b,0xc2,0xb9,0xa3,0x6e,0x29, + 0x50,0x67,0x3c,0xb0,0x74,0xbe,0x62,0x4f,0xaf,0x60,0x2c,0x3e,0xb9,0xa6,0xc0,0x2a, + 0x40,0x67,0x58,0xb0,0x7b,0xbe,0x63,0xc1,0xaf,0xaa,0x2c,0x4c,0xb9,0xaa,0x6e,0x2a, + 0xc2,0x67,0x74,0xb0,0x22,0xbe,0x65,0x2f,0xb0,0x50,0x2c,0x5a,0xb9,0xad,0xc0,0x2b, + 0xb2,0x67,0x30,0xb0,0x29,0xbe,0x67,0x6f,0xb0,0x28,0x2c,0x68,0xb9,0xb1,0x6e,0x2c, + 0x30,0x67,0xbe,0xb0,0x30,0xbe,0x69,0x4f,0xb1,0x40,0x2c,0x76,0xb9,0xb4,0xc0,0x2d, + 0xa2,0x68,0x48,0xb0,0xa9,0xbe,0x6a,0xc1,0xb1,0x78,0x2c,0x24,0xb9,0xb8,0x6e,0x2e, + 0x70,0x68,0x64,0xb0,0xb0,0xbe,0x6c,0x2f,0xb1,0xc2,0x2c,0xa4,0xb9,0xbb,0xc0,0x2f, + 0x60,0x68,0xa2,0xb0,0xb7,0xbe,0x6e,0x6f,0xb2,0x68,0x2c,0xb2,0xb9,0xbf,0x6e,0x30, + 0x50,0x68,0xae,0xb0,0xbe,0xbe,0x70,0x4f,0xb2,0xb2,0x2c,0xc0,0xb9,0xc2,0xc0,0x71, + 0x40,0x69,0x38,0xb1,0x33,0xbe,0x71,0xc1,0xb3,0x58,0x2d,0x3c,0xba,0x34,0x6e,0xa3, + 0xc2,0x69,0x54,0xb1,0x3a,0xbe,0x73,0x2f,0xb3,0x30,0x2d,0x4a,0xba,0x37,0xc0,0xa4, + 0xb2,0x6e,0x4c,0xaf,0x34,0xc2,0x71,0x52,0xc2,0x69,0x74,0xb1,0x42,0xbe,0x75,0x2f, + 0xb4,0x50,0x2d,0x5a,0xba,0x3b,0xc0,0xa5,0xb2,0x69,0x30,0xb1,0x49,0xbe,0x77,0x6f, + 0xb4,0x28,0x2d,0x68,0xba,0x3f,0x6e,0xa6,0x30,0x69,0xbe,0xb1,0x50,0xbe,0x79,0x4f, + 0xb5,0x40,0x2d,0x76,0xba,0x42,0xc0,0xa7,0xa2,0x6a,0x48,0xb1,0x57,0xbe,0x7a,0xc1, + 0xb5,0x78,0x2d,0x24,0xba,0x46,0x6e,0xa8,0x70,0x6a,0x64,0xb1,0x5e,0xbe,0x7c,0x2f, + 0xb5,0xc2,0x2d,0xa4,0xba,0x49,0xc0,0xa9,0x60,0x6a,0xa2,0xb1,0x65,0xbe,0x7e,0x6f, + 0xb6,0x68,0x2d,0xb2,0xba,0x4d,0x6e,0xaa,0x50,0x6a,0xae,0xb1,0x6c,0xbe,0xa2,0x4f, + 0xb6,0xb2,0x2d,0xc0,0xba,0x50,0xc0,0xab,0x40,0x6b,0x38,0xb1,0x73,0xbe,0x21,0xc1, + 0xb7,0x58,0x2e,0x3c,0xba,0x54,0x6e,0xab,0xc2,0x6b,0x54,0xb1,0x7a,0xbe,0x23,0x2f, + 0xb7,0x30,0x2e,0x4a,0xba,0x57,0xac,0x72,0x21,0x48,0xbf,0x31,0xa1,0xbe,0x24,0xc1, + 0xb8,0x38,0x2e,0x54,0xba,0x5a,0x6e,0xad,0x70,0x6b,0x24,0xb1,0x26,0xbe,0x26,0x2f, + 0xb8,0x70,0x2e,0x62,0xba,0x5d,0xc0,0xae,0x60,0x6b,0xb2,0xb1,0x2d,0xbe,0x28,0x6f, + 0xb8,0xba,0x2e,0x70,0xba,0x61,0x6e,0xaf,0x50,0x6c,0x3c,0xb1,0xa6,0xbe,0x2a,0x4f, + 0xb9,0x60,0x2e,0x7e,0xba,0x64,0xc0,0xb0,0x40,0x6c,0x58,0xb1,0xad,0xbe,0x2b,0xc1, + 0xb9,0xaa,0x2e,0x2c,0xba,0x68,0x6e,0xb0,0xc2,0x6c,0x74,0xb1,0xb4,0xbe,0x2d,0x2f, + 0xba,0x50,0x2e,0xac,0xba,0x6b,0xc0,0xb1,0xb2,0x6c,0x30,0xb1,0xbb,0xbe,0x2f,0x6f, + 0xba,0x28,0x2e,0xba,0xba,0x6f,0x6e,0xb2,0x30,0x6c,0xbe,0xb1,0xc2,0xbe,0xa3,0x4f, + 0xbb,0x40,0x2f,0x36,0xba,0x72,0xc0,0xb3,0xa2,0x6d,0x48,0xb2,0x37,0xbe,0xa4,0xc1, + 0xbb,0x78,0x2f,0x44,0xba,0x76,0x6e,0xb4,0x70,0x6d,0x64,0xb2,0x3e,0xbe,0xa6,0x2f, + 0xbb,0xc2,0x2f,0x52,0xba,0x79,0xc0,0xb5,0x60,0x6d,0xa2,0xb2,0x45,0xbe,0xa8,0x6f, + 0xbc,0x68,0x2f,0x60,0xba,0x7d,0x6e,0xb6,0x50,0x6d,0xae,0xb2,0x4c,0xbe,0xaa,0x4f, + 0xbc,0xb2,0x2f,0x6e,0xba,0xa2,0xc0,0xb7,0x40,0x6e,0x38,0xb2,0x53,0xbe,0xab,0xc1, + 0xbd,0x58,0x2f,0x7c,0xba,0x24,0x5a,0x2f,0xbd,0x70,0x2f,0x22,0xba,0x25,0xc0,0xb8, + 0x60,0x6e,0x5f,0x7e,0xc1,0x32,0xc2,0xa3,0x4b,0xaa,0x2f,0x2c,0xba,0x28,0x6e,0xb8, + 0xc2,0x6e,0x74,0xb2,0x62,0xbe,0xaf,0x2f,0xbe,0x50,0x2f,0xac,0xba,0x2b,0xc0,0xb9, + 0xb2,0x6e,0x30,0xb2,0x69,0xbe,0xb1,0x6f,0xbe,0x28,0x2f,0xba,0xba,0x2f,0x6e,0xba, + 0x30,0x6e,0xbe,0xb2,0x70,0xbe,0xb3,0x4f,0xbf,0x40,0x30,0x36,0xba,0xa4,0xc0,0xbb, + 0xa2,0x6f,0x48,0xb2,0x77,0xbe,0xb4,0xc1,0xbf,0x78,0x30,0x44,0xba,0xa8,0x6e,0xbc, + 0x70,0x6f,0x64,0xb2,0x7e,0xbe,0xb6,0x2f,0xbf,0xc2,0x30,0x52,0xba,0xab,0xc0,0xbd, + 0x60,0x6f,0xa2,0xb2,0x25,0xbe,0xb8,0x6f,0xc0,0x68,0x30,0x60,0xba,0xaf,0x6e,0xbe, + 0x50,0x6f,0xae,0xb2,0x2c,0xbe,0xba,0x4f,0xc0,0xb2,0x30,0x6e,0xba,0xb2,0xc0,0xbf, + 0x40,0x70,0x38,0xb2,0xa5,0xbe,0xbb,0xc1,0xc1,0x58,0x30,0x7c,0xba,0xb6,0x6e,0xbf, + 0xc2,0x70,0x54,0xb2,0xac,0xbe,0xbd,0x25,0xa3,0xab,0x3c,0xc1,0x31,0xb8,0xc0,0xc0, + 0xa2,0x70,0x68,0xb2,0xb1,0xbe,0xbe,0xc1,0xc2,0x38,0x30,0xa6,0xba,0xbc,0x6e,0xc1, + 0x70,0x70,0x24,0xb2,0xb8,0xbe,0xc0,0x2f,0xc2,0x70,0x30,0xb4,0xba,0xbf,0xc0,0xc2, + 0x60,0x70,0xb2,0xb2,0xbf,0xbe,0xc2,0x6f,0xc2,0xba,0x30,0xc2,0xba,0x31,0x6f,0x31, + 0x50,0x71,0x3c,0xb3,0x34,0xbf,0x32,0x50,0x31,0x60,0xa3,0x3e,0xbb,0x34,0xc1,0x32, + 0x40,0x71,0x58,0xb3,0x3b,0xbf,0x33,0xc2,0x31,0xaa,0xa3,0x4c,0xbb,0x38,0x6f,0x32, + 0xc2,0x71,0x74,0xb3,0x42,0xbf,0x35,0x30,0x32,0x50,0xa3,0x5a,0xbb,0x3b,0xc1,0x33, + 0xb2,0x71,0x30,0xb3,0x49,0xbf,0x37,0x70,0x32,0x28,0xa3,0x68,0xbb,0x3f,0x6f,0x34, + 0x30,0x71,0xbe,0xb3,0x50,0xbf,0x39,0x50,0x33,0x40,0xa3,0x76,0xbb,0x42,0xc1,0x35, + 0xa2,0x72,0x48,0xb3,0x57,0xbf,0x3a,0xc2,0x33,0x78,0xa3,0x24,0xbb,0x46,0x6f,0x36, + 0x70,0x72,0x64,0xb3,0x5e,0xbf,0x3c,0x30,0x33,0xc2,0xa3,0xa4,0xbb,0x49,0xc1,0x37, + 0x60,0x72,0xa2,0xb3,0x65,0xbf,0x3e,0x70,0x34,0x68,0xa3,0xb2,0xbb,0x4d,0x6f,0x38, + 0x50,0x72,0xae,0xb3,0x6c,0xbf,0x40,0x50,0x34,0xb2,0xa3,0xc0,0xbb,0x50,0xc1,0x39, + 0x40,0x73,0x38,0xb3,0x73,0xbf,0x41,0xc2,0x35,0x58,0xa4,0x3c,0xbb,0x54,0x6f,0x39, + 0xc2,0x73,0x54,0xb4,0x57,0xc2,0x31,0xc2,0xb6,0x2b,0x6a,0x69,0xa1,0xbd,0x25,0x54, + 0x56,0x4d,0x3a,0x57,0x38,0x58,0x34,0x3a,0xa7,0x6b,0x6b,0x4b,0xa1,0xae,0x26,0x72, + 0xa2,0x24,0x6a,0x69,0xb6,0x60,0x74,0xac,0xab,0x6b,0x75,0x4d,0xa1,0x48,0x44,0x23, + 0x65,0xb9,0x3a,0x4e,0x7a,0x58,0x63,0x3a,0xac,0x73,0x78,0xbb,0x23,0x67,0x45,0xba, + 0x46,0x4a,0x32,0x5f,0x34,0x5d,0x7c,0x3c,0x42,0x33,0xb6,0xc1,0x2e,0xb3,0x2a,0x67, + 0x67,0x2f,0x62,0x27,0x45,0x67,0x40,0xb1,0x54,0x3b,0x69,0xbb,0xa1,0xb7,0x44,0x2c, + 0x75,0xba,0x56,0x4e,0xa4,0x58,0x68,0x5a,0xb0,0x23,0x69,0x49,0x23,0x3f,0x45,0xac, + 0x76,0x4a,0x3a,0x5f,0x54,0x5c,0x76,0xae,0x43,0xbd,0xa9,0x33,0x2c,0x73,0x47,0xa5, + 0x56,0xa4,0xb0,0x69,0xb7,0x5f,0x4d,0xae,0x71,0x53,0xbd,0x31,0x2f,0x72,0x48,0x2a, + 0x46,0xbb,0x56,0x75,0x21,0x62,0x36,0x65,0xa3,0xab,0x3c,0xc1,0x6e,0x4c,0x4c,0x39, + 0x67,0xa4,0xc0,0x29,0x6c,0x67,0x5c,0xa1,0x5c,0x34,0x7b,0x45,0xb6,0x2d,0x4f,0x62, + 0x59,0x31,0xbd,0x5d,0x3f,0x58,0x77,0x3a,0xb5,0xa5,0x70,0xad,0xa1,0x3b,0x44,0xc1, + 0x45,0xb3,0x32,0x50,0xba,0x58,0x33,0x3a,0xb4,0xad,0x6d,0x35,0xa2,0x33,0x24,0xa7, + 0x55,0xbb,0x7e,0x4f,0x35,0x58,0xc0,0x3a,0xa4,0x43,0x6f,0xa5,0x22,0x3a,0x25,0x72, + 0x46,0x41,0x72,0x56,0x57,0x24,0x45,0x75,0x56,0x49,0xc0,0x57,0x7e,0x5a,0xa5,0x7b, + 0x61,0x6b,0x24,0x73,0x27,0xb2,0x26,0x76,0xa8,0x6a,0x5a,0x5f,0x65,0x5c,0xa2,0x3c, + 0x49,0x33,0xa8,0xbb,0x2a,0x73,0x27,0x60,0x66,0x7c,0xbc,0x63,0xba,0x5d,0x30,0xae, + 0x46,0x63,0xaf,0x5b,0x2d,0x43,0x28,0x40,0x76,0xa6,0xac,0x69,0xbe,0x5f,0x50,0x7c, + 0x7e,0xbd,0xb8,0xad,0x2f,0x73,0x48,0x71,0x56,0xbb,0xac,0x6f,0xb7,0x60,0xb8,0x5c, + 0xc0,0x53,0xc2,0x4f,0x30,0x5f,0x49,0x7c,0xa9,0x44,0x42,0x75,0xa4,0x62,0x4a,0x7d, + 0x57,0x44,0x3a,0x63,0xa5,0x61,0x49,0x7c,0x57,0x44,0x46,0x76,0xb2,0x63,0xbe,0x7d, + 0x24,0xb6,0x4d,0xb5,0xaa,0x4d,0x4a,0xaa,0x67,0x6a,0xac,0xa1,0x70,0x64,0xa2,0x3d, + 0xb6,0x4c,0x4d,0x61,0xaf,0x54,0x4c,0x3b,0x57,0xa5,0xb4,0x29,0xa2,0x67,0x43,0x7e, + 0x76,0x54,0x62,0x48,0x57,0xc2,0x31,0xc2,0x7c,0x23,0x62,0x29,0xb4,0x69,0x48,0xa1, + 0x5c,0x54,0x7b,0xad,0xb5,0x78,0x4d,0xa8,0x58,0x5c,0xc0,0xaf,0xb8,0x6e,0x45,0x60, + 0xba,0x75,0x3a,0xbc,0x33,0x71,0x51,0xa2,0x29,0x44,0xc1,0x35,0x7e,0x74,0x50,0x22, + 0x4a,0x7d,0x73,0x60,0x41,0x7d,0x55,0x44,0x6a,0x35,0x23,0x51,0x53,0x7c,0x3a,0x43, + 0xa5,0x35,0x29,0x78,0x47,0x5c,0x44,0xaa,0x65,0xbe,0x3a,0x4f,0x7a,0x58,0x25,0xac, + 0xb9,0x53,0x6d,0xbf,0xa2,0x64,0x24,0xad,0x55,0xbd,0xc0,0x4f,0x72,0x58,0x27,0x3a, + 0xb5,0xad,0x6d,0xa9,0xa2,0x50,0x24,0xaf,0x45,0xbf,0x6e,0x54,0x6a,0x59,0x78,0x3b, + 0x52,0xb5,0x79,0x73,0x23,0x27,0x25,0x26,0xa8,0x41,0x56,0x57,0xa6,0x5a,0x2d,0x7b, + 0x69,0xb5,0xa1,0x4f,0x24,0x49,0x46,0x37,0xb8,0x52,0x5a,0x59,0x25,0x5b,0x42,0x5b, + 0x72,0x7b,0x21,0x69,0x25,0x43,0x26,0x34,0x3b,0x61,0x65,0x36,0xc2,0x4d,0x40,0x5b, + 0x75,0xbd,0x22,0x33,0x25,0x45,0x46,0x35,0x76,0x53,0x4e,0x5a,0xb1,0x5c,0x6a,0xad, + 0xb1,0x5b,0x2a,0x33,0x28,0x53,0x26,0xac,0x76,0x6b,0x56,0x5f,0x7c,0x5c,0x25,0x7b, + 0xb3,0x63,0xa8,0x31,0x2a,0x24,0x5a,0x7c,0x4a,0x73,0xa9,0x71,0x2a,0x7c,0x27,0x62, + 0xa8,0x7e,0x3a,0x64,0x41,0x5d,0xa6,0xae,0x4b,0x6b,0xa9,0x73,0x2a,0x78,0x47,0xb5, + 0x56,0x2a,0x52,0x69,0x5b,0x5f,0x54,0x5c,0x79,0xbd,0xb5,0x41,0x2d,0x76,0x28,0x42, + 0x46,0xa7,0x7a,0x6a,0x3b,0x5f,0x52,0x7c,0x7a,0x4b,0xb5,0x5b,0x2d,0xb3,0x48,0x52, + 0x56,0xb3,0x6a,0x6e,0x3c,0x60,0x53,0x5c,0xab,0xa5,0xbd,0x41,0x2f,0x77,0x28,0x71, + 0x26,0xbb,0xb8,0x6f,0xbb,0x60,0x2e,0x7c,0xc0,0x43,0xc2,0x53,0x30,0xab,0x48,0xc0, + 0x26,0xc2,0x52,0x70,0xb1,0x60,0xbf,0xae,0xc1,0x3b,0xc2,0x79,0x30,0xb4,0x28,0xc2, + 0x56,0xc2,0x6e,0x70,0xba,0x60,0xc1,0xae,0xb3,0x34,0x34,0xab,0x30,0x4e,0x49,0x21, + 0x67,0x45,0x62,0x76,0x3f,0x62,0x54,0xaf,0x5a,0x54,0x3b,0x3f,0xa5,0x69,0x29,0xa2, + 0x67,0x44,0xac,0x75,0xb3,0x62,0x51,0x5d,0x59,0x74,0x3a,0xb1,0xa5,0x6f,0x29,0xa1, + 0x57,0x44,0x22,0x75,0x68,0x63,0xbf,0x3d,0x30,0x54,0x48,0xa9,0xa8,0xbc,0x4a,0x6f, + 0x27,0x5b,0x46,0xa1,0x78,0x24,0x70,0x71,0x70,0xbd,0x46,0x63,0xaa,0x5b,0x2a,0xac, + 0x77,0x6b,0x52,0xa1,0x2e,0x64,0x24,0x5d,0xb8,0x24,0x4e,0x47,0xaa,0xab,0x4b,0xa6, + 0x47,0xa3,0xac,0x29,0xbb,0x67,0x4a,0xb0,0x77,0x2c,0x63,0x39,0xaf,0x76,0x2c,0x42, + 0xb9,0xa6,0x76,0x29,0xb2,0x67,0x4b,0x5e,0x7a,0x24,0x62,0x2b,0xaf,0x74,0x2c,0x43, + 0x27,0xa7,0xb4,0x29,0xa9,0x67,0x4d,0xb0,0x77,0x5c,0x62,0xb9,0xaf,0x78,0x4c,0x3f, + 0x78,0x34,0xac,0xa3,0xa6,0x6a,0x60,0xb1,0x5c,0xae,0x7c,0x37,0xb5,0xa6,0x4d,0x29, + 0x48,0x46,0xac,0xa8,0x76,0x6a,0x56,0x5f,0x6a,0x6c,0xa1,0x57,0xb6,0x7b,0x4d,0xb5, + 0x58,0x4a,0xac,0xad,0x6a,0x6b,0xa8,0x3f,0x2a,0x5c,0x27,0x33,0xb9,0x4f,0x2f,0x57, + 0x79,0x35,0x27,0x32,0x4a,0x71,0x55,0x41,0x3a,0x45,0x33,0x6a,0x31,0x79,0x51,0x22, + 0xbb,0x45,0x47,0x36,0x3f,0x72,0x55,0x61,0x5a,0x4e,0x49,0x4b,0x33,0xc2,0x22,0x62, + 0x59,0x45,0x3f,0x36,0x35,0x72,0x4f,0x42,0x7d,0x7d,0x6f,0xc2,0x40,0xa2,0xa7,0x45, + 0x4a,0x36,0x47,0x52,0x4f,0x79,0x5a,0xb5,0x3b,0x35,0x71,0xa4,0x47,0x45,0x56,0x76, + 0xbc,0x62,0x67,0x5d,0x64,0x58,0x57,0x3a,0xba,0xa5,0x6f,0x3b,0xa2,0x6f,0x24,0xb3, + 0x35,0xbf,0x4e,0x4f,0xb9,0x58,0x2e,0x3a,0xbb,0x7b,0x6f,0x39,0xa2,0x6c,0x24,0xac, + 0x75,0xbf,0x2e,0x4f,0xad,0x58,0xa9,0x7a,0xba,0x7b,0x6f,0x33,0xa2,0x6d,0x44,0xb5, + 0x35,0xbf,0xb4,0x50,0x45,0x58,0xaa,0x7a,0xbc,0x43,0x6f,0x35,0xa2,0x7b,0x24,0xb0, + 0x65,0xbe,0x6a,0x50,0x4f,0x59,0xb2,0x3b,0x4c,0xb5,0x75,0xad,0x23,0x4a,0x45,0x77, + 0x66,0x43,0x4a,0x55,0x62,0x5a,0x60,0x3b,0x51,0x23,0x7d,0x47,0x24,0x4f,0x45,0xb5, + 0x56,0x4d,0x22,0x58,0x38,0x5b,0x50,0xad,0x79,0x3b,0x23,0x53,0x25,0x72,0x46,0x42, + 0x36,0x54,0x5e,0x59,0xbd,0x5b,0x50,0x7b,0x77,0x5b,0x22,0x29,0x25,0x6b,0x46,0x3d, + 0xa8,0x55,0x66,0x59,0xb2,0x5b,0x49,0x5b,0x77,0x33,0x23,0x61,0x25,0x62,0x26,0x3d, + 0xb8,0x54,0x42,0x5a,0xba,0x5c,0x6f,0x5b,0xa9,0xbd,0x2e,0xa7,0x28,0x67,0x26,0xb0, + 0x66,0x6c,0x76,0x5f,0xb3,0x5c,0x2e,0x7b,0xbb,0x33,0x2e,0xad,0x28,0x6e,0x26,0xb1, + 0x66,0x6c,0x22,0x5f,0xa5,0x24,0x70,0x71,0x70,0xaa,0x52,0x21,0x28,0x6f,0x26,0xa4, + 0x76,0x7b,0x46,0x64,0x66,0x5d,0xb1,0x7c,0x4d,0xbd,0xaa,0x4d,0x2a,0x2a,0x47,0x6a, + 0x76,0xa1,0x36,0x64,0x67,0x5d,0xb2,0x3c,0x4d,0x4b,0xaa,0x5d,0x2a,0x29,0x27,0x68, + 0x26,0xa1,0x32,0x64,0x79,0x5d,0xb0,0x3c,0x4d,0x6b,0xa8,0x75,0x2c,0x63,0x27,0xb5, + 0x66,0x2d,0x26,0x67,0x75,0x5f,0x42,0xae,0x7b,0xb5,0xb5,0x79,0x2d,0x21,0x48,0x47, + 0x26,0xa8,0x6e,0x6a,0x59,0x5f,0x5c,0x3c,0x7a,0xbd,0xb5,0x77,0x2d,0x27,0x28,0x45, + 0x56,0xa8,0x5a,0x6a,0x58,0x5f,0x58,0x5c,0x7b,0x5b,0xb5,0xaf,0x2d,0x29,0x48,0x45, + 0xad,0x63,0xb3,0x5f,0x2f,0x3b,0x48,0x74,0x46,0xb4,0x52,0x6f,0x53,0x60,0x79,0xae, + 0xb5,0x53,0xc0,0x59,0x30,0x72,0x48,0xb2,0xa8,0xbe,0xb8,0x70,0x2f,0x60,0xbc,0x5c, + 0xb5,0xae,0x31,0x7d,0xa3,0x3d,0x29,0x37,0x57,0x31,0x5f,0x7d,0x3e,0x32,0x70,0xa9, + 0x24,0x54,0x31,0x45,0xa3,0x3c,0x29,0x37,0x67,0x31,0xac,0x71,0x4f,0x61,0x3c,0x3d, + 0x33,0x44,0x31,0x4b,0xa3,0x39,0x49,0x36,0xa9,0x31,0x7e,0x71,0x42,0x61,0x34,0x3d, + 0x31,0x7c,0x31,0x69,0xa3,0x3b,0x49,0x78,0x27,0x46,0x66,0x76,0x65,0x62,0x65,0x5d, + 0x5c,0xb6,0x3b,0x25,0xa5,0x2c,0x49,0x2a,0x57,0x46,0x6a,0x76,0x64,0x62,0x5c,0xaf, + 0x5c,0x2c,0x3b,0x23,0xa5,0x29,0x49,0x28,0x37,0x42,0xb8,0x7c,0x59,0x63,0xb1,0xaf, + 0x21,0x7c,0x4c,0xbb,0xa8,0x33,0x4a,0x73,0x57,0x61,0x52,0x7e,0xbe,0x63,0x71,0xaf, + 0xa3,0x2c,0x49,0x4b,0xa9,0x33,0x2a,0x30,0x27,0x59,0x76,0x7d,0x41,0x64,0x6e,0x7d, + 0xa3,0x24,0x4f,0x3b,0xaa,0x67,0x4a,0xb4,0xa9,0x6d,0x7a,0xa1,0xb9,0x64,0x2f,0xaf, + 0xbc,0x74,0x4f,0x3d,0xaa,0x73,0x4a,0xb1,0x77,0x6d,0x66,0xa2,0x3d,0x64,0x2f,0x7d, + 0xbc,0xbe,0x4f,0x53,0xaa,0x7d,0x2a,0xb3,0x67,0x6c,0xb8,0xa2,0x32,0x64,0x2f,0x3d, + 0xba,0x7c,0x4f,0x59,0xaa,0x43,0x2b,0xb3,0x37,0x2c,0xbc,0x28,0x2f,0x66,0x78,0x5e, + 0x7a,0x4c,0x64,0x29,0xaf,0xb8,0x2c,0x4e,0xa9,0xa9,0xa8,0x2a,0x67,0x67,0x66,0x3e, + 0x7b,0xae,0x64,0xa1,0xaf,0x2c,0x2c,0x4b,0x37,0xa9,0x3a,0x2a,0x6b,0x67,0x61,0xb0, + 0x7d,0x64,0x64,0x2b,0xaf,0xbc,0x5a,0x30,0xa3,0x50,0xbf,0x3c,0x23,0x67,0x68,0x5e, + 0x7c,0x54,0x63,0x45,0xaf,0xa1,0x2c,0x41,0x37,0xa9,0xbc,0x2a,0x71,0x67,0x3d,0x3e, + 0x2d,0xae,0x64,0x3f,0xaf,0x29,0x4c,0x50,0x47,0xa9,0x6e,0x2a,0xac,0x67,0x65,0x5e, + 0x7a,0x54,0x73,0x61,0xb3,0x73,0x2d,0x43,0x68,0x35,0x4a,0xa4,0x35,0x69,0x55,0x5f, + 0x3a,0x64,0x73,0x35,0xb3,0x7e,0x4d,0x41,0x68,0x34,0x5a,0xa8,0x27,0x6a,0x63,0xb1, + 0x5e,0x74,0x7c,0x43,0xb5,0xb1,0x4d,0x2b,0x58,0x47,0x22,0xa8,0x2b,0x6a,0x64,0x3f, + 0x5e,0x3c,0x7b,0x79,0xb6,0x21,0x2d,0xb8,0x28,0x4e,0x4b,0x7d,0xb6,0x22,0x4d,0xb7, + 0x38,0x4e,0x62,0xaa,0x4e,0x6a,0xba,0x5f,0xa1,0x74,0x21,0xc1,0xb8,0x51,0x4e,0x58, + 0xaa,0x5d,0x62,0xae,0x49,0x6b,0xae,0xb1,0xb2,0x4c,0x2c,0xa5,0xb9,0xbb,0x4e,0x2f, + 0x28,0x68,0xa4,0xb2,0xbf,0x6c,0xc1,0x5f,0xc2,0x2c,0x30,0xb8,0x57,0x37,0x71,0x30, + 0xb4,0x78,0x2e,0xb1,0x73,0x6d,0xa2,0xb2,0x4d,0x5c,0xa8,0xb3,0xbd,0x6e,0x2f,0x30, + 0x68,0x24,0x26,0xbc,0xc0,0x6f,0x3e,0x61,0x39,0xbf,0x33,0x2e,0x31,0x22,0xa3,0x48, + 0x39,0x36,0x27,0x32,0x5e,0x71,0x39,0x41,0x5b,0x35,0x3c,0x32,0x33,0x26,0xa3,0x24, + 0x59,0x45,0xa5,0x36,0x4c,0x72,0x5e,0x61,0x5b,0x6d,0x3b,0x2e,0x33,0x2f,0x51,0x24, + 0xab,0x46,0xad,0x36,0x65,0x72,0x5b,0x41,0x5b,0x3d,0x3b,0x24,0x33,0xa4,0x51,0x25, + 0x79,0x47,0x3f,0x36,0x67,0x72,0x59,0x21,0x58,0x35,0x4a,0x30,0x37,0x67,0xa4,0x7e, + 0xab,0x63,0x2b,0x4a,0x23,0x78,0xb5,0xb4,0xc0,0x4d,0x70,0x4c,0x40,0xae,0x54,0xbd, + 0x29,0xc1,0x2f,0x50,0x63,0x79,0x5e,0x43,0x3b,0xbf,0x73,0xaa,0x41,0x29,0x55,0x38, + 0x4a,0x62,0xb9,0x5d,0x6d,0x7c,0x3f,0x23,0xa7,0x4d,0x2c,0x4b,0xa2,0xa5,0x24,0xbd, + 0x65,0xc0,0x7a,0x50,0x7a,0x58,0xb5,0xac,0xbf,0x3b,0x70,0x59,0xa2,0xb1,0x44,0xbe, + 0x45,0xc0,0xb0,0x50,0x64,0x58,0xb9,0xac,0xbf,0x6b,0x70,0x5d,0xa2,0x2e,0x44,0xbb, + 0x35,0xc0,0xa8,0x50,0xaf,0x58,0x22,0x3b,0x55,0x7b,0x7c,0x31,0x23,0xa4,0x45,0x78, + 0x26,0x4c,0xb4,0x58,0x48,0x5a,0xa8,0x7b,0x6a,0x7b,0xa1,0x61,0x24,0x2e,0x46,0x45, + 0x46,0x56,0x66,0x5a,0x56,0x5b,0x64,0xb7,0xb2,0xb3,0x40,0xc1,0x70,0xa4,0x26,0x32, + 0x29,0x4e,0x2e,0x5a,0x5f,0x5b,0x66,0x7b,0x7c,0x63,0x24,0x3b,0x25,0xa6,0x46,0x45, + 0x36,0x54,0x72,0x5a,0x6d,0x5b,0x59,0x7b,0x7c,0xb5,0x22,0xa7,0x25,0xb2,0x46,0x47, + 0x36,0x56,0x26,0x60,0x4f,0x5c,0xaa,0xad,0xbd,0x53,0x2f,0x49,0x28,0x7c,0x26,0xb6, + 0x26,0x6d,0xb0,0x60,0x45,0x5c,0xa9,0x3b,0xbb,0xbd,0x2f,0x63,0x28,0x23,0x26,0xb6, + 0x56,0x6d,0x26,0x60,0xb7,0x5d,0x34,0x5c,0x46,0x4b,0xaa,0x73,0x2a,0xb2,0x47,0x6e, + 0xa8,0x79,0x32,0x66,0xb4,0x5d,0xba,0x5c,0x50,0x23,0xaa,0xbd,0x2a,0xc1,0x47,0x6f, + 0xa8,0xa2,0x42,0x64,0xb5,0x5d,0xc0,0xae,0x4e,0x2b,0xaa,0x23,0x2a,0xbc,0x27,0x6f, + 0x26,0xa2,0x32,0x64,0xc1,0x5d,0xc0,0x3c,0x4f,0xad,0xa9,0x21,0x2c,0x57,0x48,0x4b, + 0x36,0xa9,0xa4,0x6a,0x7d,0x5f,0x66,0xae,0x7d,0x2b,0xb6,0x68,0x57,0x37,0x71,0x30, + 0xb7,0xa1,0xbc,0x6a,0x2b,0x5f,0x63,0x5c,0x7d,0x6b,0xb6,0x45,0x2d,0xae,0x48,0x4b, + 0x66,0xa9,0x22,0x6a,0xa2,0x5f,0x63,0x3c,0x7d,0x63,0xb6,0x4d,0x2d,0xb2,0x28,0x50, + 0x36,0xaa,0xa8,0x6b,0x52,0x60,0x39,0x7c,0xa5,0x4b,0xbb,0x71,0x2f,0x43,0x48,0x27, + 0x36,0xb8,0x42,0x6e,0x53,0x60,0x57,0xae,0xad,0x4b,0xbd,0x7b,0x2f,0x34,0x28,0xa8, + 0xa8,0xbd,0x2a,0x70,0x37,0x60,0x7e,0xaf,0x34,0x7c,0x32,0x59,0xa3,0x6a,0x49,0x3c, + 0xa9,0x33,0x46,0x71,0x24,0x61,0x42,0xaf,0x35,0x7c,0x32,0x67,0xa3,0x57,0x49,0x39, + 0x37,0x33,0x3a,0x71,0x30,0x61,0x3a,0x3d,0x35,0x54,0x32,0x61,0xa3,0x64,0x49,0x3e, + 0xa9,0x33,0x3a,0x75,0x74,0x62,0x64,0xaf,0x51,0xae,0x3d,0x47,0xa6,0xbd,0x29,0x72, + 0xa9,0x49,0x3e,0x78,0xae,0x62,0x6f,0x5d,0x51,0xbe,0x3d,0x49,0xa6,0xbf,0x49,0x2f, + 0xa9,0x41,0x32,0x77,0x44,0x62,0x76,0x3d,0x70,0x24,0x39,0x5b,0xa6,0xc0,0x29,0x2f, + 0x37,0x43,0x36,0x7b,0x74,0x63,0xad,0x7d,0x2c,0xbe,0x45,0xaf,0xa9,0x41,0x2a,0x77, + 0x57,0x62,0x26,0x7d,0x4d,0x64,0x3a,0x7d,0xa5,0x44,0x49,0xa9,0xa9,0x46,0x2a,0x78, + 0x57,0x61,0xb8,0x7d,0x65,0x64,0x3f,0x5d,0xa5,0xb6,0x49,0x4f,0xaa,0x39,0x4a,0xbb, + 0x47,0x70,0x7a,0xa2,0x79,0x64,0xb1,0x25,0xb2,0xb3,0x40,0xc1,0x38,0xb1,0x4a,0xba, + 0x67,0x70,0xa4,0xa2,0x29,0x64,0xb3,0x3d,0xbe,0x6c,0x50,0x3b,0xaa,0xb8,0x2a,0xbf, + 0x77,0x6f,0xc0,0xa2,0x66,0x64,0xb6,0x5d,0xbe,0x4c,0x50,0xb1,0xaa,0xbe,0x4a,0xc0, + 0xa9,0x70,0x3e,0xa2,0x73,0x64,0xb1,0x5d,0xbf,0xb6,0x50,0xa1,0xaa,0xbb,0x4a,0xb9, + 0x57,0x70,0xb4,0xa2,0x77,0x64,0xbe,0x5d,0xbf,0xa6,0x4f,0x2d,0xaa,0xb6,0x4a,0xbe, + 0x67,0x70,0xac,0xa2,0x7a,0x64,0xb5,0x7d,0xbf,0x4c,0x50,0x25,0xaa,0xa8,0x2a,0xa8, + 0x37,0x2d,0x3a,0x28,0x35,0x66,0xb0,0x7e,0x6e,0x64,0x60,0x61,0xae,0xb3,0x4b,0xa7, + 0x37,0xa4,0x36,0x29,0x59,0x67,0x7e,0x3e,0x23,0xae,0x65,0x6f,0xb0,0x4f,0x4c,0x58, + 0xb9,0xab,0x7a,0x2b,0x3b,0x67,0xb9,0x7e,0x74,0x4c,0x65,0x39,0xb0,0x3d,0x2c,0x58, + 0x57,0xab,0xac,0x2b,0x42,0x67,0x71,0x3e,0x22,0xae,0x66,0x36,0x57,0x37,0x71,0x30, + 0xb7,0x31,0x36,0x2b,0x49,0x67,0x7e,0xb0,0x21,0x4c,0x65,0x4f,0xb0,0x51,0x4c,0x51, + 0xb9,0xac,0x32,0x2b,0x5d,0x67,0x73,0x3e,0x23,0x44,0x65,0x43,0xb0,0x39,0x4c,0x67, + 0xba,0x35,0xc0,0xa4,0x6f,0x69,0x5d,0x5f,0x3c,0x34,0x73,0x73,0xb3,0x2b,0x4d,0x47, + 0x28,0x36,0x56,0xa3,0x72,0x6a,0x43,0x5f,0x55,0x24,0x7a,0x29,0xb5,0x69,0x4d,0xa1, + 0x68,0x44,0x6a,0xa8,0x7b,0x6a,0x6a,0x3f,0x5f,0x74,0x7c,0x27,0xb5,0xb2,0x2d,0x2e, + 0x58,0x48,0x4a,0xa8,0xa6,0x6a,0x52,0x5f,0x6d,0xa6,0xa2,0x35,0xb6,0xa7,0x4d,0xbb, + 0x28,0x4e,0xa8,0xaa,0x67,0x6a,0xb0,0x5f,0x6c,0x54,0xa2,0x27,0xb6,0x30,0x2d,0xbb, + 0xba,0x4e,0xbc,0xaa,0x74,0x6a,0xb4,0xa1,0x6c,0x74,0xa2,0x47,0xb6,0xb9,0x4e,0x4e, + 0xaa,0x52,0x6a,0xad,0x78,0x6b,0x23,0x3f,0x2b,0x6c,0x27,0x25,0xb8,0x6d,0x2e,0x29, + 0x78,0x61,0x52,0xb1,0x34,0x6c,0x72,0x3f,0xb3,0x5c,0x2d,0x45,0xba,0xbe,0x2e,0x30, + 0x68,0x68,0xac,0xb0,0xaa,0x6c,0xbd,0x3f,0xb3,0x64,0xa3,0x53,0xbb,0x3a,0x4f,0x31, + 0x28,0x71,0x72,0xb3,0x40,0x6d,0x34,0xa2,0x31,0x7c,0xa3,0x37,0xbb,0x3a,0x2f,0x3a, + 0x58,0x7b,0x62,0xb5,0x7c,0x6d,0x22,0x60,0x45,0x54,0xaa,0x5b,0xbc,0xa9,0x2f,0x6a, + 0xba,0xa1,0x2a,0xb6,0xa1,0x6d,0xa3,0x45,0xb2,0xb3,0x40,0xbc,0x5b,0x70,0x4f,0x2b, + 0x48,0x21,0x32,0xb9,0x32,0x6e,0x2f,0xa2,0x78,0x74,0xb4,0xb5,0xbf,0x70,0x30,0x41, + 0x38,0xa7,0x36,0xbb,0x34,0x6f,0x73,0x40,0x21,0x3c,0xb8,0x61,0xc2,0x79,0x30,0xb4, + 0x28,0xc0,0xbc,0xc1,0x38,0x71,0x34,0x21,0x31,0xbf,0x31,0x5a,0x31,0x4c,0xa3,0x4c, + 0x39,0x37,0x4f,0x32,0xa3,0x71,0x65,0x61,0x3d,0x75,0x34,0x36,0x31,0xab,0x51,0x49, + 0x29,0x38,0x3f,0x32,0x2a,0x71,0x68,0x41,0x3d,0x25,0x34,0x5c,0x31,0xa7,0xa3,0x4a, + 0xbb,0x37,0x2f,0x32,0xa9,0x71,0x64,0x61,0x40,0xbf,0x35,0x74,0x33,0x7b,0x51,0x2c, + 0x49,0x48,0xbd,0x36,0xbc,0x72,0x32,0xb3,0x6f,0x75,0x39,0x32,0x34,0xad,0xa3,0x78, + 0x59,0x50,0x5f,0x36,0x27,0x72,0x6e,0x41,0x5f,0xa7,0x3c,0x74,0x33,0xbc,0x51,0x2f, + 0x29,0x41,0x63,0x38,0xbe,0x72,0x6e,0x21,0x60,0x35,0x3c,0x26,0x57,0x37,0x71,0x30, + 0xb3,0xa2,0x43,0x36,0xa3,0x72,0x6f,0x21,0x60,0x4d,0x3c,0x2c,0x33,0x6c,0xa4,0xa1, + 0x79,0x64,0xb5,0x3d,0xb6,0x74,0x41,0x62,0x35,0xb7,0x52,0xa2,0x39,0x66,0x53,0x3e, + 0x49,0x77,0xa1,0x43,0x35,0x76,0x32,0xb4,0x58,0x45,0x68,0x78,0x40,0xb3,0xa6,0xc0, + 0xab,0xc2,0x33,0x50,0xb4,0x79,0x60,0x63,0x3c,0xbf,0x74,0x5c,0x41,0xa5,0xa7,0x48, + 0xac,0x37,0x4f,0x52,0x7c,0x79,0x63,0x43,0x3e,0x55,0x78,0x58,0x42,0x5b,0x56,0x7a, + 0xbc,0x63,0x77,0x5d,0x24,0x7c,0x43,0x23,0xa7,0xb7,0x29,0x6d,0x21,0x33,0x25,0x31, + 0xb8,0x31,0x7e,0x51,0x53,0x59,0x3d,0x3b,0x32,0x2b,0x74,0xad,0xa2,0xbd,0x44,0xa9, + 0x66,0x32,0x2e,0x51,0x5d,0x59,0x6e,0x7a,0xc2,0x6b,0x6d,0x5f,0x21,0x3f,0x45,0x35, + 0x36,0x32,0x4e,0x51,0x66,0x59,0x3c,0xad,0x34,0x3b,0x71,0x4d,0x21,0x5e,0x45,0x63, + 0x76,0x3d,0x7e,0x54,0x7b,0x59,0xb4,0x3b,0x4d,0x5b,0x78,0x41,0x22,0xaa,0x45,0x5d, + 0x46,0x43,0xac,0x55,0x23,0x5a,0x48,0x7b,0x56,0xbd,0x7a,0x5b,0x23,0x62,0x45,0x2a, + 0x26,0x41,0x6a,0x58,0x4f,0x5a,0x7a,0x7b,0x2f,0x43,0x21,0x5f,0x26,0x3a,0x46,0x6d, + 0xb8,0x58,0x7e,0x5a,0xa7,0x5b,0x37,0x7b,0x30,0xbd,0x21,0x39,0x26,0x35,0x46,0x6e, + 0x66,0x51,0x76,0x5b,0x36,0x5b,0xbf,0x65,0xb2,0xb3,0x40,0xc1,0x36,0x36,0x46,0x70, + 0x66,0x58,0x2e,0x5a,0xbb,0x5b,0x69,0x3b,0x71,0xb5,0x25,0x37,0x26,0x36,0x26,0x51, + 0x46,0x69,0x3a,0x60,0x7d,0x5c,0x7d,0x7c,0x3e,0x5b,0x30,0x55,0x28,0x2e,0x46,0xbb, + 0xa8,0x6e,0xb8,0x60,0x6d,0x5c,0xb1,0x3b,0xbe,0x63,0x2f,0xc1,0x28,0xa6,0x26,0xbd, + 0x36,0x6e,0xa8,0x60,0x72,0x5c,0x74,0x7c,0x45,0x23,0xa7,0x63,0x2b,0x3c,0x47,0x76, + 0x26,0x22,0x6a,0x65,0x46,0x5e,0x34,0xae,0x52,0x6b,0xab,0x45,0x2b,0x40,0x47,0x77, + 0x66,0x24,0x62,0x68,0x58,0x5e,0xae,0x5c,0x6b,0xa5,0xaf,0x37,0x2d,0x5c,0x48,0x3b, + 0x76,0xaa,0x62,0x6a,0xc2,0x5f,0x6c,0x7c,0xa2,0x3b,0xb6,0xb1,0x2d,0x31,0x48,0x70, + 0x46,0xa4,0x56,0x6d,0x59,0x60,0x5b,0x3c,0xad,0xb5,0xbd,0x25,0x2f,0x27,0x48,0x77, + 0x66,0xbc,0x72,0x6f,0xaa,0x60,0x28,0x5d,0x36,0x24,0x32,0xa2,0x57,0x37,0x71,0x30, + 0xb3,0x7b,0x36,0x72,0x53,0x61,0x53,0x3d,0x39,0x34,0x33,0x55,0xa3,0x71,0x29,0x44, + 0x27,0x35,0x3e,0x72,0x46,0x61,0x57,0xaf,0x3a,0x6c,0x33,0x3f,0xa3,0xa1,0x49,0x42, + 0xa9,0x31,0xa8,0x75,0x77,0x62,0x6d,0x7d,0x52,0x34,0x3e,0x5d,0xa6,0x47,0x49,0xab, + 0x77,0x4b,0x46,0x77,0x67,0x62,0x21,0xaf,0x6f,0x54,0x3d,0xb5,0xa6,0x56,0x29,0xac, + 0x57,0x4a,0xb4,0x77,0x5a,0x62,0x21,0x5d,0x64,0x54,0x3e,0x61,0xa6,0x5b,0x49,0xae, + 0x47,0x4a,0x66,0x77,0x78,0x62,0x7d,0xaf,0x66,0x24,0x3e,0x53,0xa6,0x4d,0x49,0xad, + 0xb9,0x4b,0x32,0x77,0x79,0x62,0x23,0x7d,0x25,0x64,0x48,0x3d,0xa8,0xa4,0x2a,0x69, + 0x77,0x5f,0x3a,0x7b,0x7b,0x64,0x48,0xaf,0xa7,0x6c,0x4a,0x53,0xa9,0x3a,0x4a,0xa5, + 0x67,0x69,0xc0,0x21,0x4b,0x65,0x43,0x5e,0x34,0x44,0x51,0xa9,0xab,0x4e,0x2b,0x3a, + 0x67,0x73,0x6e,0x21,0x47,0x65,0x3d,0x5e,0x32,0xa6,0x51,0xad,0xab,0x46,0x2b,0x36, + 0x27,0x72,0x6e,0x21,0xa1,0x65,0x42,0x3e,0x34,0x54,0x51,0x6b,0xab,0x3a,0x4b,0x33, + 0x77,0x72,0x4a,0x21,0x59,0x65,0x3c,0x7e,0x35,0xae,0x51,0xb7,0xab,0x43,0x2b,0x35, + 0x37,0x72,0x62,0x27,0x60,0x66,0x7c,0x5e,0x64,0x3c,0x5d,0xab,0xae,0x67,0x2b,0xb3, + 0x59,0x35,0x52,0x28,0xa9,0x66,0xbc,0x45,0xb2,0xb3,0x40,0xc1,0x70,0xb7,0x4b,0xbf, + 0x67,0x30,0x3a,0x28,0xaa,0x66,0x7a,0x5e,0x78,0x24,0x66,0x77,0xb0,0x63,0x4c,0x5f, + 0xa9,0xab,0x66,0x2b,0xa4,0x67,0xa7,0x7e,0x26,0x74,0x66,0x75,0xb0,0x67,0x2c,0x5e, + 0xb9,0xaf,0x76,0x2c,0x3e,0x67,0xbe,0xb0,0x28,0xbe,0x67,0x3d,0xb0,0x60,0x4c,0x5d, + 0xb9,0xae,0x32,0x2c,0x48,0x67,0x2d,0x3e,0x28,0xa6,0x66,0x6f,0xb0,0x72,0x4c,0x64, + 0x37,0xac,0x6e,0x2b,0xab,0x67,0xa5,0xb0,0x28,0xb6,0x67,0x31,0xb0,0x73,0x4c,0x53, + 0xa9,0xaf,0x3e,0x2b,0xbe,0x67,0x30,0x5e,0x28,0x5c,0x67,0x51,0xb0,0xb1,0x4d,0x4b, + 0x68,0x37,0x76,0xa4,0x2e,0x69,0x63,0xb1,0x34,0x7c,0xc2,0x75,0xb3,0xae,0x2d,0x4b, + 0x58,0x37,0xbc,0xa4,0xa3,0x69,0x66,0x3f,0x3d,0xae,0x74,0x3b,0xb3,0xa6,0x4d,0x49, + 0xba,0x37,0xac,0xa4,0xa1,0x69,0x69,0x5f,0x35,0x44,0x7a,0xb4,0x57,0x37,0x71,0x30, + 0x7c,0xbe,0x2e,0xa7,0xb9,0x6a,0x31,0x3f,0x70,0x24,0x7c,0xab,0xb5,0xc2,0x4d,0x2f, + 0xaa,0x48,0x7e,0xa8,0xbe,0x6a,0x31,0x5f,0x6e,0x4c,0xa2,0x63,0xb6,0xb5,0x2d,0xbd, + 0xaa,0x4e,0xb4,0xaa,0xaa,0x6a,0xbb,0xb1,0x6f,0x7c,0xa2,0x69,0xb6,0xac,0x4d,0xbe, + 0x68,0x4f,0x22,0xaa,0x2e,0x6a,0xb9,0xa1,0x6e,0x6c,0xa2,0x61,0xb6,0xb7,0x4d,0xbe, + 0xaa,0x57,0xc0,0xac,0xb7,0x6b,0x6e,0x5f,0x73,0x3c,0x26,0x67,0xb8,0x60,0x2e,0x67, + 0x38,0x5f,0x36,0xae,0x6c,0x6b,0xb4,0x3f,0x2d,0x34,0x27,0xc1,0xb8,0x2c,0x4e,0x68, + 0x58,0x5d,0x5a,0xb0,0x7a,0x6c,0x38,0x5f,0xb4,0x2c,0x2d,0x51,0xba,0x3a,0x2e,0xa5, + 0x58,0x6a,0x3e,0xb1,0x42,0x6c,0x76,0x5f,0xb4,0x7c,0x2d,0x65,0xba,0x42,0x4e,0xa7, + 0xba,0x6a,0x3e,0xb3,0x5d,0x6d,0x39,0xa2,0x34,0x5c,0xa3,0x2f,0xbb,0x45,0x4f,0x36, + 0xaa,0x72,0x5e,0xb3,0x52,0x6d,0x3b,0x60,0x34,0x4c,0xa3,0x25,0xbb,0x49,0x2f,0x3b, + 0x78,0x7b,0xb0,0xb5,0xa2,0x6d,0x28,0x40,0x46,0x4c,0xa8,0x55,0xbc,0x59,0x2f,0x6e, + 0x68,0xa2,0x62,0xb6,0xa3,0x6d,0xbe,0xa2,0x4f,0xae,0xaa,0x25,0xbc,0xb1,0x4f,0x6c, + 0xaa,0xa1,0xb8,0xb6,0x37,0x6e,0x53,0x60,0x59,0x5c,0xad,0x47,0xbd,0x77,0x4f,0x22, + 0x58,0x25,0x4e,0xb8,0x29,0x6e,0x35,0x45,0xb2,0xb3,0x40,0xbc,0x5f,0x33,0x4f,0xa5, + 0x68,0x29,0x46,0xb9,0x40,0x6e,0x73,0x40,0x61,0x24,0xaf,0x4d,0xbe,0x35,0x2f,0xa5, + 0x58,0x2d,0x42,0xbc,0x42,0x6f,0x53,0xa2,0x79,0xa6,0xb5,0x41,0xbf,0x77,0x30,0x41, + 0x28,0xa3,0xbc,0xbd,0x4e,0x6f,0x75,0x60,0x21,0xb6,0xb7,0x61,0xc0,0x3c,0x50,0x53, + 0x68,0xab,0xc0,0xbd,0x43,0x6f,0x74,0xb2,0x21,0xa6,0xb8,0x69,0xc2,0x61,0x30,0xae, + 0xaa,0xbe,0x32,0xc1,0x2e,0x70,0x27,0xb2,0xbc,0x64,0xc1,0x55,0xc2,0xa4,0x30,0xbb, + 0x58,0xc1,0x32,0xc1,0x47,0x71,0x40,0x21,0x34,0x7d,0x34,0xb8,0x31,0xbc,0x51,0x50, + 0x49,0x38,0x27,0x31,0x32,0x71,0xc1,0xb3,0x31,0x35,0x35,0x34,0x33,0x48,0xa3,0x75, + 0x29,0x42,0xa1,0x37,0x5e,0x72,0x22,0x41,0x62,0x7d,0x3e,0x54,0x34,0x43,0xa3,0xad, + 0xab,0x4a,0xc1,0x37,0x72,0x72,0x7a,0x21,0x62,0xa7,0x3d,0x76,0x57,0x37,0x71,0x30, + 0xb7,0x33,0x3b,0x37,0xa1,0x72,0x77,0xb3,0x63,0x25,0x3d,0x42,0x34,0x4f,0x51,0xac, + 0x29,0x49,0x2b,0x37,0x55,0x72,0x79,0x41,0x64,0x6d,0x3d,0x30,0x34,0x45,0xa3,0xab, + 0xbb,0x4b,0x47,0x37,0x7d,0x72,0x25,0xb3,0x62,0xb7,0x3d,0x2a,0x34,0x56,0xa3,0xa7, + 0xbb,0x4b,0x53,0x37,0x24,0x74,0x45,0x21,0xad,0x45,0x4b,0x22,0x37,0x7c,0x52,0x22, + 0x29,0x65,0x77,0x3e,0x4f,0x74,0x52,0xb3,0xac,0x6d,0x4b,0x3e,0x37,0x76,0xa4,0x24, + 0x59,0x65,0x47,0x3e,0x56,0x74,0x57,0x61,0xad,0x3d,0x4b,0xa2,0x37,0x7b,0xa4,0x24, + 0x39,0x65,0x6b,0x3e,0x4e,0x74,0x55,0x41,0xac,0x55,0x4a,0x38,0x39,0x53,0x53,0x3e, + 0x29,0x74,0x27,0x41,0xb9,0x75,0x4d,0x22,0x39,0x35,0x52,0xa6,0x39,0x70,0xa5,0x3e, + 0xbb,0x75,0x3f,0x41,0xc1,0x75,0x4e,0x42,0x38,0xa7,0x51,0x56,0x3b,0x54,0xa6,0x3b, + 0xbb,0xa6,0xb1,0x4a,0x55,0x77,0x59,0xb4,0x78,0x65,0x66,0xb4,0x3e,0x2b,0xa6,0x67, + 0xbb,0xb0,0x2b,0x4c,0x22,0x78,0x65,0xb4,0xb2,0xb7,0x70,0xae,0x40,0x32,0x55,0x50, + 0xbb,0xc2,0xb1,0x4f,0x35,0x79,0x70,0x42,0xc2,0x65,0x70,0x5e,0x41,0xb3,0x55,0x4c, + 0x4a,0x37,0xad,0x52,0xa6,0x79,0x68,0xb5,0x3f,0x5d,0x74,0x62,0x41,0xb0,0xa7,0x4b, + 0xbc,0x37,0xb5,0x52,0xa7,0x79,0x45,0x43,0x4b,0x68,0xbb,0x38,0xc1,0x60,0xa7,0x5a, + 0xbc,0x3f,0x27,0x54,0xa5,0x79,0xb9,0x23,0x46,0xa7,0x2a,0x70,0x47,0x2f,0x56,0x2d, + 0x6a,0x77,0xc1,0x65,0x60,0x7e,0x30,0xac,0xaa,0x33,0x72,0x25,0x21,0x61,0x25,0x3c, + 0xa8,0x34,0x32,0x51,0x24,0x59,0x43,0xad,0x36,0xad,0x72,0xa7,0x21,0x55,0x45,0x3a, + 0x26,0x33,0x36,0x51,0x2c,0x59,0x43,0x7b,0x37,0x43,0x71,0x5b,0x21,0x53,0x25,0x3c, + 0xb8,0x34,0x56,0x51,0xae,0x59,0x49,0xad,0x37,0x53,0x72,0x3d,0x21,0x51,0x45,0x3e, + 0xa8,0x34,0x7e,0x51,0x28,0x59,0x45,0x5b,0x3e,0x33,0x76,0x27,0x23,0x67,0x25,0x7e, + 0x76,0x44,0x6a,0x56,0x27,0x5a,0x65,0xad,0x53,0xad,0xa1,0x69,0x24,0x6b,0x26,0x5f, + 0xa8,0x5a,0xb4,0x5b,0x7e,0x5b,0x25,0x3b,0x24,0x53,0x25,0x25,0x26,0x59,0x26,0x5d, + 0x56,0x5a,0x2a,0x5b,0x66,0x5b,0x7d,0x3b,0x26,0x43,0x26,0x3c,0x57,0x37,0x71,0x30, + 0xa2,0xab,0x62,0x5b,0x63,0x5b,0x2a,0x5b,0x25,0xb5,0x25,0xb5,0x26,0x55,0x46,0x56, + 0x26,0x5a,0xb0,0x5b,0x71,0x5b,0x23,0xad,0x21,0x23,0x2d,0x3f,0x28,0xc0,0x26,0xa5, + 0x76,0x78,0x3a,0x60,0xb9,0x5c,0xba,0x3b,0xc2,0x53,0x2d,0x31,0x29,0xb9,0x26,0xc2, + 0x26,0x69,0x52,0x62,0xbb,0x5c,0x73,0xae,0x40,0x4b,0x30,0x4f,0x28,0x34,0x27,0x4e, + 0xa8,0x70,0x3e,0x60,0xb5,0x5c,0xbc,0x5b,0xc1,0xa5,0x30,0x73,0x28,0x38,0x47,0x50, + 0x76,0x69,0x72,0x62,0xaa,0x5c,0x71,0x5c,0x31,0xa5,0xa6,0xa5,0x28,0xb7,0x26,0xc1, + 0x36,0x69,0x66,0x61,0x35,0x5d,0x48,0x3c,0x47,0x33,0xac,0x61,0x2b,0x5b,0x27,0x7d, + 0xb8,0x23,0xbc,0x65,0x69,0x5e,0x3e,0x5c,0x57,0xad,0xac,0x51,0x2b,0x60,0x27,0x7d, + 0x26,0x24,0x62,0x65,0x24,0x5e,0x4a,0x3c,0x56,0x6b,0xac,0x37,0x2b,0x5f,0x27,0x7b, + 0x56,0x23,0x42,0x65,0x2c,0x5e,0x43,0x3c,0x59,0xb5,0xab,0xbf,0x2b,0x57,0x27,0x78, + 0x46,0x23,0x62,0x65,0xb3,0x5e,0x4b,0x5c,0x55,0x6b,0xac,0x53,0x2b,0x5c,0x47,0x79, + 0x56,0x23,0xb4,0x65,0xb5,0x5e,0x2c,0x7c,0x6d,0x3b,0xb2,0x31,0x2c,0x5d,0x28,0x34, + 0xa8,0xab,0x5e,0x6b,0x4e,0x5f,0x77,0x7c,0x23,0x33,0xb7,0x49,0x2e,0x45,0x48,0x52, + 0x26,0xac,0x4a,0x6b,0x56,0x5f,0x74,0xb7,0xb2,0xb3,0x40,0xbc,0xb1,0x49,0x48,0x53, + 0x56,0xac,0x3e,0x6b,0x50,0x5f,0x7c,0x7c,0x24,0xb5,0xbb,0xab,0x2f,0x29,0x28,0x27, + 0x76,0xb8,0xa8,0x6e,0x63,0x60,0x5d,0xae,0xa6,0x63,0xbf,0xb3,0x30,0x7e,0x28,0xb5, + 0xa8,0xbf,0xc0,0x70,0x3b,0x61,0x55,0x3d,0x39,0x64,0x33,0xbf,0xa3,0x29,0x49,0x48, + 0x57,0x37,0x7e,0x72,0x25,0x61,0x64,0xaf,0x3f,0x54,0x34,0x63,0xa3,0xb1,0x29,0x4a, + 0x37,0x36,0x76,0x72,0x2c,0x61,0x5e,0xaf,0x3d,0x24,0x33,0xc1,0xa3,0xa4,0x29,0x4a, + 0x27,0x37,0x32,0x71,0x63,0x62,0x2a,0x5d,0x69,0x24,0x3f,0x35,0xa6,0x6f,0x29,0xba, + 0x27,0x4d,0xbc,0x78,0x5e,0x62,0xaa,0x5d,0x6a,0x6c,0x3f,0x27,0xa6,0x78,0x49,0xb0, + 0xb9,0x4d,0x4e,0x78,0x41,0x62,0x2c,0x7d,0x6b,0xbe,0x3e,0xad,0xa6,0xa1,0x49,0xb0, + 0x27,0x4e,0x6a,0x77,0xbf,0x62,0xac,0x3d,0x64,0x2c,0x3f,0x70,0x57,0x37,0x71,0x30, + 0xb7,0x3c,0xa4,0x78,0x36,0x62,0xa3,0x5d,0x6a,0x3c,0x3f,0x4b,0xa6,0x69,0x49,0xad, + 0x67,0x5f,0x66,0x7b,0xa8,0x64,0x49,0x5d,0xa8,0x2c,0x4a,0x63,0xa9,0x5f,0x4a,0x7d, + 0x57,0x61,0xa4,0xa1,0xbc,0x65,0x52,0xb0,0x3a,0x34,0x53,0x69,0xab,0x67,0x2b,0x3e, + 0xa9,0x76,0x6a,0x22,0x5c,0x65,0x46,0x7e,0x47,0xbe,0x53,0x77,0xab,0x27,0x4b,0x46, + 0x47,0x74,0x26,0x21,0xb7,0x65,0x5d,0x7e,0x39,0xbe,0x52,0xb1,0xab,0x7a,0x4b,0x40, + 0x77,0x74,0x5e,0x21,0xb5,0x65,0x5b,0x7e,0x39,0x34,0x52,0xa5,0xab,0x70,0x4b,0x44, + 0x67,0x75,0x2a,0x22,0x3c,0x65,0x59,0x3e,0x39,0x7c,0x53,0x79,0xab,0x6d,0x4b,0x40, + 0x67,0x75,0x76,0x22,0x3d,0x65,0x53,0x7e,0x38,0xae,0x51,0xaf,0xae,0x4a,0x2b,0xa9, + 0xb9,0x2a,0xa4,0x28,0x42,0x66,0xa6,0xb0,0x69,0xae,0x5f,0x4d,0xae,0x77,0x4b,0xa8, + 0x57,0xa9,0x32,0x2c,0x5c,0x67,0xb0,0x3e,0x2c,0x4c,0x66,0xab,0xb1,0x27,0x4c,0x6e, + 0x47,0xb2,0x3a,0x2c,0x68,0x67,0xc0,0x7e,0x2e,0x54,0x65,0x31,0xb1,0xa7,0x4c,0x6d, + 0x37,0xb1,0xc0,0x2c,0x27,0x67,0xb2,0x7e,0x2f,0x5c,0x68,0x69,0xb0,0xb1,0x2c,0x6c, + 0x67,0xb2,0x22,0x2c,0x7b,0x67,0xb2,0x5e,0x2f,0xae,0x68,0xa3,0xb0,0x2e,0x4c,0x6b, + 0x27,0xb1,0x3a,0x2c,0xa2,0x67,0xb5,0x65,0xb2,0xb3,0x40,0xc1,0x7e,0xab,0x4c,0x6f, + 0x57,0xb1,0x7e,0x2c,0xc0,0x67,0xb8,0xb0,0x2d,0xae,0x68,0x77,0xb0,0x2e,0x2c,0x70, + 0x58,0x31,0x66,0xa6,0xba,0x69,0x36,0xb1,0x50,0x54,0x71,0x49,0xb4,0xbb,0x4d,0x31, + 0x78,0x40,0x7e,0xa3,0x41,0x69,0xc2,0x3f,0x40,0xbe,0x71,0x3d,0xb4,0x3a,0x2d,0x51, + 0x38,0x40,0xa4,0xa4,0xb9,0x69,0x33,0xb1,0x41,0x44,0x75,0x4d,0xb4,0x70,0x4d,0xa2, + 0x68,0x44,0xb4,0xa7,0xc2,0x6a,0x38,0x5f,0x62,0x6c,0x7d,0x3f,0xb6,0x39,0x2d,0xa6, + 0x38,0x49,0x5a,0xa9,0x39,0x6a,0xc2,0xb1,0x51,0xbe,0x7d,0x6d,0xb6,0x75,0x4d,0xc1, + 0xaa,0x50,0xa4,0xaa,0xb8,0x6a,0x72,0x3f,0x71,0x3c,0x24,0xbd,0xb6,0x34,0x2e,0x31, + 0x38,0x58,0xac,0xaa,0xbf,0x6a,0xc2,0xb1,0x61,0xa6,0x21,0x47,0xb7,0xbd,0x4d,0xa4, + 0x38,0x54,0x42,0xad,0xa6,0x6b,0xb6,0xa1,0x2e,0x44,0x28,0x50,0x57,0x37,0x71,0x30, + 0x7d,0x3f,0x5e,0xae,0x7d,0x6b,0xb7,0x5f,0x2e,0x34,0x27,0x4f,0xb9,0x75,0x2e,0x2b, + 0x68,0x62,0xa8,0xb1,0x60,0x6c,0x7c,0x5f,0xb6,0x3c,0x2d,0xa7,0xba,0x4b,0x4e,0xa9, + 0x68,0x6a,0xb8,0xb1,0x56,0x6c,0xa1,0xb1,0xb6,0x5c,0x2e,0x41,0xbb,0x5a,0x4f,0x3a, + 0x48,0x73,0x66,0xb3,0x7b,0x6d,0x44,0x40,0x33,0x64,0xa4,0x3b,0xbb,0x59,0x4f,0x3d, + 0x78,0x7c,0x4e,0xb5,0xac,0x6d,0x2b,0xa2,0x47,0x4c,0xa8,0x27,0xbc,0x61,0x2f,0x68, + 0x68,0xa2,0xac,0xb6,0xbb,0x6d,0xc0,0xa2,0x50,0x6c,0xa9,0x4f,0xbd,0x7b,0x4f,0x23, + 0x38,0x22,0x26,0xb9,0x78,0x6e,0x7e,0x40,0x63,0x5c,0xaf,0xa3,0xbe,0x42,0x4f,0xa7, + 0x78,0x2a,0x7e,0xb9,0x49,0x6e,0x7b,0xa2,0x62,0xae,0xaf,0xa5,0xbe,0x46,0x2f,0xa8, + 0x28,0x2a,0x6e,0xb9,0x63,0x6e,0xa1,0x40,0x62,0x24,0xaf,0x77,0xbe,0x7b,0x50,0x44, + 0x38,0xa7,0x2a,0xbc,0x54,0x6f,0x3e,0x60,0x24,0xae,0xb7,0xb3,0xc0,0x4c,0x50,0x58, + 0x58,0xad,0x46,0xbd,0x5d,0x6f,0x7b,0x60,0x25,0x3c,0xb8,0x3f,0xc0,0x50,0x50,0x58, + 0xba,0xad,0x5a,0xbd,0x6c,0x6f,0x7b,0x40,0x27,0x4c,0xc1,0x5b,0xc2,0xa1,0x50,0xb6, + 0x28,0xbf,0xb0,0xc2,0x7b,0x70,0xb5,0xb2,0xbf,0xae,0xc2,0x51,0xc2,0xab,0x30,0xbb, + 0xba,0xc1,0x6e,0xc2,0x7a,0x70,0x78,0xb7,0xb2,0xb3,0x40,0xc1,0x24,0x40,0x51,0x34, + 0x69,0x33,0x4f,0x31,0x74,0x71,0x43,0x41,0x32,0x75,0x35,0x7c,0x32,0x3d,0xa3,0x54, + 0x69,0x3a,0x67,0x33,0x50,0x71,0x7c,0x41,0x42,0xb7,0x35,0x74,0x32,0x3b,0xa3,0x55, + 0xbb,0x39,0xb9,0x33,0x53,0x71,0x75,0x61,0x54,0x75,0x39,0xaa,0x33,0x4e,0x51,0x77, + 0x79,0x42,0x7b,0x35,0xb7,0x72,0x55,0x41,0x6b,0x4d,0x3f,0x22,0x34,0x77,0xa3,0xb2, + 0x59,0x4c,0xa1,0x38,0x55,0x72,0x2e,0x41,0x69,0xbf,0x3f,0x34,0x34,0x7b,0xa3,0xb6, + 0x49,0x4c,0x27,0x38,0x45,0x72,0xad,0x61,0x68,0xaf,0x3f,0x38,0x34,0x77,0x51,0xb6, + 0x29,0x4d,0xb1,0x38,0x5b,0x72,0xa5,0xb3,0x68,0xb7,0x3f,0x7c,0x34,0x28,0xa3,0xb4, + 0x39,0x4d,0x2f,0x38,0x61,0x72,0x30,0xb3,0x6b,0x66,0x4b,0x38,0x38,0x72,0xae,0x21, + 0x68,0x65,0x3f,0x66,0x34,0x5d,0xa4,0x7b,0xab,0x66,0xc1,0x3e,0x68,0x74,0x5a,0x71, + 0x71,0x47,0x38,0x36,0x37,0xa3,0xa4,0x29,0x29,0x66,0xad,0x3e,0x61,0x74,0x63,0x41, + 0xae,0x7d,0x4b,0xaa,0x37,0x2d,0x52,0x2a,0x79,0x66,0x23,0x3e,0x6c,0x74,0x60,0x41, + 0xaf,0x4d,0x4b,0xbe,0x37,0x30,0x52,0x7b,0x59,0x75,0x57,0x42,0x46,0x75,0x5b,0x42, + 0x3b,0x45,0x53,0x26,0x39,0x7e,0x53,0x43,0x49,0x76,0x37,0x42,0x50,0x75,0x57,0x42, + 0x3b,0x6d,0x53,0x64,0x39,0x7e,0xa5,0x43,0xbb,0x76,0x43,0x42,0x5d,0x75,0x54,0x42, + 0x3a,0x4d,0x53,0x4e,0x39,0x72,0x53,0x6b,0xab,0xa1,0xa9,0x44,0x26,0x75,0x7d,0x42, + 0x53,0x6d,0x59,0x2a,0x3b,0x40,0x53,0x78,0x49,0xa4,0xb1,0x49,0x2d,0x77,0x48,0x62, + 0x78,0xaf,0x63,0x7c,0x3d,0x6f,0xa6,0x60,0x69,0xae,0xa9,0x4c,0x6d,0x77,0xb3,0x22, + 0x2c,0x7d,0x67,0xc2,0x3e,0xa3,0xa6,0x6c,0x39,0xb9,0xbd,0x4e,0x2e,0x78,0x68,0x42, + 0xb0,0x6d,0x6c,0x72,0x3f,0xb3,0xa6,0x75,0x7a,0x31,0x5f,0x51,0x42,0x79,0x38,0x43, + 0x31,0xa7,0x71,0x74,0x41,0xba,0xa7,0x4e,0x5a,0x38,0x73,0x52,0xb7,0x79,0x6d,0x23, + 0x40,0x4d,0x74,0x5a,0x41,0xb8,0xa7,0x4e,0x7a,0x38,0x57,0x51,0x27,0x79,0x27,0x43, + 0x46,0x25,0x76,0x58,0x42,0x5b,0xa7,0x6e,0x7a,0x40,0x23,0x54,0xb4,0x79,0xbf,0xb5, + 0x50,0x75,0x78,0x7a,0x42,0xbf,0xa7,0x6e,0x5b,0x68,0xbb,0x38,0xc2,0x34,0xbd,0xb5, + 0x50,0x6d,0x78,0x22,0x42,0xba,0x55,0x60,0x5a,0x5d,0x4b,0x5c,0x39,0x7b,0x30,0x43, + 0xa9,0xaf,0x2a,0x28,0x47,0x69,0xa8,0x7e,0xbc,0x66,0xc1,0x5d,0xad,0x7c,0x72,0x44, + 0x3f,0x5d,0xa5,0x60,0x4a,0x7e,0x25,0x43,0x26,0x35,0x22,0x52,0x4f,0x59,0x53,0xad, + 0x3b,0x4b,0x73,0x37,0x21,0x77,0x45,0x42,0xa8,0x35,0xb8,0x51,0xab,0x59,0x58,0x3b, + 0x3a,0x43,0x73,0x35,0x21,0x74,0x25,0x3c,0xb8,0x3f,0x22,0x53,0x43,0x5a,0x75,0x5b, + 0x6b,0x53,0xa1,0xa1,0x24,0x79,0x26,0x66,0x36,0x5e,0x46,0x5c,0x5e,0x5b,0x2e,0xad, + 0x25,0x5b,0x2b,0x75,0x26,0x7a,0x26,0x62,0x36,0x5d,0x6e,0x5c,0x66,0x5b,0xa3,0x5b, + 0x2b,0x4b,0x27,0x55,0x26,0x23,0x46,0x60,0x26,0x5d,0x62,0x5c,0x57,0x24,0x46,0x60, + 0xb8,0x5d,0x26,0x5c,0x52,0x5b,0xa6,0x7b,0x21,0xa5,0x2d,0x23,0x29,0x4c,0xac,0x72, + 0x21,0x48,0xb6,0xc1,0x4a,0x5d,0x38,0x7c,0x33,0x6b,0xa3,0x77,0x29,0x45,0x47,0x4f, + 0x26,0x6b,0x52,0x61,0x56,0x5d,0x38,0x3c,0x32,0x2b,0xa3,0xa9,0x29,0x50,0x27,0x37, + 0xa8,0x72,0x6a,0x61,0x6a,0x5d,0x3f,0x3c,0x33,0xad,0xa3,0x29,0x29,0x4e,0x27,0x3d, + 0x46,0x7e,0x6e,0x66,0x45,0x5e,0x58,0xae,0x58,0x23,0xad,0x75,0x2b,0xa2,0x47,0xa2, + 0x36,0x26,0x4b,0x7d,0x2b,0x6f,0x47,0x25,0x26,0x26,0x62,0x66,0x46,0x5e,0x5c,0x7c, + 0x54,0x6b,0xad,0x39,0x2b,0x76,0x47,0x23,0xb8,0x25,0x3e,0x66,0x3c,0x5e,0x5b,0x5c, + 0x58,0x2b,0xac,0xbd,0x2b,0x77,0x47,0x24,0x76,0x25,0x6e,0x66,0x44,0x5e,0x58,0x5c, + 0x5f,0x23,0xb2,0x4b,0x2c,0xa8,0x27,0xbd,0x76,0x2f,0x76,0x68,0x7b,0x5e,0xb6,0x7c, + 0x61,0xa5,0xb3,0xa3,0x2d,0x4c,0x28,0x59,0x66,0xae,0x5e,0x6b,0x72,0x5f,0x23,0xae, + 0x24,0xbd,0xb7,0xad,0x2e,0x59,0x28,0x5a,0xa8,0xad,0x26,0x6b,0x64,0x5f,0xa1,0x7c, + 0x26,0x43,0xb7,0xbd,0x2e,0x49,0x28,0x5c,0x46,0xad,0x3a,0x6b,0x6a,0x5f,0x23,0x5c, + 0x24,0x73,0xb7,0xbb,0x2e,0x4a,0x48,0x57,0xa8,0xad,0x32,0x6b,0x76,0x5f,0x22,0x3c, + 0xa7,0x3b,0xbc,0x61,0x30,0x24,0x5a,0x7c,0xbd,0x5b,0xc1,0x27,0x30,0xa7,0x29,0x48, + 0x47,0x37,0x62,0x72,0xa5,0x61,0x64,0x7d,0x3d,0x54,0x31,0x5a,0x57,0xc2,0x31,0xc2, + 0xb6,0xb2,0x7a,0x71,0x3b,0x61,0x76,0x7d,0x41,0x5c,0x38,0xad,0xa3,0x3a,0x29,0x70, + 0x37,0x38,0xb4,0x72,0xc1,0x61,0x61,0x5d,0x31,0x4c,0x35,0x61,0xa4,0x3f,0x29,0x53, + 0x37,0x40,0xc0,0x71,0x35,0x61,0x73,0xaf,0x45,0x24,0x3b,0x59,0xa6,0x29,0x29,0xb9, + 0x37,0x4f,0x6a,0x78,0xa8,0x62,0xbd,0x3d,0x6f,0xbe,0x40,0x37,0xa6,0xa1,0x2a,0x4f, + 0x67,0x4f,0x5a,0x78,0xa3,0x62,0xc0,0x7d,0x6e,0x5c,0x40,0xa7,0xa6,0xbd,0x29,0xaf, + 0x47,0x57,0xc0,0x78,0x6f,0x62,0xba,0x5d,0x6e,0xa6,0x40,0x39,0xa6,0xaf,0x49,0xbd, + 0x67,0x4f,0x3a,0x78,0x78,0x62,0xb6,0x3d,0x6d,0x2c,0x40,0x41,0xa6,0xbb,0x49,0xbd, + 0xb9,0x4f,0xa8,0x77,0x63,0x63,0x2a,0xaf,0x27,0x24,0x46,0x79,0xa8,0x5f,0x4a,0x5e, + 0x37,0x5c,0x46,0x7c,0x3d,0x63,0xaa,0x5d,0x2a,0xb6,0x47,0x2d,0xa8,0xab,0x4a,0x6b, + 0x5b,0x61,0x65,0x36,0xbf,0xb6,0x30,0x3d,0xa9,0xa6,0x4a,0xb9,0xa9,0x71,0x4a,0xa1, + 0x47,0x64,0xa8,0x7d,0xad,0x64,0x4d,0x7d,0xa3,0x3c,0x4d,0x49,0xac,0xac,0x2b,0x31, + 0x77,0xa1,0xb4,0x21,0x5b,0x65,0xbe,0x3e,0x3f,0x24,0x54,0xa5,0xab,0x38,0x2b,0x6b, + 0xa9,0x78,0x2e,0x22,0xae,0x65,0x6a,0x3e,0x40,0x64,0x51,0x57,0xac,0x39,0x4b,0x6f, + 0x67,0x78,0x36,0x21,0x38,0x65,0xb6,0x3e,0x31,0x74,0x56,0xa3,0xac,0x2b,0x4b,0x33, + 0x47,0xa2,0x6e,0x22,0x77,0x65,0x36,0x3e,0x50,0x74,0x54,0x51,0xab,0xc1,0x2b,0x50, + 0x77,0x78,0x52,0x21,0x3c,0x65,0x73,0x7e,0x42,0x6c,0x58,0x4d,0xab,0xa7,0x4b,0x4c, + 0x27,0x77,0xbc,0x22,0xa9,0x65,0x6e,0x3e,0x3e,0x3c,0x51,0x3d,0xac,0xad,0x4b,0x4e, + 0x47,0x71,0x26,0x23,0x56,0x65,0xb4,0xb0,0x34,0x7c,0x5d,0xb9,0xae,0x50,0x2b,0xaa, + 0x77,0x2d,0x22,0x28,0x48,0x66,0xa9,0x5e,0x6a,0x5c,0x5f,0xbd,0xae,0xbb,0x4b,0xc1, + 0x57,0x30,0x7e,0x27,0x61,0x67,0x70,0x3e,0x25,0x64,0x6a,0x3f,0xb1,0x40,0x2c,0x7a, + 0x47,0xb7,0x52,0x2d,0x6d,0x68,0x40,0x5e,0xa7,0x5c,0x6a,0x75,0xb1,0x46,0x2c,0x78, + 0xb9,0xb5,0x36,0x2d,0x2e,0x68,0x4d,0xb0,0xa4,0xa6,0x69,0xa9,0xb1,0x56,0x2c,0x79, + 0x37,0xb5,0x76,0x2d,0x6c,0x68,0x31,0xb0,0xa5,0xb6,0x6a,0x6e,0x57,0xc2,0x31,0xc2, + 0xb7,0x7c,0x52,0x2d,0x2d,0x68,0x49,0x5e,0xa6,0x3c,0x69,0x21,0xb1,0x61,0x4c,0xa1, + 0x47,0xb6,0x5e,0x2d,0x6a,0x68,0x39,0x7e,0xa6,0x34,0x6a,0x57,0xb1,0x63,0x2c,0x75, + 0xb9,0xb6,0xa4,0x2d,0xa7,0x68,0x4e,0xb0,0xa8,0x5c,0x6a,0xb5,0xb1,0x5a,0x4c,0x7d, + 0xa9,0xb4,0x26,0x2d,0x67,0x68,0x47,0x7e,0xa5,0x34,0x75,0x6d,0xb4,0x48,0x2d,0x70, + 0x68,0x32,0x6a,0xa5,0x62,0x69,0x79,0xb1,0x43,0x5c,0x75,0x75,0xb4,0x4a,0x4d,0x54, + 0xba,0x3a,0x52,0xa5,0x6b,0x69,0x77,0xb1,0x45,0x2c,0x7a,0x65,0xb5,0x75,0x4d,0x22, + 0x48,0x45,0x4a,0xa8,0x36,0x6a,0x53,0xb1,0x52,0x44,0x7d,0x47,0xb6,0x49,0x4d,0xa7, + 0x58,0x4a,0x76,0xa9,0x64,0x6a,0x7a,0xb1,0x64,0x44,0x7d,0x2b,0xb6,0x44,0x4d,0xa7, + 0x68,0x4a,0x26,0xa9,0x3d,0x6a,0x7c,0xa1,0x73,0xa6,0x21,0xa3,0xb7,0x46,0x2e,0x33, + 0xad,0x61,0x65,0x36,0xc2,0x4e,0x37,0xa1,0x73,0x3c,0x21,0x2b,0xb7,0x49,0x2e,0x35, + 0x78,0x52,0x3e,0xab,0x4e,0x6b,0x3b,0x5f,0x73,0x34,0x21,0xa7,0xb7,0xc0,0x2e,0x36, + 0xba,0x5c,0x6e,0xad,0xaf,0x6b,0xbc,0xb1,0x2e,0x24,0x28,0x73,0xb8,0xb6,0x4e,0x6c, + 0x28,0x5f,0xc0,0xae,0xa7,0x6b,0xb8,0xb1,0x2a,0x5c,0x2b,0x55,0xb9,0xb0,0x4e,0x79, + 0xaa,0x6b,0x4e,0xb1,0x75,0x6c,0x24,0x5f,0xb7,0x5c,0x2e,0x45,0xba,0x58,0x4e,0xac, + 0x68,0x6b,0x62,0xb2,0x2f,0x6c,0xbe,0x3f,0xb9,0x34,0xa4,0x79,0xbb,0x63,0x2f,0x3c, + 0x78,0x74,0x66,0xb3,0xb4,0x6d,0x4b,0xa2,0x37,0xb6,0xa4,0xa3,0xbb,0x65,0x2f,0x3e, + 0x38,0x73,0xbc,0xb3,0xa5,0x6d,0x4e,0x40,0x48,0x4c,0xa8,0xa7,0xbc,0x69,0x4f,0x51, + 0x58,0x21,0x5a,0xb7,0x34,0x6e,0x34,0x40,0x51,0x54,0xad,0x63,0xbd,0xb6,0x4f,0x2d, + 0x78,0x23,0x5a,0xb9,0x6c,0x6e,0x22,0x40,0x65,0x74,0xb0,0x49,0xbe,0x58,0x4f,0xab, + 0x38,0x2b,0xa4,0xb9,0x76,0x6e,0xab,0xa2,0x7a,0xb6,0xb5,0x21,0xbf,0x21,0x30,0x3c, + 0x38,0xae,0x6e,0xbd,0xa6,0x6f,0x25,0xb2,0x26,0x64,0xb8,0xa1,0xc0,0x66,0x50,0x5a, + 0xba,0xae,0x66,0xbd,0x2d,0x6f,0x2b,0xb2,0x26,0x44,0xb8,0x59,0xc0,0x65,0x30,0x5b, + 0x48,0xad,0xc0,0xbd,0xa1,0x6f,0xa2,0xa2,0xb6,0xbe,0xc0,0x7c,0x57,0xc2,0x31,0xc2, + 0x7c,0x64,0x4a,0xc2,0x53,0x70,0xab,0x40,0xbd,0x3c,0xc2,0x5f,0xc2,0x59,0xa3,0x3a, + 0xbb,0x33,0x73,0x32,0xc1,0x71,0x66,0x41,0x35,0x4d,0x36,0x46,0x32,0x5a,0x51,0x5a, + 0xbb,0x3b,0x4f,0x33,0x6e,0x71,0x24,0x61,0x44,0x25,0x38,0x7e,0x32,0xba,0x51,0x6f, + 0xbb,0x40,0xa5,0x34,0xbc,0x71,0x72,0x41,0x54,0xa7,0x39,0xbe,0x33,0x50,0xa3,0xa1, + 0x29,0x42,0xb1,0x38,0xa2,0x72,0xc1,0x61,0x63,0x4d,0x44,0x32,0x34,0xb7,0x51,0xa5, + 0x59,0x58,0x4f,0x38,0xa7,0x72,0xc2,0x41,0x70,0x65,0x3d,0x52,0x35,0xa6,0x51,0xbc, + 0x39,0x50,0x5f,0x38,0xa6,0x72,0xb2,0xb3,0x61,0x3d,0x44,0x6c,0x34,0xb5,0xa3,0xbe, + 0x39,0x50,0xc1,0x38,0xa4,0x72,0xb5,0xb3,0x6d,0xb7,0x40,0x5e,0x34,0xbd,0xa3,0xbc, + 0x49,0x49,0x57,0x39,0x40,0x73,0x68,0x21,0x62,0x3d,0x41,0x3e,0x35,0xa4,0x51,0xc1, + 0x6b,0x61,0x65,0x36,0xc2,0x38,0xb8,0x61,0x70,0x25,0x40,0x40,0x34,0xab,0xa3,0xc0, + 0x59,0x49,0xa1,0x3a,0x74,0x72,0xbe,0x41,0x6f,0xb7,0x40,0x3a,0x34,0xc0,0xa3,0xbd, + 0xbb,0x50,0x3b,0x37,0x4c,0x73,0x67,0xb3,0x70,0xb7,0x40,0x62,0x37,0xb4,0x52,0x2d, + 0xab,0x67,0xa1,0x3e,0xa6,0x74,0x67,0x21,0xb1,0x25,0x4c,0x6c,0x37,0xb8,0xa4,0x2c, + 0x79,0x68,0x63,0x3e,0xac,0x74,0x66,0xb3,0xb1,0x75,0x4c,0x54,0x37,0x55,0x53,0x3b, + 0xab,0x73,0x27,0x42,0x6b,0x75,0x66,0xb4,0x3c,0x7d,0x53,0xb4,0x39,0xa3,0x53,0x48, + 0xab,0x76,0x2b,0x42,0x6d,0x75,0x5e,0xb4,0x3c,0xaf,0x53,0xa8,0x39,0x31,0xa5,0x6a, + 0x49,0x75,0x27,0x44,0x49,0x75,0xa8,0xb4,0x4e,0xaf,0x58,0x66,0x3a,0xb0,0xa5,0x5a, + 0xab,0x23,0x67,0x45,0x6a,0x76,0x47,0x62,0x55,0x35,0x5a,0x60,0x3b,0x5d,0x53,0x79, + 0x79,0x23,0x47,0x45,0x23,0x76,0x43,0x42,0x56,0x3d,0x5a,0x46,0x3b,0x57,0x53,0x7a, + 0xbb,0x23,0xc1,0x4a,0x32,0x77,0x51,0x42,0x7c,0x25,0x63,0xc0,0x3d,0x29,0x54,0x48, + 0x49,0xa8,0x27,0x4a,0x35,0x77,0xa3,0x42,0x29,0x7d,0x68,0x62,0x3e,0xac,0xa6,0x6a, + 0x29,0xb1,0x4f,0x4c,0x27,0x77,0xba,0x42,0x2d,0xbf,0x68,0x5c,0x3e,0xaf,0xa6,0x6a, + 0x39,0xb1,0x2f,0x4c,0x76,0x77,0xbe,0xb4,0xb2,0x6d,0x6c,0xb8,0x3f,0x24,0x70,0x71, + 0x70,0xbf,0x5f,0x4e,0xa9,0x78,0x6c,0x22,0xb1,0x5d,0x6c,0xae,0x3f,0xb6,0xa6,0x2e, + 0x39,0xba,0x2b,0x4e,0xae,0x78,0x6d,0x62,0xb1,0xa7,0x6c,0xac,0x3f,0xb7,0xa6,0x76, + 0x2a,0x32,0x23,0x51,0x60,0x79,0x32,0x23,0x43,0xa7,0x75,0x3a,0x42,0xc2,0xa7,0x50, + 0x7a,0x31,0x53,0x54,0xbc,0x79,0x6f,0xb5,0x31,0x3d,0x75,0x32,0x42,0x34,0xa7,0x51, + 0x2a,0x39,0x3f,0x53,0xa4,0x79,0x2a,0x43,0x46,0xbf,0x76,0x76,0x42,0x61,0x55,0x51, + 0x4a,0x41,0x5b,0x55,0x56,0x7a,0x31,0xb5,0x52,0x25,0x79,0x7e,0x43,0x38,0xa7,0x72, + 0x7a,0x41,0x33,0x55,0x43,0x7a,0x70,0xb5,0x50,0xaf,0x75,0x3e,0x43,0x33,0x55,0x75, + 0xbc,0x41,0x3b,0x55,0x4d,0x7a,0x3a,0x43,0x52,0x7d,0x79,0x60,0x43,0x33,0xa7,0x73, + 0xac,0x44,0xb1,0x5c,0x3e,0x7b,0xa6,0x43,0x2a,0x35,0x27,0x40,0x47,0x70,0x56,0x22, + 0x3b,0x61,0x65,0x36,0xc2,0x5c,0xa5,0x63,0xab,0x4d,0x2b,0x32,0x47,0xa4,0x56,0x2a, + 0x3a,0x67,0x3f,0x5e,0xb4,0x7c,0x6d,0x43,0xa9,0xa7,0x2e,0xa4,0x48,0x68,0x56,0xa3, + 0xbc,0x76,0x57,0x62,0xae,0x7d,0x6a,0x24,0xa2,0x7d,0xbd,0x37,0xa1,0x73,0x44,0x27, + 0xa7,0xb8,0xb8,0x52,0x70,0x59,0x62,0x7b,0x3b,0xb5,0x74,0x39,0x21,0xa8,0x45,0x47, + 0x76,0x37,0x52,0x52,0x73,0x59,0x5d,0x3b,0x3d,0x3b,0x73,0xb7,0x21,0x29,0x25,0x4a, + 0x66,0x37,0x56,0x52,0x67,0x59,0x5f,0x3b,0x3e,0x6b,0x76,0xb7,0x23,0x6d,0x45,0xa2, + 0x66,0x44,0xb4,0x56,0x74,0x5b,0xb9,0xad,0x2d,0xa5,0x28,0x51,0x26,0xa8,0x26,0x6a, + 0x56,0x5f,0xb8,0x5c,0x71,0x5b,0xb8,0x3b,0x2d,0x53,0x28,0x23,0x26,0x30,0x26,0x6b, + 0x56,0x5d,0x66,0x5c,0xa2,0x5b,0xb8,0x5b,0x2f,0x43,0x28,0x5d,0x26,0xa7,0x46,0x6f, + 0x56,0x5f,0x66,0x5c,0x2a,0x5b,0xb3,0x7b,0x22,0x53,0x2e,0x57,0x29,0x65,0x47,0x3d, + 0x76,0x73,0x6e,0x61,0x7e,0x5d,0x43,0x5c,0x37,0xbd,0xa4,0x5b,0x29,0x58,0x47,0x3c, + 0x26,0x73,0xa8,0x61,0xa8,0x5d,0x47,0xae,0x34,0xad,0xa4,0x77,0x29,0x69,0x27,0x50, + 0x76,0x77,0x4e,0x66,0x75,0x5e,0x63,0xae,0x5c,0x23,0xad,0xb3,0x2b,0x29,0x27,0x27, + 0x26,0x26,0x72,0x66,0x70,0x5e,0x63,0x3c,0x5c,0x2b,0xae,0x3e,0x57,0xc2,0x31,0xc2, + 0xb7,0x2e,0x2e,0x66,0x71,0x5e,0x63,0x7c,0x5c,0x53,0xad,0xaf,0x2b,0xa9,0x27,0x28, + 0x46,0x25,0x72,0x66,0x27,0x5e,0xb9,0x3c,0x6e,0x7b,0xaf,0x6f,0x2d,0x4a,0x28,0x3f, + 0x46,0xae,0x3e,0x6b,0x7b,0x5f,0x2a,0x5c,0x28,0x43,0xb8,0x29,0x2e,0x60,0x48,0x5e, + 0x36,0xae,0x4e,0x6b,0xa5,0x5f,0xbf,0x3c,0x25,0xbd,0xbc,0x4d,0x2f,0x56,0x48,0x7a, + 0x26,0xb5,0x5e,0x6e,0x76,0x60,0x64,0x3c,0xaf,0x63,0xbe,0x47,0x2f,0xa6,0x28,0x79, + 0x36,0xc0,0x6e,0x70,0x5e,0x60,0xc0,0xaf,0x35,0x7c,0x36,0x45,0xa4,0x46,0x29,0x59, + 0x27,0x3a,0x2a,0x73,0x63,0x61,0x7c,0x7d,0x45,0x64,0x35,0x2f,0xa4,0x58,0x29,0x56, + 0x47,0x3b,0x32,0x73,0x51,0x62,0x4b,0x43,0x43,0x4c,0x39,0x7b,0xa5,0x43,0x49,0x29, + 0x27,0x50,0x76,0x78,0xae,0x62,0x75,0x3d,0x72,0x44,0x41,0x43,0xa7,0x41,0x4a,0x35, + 0x7b,0x61,0x65,0x36,0xbf,0xbb,0x7d,0xaf,0x75,0x4c,0x41,0x6f,0xa7,0x3b,0x2a,0x34, + 0x37,0x52,0xa8,0x79,0x68,0x63,0x39,0x7d,0x73,0x4c,0x41,0x49,0xa7,0x44,0x4a,0x37, + 0x37,0x52,0x52,0x79,0x72,0x63,0x3e,0x5d,0x73,0xbe,0x41,0x45,0xa7,0x3e,0x4a,0x39, + 0x37,0x52,0x46,0x79,0x58,0x63,0x33,0xaf,0xa1,0x6c,0x3d,0x67,0xa7,0x48,0x4a,0x35, + 0x47,0x51,0x6a,0x79,0xb2,0x63,0xa7,0x7d,0x2e,0x4c,0x47,0x3d,0xa9,0x77,0x4a,0x23, + 0x27,0x65,0x72,0x7e,0x3c,0x64,0x53,0x7d,0xac,0x7c,0x4b,0x59,0xa9,0x6d,0x4a,0x75, + 0x37,0x6c,0x4a,0x23,0x30,0x65,0xa1,0x3e,0x45,0xb6,0x56,0x75,0xac,0x69,0x2b,0x58, + 0xb9,0x7b,0x46,0x23,0xad,0x65,0xa1,0x5e,0x45,0x44,0x56,0x5f,0xac,0x5d,0x2b,0x60, + 0x57,0x7b,0x52,0x23,0x7a,0x65,0x7e,0x5e,0x47,0xa6,0x55,0xa9,0xac,0x4f,0x2b,0x5d, + 0x27,0xa2,0x72,0x21,0xbb,0x65,0x7e,0x3e,0x47,0x7c,0x56,0x31,0xac,0x68,0x2b,0x59, + 0x77,0x7c,0x2a,0x23,0x29,0x65,0x21,0x5e,0x48,0x54,0x56,0x49,0xac,0x4e,0x2b,0x5a, + 0x67,0x7a,0x2e,0x23,0x2d,0x65,0x24,0xb0,0x46,0x3c,0x55,0xa7,0xac,0x5a,0x4b,0x56, + 0xb9,0x7c,0xb0,0x23,0x6d,0x65,0x22,0x7e,0x65,0x5c,0x5e,0x37,0xae,0x52,0x4b,0xac, + 0x37,0x2b,0x36,0x28,0x4c,0x66,0x74,0x70,0x60,0x2c,0x60,0xbc,0x57,0xc2,0x31,0xc2, + 0xb4,0x70,0xa8,0x28,0xba,0x66,0xc1,0x3e,0x6a,0x2c,0x6c,0x5d,0xb1,0xa7,0x4c,0x22, + 0xb9,0xb9,0x32,0x2e,0x50,0x68,0x55,0xb0,0xac,0x54,0x6b,0x71,0xb1,0x29,0x2c,0x28, + 0x47,0xb9,0x4a,0x2e,0x23,0x68,0x60,0x5e,0xaf,0x3c,0x6b,0x6d,0xb1,0xa7,0x2c,0x27, + 0xb9,0xb8,0x72,0x2e,0x7e,0x68,0x5a,0x25,0xa9,0xb9,0x6e,0x2e,0x63,0x68,0x60,0x7e, + 0xaf,0x4c,0x6c,0x69,0xb1,0xaf,0x4c,0x24,0x47,0xb7,0x7a,0x2e,0x3f,0x68,0x54,0x5e, + 0xad,0x54,0x6b,0x73,0xb1,0x30,0x2c,0x27,0x67,0xb9,0x72,0x2e,0x7b,0x68,0x56,0xb0, + 0xad,0xb6,0x6b,0x77,0xb1,0x54,0x2d,0x5b,0x78,0x3b,0x7a,0xa5,0xa6,0x69,0x29,0x3f, + 0x45,0x3c,0x76,0x6b,0xb4,0x62,0x4d,0x5f,0x58,0x3c,0xa4,0xa5,0xad,0x69,0x29,0x5f, + 0x45,0x44,0x76,0x61,0xb4,0x52,0x2d,0x5a,0x68,0x3c,0x72,0xa5,0x30,0x69,0x25,0x3f, + 0x46,0x4e,0x49,0x4b,0x33,0xc1,0x67,0x59,0x78,0x3b,0x66,0xa5,0x2b,0x69,0x24,0xb1, + 0x59,0xae,0x7b,0x49,0xb5,0x79,0x2d,0x23,0x38,0x45,0x6a,0xa7,0x6d,0x6a,0x21,0xa1, + 0x64,0x2c,0x7d,0xb7,0xb6,0x51,0x4d,0xac,0x58,0x4b,0x56,0xa9,0x75,0x6b,0x43,0xa1, + 0x75,0x2c,0x22,0x55,0xb7,0x59,0x2e,0x3b,0xba,0x53,0x32,0xab,0xa2,0x6b,0x45,0x3f, + 0x75,0xb6,0x22,0x35,0xb7,0x54,0x4e,0x3a,0x28,0x53,0x22,0xac,0xa4,0x6b,0x70,0xb1, + 0xa2,0xb6,0x24,0xbd,0xb7,0x3f,0x2e,0x60,0x48,0x5c,0x2e,0xae,0x34,0x65,0xbe,0xb1, + 0x21,0xbe,0x29,0x37,0xb9,0xbe,0x2e,0x70,0xaa,0x60,0xb4,0xae,0xbc,0x6b,0xc1,0x3f, + 0x22,0x34,0x2c,0xb9,0xb8,0xbe,0x4e,0x6e,0x28,0x60,0x26,0xae,0xc0,0x6b,0xa9,0x5f, + 0xae,0x5c,0x2c,0x6b,0xb9,0x5b,0x2e,0xae,0xba,0x6c,0x32,0xb1,0x23,0x6c,0x26,0xa1, + 0xb8,0x24,0x2e,0x23,0xba,0x64,0x2e,0xad,0x78,0x6b,0xa8,0xb1,0xb0,0x6c,0xbb,0x3f, + 0xbb,0x6c,0xa5,0x65,0xbb,0x7b,0x4f,0x42,0xba,0x75,0x42,0xb4,0x46,0x6d,0x52,0x60, + 0x39,0x64,0xa5,0x73,0xbb,0x72,0x2f,0x40,0x48,0x75,0xa8,0xb4,0x31,0x6d,0x56,0xa2, + 0x38,0x2c,0xa4,0xbb,0xbc,0x72,0x4f,0x60,0x28,0x7c,0xa8,0xb5,0x42,0x6e,0x37,0x40, + 0x52,0x7c,0xab,0x55,0xbd,0x3c,0x2f,0x73,0x28,0x22,0x3a,0xb7,0x44,0x24,0x70,0x71, + 0x70,0xbb,0xb7,0x67,0xbd,0x39,0x4f,0x25,0x68,0x26,0x3a,0xb8,0x4f,0x6e,0x6b,0xb2, + 0x57,0x64,0xb0,0x79,0xbe,0x67,0x2f,0xb1,0x78,0x2c,0x56,0xb9,0xb5,0x6e,0x2a,0x60, + 0x68,0x4c,0xb0,0xa5,0xbe,0x69,0x4f,0xaf,0x48,0x2c,0xa4,0xb9,0xb9,0x6e,0x29,0xb2, + 0x6c,0x44,0xb5,0xab,0xbf,0x28,0x30,0x42,0x38,0xaf,0x4a,0xbe,0x31,0x6f,0xa6,0x60, + 0x28,0xbe,0xb9,0x3b,0xc0,0x6e,0x50,0x62,0xaa,0xae,0xb0,0xbe,0x34,0x6f,0x30,0x40, + 0x29,0xa6,0xb9,0x59,0xc0,0x73,0x50,0x60,0x28,0xaf,0x7a,0xbd,0xb0,0x70,0x2b,0xb2, + 0xb9,0x6c,0xc0,0x21,0xc2,0x67,0x50,0xb7,0xad,0x64,0xc1,0x7b,0xc2,0x24,0x30,0xbe, + 0x68,0xc1,0xb4,0xc1,0x52,0x71,0x4a,0x41,0x47,0x35,0x36,0xb2,0x32,0x5f,0x51,0x5e, + 0x49,0x3b,0xb1,0x33,0xa5,0x71,0x2d,0x21,0x43,0x3c,0x4e,0x6e,0x32,0x6c,0x51,0x5d, + 0xbb,0x3c,0x6f,0x7d,0x3e,0x32,0x70,0xac,0x25,0x55,0x36,0x74,0x32,0x3f,0xa3,0x7a, + 0x49,0x43,0x43,0x35,0x71,0x72,0x41,0x21,0x55,0x5d,0x3c,0xa6,0x35,0x50,0xa4,0x3b, + 0xab,0x54,0x2b,0x39,0xbc,0x73,0x54,0xb3,0x79,0xaf,0x42,0x7c,0x35,0x59,0xa4,0x39, + 0x39,0x55,0x4b,0x39,0xaa,0x73,0x3d,0x41,0x75,0xaf,0x42,0xbe,0x35,0x5e,0x52,0x3c, + 0x49,0x54,0x23,0x39,0xb6,0x73,0x48,0x61,0x71,0x6d,0x46,0x6e,0x35,0x4c,0xa4,0x38, + 0x59,0x52,0x23,0x39,0xbd,0x73,0x41,0xb3,0x78,0x75,0x41,0xa8,0x35,0x53,0xa4,0x36, + 0x49,0x57,0xa9,0x37,0x7c,0x73,0x3c,0xb3,0x75,0x45,0x41,0x2c,0x35,0x60,0xa4,0x3f, + 0x39,0x52,0xa9,0x39,0xa1,0x73,0x44,0x41,0x76,0x45,0x42,0x30,0x35,0xa5,0xa4,0x42, + 0xab,0x52,0xb1,0x39,0x78,0x73,0x3e,0x21,0x74,0x4d,0x42,0x22,0x35,0x70,0x52,0x39, + 0x79,0x52,0x5f,0x39,0xa3,0x73,0x46,0x41,0x77,0xb7,0x42,0x52,0x35,0x36,0xa4,0xa3, + 0x79,0x70,0x2f,0x3d,0x3d,0x74,0xc1,0x21,0xb0,0x65,0x4c,0xae,0x37,0x57,0xa4,0xc2, + 0x39,0x61,0x6b,0x3f,0x3a,0x74,0x71,0x61,0xc2,0x65,0x49,0x4c,0x38,0x33,0xa4,0xbd, + 0xab,0x77,0x5f,0x42,0x7e,0x75,0x64,0x22,0x3e,0xb7,0x54,0x68,0x39,0xb0,0x53,0x4a, + 0x79,0x77,0x73,0x42,0x36,0x75,0xa9,0xb4,0x4e,0xbf,0x58,0x7c,0x3a,0xb5,0x53,0x65, + 0xb2,0xb3,0x40,0xc2,0x34,0x75,0xbb,0x42,0x4f,0x45,0x58,0x6a,0x3a,0xb6,0x53,0x5f, + 0xab,0x25,0x4b,0x45,0xc2,0x76,0x49,0x62,0x54,0xbf,0x5a,0xb2,0x3b,0x72,0x53,0x21, + 0x79,0x24,0x27,0x46,0x34,0x76,0x51,0x62,0x58,0x55,0x5a,0xb8,0x3b,0x4f,0x54,0x3a, + 0x69,0xa5,0x5b,0x49,0xa8,0x77,0x4a,0x42,0x77,0x65,0x63,0x3e,0x3d,0x73,0x54,0x41, + 0x29,0xa9,0x63,0x49,0xab,0x77,0x2b,0x62,0x2a,0x3d,0x67,0x4a,0x3e,0x78,0x54,0x62, + 0xbb,0xaf,0x67,0x4c,0x44,0x77,0xa8,0x42,0x2a,0x35,0x67,0x56,0x3e,0xbb,0x54,0x6d, + 0x39,0xb2,0x63,0x4c,0xb4,0x77,0xbe,0x22,0x2e,0x35,0x68,0x24,0x3e,0xb4,0xa6,0x6d, + 0x59,0xb2,0x4f,0x4c,0xb5,0x77,0xbd,0xb4,0x30,0x55,0x65,0x3e,0x40,0xc2,0xa6,0x71, + 0x49,0xbb,0x33,0x4f,0x36,0x78,0x72,0xb4,0xb3,0x75,0x6d,0x36,0x40,0x36,0xa6,0xad, + 0x5a,0x32,0xc1,0x7d,0x3e,0x32,0x70,0xae,0x45,0x55,0x72,0x44,0x41,0x4f,0xa7,0x33, + 0x3a,0x39,0x67,0x53,0x40,0x79,0x75,0x63,0x42,0x65,0x75,0x5a,0x42,0x36,0xa7,0x52, + 0xac,0x3c,0x6b,0x53,0xb2,0x79,0x23,0x43,0x56,0x45,0x79,0xa4,0x43,0x4e,0x55,0x7d, + 0xac,0x42,0xa1,0x55,0xa8,0x7a,0x48,0x23,0x59,0x4d,0x79,0x2e,0x43,0x56,0x55,0x79, + 0xac,0x44,0x67,0x55,0xaf,0x7a,0x44,0xb5,0x57,0x35,0x7a,0xa2,0x43,0x68,0xa7,0x77, + 0xac,0x44,0x37,0x55,0xb3,0x7a,0x3d,0x63,0x56,0x55,0x7a,0x78,0x43,0x59,0x55,0xa1, + 0x5a,0x43,0x6b,0x55,0x24,0x7a,0x44,0x43,0x56,0x65,0x79,0xa8,0x43,0xa2,0xa8,0x64, + 0x7a,0x5d,0xbd,0x5c,0x4c,0x7b,0xa7,0x23,0xac,0x4d,0x2b,0x54,0x47,0x7c,0xa8,0x2a, + 0xac,0x68,0xad,0x5e,0xc0,0x7c,0x6f,0x43,0xb2,0x5d,0x2a,0xaa,0x48,0x6c,0xa8,0xb2, + 0x3a,0x6c,0x7b,0x5f,0x40,0x7d,0x34,0x64,0x31,0xb7,0xa5,0x2a,0x49,0xbe,0x57,0x50, + 0x4a,0x76,0x6f,0x64,0x63,0x7d,0xaf,0x44,0x4c,0x5d,0xa9,0x2c,0x4b,0x26,0xa9,0x7c, + 0x6a,0x30,0x5b,0x6a,0xb0,0xa1,0x6a,0xb6,0x79,0x35,0xbe,0xbe,0x4f,0xb6,0x45,0x4b, + 0x76,0x37,0x2e,0x52,0xab,0x59,0x6d,0xad,0x3e,0x2b,0x74,0x25,0x21,0xb1,0x25,0x4d, + 0x76,0x37,0x7e,0x52,0xaf,0x59,0x6d,0x3b,0x3f,0xbd,0x74,0x77,0x21,0xb3,0x5a,0x30, + 0xb3,0x50,0xb3,0x71,0x32,0xaf,0x45,0x61,0x36,0x45,0x36,0x56,0xac,0x5a,0x6b,0xad, + 0x54,0x33,0xa1,0x29,0x24,0x44,0x26,0x73,0x26,0x61,0x62,0x5d,0x43,0x5c,0x70,0x3b, + 0x21,0xbd,0x29,0x69,0x27,0x31,0x26,0x73,0x66,0x61,0x3a,0x5e,0xbd,0x5b,0x78,0x5b, + 0xa3,0x53,0x2c,0xc1,0x26,0xbf,0x26,0x62,0x46,0x74,0xb4,0x62,0x41,0x5d,0x57,0x3c, + 0x39,0x63,0xa5,0x33,0x29,0x70,0x27,0x3f,0x76,0x75,0x5e,0x61,0xbd,0x5d,0x52,0xae, + 0x3a,0x3b,0xa5,0x4d,0x29,0x6c,0x47,0x41,0x56,0x75,0x52,0x61,0xbe,0x5d,0x56,0x3c, + 0x39,0xbd,0xa6,0xbf,0x29,0x66,0x27,0x6c,0x76,0x28,0x6a,0x66,0xa8,0x5e,0x66,0x5c, + 0x5f,0x23,0xae,0x65,0x2b,0xb9,0x27,0x2e,0x66,0x28,0x7e,0x66,0xa5,0x5e,0x69,0x3c, + 0x5e,0x2b,0xae,0x29,0x2b,0xb2,0x47,0x2c,0x26,0x27,0xa8,0x66,0xab,0x5e,0x68,0xae, + 0x58,0x6b,0xb2,0x72,0x57,0x38,0x31,0x30,0x71,0x29,0x38,0x77,0x2c,0x62,0x28,0x41, + 0x56,0xaf,0x32,0x6b,0xc0,0x5f,0xa4,0x7c,0x28,0x23,0xb9,0x33,0x2e,0x6c,0x28,0x62, + 0x56,0xaf,0x56,0x6c,0x39,0x5f,0x30,0x7c,0x28,0xa5,0xb9,0x4b,0x2e,0x6d,0x28,0x60, + 0xb8,0xad,0xa4,0x6d,0x2a,0x60,0x45,0xae,0xb0,0x73,0xbe,0x53,0x2f,0xae,0x28,0x2a, + 0xa8,0xb9,0xb4,0x6e,0x26,0x60,0x67,0x5c,0xb0,0x43,0xbe,0x59,0x2f,0x53,0x48,0xab, + 0x66,0xbe,0x6e,0x70,0x67,0x60,0x7c,0x3d,0x43,0x74,0x36,0x33,0xa4,0x60,0x49,0x5f, + 0x47,0x3c,0x7e,0x73,0x23,0x61,0x25,0xaf,0x48,0x44,0x36,0x29,0xa4,0x71,0x49,0x5f, + 0x77,0x3b,0x22,0x73,0xbd,0x61,0x27,0xaf,0x47,0x5c,0x35,0xb9,0xa4,0x66,0x49,0x5d, + 0x47,0x3b,0x2a,0x73,0x5a,0x62,0x3a,0xaf,0x53,0x2c,0x39,0x27,0xa7,0x57,0x2a,0x3c, + 0x67,0x53,0xb8,0x79,0xb7,0x63,0x4e,0x7d,0x78,0x44,0x42,0xa9,0xa7,0x6f,0x2a,0x3f, + 0x27,0x54,0x4a,0x7a,0x57,0x24,0x4a,0x3a,0xa9,0x55,0x3a,0x79,0x2f,0x63,0x48,0x3d, + 0x75,0x2c,0x42,0x57,0xa7,0x61,0x4a,0x3b,0x37,0x54,0xc0,0x79,0x70,0x63,0x4c,0x3d, + 0x77,0x2c,0x42,0x63,0xa7,0x63,0x2a,0x3f,0xb9,0x54,0x7e,0x7c,0x51,0x63,0xab,0x5d, + 0xad,0x34,0x4b,0x6f,0xa9,0x33,0x2a,0xa3,0x77,0x6a,0x3a,0xa2,0x62,0x65,0xb0,0x7e, + 0x4d,0x7e,0x4c,0xbf,0x34,0xc1,0x6d,0x45,0x37,0xa1,0x6a,0x24,0x47,0x65,0xaf,0x3e, + 0x4b,0xa6,0x57,0xbb,0xac,0x79,0x2b,0x64,0x47,0x7d,0x6a,0x24,0x58,0x65,0xa6,0x5e, + 0x4b,0x7c,0x57,0xbf,0xac,0x28,0x2b,0x68,0xb9,0xa1,0x42,0x24,0x6e,0x65,0xac,0x3e, + 0x4e,0x54,0x57,0xb5,0xac,0xa8,0x4b,0x64,0x57,0xa1,0x6e,0x24,0x64,0x65,0xa7,0xb0, + 0x4b,0x24,0x57,0x73,0xac,0xa2,0x4b,0x6c,0x47,0x7d,0x2e,0x24,0x41,0x65,0xb3,0x7e, + 0x4c,0x5c,0x57,0x7b,0xac,0xa6,0x4b,0x5a,0x57,0x2b,0x66,0x27,0x7c,0x66,0xaa,0x7e, + 0x6a,0xbe,0x5f,0x71,0xae,0xa4,0x2b,0xbb,0x77,0x30,0xbc,0x28,0xa1,0x68,0x6e,0x5e, + 0xb2,0x3c,0x69,0x37,0xb2,0x43,0x2c,0xc2,0x37,0xb4,0x2e,0x30,0xbe,0x68,0x3c,0x7e, + 0xb3,0x7c,0x6e,0x4d,0xb2,0x3d,0x2c,0xa6,0x57,0xbc,0x4e,0x2f,0x49,0x68,0xa1,0xb0, + 0xb4,0x44,0x70,0x2b,0xb1,0x36,0x5a,0x72,0x21,0x48,0xc0,0x3d,0x67,0x68,0x2d,0xb0, + 0xc2,0x7c,0x6c,0x2d,0xb1,0x47,0x2c,0xab,0x37,0xbc,0x72,0x2f,0x6d,0x68,0x7e,0x5e, + 0xc1,0x2c,0x69,0x3f,0xb2,0x38,0x4c,0xab,0x67,0xbb,0x46,0x30,0xc0,0x68,0x6e,0x7e, + 0xa6,0x7c,0x6d,0x69,0xb2,0xc1,0x4c,0x78,0x57,0xbb,0xc0,0x2f,0x3e,0x68,0x78,0x7e, + 0xb3,0x74,0x6d,0x73,0xb2,0x74,0x2d,0x63,0x38,0x3d,0x56,0xa6,0x31,0x69,0xa4,0x5f, + 0x49,0x44,0x77,0x4f,0xb4,0x6e,0x2d,0x61,0xaa,0x3d,0x36,0xa6,0x48,0x69,0x22,0x3f, + 0x56,0x4c,0x7b,0x5f,0xb5,0x7b,0x2d,0x23,0x68,0x43,0x3e,0xa9,0x7e,0x6a,0x25,0x5f, + 0x65,0xa6,0x7e,0x75,0xb7,0x6a,0x2e,0x3f,0x48,0x54,0x26,0xab,0xb5,0x6b,0x4a,0xb1, + 0x77,0xb6,0x21,0x31,0xb8,0x32,0x4e,0x51,0x68,0x5c,0xb8,0xae,0x41,0x6b,0x76,0xa1, + 0xa3,0x74,0x29,0x49,0xb9,0x3b,0x2e,0x73,0x48,0x61,0x5a,0xaf,0x45,0x6c,0x5f,0x3f, + 0xab,0x3c,0x2e,0xbb,0xba,0x73,0x2e,0xb3,0x58,0x6c,0x6a,0xb2,0x31,0x6c,0x2c,0xb1, + 0xba,0xb6,0x2f,0x37,0xba,0x2a,0x4f,0x46,0x58,0x76,0x22,0xb4,0x5e,0x6d,0x5b,0x40, + 0x38,0xb6,0xa5,0x27,0xbb,0xa2,0x4f,0x45,0x28,0x76,0x32,0xb4,0x5d,0x6d,0x59,0xa2, + 0x3b,0x54,0xa5,0x61,0xbc,0x76,0x4f,0x62,0x68,0x7d,0x2a,0xb6,0x46,0x6d,0xa8,0x40, + 0x4a,0x4e,0x4c,0xbf,0x34,0xc1,0x65,0x23,0xba,0x7d,0x52,0xb6,0x43,0x6d,0xa7,0x40, + 0x43,0x2c,0xac,0x45,0xbd,0x49,0x4f,0x76,0xba,0x22,0x52,0xb7,0x57,0x6e,0x5b,0x40, + 0x5b,0x2c,0xad,0x29,0xbd,0xba,0x4f,0x22,0x38,0x2d,0xb4,0xba,0x3b,0x6e,0xa7,0x60, + 0x6a,0x34,0xb1,0x5d,0xbe,0x77,0x2f,0xb4,0x78,0x2d,0xb0,0xba,0x3f,0x6e,0xa4,0x60, + 0x6a,0x74,0xb1,0x39,0x23,0x7d,0x2f,0xb7,0x78,0x2d,0x3a,0xba,0x6c,0x6f,0x60,0xb2, + 0x7c,0xa6,0xb5,0xb7,0xbf,0x24,0x30,0x67,0xba,0xb1,0x3a,0xbe,0x54,0x6f,0xad,0xa2, + 0x2d,0x3c,0xba,0x31,0xc0,0xa5,0x30,0x64,0x28,0xb1,0x6a,0xbe,0x75,0x6f,0xb4,0xa2, + 0x2d,0x2c,0xba,0x49,0xc0,0x28,0x30,0x68,0x48,0xaf,0x2a,0xbe,0x6d,0x6f,0xaa,0xb2, + 0x2b,0x66,0x4a,0xbe,0x5f,0x6f,0xad,0x60,0x2b,0x3c,0xba,0x43,0xc0,0x6a,0x30,0xbf, + 0x58,0xc2,0x3e,0xc2,0xa8,0x70,0xba,0x25,0xa3,0xab,0x3c,0xc1,0x41,0x43,0x51,0x3c, + 0x29,0x33,0xb5,0x32,0x3a,0x71,0xa4,0x21,0x49,0x4d,0x37,0x40,0x32,0x77,0xa3,0x62, + 0x79,0x3d,0x5f,0x33,0x46,0x72,0x56,0xb3,0x7b,0x55,0x43,0x74,0x35,0xa2,0xa4,0x48, + 0x59,0x57,0x6b,0x3a,0x73,0x73,0x5c,0x41,0x7b,0xb7,0x43,0x28,0x35,0x2d,0xa4,0x47, + 0x79,0x57,0x37,0x3a,0x7e,0x73,0x5b,0x21,0x7a,0x25,0x43,0xa6,0x35,0xab,0x52,0x44, + 0x29,0x56,0x4f,0x3a,0x6c,0x73,0x59,0x21,0x7a,0x55,0x44,0x40,0x35,0xa9,0x52,0x44, + 0x69,0x56,0x57,0x3a,0x60,0x73,0x5b,0x41,0x7e,0x65,0x43,0x62,0x35,0x2c,0x52,0x4a, + 0xbb,0x56,0x33,0x3a,0x28,0x73,0x66,0x41,0x7e,0x45,0x44,0x68,0x35,0x29,0x52,0x43, + 0x49,0x54,0x37,0x3d,0x64,0x74,0x79,0xb3,0xb5,0x75,0x4e,0x28,0x38,0x51,0x52,0xa8, + 0xab,0x69,0xbd,0x3f,0x52,0x74,0x77,0x61,0xb4,0x2d,0x4e,0x38,0x38,0x47,0x52,0xab, + 0x49,0x6a,0xbd,0x3f,0x77,0x74,0x79,0x41,0xb6,0x45,0x4d,0x26,0x38,0x47,0xa4,0xaa, + 0x79,0x69,0x7b,0x3f,0x6b,0x74,0x7d,0x61,0xb6,0x5d,0x4e,0x36,0x38,0x44,0x52,0xa7, + 0xbb,0x6a,0xa5,0x3f,0x55,0x74,0x77,0x21,0xb6,0x35,0x4d,0x54,0x38,0xbe,0xa5,0x4d, + 0xbb,0x78,0x77,0x42,0xb5,0x75,0x6f,0x22,0x40,0xb7,0x54,0x2e,0x39,0xc1,0x53,0x4f, + 0xab,0x78,0xb1,0x42,0x57,0xbe,0x31,0xc2,0xb3,0x40,0x73,0x42,0xaf,0x75,0x6b,0xb4, + 0x3a,0xaf,0x57,0x74,0x3a,0xa2,0xa5,0x64,0xab,0xa2,0x57,0x44,0xae,0x75,0xbd,0x42, + 0x4b,0x2d,0x5b,0x64,0x3b,0x76,0xa5,0x23,0x59,0x25,0x6f,0x46,0x47,0x76,0x40,0x62, + 0x77,0x75,0x62,0x24,0x3d,0xad,0xa6,0x4a,0xbb,0xa9,0x2f,0x4a,0x47,0x77,0x73,0x62, + 0xa3,0x45,0x6c,0xc2,0x3e,0x37,0xa6,0x30,0x29,0xab,0x5b,0x4d,0x34,0x78,0x32,0xb4, + 0xa3,0x65,0x69,0x3c,0x3f,0xc2,0x54,0x51,0x39,0xb3,0x43,0x4d,0x41,0x78,0x75,0x62, + 0xb3,0xb7,0x6d,0x4c,0x40,0x42,0xa7,0x54,0x7a,0x3a,0x33,0x53,0x53,0x79,0x78,0xb5, + 0x42,0xaf,0x75,0x66,0x42,0x43,0x55,0x55,0x4a,0x39,0xb1,0x53,0xbd,0x79,0x2d,0x23, + 0x48,0x7d,0x76,0xaa,0x42,0x23,0xa7,0x25,0x7a,0x44,0x2b,0x56,0x4c,0x7a,0x4f,0x23, + 0x5b,0x35,0x7b,0x5a,0x43,0x26,0x55,0x22,0x2a,0x46,0x49,0x39,0x33,0xa3,0xac,0x25, + 0xac,0x45,0xad,0x56,0x5c,0x7a,0x4f,0x63,0x5a,0x6d,0x7a,0xc2,0x43,0x22,0xa7,0x2e, + 0xac,0x45,0x6b,0x56,0x33,0x7a,0x56,0x63,0x5b,0x45,0x7a,0xbe,0x43,0x75,0x55,0x25, + 0x4a,0x45,0x5b,0x56,0x37,0x7a,0x54,0x43,0x5a,0x7d,0x7b,0xa2,0x43,0x70,0x55,0x21, + 0xbc,0x46,0x57,0x56,0x4e,0x7a,0x53,0xb5,0x53,0xaf,0x7b,0x6e,0x47,0x21,0xa8,0x30, + 0xbc,0x63,0xa5,0x5f,0xc0,0x7c,0x2f,0x23,0xba,0xb7,0x2f,0x38,0x48,0x71,0x56,0xb3, + 0x5a,0x6c,0xb1,0x60,0x35,0x7c,0xa3,0x63,0xba,0xbf,0x30,0x4e,0x48,0xa9,0xa8,0xa5, + 0xac,0x76,0x67,0x62,0x5f,0x7d,0x31,0x24,0x41,0x35,0xa7,0x40,0x4a,0xa1,0xa9,0x64, + 0x7a,0xa1,0x3f,0x64,0x6a,0x7d,0xb1,0xb6,0x4c,0x25,0xaa,0x36,0x4a,0x2f,0xa9,0x69, + 0xbc,0x7e,0x77,0x66,0xa6,0x7e,0x6a,0xb6,0x54,0xb7,0xaf,0xc2,0x4c,0x61,0x57,0xaf, + 0x4a,0x2b,0xc1,0x68,0xb4,0xa1,0x6d,0x24,0xa2,0x5d,0xb5,0xa2,0x4f,0xc2,0x25,0x31, + 0x66,0x3a,0x72,0x54,0xbb,0x59,0x32,0x7b,0x41,0x6b,0x78,0xaf,0x21,0xc2,0x45,0x32, + 0x66,0x39,0x62,0x54,0xc0,0x59,0x33,0x7b,0x49,0x2b,0x7b,0x49,0x23,0xbb,0x25,0x2e, + 0xb8,0x43,0x52,0x5d,0x73,0x5c,0x44,0x3b,0xa6,0x5b,0x2a,0x33,0x27,0x56,0x46,0x7a, + 0x46,0x63,0x4a,0x5d,0x29,0x24,0x70,0xa3,0x70,0xa3,0xb3,0x33,0x2b,0x5c,0x41,0x3b, + 0xa6,0x4b,0x29,0xbd,0x27,0x47,0x46,0x78,0xa8,0x62,0xa4,0x5d,0x5b,0x5c,0x3f,0x7b, + 0xa4,0x23,0x2f,0x27,0x29,0xa1,0x27,0x47,0x46,0x76,0x32,0x62,0x54,0x5d,0x5c,0xae, + 0x3b,0xa5,0xa5,0x7b,0x29,0x21,0x27,0x50,0xb8,0x78,0xc0,0x66,0xb7,0x5e,0x70,0x5c, + 0x60,0x6b,0xae,0xaf,0x2b,0x32,0x27,0xc2,0x36,0x21,0x3a,0x68,0xbc,0x5e,0x31,0x5c, + 0x61,0x6b,0xaf,0x3b,0x2c,0x38,0x27,0xaf,0xb8,0xa7,0xa8,0x6c,0x48,0x5f,0xaa,0xae, + 0x2a,0x43,0xb9,0x75,0x2e,0x7a,0x28,0x63,0x26,0xb0,0x32,0x6c,0x4d,0x5f,0xab,0x5c, + 0x2a,0x23,0xb9,0x6d,0x2e,0x65,0x28,0x7c,0x26,0xb6,0x32,0x6d,0x2d,0x60,0x6d,0xb2, + 0x2e,0x2b,0xbe,0x6d,0x2f,0xb3,0x28,0x7a,0x46,0xc0,0x7a,0x70,0x3c,0x61,0xa3,0xaf, + 0x48,0x7c,0x37,0xa5,0xa4,0x29,0x49,0x65,0x57,0x3d,0x57,0x7d,0x3e,0x32,0x70,0xa6, + 0x3a,0x2c,0x37,0x57,0xa4,0x28,0x29,0x66,0x27,0x3d,0xc0,0x74,0x43,0x61,0xad,0x7d, + 0x4b,0x3c,0x37,0x4b,0xa4,0x64,0x49,0x67,0x67,0x3a,0x66,0x75,0xb1,0x63,0x4d,0x3d, + 0x7a,0x64,0x43,0x71,0xa7,0x73,0x2a,0x43,0xb9,0x55,0xb4,0x7a,0x40,0x63,0x53,0xaf, + 0x79,0x24,0x43,0x49,0xa7,0x22,0x2a,0x44,0xb9,0x54,0x52,0x7a,0x62,0x63,0x57,0x3d, + 0x78,0x64,0x46,0xb7,0xa8,0x6d,0x2a,0x60,0x67,0x5e,0x7a,0x7c,0x64,0x63,0xb0,0x5d, + 0xae,0x34,0x4b,0x23,0xa9,0x2a,0x4a,0x27,0xb9,0x66,0x5a,0x7e,0x60,0x64,0x31,0x3e, + 0x51,0x64,0x59,0x5f,0xad,0xb5,0x2b,0x70,0x37,0x79,0x26,0x26,0xb4,0x65,0xbc,0x3e, + 0x43,0x34,0x5c,0xc1,0xac,0xb9,0x4b,0x6d,0x57,0x79,0xb0,0x25,0x4e,0x66,0x70,0x7e, + 0x43,0x6c,0x5c,0xa7,0xac,0xba,0x4b,0x53,0x77,0x28,0x2e,0x24,0xaa,0x65,0x21,0x3e, + 0x51,0x74,0x5c,0x7d,0xac,0xc0,0x2b,0x52,0x27,0x28,0xb4,0x24,0xae,0x65,0x73,0x5e, + 0x51,0x54,0x59,0x61,0xad,0x43,0x2b,0x72,0xb9,0x28,0x2a,0x23,0x57,0x66,0x32,0xb0, + 0x60,0x54,0x55,0x5d,0xad,0x59,0x2b,0xb7,0x27,0x2e,0x3e,0x28,0x53,0x66,0xac,0x25, + 0xa9,0x29,0x36,0x29,0x31,0x67,0x70,0xb0,0x61,0x44,0x62,0x33,0xb2,0x44,0x4c,0xb2, + 0xa9,0xbf,0x4e,0x30,0x77,0x68,0xa7,0x25,0xb2,0xb3,0x40,0xc1,0x7e,0x77,0x2c,0xb4, + 0x47,0xbf,0x62,0x2f,0xa5,0x68,0x24,0xb0,0xbb,0x5c,0x6e,0x65,0xb2,0x7c,0x4c,0xb1, + 0xa9,0xbe,0x62,0x30,0x33,0x68,0x26,0x5e,0xba,0x44,0x6e,0x55,0xb2,0x59,0x4c,0xad, + 0xb9,0xbf,0x22,0x30,0x44,0x68,0x28,0x5e,0xb3,0x34,0x6e,0x73,0xb2,0x66,0x2c,0xb2, + 0x27,0xbe,0x4e,0x30,0x41,0x68,0x25,0xb0,0xbb,0x2c,0x6e,0x23,0xb2,0x70,0x2c,0xb5, + 0x27,0xbe,0x3e,0x2f,0xba,0x68,0x2b,0x7e,0xba,0x2c,0x6f,0xa7,0xb4,0x28,0x2d,0x64, + 0x68,0x3e,0x72,0xa6,0x51,0x69,0xa9,0xa1,0x4b,0x7c,0x77,0xad,0xb4,0xa1,0x2d,0x65, + 0x28,0x3d,0xbc,0xa6,0x55,0x69,0xab,0x5f,0x4b,0x24,0x77,0x69,0xb4,0x24,0x2d,0x67, + 0x68,0x3d,0xa4,0xa8,0x4b,0x6a,0x47,0x3f,0x66,0x44,0x7e,0x6d,0xb6,0x60,0x2d,0xaf, + 0x38,0x4b,0xb8,0xa9,0x2c,0x6a,0x29,0x5f,0x66,0x24,0x7e,0x64,0x57,0x37,0x71,0x30, + 0xb7,0x5c,0x3a,0xaa,0x38,0x6b,0x53,0x5f,0x79,0x24,0x23,0x3d,0xb7,0x71,0x2e,0x40, + 0x28,0x55,0x46,0xac,0x39,0x6b,0x50,0x3f,0x78,0x7c,0x21,0x41,0xb8,0x34,0x2e,0x60, + 0xaa,0x5a,0x46,0xaf,0x4f,0x6c,0x37,0x5f,0xa4,0xae,0x29,0x69,0xb9,0x42,0x2e,0x74, + 0x58,0x62,0x52,0xaf,0x4c,0x6c,0x58,0x3f,0xac,0xae,0x2b,0x6d,0xb9,0x7e,0x2e,0x22, + 0x28,0x6d,0x6e,0xb2,0x3a,0x6c,0xa5,0x3f,0xbf,0xae,0xa5,0xb9,0xbb,0xaa,0x2f,0x4a, + 0x78,0x77,0x76,0xb4,0xa1,0x6d,0x66,0x40,0x3d,0x74,0xa6,0x37,0xbb,0xa5,0x4f,0x4a, + 0x48,0x75,0xac,0xb6,0x52,0x6d,0xab,0x40,0x4a,0xa6,0xa9,0x75,0xbc,0x7e,0x2f,0x5f, + 0xa9,0x2a,0xa8,0xb8,0x63,0x6e,0x5e,0x40,0x5c,0x4c,0xad,0xb1,0xbe,0xa8,0x2f,0xba, + 0xaa,0x2e,0x62,0xba,0xa1,0x6e,0xae,0xb2,0x6c,0x7c,0xb2,0x45,0xbe,0x2b,0x2f,0xbb, + 0x28,0xa9,0x52,0xbc,0x7d,0x6f,0x63,0xb2,0xa2,0x6c,0xba,0x67,0xc0,0xb8,0x50,0x6d, + 0xba,0xb1,0x2e,0xbe,0xa4,0x6f,0x71,0xb2,0xb2,0x24,0xba,0x7d,0xc0,0xbe,0x50,0x6f, + 0x48,0xb2,0x72,0xbe,0xb1,0x6f,0xba,0xb2,0x28,0x64,0xc1,0x29,0xc2,0x29,0x50,0xb8, + 0x28,0xc2,0x66,0xc2,0xae,0x70,0xbd,0xa2,0xc1,0xa6,0xc2,0x7d,0xc2,0xb7,0x50,0xaf, + 0x79,0x34,0x4f,0x32,0x54,0x71,0xaa,0xb7,0xa3,0xab,0x3c,0xc1,0x3f,0x24,0x66,0x51, + 0x41,0x35,0xbd,0x34,0x46,0x71,0xab,0x21,0x4a,0x7d,0x37,0x60,0x32,0x3c,0x51,0x7a, + 0xbb,0x43,0xa1,0x35,0x23,0x72,0x45,0x41,0x55,0xb7,0x3a,0x54,0x33,0x43,0x52,0x58, + 0x69,0x59,0x6f,0x3b,0x31,0x73,0x7b,0x61,0x21,0xb7,0x45,0x44,0x36,0x37,0xa4,0x54, + 0xbb,0x59,0x5b,0x3b,0x58,0x73,0x78,0x41,0x30,0x2d,0x41,0x28,0x36,0xc0,0x52,0x32, + 0x39,0x59,0x63,0x3c,0xb7,0x73,0x3b,0x21,0x30,0x45,0x41,0x5c,0x36,0xbe,0xa4,0x4e, + 0x69,0x58,0xa1,0x3a,0xbf,0x73,0x35,0x21,0x2f,0x25,0x44,0x24,0x35,0x3c,0x52,0x70, + 0xab,0x52,0x53,0x3b,0x4e,0x73,0x7c,0x21,0x21,0x45,0x48,0xbe,0x35,0x40,0x52,0x6f, + 0xab,0x52,0x77,0x3b,0x57,0x73,0xbc,0xb3,0xa1,0x75,0x44,0xa4,0x35,0xba,0xa4,0x50, + 0x49,0x51,0xa5,0x3b,0x51,0x73,0x7d,0x41,0x21,0x2d,0x45,0x64,0x36,0x48,0xa4,0x5d, + 0x5b,0x61,0x65,0x36,0xc2,0x40,0x26,0x21,0xb9,0x4d,0x4e,0x7a,0x38,0x6c,0xa4,0xbf, + 0x49,0x6c,0xa1,0x3f,0x29,0x74,0x26,0x41,0xb8,0x2d,0x4e,0x56,0x38,0x61,0xa4,0xae, + 0x59,0x6b,0x77,0x3f,0x2f,0x74,0x2c,0x61,0xb9,0x25,0x4e,0x52,0x38,0x58,0x52,0xae, + 0xbb,0x6b,0xb9,0x3f,0xb2,0x74,0x2c,0x41,0xba,0x25,0x4e,0x2e,0x38,0x5f,0x52,0xaf, + 0x29,0x6b,0x6f,0x3f,0xbe,0x74,0x2e,0x61,0xb9,0x45,0x4e,0xa2,0x38,0x65,0xa4,0xae, + 0x59,0x71,0x47,0x43,0x3d,0x75,0x76,0x42,0x41,0x2d,0x55,0x60,0x3a,0x3d,0x53,0x54, + 0x49,0x79,0x4b,0x43,0x47,0x75,0x75,0x62,0x41,0xb7,0x55,0x44,0x3a,0x22,0x53,0x65, + 0x79,0x7e,0x3f,0x44,0xb0,0x75,0xbf,0x42,0x4f,0xa7,0x58,0x50,0x3b,0xa6,0x53,0x28, + 0x39,0x27,0xa1,0x46,0x22,0x76,0x66,0x42,0x5e,0x5d,0x5b,0xba,0x3b,0xae,0xa5,0x28, + 0xab,0x27,0x33,0x46,0x76,0x76,0x67,0x42,0x5d,0x4d,0x5b,0xb8,0x3b,0x2f,0xa5,0x2c, + 0x49,0x22,0xbd,0x49,0x7e,0x77,0x54,0xb4,0xa1,0x5d,0x64,0x70,0x3d,0xaf,0xa6,0x4e, + 0x39,0xa9,0xad,0x4a,0x2e,0x77,0x6a,0xb4,0x7b,0x35,0x67,0x6a,0x3e,0x21,0xa6,0x64, + 0x69,0xac,0x33,0x4d,0x54,0x78,0x3a,0x62,0xa5,0x55,0x69,0x2e,0x3f,0x3b,0xa6,0x74, + 0x69,0xb3,0x2b,0x4d,0x42,0x78,0x37,0x62,0xa5,0x65,0x69,0xa2,0x57,0xc2,0x31,0xc2, + 0xb4,0x69,0x23,0x4d,0x43,0x78,0x37,0x42,0xa4,0x4d,0x69,0x6a,0x3f,0x3c,0xa6,0x74, + 0x59,0xb4,0x63,0x4f,0x55,0x78,0x77,0x42,0xb4,0x25,0x6d,0x72,0x40,0x42,0xa6,0xa5, + 0xab,0xbb,0x2f,0x4f,0xb6,0x79,0x4d,0x43,0x37,0xbf,0x72,0xa2,0x41,0x66,0xa7,0x36, + 0xbc,0x3a,0x5f,0x53,0x5a,0x79,0x7b,0x23,0x44,0x45,0x75,0x7e,0x42,0x48,0x55,0x61, + 0x2a,0x3d,0x4b,0x54,0x3b,0x79,0xa3,0x63,0x49,0x45,0x77,0x3a,0x42,0x71,0x55,0x6b, + 0x3a,0x47,0x3f,0x56,0x75,0x7a,0x61,0x43,0x5e,0x7d,0x7b,0xb0,0x43,0xaa,0xa7,0x2f, + 0x4a,0x47,0xc1,0x56,0x29,0x7a,0x6b,0x63,0x5e,0x6d,0x7c,0x6c,0x43,0xa9,0x55,0x2e, + 0xbc,0x47,0x3b,0x56,0xab,0x7a,0x63,0x23,0x5d,0x75,0x7c,0x4e,0x43,0xb6,0x55,0x2a, + 0x2a,0x47,0x27,0x56,0x7a,0x7a,0x69,0x43,0x5e,0xb7,0x7c,0xa2,0x43,0xab,0xa7,0x2b, + 0x6b,0x61,0x65,0x36,0xc2,0x34,0xb0,0x63,0x5f,0x3d,0x7c,0x3e,0x43,0x2b,0x55,0xa2, + 0x7a,0x5e,0x63,0x5c,0x5c,0x7b,0xae,0x23,0x2c,0x35,0x27,0x7a,0x47,0x22,0x56,0x2b, + 0x6a,0x61,0x47,0x5f,0x39,0x7c,0x71,0x23,0xb8,0x25,0x2f,0x46,0x48,0x78,0x56,0xb4, + 0x3a,0x6f,0x73,0x60,0xa2,0x7c,0x78,0x24,0x32,0xaf,0xa3,0x7e,0x49,0x45,0xa9,0x36, + 0x3a,0x72,0x33,0x61,0x4c,0x7d,0x3a,0xb6,0x3c,0x45,0xa3,0x42,0x4a,0xc0,0x57,0x33, + 0x4a,0x79,0x23,0x63,0x47,0x7d,0x76,0xb6,0x42,0x5d,0xaa,0x6a,0x4a,0xa9,0xa9,0x6a, + 0xbc,0xa1,0xa1,0x64,0x25,0x7d,0xb6,0x24,0x4d,0x7d,0xaa,0x5e,0x4a,0xaf,0x57,0x6a, + 0x6a,0xa1,0x2f,0x64,0x7d,0x7d,0xaf,0xb6,0x5f,0xa7,0xae,0x28,0x4b,0xbc,0xa9,0x2f, + 0x5a,0x28,0x77,0x65,0x77,0x7e,0x21,0xb6,0x67,0x6d,0xb0,0xac,0x4c,0x69,0xa9,0xaf, + 0xac,0x2c,0x2b,0x67,0xb8,0x7e,0x2d,0x44,0x67,0x75,0xb0,0x7a,0x4c,0x67,0x57,0xc2, + 0x7a,0xaa,0xad,0x6a,0xc0,0xa1,0x70,0xb6,0xa2,0x6d,0xb3,0x40,0x4e,0x31,0x58,0x70, + 0x4a,0xaa,0xb1,0x69,0x39,0xa1,0x72,0x64,0x21,0x55,0xb9,0x38,0x4f,0xac,0xaa,0x72, + 0xbc,0xbb,0x73,0x6f,0x4d,0x59,0x75,0xad,0x42,0x6b,0x75,0x65,0x22,0x39,0x25,0x6c, + 0xa8,0x3a,0x22,0x58,0xa4,0x5a,0x2d,0x3b,0xa9,0x33,0x2a,0x2e,0x57,0xc2,0x31,0xc2, + 0xb3,0x6c,0x7e,0x5d,0xa9,0x5c,0x49,0xad,0xa9,0xad,0x2a,0xa7,0x27,0x60,0x46,0xa1, + 0xb8,0x61,0xb4,0x5f,0x4c,0x5c,0xb5,0x3c,0x3c,0xad,0xa6,0x43,0x29,0x30,0x27,0x48, + 0x56,0x77,0x3a,0x62,0x6d,0x5d,0x62,0x7c,0x32,0x6b,0xaf,0x63,0x2c,0x3e,0x27,0xa7, + 0x46,0x29,0x22,0x67,0x44,0x5e,0x75,0x3c,0x62,0x63,0xaf,0x21,0x2c,0x3e,0x47,0xa7, + 0x36,0x29,0xbc,0x68,0xb2,0x5e,0xae,0x3c,0x2c,0x3b,0xb9,0x23,0x2e,0x24,0x28,0x67, + 0x26,0xb0,0x72,0x6c,0x5f,0x5f,0xad,0x7c,0x2b,0x73,0xb9,0xa7,0x2e,0x27,0x28,0x66, + 0xb8,0xb0,0x22,0x6b,0xaa,0x60,0x4b,0x3c,0xa9,0x63,0xbc,0x2f,0x2f,0xb7,0x28,0x2d, + 0xb8,0xba,0x4a,0x6e,0xab,0x60,0x6a,0x5c,0xa7,0x2b,0xc1,0xbb,0x30,0xa1,0x29,0x66, + 0x37,0x3d,0x2a,0x74,0x76,0x61,0xb0,0x3d,0x4d,0x64,0x38,0x33,0xa4,0xa9,0x49,0x68, + 0x5b,0x61,0x65,0x36,0xc2,0x34,0xb2,0xaf,0x4c,0x74,0x37,0x49,0xa4,0xae,0x2a,0x4b, + 0xa9,0x57,0x72,0x7a,0xa2,0x63,0x63,0x5d,0x7c,0xae,0x43,0x43,0xa7,0xa4,0x2a,0x4c, + 0x67,0x58,0x7e,0x7a,0x2a,0x63,0x3d,0xaf,0x28,0xbe,0x46,0xbb,0xa8,0x22,0x4a,0x6a, + 0x37,0x66,0xbc,0x7e,0x71,0x64,0x63,0x7d,0xaf,0x2c,0x4c,0x4f,0xa9,0x2f,0x2a,0x28, + 0x67,0x66,0xac,0x7e,0x7d,0x64,0x39,0xaf,0xb6,0x54,0x5a,0x7d,0xad,0x55,0x2b,0x7d, + 0xb9,0x22,0x7a,0x25,0xab,0x66,0x40,0x7e,0x56,0xae,0x5a,0x2b,0xad,0x6c,0x4b,0x7c, + 0x67,0x23,0x76,0x25,0x59,0x66,0x47,0x7e,0x54,0x2c,0x59,0xc1,0xad,0x51,0x2b,0x7e, + 0x57,0x24,0x42,0x25,0x21,0x66,0x44,0xb0,0x56,0x54,0x5a,0x2f,0xad,0x65,0x2b,0x7d, + 0x37,0x22,0xb4,0x25,0x2f,0x66,0x46,0x7e,0x56,0x5c,0x5a,0x4b,0xad,0x58,0x4b,0x79, + 0xa9,0x23,0x26,0x27,0x25,0x66,0x26,0x7e,0x6b,0x6c,0x5f,0x25,0xae,0x26,0x2b,0xbc, + 0x37,0x2f,0x4e,0x27,0x35,0x67,0x31,0xb0,0x71,0x64,0x63,0x2b,0xb2,0xa8,0x2c,0xb7, + 0x67,0xc1,0x4e,0x30,0x6d,0x68,0xb6,0x7e,0xbf,0x74,0x6e,0x6d,0xb2,0xa5,0x4c,0xba, + 0x27,0xbf,0xbc,0x30,0x7b,0x68,0xad,0x3e,0xb3,0x54,0x73,0x7b,0xb2,0x28,0x4c,0xba, + 0x57,0xc0,0x62,0x30,0x5b,0x68,0xb6,0xb0,0xbe,0xbe,0x6f,0xb4,0x57,0xc2,0x31,0xc2, + 0xb3,0x6e,0x3a,0x30,0x7a,0x68,0xad,0xb0,0xbf,0xae,0x6f,0x2f,0xb2,0x2a,0x4c,0xb9, + 0x37,0xc1,0x46,0xa6,0x73,0x69,0xb2,0xb1,0x4c,0x74,0x78,0x5d,0xb4,0xa3,0x4d,0x69, + 0x48,0x3f,0x5e,0xa6,0x25,0x69,0xb5,0xa1,0x4d,0x6c,0x78,0x4f,0xb4,0x2f,0x2d,0x6c, + 0x38,0x3e,0xb4,0xa6,0x77,0x69,0xb9,0xa1,0x4e,0x2c,0x77,0x6b,0xb5,0xa2,0x4d,0x7e, + 0x48,0x4c,0x4a,0xa9,0xaa,0x6a,0x2c,0x3f,0x67,0x5c,0x7e,0x27,0xb6,0x66,0x4d,0xb2, + 0xba,0x55,0xac,0xac,0x51,0x6b,0x56,0x3f,0x7a,0x44,0x23,0x5b,0xb7,0x21,0x2e,0x32, + 0x68,0x5d,0x32,0xad,0x60,0x6c,0x3c,0x5f,0xa6,0x3c,0x29,0xbd,0xb9,0x4a,0x2e,0x78, + 0x78,0x62,0x26,0xaf,0x63,0x6c,0x3d,0x3f,0xae,0x2c,0x2c,0x7d,0xb9,0x7e,0x4e,0xb6, + 0x28,0x6e,0x36,0xb2,0x4d,0x6c,0xa9,0xb1,0xbd,0x44,0x2f,0x77,0xba,0x7b,0x2e,0xb6, + 0x4b,0x61,0x65,0x36,0xc2,0x4d,0xa8,0xb1,0xc0,0xae,0xa6,0x23,0xbb,0xb5,0x2f,0x4e, + 0x58,0x77,0xbc,0xb4,0xa6,0x6d,0x67,0xb2,0x3f,0x3c,0xa6,0x75,0xbb,0xb9,0x2f,0x4c, + 0xba,0x78,0x32,0xb4,0x55,0x6d,0x22,0x40,0x55,0x74,0xac,0x3f,0xbd,0x2c,0x4f,0x28, + 0x38,0x26,0x26,0xb8,0x62,0x6e,0x5e,0xb2,0x5e,0xb6,0xb2,0x77,0xbe,0xb6,0x2f,0xbe, + 0x28,0x2f,0x26,0xba,0xa8,0x6e,0xb9,0xa2,0x6f,0x74,0xb2,0xb5,0xbe,0xad,0x4f,0xc0, + 0x58,0x30,0x3a,0xba,0x2d,0x6e,0xbd,0xb2,0x6e,0x74,0xb2,0x6f,0xbe,0xac,0x50,0x4b, + 0x78,0xa9,0x2e,0xbc,0x21,0x6f,0x65,0x60,0x72,0x44,0xbb,0x73,0xc1,0x3c,0x30,0x72, + 0x78,0xb3,0xc0,0xbf,0x51,0x70,0x35,0xb2,0xa3,0xb6,0xbb,0x69,0xc1,0x3b,0x30,0x74, + 0x58,0xb4,0x3a,0xbf,0x3c,0x70,0x34,0xb2,0xa4,0x64,0xbb,0x4b,0xc1,0x3b,0x50,0x75, + 0x28,0xb4,0x42,0xbf,0x74,0x70,0x2f,0xb2,0xba,0xa6,0xc0,0xb7,0xc2,0x29,0x30,0xc0, + 0xba,0xbc,0x5b,0x31,0x5a,0x71,0x4c,0x41,0x3c,0x3d,0x37,0x7e,0x57,0x71,0xae,0x21, + 0x4c,0x7d,0x37,0xae,0x32,0x26,0xa3,0x67,0x39,0x3e,0x63,0x34,0x65,0x71,0xaf,0x21, + 0x4c,0x6d,0x37,0xa2,0x32,0xbc,0x51,0x5b,0x29,0x43,0x2b,0x35,0x28,0x72,0x46,0x21, + 0x25,0x5d,0x46,0x28,0x36,0x57,0xa4,0x5b,0x69,0x5c,0x37,0x3b,0x29,0x24,0x34,0x51, + 0x60,0xbd,0x7b,0x7e,0x26,0x31,0x71,0x39,0x39,0x5b,0x4b,0x3b,0xa7,0x73,0x21,0x61, + 0x27,0x45,0x46,0x3a,0x36,0x59,0xa4,0x59,0xbb,0x5c,0x3f,0x3b,0x6f,0x73,0x27,0xb3, + 0x28,0x3d,0x46,0x4e,0x36,0x68,0x52,0x5f,0x29,0x5b,0x27,0x3b,0xaa,0x73,0x29,0x41, + 0x29,0xa7,0x46,0x7e,0x36,0x5f,0xa4,0x5b,0x79,0x5c,0x47,0x3b,0xaf,0x73,0x29,0xb3, + 0xa9,0x5d,0x4a,0x7a,0x37,0x7e,0xa4,0xb4,0xbb,0x6d,0x2f,0x40,0x44,0x74,0xa7,0x21, + 0xbb,0x75,0x4f,0x34,0x38,0x7c,0x52,0xb6,0x39,0x6c,0xa9,0x40,0x38,0x74,0xab,0xb3, + 0xbb,0x5d,0x4f,0x52,0x38,0x79,0xa4,0xb6,0x29,0x6d,0x43,0x40,0x45,0x74,0xaa,0x41, + 0xbc,0x25,0x4f,0x44,0x38,0x40,0x53,0x55,0xab,0x7a,0x73,0x43,0x5e,0x75,0x7c,0x22, + 0x43,0x6d,0x55,0xa6,0x3a,0x42,0x53,0x56,0x49,0x7a,0x3f,0x43,0x60,0x75,0x7c,0x42, + 0x42,0xbf,0x58,0xa6,0x3a,0xb3,0x5a,0x72,0x21,0x48,0xc0,0x70,0xa5,0x76,0x6d,0x22, + 0x60,0x55,0x5c,0xae,0x3b,0xb1,0xa5,0x73,0x79,0x30,0x43,0x46,0x30,0x76,0x6d,0x42, + 0x5d,0x75,0x5c,0x6e,0x3b,0xb3,0xa5,0x2e,0x39,0x28,0xc1,0x46,0xb2,0x76,0x6f,0xb4, + 0x5a,0x3d,0x63,0x56,0x3d,0x79,0x54,0x4f,0x29,0xaa,0x6b,0x4a,0xb4,0x77,0x6d,0x42, + 0xa2,0x4d,0x62,0x2a,0x3e,0x68,0x54,0x65,0x29,0xb0,0x4f,0x4b,0x64,0x78,0x40,0x22, + 0xa6,0x75,0x6a,0x32,0x3f,0x53,0xa6,0x77,0xab,0xb4,0xb5,0x4d,0x6e,0x78,0x41,0x62, + 0xa6,0x35,0x69,0xc2,0x3f,0x2f,0xa6,0x77,0xab,0xbc,0x6b,0x4f,0x66,0x78,0x7d,0x22, + 0xb6,0x7d,0x6d,0xb2,0x40,0x4b,0x54,0xb1,0xac,0x34,0xa9,0x51,0xbe,0x79,0x52,0x23, + 0x40,0x25,0x71,0xaa,0x42,0x4b,0xa7,0x57,0xac,0x3d,0xa1,0x54,0x41,0x79,0xa7,0x63, + 0x49,0xaf,0x77,0x50,0x42,0x44,0xa7,0xa6,0xac,0x49,0x53,0x57,0x50,0x7a,0x72,0x23, + 0x61,0xbf,0x7e,0xb8,0x44,0x4d,0x55,0xaa,0x7a,0x49,0xb1,0x57,0x54,0x7a,0x75,0x23, + 0x61,0x3d,0x7e,0x3e,0x44,0x47,0xa7,0xa4,0xac,0x49,0x67,0x58,0x7c,0x7a,0x38,0x63, + 0x70,0x25,0x79,0x7c,0x44,0x3a,0xa7,0xc2,0x4a,0x48,0x2f,0x55,0x65,0x7a,0x71,0x23, + 0x63,0x55,0xa2,0xc2,0x43,0x45,0xa7,0xaa,0x4a,0x4a,0x27,0x57,0x5b,0x7a,0x76,0x43, + 0x61,0xa8,0x4c,0xbf,0x34,0xc2,0x26,0xa4,0x6a,0x50,0xbd,0x55,0x3a,0x7a,0x71,0x43, + 0x70,0x2d,0x79,0x5e,0x44,0x2f,0x56,0x6a,0x2a,0x5e,0xbd,0x5c,0x6a,0x7b,0xb1,0x23, + 0x2c,0x65,0x27,0xc2,0x46,0x2b,0xa8,0x68,0x2a,0x5e,0x57,0x5e,0x25,0x7c,0x33,0xb5, + 0xb4,0x45,0x2d,0x52,0x48,0x7d,0xa8,0xb5,0xbc,0x6d,0x23,0x60,0xb3,0x7c,0xc1,0x43, + 0xb6,0x5d,0xa3,0x30,0x49,0x4a,0x57,0x35,0x7a,0x79,0xc1,0x63,0x58,0x7d,0x7b,0x64, + 0x4a,0xb7,0xaa,0x2e,0x4a,0xb9,0x57,0x6d,0x2a,0xa2,0x43,0x64,0xb3,0x7d,0xbb,0xb6, + 0x4f,0x25,0xaa,0x24,0x4a,0xb6,0xa9,0x68,0x4a,0x26,0xc1,0x66,0x65,0x7e,0x5f,0xb6, + 0x60,0x65,0xae,0xb8,0x4b,0xbf,0xa9,0x2f,0xbc,0x22,0xa1,0x68,0x31,0x7e,0xa4,0x64, + 0x69,0x6d,0xb0,0xbc,0x4c,0x70,0x57,0xb2,0x6a,0x2d,0x3b,0x68,0x44,0x7e,0xa7,0x24, + 0x6a,0x35,0xb0,0xb8,0x4c,0x7b,0xa9,0xb7,0xa3,0x51,0x3c,0x33,0xc0,0x7e,0xa5,0x44, + 0x63,0x5d,0xb7,0x60,0x4e,0x41,0x58,0x54,0xac,0xab,0x23,0x6b,0x5a,0xa1,0x78,0x64, + 0x22,0x75,0xb7,0x76,0x4e,0x39,0x58,0x54,0x4a,0xab,0xc1,0x6c,0x39,0xa2,0x52,0x24, + 0xab,0x6d,0xbd,0x2e,0x4f,0x27,0xaa,0x2b,0x2a,0xb9,0x2b,0x6e,0xbd,0xa2,0x35,0x24, + 0xb6,0xaf,0xbf,0x7d,0x22,0x43,0x25,0x55,0x56,0x3a,0x42,0x53,0x51,0x59,0x7b,0x5b, + 0x50,0x53,0x7b,0x57,0x27,0x77,0x46,0x22,0x26,0x65,0x4a,0x5e,0x35,0x5c,0x51,0xad, + 0xaa,0xb5,0x2b,0x35,0x27,0x70,0x26,0x21,0x46,0x67,0x2a,0x62,0x25,0x5d,0x64,0xae, + 0x3e,0x43,0xa3,0x2b,0x2c,0x43,0x27,0xa9,0x56,0x2a,0x3e,0x67,0x5d,0x5e,0x7a,0xae, + 0x63,0x63,0xaf,0x2f,0x2c,0x48,0x47,0xb2,0x66,0x30,0x76,0x68,0xb5,0x5e,0xb0,0xae, + 0x27,0xa5,0xbc,0x25,0x2f,0x30,0x48,0xba,0x66,0xc1,0x3e,0x74,0x66,0x61,0xb2,0x3d, + 0x4f,0x6c,0x38,0x71,0xa4,0xb5,0x29,0x6d,0x77,0x40,0x52,0x74,0x2f,0x61,0xbe,0xaf, + 0xa1,0x7c,0x44,0x77,0xa7,0xb8,0x2a,0x4d,0x77,0x58,0x52,0x7a,0x32,0x63,0xa3,0x3d, + 0x2c,0x64,0x48,0x65,0xa8,0xac,0x4a,0x22,0x27,0x25,0x2a,0x26,0x32,0x66,0x5a,0x5e, + 0x59,0x7c,0x5b,0x6f,0xad,0x7e,0x2b,0x25,0x47,0x25,0xbc,0x26,0x38,0x66,0x55,0xb0, + 0x59,0xb8,0x4c,0xc1,0x34,0xc1,0x32,0x31,0x4a,0x5c,0x5b,0x37,0xad,0x25,0x4b,0x25, + 0x77,0x25,0x76,0x25,0xc2,0x66,0x5a,0x25,0xa9,0x25,0xac,0x26,0x36,0x66,0x54,0x3e, + 0x5a,0x44,0x5a,0x67,0xae,0x27,0x2b,0xa4,0x47,0xa9,0x62,0x30,0x5a,0x68,0xc0,0x3e, + 0xc0,0x54,0x70,0x77,0xb2,0xb1,0x4c,0xc0,0x27,0xc2,0x4e,0x30,0xa9,0x68,0xba,0x7e, + 0xc2,0x44,0x70,0x6b,0xb2,0xb4,0x4c,0xc0,0x37,0xc2,0x36,0xa6,0xb4,0x69,0xbd,0x3f, + 0x50,0x44,0x78,0x79,0xb4,0xbb,0x4d,0x6d,0x58,0x3c,0x7e,0xa9,0xb1,0x6a,0x2c,0xb1, + 0x6a,0x6c,0x23,0xa7,0xb7,0x26,0x2e,0x43,0x38,0x56,0x5a,0xac,0x5e,0x6b,0x5d,0x5f, + 0x7b,0x5c,0x23,0x2f,0xb7,0x39,0x4e,0x53,0x48,0x59,0x7a,0xad,0x40,0x6b,0xa4,0x3f, + 0x25,0x4c,0x2a,0x41,0xb9,0x55,0x2e,0x79,0xba,0x66,0x42,0xb0,0xac,0x6c,0x5e,0x5f, + 0xbd,0x2c,0x2f,0xa7,0xba,0x2c,0x2e,0xb9,0xad,0x61,0x65,0x36,0xc2,0x33,0xb0,0x3f, + 0xbe,0x3c,0x2f,0x21,0xba,0xbb,0x4e,0xc1,0x68,0x78,0xb8,0xb3,0x33,0x6d,0xc1,0xb2, + 0x40,0xa6,0xa6,0xa7,0xbb,0x33,0x2f,0x70,0x48,0x78,0xbc,0xb3,0x35,0x6d,0xad,0xb2, + 0x4b,0x74,0xa8,0x69,0xbd,0x5e,0x2f,0x7b,0xaa,0x23,0xa4,0xb7,0x25,0x6e,0x47,0xa2, + 0x5c,0xb6,0xae,0x31,0xbd,0xa3,0x2f,0x71,0x28,0xa3,0x6e,0xbc,0xb5,0x6e,0x71,0x40, + 0xa2,0xbe,0xb2,0xb9,0xbe,0x38,0x50,0x4f,0x78,0x29,0x5e,0xbc,0xb6,0x6e,0x71,0xa2, + 0x71,0x7c,0xb3,0x37,0xbf,0x31,0x30,0x50,0x38,0x30,0xb8,0xb9,0x37,0x6f,0x6d,0x40, + 0x70,0x3c,0xaf,0x51,0xbf,0x36,0x50,0x4e,0x38,0xa4,0x66,0xbf,0x6d,0x70,0x41,0xa2, + 0xa6,0x4c,0xbc,0x42,0x49,0x4d,0x50,0x76,0x58,0xb5,0x56,0xbf,0x71,0x70,0x42,0xb2, + 0xa5,0x7c,0xbc,0x49,0xc1,0x49,0x50,0x78,0x68,0xb4,0x2a,0xbf,0x75,0x70,0x3f,0xa2, + 0xa7,0x5c,0xc0,0xc1,0xc2,0x70,0x50,0xb2,0x28,0xc2,0x22,0xc2,0xb5,0x70,0x7c,0x41, + 0x3c,0x2d,0x38,0x3a,0x32,0xa9,0x51,0x6a,0x59,0x3f,0x47,0x34,0x78,0x71,0xb2,0x41, + 0x4f,0x7d,0x36,0x68,0x33,0x5e,0x51,0x7c,0x79,0x45,0x3f,0x3c,0x31,0x73,0xa6,0xb3, + 0x2b,0x6d,0x47,0x5c,0x36,0x21,0x52,0x62,0x69,0x5e,0x3f,0x3b,0xbe,0x73,0xac,0x41, + 0x2a,0x25,0x47,0x6e,0x57,0xc2,0x31,0xc2,0xb3,0x5c,0x2f,0x3b,0xbf,0x73,0xa5,0x61, + 0x2b,0x3d,0x46,0xb8,0x36,0x6d,0x52,0x5b,0xbb,0x5d,0x6b,0x3c,0x47,0x73,0xa4,0x21, + 0x29,0xaf,0x47,0x64,0x36,0xa1,0xa4,0x61,0x49,0x5e,0x3b,0x3c,0x33,0x73,0xa5,0x41, + 0x29,0x5d,0x46,0xb6,0x36,0x6c,0x52,0x64,0x39,0x5d,0x73,0x3c,0x50,0x73,0x2b,0x41, + 0xae,0xb7,0x4f,0x26,0x38,0x27,0xa4,0xbb,0x29,0x6e,0x73,0x40,0x5d,0x74,0xb1,0x61, + 0xbe,0x5d,0x4f,0xbc,0x38,0x28,0x52,0xbc,0x49,0x6f,0x3f,0x40,0x73,0x74,0xb6,0x41, + 0xbe,0x6d,0x4f,0x30,0x38,0xa5,0x52,0xbc,0x59,0x6e,0x23,0x40,0x67,0x74,0xb2,0xb3, + 0xbe,0x75,0x4f,0xbe,0x38,0xb2,0x52,0xb9,0x59,0x6a,0x27,0x43,0x64,0x75,0xa2,0x42, + 0x44,0xb7,0x56,0x34,0x3a,0x5a,0x53,0x57,0xbb,0x7b,0x3b,0x44,0x5e,0x75,0xae,0xb4, + 0x4b,0xb7,0x58,0xa8,0x3a,0xbc,0xa5,0x54,0xad,0x61,0x65,0x36,0xc2,0x59,0x37,0x42, + 0x62,0x65,0x5d,0x54,0x3c,0x33,0xa5,0xa4,0x69,0x2a,0x3b,0x47,0x40,0x76,0x75,0x22, + 0x62,0x5d,0x5d,0x40,0x3c,0x37,0xa5,0xa4,0x39,0x29,0x4b,0x47,0x4d,0x76,0x75,0xb4, + 0x62,0x25,0x5e,0x50,0x3d,0x69,0x54,0x3f,0x59,0xa6,0x77,0x49,0xb2,0x77,0x56,0x62, + 0x7a,0x55,0x64,0xb6,0x3d,0x68,0xa6,0x5a,0xab,0xb5,0x67,0x4d,0x24,0x78,0x45,0x42, + 0xa7,0xa7,0x6a,0x40,0x3f,0x52,0xa6,0xab,0x39,0xbf,0x47,0x51,0xc1,0x79,0x3f,0x43, + 0x4a,0x25,0x77,0x76,0x42,0x7e,0xa7,0x64,0x4a,0x3d,0xc1,0x54,0x52,0x79,0xaa,0x63, + 0x4b,0x35,0x77,0x74,0x44,0x72,0xa7,0xb8,0xbc,0x4c,0x43,0x57,0x27,0x7a,0x22,0xb5, + 0x68,0xa7,0x7e,0x62,0x44,0x5f,0x55,0xb1,0xac,0x4b,0x57,0x57,0x21,0x7a,0x25,0x63, + 0x67,0x35,0x7e,0x2c,0x44,0x78,0xa7,0xac,0x7a,0x4c,0x5b,0x57,0xbc,0x7a,0x26,0xb5, + 0x66,0x5d,0x7e,0x56,0x44,0x58,0xa7,0xb1,0x4a,0x4c,0x2f,0x57,0xbe,0x7a,0x29,0x63, + 0x66,0xb7,0x7e,0x78,0x44,0x64,0xa7,0xb3,0x3a,0x4b,0x6b,0x57,0x2a,0x7a,0xb4,0xb5, + 0x2d,0x35,0x28,0x44,0x46,0xa4,0xa8,0x69,0x2a,0x5e,0x2f,0x5c,0x5f,0x7c,0x5d,0x43, + 0xad,0xa7,0x29,0x72,0x48,0x40,0xa8,0xa6,0x3a,0x69,0xb9,0x5f,0x4a,0x7c,0xa9,0x23, + 0xbd,0x3d,0x2f,0x6a,0x57,0xc2,0x31,0xc2,0xb8,0x6d,0xbd,0x60,0x4e,0x7c,0xb8,0x63, + 0xc0,0x55,0x30,0xa6,0x48,0x51,0xa9,0x39,0x7a,0x73,0x5b,0x61,0x7a,0x7d,0x42,0x64, + 0x35,0x4d,0xa3,0x7c,0x4a,0x46,0xa9,0x56,0x7a,0x7a,0x5b,0x63,0x64,0x7d,0x7d,0x24, + 0x43,0xbf,0xa7,0x2c,0x4a,0x49,0xa9,0x57,0x3a,0x7d,0xa5,0x64,0x54,0x7d,0xab,0x64, + 0x41,0x45,0xae,0xb8,0x4a,0xbd,0x57,0x6f,0xbc,0xa2,0xa9,0x64,0xbb,0x7d,0xc0,0x24, + 0x50,0x2d,0xaa,0xbe,0x4a,0xc2,0x57,0x70,0x7a,0x79,0x3f,0x66,0x6f,0x7e,0x70,0x24, + 0x60,0xaf,0xab,0x34,0x4c,0xc1,0x57,0x7a,0x3a,0x2d,0xad,0x68,0x59,0x7e,0xaa,0x24, + 0x6a,0x2d,0xb1,0x7e,0x57,0x7e,0xab,0x64,0x6b,0x5d,0xb1,0x7a,0x4c,0x74,0x57,0xb7, + 0x5a,0x2e,0x33,0x68,0x60,0x7e,0x7d,0xb6,0x25,0x3d,0xb8,0xa2,0x4e,0x4c,0x58,0x56, + 0xac,0xac,0x6f,0x6b,0x62,0xa1,0xa1,0x44,0x24,0x36,0x49,0x4b,0x33,0xc2,0x29,0x59, + 0x2a,0xad,0x3b,0x6b,0x74,0xa1,0xa2,0x24,0x24,0x6d,0xb8,0x32,0x4e,0x4f,0xaa,0x6f, + 0x28,0xbc,0x67,0x6c,0x3b,0xa2,0x53,0x64,0xab,0xaf,0xbd,0xa4,0x4f,0xa7,0x58,0x2c, + 0x5a,0xba,0xb1,0x6e,0xc2,0xa2,0x3a,0x44,0xb5,0x4d,0xbf,0x76,0x50,0x5b,0x58,0xb7, + 0x3a,0xbc,0x76,0x53,0x5e,0x59,0x7c,0x7b,0x4a,0x73,0x2b,0x69,0x27,0x7c,0x26,0x24, + 0x56,0x65,0xb8,0x5e,0x4a,0x5c,0x4d,0x3c,0x44,0xa5,0xb0,0x23,0x2d,0x66,0x48,0x49, + 0x36,0xae,0x66,0x6d,0xb1,0x60,0x67,0x3d,0x4e,0xbe,0x38,0x2b,0xa4,0xba,0x49,0x6f, + 0x47,0x40,0x5a,0x74,0xb3,0x61,0xbd,0xaf,0x4e,0x64,0x38,0x23,0xa4,0xc2,0x2a,0x31, + 0x77,0x60,0xb8,0x7a,0xbb,0x63,0x31,0x5d,0x21,0x4c,0x48,0xbb,0xa7,0x7b,0x4a,0x6c, + 0x67,0x5f,0xac,0x7e,0x2c,0x64,0x67,0x3d,0xaf,0x5c,0x5b,0xb5,0xad,0x2f,0x2b,0x2d, + 0x47,0x27,0x4a,0x26,0x6b,0x66,0x5e,0x7e,0x5c,0x6c,0x5c,0x3f,0xad,0x2b,0x4b,0x26, + 0x27,0x23,0xbc,0x28,0x7a,0x66,0x73,0xb0,0x71,0x6c,0x71,0x49,0xb3,0x37,0x2d,0x31, + 0x48,0x31,0x46,0xa3,0x45,0x69,0x34,0xa1,0x40,0xbe,0x6d,0x31,0xb3,0xc0,0x2c,0xa7, + 0xaa,0x38,0xb4,0x30,0xba,0x68,0x73,0xa1,0x31,0x3c,0x7c,0xc1,0xb4,0xbf,0x2d,0x51, + 0x68,0x48,0xb8,0xa5,0xb9,0x24,0x70,0x71,0x70,0xaa,0xa5,0xb3,0xb7,0xa3,0x4e,0x47, + 0x28,0x57,0x36,0xac,0x6f,0x6b,0x5e,0xa1,0x7c,0x2c,0x24,0x35,0xb7,0x3b,0x4e,0x53, + 0x68,0x5b,0xb4,0xaf,0xa7,0x6c,0x47,0x5f,0xa8,0x34,0x2a,0x57,0xb9,0x5c,0x2e,0x7c, + 0x58,0x66,0x4b,0x7d,0xb9,0x2f,0x2e,0x2e,0x78,0x67,0x3a,0xb2,0x6b,0x6c,0xc2,0xb2, + 0x31,0xa6,0xa7,0x57,0xbc,0x3b,0x4f,0x52,0x48,0x79,0x72,0xb5,0x43,0x6d,0x75,0x60, + 0x4b,0xae,0xa9,0x29,0xbc,0x60,0x2f,0x74,0x78,0xa4,0x56,0xbb,0x4a,0x6f,0x39,0x40, + 0x72,0xbe,0xb3,0x2b,0xbf,0x3f,0x30,0x35,0xaa,0xa4,0x52,0xbb,0x53,0x6f,0x3a,0x60, + 0x74,0x34,0xb4,0x69,0xc1,0x59,0x50,0x7b,0xaa,0xb6,0x3e,0xbf,0x29,0x70,0x49,0xa2, + 0xa8,0xbe,0xbc,0x53,0xc1,0x61,0x50,0x7b,0xba,0xb5,0x7e,0xc0,0x66,0x70,0xaf,0xb2, + 0xc2,0x6c,0xc2,0xb3,0xc2,0x6b,0xa3,0x4b,0x49,0x3f,0x7b,0x7d,0x3e,0x32,0x70,0xa5, + 0x5e,0x35,0x36,0x70,0x33,0x60,0x51,0x27,0x79,0x5f,0x4b,0x3c,0x71,0x73,0xb3,0xb3, + 0x2d,0x45,0x47,0xaa,0x36,0x2b,0xa4,0x68,0x29,0x5f,0x4f,0x3c,0x75,0x73,0xb2,0xb3, + 0x2d,0x2d,0x48,0x4e,0x36,0xa7,0x52,0x69,0x29,0x5e,0x77,0x3c,0x67,0x73,0xb7,0x21, + 0x23,0x55,0x4b,0xb4,0x36,0x2c,0xa4,0x68,0xab,0x5c,0x57,0x3e,0xaa,0x74,0xbc,0x21, + 0xc1,0x45,0x50,0x68,0x38,0xb8,0xa4,0xc0,0x59,0x70,0x47,0x40,0x30,0x74,0xbf,0xb3, + 0xc1,0x55,0x50,0x5a,0x38,0xb1,0x52,0xbd,0x69,0x70,0x67,0x40,0x29,0x74,0xbb,0xb3, + 0xbd,0x55,0x50,0x60,0x38,0xaf,0xa4,0xa3,0x49,0x78,0x23,0x40,0xab,0x74,0xba,0x61, + 0xb8,0x4d,0x56,0x48,0x3a,0x58,0xa5,0x5a,0x79,0x7b,0x4b,0x43,0x21,0x75,0x25,0x62, + 0x45,0x7d,0x55,0x26,0x3c,0x44,0xa5,0xa7,0x69,0x2a,0xa1,0x47,0x61,0x76,0x7e,0x62, + 0x65,0x6d,0x5d,0x30,0x3c,0x4f,0x53,0xaa,0xab,0x2a,0x77,0x47,0x56,0x76,0x7e,0xb4, + 0x63,0x65,0x5d,0xb0,0x3c,0x48,0x53,0xa7,0x79,0x2a,0xb1,0x47,0x6e,0x76,0xa1,0x22, + 0x65,0x45,0x62,0xae,0x3d,0x7d,0xa6,0x44,0x39,0xa7,0x2f,0x4a,0xc1,0x77,0x32,0x42, + 0x21,0x45,0x65,0x32,0x3e,0x5f,0x54,0x7d,0x59,0xb6,0x33,0x4d,0x28,0x78,0x46,0x22, + 0xa8,0xb7,0x6a,0x7c,0x3f,0x64,0xac,0x30,0xa3,0x50,0xbf,0x53,0x2c,0x78,0x47,0x22, + 0xa9,0x3d,0x6a,0x6c,0x3f,0x65,0xa6,0x7b,0x79,0xb5,0x4b,0x4f,0x78,0x78,0x23,0x42, + 0xb7,0x2d,0x6d,0x22,0x42,0x4e,0x55,0x58,0x6a,0x3a,0xbd,0x54,0x59,0x79,0xac,0x63, + 0x4b,0x6d,0x77,0x30,0x42,0x26,0x55,0x67,0x2a,0x4d,0x63,0x58,0x43,0x7a,0xb0,0xb5, + 0x6a,0x2d,0xa1,0x6c,0x44,0x75,0xa7,0xb7,0xbc,0x4d,0x6b,0x58,0x5b,0x7a,0xaa,0x23, + 0x6b,0x66,0x4b,0x58,0x46,0x7a,0xa5,0x43,0x6a,0x7d,0xa1,0x70,0x44,0x77,0xa7,0xb9, + 0x4a,0x4d,0x77,0x58,0x63,0x7a,0xac,0x43,0x6b,0x75,0xa1,0xac,0x44,0x22,0xa7,0xb7, + 0x2a,0x4f,0x7b,0x5c,0x24,0x7b,0xb7,0x63,0x2c,0x4d,0x2c,0x60,0x47,0xb0,0x56,0x29, + 0x56,0xb1,0xc1,0x5e,0x29,0x7c,0x68,0x63,0xa5,0x4d,0x2d,0x76,0x48,0x43,0xa8,0xb8, + 0x7a,0x6e,0x6b,0x60,0x59,0x7c,0xad,0xb5,0xbd,0x55,0x2f,0x26,0x57,0x37,0x71,0x30, + 0xb3,0x56,0x3b,0x60,0x56,0x7c,0xb8,0xb5,0xc0,0x7d,0x30,0x5e,0x48,0xaf,0x56,0xc2, + 0x5a,0x6b,0x73,0x61,0x22,0x7d,0x45,0x24,0x3c,0x75,0xa4,0x34,0x4a,0x4f,0x57,0x58, + 0x5a,0x79,0x6f,0x65,0x3c,0x7e,0x33,0x64,0x51,0xaf,0xab,0x3a,0x4b,0x39,0xa9,0x72, + 0x5a,0x21,0x47,0x65,0x38,0x7e,0x32,0x24,0x5d,0x35,0xae,0x6a,0x4b,0x35,0x57,0xa3, + 0x7a,0x29,0x47,0x67,0x5a,0x7e,0x7e,0x64,0x65,0x25,0xb0,0x4a,0x4c,0x56,0xa9,0xbb, + 0xbc,0x2f,0x4b,0x68,0x74,0x7e,0xb2,0xb6,0x6d,0x3d,0xb1,0xae,0x4c,0x2d,0x57,0xbd, + 0x6a,0x2e,0x2b,0x68,0x75,0x7e,0xb1,0x64,0x6c,0xaf,0xb0,0x6a,0x4e,0x5a,0xaa,0x5a, + 0xbc,0xad,0x5b,0x6b,0x2c,0xa1,0x23,0xb6,0x26,0x7d,0xb8,0x5e,0x4e,0x57,0x58,0x5b, + 0xbc,0xad,0x7b,0x6b,0x25,0xa1,0x28,0xb6,0x26,0x75,0xb8,0x66,0x4e,0x78,0x58,0x22, + 0x7a,0xb9,0xc1,0x6d,0x32,0xa2,0x71,0x44,0xb4,0x65,0xbf,0x7c,0x50,0x46,0xaa,0xa8, + 0x5a,0xbc,0x57,0x6f,0x59,0xa2,0x24,0x44,0xb8,0x5d,0xbf,0xab,0x22,0x4b,0x25,0x63, + 0xa8,0x48,0x2e,0x56,0x65,0x5a,0xad,0xad,0xad,0xad,0x2b,0x7e,0x57,0x5c,0x5a,0xad, + 0xad,0x23,0x2b,0x29,0x27,0xb0,0x47,0x4c,0x26,0x77,0xb0,0x61,0x43,0x5d,0xa2,0x5c, + 0x64,0xb5,0xaf,0xc1,0x2c,0xa4,0x28,0x5f,0x3b,0x68,0xbf,0x38,0xbf,0x44,0x31,0x68, + 0xb8,0xc2,0xb0,0x73,0x38,0x63,0x75,0x3d,0x21,0xae,0x45,0x43,0xa8,0x37,0x4a,0x52, + 0xa9,0x5d,0x42,0x7c,0x2f,0x63,0xba,0x5d,0x2e,0xb6,0x4c,0xa1,0xad,0xb3,0x4b,0x2a, + 0x77,0x27,0x76,0x26,0x2a,0x66,0x63,0xb0,0x5e,0xbe,0x5c,0x69,0xad,0xab,0x4b,0x2e, + 0x67,0x27,0x6e,0x26,0x7e,0x66,0x68,0x7e,0x57,0x34,0x5f,0xa3,0xae,0x37,0x4c,0x34, + 0x48,0x32,0x4e,0xa3,0x51,0x69,0x36,0xa1,0x33,0x2c,0x71,0x73,0xb3,0x42,0x4d,0x35, + 0x68,0x32,0x56,0xa3,0x48,0x69,0x3a,0x3f,0x32,0xa6,0x71,0x25,0xb3,0x37,0x4d,0x72, + 0x58,0x41,0x4e,0xa7,0x33,0x6a,0x32,0x5f,0x5b,0x5c,0x7b,0x7e,0x57,0x6a,0x5a,0x3f, + 0x5b,0x4c,0x7b,0x73,0xb5,0xa8,0x2e,0x49,0x28,0x56,0x2e,0xac,0x74,0x6b,0x36,0xa1, + 0x27,0x34,0x2c,0x43,0xba,0xa8,0x4e,0xbb,0x78,0x70,0x76,0xb1,0x4e,0x6d,0x77,0xb7, + 0xa3,0xab,0x3c,0xc1,0x4f,0x41,0x2f,0x54,0x78,0x79,0x2e,0xb5,0x4f,0x6d,0xaf,0x40, + 0x47,0x6c,0xac,0x21,0xbd,0x4a,0x30,0x38,0x78,0xa4,0xa8,0xbb,0x5d,0x6f,0x3f,0xb2, + 0xa1,0xa6,0xb6,0x25,0xbf,0x6c,0x50,0xa1,0x28,0xb6,0xa4,0xbf,0xb3,0x70,0x4e,0xb2, + 0xa9,0xbe,0xbc,0xb7,0xc1,0x6a,0x50,0xa1,0x78,0xb6,0x52,0xbf,0x7c,0x70,0x23,0xa2, + 0xbb,0x4c,0xc1,0x3d,0xc2,0x2c,0x30,0xc2,0x28,0xc2,0xbc,0xc1,0xbb,0x71,0x66,0xb3, + 0x4e,0x5d,0x36,0x7a,0x33,0x61,0xa3,0x7d,0x69,0x48,0x5f,0x3c,0xb4,0x73,0xbe,0x61, + 0x2e,0x7d,0x48,0x74,0x36,0xb7,0x52,0x6c,0x59,0x5f,0x2f,0x3c,0xaf,0x73,0xbf,0x21, + 0x30,0x75,0x48,0x62,0x36,0xb2,0xa4,0x6d,0x69,0x5f,0xb5,0x3c,0x22,0x73,0xbf,0x41, + 0x2f,0x65,0x48,0x30,0x36,0xb2,0x52,0x6d,0x59,0x59,0x33,0x42,0xbd,0x74,0x71,0xb4, + 0x40,0x65,0x50,0xb2,0x38,0x35,0xa5,0x32,0x79,0x71,0x5f,0x41,0x37,0x75,0x70,0x41, + 0xb3,0x75,0x54,0xc2,0x38,0x36,0x53,0x31,0x59,0x74,0x3b,0x43,0x2b,0x75,0x27,0xb4, + 0x46,0x6d,0x56,0x74,0x3a,0x5f,0x53,0x5c,0x39,0x7b,0xb9,0x43,0x2a,0x75,0xa5,0x42, + 0x4c,0x6d,0x57,0xb0,0x3a,0xbe,0x53,0x5b,0x39,0x2b,0x53,0x47,0x7b,0x76,0x21,0x42, + 0x66,0x4d,0x5e,0x5e,0x3c,0x5b,0x53,0xac,0x69,0x2b,0x27,0x7e,0xc1,0x32,0xc2,0xae, + 0x46,0x3d,0x5e,0x36,0x3c,0x5a,0x53,0xad,0xbb,0x2b,0x3f,0x49,0xba,0x77,0x4e,0x22, + 0x7a,0x25,0x61,0x3e,0x3e,0x34,0xa6,0x52,0x49,0xb0,0x63,0x4c,0x5b,0x77,0xae,0x62, + 0x2b,0x2d,0x66,0x2c,0x3f,0x6d,0x54,0xa1,0x69,0xb6,0x5b,0x4d,0xb2,0x78,0x4f,0xb4, + 0xaf,0x45,0x6a,0x56,0x40,0x59,0xa6,0xac,0xbb,0xbd,0x73,0x4f,0x24,0x78,0xb0,0x42, + 0xb7,0x35,0x75,0xc2,0x42,0x29,0x55,0x66,0x2a,0x3f,0xbd,0x58,0x78,0x7a,0xb6,0xb5, + 0x6d,0x45,0xa2,0x66,0x44,0xab,0x55,0xc2,0x4a,0x50,0x63,0x58,0x7d,0x7a,0xb9,0x63, + 0x6b,0x7d,0xa2,0x7e,0x44,0xa8,0x55,0xbd,0x7a,0x50,0x6b,0x58,0xa6,0x7a,0xb8,0x63, + 0x6d,0x55,0xa2,0x4e,0x44,0xa3,0x55,0xbd,0x5a,0x50,0x4f,0x57,0xc0,0x7b,0xb9,0x23, + 0x2e,0x2d,0x28,0x74,0x47,0x45,0xa8,0xa8,0x6a,0x6a,0x63,0x5f,0x59,0x7c,0x7a,0x25, + 0xa3,0xab,0x3c,0xc1,0x34,0x2a,0xa8,0xb9,0xbc,0x6e,0x2b,0x60,0x2e,0x7c,0xba,0x23, + 0xc0,0xbf,0x2e,0x6a,0x49,0x5d,0xa9,0x3c,0x2a,0x73,0x2f,0x62,0x70,0x7d,0x60,0x64, + 0x3c,0x2d,0xa5,0xc0,0x49,0x55,0x57,0x59,0xbc,0x7b,0x3f,0x64,0x57,0x24,0x57,0x65, + 0xbc,0x79,0xad,0x65,0x46,0x7e,0x3a,0x64,0x52,0xaf,0xab,0x7a,0x4b,0x3e,0xa9,0x75, + 0x5a,0x22,0x33,0x65,0x58,0x7e,0x39,0xb6,0x52,0xb7,0xab,0x6a,0x4b,0x3b,0x57,0x29, + 0x5a,0x21,0x5f,0x67,0x3b,0x7e,0x74,0x24,0x61,0xa7,0xaf,0xb2,0x4c,0xb8,0x57,0xc0, + 0x6a,0x30,0x33,0x68,0x2f,0x7e,0xbc,0x44,0x6f,0x65,0xb2,0x76,0x4c,0xbb,0x57,0xbd, + 0x7a,0x2f,0x2f,0x68,0xaf,0x7e,0xba,0x44,0x6e,0x7d,0xb2,0x7c,0x4c,0xad,0xa9,0xbf, + 0x4a,0x2f,0xad,0x67,0xba,0xa1,0xa3,0x64,0x29,0x25,0xb9,0x3a,0x4e,0x75,0x58,0x5f, + 0x4a,0xaf,0x33,0x6b,0xbb,0xa1,0xa4,0x24,0x29,0x2d,0xb9,0x4a,0x4e,0x6f,0xaa,0x5e, + 0x6a,0xae,0x23,0x6b,0xb8,0xa1,0x2d,0x44,0x27,0x7d,0xb9,0x3c,0x4e,0x6a,0xaa,0x60, + 0x6a,0xaf,0x3b,0x6b,0xb2,0xa1,0x2f,0x64,0x28,0xbf,0xb9,0x40,0x4e,0x65,0x58,0x63, + 0x7a,0xb7,0x77,0x6e,0x71,0xa2,0x70,0x44,0xa5,0xaf,0xc0,0x32,0x50,0x51,0xaa,0xac, + 0x2a,0xbd,0x2b,0x6f,0x28,0xa2,0x27,0x44,0xb6,0x6b,0xa1,0xa8,0x57,0xc2,0x31,0xc2, + 0xb4,0x5e,0x26,0x5e,0x64,0x5c,0x69,0xae,0x35,0x5b,0xb2,0x3d,0x2e,0xa6,0x28,0x6e, + 0xa8,0xba,0x6e,0x6e,0x71,0x60,0xb3,0x5c,0xc2,0x7c,0x35,0x5f,0xa8,0x3c,0x4a,0x53, + 0x27,0x59,0x7e,0x7c,0x30,0x63,0xbd,0x3d,0xb1,0x4c,0x4c,0x79,0xa9,0xbc,0x2b,0x2f, + 0x37,0x28,0x5a,0x26,0xab,0x66,0x6f,0x5e,0x60,0x3c,0x5c,0x2d,0xad,0xba,0x2b,0x78, + 0x78,0x32,0x26,0xa3,0x60,0x69,0x3e,0xb1,0x34,0x54,0x71,0xa5,0xb3,0x52,0x4d,0x38, + 0x38,0x32,0xc0,0xa3,0x6b,0x69,0x3f,0x5f,0x35,0x34,0x71,0xb9,0xb3,0x4a,0x2d,0x39, + 0x48,0x31,0x7e,0xa7,0x45,0x6a,0x5b,0x3f,0x58,0xae,0x7e,0xbb,0xb6,0x2e,0x4e,0x46, + 0x68,0x66,0x5a,0xb0,0x6f,0x6c,0x6c,0x5f,0xaf,0xa6,0x30,0x4d,0xba,0xaa,0x2e,0xbc, + 0x28,0x70,0x7a,0xb1,0x56,0x6d,0x79,0xb2,0x43,0x6c,0xa7,0x21,0xbc,0x43,0x4f,0x56, + 0x4b,0x61,0x65,0x36,0xc2,0x32,0xaf,0xa2,0x47,0xb6,0xac,0x29,0xbd,0x67,0x2f,0x2f, + 0xba,0x23,0x56,0xbb,0x79,0x6f,0x43,0xa2,0x75,0x6c,0xb4,0x3b,0xbf,0xba,0x50,0x40, + 0x68,0xb6,0xbc,0xc0,0x32,0x70,0x51,0x40,0xae,0x24,0xc2,0xc1,0xc2,0x6d,0xa3,0x4c, + 0x69,0x3f,0xa9,0x33,0x3c,0x72,0x4b,0x41,0x57,0x7d,0x39,0x76,0x37,0xc2,0xa4,0x51, + 0x49,0x68,0xbd,0x3b,0x4c,0x74,0x31,0x41,0xb2,0x65,0x45,0x3a,0x37,0x35,0xa4,0x71, + 0x29,0x61,0x63,0x3e,0xc0,0x73,0x77,0x62,0x32,0x35,0x51,0x54,0x39,0x3c,0xa5,0x33, + 0x69,0x71,0x2b,0x41,0xa6,0x75,0x2a,0x22,0x4c,0x7d,0x58,0xb2,0x3a,0x61,0x53,0xb0, + 0x59,0x2b,0xb9,0x47,0xab,0x76,0x29,0xb4,0x67,0x5d,0x5e,0xa2,0x3c,0x67,0xa5,0xb8, + 0xab,0xaf,0x4b,0x4e,0x39,0x78,0x52,0x42,0xa8,0x7d,0x6e,0x5e,0x40,0x5c,0xa6,0xad, + 0x29,0xbd,0xa5,0x4f,0x2b,0x78,0xa6,0x63,0x35,0x4d,0x76,0x34,0x42,0x2c,0xa7,0x67, + 0x2a,0x3e,0x7b,0x54,0x64,0x79,0x73,0xb5,0x72,0x4d,0x24,0xba,0x44,0x41,0x56,0x32, + 0xbc,0x51,0x23,0x5a,0xc1,0x7a,0x76,0x63,0x72,0x35,0x21,0x22,0x45,0x3d,0xa8,0x32, + 0x2a,0x58,0x27,0x57,0x31,0x7b,0x6e,0xb5,0x61,0x6d,0x21,0x4e,0x45,0x3c,0x56,0x33, + 0x5a,0x58,0xad,0x57,0x3a,0x7b,0x6f,0x43,0x61,0x25,0x24,0xc2,0x57,0xc2,0x31,0xc2, + 0xb4,0x40,0xb5,0x57,0x3d,0x7b,0x6e,0x23,0x62,0x3d,0x21,0x3e,0x45,0xb2,0x56,0x6d, + 0x3a,0x5f,0xc1,0x5b,0x5f,0x7c,0x7c,0xb5,0xbe,0x7d,0x2f,0xba,0x48,0xc1,0xa8,0xc2, + 0xac,0x6c,0x33,0x61,0xa5,0x7d,0x49,0xb6,0x36,0xbf,0xa6,0x34,0x49,0xa4,0x57,0x3b, + 0x3a,0x7b,0x6b,0x63,0x2a,0x7d,0x24,0x44,0x45,0x2d,0xa8,0x58,0x4a,0x4a,0x57,0x77, + 0x7a,0x22,0x77,0x65,0x5d,0x7e,0x3b,0x24,0x54,0x65,0xab,0x24,0x4b,0x48,0x57,0x78, + 0x3a,0x22,0x67,0x66,0x78,0x7e,0x63,0x24,0x5d,0x65,0xab,0x52,0x4c,0x3a,0x57,0xa5, + 0x4a,0x29,0x5f,0x69,0x39,0xa1,0x6e,0xb6,0x61,0x5d,0xb3,0x56,0x4d,0xbf,0x57,0xab, + 0x3a,0xa3,0x4f,0x69,0x3f,0xa1,0x32,0x24,0x72,0x6d,0xb3,0x5a,0x4d,0x35,0xaa,0x44, + 0xbc,0xaf,0xa9,0x6c,0x55,0xa1,0xaa,0x64,0x2a,0x45,0xb9,0x62,0x4e,0x79,0x58,0x64, + 0x6b,0x61,0x65,0x36,0xc2,0x36,0xab,0x44,0x2a,0x55,0xb9,0x6a,0x4e,0x26,0x58,0x63, + 0xbc,0xb0,0x37,0x6c,0x4b,0xa1,0xab,0x24,0x2b,0x75,0xb9,0x6e,0x4e,0x22,0xaa,0x68, + 0xbc,0xb0,0x57,0x6c,0x47,0xa1,0xac,0x25,0xac,0xb0,0x4f,0x6c,0x4a,0xa2,0x57,0xb6, + 0xac,0x25,0xbe,0x7c,0x4f,0xb5,0x58,0x2d,0xbc,0xba,0x4b,0x6d,0x61,0xa2,0x7c,0x24, + 0xb8,0x2d,0xc0,0x72,0x50,0x60,0x58,0xae,0x2a,0xbd,0xa9,0x70,0x42,0xa2,0xa1,0x7b, + 0x44,0x7b,0x77,0x61,0x23,0x7c,0x25,0x29,0x66,0x66,0xb8,0x5e,0x6f,0x5c,0x43,0x3c, + 0x65,0x6b,0xb2,0x47,0x2e,0xaa,0x28,0x6f,0x46,0xba,0xb8,0x73,0x4c,0x63,0x71,0x7e, + 0x70,0xa6,0x59,0x37,0xae,0xbf,0x4b,0x71,0x37,0x2b,0x3e,0xa3,0x75,0x69,0x43,0xa1, + 0x35,0x74,0x72,0x43,0xb3,0x53,0x2d,0x39,0xaa,0x31,0xb8,0xa7,0x4b,0x6a,0x37,0x5f, + 0x58,0xb6,0x7d,0x5f,0xb8,0x66,0x4e,0x2b,0x38,0x6a,0x66,0xb5,0x62,0x6d,0x7c,0xb2, + 0x46,0x54,0xb4,0x57,0xbf,0xbc,0x50,0x42,0x58,0xb7,0x4e,0xc0,0x39,0x70,0x53,0xb2, + 0xab,0x64,0xbd,0x4b,0xc1,0x57,0x30,0xba,0x68,0xbc,0x73,0x32,0x2e,0x71,0x77,0x41, + 0xa5,0x25,0x49,0x7e,0x37,0x40,0xa4,0x75,0x69,0x61,0xb5,0x3d,0x4a,0x74,0x3a,0xb3, + 0xa5,0xb7,0x49,0x74,0x37,0x41,0x52,0x76,0x49,0x61,0xbd,0x3d,0x56,0x24,0x34,0x51, + 0x60,0xbb,0xb5,0x7e,0x26,0x31,0x71,0x36,0x49,0x71,0xb9,0x41,0x4c,0x75,0x39,0x42, + 0x33,0x55,0x51,0x6a,0x39,0x46,0xa5,0x3a,0x59,0x74,0x67,0x43,0xac,0x75,0x2c,0x22, + 0x47,0x2d,0x58,0xb8,0x3a,0x6d,0xa5,0xb2,0x39,0x2b,0x47,0x47,0xbd,0x76,0x2f,0xb4, + 0x62,0x35,0x65,0x5a,0x3e,0x28,0xa6,0x62,0xab,0xb7,0x63,0x4d,0x2f,0x78,0x27,0xb4, + 0xb8,0xaf,0x6e,0x3e,0x42,0x53,0x55,0x59,0x2a,0x3e,0xa9,0x53,0x70,0x7b,0x3f,0xb5, + 0x74,0x65,0x21,0x24,0x45,0x4f,0xa8,0x38,0x7a,0x52,0x73,0x59,0x6a,0x7b,0x3b,0x23, + 0x74,0x6d,0x21,0x2a,0x45,0x51,0x56,0x37,0x4a,0x58,0x47,0x5c,0xa7,0x7b,0xbb,0xb5, + 0x24,0x5d,0x2d,0xb8,0x48,0x30,0xa8,0xbf,0x4a,0x6c,0x43,0x62,0x7a,0x7d,0x62,0x24, + 0x3d,0x35,0xa4,0x62,0x4a,0x5c,0x57,0x58,0x4a,0x22,0xb9,0x65,0x77,0x7e,0x42,0x44, + 0x55,0x45,0xac,0x34,0x4b,0x4e,0x5a,0x72,0x21,0x48,0xc0,0x21,0x70,0x7e,0x64,0x64, + 0x52,0x5d,0xaf,0x60,0x4c,0x3d,0x57,0xa5,0xac,0x2a,0xad,0x67,0x23,0x7e,0x7b,0xb6, + 0x72,0xaf,0xb3,0x6a,0x4d,0x47,0x58,0x35,0x6a,0xa4,0x53,0x69,0x5a,0xa1,0x3a,0x44, + 0x73,0x3d,0xb5,0xb2,0x4e,0x2c,0x58,0x68,0x7a,0xb1,0x37,0x6c,0x78,0xa1,0xb5,0x24, + 0x2d,0xbf,0xb9,0xc0,0x4e,0xa5,0xaa,0x69,0x6a,0xb0,0xb1,0x6c,0x66,0xa1,0xb6,0x24, + 0x2c,0x7d,0xb9,0xb8,0x4e,0x27,0x58,0x6a,0x3a,0xb0,0x77,0x6c,0x5e,0xa1,0xb6,0x44, + 0x2c,0x4d,0xba,0x4c,0x4e,0x2a,0x58,0x60,0x5a,0xb7,0xb5,0x6e,0xae,0xa2,0x6c,0x24, + 0xb1,0xaf,0xbb,0x68,0x50,0x3d,0x58,0xa6,0x5a,0xbc,0x77,0x6f,0xa1,0xa2,0x2a,0x64, + 0xb9,0x55,0xc1,0x56,0x50,0x2d,0x24,0x29,0xa8,0x67,0x46,0x5e,0x7c,0x5c,0x4d,0x5c, + 0x45,0x2b,0xb0,0x49,0x2c,0xad,0x28,0x6b,0x46,0xb2,0x7a,0x6d,0x52,0x63,0x79,0x3d, + 0x23,0x64,0x45,0x75,0xa8,0x36,0x2b,0xa4,0x37,0x29,0x56,0x27,0x3e,0x67,0x46,0x5f, + 0x36,0x64,0x72,0x5f,0xb3,0x5a,0x4d,0x34,0xaa,0x41,0xc0,0xa8,0x5a,0x6a,0x50,0xb1, + 0x6e,0x74,0x24,0x5b,0xb7,0xaf,0x2e,0x4b,0xba,0x54,0x66,0xb0,0x5e,0x6c,0x3e,0x60, + 0x4c,0x54,0xa8,0xa3,0xbd,0x69,0x2f,0x7b,0xba,0xa5,0xb4,0xbb,0x2a,0x6f,0x47,0xb2, + 0x76,0x26,0x4c,0xbf,0x34,0xc1,0x6e,0x4f,0x78,0xaa,0x76,0xbc,0x42,0x70,0x44,0xb2, + 0xbb,0x6c,0xc2,0x6e,0x32,0x66,0xa3,0x77,0x79,0x62,0x27,0x3d,0x64,0x74,0x3c,0x41, + 0xa6,0x45,0x49,0xb0,0x37,0x47,0x53,0x36,0x39,0x72,0x4b,0x41,0x5b,0x75,0x3a,0x62, + 0x38,0x3d,0x57,0xc2,0x3a,0x30,0x53,0x70,0x69,0x7c,0xbd,0x48,0x35,0x76,0xa3,0x22, + 0x69,0x65,0x5f,0x3c,0x3c,0x70,0xa5,0xa5,0x29,0xaf,0x27,0x4e,0x45,0x78,0x57,0x22, + 0xac,0x45,0x6b,0x52,0x3f,0x7c,0x54,0x23,0xbb,0xb6,0x33,0x4f,0xa5,0x78,0x22,0xb5, + 0x45,0xa7,0x22,0x52,0x45,0x56,0x56,0x3a,0x6a,0x53,0x6f,0x59,0x78,0x7b,0x42,0x63, + 0x75,0x75,0x22,0x44,0x45,0x54,0x56,0x38,0xbc,0x70,0x3f,0x5f,0xad,0x7d,0x4b,0x64, + 0x3d,0x2d,0xa4,0x5a,0x4a,0x5e,0xa9,0x5a,0xac,0x23,0xa1,0x65,0x25,0x7e,0x44,0x44, + 0x55,0xbf,0xac,0x42,0x4b,0x56,0x5a,0x72,0x21,0x48,0xbf,0x33,0x7a,0x7e,0x45,0x24, + 0x56,0x35,0xae,0x52,0x4b,0x3d,0xa9,0xa8,0x6a,0x2a,0xb1,0x67,0x27,0x7e,0x26,0x64, + 0x65,0x65,0xb4,0x42,0x4d,0x50,0xaa,0x39,0x7a,0xa4,0xa9,0x69,0x64,0xa1,0x41,0x64, + 0x74,0xa7,0xb3,0xb2,0x4d,0x4b,0x58,0x37,0x5a,0xa4,0xb9,0x69,0x67,0xa1,0x67,0xb6, + 0x2e,0x45,0xba,0x6e,0x4e,0xb0,0x58,0x6a,0x6a,0xb1,0x73,0x6c,0x2d,0xa1,0xb7,0x64, + 0x2e,0xbf,0xba,0x24,0x4e,0xaf,0xaa,0x6c,0x3a,0xb1,0x2b,0x6c,0xb8,0xa1,0xb8,0x64, + 0x2e,0xaf,0xb9,0xb0,0x4f,0xbb,0x58,0x77,0x2a,0xbc,0xa1,0x6f,0x63,0xa2,0x21,0x24, + 0xb9,0x2d,0xc1,0x5c,0x50,0x22,0x58,0xaa,0x26,0x3d,0xa8,0x56,0xab,0x5d,0x6a,0xae, + 0x38,0x43,0xa8,0x4b,0x2c,0xaf,0x48,0x56,0xbb,0x73,0x6e,0x6f,0x32,0x62,0x31,0xaf, + 0x51,0x54,0x39,0x23,0xa8,0x43,0x2a,0x63,0xa9,0x60,0x5e,0x7d,0x42,0x66,0x75,0x7e, + 0x61,0xbe,0x60,0x45,0xae,0x5e,0x2d,0x3c,0x58,0x32,0x3a,0xa8,0x33,0x6a,0xa3,0x5f, + 0x69,0x4c,0x7e,0xa3,0xb9,0xad,0x4e,0xaf,0xba,0xa6,0x4a,0xbc,0x46,0x70,0x4c,0x41, + 0x54,0x25,0x4a,0x32,0x37,0x4d,0xa4,0x78,0x79,0x62,0x77,0x3d,0x6c,0x74,0x40,0x21, + 0xa6,0x35,0x51,0xa8,0x39,0x48,0x53,0x37,0x69,0x74,0x2b,0x43,0xb7,0x75,0x2d,0xb4, + 0x50,0xb8,0x4c,0xbf,0x34,0xc2,0x7c,0xb4,0x79,0x2d,0x6b,0x48,0x3c,0x76,0xa5,0x42, + 0x65,0x5d,0x61,0x64,0x3e,0x7d,0x54,0x7d,0x79,0xbe,0x3f,0x50,0x6d,0x79,0x29,0x23, + 0x76,0x5d,0x22,0x6c,0x45,0x5c,0xa8,0x3c,0xac,0x57,0x43,0x60,0x76,0x7c,0x71,0x44, + 0x36,0x65,0xac,0x64,0x4b,0x40,0x57,0xa6,0xbc,0x2a,0x33,0x67,0x23,0xa1,0x47,0x44, + 0x76,0x35,0xb4,0x46,0x4d,0x57,0xaa,0x3a,0x6a,0xa5,0x27,0x69,0x2a,0xa1,0x44,0x44, + 0x75,0xb7,0xb6,0xba,0x4e,0xbe,0xaa,0x6e,0xbc,0xb2,0x3f,0x6c,0xae,0xa1,0xc1,0x44, + 0x2f,0x55,0xba,0xb0,0x4e,0xb3,0xaa,0x6e,0xac,0xb2,0x4b,0x6c,0xb5,0xa1,0xbf,0x44, + 0x2f,0x45,0xba,0x2a,0x4e,0xbd,0x58,0x6f,0x6a,0xb2,0x53,0x6c,0xb0,0xa1,0xb3,0x24, + 0xb0,0x35,0xbe,0xa8,0x4f,0xbc,0xaa,0x71,0xac,0xbb,0xb5,0x6f,0x69,0xa2,0x7e,0xb6, + 0xb6,0x65,0xc0,0x38,0x50,0x58,0xaa,0xb7,0xa3,0x51,0x3c,0x33,0xb4,0xa2,0x2d,0x44, + 0xb9,0xb7,0xc0,0x30,0x50,0xac,0x26,0x2a,0x26,0x63,0x6a,0x67,0xb0,0x5f,0x3c,0x5d, + 0x2f,0xae,0x4c,0x2d,0xa9,0x3a,0x2b,0xae,0xba,0x34,0x36,0xa3,0x2e,0x69,0x49,0x3f, + 0x33,0x4c,0x7c,0x67,0xb7,0xb5,0x2e,0x4b,0x28,0x6a,0xa4,0xb6,0x68,0x6d,0xb0,0xa2, + 0x47,0x24,0xb5,0x5f,0xc1,0x75,0x30,0xb0,0x29,0x43,0x3f,0x3d,0x69,0x75,0x3e,0xb4, + 0x34,0x5d,0x52,0x48,0x39,0x7b,0x53,0xb5,0x29,0x2d,0xbd,0x4e,0x50,0x78,0x59,0x42, + 0xac,0xaf,0x6b,0xc0,0x42,0x2f,0xa7,0x69,0x5a,0x3c,0x5f,0x59,0xab,0x7b,0x4b,0x63, + 0xa1,0x5d,0x2a,0x3e,0x48,0x52,0xa8,0xab,0xbc,0x6f,0x4f,0x60,0xa8,0x7c,0x28,0x24, + 0x5e,0x5d,0xac,0x64,0x4c,0x62,0xaa,0x3d,0xbc,0xa6,0x4b,0x69,0xa5,0xa1,0x48,0x24, + 0x77,0x35,0xb3,0x36,0x4f,0xc2,0x58,0x51,0xbc,0xb3,0x3f,0x6d,0x37,0xa2,0x32,0x64, + 0xa3,0x35,0xbb,0x34,0x4f,0x35,0xaa,0x30,0xbc,0xb2,0xb9,0x6b,0x35,0xa2,0x59,0x44, + 0xa4,0xb7,0xc0,0x3e,0x50,0x6b,0x58,0xb1,0x2a,0xbe,0x2b,0x70,0x25,0x5c,0x3c,0x7d, + 0x2c,0x74,0x45,0x61,0xae,0x3d,0x2b,0xa5,0xb9,0x29,0xac,0x27,0xa5,0x69,0x3a,0xa1, + 0x5b,0x24,0x7c,0x61,0xba,0xaf,0x2e,0xaa,0x48,0x7c,0x56,0xbb,0xae,0x6f,0x6e,0xa2, + 0x7a,0x26,0x4c,0xbf,0x34,0xc1,0x6e,0x44,0x38,0xb7,0xb0,0xc0,0x4a,0x70,0x69,0x41, + 0x4f,0x3d,0x36,0x3e,0x37,0x54,0xa4,0x7a,0x39,0x64,0xa9,0x43,0xbd,0x75,0x30,0x42, + 0x48,0x2d,0x58,0xc2,0x3a,0x7d,0x53,0xb6,0x49,0x2e,0x47,0x4e,0x55,0x78,0x59,0xb4, + 0xa9,0xb7,0x22,0x2c,0x45,0x68,0xa8,0x3f,0x4a,0x54,0xa1,0x59,0x7a,0x7c,0x2d,0x24, + 0x36,0xbf,0xa8,0x22,0x4d,0x68,0x58,0x3e,0x2a,0xa3,0x5f,0x6d,0x3e,0xa2,0x35,0x44, + 0xa3,0xbf,0xbb,0x56,0x4f,0x39,0xaa,0x25,0x4a,0xba,0x27,0x6d,0x3a,0xa2,0x22,0xb6, + 0xba,0x75,0xc0,0xba,0x50,0x6e,0x58,0xb2,0x4a,0xbb,0xbc,0x5f,0xa9,0x69,0x4c,0xb2, + 0x74,0xa7,0x53,0xa8,0x3e,0x24,0x5a,0x22,0xaf,0x4d,0x76,0xac,0x45,0x6d,0x56,0x3f, + 0xac,0x54,0x27,0x59,0xa3,0x7e,0x4e,0x44,0x78,0x4d,0xb4,0xa6,0x4d,0x6b,0xaa,0x33, + 0x7a,0xb3,0xa1,0x6e,0xb9,0xa2,0x33,0x25,0xa3,0xab,0x3c,0xc1,0x32,0x23,0x58,0xb0, + 0x38,0x34,0x46,0xa4,0xba,0x6f,0x4b,0x21,0xa6,0xb7,0x51,0xbe,0x39,0x50,0xa5,0x44, + 0xab,0x2d,0xb5,0x4a,0x5a,0x78,0x63,0x62,0xa7,0x2d,0x2e,0xaa,0x49,0x6b,0x57,0x4a, + 0x7a,0x74,0x37,0x64,0x5c,0x7d,0x2a,0x44,0x57,0x65,0xac,0xa2,0x4b,0x43,0x57,0xa5, + 0x2a,0xb3,0x2f,0x6d,0x79,0xa2,0x72,0xaf,0x52,0xb6,0x5d,0xa1,0xb5,0x57,0x52,0x26, + 0x39,0xb7,0x3b,0x5a,0x31,0x7b,0x51,0x63,0x77,0x7d,0xac,0x22,0x4b,0x48,0x57,0xa6, + 0x4a,0xb4,0x56,0xa7,0x7c,0x74,0x58,0xb4,0x69,0x4d,0x22,0xb6,0x4d,0x2c,0xaa,0xa1, + 0x28,0x64,0x5f,0x65,0xbd,0xa1,0x38,0x64,0xa9,0x7c,0x72,0x25,0xb3,0x23,0x58,0xa2, + 0xac,0xbd,0x57,0x70,0x49,0xa2,0xa3,0x60,0x3c,0x7d,0x7c,0x50,0x39,0x2e,0x27,0x3b, + 0x57,0x36,0x4e,0xbc,0xbd,0x5e,0x46,0x35,0x27,0x62,0x46,0x5f,0x56,0x61,0x3a,0x5e, + 0x73,0x5c,0x3d,0x7b,0x2b,0x43,0x2b,0x55,0x26,0xac,0x46,0x55,0x56,0x63,0x3a,0x5b, + 0x2b,0x61,0xa9,0x40,0x5f,0x5d,0x3a,0x5d,0xb5,0x5b,0xaf,0x7b,0x24,0x43,0x2a,0x55, + 0x26,0x62,0x46,0x6f,0x56,0x66,0x7a,0x5d,0x53,0x5b,0xa7,0x7b,0xab,0x43,0x28,0x35, + 0x26,0x3a,0x46,0x51,0x56,0x67,0x7a,0x65,0xa4,0x3e,0xa1,0x2e,0x44,0x24,0x32,0x71, + 0xa2,0xa8,0x51,0x34,0xa3,0x31,0xbb,0x31,0x5f,0x31,0x40,0x71,0x35,0xb3,0x32,0x6d, + 0x31,0x68,0x31,0x40,0xa3,0x35,0x69,0x32,0x4f,0x31,0x5c,0x71,0x3c,0xb3,0x34,0x4d, + 0x31,0xb2,0x31,0x4e,0xa3,0x38,0xbb,0x33,0x3f,0x31,0x78,0x71,0x43,0xb3,0x35,0xbf, + 0x32,0x58,0x31,0x5c,0xa3,0x3c,0x69,0x33,0xc1,0x31,0xa6,0x71,0x4a,0xb3,0x37,0x2d, + 0x32,0x30,0x31,0x6a,0xa3,0x3f,0xbb,0x34,0xb1,0x31,0xc2,0x71,0x51,0xb3,0x39,0x6d, + 0x33,0x48,0x31,0x78,0xa3,0x43,0x69,0x35,0x2f,0x32,0x4c,0x71,0x58,0xb3,0x3b,0x4d, + 0x33,0xa2,0x31,0x26,0xa3,0x46,0xbb,0x36,0xa1,0x32,0x68,0x71,0x5f,0xb3,0x3c,0xbf, + 0x34,0x38,0x31,0xa6,0xa3,0x4a,0x69,0x37,0x6f,0x32,0x24,0x71,0x66,0xb3,0x3e,0x2d, + 0x34,0x70,0x31,0xb4,0xa3,0x4d,0xbb,0x38,0x5f,0x32,0xb2,0x71,0x6d,0xb3,0x40,0x6d, + 0x34,0xba,0x33,0x7d,0x35,0x32,0x61,0x38,0xc1,0x33,0x34,0x71,0x72,0xb3,0x41,0x2d, + 0x35,0x50,0x32,0x3a,0xa3,0x53,0xbb,0x39,0xb1,0x33,0x50,0x71,0x79,0xb3,0x43,0x6d, + 0x35,0x28,0x32,0x48,0xa3,0x57,0x69,0x3a,0x2f,0x33,0x6c,0x71,0xa2,0xb3,0x45,0x4d, + 0x36,0x40,0x32,0x56,0xa3,0x5a,0xbb,0x3b,0xa1,0x33,0x28,0x71,0x27,0xb3,0x46,0xbf, + 0x36,0x78,0x32,0x64,0xa3,0x5e,0x69,0x3c,0x6f,0x33,0xb6,0x71,0x2e,0xb3,0x48,0x2d, + 0x36,0xc2,0x32,0x72,0xa3,0x61,0xbb,0x3d,0x5f,0x34,0x40,0x71,0xa7,0xb3,0x4a,0x6d, + 0x37,0x68,0x32,0xa2,0xa3,0x65,0x69,0x3e,0x4f,0x34,0x5c,0x71,0xae,0xb3,0x4c,0x4d, + 0x37,0xb2,0x32,0x2e,0xa3,0x68,0xbb,0x3f,0x3f,0x34,0x78,0x71,0xb5,0xb3,0x4d,0xbf, + 0x38,0x58,0x32,0xae,0xa3,0x6c,0x69,0x3f,0xc1,0x34,0xa6,0x71,0xbc,0xb3,0x4f,0x25, + 0xa3,0x39,0x2a,0xaa,0xa3,0x6f,0xbb,0x40,0xb1,0x34,0xc2,0x72,0x31,0xb3,0x51,0x6d, + 0x39,0x48,0x33,0x38,0xa3,0x73,0x69,0x41,0x2f,0x35,0x4c,0x72,0x38,0xb3,0x53,0x4d, + 0x39,0xa2,0x33,0x46,0xa3,0x76,0xbb,0x42,0xa1,0x35,0x68,0x72,0x3f,0xb3,0x54,0xbf, + 0x3a,0x38,0x33,0x54,0xa3,0x7a,0x69,0x43,0x6f,0x35,0x24,0x72,0x46,0xb3,0x56,0x2d, + 0x3a,0x70,0x33,0x62,0xa3,0x7d,0xbb,0x44,0x5f,0x35,0xb2,0x72,0x4d,0x24,0x34,0x51, + 0x60,0xbb,0x33,0x7e,0x26,0x31,0x71,0x44,0x2f,0x35,0xbe,0x72,0x50,0xb3,0x59,0x4d, + 0x3b,0x40,0x33,0x76,0xa3,0x22,0xbb,0x45,0xa1,0x36,0x48,0x72,0x57,0x24,0x69,0x45, + 0xc1,0x36,0x54,0x72,0x5a,0xb3,0x5b,0x2d,0x3b,0x30,0x33,0x2a,0xa3,0x27,0xbb,0x46, + 0xb1,0x36,0x70,0x72,0x61,0xb3,0x5d,0x6d,0x3c,0x48,0x33,0xaa,0xa3,0x2b,0x69,0x47, + 0x2f,0x36,0x2c,0x72,0x68,0xb3,0x5f,0x4d,0x3c,0xa2,0x33,0xb8,0xa3,0x2e,0xbb,0x48, + 0xa1,0x36,0xba,0x72,0x6f,0xb3,0x60,0xbf,0x3d,0x38,0x34,0x34,0xa3,0xa4,0x69,0x49, + 0x6f,0x37,0x44,0x72,0x76,0xb3,0x62,0x2d,0x3d,0x70,0x34,0x42,0xa3,0xa7,0xbb,0x4a, + 0x5f,0x37,0x60,0x72,0x7d,0xb3,0x64,0x6d,0x3d,0xba,0x34,0x50,0xa3,0xab,0x69,0x4b, + 0x4f,0x37,0x7c,0x72,0x24,0xb3,0x66,0x4d,0x3e,0x60,0x34,0x5e,0xa3,0xae,0xbb,0x4c, + 0x3f,0x37,0xaa,0x72,0x2b,0xb3,0x67,0xb7,0xa3,0xab,0x3c,0xc1,0x31,0xb1,0x69,0x4c, + 0x2f,0x37,0xbe,0x72,0x30,0xb3,0x69,0x4d,0x3f,0x40,0x34,0x76,0xa3,0xb4,0xbb,0x4d, + 0xa1,0x38,0x48,0x72,0xa9,0xb3,0x6a,0xbf,0x3f,0x78,0x34,0x24,0xa3,0xb8,0x69,0x4e, + 0x6f,0x38,0x64,0x72,0xb0,0xb3,0x6c,0x2d,0x3f,0xc2,0x34,0xa4,0xa3,0xbb,0xbb,0x4f, + 0x5f,0x38,0xa2,0x72,0xb7,0xb3,0x6e,0x6d,0x40,0x68,0x34,0xb2,0xa3,0xbf,0x69,0x50, + 0x4f,0x38,0xae,0x72,0xbe,0xb3,0x70,0x4d,0x40,0xb2,0x34,0xc0,0xa3,0xc2,0xbb,0x31, + 0x3f,0x39,0x38,0x73,0x33,0xb3,0x71,0xbf,0x41,0x58,0x35,0x3c,0xa4,0x34,0x69,0x51, + 0xc1,0x39,0x54,0x73,0x3a,0xb3,0x73,0x2d,0x41,0x30,0x35,0x4a,0xa4,0x37,0xbb,0x52, + 0xb1,0x39,0x70,0x73,0x41,0xb3,0x75,0x6d,0x42,0x48,0x35,0x58,0xa4,0x3b,0x69,0x53, + 0x2f,0x39,0x2c,0x73,0x48,0xb3,0x77,0x4d,0x42,0xa2,0x35,0x66,0xa4,0x3e,0xbb,0x54, + 0xa1,0x39,0xba,0x73,0x4f,0xb3,0x78,0xbf,0x43,0x38,0x35,0x74,0xa4,0x42,0x69,0x55, + 0x6f,0x3a,0x44,0x73,0x56,0xb3,0x7a,0x2d,0x43,0x70,0x35,0x22,0xa4,0x45,0xbb,0x56, + 0x5f,0x3a,0x60,0x73,0x5d,0xb3,0x7c,0x6d,0x43,0xba,0x35,0x30,0xa4,0x49,0x69,0x57, + 0x4f,0x3a,0x7c,0x73,0x64,0xb3,0x7e,0x4d,0x44,0x60,0x35,0xb0,0xa4,0x4c,0xbb,0x58, + 0x3f,0x3a,0xaa,0x74,0x57,0xbe,0x31,0xc2,0xb3,0x3a,0xae,0x73,0x6c,0xb3,0xa2,0x4d, + 0x44,0xb2,0x35,0xc0,0xa4,0x50,0xbb,0x59,0x3f,0x3b,0x38,0x73,0x73,0xb3,0x21,0xbf, + 0x45,0x58,0x36,0x3c,0xa4,0x54,0x69,0x59,0xc1,0x3b,0x54,0x73,0x7a,0xb3,0x23,0x2d, + 0x45,0x30,0x36,0x4a,0xa4,0x57,0xbb,0x5a,0xb1,0x3b,0x70,0x73,0x21,0xb3,0x25,0x6d, + 0x46,0x48,0x36,0x58,0xa4,0x5b,0x69,0x5b,0x2f,0x3b,0x2c,0x73,0x28,0xb3,0x27,0x4d, + 0x46,0xa2,0x36,0x66,0xa4,0x5e,0xbb,0x5c,0xa1,0x3b,0xba,0x73,0x2f,0xb3,0x28,0xbf, + 0x47,0x38,0x36,0x74,0xa4,0x62,0x69,0x5d,0x6f,0x3c,0x44,0x73,0xa8,0xb3,0x2a,0x2d, + 0x47,0x70,0x36,0x22,0xa4,0x65,0xbb,0x5e,0x5f,0x3c,0x60,0x73,0xaf,0xb3,0x2c,0x6d, + 0x47,0xba,0x36,0x30,0xa4,0x69,0x69,0x5f,0x4f,0x3c,0x7c,0x73,0xb6,0xb3,0x2e,0x4d, + 0x48,0x60,0x36,0xb0,0xa4,0x6c,0xbb,0x60,0x3b,0x61,0x65,0x36,0xc2,0x31,0x4f,0x6d, + 0x48,0x28,0x36,0xba,0xa4,0x6f,0x69,0x60,0x2f,0x3c,0xbe,0x73,0xc2,0xb3,0xa3,0x4d, + 0x49,0x40,0x37,0x36,0xa4,0x72,0xbb,0x61,0xa1,0x3d,0x48,0x74,0x37,0xb3,0xa4,0xbf, + 0x49,0x78,0x37,0x44,0xa4,0x76,0x69,0x62,0x6f,0x3d,0x64,0x74,0x3e,0xb3,0xa6,0x2d, + 0x49,0xc2,0x37,0x52,0xa4,0x79,0xbb,0x63,0x5f,0x3d,0xa2,0x74,0x45,0xb3,0xa8,0x6d, + 0x4a,0x68,0x37,0x60,0xa4,0x7d,0x69,0x64,0x4f,0x3d,0xae,0x74,0x4c,0xb3,0xaa,0x4d, + 0x4a,0xb2,0x37,0x6e,0xa4,0xa2,0xbb,0x65,0x3f,0x3e,0x38,0x74,0x53,0xb3,0xab,0xbf, + 0x4b,0x58,0x37,0x7c,0xa4,0x24,0x5a,0x2d,0x4b,0x70,0x37,0x22,0xa4,0x25,0xbb,0x66, + 0x5f,0x3e,0x60,0x74,0x5d,0xb3,0xae,0x6d,0x4b,0xba,0x37,0x30,0xa4,0x29,0x69,0x67, + 0x4f,0x3e,0x7c,0x74,0x64,0xb3,0xb0,0x4d,0x4c,0x60,0x37,0xb0,0xa4,0x2c,0xbb,0x68, + 0x3f,0x3e,0xaa,0x74,0x6b,0xb3,0xb1,0xbf,0x4c,0xaa,0x37,0xbe,0xa4,0x30,0x69,0x68, + 0xc1,0x3f,0x34,0x74,0x72,0xb3,0xb3,0x2d,0x4d,0x50,0x38,0x3a,0xa4,0xa5,0xbb,0x69, + 0xb1,0x3f,0x50,0x74,0x79,0xb3,0xb5,0x6d,0x4d,0x28,0x38,0x48,0xa4,0xa9,0x69,0x6a, + 0x2f,0x3f,0x6c,0x74,0xa2,0xb3,0xb7,0x4d,0x4e,0x40,0x38,0x56,0xa4,0xac,0xbb,0x6b, + 0xa1,0x3f,0x28,0x74,0x27,0x24,0x70,0x71,0x70,0xbb,0x38,0x60,0xa4,0xaf,0x69,0x6c, + 0x4f,0x3f,0xae,0x74,0x2c,0xb3,0xba,0x4d,0x4e,0xb2,0x38,0x6e,0xa4,0xb2,0xbb,0x6d, + 0x3f,0x40,0x38,0x74,0xa5,0xb3,0xbb,0xbf,0x4f,0x58,0x38,0x7c,0xa4,0xb6,0x69,0x6d, + 0xc1,0x40,0x54,0x74,0xac,0xb3,0xbd,0x2d,0x4f,0x30,0x38,0x2a,0xa4,0xb9,0xbb,0x6e, + 0xb1,0x40,0x70,0x74,0xb3,0xb3,0xbf,0x6d,0x50,0x48,0x38,0xaa,0xa4,0xbd,0x69,0x6f, + 0x2f,0x40,0x2c,0x74,0xba,0xb3,0xc1,0x4d,0x50,0xa2,0x38,0xb8,0xa4,0xc0,0xbb,0x70, + 0xa1,0x40,0xba,0x74,0xc1,0xb3,0xc2,0xbf,0x41,0x38,0x39,0x34,0xa5,0x32,0x69,0x71, + 0x6f,0x41,0x44,0x75,0x36,0xb4,0x32,0x2d,0x51,0x70,0x39,0x42,0xa5,0x35,0xbb,0x72, + 0x5f,0x41,0x60,0x75,0x3d,0xb4,0x34,0x6d,0x51,0xba,0x39,0x50,0xa5,0x39,0x69,0x73, + 0x4f,0x41,0x7c,0x75,0x44,0xb4,0x36,0x4d,0x52,0x60,0x3b,0x7d,0x35,0x32,0x61,0x53, + 0xb1,0x41,0x30,0x75,0x49,0xb4,0x37,0x6d,0x52,0x28,0x39,0x68,0xa5,0x3f,0x69,0x74, + 0x2f,0x41,0xbe,0x75,0x50,0xb4,0x39,0x4d,0x53,0x40,0x39,0x76,0xa5,0x42,0xbb,0x75, + 0xa1,0x42,0x48,0x75,0x57,0xb4,0x3a,0xbf,0x53,0x78,0x39,0x24,0xa5,0x46,0x69,0x76, + 0x6f,0x42,0x64,0x75,0x5e,0xb4,0x3c,0x2d,0x53,0xc2,0x39,0xa4,0xa5,0x49,0xbb,0x77, + 0x5f,0x42,0xa2,0x75,0x65,0xb4,0x3e,0x6d,0x54,0x68,0x39,0xb2,0xa5,0x4d,0x69,0x78, + 0x4f,0x42,0xae,0x75,0x6c,0xb4,0x40,0x4d,0x54,0xb2,0x39,0xc0,0xa5,0x50,0xbb,0x79, + 0x3f,0x43,0x38,0x75,0x73,0xb4,0x41,0xbf,0x55,0x58,0x3a,0x3c,0xa5,0x54,0x69,0x79, + 0xc1,0x43,0x54,0x75,0x7a,0xb4,0x43,0x2d,0x55,0x30,0x3a,0x4a,0xa5,0x57,0xbb,0x7a, + 0xb1,0x43,0x70,0x75,0x21,0xb4,0x45,0x6d,0x56,0x48,0x3a,0x58,0xa5,0x5b,0x69,0x7b, + 0x2f,0x43,0x2c,0x75,0x28,0xb4,0x47,0x4d,0x56,0xa2,0x3a,0x66,0xa5,0x5e,0xbb,0x7c, + 0xa1,0x43,0xba,0x75,0x2f,0xb4,0x48,0xbf,0x57,0x38,0x3a,0x74,0xa5,0x62,0x69,0x7d, + 0x6f,0x44,0x44,0x75,0xa8,0xb4,0x4a,0x2d,0x57,0x70,0x3a,0x22,0xa5,0x65,0xbb,0x7e, + 0x5f,0x44,0x60,0x75,0xaf,0xb4,0x4c,0x6d,0x57,0xba,0x3a,0x30,0xa5,0x69,0x69,0xa1, + 0x4f,0x44,0x7c,0x75,0xb6,0x24,0x34,0x51,0x60,0xbb,0x33,0x7e,0x26,0x31,0x71,0x3f, + 0xa1,0x44,0x28,0x75,0xb9,0xb4,0x4e,0xbf,0x58,0x78,0x3a,0xb6,0xa5,0x6e,0x69,0xa2, + 0x6f,0x44,0xb6,0x75,0xc0,0xb4,0x50,0x2d,0x58,0xc2,0x3b,0x32,0xa5,0x71,0xbb,0x21, + 0x5f,0x45,0x40,0x76,0x35,0xb4,0x52,0x6d,0x59,0x68,0x3b,0x40,0xa5,0x75,0x69,0x22, + 0x4f,0x45,0x5c,0x76,0x3c,0xb4,0x54,0x4d,0x59,0xb2,0x3b,0x4e,0xa5,0x78,0xbb,0x23, + 0x3f,0x45,0x78,0x76,0x43,0xb4,0x55,0xbf,0x5a,0x58,0x3b,0x5c,0xa5,0x7c,0x69,0x23, + 0xc1,0x45,0xa6,0x76,0x4a,0xb4,0x57,0x2d,0x5a,0x30,0x3b,0x6a,0xa5,0xa1,0xbb,0x24, + 0xb1,0x45,0xc2,0x76,0x51,0xb4,0x59,0x6d,0x5b,0x48,0x3b,0x78,0xa5,0x23,0x69,0x25, + 0x2f,0x46,0x4b,0x7e,0xa5,0x24,0xbb,0x26,0x3f,0x46,0x58,0x76,0x5b,0xb4,0x5b,0xbf, + 0x5b,0xaa,0x3b,0x2c,0xa5,0x28,0x69,0x26,0xc1,0x46,0x74,0x76,0x62,0xb4,0x5d,0x25, + 0xa3,0xab,0x3c,0xc1,0x31,0x2a,0xbb,0x27,0xa1,0x46,0x28,0x76,0x67,0xb4,0x5e,0xbf, + 0x5c,0x78,0x3b,0xb6,0xa5,0x2e,0x69,0x28,0x6f,0x46,0xb6,0x76,0x6e,0xb4,0x60,0x2d, + 0x5c,0xc2,0x3c,0x32,0xa5,0xa3,0xbb,0x29,0x5f,0x47,0x40,0x76,0x75,0xb4,0x62,0x6d, + 0x5d,0x68,0x3c,0x40,0xa5,0xa7,0x69,0x2a,0x4f,0x47,0x5c,0x76,0x7c,0xb4,0x64,0x4d, + 0x5d,0xb2,0x3c,0x4e,0xa5,0xaa,0xbb,0x2b,0x3f,0x47,0x78,0x76,0x23,0xb4,0x65,0xbf, + 0x5e,0x58,0x3c,0x5c,0xa5,0xae,0x69,0x2b,0xc1,0x47,0xa6,0x76,0x2a,0xb4,0x67,0x2d, + 0x5e,0x30,0x3c,0x6a,0xa5,0xb1,0xbb,0x2c,0xb1,0x47,0xc2,0x76,0xa3,0xb4,0x69,0x6d, + 0x5f,0x48,0x3c,0x78,0xa5,0xb5,0x69,0x2d,0x2f,0x48,0x4c,0x76,0xaa,0xb4,0x6b,0x4d, + 0x5f,0xa2,0x3c,0x26,0xa5,0xb8,0xbb,0x2e,0xa1,0x48,0x68,0x76,0xb1,0xb4,0x6c,0xbf, + 0x60,0x38,0x3c,0xa6,0xa5,0xbc,0x69,0x2f,0x6f,0x48,0x24,0x76,0xb8,0xb4,0x6e,0x2d, + 0x60,0x70,0x3c,0xb4,0xa5,0xbf,0xbb,0x30,0x5f,0x48,0xb2,0x76,0xbf,0xb4,0x70,0x6d, + 0x60,0xba,0x3c,0xc2,0xa5,0x31,0x69,0xa3,0x4f,0x49,0x3c,0x77,0x34,0xb4,0x72,0x4d, + 0x61,0x60,0x3d,0x3e,0xa6,0x34,0xbb,0xa4,0x3f,0x49,0x58,0x77,0x3b,0xb4,0x73,0xbf, + 0x61,0xaa,0x3d,0x4c,0xa6,0x38,0x69,0xa4,0xc1,0x49,0x73,0x7e,0xc1,0x32,0xc2,0xbe, + 0xbd,0x68,0x45,0x47,0x31, +} ; + +// Windows Code Page 1252(欧文文字コード)とUTF-16の対応表を圧縮したもの +u8 CP1252ToUTF16Table[] = +{ + 0x35,0x71,0x71,0x31,0x31,0x31,0x31,0x71,0x31,0x31,0x55,0x35,0x31,0x31,0x58,0xa3, + 0x31,0x31,0x35,0x31,0x33,0x31,0x31,0xa3,0x31,0x51,0x31,0x3b,0x31,0x34,0x31,0x31, + 0xb3,0x31,0x51,0x31,0x3a,0x31,0x33,0x71,0x31,0x29,0x31,0x49,0x31,0x37,0x71,0x32, + 0xa3,0x31,0x6d,0x31,0x41,0x31,0x35,0x51,0x32,0x41,0x31,0x57,0x31,0x3b,0x31,0x33, + 0x21,0x31,0x29,0x31,0x48,0x31,0x37,0x31,0x32,0x79,0x31,0x65,0x31,0x3e,0x71,0x34, + 0x71,0x31,0xb7,0x31,0x4f,0x31,0x38,0xa3,0x33,0x31,0x31,0x73,0x31,0x42,0x31,0x35, + 0x61,0x32,0x41,0x31,0x56,0x31,0x3a,0x71,0x33,0x69,0x31,0x21,0x31,0x45,0x71,0x36, + 0x51,0x32,0x5d,0x31,0x5d,0x31,0x3c,0x51,0x33,0xb3,0x31,0x2f,0x31,0x49,0x31,0x37, + 0x41,0x32,0x79,0x31,0x64,0x31,0x3e,0x31,0x34,0x59,0x31,0xaf,0x31,0x4c,0x71,0x38, + 0x31,0x32,0xa7,0x31,0x6b,0x31,0x3f,0xa3,0x34,0xa3,0x31,0xbd,0x31,0x50,0x31,0x38, + 0xb3,0x33,0x31,0x31,0x72,0x31,0x41,0x71,0x35,0x49,0x32,0x39,0x31,0x53,0x71,0x39, + 0xa3,0x33,0x4d,0x31,0x79,0x31,0x43,0x51,0x35,0x21,0x32,0x47,0x31,0x57,0x31,0x3a, + 0x21,0x33,0x69,0x31,0xa2,0x31,0x45,0x31,0x36,0x39,0x32,0x55,0x31,0x5a,0x71,0x3b, + 0x71,0x33,0x25,0x31,0x27,0x31,0x46,0xa3,0x36,0x71,0x32,0x63,0x31,0x5e,0x31,0x3c, + 0x61,0x33,0xb3,0x31,0x2e,0x31,0x48,0x71,0x36,0xbb,0x32,0x71,0x31,0x61,0x71,0x3d, + 0x51,0x34,0x3d,0x31,0xa7,0x31,0x4a,0x51,0x37,0x61,0x32,0xa1,0x31,0x65,0x31,0x3e, + 0x41,0x34,0x59,0x31,0xae,0x31,0x4c,0x31,0x37,0xab,0x32,0x2d,0x31,0x68,0x71,0x3f, + 0x31,0x34,0x75,0x31,0xb5,0x31,0x4d,0xa3,0x38,0x51,0x32,0xad,0x31,0x6c,0x31,0x3f, + 0xb3,0x34,0xa3,0x31,0xbc,0x31,0x4f,0x71,0x38,0x29,0x32,0xbb,0x31,0x6f,0x71,0x40, + 0xa3,0x34,0xbf,0x32,0x5d,0x41,0x51,0x51,0x32,0x22,0x33,0x55,0x32,0x40,0x39,0x35, + 0xa5,0x32,0x31,0x71,0x52,0x41,0x62,0x71,0x54,0x32,0x32,0x71,0x32,0x4d,0x79,0x3b, + 0x51,0x3d,0x65,0x31,0xc0,0x31,0xa6,0xa3,0x3a,0x31,0x31,0x61,0x51,0x3d,0x79,0x34, + 0x73,0x31,0xb7,0x71,0x53,0x41,0x35,0xa7,0x32,0x52,0x34,0x69,0x33,0x42,0x39,0x5d, + 0x41,0x3a,0xab,0x71,0x24,0x31,0xaa,0x51,0x38,0xb3,0x36,0xb3,0x32,0x21,0x31,0x45, + 0x41,0x36,0x39,0x32,0x54,0x31,0x5a,0x31,0x3b,0x59,0x33,0x7d,0x31,0x24,0x71,0x46, + 0x31,0x36,0x55,0x32,0x5b,0x31,0x5b,0xa3,0x3b,0xa3,0x33,0x2b,0x31,0x28,0x31,0x46, + 0xb3,0x36,0x71,0x32,0x62,0x31,0x5d,0x71,0x3c,0x49,0x33,0xab,0x31,0x2b,0x71,0x47, + 0xa3,0x36,0x2d,0x32,0x69,0x31,0x5f,0x51,0x3c,0x21,0x33,0xb9,0x31,0x2f,0x31,0x48, + 0x21,0x36,0xbb,0x32,0x70,0x31,0x61,0x31,0x3d,0x39,0x34,0x35,0x31,0xa4,0x71,0x49, + 0x71,0x37,0x45,0x32,0x77,0x31,0x62,0xa3,0x3d,0x71,0x34,0x43,0x31,0xa8,0x31,0x4a, + 0x61,0x37,0x61,0x32,0x7e,0x31,0x64,0x71,0x3d,0xbb,0x34,0x51,0x31,0xab,0x71,0x4b, + 0x51,0x37,0x7d,0x32,0x25,0x31,0x66,0x51,0x3e,0x61,0x34,0x5f,0x31,0xaf,0x31,0x4c, + 0x41,0x37,0xab,0x32,0x2c,0x31,0x68,0x31,0x3e,0xab,0x34,0x6d,0x31,0xb2,0x71,0x4d, + 0x31,0x38,0x35,0x32,0xa5,0x31,0x69,0xa3,0x3f,0x51,0x34,0x7b,0x31,0xb6,0x31,0x4d, + 0xb3,0x38,0x51,0x32,0xac,0x31,0x6b,0x71,0x3f,0x29,0x34,0x29,0x31,0xb9,0x71,0x4e, + 0xa3,0x38,0x6d,0x32,0xb3,0x31,0x6d,0x51,0x40,0x41,0x34,0xa9,0x31,0xbd,0x31,0x4f, + 0x21,0x38,0x29,0x32,0xba,0x31,0x6f,0x31,0x40,0x79,0x34,0xb7,0x31,0xc0,0x71,0x50, + 0x71,0x38,0xb7,0x32,0xc1,0x31,0x70,0xa3,0x31, + +} ; + +// ISO/IEC_8859_15 (欧文文字コード)とUTF-16の対応表を圧縮したもの +u8 ISO_IEC_8859_15ToUTF16Table[] = +{ + 0x35,0x71,0x71,0x31,0x31,0x31,0x31,0x71,0x31,0x31,0x55,0x35,0x31,0x31,0x60,0x71, + 0x31,0x31,0x35,0x31,0x33,0x31,0x31,0xa3,0x31,0x51,0x31,0x3b,0x31,0x34,0x31,0x31, + 0xb3,0x31,0x51,0x31,0x3a,0x31,0x33,0x71,0x31,0x29,0x31,0x49,0x31,0x37,0x71,0x32, + 0xa3,0x31,0x6d,0x31,0x41,0x31,0x35,0x51,0x32,0x41,0x31,0x57,0x31,0x3b,0x31,0x33, + 0x21,0x31,0x29,0x31,0x48,0x31,0x37,0x31,0x32,0x79,0x31,0x65,0x31,0x3e,0x71,0x34, + 0x71,0x31,0xb7,0x31,0x4f,0x31,0x38,0xa3,0x33,0x31,0x31,0x73,0x31,0x42,0x31,0x35, + 0x61,0x32,0x41,0x31,0x56,0x31,0x3a,0x71,0x33,0x69,0x31,0x21,0x31,0x45,0x71,0x36, + 0x51,0x32,0x5d,0x31,0x5d,0x31,0x3c,0x51,0x33,0xb3,0x31,0x2f,0x31,0x49,0x31,0x37, + 0x41,0x32,0x79,0x31,0x64,0x31,0x3e,0x31,0x34,0x59,0x31,0xaf,0x31,0x4c,0x71,0x38, + 0x31,0x32,0xa7,0x31,0x6b,0x31,0x3f,0xa3,0x34,0xa3,0x31,0xbd,0x31,0x50,0x31,0x38, + 0xb3,0x33,0x31,0x31,0x72,0x31,0x41,0x71,0x35,0x49,0x32,0x39,0x31,0x53,0x71,0x39, + 0xa3,0x33,0x4d,0x31,0x79,0x31,0x43,0x51,0x35,0x21,0x32,0x47,0x31,0x57,0x31,0x3a, + 0x21,0x33,0x69,0x31,0xa2,0x31,0x45,0x31,0x36,0x39,0x32,0x55,0x31,0x5a,0x71,0x3b, + 0x71,0x33,0x25,0x31,0x27,0x31,0x46,0xa3,0x36,0x71,0x32,0x63,0x31,0x5e,0x31,0x3c, + 0x61,0x33,0xb3,0x31,0x2e,0x31,0x48,0x71,0x36,0xbb,0x32,0x71,0x31,0x61,0x71,0x3d, + 0x51,0x34,0x3d,0x31,0xa7,0x31,0x4a,0x51,0x37,0x61,0x32,0xa1,0x31,0x65,0x31,0x3e, + 0x41,0x34,0x59,0x31,0xae,0x31,0x4c,0x31,0x37,0xab,0x32,0x2d,0x31,0x68,0x71,0x3f, + 0x31,0x34,0x75,0x31,0xb5,0x31,0x4d,0xa3,0x38,0x51,0x32,0xad,0x31,0x6c,0x31,0x3f, + 0xb3,0x34,0xa3,0x31,0xbc,0x31,0x4f,0x71,0x38,0x29,0x32,0xbb,0x31,0x6f,0x71,0x40, + 0xa3,0x34,0xbf,0x32,0x5d,0x41,0x51,0x51,0x32,0x22,0x33,0x55,0x32,0x40,0x39,0x35, + 0xa5,0x32,0x31,0x71,0x52,0x41,0x62,0x71,0x54,0x32,0x32,0x71,0x32,0x4d,0x79,0x3b, + 0x51,0x3d,0x65,0x31,0xc0,0x31,0xa6,0xa3,0x3a,0x31,0x31,0x61,0x51,0x3d,0x79,0x34, + 0x73,0x31,0xb7,0x71,0x53,0x41,0x35,0xa7,0x32,0x52,0x34,0x69,0x33,0x42,0x39,0x5d, + 0x41,0x3a,0xab,0x71,0x24,0x31,0xaa,0x51,0x38,0xb3,0x36,0xb3,0x32,0x21,0x31,0x45, + 0x41,0x36,0x39,0x32,0x54,0x31,0x5c,0x35,0x3b,0x59,0x32,0x71,0x32,0x24,0x71,0x3d, + 0x41,0x3e,0x55,0x32,0x5b,0x31,0x5b,0xa3,0x3b,0xa3,0x33,0x2b,0x31,0x28,0x31,0x46, + 0xb3,0x36,0x71,0x32,0x62,0x31,0x5d,0x71,0x3c,0x49,0x32,0xbd,0x32,0x2b,0x71,0x47, + 0xa3,0x36,0x2d,0x31,0xc1,0x31,0xb1,0x51,0x3c,0x21,0x33,0xb9,0x31,0x5a,0x31,0x5b, + 0x61,0x3c,0xa3,0x34,0x70,0x31,0x61,0x31,0x3d,0x39,0x34,0x35,0x31,0xa4,0x71,0x49, + 0x71,0x37,0x45,0x32,0x77,0x31,0x62,0xa3,0x3d,0x71,0x34,0x43,0x31,0xa8,0x31,0x4a, + 0x61,0x37,0x61,0x32,0x7e,0x31,0x64,0x71,0x3d,0xbb,0x34,0x51,0x31,0xab,0x71,0x4b, + 0x51,0x37,0x7d,0x32,0x25,0x31,0x66,0x51,0x3e,0x61,0x34,0x5f,0x31,0xaf,0x31,0x4c, + 0x41,0x37,0xab,0x32,0x2c,0x31,0x68,0x31,0x3e,0xab,0x34,0x6d,0x31,0xb2,0x71,0x4d, + 0x31,0x38,0x35,0x32,0xa5,0x31,0x69,0xa3,0x3f,0x51,0x34,0x7b,0x31,0xb6,0x31,0x4d, + 0xb3,0x38,0x51,0x32,0xac,0x31,0x6b,0x71,0x3f,0x29,0x34,0x29,0x31,0xb9,0x71,0x4e, + 0xa3,0x38,0x6d,0x32,0xb3,0x31,0x6d,0x51,0x40,0x41,0x34,0xa9,0x31,0xbd,0x31,0x4f, + 0x21,0x38,0x29,0x32,0xba,0x31,0x6f,0x31,0x40,0x79,0x34,0xb7,0x31,0xc0,0x71,0x50, + 0x71,0x38,0xb7,0x32,0xc1,0x31,0x70,0xa3,0x31, +} ; + +#endif diff --git a/src/WolfDec/3rdParty/DXArchive.cpp b/src/WolfDec/3rdParty/DXArchive.cpp index f72df0a..d7d96f5 100644 --- a/src/WolfDec/3rdParty/DXArchive.cpp +++ b/src/WolfDec/3rdParty/DXArchive.cpp @@ -12,6 +12,9 @@ // include ---------------------------- #include "DXArchive.h" +#include "CharCode.h" +#include "Huffman.h" +#include "FileLib.h" #include #include #include @@ -36,6 +39,14 @@ typedef struct LZ_LIST u32 address ; } LZ_LIST ; +// data ------------------------------- + +// デフォルト鍵文字列 +static char DefaultKeyString[ 9 ] = { 0x44, 0x58, 0x42, 0x44, 0x58, 0x41, 0x52, 0x43, 0x00 }; // "DXLIBARC" + +// ログ文字列の長さ +size_t LogStringLength = 0 ; + // class code ------------------------- // ファイル名も一緒になっていると分かっているパス中からファイルパスとディレクトリパスを分割する @@ -84,7 +95,7 @@ int DXArchive::GetFilePathAndDirPath(TCHAR *Src, TCHAR *FilePath, TCHAR *DirPath } // ファイルの情報を得る -DARC_FILEHEAD *DXArchive::GetFileInfo( const TCHAR *FilePath ) +DARC_FILEHEAD *DXArchive::GetFileInfo( const TCHAR *FilePath, DARC_DIRECTORY **DirectoryP ) { DARC_DIRECTORY *OldDir ; DARC_FILEHEAD *FileH ; @@ -135,6 +146,12 @@ DARC_FILEHEAD *DXArchive::GetFileInfo( const TCHAR *FilePath ) // 無かったらエラー if( i == Num ) goto ERR ; + + // ディレクトリのアドレスを保存する指定があった場合は保存 + if( DirectoryP != NULL ) + { + *DirectoryP = this->CurrentDirectory ; + } // ディレクトリを元に戻す this->CurrentDirectory = OldDir ; @@ -229,7 +246,7 @@ int DXArchive::ConvSearchData( SEARCHDATA *SearchData, const TCHAR *Src, int *Le SearchData->Parity = ParityData ; // パックデータ数の保存 - SearchData->PackNum = (u16)(StringLength / 4) ; + SearchData->PackNum = StringLength / 4 ; // 正常終了 return 0 ; @@ -258,7 +275,7 @@ int DXArchive::AddFileNameData( const TCHAR *FileName, u8 *FileNameTable ) PackNum = ( Length + 3 ) / 4 ; // パック数を保存 - *((u16 *)&FileNameTable[0]) = (u16)PackNum ; + *((u16 *)&FileNameTable[0]) = PackNum ; // バッファの初期化 memset( &FileNameTable[4], 0, PackNum * 4 * 2 ) ; @@ -447,52 +464,110 @@ void DXArchive::NotConvFileRead( void *Data, s64 Size, FILE *fp ) NotConv( Data, Size ) ; } -// 鍵文字列を作成 -void DXArchive::KeyCreate( const char *Source, unsigned char *Key ) +// カレントディレクトリにある指定のファイルの鍵用の文字列を作成する、戻り値は文字列の長さ( 単位:Byte )( FileString は DXA_KEY_STRING_MAXLENGTH の長さが必要 ) +size_t DXArchive::CreateKeyFileString( int CharCodeFormat, const char *KeyString, size_t KeyStringBytes, DARC_DIRECTORY *Directory, DARC_FILEHEAD *FileHead, u8 *FileTable, u8 *DirectoryTable, u8 *NameTable, u8 *FileString ) { - int Len ; + size_t StartAddr ; - if( Source == NULL ) + // 最初にパスワードの文字列をセット + if( KeyString != NULL && KeyStringBytes != 0 ) { - memset( Key, 0xaa, DXA_KEYSTR_LENGTH ) ; + memcpy( FileString, KeyString, KeyStringBytes ) ; + FileString[ KeyStringBytes ] = '\0' ; + StartAddr = KeyStringBytes ; } else { - Len = ( int )strlen( Source ) ; - if( Len > DXA_KEYSTR_LENGTH ) - { - memcpy( Key, Source, DXA_KEYSTR_LENGTH ) ; - } - else + FileString[ 0 ] = '\0' ; + StartAddr = 0 ; + } + memset( &FileString[ DXA_KEY_STRING_MAXLENGTH - 8 ], 0, 8 ) ; + + // 次にファイル名の文字列をセット + CL_strcat_s( CharCodeFormat, ( char * )&FileString[ StartAddr ], ( DXA_KEY_STRING_MAXLENGTH - 8 ) - StartAddr, ( char * )( NameTable + FileHead->NameAddress + 4 ) ) ; + + // その後にディレクトリの文字列をセット + if( Directory->ParentDirectoryAddress != 0xffffffffffffffff ) + { + do { - // 鍵文字列が DXA_KEYSTR_LENGTH より短かったらループする - int i ; + CL_strcat_s( CharCodeFormat, ( char * )&FileString[ StartAddr ], ( DXA_KEY_STRING_MAXLENGTH - 8 ) - StartAddr, ( char * )( NameTable + ( ( DARC_FILEHEAD * )( FileTable + Directory->DirectoryAddress ) )->NameAddress + 4 ) ) ; + Directory = ( DARC_DIRECTORY * )( DirectoryTable + Directory->ParentDirectoryAddress ) ; + }while( Directory->ParentDirectoryAddress != 0xffffffffffffffff ) ; + } - for( i = 0 ; i + Len <= DXA_KEYSTR_LENGTH ; i += Len ) - memcpy( Key + i, Source, Len ) ; - if( i < DXA_KEYSTR_LENGTH ) - memcpy( Key + i, Source, DXA_KEYSTR_LENGTH - i ) ; - } + return StartAddr + CL_strlen( CharCodeFormat, ( char * )&FileString[ StartAddr ] ) * GetCharCodeFormatUnitSize( CharCodeFormat ) ; +} + +// 鍵文字列を作成 +void DXArchive::KeyCreate( const char *Source, size_t SourceBytes, u8 *Key ) +{ + char SourceTempBuffer[ 1024 ] ; + char WorkBuffer[ 1024 ] ; + char *UseWorkBuffer ; + u32 i, j ; + u32 CRC32_0 ; + u32 CRC32_1 ; + + if( SourceBytes == 0 ) + { + SourceBytes = CL_strlen( CHARCODEFORMAT_ASCII, Source ) ; + } + + if( SourceBytes < 4 ) + { + CL_strcpy( CHARCODEFORMAT_ASCII, SourceTempBuffer, Source ) ; + CL_strcpy( CHARCODEFORMAT_ASCII, &SourceTempBuffer[ SourceBytes ], DefaultKeyString ) ; + Source = SourceTempBuffer ; + SourceBytes = CL_strlen( CHARCODEFORMAT_ASCII, Source ) ; + } + + if( SourceBytes > sizeof( WorkBuffer ) ) + { + UseWorkBuffer = ( char * )malloc( SourceBytes ) ; + } + else + { + UseWorkBuffer = WorkBuffer ; } - Key[0] = ~Key[0] ; - Key[1] = ( Key[1] >> 4 ) | ( Key[1] << 4 ) ; - Key[2] = Key[2] ^ 0x8a ; - Key[3] = ~( ( Key[3] >> 4 ) | ( Key[3] << 4 ) ) ; - Key[4] = ~Key[4] ; - Key[5] = Key[5] ^ 0xac ; - Key[6] = ~Key[6] ; - Key[7] = ~( ( Key[7] >> 3 ) | ( Key[7] << 5 ) ) ; - Key[8] = ( Key[8] >> 5 ) | ( Key[8] << 3 ) ; - Key[9] = Key[9] ^ 0x7f ; - Key[10] = ( ( Key[10] >> 4 ) | ( Key[10] << 4 ) ) ^ 0xd6 ; - Key[11] = Key[11] ^ 0xcc ; + j = 0 ; + for( i = 0 ; i < SourceBytes ; i += 2, j++ ) + { + UseWorkBuffer[ j ] = Source[ i ] ; + } + CRC32_0 = HashCRC32( UseWorkBuffer, j ) ; + + j = 0 ; + for( i = 1 ; i < SourceBytes ; i += 2, j++ ) + { + UseWorkBuffer[ j ] = Source[ i ] ; + } + CRC32_1 = HashCRC32( UseWorkBuffer, j ) ; + + Key[ 0 ] = ( u8 )( CRC32_0 >> 0 ) ; + Key[ 1 ] = ( u8 )( CRC32_0 >> 8 ) ; + Key[ 2 ] = ( u8 )( CRC32_0 >> 16 ) ; + Key[ 3 ] = ( u8 )( CRC32_0 >> 24 ) ; + Key[ 4 ] = ( u8 )( CRC32_1 >> 0 ) ; + Key[ 5 ] = ( u8 )( CRC32_1 >> 8 ) ; + Key[ 6 ] = ( u8 )( CRC32_1 >> 16 ) ; + + if( SourceBytes > sizeof( WorkBuffer ) ) + { + free( UseWorkBuffer ) ; + } } -// 鍵文字列を使用して Xor 演算( Key は必ず DXA_KEYSTR_LENGTH の長さがなければならない ) +// 鍵文字列を使用して Xor 演算( Key は必ず DXA_KEY_BYTES の長さがなければならない ) void DXArchive::KeyConv( void *Data, s64 Size, s64 Position, unsigned char *Key ) { - Position %= DXA_KEYSTR_LENGTH ; + if( Key == NULL ) + { + return ; + } + + Position %= DXA_KEY_BYTES ; if( Size < 0x100000000 ) { @@ -504,7 +579,7 @@ void DXArchive::KeyConv( void *Data, s64 Size, s64 Position, unsigned char *Key ((u8 *)Data)[i] ^= Key[j] ; j ++ ; - if( j == DXA_KEYSTR_LENGTH ) j = 0 ; + if( j == DXA_KEY_BYTES ) j = 0 ; } } else @@ -517,62 +592,67 @@ void DXArchive::KeyConv( void *Data, s64 Size, s64 Position, unsigned char *Key ((u8 *)Data)[i] ^= Key[j] ; j ++ ; - if( j == DXA_KEYSTR_LENGTH ) j = 0 ; + if( j == DXA_KEY_BYTES ) j = 0 ; } } } -// データを鍵文字列を使用して Xor 演算した後ファイルに書き出す関数( Key は必ず DXA_KEYSTR_LENGTH の長さがなければならない ) +// データを鍵文字列を使用して Xor 演算した後ファイルに書き出す関数( Key は必ず DXA_KEY_BYTES の長さがなければならない ) void DXArchive::KeyConvFileWrite( void *Data, s64 Size, FILE *fp, unsigned char *Key, s64 Position ) { - s64 pos ; + s64 pos = 0 ; - // ファイルの位置を取得しておく - if( Position == -1 ) pos = _ftelli64( fp ) ; - else pos = Position ; + if( Key != NULL ) + { + // ファイルの位置を取得しておく + pos = Position == -1 ? _ftelli64( fp ) : Position ; - // データを鍵文字列を使って Xor 演算する - KeyConv( Data, Size, pos, Key ) ; + // データを鍵文字列を使って Xor 演算する + KeyConv( Data, Size, pos, Key ) ; + } // 書き出す fwrite64( Data, Size, fp ) ; - // 再び Xor 演算 - KeyConv( Data, Size, pos, Key ) ; + if( Key != NULL ) + { + // 再び Xor 演算 + KeyConv( Data, Size, pos, Key ) ; + } } -// ファイルから読み込んだデータを鍵文字列を使用して Xor 演算する関数( Key は必ず DXA_KEYSTR_LENGTH の長さがなければならない ) +// ファイルから読み込んだデータを鍵文字列を使用して Xor 演算する関数( Key は必ず DXA_KEY_BYTES の長さがなければならない ) void DXArchive::KeyConvFileRead( void *Data, s64 Size, FILE *fp, unsigned char *Key, s64 Position ) { - s64 pos ; + s64 pos = 0 ; - // ファイルの位置を取得しておく - if( Position == -1 ) pos = _ftelli64( fp ) ; - else pos = Position ; + if( Key != NULL ) + { + // ファイルの位置を取得しておく + pos = Position == -1 ? _ftelli64( fp ) : Position ; + } // 読み込む fread64( Data, Size, fp ) ; - // データを鍵文字列を使って Xor 演算 - KeyConv( Data, Size, pos, Key ) ; -} - -/* -// 2バイト文字か調べる( TRUE:2バイト文字 FALSE:1バイト文字 ) -int DXArchive::CheckMultiByteChar( const char *Buf ) -{ - return ( (unsigned char)*Buf >= 0x81 && (unsigned char)*Buf <= 0x9F ) || ( (unsigned char)*Buf >= 0xE0 && (unsigned char)*Buf <= 0xFC ) ; + if( Key != NULL ) + { + // データを鍵文字列を使って Xor 演算 + KeyConv( Data, Size, pos, Key ) ; + } } -*/ // 指定のディレクトリにあるファイルをアーカイブデータに吐き出す -int DXArchive::DirectoryEncode(TCHAR *DirectoryName, u8 *NameP, u8 *DirP, u8 *FileP, DARC_DIRECTORY *ParentDir, SIZESAVE *Size, int DataNumber, FILE *DestP, void *TempBuffer, bool Press, unsigned char *Key ) +int DXArchive::DirectoryEncode( int CharCodeFormat, TCHAR *DirectoryName, u8 *NameP, u8 *DirP, u8 *FileP, DARC_DIRECTORY *ParentDir, SIZESAVE *Size, int DataNumber, FILE *DestFp, void *TempBuffer, bool Press, bool MaxPress, bool AlwaysHuffman, u8 HuffmanEncodeKB, const char *KeyString, size_t KeyStringBytes, bool NoKey, char *KeyStringBuffer, DARC_ENCODEINFO *EncodeInfo ) { TCHAR DirPath[MAX_PATH] ; WIN32_FIND_DATA FindData ; HANDLE FindHandle ; DARC_DIRECTORY Dir ; + DARC_DIRECTORY *DirectoryP ; DARC_FILEHEAD File ; + u8 lKey[DXA_KEY_BYTES] ; + size_t KeyStringBufferBytes ; // ディレクトリの情報を得る FindHandle = FindFirstFile( DirectoryName, &FindData ) ; @@ -580,14 +660,15 @@ int DXArchive::DirectoryEncode(TCHAR *DirectoryName, u8 *NameP, u8 *DirP, u8 *Fi // ディレクトリ情報を格納するファイルヘッダをセットする { - File.NameAddress = Size->NameSize ; - File.Time.Create = ( ( ( LONGLONG )FindData.ftCreationTime.dwHighDateTime ) << 32 ) + FindData.ftCreationTime.dwLowDateTime ; - File.Time.LastAccess = ( ( ( LONGLONG )FindData.ftLastAccessTime.dwHighDateTime ) << 32 ) + FindData.ftLastAccessTime.dwLowDateTime ; - File.Time.LastWrite = ( ( ( LONGLONG )FindData.ftLastWriteTime.dwHighDateTime ) << 32 ) + FindData.ftLastWriteTime.dwLowDateTime ; - File.Attributes = FindData.dwFileAttributes ; - File.DataAddress = Size->DirectorySize ; - File.DataSize = 0 ; - File.PressDataSize = 0xffffffffffffffff ; + File.NameAddress = Size->NameSize ; + File.Time.Create = ( ( ( LONGLONG )FindData.ftCreationTime.dwHighDateTime ) << 32 ) + FindData.ftCreationTime.dwLowDateTime ; + File.Time.LastAccess = ( ( ( LONGLONG )FindData.ftLastAccessTime.dwHighDateTime ) << 32 ) + FindData.ftLastAccessTime.dwLowDateTime ; + File.Time.LastWrite = ( ( ( LONGLONG )FindData.ftLastWriteTime.dwHighDateTime ) << 32 ) + FindData.ftLastWriteTime.dwLowDateTime ; + File.Attributes = FindData.dwFileAttributes ; + File.DataAddress = Size->DirectorySize ; + File.DataSize = 0 ; + File.PressDataSize = 0xffffffffffffffff ; + File.HuffPressDataSize = 0xffffffffffffffff ; } // ディレクトリ名を書き出す @@ -625,6 +706,7 @@ int DXArchive::DirectoryEncode(TCHAR *DirectoryName, u8 *NameP, u8 *DirP, u8 *Fi // ディレクトリの情報を出力する memcpy( DirP + Size->DirectorySize, &Dir, sizeof( DARC_DIRECTORY ) ) ; + DirectoryP = ( DARC_DIRECTORY * )( DirP + Size->DirectorySize ) ; // アドレスを推移させる Size->DirectorySize += sizeof( DARC_DIRECTORY ) ; @@ -655,30 +737,53 @@ int DXArchive::DirectoryEncode(TCHAR *DirectoryName, u8 *NameP, u8 *DirP, u8 *Fi if( FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) { // ディレクトリだった場合の処理 - if( DirectoryEncode( FindData.cFileName, NameP, DirP, FileP, &Dir, Size, i, DestP, TempBuffer, Press, Key ) < 0 ) return -1 ; + if( DirectoryEncode( CharCodeFormat, FindData.cFileName, NameP, DirP, FileP, &Dir, Size, i, DestFp, TempBuffer, Press, MaxPress, AlwaysHuffman, HuffmanEncodeKB, KeyString, KeyStringBytes, NoKey, KeyStringBuffer, EncodeInfo ) < 0 ) return -1 ; } else { // ファイルだった場合の処理 // ファイルのデータをセット - File.NameAddress = Size->NameSize ; - File.Time.Create = ( ( ( LONGLONG )FindData.ftCreationTime.dwHighDateTime ) << 32 ) + FindData.ftCreationTime.dwLowDateTime ; - File.Time.LastAccess = ( ( ( LONGLONG )FindData.ftLastAccessTime.dwHighDateTime ) << 32 ) + FindData.ftLastAccessTime.dwLowDateTime ; - File.Time.LastWrite = ( ( ( LONGLONG )FindData.ftLastWriteTime.dwHighDateTime ) << 32 ) + FindData.ftLastWriteTime.dwLowDateTime ; - File.Attributes = FindData.dwFileAttributes ; - File.DataAddress = Size->DataSize ; - File.DataSize = ( ( ( LONGLONG )FindData.nFileSizeHigh ) << 32 ) + FindData.nFileSizeLow ; - File.PressDataSize = 0xffffffffffffffff ; + File.NameAddress = Size->NameSize ; + File.Time.Create = ( ( ( LONGLONG )FindData.ftCreationTime.dwHighDateTime ) << 32 ) + FindData.ftCreationTime.dwLowDateTime ; + File.Time.LastAccess = ( ( ( LONGLONG )FindData.ftLastAccessTime.dwHighDateTime ) << 32 ) + FindData.ftLastAccessTime.dwLowDateTime ; + File.Time.LastWrite = ( ( ( LONGLONG )FindData.ftLastWriteTime.dwHighDateTime ) << 32 ) + FindData.ftLastWriteTime.dwLowDateTime ; + File.Attributes = FindData.dwFileAttributes ; + File.DataAddress = Size->DataSize ; + File.DataSize = ( ( ( LONGLONG )FindData.nFileSizeHigh ) << 32 ) + FindData.nFileSizeLow ; + File.PressDataSize = 0xffffffffffffffff ; + File.HuffPressDataSize = 0xffffffffffffffff ; + + // 進行状況出力 + if( EncodeInfo->OutputStatus ) + { + // 処理ファイル名をセット + wcscpy( EncodeInfo->ProcessFileName, FindData.cFileName ) ; + + // ファイル数を増やす + EncodeInfo->CompFileNum ++ ; + + // 表示 + EncodeStatusOutput( EncodeInfo ) ; + } // ファイル名を書き出す Size->NameSize += AddFileNameData( FindData.cFileName, NameP + Size->NameSize ) ; + + // ファイル個別の鍵を作成 + if( NoKey == false ) + { + KeyStringBufferBytes = CreateKeyFileString( CharCodeFormat, KeyString, KeyStringBytes, DirectoryP, &File, FileP, DirP, NameP, ( BYTE * )KeyStringBuffer ) ; + KeyCreate( KeyStringBuffer, KeyStringBufferBytes, lKey ) ; + } // ファイルデータを書き出す if( File.DataSize != 0 ) { FILE *SrcP ; u64 FileSize, WriteSize, MoveSize ; + bool Huffman = false ; + bool AlwaysPress = false ; // ファイルを開く SrcP = _tfopen( FindData.cFileName, TEXT("rb") ) ; @@ -687,15 +792,66 @@ int DXArchive::DirectoryEncode(TCHAR *DirectoryName, u8 *NameP, u8 *DirP, u8 *Fi _fseeki64( SrcP, 0, SEEK_END ) ; FileSize = _ftelli64( SrcP ) ; _fseeki64( SrcP, 0, SEEK_SET ) ; + + // 圧縮の対象となるファイルフォーマットか調べる + { + u32 Len ; + Len = ( u32 )_tcslen( FindData.cFileName ) ; + if( Len > 4 ) + { + TCHAR *sp ; + + sp = &FindData.cFileName[Len-3] ; + if( StrICmp( sp, TEXT("wav") ) == 0 || + StrICmp( sp, TEXT("jpg") ) == 0 || + StrICmp( sp, TEXT("png") ) == 0 || + StrICmp( sp, TEXT("mpg") ) == 0 || + StrICmp( sp, TEXT("mp3") ) == 0 || + StrICmp( sp, TEXT("mp4") ) == 0 || + StrICmp( sp, TEXT("m4a") ) == 0 || + StrICmp( sp, TEXT("ogg") ) == 0 || + StrICmp( sp, TEXT("ogv") ) == 0 || + StrICmp( sp, TEXT("ops") ) == 0 || + StrICmp( sp, TEXT("wmv") ) == 0 || + StrICmp( sp, TEXT("tif") ) == 0 || + StrICmp( sp, TEXT("tga") ) == 0 || + StrICmp( sp, TEXT("bmp") ) == 0 || + StrICmp( sp - 1, TEXT("jpeg") ) == 0 ) + { + Huffman = true ; + } + + // wav や bmp の場合は必ず圧縮する + if( StrICmp( sp, TEXT("wav") ) == 0 || + StrICmp( sp, TEXT("tga") ) == 0 || + StrICmp( sp, TEXT("bmp") ) == 0 ) + { + AlwaysPress = true ; + } + } + } + + // AlwaysHuffman が true の場合は必ずハフマン圧縮する + if( AlwaysHuffman ) + { + Huffman = true ; + } + + // ハフマン圧縮するサイズが 0 の場合はハフマン圧縮を行わない + if( HuffmanEncodeKB == 0 ) + { + Huffman = false ; + } - // ファイルサイズが 10MB 以下の場合で、圧縮の指定がある場合は圧縮を試みる - if( Press == true && File.DataSize < 10 * 1024 * 1024 ) + // 圧縮の指定がある場合で、 + // 必ず圧縮するファイルフォーマットか、ファイルサイズが 10MB 以下の場合は圧縮を試みる + if( Press == true && ( AlwaysPress || File.DataSize < 10 * 1024 * 1024 ) ) { void *SrcBuf, *DestBuf ; u32 DestSize, Len ; // 一部のファイル形式の場合は予め弾く - if( ( Len = ( int )_tcslen( FindData.cFileName ) ) > 4 ) + if( AlwaysPress == false && ( Len = ( int )_tcslen( FindData.cFileName ) ) > 4 ) { TCHAR *sp ; @@ -705,7 +861,10 @@ int DXArchive::DirectoryEncode(TCHAR *DirectoryName, u8 *NameP, u8 *DirP, u8 *Fi StrICmp( sp, TEXT("png") ) == 0 || StrICmp( sp, TEXT("mpg") ) == 0 || StrICmp( sp, TEXT("mp3") ) == 0 || + StrICmp( sp, TEXT("mp4") ) == 0 || StrICmp( sp, TEXT("ogg") ) == 0 || + StrICmp( sp, TEXT("ogv") ) == 0 || + StrICmp( sp, TEXT("ops") ) == 0 || StrICmp( sp, TEXT("wmv") ) == 0 || StrICmp( sp - 1, TEXT("jpeg") ) == 0 ) goto NOPRESS ; } @@ -717,46 +876,146 @@ int DXArchive::DirectoryEncode(TCHAR *DirectoryName, u8 *NameP, u8 *DirP, u8 *Fi // ファイルを丸ごと読み込む fread64( SrcBuf, FileSize, SrcP ) ; + // 圧縮する場合は強制的に進行状況出力を更新 + if( EncodeInfo->OutputStatus ) + { + EncodeStatusOutput( EncodeInfo, true ) ; + } + // 圧縮 - DestSize = Encode( SrcBuf, ( u32 )FileSize, DestBuf ) ; + DestSize = Encode( SrcBuf, ( u32 )FileSize, DestBuf, EncodeInfo->OutputStatus, MaxPress ) ; // 殆ど圧縮出来なかった場合は圧縮無しでアーカイブする - if( (f64)DestSize / (f64)FileSize > 0.90 ) + if( AlwaysPress == false && ( (f64)DestSize / (f64)FileSize > 0.90 ) ) { _fseeki64( SrcP, 0L, SEEK_SET ) ; free( SrcBuf ) ; goto NOPRESS ; } + + // 圧縮データのサイズを保存する + File.PressDataSize = DestSize ; - // 圧縮データを反転して書き出す - WriteSize = ( DestSize + 3 ) / 4 * 4 ; - KeyConvFileWrite( DestBuf, WriteSize, DestP, Key, File.DataSize ) ; + // ハフマン圧縮も行うかどうかで処理を分岐 + if( Huffman ) + { + u8 *HuffData ; + + // ハフマン圧縮するサイズによって処理を分岐 + if( HuffmanEncodeKB == 0xff || DestSize <= ( u64 )( HuffmanEncodeKB * 1024 * 2 ) ) + { + // ハフマン圧縮用のメモリ領域を確保 + HuffData = ( u8 * )calloc( 1, DestSize * 2 + 256 * 2 + 32 ) ; + + // ファイル全体をハフマン圧縮 + File.HuffPressDataSize = Huffman_Encode( DestBuf, DestSize, HuffData ) ; + + // 圧縮データに鍵を適用して書き出す + WriteSize = ( File.HuffPressDataSize + 3 ) / 4 * 4 ; // サイズは4の倍数に合わせる + KeyConvFileWrite( HuffData, WriteSize, DestFp, NoKey ? NULL : lKey, File.DataSize ) ; + } + else + { + // ハフマン圧縮用のメモリ領域を確保 + HuffData = ( u8 * )calloc( 1, HuffmanEncodeKB * 1024 * 2 * 4 + 256 * 2 + 32 ) ; + + // ファイルの前後をハフマン圧縮 + memcpy( HuffData, DestBuf, HuffmanEncodeKB * 1024 ) ; + memcpy( HuffData + HuffmanEncodeKB * 1024, ( u8 * )DestBuf + DestSize - HuffmanEncodeKB * 1024, HuffmanEncodeKB * 1024 ) ; + File.HuffPressDataSize = Huffman_Encode( HuffData, HuffmanEncodeKB * 1024 * 2, HuffData + HuffmanEncodeKB * 1024 * 2 ) ; + + // ハフマン圧縮した部分を書き出す + KeyConvFileWrite( HuffData + HuffmanEncodeKB * 1024 * 2, File.HuffPressDataSize, DestFp, NoKey ? NULL : lKey, File.DataSize ) ; + + // ハフマン圧縮していない箇所を書き出す + WriteSize = File.HuffPressDataSize + DestSize - HuffmanEncodeKB * 1024 * 2 ; + WriteSize = ( WriteSize + 3 ) / 4 * 4 ; // サイズは4の倍数に合わせる + KeyConvFileWrite( ( u8 * )DestBuf + HuffmanEncodeKB * 1024, WriteSize - File.HuffPressDataSize, DestFp, NoKey ? NULL : lKey, File.DataSize + File.HuffPressDataSize ) ; + } + + // メモリの解放 + free( HuffData ) ; + } + else + { + // 圧縮データを反転して書き出す + WriteSize = ( DestSize + 3 ) / 4 * 4 ; + KeyConvFileWrite( DestBuf, WriteSize, DestFp, NoKey ? NULL : lKey, File.DataSize ) ; + } // メモリの解放 free( SrcBuf ) ; - - // 圧縮データのサイズを保存する - File.PressDataSize = DestSize ; } else { NOPRESS: - // 転送開始 - WriteSize = 0 ; - while( WriteSize < FileSize ) + // ハフマン圧縮も行うかどうかで処理を分岐 + if( Press && Huffman ) { - // 転送サイズ決定 - MoveSize = DXA_BUFFERSIZE < FileSize - WriteSize ? DXA_BUFFERSIZE : FileSize - WriteSize ; - MoveSize = ( MoveSize + 3 ) / 4 * 4 ; // サイズは4の倍数に合わせる + u8 *SrcBuf, *HuffData ; + + // データが丸ごと入るメモリ領域の確保 + SrcBuf = ( u8 * )calloc( 1, ( size_t )( FileSize + 32 ) ) ; + + // ファイルを丸ごと読み込む + fread64( SrcBuf, FileSize, SrcP ) ; + + // ハフマン圧縮するサイズによって処理を分岐 + if( HuffmanEncodeKB == 0xff || FileSize <= HuffmanEncodeKB * 1024 * 2 ) + { + // ハフマン圧縮用のメモリ領域を確保 + HuffData = ( u8 * )calloc( 1, ( size_t )( FileSize * 2 + 256 * 2 + 32 ) ) ; + + // ファイル全体をハフマン圧縮 + File.HuffPressDataSize = Huffman_Encode( SrcBuf, FileSize, HuffData ) ; + + // 圧縮データに鍵を適用して書き出す + WriteSize = ( File.HuffPressDataSize + 3 ) / 4 * 4 ; // サイズは4の倍数に合わせる + KeyConvFileWrite( HuffData, WriteSize, DestFp, NoKey ? NULL : lKey, File.DataSize ) ; + } + else + { + // ハフマン圧縮用のメモリ領域を確保 + HuffData = ( u8 * )calloc( 1, HuffmanEncodeKB * 1024 * 2 * 4 + 256 * 2 + 32 ) ; + + // ファイルの前後をハフマン圧縮 + memcpy( HuffData, SrcBuf, HuffmanEncodeKB * 1024 ) ; + memcpy( HuffData + HuffmanEncodeKB * 1024, SrcBuf + FileSize - HuffmanEncodeKB * 1024, HuffmanEncodeKB * 1024 ) ; + File.HuffPressDataSize = Huffman_Encode( HuffData, HuffmanEncodeKB * 1024 * 2, HuffData + HuffmanEncodeKB * 1024 * 2 ) ; + + // ハフマン圧縮した部分を書き出す + KeyConvFileWrite( HuffData + HuffmanEncodeKB * 1024 * 2, File.HuffPressDataSize, DestFp, NoKey ? NULL : lKey, File.DataSize ) ; + + // ハフマン圧縮していない箇所を書き出す + WriteSize = File.HuffPressDataSize + FileSize - HuffmanEncodeKB * 1024 * 2 ; + WriteSize = ( WriteSize + 3 ) / 4 * 4 ; // サイズは4の倍数に合わせる + KeyConvFileWrite( SrcBuf + HuffmanEncodeKB * 1024, WriteSize - File.HuffPressDataSize, DestFp, NoKey ? NULL : lKey, File.DataSize + File.HuffPressDataSize ) ; + } + + // メモリの解放 + free( SrcBuf ) ; + free( HuffData ) ; + } + else + { + // 転送開始 + WriteSize = 0 ; + while( WriteSize < FileSize ) + { + // 転送サイズ決定 + MoveSize = DXA_BUFFERSIZE < FileSize - WriteSize ? DXA_BUFFERSIZE : FileSize - WriteSize ; + MoveSize = ( MoveSize + 3 ) / 4 * 4 ; // サイズは4の倍数に合わせる - // ファイルの反転読み込み - KeyConvFileRead( TempBuffer, MoveSize, SrcP, Key, File.DataSize + WriteSize ) ; + // ファイルの鍵適用読み込み + memset( TempBuffer, 0, ( size_t )MoveSize ) ; + KeyConvFileRead( TempBuffer, MoveSize, SrcP, NoKey ? NULL : lKey, File.DataSize + WriteSize ) ; - // 書き出し - fwrite64( TempBuffer, MoveSize, DestP ) ; + // 書き出し + fwrite64( TempBuffer, MoveSize, DestFp ) ; - // 書き出しサイズの加算 - WriteSize += MoveSize ; + // 書き出しサイズの加算 + WriteSize += MoveSize ; + } } } @@ -786,10 +1045,8 @@ int DXArchive::DirectoryEncode(TCHAR *DirectoryName, u8 *NameP, u8 *DirP, u8 *Fi return 0 ; } -#include - // 指定のディレクトリデータにあるファイルを展開する -int DXArchive::DirectoryDecode( u8 *NameP, u8 *DirP, u8 *FileP, DARC_HEAD *Head, DARC_DIRECTORY *Dir, FILE *ArcP, unsigned char *Key ) +int DXArchive::DirectoryDecode( u8 *NameP, u8 *DirP, u8 *FileP, DARC_HEAD *Head, DARC_DIRECTORY *Dir, FILE *ArcP, unsigned char *Key, const char *KeyString, size_t KeyStringBytes, bool NoKey, char *KeyStringBuffer ) { TCHAR DirPath[MAX_PATH] ; @@ -819,6 +1076,8 @@ int DXArchive::DirectoryDecode( u8 *NameP, u8 *DirP, u8 *FileP, DARC_HEAD *Head, { u32 i, FileHeadSize ; DARC_FILEHEAD *File ; + size_t KeyStringBufferBytes ; + unsigned char lKey[ DXA_KEY_BYTES ] ; // 格納されているファイルの数だけ繰り返す FileHeadSize = sizeof( DARC_FILEHEAD ) ; @@ -829,7 +1088,7 @@ int DXArchive::DirectoryDecode( u8 *NameP, u8 *DirP, u8 *FileP, DARC_HEAD *Head, if( File->Attributes & FILE_ATTRIBUTE_DIRECTORY ) { // ディレクトリの場合は再帰をかける - DirectoryDecode( NameP, DirP, FileP, Head, ( DARC_DIRECTORY * )( DirP + File->DataAddress ), ArcP, Key ) ; + DirectoryDecode( NameP, DirP, FileP, Head, ( DARC_DIRECTORY * )( DirP + File->DataAddress ), ArcP, Key, KeyString, KeyStringBytes, NoKey, KeyStringBuffer ) ; } else { @@ -846,12 +1105,20 @@ int DXArchive::DirectoryDecode( u8 *NameP, u8 *DirP, u8 *FileP, DARC_HEAD *Head, TCHAR *pName = GetOriginalFileName(NameP + File->NameAddress); DestP = _tfopen(pName, TEXT("wb")); + // ファイル個別の鍵を作成 + if( NoKey == false ) + { + KeyStringBufferBytes = CreateKeyFileString( ( int )Head->CharCodeFormat, KeyString, KeyStringBytes, Dir, File, FileP, DirP, NameP, ( BYTE * )KeyStringBuffer ) ; + KeyCreate( KeyStringBuffer, KeyStringBufferBytes, lKey ) ; + } delete[] pName; // データがある場合のみ転送 if( File->DataSize != 0 ) { + void *temp ; + // 初期位置をセットする if( _ftelli64( ArcP ) != ( s32 )( Head->DataStartAddress + File->DataAddress ) ) _fseeki64( ArcP, Head->DataStartAddress + File->DataAddress, SEEK_SET ) ; @@ -859,40 +1126,113 @@ int DXArchive::DirectoryDecode( u8 *NameP, u8 *DirP, u8 *FileP, DARC_HEAD *Head, // データが圧縮されているかどうかで処理を分岐 if( File->PressDataSize != 0xffffffffffffffff ) { - void *temp ; - // 圧縮されている場合 - // 圧縮データが収まるメモリ領域の確保 - temp = malloc( ( size_t )( File->PressDataSize + File->DataSize ) ) ; + // ハフマン圧縮もされているかどうかで処理を分岐 + if( File->HuffPressDataSize != 0xffffffffffffffff ) + { + // 圧縮データが収まるメモリ領域の確保 + temp = malloc( ( size_t )( File->PressDataSize + File->HuffPressDataSize + File->DataSize ) ) ; + + // 圧縮データの読み込み + KeyConvFileRead( temp, File->HuffPressDataSize, ArcP, NoKey ? NULL : lKey, File->DataSize ) ; - // 圧縮データの読み込み - KeyConvFileRead( temp, File->PressDataSize, ArcP, Key, File->DataSize ) ; + // ハフマン圧縮を解凍 + Huffman_Decode( temp, (u8 *)temp + File->HuffPressDataSize ) ; + + // ファイルの前後をハフマン圧縮している場合は処理を分岐 + if( Head->HuffmanEncodeKB != 0xff && File->PressDataSize > Head->HuffmanEncodeKB * 1024 * 2 ) + { + // 解凍したデータの内、後ろ半分を移動する + memmove( + ( u8 * )temp + File->HuffPressDataSize + File->PressDataSize - Head->HuffmanEncodeKB * 1024, + ( u8 * )temp + File->HuffPressDataSize + Head->HuffmanEncodeKB * 1024, + Head->HuffmanEncodeKB * 1024 ) ; + + // 残りのLZ圧縮データを読み込む + KeyConvFileRead( + ( u8 * )temp + File->HuffPressDataSize + Head->HuffmanEncodeKB * 1024, + File->PressDataSize - Head->HuffmanEncodeKB * 1024 * 2, + ArcP, NoKey ? NULL : lKey, File->DataSize + File->HuffPressDataSize ) ; + } - // 解凍 - Decode( temp, (u8 *)temp + File->PressDataSize ) ; + // 解凍 + Decode( (u8 *)temp + File->HuffPressDataSize, (u8 *)temp + File->HuffPressDataSize + File->PressDataSize ) ; - // 書き出し - fwrite64( (u8 *)temp + File->PressDataSize, File->DataSize, DestP ) ; + // 書き出し + fwrite64( (u8 *)temp + File->HuffPressDataSize + File->PressDataSize, File->DataSize, DestP ) ; - // メモリの解放 - free( temp ) ; + // メモリの解放 + free( temp ) ; + } + else + { + // 圧縮データが収まるメモリ領域の確保 + temp = malloc( ( size_t )( File->PressDataSize + File->DataSize ) ) ; + + // 圧縮データの読み込み + KeyConvFileRead( temp, File->PressDataSize, ArcP, NoKey ? NULL : lKey, File->DataSize ) ; + + // 解凍 + Decode( temp, (u8 *)temp + File->PressDataSize ) ; + + // 書き出し + fwrite64( (u8 *)temp + File->PressDataSize, File->DataSize, DestP ) ; + + // メモリの解放 + free( temp ) ; + } } else { // 圧縮されていない場合 - // 転送処理開始 + // ハフマン圧縮はされているかどうかで処理を分岐 + if( File->HuffPressDataSize != 0xffffffffffffffff ) + { + // 圧縮データが収まるメモリ領域の確保 + temp = malloc( ( size_t )( File->HuffPressDataSize + File->DataSize ) ) ; + + // 圧縮データの読み込み + KeyConvFileRead( temp, File->HuffPressDataSize, ArcP, NoKey ? NULL : lKey, File->DataSize ) ; + + // ハフマン圧縮を解凍 + Huffman_Decode( temp, (u8 *)temp + File->HuffPressDataSize ) ; + + // ファイルの前後のみハフマン圧縮している場合は処理を分岐 + if( Head->HuffmanEncodeKB != 0xff && File->DataSize > Head->HuffmanEncodeKB * 1024 * 2 ) + { + // 解凍したデータの内、後ろ半分を移動する + memmove( + ( u8 * )temp + File->HuffPressDataSize + File->DataSize - Head->HuffmanEncodeKB * 1024, + ( u8 * )temp + File->HuffPressDataSize + Head->HuffmanEncodeKB * 1024, + Head->HuffmanEncodeKB * 1024 ) ; + + // 残りのデータを読み込む + KeyConvFileRead( + ( u8 * )temp + File->HuffPressDataSize + Head->HuffmanEncodeKB * 1024, + File->DataSize - Head->HuffmanEncodeKB * 1024 * 2, + ArcP, NoKey ? NULL : lKey, File->DataSize + File->HuffPressDataSize ) ; + } + + // 書き出し + fwrite64( (u8 *)temp + File->HuffPressDataSize, File->DataSize, DestP ) ; + + // メモリの解放 + free( temp ) ; + } + else { u64 MoveSize, WriteSize ; + // 転送処理開始 WriteSize = 0 ; while( WriteSize < File->DataSize ) { MoveSize = File->DataSize - WriteSize > DXA_BUFFERSIZE ? DXA_BUFFERSIZE : File->DataSize - WriteSize ; // ファイルの反転読み込み - KeyConvFileRead( Buffer, MoveSize, ArcP, Key, File->DataSize + WriteSize ) ; + KeyConvFileRead( Buffer, MoveSize, ArcP, NoKey ? NULL : lKey, File->DataSize + WriteSize ) ; // 書き出し fwrite64( Buffer, MoveSize, DestP ) ; @@ -913,7 +1253,7 @@ int DXArchive::DirectoryDecode( u8 *NameP, u8 *DirP, u8 *FileP, DARC_HEAD *Head, { HANDLE HFile ; FILETIME CreateTime, LastAccessTime, LastWriteTime ; - pName = GetOriginalFileName(NameP + File->NameAddress); + TCHAR *pName = GetOriginalFileName(NameP + File->NameAddress); HFile = CreateFile(pName, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ) ; @@ -1006,12 +1346,86 @@ int DXArchive::GetDirectoryFilePath( const TCHAR *DirectoryPath, TCHAR *FileName return FileNum ; } +// エンコードの進行状況を表示を消去する +void DXArchive::EncodeStatusErase( void ) +{ + static char StringBuffer[ 8192 ] ; + + if( LogStringLength > 0 ) + { + size_t i ; + int p = 0 ; + for( i = 0 ; i < LogStringLength ; i ++ ) + { + StringBuffer[ p ] = '\b' ; + p ++ ; + } + for( i = 0 ; i < LogStringLength ; i ++ ) + { + StringBuffer[ p ] = ' ' ; + p ++ ; + } + for( i = 0 ; i < LogStringLength ; i ++ ) + { + StringBuffer[ p ] = '\b' ; + p ++ ; + } + StringBuffer[ p ] = '\0' ; + printf( StringBuffer ) ; + } +} + +// エンコードの進行状況を表示する +void DXArchive::EncodeStatusOutput( DARC_ENCODEINFO *EncodeInfo, bool Always ) +{ + static TCHAR StringBuffer[ 8192 ] ; + static TCHAR FileNameBuffer[ 2048 ] ; + size_t FileNameLength ; + unsigned int NowTime = GetTickCount() ; + + // 前回から16ms以上時間が経過していたら表示する + if( Always == false && NowTime - EncodeInfo->PrevDispTime < 16 ) + { + return ; + } + + // 前回の表示内容を消去 + EncodeStatusErase() ; + + EncodeInfo->PrevDispTime = NowTime ; + wcscpy( FileNameBuffer, EncodeInfo->ProcessFileName ) ; + FileNameLength = _tcslen( EncodeInfo->ProcessFileName ) ; + if( FileNameLength > 50 ) + { + wcsncpy( FileNameBuffer, EncodeInfo->ProcessFileName, 50 ) ; + wcscpy( &FileNameBuffer[ 50 ], TEXT("...") ) ; + } + wsprintf( StringBuffer, TEXT(" [%d/%d] %d%%%% %s"), EncodeInfo->CompFileNum, EncodeInfo->TotalFileNum, EncodeInfo->CompFileNum * 100 / EncodeInfo->TotalFileNum, FileNameBuffer); + LogStringLength = _tcslen( StringBuffer ) ; + wprintf( StringBuffer ) ; +} + +// ハフマン圧縮をする前後のサイズを取得する +void DXArchive::AnalyseHuffmanEncode( u64 DataSize, u8 HuffmanEncodeKB, u64 *HeadDataSize, u64 *FootDataSize ) +{ + if( HuffmanEncodeKB == 0xff || DataSize < HuffmanEncodeKB * 1024 * 2 ) + { + *HeadDataSize = DataSize ; + *FootDataSize = 0 ; + } + else + { + *HeadDataSize = HuffmanEncodeKB * 1024 ; + *FootDataSize = HuffmanEncodeKB * 1024 ; + } +} + // エンコード( 戻り値:圧縮後のサイズ -1 はエラー Dest に NULL を入れることも可能 ) -int DXArchive::Encode( void *Src, u32 SrcSize, void *Dest ) +int DXArchive::Encode( void *Src, u32 SrcSize, void *Dest, bool OutStatus, bool MaxPress ) { s32 dstsize ; s32 bonus, conbo, conbosize, address, addresssize ; - s32 maxbonus, maxconbo, maxconbosize = 0, maxaddress, maxaddresssize = 0 ; + s32 maxbonus, maxconbo, maxconbosize, maxaddress, maxaddresssize ; u8 keycode, *srcp, *destp, *dp, *sp, *sp2, *sp1 ; u32 srcaddress, nextprintaddress, code ; s32 j ; @@ -1020,7 +1434,11 @@ int DXArchive::Encode( void *Src, u32 SrcSize, void *Dest ) u32 sublistnum, sublistmaxnum ; LZ_LIST *listbuf, *listtemp, *list, *newlist ; u8 *listfirsttable, *usesublistflagtable, *sublistbuf ; - + u32 searchlistnum ; + + // 最大一致長を捜すためのリストを辿る最大数のセット + searchlistnum = MaxPress ? 0xffffffff : MAX_SEARCHLISTNUM ; + // サブリストのサイズを決める { if( SrcSize < 100 * 1024 ) sublistmaxnum = 1 ; @@ -1119,6 +1537,11 @@ int DXArchive::Encode( void *Src, u32 SrcSize, void *Dest ) listaddp = 0 ; sublistnum = 0 ; nextprintaddress = 1024 * 100 ; + if( OutStatus ) + { + printf( " 圧縮 " ) ; + LogStringLength += 10 ; + } while( srcaddress < SrcSize ) { // 残りサイズが最低圧縮サイズ以下の場合は圧縮処理をしない @@ -1147,7 +1570,7 @@ int DXArchive::Encode( void *Src, u32 SrcSize, void *Dest ) maxconbo = -1 ; maxaddress = -1 ; maxbonus = -1 ; - for( m = 0, listtemp = list->next ; m < MAX_SEARCHLISTNUM && listtemp != NULL ; listtemp = listtemp->next, m ++ ) + for( m = 0, listtemp = list->next ; m < searchlistnum && listtemp != NULL ; listtemp = listtemp->next, m ++ ) { address = srcaddress - listtemp->address ; if( address >= MAX_POSITION ) @@ -1339,9 +1762,15 @@ int DXArchive::Encode( void *Src, u32 SrcSize, void *Dest ) if( nextprintaddress < srcaddress ) { nextprintaddress = srcaddress + 100 * 1024 ; + if( OutStatus ) printf( "\b\b\b\b%3d%%", (s32)( (f32)srcaddress * 100 / SrcSize ) ) ; } } + if( OutStatus ) + { + printf( "\b\b\b\b100%%" ) ; + } + // 圧縮後のデータサイズを保存する *((u32 *)&destp[4]) = dstsize + 9 ; @@ -1355,7 +1784,7 @@ int DXArchive::Encode( void *Src, u32 SrcSize, void *Dest ) // デコード( 戻り値:解凍後のサイズ -1 はエラー Dest に NULL を入れることも可能 ) int DXArchive::Decode( void *Src, void *Dest ) { - u32 srcsize, destsize, code, indexsize, keycode, conbo, index = 0; + u32 srcsize, destsize, code, indexsize, keycode, conbo, index ; u8 *srcp, *destp, *dp, *sp ; destp = (u8 *)Dest ; @@ -1475,9 +1904,51 @@ int DXArchive::Decode( void *Src, void *Dest ) return (int)destsize ; } +// バイナリデータを元に CRC32 のハッシュ値を計算する +u32 DXArchive::HashCRC32( const void *SrcData, size_t SrcDataSize ) +{ + static DWORD CRC32Table[ 256 ] ; + static int CRC32TableInit = 0 ; + DWORD CRC = 0xffffffff ; + BYTE *SrcByte = ( BYTE * )SrcData ; + DWORD i ; + + // テーブルが初期化されていなかったら初期化する + if( CRC32TableInit == 0 ) + { + DWORD Magic = 0xedb88320 ; // 0x4c11db7 をビットレベルで順番を逆にしたものが 0xedb88320 + DWORD j ; + + for( i = 0; i < 256; i++ ) + { + DWORD Data = i ; + for( j = 0; j < 8; j++ ) + { + int b = ( Data & 1 ) ; + Data >>= 1 ; + if( b != 0 ) + { + Data ^= Magic ; + } + } + CRC32Table[ i ] = Data ; + } + + // テーブルを初期化したフラグを立てる + CRC32TableInit = 1 ; + } + + for( i = 0 ; i < SrcDataSize ; i ++ ) + { + CRC = CRC32Table[ ( BYTE )( CRC ^ SrcByte[ i ] ) ] ^ ( CRC >> 8 ) ; + } + + return CRC ^ 0xffffffff ; +} + // アーカイブファイルを作成する(ディレクトリ一個だけ) -int DXArchive::EncodeArchiveOneDirectory(TCHAR *OutputFileName, TCHAR *DirectoryPath, bool Press, const char *KeyString ) +int DXArchive::EncodeArchiveOneDirectory( TCHAR *OutputFileName, TCHAR *DirectoryPath, bool Press, bool AlwaysHuffman, u8 HuffmanEncodeKB, const char *KeyString_, bool NoKey, bool OutputStatus, bool MaxPress ) { int i, FileNum, Result ; TCHAR **FilePathList, *NameBuffer ; @@ -1496,9 +1967,9 @@ int DXArchive::EncodeArchiveOneDirectory(TCHAR *OutputFileName, TCHAR *Directory FilePathList = (TCHAR **)( NameBuffer + FileNum * 256 ) ; for( i = 0 ; i < FileNum ; i ++ ) FilePathList[i] = NameBuffer + i * 256 ; - + // エンコード - Result = EncodeArchive( OutputFileName, FilePathList, FileNum, Press, KeyString ) ; + Result = EncodeArchive( OutputFileName, FilePathList, FileNum, Press, AlwaysHuffman, HuffmanEncodeKB, KeyString_, NoKey, OutputStatus, MaxPress ) ; // 確保したメモリの解放 free( NameBuffer ) ; @@ -1508,29 +1979,87 @@ int DXArchive::EncodeArchiveOneDirectory(TCHAR *OutputFileName, TCHAR *Directory } // アーカイブファイルを作成する -int DXArchive::EncodeArchive(TCHAR *OutputFileName, TCHAR **FileOrDirectoryPath, int FileNum, bool Press, const char *KeyString ) +int DXArchive::EncodeArchive(TCHAR *OutputFileName, TCHAR **FileOrDirectoryPath, int FileNum, bool Press, bool AlwaysHuffman, u8 HuffmanEncodeKB, const char *KeyString_, bool NoKey, bool OutputStatus, bool MaxPress ) { DARC_HEAD Head ; - DARC_DIRECTORY Directory ; + DARC_DIRECTORY Directory, *DirectoryP ; + u64 HeaderHuffDataSize ; SIZESAVE SizeSave ; FILE *DestFp ; u8 *NameP, *FileP, *DirP ; int i ; u32 Type ; void *TempBuffer ; - u8 Key[DXA_KEYSTR_LENGTH] ; + u8 Key[ DXA_KEY_BYTES ] ; + char KeyString[ DXA_KEY_STRING_LENGTH + 1 ] ; + size_t KeyStringBytes ; + char KeyStringBuffer[ DXA_KEY_STRING_MAXLENGTH ] ; + DARC_ENCODEINFO EncodeInfo ; + + // 状況出力を行う場合はファイルの総数を数える + EncodeInfo.CompFileNum = 0 ; + EncodeInfo.TotalFileNum = 0 ; + EncodeInfo.OutputStatus = OutputStatus ; + if( EncodeInfo.OutputStatus ) + { + for( i = 0 ; i < FileNum ; i++ ) + { + // 指定されたファイルがあるかどうか検査 + Type = GetFileAttributes( FileOrDirectoryPath[i] ) ; + if( ( signed int )Type == -1 ) continue ; + + // ファイルのタイプによって処理を分岐 + if( ( Type & FILE_ATTRIBUTE_DIRECTORY ) != 0 ) + { + FILE_INFOLIST FileList ; + + // フォルダ以下のファイルを取得する + CreateFileList( FileOrDirectoryPath[i], &FileList, TRUE, TRUE, NULL, NULL, NULL ) ; + + // フォルダ以下のファイル数を加算する + EncodeInfo.TotalFileNum += FileList.Num ; + + // ファイルリスト情報の後始末 + ReleaseFileList( &FileList ) ; + } + else + { + // ファイルだった場合はファイルの数を増やす + EncodeInfo.TotalFileNum ++ ; + } + } + } + + // 鍵文字列の保存と鍵の作成 + if( NoKey == false ) + { + // 指定が無い場合はデフォルトの鍵文字列を使用する + if( KeyString_ == NULL ) + { + KeyString_ = DefaultKeyString ; + } + + KeyStringBytes = CL_strlen( CHARCODEFORMAT_ASCII, KeyString_ ) ; + if( KeyStringBytes > DXA_KEY_STRING_LENGTH ) + { + KeyStringBytes = DXA_KEY_STRING_LENGTH ; + } + memcpy( KeyString, KeyString_, KeyStringBytes ) ; + KeyString[ KeyStringBytes ] = '\0' ; - // 鍵文字列の作成 - KeyCreate( KeyString, Key ) ; + // 鍵の作成 + KeyCreate( KeyString, KeyStringBytes, Key ) ; + } // ファイル読み込みに使用するバッファの確保 TempBuffer = malloc( DXA_BUFFERSIZE ) ; - + // 出力ファイルを開く DestFp = _tfopen( OutputFileName, TEXT("wb") ) ; // アーカイブのヘッダを出力する { + memset( &Head, 0, sizeof( Head ) ) ; Head.Head = DXA_HEAD ; Head.Version = DXA_VER ; Head.HeadSize = 0xffffffff ; @@ -1538,36 +2067,28 @@ int DXArchive::EncodeArchive(TCHAR *OutputFileName, TCHAR **FileOrDirectoryPath, Head.FileNameTableStartAddress = 0xffffffffffffffff ; Head.DirectoryTableStartAddress = 0xffffffffffffffff ; Head.FileTableStartAddress = 0xffffffffffffffff ; - Head.CodePage = GetACP() ; + Head.CharCodeFormat = GetACP() ; + Head.Flags = 0 ; + Head.HuffmanEncodeKB = HuffmanEncodeKB ; + if( NoKey ) Head.Flags |= DXA_FLAG_NO_KEY ; + if( Press == false ) Head.Flags |= DXA_FLAG_NO_HEAD_PRESS ; SetFileApisToANSI() ; - KeyConvFileWrite( &Head, sizeof( DARC_HEAD ), DestFp, Key, 0 ) ; + KeyConvFileWrite( &Head, sizeof( DARC_HEAD ), DestFp, NoKey ? NULL : Key, 0 ) ; } // 各バッファを確保する - NameP = ( u8 * )calloc(DXA_BUFFERSIZE, sizeof(u8)) ; - if(NameP == NULL) - { - free(TempBuffer); - return -1; - } + NameP = ( u8 * )malloc( DXA_BUFFERSIZE ) ; + if( NameP == NULL ) return -1 ; + memset( NameP, 0, DXA_BUFFERSIZE ) ; - FileP = (u8 *)calloc(DXA_BUFFERSIZE, sizeof(u8)); - if(FileP == NULL) - { - free(TempBuffer); - free(NameP); - return -1; - } + FileP = ( u8 * )malloc( DXA_BUFFERSIZE ) ; + if( FileP == NULL ) return -1 ; + memset( FileP, 0, DXA_BUFFERSIZE ) ; - DirP = ( u8 * )calloc(DXA_BUFFERSIZE, sizeof(u8)); - if(DirP == NULL) - { - free(TempBuffer); - free(NameP); - free(FileP); - return -1; - } + DirP = ( u8 * )malloc( DXA_BUFFERSIZE ) ; + if( DirP == NULL ) return -1 ; + memset( DirP, 0, DXA_BUFFERSIZE ) ; // サイズ保存構造体にデータをセット SizeSave.DataSize = 0 ; @@ -1600,6 +2121,7 @@ int DXArchive::EncodeArchive(TCHAR *OutputFileName, TCHAR **FileOrDirectoryPath, Directory.FileHeadNum = FileNum ; Directory.FileHeadAddress = SizeSave.FileSize ; memcpy( DirP + SizeSave.DirectorySize, &Directory, sizeof( DARC_DIRECTORY ) ) ; + DirectoryP = ( DARC_DIRECTORY * )( DirP + SizeSave.DirectorySize ) ; // サイズを加算する SizeSave.DirectorySize += sizeof( DARC_DIRECTORY ) ; @@ -1616,38 +2138,63 @@ int DXArchive::EncodeArchive(TCHAR *OutputFileName, TCHAR **FileOrDirectoryPath, if( ( Type & FILE_ATTRIBUTE_DIRECTORY ) != 0 ) { // ディレクトリの場合はディレクトリのアーカイブに回す - DirectoryEncode( FileOrDirectoryPath[i], NameP, DirP, FileP, &Directory, &SizeSave, i, DestFp, TempBuffer, Press, Key ) ; + DirectoryEncode( ( int )Head.CharCodeFormat, FileOrDirectoryPath[i], NameP, DirP, FileP, &Directory, &SizeSave, i, DestFp, TempBuffer, Press, MaxPress, AlwaysHuffman, HuffmanEncodeKB, KeyString, KeyStringBytes, NoKey, KeyStringBuffer, &EncodeInfo ) ; } else { WIN32_FIND_DATA FindData ; HANDLE FindHandle ; DARC_FILEHEAD File ; + u8 lKey[DXA_KEY_BYTES] ; + size_t KeyStringBufferBytes ; // ファイルの情報を得る FindHandle = FindFirstFile( FileOrDirectoryPath[i], &FindData ) ; if( FindHandle == INVALID_HANDLE_VALUE ) continue ; - + + // 進行状況出力 + if( EncodeInfo.OutputStatus ) + { + // 処理ファイル名をセット + wcscpy( EncodeInfo.ProcessFileName, FindData.cFileName ) ; + + // ファイル数を増やす + EncodeInfo.CompFileNum ++ ; + + // 表示 + EncodeStatusOutput( &EncodeInfo ) ; + } + // ファイルヘッダをセットする { - File.NameAddress = SizeSave.NameSize ; - File.Time.Create = ( ( ( LONGLONG )FindData.ftCreationTime.dwHighDateTime ) << 32 ) + FindData.ftCreationTime.dwLowDateTime ; - File.Time.LastAccess = ( ( ( LONGLONG )FindData.ftLastAccessTime.dwHighDateTime ) << 32 ) + FindData.ftLastAccessTime.dwLowDateTime ; - File.Time.LastWrite = ( ( ( LONGLONG )FindData.ftLastWriteTime.dwHighDateTime ) << 32 ) + FindData.ftLastWriteTime.dwLowDateTime ; - File.Attributes = FindData.dwFileAttributes ; - File.DataAddress = SizeSave.DataSize ; - File.DataSize = ( ( ( LONGLONG )FindData.nFileSizeHigh ) << 32 ) + FindData.nFileSizeLow ; - File.PressDataSize = 0xffffffffffffffff ; + File.NameAddress = SizeSave.NameSize ; + File.Time.Create = ( ( ( LONGLONG )FindData.ftCreationTime.dwHighDateTime ) << 32 ) + FindData.ftCreationTime.dwLowDateTime ; + File.Time.LastAccess = ( ( ( LONGLONG )FindData.ftLastAccessTime.dwHighDateTime ) << 32 ) + FindData.ftLastAccessTime.dwLowDateTime ; + File.Time.LastWrite = ( ( ( LONGLONG )FindData.ftLastWriteTime.dwHighDateTime ) << 32 ) + FindData.ftLastWriteTime.dwLowDateTime ; + File.Attributes = FindData.dwFileAttributes ; + File.DataAddress = SizeSave.DataSize ; + File.DataSize = ( ( ( LONGLONG )FindData.nFileSizeHigh ) << 32 ) + FindData.nFileSizeLow ; + File.PressDataSize = 0xffffffffffffffff ; + File.HuffPressDataSize = 0xffffffffffffffff ; } // ファイル名を書き出す SizeSave.NameSize += AddFileNameData( FindData.cFileName, NameP + SizeSave.NameSize ) ; + // ファイル個別の鍵を作成 + if( NoKey == false ) + { + KeyStringBufferBytes = CreateKeyFileString( ( int )Head.CharCodeFormat, KeyString, KeyStringBytes, DirectoryP, &File, FileP, DirP, NameP, ( BYTE * )KeyStringBuffer ) ; + KeyCreate( KeyStringBuffer, KeyStringBufferBytes, lKey ) ; + } + // ファイルデータを書き出す if( File.DataSize != 0 ) { FILE *SrcP ; u64 FileSize, WriteSize, MoveSize ; + bool Huffman = false ; + bool AlwaysPress = false ; // ファイルを開く SrcP = _tfopen( FileOrDirectoryPath[i], TEXT("rb") ) ; @@ -1656,15 +2203,66 @@ int DXArchive::EncodeArchive(TCHAR *OutputFileName, TCHAR **FileOrDirectoryPath, _fseeki64( SrcP, 0, SEEK_END ) ; FileSize = _ftelli64( SrcP ) ; _fseeki64( SrcP, 0, SEEK_SET ) ; - - // ファイルサイズが 10MB 以下の場合で、圧縮の指定がある場合は圧縮を試みる - if( Press == true && File.DataSize < 10 * 1024 * 1024 ) + + // 圧縮の対象となるファイルフォーマットか調べる + { + u32 Len ; + Len = ( u32 )_tcslen( FindData.cFileName ) ; + if( Len > 4 ) + { + TCHAR *sp ; + + sp = &FindData.cFileName[Len-3] ; + if( StrICmp( sp, TEXT("wav") ) == 0 || + StrICmp( sp, TEXT("jpg") ) == 0 || + StrICmp( sp, TEXT("png") ) == 0 || + StrICmp( sp, TEXT("mpg") ) == 0 || + StrICmp( sp, TEXT("mp3") ) == 0 || + StrICmp( sp, TEXT("mp4") ) == 0 || + StrICmp( sp, TEXT("m4a") ) == 0 || + StrICmp( sp, TEXT("ogg") ) == 0 || + StrICmp( sp, TEXT("ogv") ) == 0 || + StrICmp( sp, TEXT("ops") ) == 0 || + StrICmp( sp, TEXT("wmv") ) == 0 || + StrICmp( sp, TEXT("tif") ) == 0 || + StrICmp( sp, TEXT("tga") ) == 0 || + StrICmp( sp, TEXT("bmp") ) == 0 || + StrICmp( sp - 1, TEXT("jpeg") ) == 0 ) + { + Huffman = true ; + } + + // wav や bmp の場合は必ず圧縮する + if( StrICmp( sp, TEXT("wav") ) == 0 || + StrICmp( sp, TEXT("tga") ) == 0 || + StrICmp( sp, TEXT("bmp") ) == 0 ) + { + AlwaysPress = true ; + } + } + } + + // AlwaysHuffman が true の場合は必ずハフマン圧縮する + if( AlwaysHuffman ) + { + Huffman = true ; + } + + // ハフマン圧縮するサイズが 0 の場合はハフマン圧縮を行わない + if( HuffmanEncodeKB == 0 ) + { + Huffman = false ; + } + + // 圧縮の指定がある場合で、 + // 必ず圧縮するファイルフォーマットか、ファイルサイズが 10MB 以下の場合は圧縮を試みる + if( Press == true && ( AlwaysPress || File.DataSize < 10 * 1024 * 1024 ) ) { void *SrcBuf, *DestBuf ; u32 DestSize, Len ; // 一部のファイル形式の場合は予め弾く - if( ( Len = ( int )_tcslen( FindData.cFileName ) ) > 4 ) + if( AlwaysPress == false && ( Len = ( int )_tcslen( FindData.cFileName ) ) > 4 ) { TCHAR *sp ; @@ -1674,58 +2272,161 @@ int DXArchive::EncodeArchive(TCHAR *OutputFileName, TCHAR **FileOrDirectoryPath, StrICmp( sp, TEXT("png") ) == 0 || StrICmp( sp, TEXT("mpg") ) == 0 || StrICmp( sp, TEXT("mp3") ) == 0 || + StrICmp( sp, TEXT("mp4") ) == 0 || StrICmp( sp, TEXT("ogg") ) == 0 || + StrICmp( sp, TEXT("ogv") ) == 0 || + StrICmp( sp, TEXT("ops") ) == 0 || StrICmp( sp, TEXT("wmv") ) == 0 || StrICmp( sp - 1, TEXT("jpeg") ) == 0 ) goto NOPRESS ; } - + // データが丸ごと入るメモリ領域の確保 - SrcBuf = malloc( ( size_t )( FileSize + FileSize * 2 + 64 ) ) ; + SrcBuf = calloc( 1, ( size_t )( FileSize + FileSize * 2 + 64 ) ) ; DestBuf = (u8 *)SrcBuf + FileSize ; // ファイルを丸ごと読み込む fread64( SrcBuf, FileSize, SrcP ) ; + + // 圧縮する場合は強制的に進行状況出力を更新 + if( EncodeInfo.OutputStatus ) + { + EncodeStatusOutput( &EncodeInfo, true ) ; + } // 圧縮 - DestSize = Encode( SrcBuf, ( u32 )FileSize, DestBuf ) ; + DestSize = Encode( SrcBuf, ( u32 )FileSize, DestBuf, EncodeInfo.OutputStatus, MaxPress ) ; // 殆ど圧縮出来なかった場合は圧縮無しでアーカイブする - if( (f64)DestSize / (f64)FileSize > 0.90 ) + if( AlwaysPress == false && ( (f64)DestSize / (f64)FileSize > 0.90 ) ) { _fseeki64( SrcP, 0L, SEEK_SET ) ; free( SrcBuf ) ; goto NOPRESS ; } - - // 圧縮データを反転して書き出す - WriteSize = ( DestSize + 3 ) / 4 * 4 ; - KeyConvFileWrite( DestBuf, WriteSize, DestFp, Key, File.DataSize ) ; - - // メモリの解放 - free( SrcBuf ) ; - + // 圧縮データのサイズを保存する File.PressDataSize = DestSize ; + + // ハフマン圧縮も行うかどうかで処理を分岐 + if( Huffman ) + { + u8 *HuffData ; + + // ハフマン圧縮するサイズによって処理を分岐 + if( HuffmanEncodeKB == 0xff || DestSize <= ( u64 )( HuffmanEncodeKB * 1024 * 2 ) ) + { + // ハフマン圧縮用のメモリ領域を確保 + HuffData = ( u8 * )calloc( 1, DestSize * 2 + 256 * 2 + 32 ) ; + + // ファイル全体をハフマン圧縮 + File.HuffPressDataSize = Huffman_Encode( DestBuf, DestSize, HuffData ) ; + + // 圧縮データに鍵を適用して書き出す + WriteSize = ( File.HuffPressDataSize + 3 ) / 4 * 4 ; // サイズは4の倍数に合わせる + KeyConvFileWrite( HuffData, WriteSize, DestFp, NoKey ? NULL : lKey, File.DataSize ) ; + } + else + { + // ハフマン圧縮用のメモリ領域を確保 + HuffData = ( u8 * )calloc( 1, HuffmanEncodeKB * 1024 * 2 * 4 + 256 * 2 + 32 ) ; + + // ファイルの前後をハフマン圧縮 + memcpy( HuffData, DestBuf, HuffmanEncodeKB * 1024 ) ; + memcpy( HuffData + HuffmanEncodeKB * 1024, ( u8 * )DestBuf + DestSize - HuffmanEncodeKB * 1024, HuffmanEncodeKB * 1024 ) ; + File.HuffPressDataSize = Huffman_Encode( HuffData, HuffmanEncodeKB * 1024 * 2, HuffData + HuffmanEncodeKB * 1024 * 2 ) ; + + // ハフマン圧縮した部分を書き出す + KeyConvFileWrite( HuffData + HuffmanEncodeKB * 1024 * 2, File.HuffPressDataSize, DestFp, NoKey ? NULL : lKey, File.DataSize ) ; + + // ハフマン圧縮していない箇所を書き出す + WriteSize = File.HuffPressDataSize + DestSize - HuffmanEncodeKB * 1024 * 2 ; + WriteSize = ( WriteSize + 3 ) / 4 * 4 ; // サイズは4の倍数に合わせる + KeyConvFileWrite( ( u8 * )DestBuf + HuffmanEncodeKB * 1024, WriteSize - File.HuffPressDataSize, DestFp, NoKey ? NULL : lKey, File.DataSize + File.HuffPressDataSize ) ; + } + + // メモリの解放 + free( HuffData ) ; + } + else + { + // 圧縮データを反転して書き出す + WriteSize = ( DestSize + 3 ) / 4 * 4 ; // サイズは4の倍数に合わせる + KeyConvFileWrite( DestBuf, WriteSize, DestFp, NoKey ? NULL : lKey, File.DataSize ) ; + } + + // メモリの解放 + free( SrcBuf ) ; } else { -NOPRESS: - // 転送開始 - WriteSize = 0 ; - while( WriteSize < FileSize ) +NOPRESS: + // ハフマン圧縮も行うかどうかで処理を分岐 + if( Press && Huffman ) + { + u8 *SrcBuf, *HuffData ; + + // データが丸ごと入るメモリ領域の確保 + SrcBuf = ( u8 * )calloc( 1, ( size_t )( FileSize + 32 ) ) ; + + // ファイルを丸ごと読み込む + fread64( SrcBuf, FileSize, SrcP ) ; + + // ハフマン圧縮するサイズによって処理を分岐 + if( HuffmanEncodeKB == 0xff || FileSize <= HuffmanEncodeKB * 1024 * 2 ) + { + // ハフマン圧縮用のメモリ領域を確保 + HuffData = ( u8 * )calloc( 1, ( size_t )( FileSize * 2 + 256 * 2 + 32 ) ) ; + + // ファイル全体をハフマン圧縮 + File.HuffPressDataSize = Huffman_Encode( SrcBuf, FileSize, HuffData ) ; + + // 圧縮データに鍵を適用して書き出す + WriteSize = ( File.HuffPressDataSize + 3 ) / 4 * 4 ; // サイズは4の倍数に合わせる + KeyConvFileWrite( HuffData, WriteSize, DestFp, NoKey ? NULL : lKey, File.DataSize ) ; + } + else + { + // ハフマン圧縮用のメモリ領域を確保 + HuffData = ( u8 * )calloc( 1, HuffmanEncodeKB * 1024 * 2 * 4 + 256 * 2 + 32 ) ; + + // ファイルの前後をハフマン圧縮 + memcpy( HuffData, SrcBuf, HuffmanEncodeKB * 1024 ) ; + memcpy( HuffData + HuffmanEncodeKB * 1024, SrcBuf + FileSize - HuffmanEncodeKB * 1024, HuffmanEncodeKB * 1024 ) ; + File.HuffPressDataSize = Huffman_Encode( HuffData, HuffmanEncodeKB * 1024 * 2, HuffData + HuffmanEncodeKB * 1024 * 2 ) ; + + // ハフマン圧縮した部分を書き出す + KeyConvFileWrite( HuffData + HuffmanEncodeKB * 1024 * 2, File.HuffPressDataSize, DestFp, NoKey ? NULL : lKey, File.DataSize ) ; + + // ハフマン圧縮していない箇所を書き出す + WriteSize = File.HuffPressDataSize + FileSize - HuffmanEncodeKB * 1024 * 2 ; + WriteSize = ( WriteSize + 3 ) / 4 * 4 ; // サイズは4の倍数に合わせる + KeyConvFileWrite( SrcBuf + HuffmanEncodeKB * 1024, WriteSize - File.HuffPressDataSize, DestFp, NoKey ? NULL : lKey, File.DataSize + File.HuffPressDataSize ) ; + } + + // メモリの解放 + free( SrcBuf ) ; + free( HuffData ) ; + } + else { - // 転送サイズ決定 - MoveSize = DXA_BUFFERSIZE < FileSize - WriteSize ? DXA_BUFFERSIZE : FileSize - WriteSize ; - MoveSize = ( MoveSize + 3 ) / 4 * 4 ; // サイズは4の倍数に合わせる + // 転送開始 + WriteSize = 0 ; + while( WriteSize < FileSize ) + { + // 転送サイズ決定 + MoveSize = DXA_BUFFERSIZE < FileSize - WriteSize ? DXA_BUFFERSIZE : FileSize - WriteSize ; + MoveSize = ( MoveSize + 3 ) / 4 * 4 ; // サイズは4の倍数に合わせる - // ファイルの反転読み込み - KeyConvFileRead( TempBuffer, MoveSize, SrcP, Key, File.DataSize + WriteSize ) ; + // ファイルの鍵適用読み込み + memset( TempBuffer, 0, ( size_t )MoveSize ) ; + KeyConvFileRead( TempBuffer, MoveSize, SrcP, NoKey ? NULL : lKey, File.DataSize + WriteSize ) ; - // 書き出し - fwrite64( TempBuffer, MoveSize, DestFp ) ; + // 書き出し + fwrite64( TempBuffer, MoveSize, DestFp ) ; - // 書き出しサイズの加算 - WriteSize += MoveSize ; + // 書き出しサイズの加算 + WriteSize += MoveSize ; + } } } @@ -1746,24 +2447,62 @@ int DXArchive::EncodeArchive(TCHAR *OutputFileName, TCHAR **FileOrDirectoryPath, // バッファに溜め込んだ各種ヘッダデータを出力する { - // 出力する順番は ファイルネームテーブル、 DARC_FILEHEAD テーブル、 DARC_DIRECTORY テーブル の順 - KeyConvFileWrite( NameP, SizeSave.NameSize, DestFp, Key, 0 ) ; - KeyConvFileWrite( FileP, SizeSave.FileSize, DestFp, Key, SizeSave.NameSize ) ; - KeyConvFileWrite( DirP, SizeSave.DirectorySize, DestFp, Key, SizeSave.NameSize + SizeSave.FileSize ) ; + u8 *PressSource ; + u64 TotalSize = SizeSave.NameSize + SizeSave.FileSize + SizeSave.DirectorySize ; + + // 全部のデータを纏める + PressSource = ( u8 * )malloc( ( size_t )TotalSize ) ; + if( PressSource == NULL ) return -1 ; + memcpy( PressSource, NameP, ( size_t )SizeSave.NameSize ) ; + memcpy( PressSource + SizeSave.NameSize, FileP, ( size_t )SizeSave.FileSize ) ; + memcpy( PressSource + SizeSave.NameSize + SizeSave.FileSize, DirP, ( size_t )SizeSave.DirectorySize ) ; + + // 圧縮するかどうかで処理を分岐 + if( Press ) + { + u8 *PressData ; + int LZDataSize ; + + // 圧縮する場合 + + // 圧縮データを格納するメモリ領域の確保 + PressData = ( u8 * )malloc( ( size_t )( TotalSize * 4 + 256 * 2 + 32 * 2 ) ) ; + if( PressData == NULL ) return -1 ; + + // LZ圧縮 + LZDataSize = Encode( PressSource, ( u32 )TotalSize, PressData, false ) ; + + // ハフマン圧縮 + HeaderHuffDataSize = Huffman_Encode( PressData, ( u64 )LZDataSize, PressData + TotalSize * 2 + 32 ) ; + + // 纏めたものに鍵を適用して出力 + KeyConvFileWrite( PressData + TotalSize * 2 + 32, HeaderHuffDataSize, DestFp, NoKey ? NULL : Key, 0 ) ; + + // メモリの解放 + free( PressData ) ; + } + else + { + // 纏めたものに鍵を適用して出力 + KeyConvFileWrite( PressSource, TotalSize, DestFp, NoKey ? NULL : Key, 0 ) ; + } + + // メモリの解放 + free( PressSource ) ; } // 再びアーカイブのヘッダを出力する { Head.Head = DXA_HEAD ; Head.Version = DXA_VER ; - Head.HeadSize = ( u32 )( SizeSave.NameSize + SizeSave.DirectorySize + SizeSave.FileSize ) ; + Head.HeadSize = ( u32 )( SizeSave.NameSize + SizeSave.FileSize + SizeSave.DirectorySize ) ; Head.DataStartAddress = sizeof( DARC_HEAD ) ; Head.FileNameTableStartAddress = SizeSave.DataSize + Head.DataStartAddress ; Head.FileTableStartAddress = SizeSave.NameSize ; Head.DirectoryTableStartAddress = Head.FileTableStartAddress + SizeSave.FileSize ; _fseeki64( DestFp, 0, SEEK_SET ) ; - KeyConvFileWrite( &Head, sizeof( DARC_HEAD ), DestFp, Key, 0 ) ; + fwrite64( &Head, sizeof( DARC_HEAD ), DestFp ) ; } // 書き出したファイルを閉じる @@ -1775,22 +2514,46 @@ int DXArchive::EncodeArchive(TCHAR *OutputFileName, TCHAR **FileOrDirectoryPath, free( DirP ) ; free( TempBuffer ) ; + // 圧縮状況表示をクリア + EncodeStatusErase() ; + // 終了 return 0 ; } // アーカイブファイルを展開する -int DXArchive::DecodeArchive(TCHAR *ArchiveName, const TCHAR *OutputPath, const char *KeyString ) +int DXArchive::DecodeArchive(TCHAR *ArchiveName, const TCHAR *OutputPath, const char *KeyString_ ) { u8 *HeadBuffer = NULL ; DARC_HEAD Head ; u8 *FileP, *NameP, *DirP ; FILE *ArcP = NULL ; TCHAR OldDir[MAX_PATH] ; - u8 Key[DXA_KEYSTR_LENGTH] ; + u8 Key[DXA_KEY_BYTES] ; + char KeyString[ DXA_KEY_STRING_LENGTH + 1 ] ; + size_t KeyStringBytes ; + char KeyStringBuffer[ DXA_KEY_STRING_MAXLENGTH ] ; + bool NoKey ; - // 鍵文字列の作成 - KeyCreate( KeyString, Key ) ; + // 鍵文字列の保存と鍵の作成 + { + // 指定が無い場合はデフォルトの鍵文字列を使用する + if( KeyString_ == NULL ) + { + KeyString_ = DefaultKeyString ; + } + + KeyStringBytes = CL_strlen( CHARCODEFORMAT_ASCII, KeyString_ ) ; + if( KeyStringBytes > DXA_KEY_STRING_LENGTH ) + { + KeyStringBytes = DXA_KEY_STRING_LENGTH ; + } + memcpy( KeyString, KeyString_, KeyStringBytes ) ; + KeyString[ KeyStringBytes ] = '\0' ; + + // 鍵の作成 + KeyCreate( KeyString, KeyStringBytes, Key ) ; + } // アーカイブファイルを開く ArcP = _tfopen( ArchiveName, TEXT("rb") ) ; @@ -1802,23 +2565,75 @@ int DXArchive::DecodeArchive(TCHAR *ArchiveName, const TCHAR *OutputPath, const // ヘッダを解析する { - KeyConvFileRead( &Head, sizeof( DARC_HEAD ), ArcP, Key, 0 ) ; + s64 FileSize ; + // ヘッダの読み込み + fread64( &Head, sizeof( DARC_HEAD ), ArcP ) ; + // IDの検査 if( Head.Head != DXA_HEAD ) + { goto ERR ; + } // バージョン検査 - if( Head.Version > DXA_VER || Head.Version < 0x0006 ) goto ERR ; + if( Head.Version > DXA_VER || Head.Version < DXA_VER_MIN ) goto ERR ; + + // 鍵処理が行われていないかを取得する + NoKey = ( Head.Flags & DXA_FLAG_NO_KEY ) != 0 ; // ヘッダのサイズ分のメモリを確保する HeadBuffer = ( u8 * )malloc( ( size_t )Head.HeadSize ) ; if( HeadBuffer == NULL ) goto ERR ; - - // ヘッダパックをメモリに読み込む - _fseeki64( ArcP, Head.FileNameTableStartAddress, SEEK_SET ) ; - KeyConvFileRead( HeadBuffer, Head.HeadSize, ArcP, Key, 0 ) ; - + + // ヘッダが圧縮されている場合は解凍する + if( ( Head.Flags & DXA_FLAG_NO_HEAD_PRESS ) != 0 ) + { + // 圧縮されていない場合は普通に読み込む + KeyConvFileRead( HeadBuffer, Head.HeadSize, ArcP, NoKey ? NULL : Key, 0 ) ; + } + else + { + void *HuffHeadBuffer ; + u64 HuffHeadSize ; + void *LzHeadBuffer ; + u64 LzHeadSize ; + + // ハフマン圧縮されたヘッダのサイズを取得する + _fseeki64( ArcP, 0, SEEK_END ) ; + FileSize = _ftelli64( ArcP ) ; + _fseeki64( ArcP, Head.FileNameTableStartAddress, SEEK_SET ) ; + HuffHeadSize = ( u32 )( FileSize - _ftelli64( ArcP ) ) ; + + // ハフマン圧縮されたヘッダを読み込むメモリを確保する + HuffHeadBuffer = malloc( ( size_t )HuffHeadSize ) ; + if( HuffHeadBuffer == NULL ) goto ERR ; + + // ハフマン圧縮されたヘッダをコピーと暗号化解除 + KeyConvFileRead( HuffHeadBuffer, HuffHeadSize, ArcP, NoKey ? NULL : Key, 0 ) ; + + // ハフマン圧縮されたヘッダの解凍後の容量を取得する + LzHeadSize = Huffman_Decode( HuffHeadBuffer, NULL ) ; + + // ハフマン圧縮されたヘッダの解凍後のデータを格納するメモリ用域の確保 + LzHeadBuffer = malloc( ( size_t )LzHeadSize ) ; + if( LzHeadBuffer == NULL ) + { + free( HuffHeadBuffer ) ; + goto ERR ; + } + + // ハフマン圧縮されたヘッダを解凍する + Huffman_Decode( HuffHeadBuffer, LzHeadBuffer ) ; + + // LZ圧縮されたヘッダを解凍する + Decode( LzHeadBuffer, HeadBuffer ) ; + + // メモリの解放 + free( HuffHeadBuffer ) ; + free( LzHeadBuffer ) ; + } + // 各アドレスをセットする NameP = HeadBuffer ; FileP = NameP + Head.FileTableStartAddress ; @@ -1826,7 +2641,7 @@ int DXArchive::DecodeArchive(TCHAR *ArchiveName, const TCHAR *OutputPath, const } // アーカイブの展開を開始する - DirectoryDecode( NameP, DirP, FileP, &Head, ( DARC_DIRECTORY * )DirP, ArcP, Key ) ; + DirectoryDecode( NameP, DirP, FileP, &Head, ( DARC_DIRECTORY * )DirP, ArcP, Key, KeyString, KeyStringBytes, NoKey, KeyStringBuffer ) ; // ファイルを閉じる fclose( ArcP ) ; @@ -1860,7 +2675,7 @@ DXArchive::DXArchive(TCHAR *ArchivePath ) this->HeadBuffer = NULL ; this->NameP = this->DirP = this->FileP = NULL ; this->CurrentDirectory = NULL ; - this->CashBuffer = NULL ; + this->CacheBuffer = NULL ; if( ArchivePath != NULL ) { @@ -1875,7 +2690,7 @@ DXArchive::~DXArchive() if( this->fp != NULL ) fclose( this->fp ) ; if( this->HeadBuffer != NULL ) free( this->HeadBuffer ) ; - if( this->CashBuffer != NULL ) free( this->CashBuffer ) ; + if( this->CacheBuffer != NULL ) free( this->CacheBuffer ) ; this->fp = NULL ; this->HeadBuffer = NULL ; @@ -1884,20 +2699,22 @@ DXArchive::~DXArchive() } // 指定のディレクトリデータの暗号化を解除する( 丸ごとメモリに読み込んだ場合用 ) -int DXArchive::DirectoryKeyConv( DARC_DIRECTORY *Dir ) +int DXArchive::DirectoryKeyConv( DARC_DIRECTORY *Dir, char *KeyStringBuffer ) { // メモリイメージではない場合はエラー if( this->MemoryOpenFlag == false ) return -1 ; - // バージョン 0x0005 より前では何もしない - if( this->Head.Version < 0x0005 ) - return 0 ; + // 鍵を使わない場合は何もせずに終了 + if( this->NoKey ) + return -1 ; // 暗号化解除処理開始 { u32 i, FileHeadSize ; DARC_FILEHEAD *File ; + unsigned char lKey[ DXA_KEY_BYTES ] ; + size_t KeyStringBufferBytes ; // 格納されているファイルの数だけ繰り返す FileHeadSize = sizeof( DARC_FILEHEAD ) ; @@ -1908,7 +2725,7 @@ int DXArchive::DirectoryKeyConv( DARC_DIRECTORY *Dir ) if( File->Attributes & FILE_ATTRIBUTE_DIRECTORY ) { // ディレクトリの場合は再帰をかける - DirectoryKeyConv( ( DARC_DIRECTORY * )( this->DirP + File->DataAddress ) ) ; + DirectoryKeyConv( ( DARC_DIRECTORY * )( this->DirP + File->DataAddress ), KeyStringBuffer ) ; } else { @@ -1922,16 +2739,30 @@ int DXArchive::DirectoryKeyConv( DARC_DIRECTORY *Dir ) // データ位置をセットする DataP = ( u8 * )this->fp + this->Head.DataStartAddress + File->DataAddress ; + // ファイル個別の鍵を作成 + if( NoKey == false ) + { + KeyStringBufferBytes = CreateKeyFileString( ( int )this->Head.CharCodeFormat, this->KeyString, this->KeyStringBytes, Dir, File, this->FileP, this->DirP, this->NameP, ( BYTE * )KeyStringBuffer ) ; + KeyCreate( KeyStringBuffer, KeyStringBufferBytes, lKey ) ; + } + + // ハフマン圧縮されているかどうかで処理を分岐 + if( File->HuffPressDataSize != 0xffffffffffffffff ) + { + // ハフマン圧縮されている場合 + KeyConv( DataP, File->HuffPressDataSize, File->DataSize, lKey ) ; + } + else // データが圧縮されているかどうかで処理を分岐 if( File->PressDataSize != 0xffffffffffffffff ) { // 圧縮されている場合 - KeyConv( DataP, File->PressDataSize, File->DataSize, this->Key ) ; + KeyConv( DataP, File->PressDataSize, File->DataSize, lKey ) ; } else { // 圧縮されていない場合 - KeyConv( DataP, File->DataSize, File->DataSize, this->Key ) ; + KeyConv( DataP, File->DataSize, File->DataSize, lKey ) ; } } } @@ -1942,47 +2773,108 @@ int DXArchive::DirectoryKeyConv( DARC_DIRECTORY *Dir ) return 0 ; } -// メモリ上にあるアーカイブイメージを開く( 0:成功 -1:失敗 ) -int DXArchive::OpenArchiveMem( void *ArchiveImage, s64 ArchiveSize, const char *KeyString ) +// アーカイブファイルを開く +int DXArchive::OpenArchiveFile( const TCHAR *ArchivePath, const char *KeyString_ ) { - u8 *datp ; - // 既になんらかのアーカイブを開いていた場合はエラー if( this->fp != NULL ) return -1 ; - // 鍵の作成 - KeyCreate( KeyString, this->Key ) ; + // アーカイブファイルを開こうと試みる + this->fp = _tfopen(ArchivePath, TEXT("rb")); + if( this->fp == NULL ) return -1 ; - // 最初にヘッダの部分を反転する - memcpy( &this->Head, ArchiveImage, sizeof( DARC_HEAD ) ) ; - KeyConv( &this->Head, sizeof( DARC_HEAD ), 0, this->Key ) ; + // 鍵文字列の保存と鍵の作成 + { + // 指定が無い場合はデフォルトの鍵文字列を使用する + if( KeyString_ == NULL ) + { + KeyString_ = DefaultKeyString ; + } - // IDが違う場合はエラー - if( Head.Head != DXA_HEAD ) - goto ERR ; + KeyStringBytes = CL_strlen( CHARCODEFORMAT_ASCII, KeyString_ ) ; + if( KeyStringBytes > DXA_KEY_STRING_LENGTH ) + { + KeyStringBytes = DXA_KEY_STRING_LENGTH ; + } + memcpy( KeyString, KeyString_, KeyStringBytes ) ; + KeyString[ KeyStringBytes ] = '\0' ; - // ポインタを保存 - this->fp = (FILE *)ArchiveImage ; - datp = (u8 *)ArchiveImage ; + // 鍵の作成 + KeyCreate( KeyString, KeyStringBytes, Key ) ; + } // ヘッダを解析する { - memcpy( &this->Head, datp, sizeof( DARC_HEAD ) ) ; - KeyConv( &this->Head, sizeof( DARC_HEAD ), 0, this->Key ) ; - - datp += sizeof( DARC_HEAD ) ; - + // ヘッダの読み込み + fread64( &this->Head, sizeof( DARC_HEAD ), this->fp ) ; + // IDの検査 - if( this->Head.Head != DXA_HEAD ) goto ERR ; + if( this->Head.Head != DXA_HEAD ) + { + goto ERR ; + } // バージョン検査 - if( this->Head.Version > DXA_VER || this->Head.Version < 0x0006 ) goto ERR ; + if( this->Head.Version > DXA_VER || this->Head.Version < DXA_VER_MIN ) goto ERR ; + + // 鍵処理が行われていないかを取得する + this->NoKey = ( Head.Flags & DXA_FLAG_NO_KEY ) != 0 ; + + // ヘッダのサイズ分のメモリを確保する + this->HeadBuffer = ( u8 * )malloc( ( size_t )this->Head.HeadSize ) ; + if( this->HeadBuffer == NULL ) goto ERR ; + + // ヘッダが圧縮されている場合は解凍する + if( ( Head.Flags & DXA_FLAG_NO_HEAD_PRESS ) != 0 ) + { + // 圧縮されていない場合は普通に読み込む + _fseeki64( this->fp, this->Head.FileNameTableStartAddress, SEEK_SET ) ; + KeyConvFileRead( HeadBuffer, this->Head.HeadSize, this->fp, this->NoKey ? NULL : this->Key, 0 ) ; + } + else + { + void *HuffHeadBuffer ; + u64 HuffHeadSize ; + void *LzHeadBuffer ; + u64 LzHeadSize ; + s64 FileSize ; + + // 圧縮されたヘッダの容量を取得する + _fseeki64( this->fp, 0, SEEK_END ) ; + FileSize = _ftelli64( this->fp ) ; + _fseeki64( this->fp, this->Head.FileNameTableStartAddress, SEEK_SET ) ; + HuffHeadSize = ( u32 )( FileSize - _ftelli64( this->fp ) ) ; + + // ハフマン圧縮されたヘッダを読み込むメモリを確保する + HuffHeadBuffer = malloc( ( size_t )HuffHeadSize ) ; + if( HuffHeadBuffer == NULL ) goto ERR ; + + // ハフマン圧縮されたヘッダをメモリに読み込む + KeyConvFileRead( HuffHeadBuffer, HuffHeadSize, this->fp, NoKey ? NULL : Key, 0 ) ; + + // ハフマン圧縮されたヘッダの解凍後の容量を取得する + LzHeadSize = Huffman_Decode( HuffHeadBuffer, NULL ) ; + + // ハフマン圧縮されたヘッダの解凍後のデータを格納するメモリ用域の確保 + LzHeadBuffer = malloc( ( size_t )LzHeadSize ) ; + if( LzHeadBuffer == NULL ) + { + free( HuffHeadBuffer ) ; + goto ERR ; + } + + // ハフマン圧縮されたヘッダを解凍する + Huffman_Decode( HuffHeadBuffer, LzHeadBuffer ) ; - // ヘッダパックのアドレスをセットする - this->HeadBuffer = (u8 *)this->fp + this->Head.FileNameTableStartAddress ; + // LZ圧縮されたヘッダを解凍する + Decode( LzHeadBuffer, this->HeadBuffer ) ; + + // メモリの解放 + free( HuffHeadBuffer ) ; + free( LzHeadBuffer ) ; + } // 各アドレスをセットする - KeyConv( this->HeadBuffer, this->Head.HeadSize, 0, this->Key ) ; this->NameP = this->HeadBuffer ; this->FileP = this->NameP + this->Head.FileTableStartAddress ; this->DirP = this->NameP + this->Head.DirectoryTableStartAddress ; @@ -1991,64 +2883,77 @@ int DXArchive::OpenArchiveMem( void *ArchiveImage, s64 ArchiveSize, const char * // カレントディレクトリのセット this->CurrentDirectory = ( DARC_DIRECTORY * )this->DirP ; - // メモリイメージから開いているフラグを立てる - MemoryOpenFlag = true ; - - // 全てのファイルの暗号化を解除する - DirectoryKeyConv( ( DARC_DIRECTORY * )this->DirP ) ; - - // ユーザーのイメージから開いたフラグを立てる - UserMemoryImageFlag = true ; - - // サイズも保存しておく - MemoryImageSize = ArchiveSize ; + // メモリイメージから開いている、フラグを倒す + MemoryOpenFlag = false ; // 終了 return 0 ; ERR : + if( this->fp != NULL ){ fclose( this->fp ) ; this->fp = NULL ; } + if( this->HeadBuffer != NULL ){ free( this->HeadBuffer ) ; this->HeadBuffer = NULL ; } + // 終了 return -1 ; } // アーカイブファイルを開き最初にすべてメモリ上に読み込んでから処理する( 0:成功 -1:失敗 ) -int DXArchive::OpenArchiveFileMem( const TCHAR *ArchivePath, const char *KeyString ) +int DXArchive::OpenArchiveFileMem( const TCHAR *ArchivePath, const char *KeyString_ ) { - FILE *pFp ; + FILE *fp ; u8 *datp ; void *ArchiveImage ; s64 ArchiveSize ; + void *HuffHeadBuffer = NULL ; // 既になんらかのアーカイブを開いていた場合はエラー if( this->fp != NULL ) return -1 ; - // 鍵の作成 - KeyCreate( KeyString, this->Key ) ; + // 鍵文字列の保存と鍵の作成 + { + // 指定が無い場合はデフォルトの鍵文字列を使用する + if( KeyString_ == NULL ) + { + KeyString_ = DefaultKeyString ; + } + + KeyStringBytes = CL_strlen( CHARCODEFORMAT_ASCII, KeyString_ ) ; + if( KeyStringBytes > DXA_KEY_STRING_LENGTH ) + { + KeyStringBytes = DXA_KEY_STRING_LENGTH ; + } + memcpy( KeyString, KeyString_, KeyStringBytes ) ; + KeyString[ KeyStringBytes ] = '\0' ; + + // 鍵の作成 + KeyCreate( KeyString, KeyStringBytes, Key ) ; + } // メモリに読み込む { - pFp = _tfopen( ArchivePath, TEXT("rb") ) ; - if(pFp == NULL ) return -1 ; - _fseeki64(pFp, 0L, SEEK_END ) ; - ArchiveSize = _ftelli64(pFp) ; - _fseeki64(pFp, 0L, SEEK_SET ) ; + fp = _tfopen( ArchivePath, TEXT("rb") ) ; + if( fp == NULL ) return -1 ; + _fseeki64( fp, 0L, SEEK_END ) ; + ArchiveSize = _ftelli64( fp ) ; + _fseeki64( fp, 0L, SEEK_SET ) ; ArchiveImage = malloc( ( size_t )ArchiveSize ) ; if( ArchiveImage == NULL ) { - fclose(pFp) ; + fclose( fp ) ; return -1 ; } - fread64( ArchiveImage, ArchiveSize, pFp) ; - fclose(pFp) ; + fread64( ArchiveImage, ArchiveSize, fp ) ; + fclose( fp ) ; } - // 最初にヘッダの部分を反転する + // ヘッダの部分をコピー memcpy( &this->Head, ArchiveImage, sizeof( DARC_HEAD ) ) ; - KeyConv( &this->Head, sizeof( DARC_HEAD ), 0, this->Key ) ; // IDが違う場合はエラー if( Head.Head != DXA_HEAD ) + { return -1 ; + } // ポインタを保存 this->fp = (FILE *)ArchiveImage ; @@ -2056,22 +2961,66 @@ int DXArchive::OpenArchiveFileMem( const TCHAR *ArchivePath, const char *KeyStri // ヘッダを解析する { - memcpy( &this->Head, datp, sizeof( DARC_HEAD ) ) ; - KeyConv( &this->Head, sizeof( DARC_HEAD ), 0, this->Key ) ; - datp += sizeof( DARC_HEAD ) ; - // IDの検査 - if( this->Head.Head != DXA_HEAD ) goto ERR ; - // バージョン検査 - if( this->Head.Version > DXA_VER || this->Head.Version < 0x0006 ) goto ERR ; + if( this->Head.Version > DXA_VER || this->Head.Version < DXA_VER_MIN ) goto ERR ; + + // 鍵処理が行われていないかを取得する + this->NoKey = ( Head.Flags & DXA_FLAG_NO_KEY ) != 0 ; + + // ヘッダのサイズ分のメモリを確保する + this->HeadBuffer = ( u8 * )malloc( ( size_t )this->Head.HeadSize ) ; + if( this->HeadBuffer == NULL ) goto ERR ; + + // ヘッダが圧縮されている場合は解凍する + if( ( Head.Flags & DXA_FLAG_NO_HEAD_PRESS ) != 0 ) + { + // 圧縮されていない場合は普通に読み込む + memcpy( HeadBuffer, ( u8 * )this->fp + this->Head.FileNameTableStartAddress, this->Head.HeadSize ) ; + if( this->NoKey == false ) KeyConv( HeadBuffer, this->Head.HeadSize, 0, this->Key ) ; + } + else + { + void *HuffHeadBuffer ; + u64 HuffHeadSize ; + void *LzHeadBuffer ; + u64 LzHeadSize ; + + // ハフマン圧縮されたヘッダの容量を取得する + HuffHeadSize = ( u32 )( ( u64 )ArchiveSize - this->Head.FileNameTableStartAddress ) ; + + // ハフマン圧縮されたヘッダを読み込むメモリを確保する + HuffHeadBuffer = malloc( ( size_t )HuffHeadSize ) ; + if( HuffHeadBuffer == NULL ) goto ERR ; + + // 圧縮されたヘッダをコピーと暗号化解除 + memcpy( HuffHeadBuffer, ( u8 * )this->fp + this->Head.FileNameTableStartAddress, ( size_t )HuffHeadSize ) ; + if( this->NoKey == false ) KeyConv( HuffHeadBuffer, HuffHeadSize, 0, this->Key ) ; - // ヘッダパックのアドレスをセットする - this->HeadBuffer = (u8 *)this->fp + this->Head.FileNameTableStartAddress ; + // ハフマン圧縮されたヘッダの解凍後の容量を取得する + LzHeadSize = Huffman_Decode( HuffHeadBuffer, NULL ) ; + + // ハフマン圧縮されたヘッダの解凍後のデータを格納するメモリ用域の確保 + LzHeadBuffer = malloc( ( size_t )LzHeadSize ) ; + if( LzHeadBuffer == NULL ) + { + free( HuffHeadBuffer ) ; + goto ERR ; + } + + // ハフマン圧縮されたヘッダを解凍する + Huffman_Decode( HuffHeadBuffer, LzHeadBuffer ) ; + + // LZ圧縮されたヘッダを解凍する + Decode( LzHeadBuffer, this->HeadBuffer ) ; + + // メモリの解放 + free( HuffHeadBuffer ) ; + free( LzHeadBuffer ) ; + } // 各アドレスをセットする - KeyConv( this->HeadBuffer, this->Head.HeadSize, 0, this->Key ) ; this->NameP = this->HeadBuffer ; this->FileP = this->NameP + this->Head.FileTableStartAddress ; this->DirP = this->NameP + this->Head.DirectoryTableStartAddress ; @@ -2084,7 +3033,11 @@ int DXArchive::OpenArchiveFileMem( const TCHAR *ArchivePath, const char *KeyStri MemoryOpenFlag = true ; // 全てのファイルの暗号化を解除する - DirectoryKeyConv( ( DARC_DIRECTORY * )this->DirP ) ; + if( this->NoKey == false ) + { + char KeyStringBuffer[ DXA_KEY_STRING_MAXLENGTH ] ; + DirectoryKeyConv( ( DARC_DIRECTORY * )this->DirP, KeyStringBuffer ) ; + } // ユーザーのイメージから開いたわけではないのでフラグを倒す UserMemoryImageFlag = false ; @@ -2101,38 +3054,108 @@ ERR : return -1 ; } -// アーカイブファイルを開く -int DXArchive::OpenArchiveFile( const TCHAR *ArchivePath, const char *KeyString ) +// メモリ上にあるアーカイブイメージを開く( 0:成功 -1:失敗 ) +int DXArchive::OpenArchiveMem( void *ArchiveImage, s64 ArchiveSize, const char *KeyString_ ) { + u8 *datp ; + // 既になんらかのアーカイブを開いていた場合はエラー if( this->fp != NULL ) return -1 ; - // アーカイブファイルを開こうと試みる - this->fp = _tfopen( ArchivePath, TEXT("rb") ) ; - if( this->fp == NULL ) return -1 ; + // 鍵文字列の保存と鍵の作成 + { + // 指定が無い場合はデフォルトの鍵文字列を使用する + if( KeyString_ == NULL ) + { + KeyString_ = DefaultKeyString ; + } + + KeyStringBytes = CL_strlen( CHARCODEFORMAT_ASCII, KeyString_ ) ; + if( KeyStringBytes > DXA_KEY_STRING_LENGTH ) + { + KeyStringBytes = DXA_KEY_STRING_LENGTH ; + } + memcpy( KeyString, KeyString_, KeyStringBytes ) ; + KeyString[ KeyStringBytes ] = '\0' ; + + // 鍵の作成 + KeyCreate( KeyString, KeyStringBytes, Key ) ; + } + + // ヘッダの部分をコピー + memcpy( &this->Head, ArchiveImage, sizeof( DARC_HEAD ) ) ; + + // IDが違う場合はエラー + if( Head.Head != DXA_HEAD ) + { + goto ERR ; + } - // 鍵文字列の作成 - KeyCreate( KeyString, this->Key ) ; + // ポインタを保存 + this->fp = (FILE *)ArchiveImage ; + datp = (u8 *)ArchiveImage ; // ヘッダを解析する { - KeyConvFileRead( &this->Head, sizeof( DARC_HEAD ), this->fp, this->Key, 0 ) ; - - // IDの検査 - if( this->Head.Head != DXA_HEAD ) - goto ERR ; - + datp += sizeof( DARC_HEAD ) ; + // バージョン検査 - if( this->Head.Version > DXA_VER || this->Head.Version < 0x0006 ) goto ERR ; - + if( this->Head.Version > DXA_VER || this->Head.Version < DXA_VER_MIN ) goto ERR ; + + // 鍵処理が行われていないかを取得する + this->NoKey = ( Head.Flags & DXA_FLAG_NO_KEY ) != 0 ; + // ヘッダのサイズ分のメモリを確保する - this->HeadBuffer = (u8 * )malloc( ( size_t )this->Head.HeadSize ) ; + this->HeadBuffer = ( u8 * )malloc( ( size_t )this->Head.HeadSize ) ; if( this->HeadBuffer == NULL ) goto ERR ; - - // ヘッダパックをメモリに読み込む - _fseeki64( this->fp, this->Head.FileNameTableStartAddress, SEEK_SET ) ; - KeyConvFileRead( this->HeadBuffer, this->Head.HeadSize, this->fp, this->Key, 0 ) ; - + + // ヘッダが圧縮されている場合は解凍する + if( ( Head.Flags & DXA_FLAG_NO_HEAD_PRESS ) != 0 ) + { + // 圧縮されていない場合は普通に読み込む + memcpy( HeadBuffer, ( u8 * )this->fp + this->Head.FileNameTableStartAddress, this->Head.HeadSize ) ; + if( this->NoKey == false ) KeyConv( HeadBuffer, this->Head.HeadSize, 0, this->Key ) ; + } + else + { + void *HuffHeadBuffer ; + u64 HuffHeadSize ; + void *LzHeadBuffer ; + u64 LzHeadSize ; + + // ハフマン圧縮されたヘッダの容量を取得する + HuffHeadSize = ( u32 )( ( u64 )ArchiveSize - this->Head.FileNameTableStartAddress ) ; + + // ハフマン圧縮されたヘッダを読み込むメモリを確保する + HuffHeadBuffer = malloc( ( size_t )HuffHeadSize ) ; + if( HuffHeadBuffer == NULL ) goto ERR ; + + // ハフマン圧縮されたヘッダをコピーと暗号化解除 + memcpy( HuffHeadBuffer, ( u8 * )this->fp + this->Head.FileNameTableStartAddress, ( size_t )HuffHeadSize ) ; + if( this->NoKey == false ) KeyConv( HuffHeadBuffer, HuffHeadSize, 0, this->Key ) ; + + // ハフマン圧縮されたヘッダの解凍後の容量を取得する + LzHeadSize = Huffman_Decode( HuffHeadBuffer, NULL ) ; + + // ハフマン圧縮されたヘッダの解凍後のデータを格納するメモリ用域の確保 + LzHeadBuffer = malloc( ( size_t )LzHeadSize ) ; + if( LzHeadBuffer == NULL ) + { + free( HuffHeadBuffer ) ; + goto ERR ; + } + + // ハフマン圧縮されたヘッダを解凍する + Huffman_Decode( HuffHeadBuffer, LzHeadBuffer ) ; + + // LZ圧縮されたヘッダを解凍する + Decode( LzHeadBuffer, this->HeadBuffer ) ; + + // メモリの解放 + free( HuffHeadBuffer ) ; + free( LzHeadBuffer ) ; + } + // 各アドレスをセットする this->NameP = this->HeadBuffer ; this->FileP = this->NameP + this->Head.FileTableStartAddress ; @@ -2142,16 +3165,26 @@ int DXArchive::OpenArchiveFile( const TCHAR *ArchivePath, const char *KeyString // カレントディレクトリのセット this->CurrentDirectory = ( DARC_DIRECTORY * )this->DirP ; - // メモリイメージから開いている、フラグを倒す - MemoryOpenFlag = false ; + // メモリイメージから開いているフラグを立てる + MemoryOpenFlag = true ; + + // 全てのファイルの暗号化を解除する + if( this->NoKey == false ) + { + char KeyStringBuffer[ DXA_KEY_STRING_MAXLENGTH ] ; + DirectoryKeyConv( ( DARC_DIRECTORY * )this->DirP, KeyStringBuffer ) ; + } + + // ユーザーのイメージから開いたフラグを立てる + UserMemoryImageFlag = true ; + + // サイズも保存しておく + MemoryImageSize = ArchiveSize ; // 終了 return 0 ; ERR : - if( this->fp != NULL ){ fclose( this->fp ) ; this->fp = NULL ; } - if( this->HeadBuffer != NULL ){ free( this->HeadBuffer ) ; this->HeadBuffer = NULL ; } - // 終了 return -1 ; } @@ -2169,8 +3202,12 @@ int DXArchive::CloseArchiveFile( void ) if( UserMemoryImageFlag == true ) { // 反転したデータを元に戻す - DirectoryKeyConv( ( DARC_DIRECTORY * )this->DirP ) ; - KeyConv( this->HeadBuffer, this->Head.HeadSize, 0, this->Key ) ; + if( this->NoKey == false ) + { + char KeyStringBuffer[ DXA_KEY_STRING_MAXLENGTH ] ; + DirectoryKeyConv( ( DARC_DIRECTORY * )this->DirP, KeyStringBuffer ) ; + KeyConv( this->HeadBuffer, this->Head.HeadSize, 0, this->Key ) ; + } } else { @@ -2182,11 +3219,11 @@ int DXArchive::CloseArchiveFile( void ) { // アーカイブファイルを閉じる fclose( this->fp ) ; - - // ヘッダバッファも解放 - free( this->HeadBuffer ) ; } + // ヘッダバッファを解放 + free( this->HeadBuffer ) ; + // ポインタ初期化 this->fp = NULL ; this->HeadBuffer = NULL ; @@ -2421,9 +3458,14 @@ int DXArchive::GetCurrentDir(TCHAR *DirPathBuffer, int BufferLength ) s64 DXArchive::LoadFileToMem( const TCHAR *FilePath, void *Buffer, u64 BufferLength ) { DARC_FILEHEAD *FileH ; + char KeyStringBuffer[ DXA_KEY_STRING_MAXLENGTH ] ; + size_t KeyStringBufferBytes ; + unsigned char lKey[ DXA_KEY_BYTES ] ; + DARC_DIRECTORY *Directory ; + void *HuffDataBuffer = NULL ; // 指定のファイルの情報を得る - FileH = this->GetFileInfo( FilePath ) ; + FileH = this->GetFileInfo( FilePath, &Directory ) ; if( FileH == NULL ) return -1 ; // ファイルサイズが足りているか調べる、足りていないか、バッファ、又はサイズが0だったらサイズを返す @@ -2439,49 +3481,170 @@ s64 DXArchive::LoadFileToMem( const TCHAR *FilePath, void *Buffer, u64 BufferLen { // 圧縮されている場合 - // メモリ上に読み込んでいるかどうかで処理を分岐 - if( MemoryOpenFlag == true ) + // ハフマン圧縮されているかどうかで処理を分岐 + if( FileH->HuffPressDataSize != 0xffffffffffffffff ) { - // メモリ上の圧縮データを解凍する - Decode( (u8 *)this->fp + this->Head.DataStartAddress + FileH->DataAddress, Buffer ) ; + // メモリ上に読み込んでいるかどうかで処理を分岐 + if( MemoryOpenFlag == true ) + { + // ハフマン圧縮を解凍したデータを格納するメモリ領域の確保 + HuffDataBuffer = malloc( ( size_t )FileH->PressDataSize ) ; + if( HuffDataBuffer == NULL ) return -1 ; + + // ハフマン圧縮データを解凍 + Huffman_Decode( (u8 *)this->fp + this->Head.DataStartAddress + FileH->DataAddress, HuffDataBuffer ) ; + + // メモリ上の圧縮データを解凍する + Decode( HuffDataBuffer, Buffer ) ; + + // メモリを解放 + free( HuffDataBuffer ) ; + } + else + { + void *temp ; + + // 圧縮データをメモリに読み込んでから解凍する + + // 圧縮データが収まるメモリ領域の確保 + temp = malloc( ( size_t )( FileH->PressDataSize + FileH->HuffPressDataSize ) ) ; + + // 圧縮データの読み込み + _fseeki64( this->fp, this->Head.DataStartAddress + FileH->DataAddress, SEEK_SET ) ; + + // ファイル個別の鍵を作成 + if( this->NoKey == false ) + { + KeyStringBufferBytes = CreateKeyFileString( ( int )this->Head.CharCodeFormat, this->KeyString, this->KeyStringBytes, Directory, FileH, this->FileP, this->DirP, this->NameP, ( BYTE * )KeyStringBuffer ) ; + KeyCreate( KeyStringBuffer, KeyStringBufferBytes, lKey ) ; + } + + // 暗号化解除読み込み + KeyConvFileRead( temp, FileH->HuffPressDataSize, this->fp, this->NoKey ? NULL : lKey, FileH->DataSize ) ; + + // ハフマン圧縮データを解凍 + Huffman_Decode( temp, ( u8 * )temp + FileH->HuffPressDataSize ) ; + + // 解凍 + Decode( ( u8 * )temp + FileH->HuffPressDataSize, Buffer ) ; + + // メモリの解放 + free( temp ) ; + } } else { - void *temp ; + // メモリ上に読み込んでいるかどうかで処理を分岐 + if( MemoryOpenFlag == true ) + { + // メモリ上の圧縮データを解凍する + Decode( (u8 *)this->fp + this->Head.DataStartAddress + FileH->DataAddress, Buffer ) ; + } + else + { + void *temp ; - // 圧縮データをメモリに読み込んでから解凍する + // 圧縮データをメモリに読み込んでから解凍する - // 圧縮データが収まるメモリ領域の確保 - temp = malloc( ( size_t )FileH->PressDataSize ) ; + // 圧縮データが収まるメモリ領域の確保 + temp = malloc( ( size_t )FileH->PressDataSize ) ; - // 圧縮データの読み込み - _fseeki64( this->fp, this->Head.DataStartAddress + FileH->DataAddress, SEEK_SET ) ; - KeyConvFileRead( temp, FileH->PressDataSize, this->fp, this->Key, FileH->DataSize ) ; + // 圧縮データの読み込み + _fseeki64( this->fp, this->Head.DataStartAddress + FileH->DataAddress, SEEK_SET ) ; + + // ファイル個別の鍵を作成 + if( this->NoKey == false ) + { + KeyStringBufferBytes = CreateKeyFileString( ( int )this->Head.CharCodeFormat, this->KeyString, this->KeyStringBytes, Directory, FileH, this->FileP, this->DirP, this->NameP, ( BYTE * )KeyStringBuffer ) ; + KeyCreate( KeyStringBuffer, KeyStringBufferBytes, lKey ) ; + } + + KeyConvFileRead( temp, FileH->PressDataSize, this->fp, this->NoKey ? NULL : lKey, FileH->DataSize ) ; - // 解凍 - Decode( temp, Buffer ) ; + // 解凍 + Decode( temp, Buffer ) ; - // メモリの解放 - free( temp ) ; + // メモリの解放 + free( temp ) ; + } } } else { // 圧縮されていない場合 - // メモリ上に読み込んでいるかどうかで処理を分岐 - if( MemoryOpenFlag == true ) + // ハフマン圧縮されているかどうかで処理を分岐 + if( FileH->HuffPressDataSize != 0xffffffffffffffff ) { - // コピー - memcpy( Buffer, (u8 *)this->fp + this->Head.DataStartAddress + FileH->DataAddress, ( size_t )FileH->DataSize ) ; + // メモリ上に読み込んでいるかどうかで処理を分岐 + if( MemoryOpenFlag == true ) + { + // ハフマン圧縮を解凍したデータを格納するメモリ領域の確保 + HuffDataBuffer = malloc( ( size_t )FileH->PressDataSize ) ; + if( HuffDataBuffer == NULL ) return -1 ; + + // ハフマン圧縮データを解凍 + Huffman_Decode( (u8 *)this->fp + this->Head.DataStartAddress + FileH->DataAddress, HuffDataBuffer ) ; + + // コピー + memcpy( Buffer, HuffDataBuffer, ( size_t )FileH->DataSize ) ; + + // メモリを解放 + free( HuffDataBuffer ) ; + } + else + { + void *temp ; + + // 圧縮データをメモリに読み込んでから解凍する + + // ハフマン圧縮データが収まるメモリ領域の確保 + temp = malloc( ( size_t )FileH->HuffPressDataSize ) ; + + // 圧縮データの読み込み + _fseeki64( this->fp, this->Head.DataStartAddress + FileH->DataAddress, SEEK_SET ) ; + + // ファイル個別の鍵を作成 + if( this->NoKey == false ) + { + KeyStringBufferBytes = CreateKeyFileString( ( int )this->Head.CharCodeFormat, this->KeyString, this->KeyStringBytes, Directory, FileH, this->FileP, this->DirP, this->NameP, ( BYTE * )KeyStringBuffer ) ; + KeyCreate( KeyStringBuffer, KeyStringBufferBytes, lKey ) ; + } + + // 暗号化解除読み込み + KeyConvFileRead( temp, FileH->HuffPressDataSize, this->fp, this->NoKey ? NULL : lKey, FileH->DataSize ) ; + + // ハフマン圧縮データを解凍 + Huffman_Decode( temp, Buffer ) ; + + // メモリの解放 + free( temp ) ; + } } else { - // ファイルポインタを移動 - _fseeki64( this->fp, this->Head.DataStartAddress + FileH->DataAddress, SEEK_SET ) ; + // メモリ上に読み込んでいるかどうかで処理を分岐 + if( MemoryOpenFlag == true ) + { + // コピー + memcpy( Buffer, (u8 *)this->fp + this->Head.DataStartAddress + FileH->DataAddress, ( size_t )FileH->DataSize ) ; + } + else + { + // ファイルポインタを移動 + _fseeki64( this->fp, this->Head.DataStartAddress + FileH->DataAddress, SEEK_SET ) ; + + // 読み込み + + // ファイル個別の鍵を作成 + if( this->NoKey == false ) + { + KeyStringBufferBytes = CreateKeyFileString( ( int )this->Head.CharCodeFormat, this->KeyString, this->KeyStringBytes, Directory, FileH, this->FileP, this->DirP, this->NameP, ( BYTE * )KeyStringBuffer ) ; + KeyCreate( KeyStringBuffer, KeyStringBufferBytes, lKey ) ; + } - // 読み込み - KeyConvFileRead( Buffer, FileH->DataSize, this->fp, this->Key, FileH->DataSize ) ; + KeyConvFileRead( Buffer, FileH->DataSize, this->fp, this->NoKey ? NULL : lKey, FileH->DataSize ) ; + } } } @@ -2524,7 +3687,7 @@ int DXArchive::GetFileInfo( const TCHAR *FilePath, u64 *PositionP, u64 *SizeP ) } // アーカイブファイル中の指定のファイルを、クラス内のバッファに読み込む -void *DXArchive::LoadFileToCash( const TCHAR *FilePath ) +void *DXArchive::LoadFileToCache( const TCHAR *FilePath ) { s64 FileSize ; @@ -2535,37 +3698,37 @@ void *DXArchive::LoadFileToCash( const TCHAR *FilePath ) if( FileSize < 0 ) return NULL ; // 確保しているキャッシュバッファのサイズよりも大きい場合はバッファを再確保する - if( FileSize > ( s64 )this->CashBufferSize ) + if( FileSize > ( s64 )this->CacheBufferSize ) { // キャッシュバッファのクリア - this->ClearCash() ; + this->ClearCache() ; // キャッシュバッファの再確保 - this->CashBuffer = malloc( ( size_t )FileSize ) ; + this->CacheBuffer = malloc( ( size_t )FileSize ) ; // 確保に失敗した場合は NULL を返す - if( this->CashBuffer == NULL ) return NULL ; + if( this->CacheBuffer == NULL ) return NULL ; // キャッシュバッファのサイズを保存 - this->CashBufferSize = FileSize ; + this->CacheBufferSize = FileSize ; } // ファイルをメモリに読み込む - this->LoadFileToMem( FilePath, this->CashBuffer, FileSize ) ; + this->LoadFileToMem( FilePath, this->CacheBuffer, FileSize ) ; // キャッシュバッファのアドレスを返す - return this->CashBuffer ; + return this->CacheBuffer ; } // キャッシュバッファを開放する -int DXArchive::ClearCash( void ) +int DXArchive::ClearCache( void ) { // メモリが確保されていたら解放する - if( this->CashBuffer != NULL ) + if( this->CacheBuffer != NULL ) { - free( this->CashBuffer ) ; - this->CashBuffer = NULL ; - this->CashBufferSize = 0 ; + free( this->CacheBuffer ) ; + this->CacheBuffer = NULL ; + this->CacheBufferSize = 0 ; } // 終了 @@ -2577,17 +3740,18 @@ int DXArchive::ClearCash( void ) DXArchiveFile *DXArchive::OpenFile( const TCHAR *FilePath ) { DARC_FILEHEAD *FileH ; + DARC_DIRECTORY *Directory ; DXArchiveFile *CDArc = NULL ; // メモリから開いている場合は無効 if( MemoryOpenFlag == true ) return NULL ; // 指定のファイルの情報を得る - FileH = this->GetFileInfo( FilePath ) ; + FileH = this->GetFileInfo( FilePath, &Directory ) ; if( FileH == NULL ) return NULL ; // 新しく DXArchiveFile クラスを作成する - CDArc = new DXArchiveFile( FileH, this ) ; + CDArc = new DXArchiveFile( FileH, Directory, this ) ; // DXArchiveFile クラスのポインタを返す return CDArc ; @@ -2606,32 +3770,100 @@ DXArchiveFile *DXArchive::OpenFile( const TCHAR *FilePath ) // コンストラクタ -DXArchiveFile::DXArchiveFile( DARC_FILEHEAD *FileHead, DXArchive *Archive ) +DXArchiveFile::DXArchiveFile( DARC_FILEHEAD *FileHead, DARC_DIRECTORY *Directory, DXArchive *Archive ) { + void *temp ; + this->FileData = FileHead ; this->Archive = Archive ; this->EOFFlag = FALSE ; this->FilePoint = 0 ; this->DataBuffer = NULL ; + + // 鍵を作成する + if( this->Archive->GetNoKey() == false ) + { + char KeyStringBuffer[ DXA_KEY_STRING_MAXLENGTH ] ; + size_t KeyStringBufferBytes ; + + KeyStringBufferBytes = DXArchive::CreateKeyFileString( + ( int )this->Archive->GetHeader()->CharCodeFormat, + this->Archive->GetKeyString(), + this->Archive->GetKeyStringBytes(), + Directory, + FileHead, + this->Archive->GetFileHeadTable(), + this->Archive->GetDirectoryTable(), + this->Archive->GetNameTable(), + ( BYTE * )KeyStringBuffer + ) ; + DXArchive::KeyCreate( KeyStringBuffer, KeyStringBufferBytes, Key ) ; + } + + // ファイルが圧縮されている場合は解凍データが収まるメモリ領域の確保 + if( FileHead->PressDataSize != 0xffffffffffffffff || + FileHead->HuffPressDataSize != 0xffffffffffffffff ) + { + // 解凍データが収まるメモリ領域の確保 + this->DataBuffer = malloc( ( size_t )FileHead->DataSize ) ; + } // ファイルが圧縮されている場合はここで読み込んで解凍してしまう if( FileHead->PressDataSize != 0xffffffffffffffff ) { - void *temp ; + // ハフマン圧縮もされているかどうかで処理を分岐 + if( FileHead->HuffPressDataSize != 0xffffffffffffffff ) + { + // 圧縮データが収まるメモリ領域の確保 + temp = malloc( ( size_t )( FileHead->PressDataSize + FileHead->HuffPressDataSize ) ) ; - // 圧縮データが収まるメモリ領域の確保 - temp = malloc( ( size_t )FileHead->PressDataSize ) ; + // 圧縮データの読み込み + _fseeki64( this->Archive->GetFilePointer(), this->Archive->GetHeader()->DataStartAddress + FileHead->DataAddress, SEEK_SET ) ; - // 解凍データが収まるメモリ領域の確保 - this->DataBuffer = malloc( ( size_t )FileHead->DataSize ) ; + // 鍵解除読み込み + DXArchive::KeyConvFileRead( temp, FileHead->HuffPressDataSize, this->Archive->GetFilePointer(), this->Archive->GetNoKey() ? NULL : Key, FileHead->DataSize ) ; - // 圧縮データの読み込み - _fseeki64( this->Archive->GetFilePointer(), this->Archive->GetHeader()->DataStartAddress + FileHead->DataAddress, SEEK_SET ) ; - DXArchive::KeyConvFileRead( temp, FileHead->PressDataSize, this->Archive->GetFilePointer(), this->Archive->GetKey(), FileHead->DataSize ) ; + // ハフマン圧縮データを解凍 + Huffman_Decode( temp, ( u8 * )temp + FileHead->HuffPressDataSize ) ; - // 解凍 - DXArchive::Decode( temp, this->DataBuffer ) ; + // 解凍 + DXArchive::Decode( ( u8 * )temp + FileHead->HuffPressDataSize, this->DataBuffer ) ; + + // メモリの解放 + free( temp ) ; + } + else + { + // 圧縮データが収まるメモリ領域の確保 + temp = malloc( ( size_t )FileHead->PressDataSize ) ; + + // 圧縮データの読み込み + _fseeki64( this->Archive->GetFilePointer(), this->Archive->GetHeader()->DataStartAddress + FileHead->DataAddress, SEEK_SET ) ; + DXArchive::KeyConvFileRead( temp, FileHead->PressDataSize, this->Archive->GetFilePointer(), this->Archive->GetNoKey() ? NULL : Key, FileHead->DataSize ) ; + // 解凍 + DXArchive::Decode( temp, this->DataBuffer ) ; + + // メモリの解放 + free( temp ) ; + } + } + else + // ハフマン圧縮だけされているかどうかで処理を分岐 + if( FileHead->HuffPressDataSize != 0xffffffffffffffff ) + { + // 圧縮データが収まるメモリ領域の確保 + temp = malloc( ( size_t )FileHead->HuffPressDataSize ) ; + + // 圧縮データの読み込み + _fseeki64( this->Archive->GetFilePointer(), this->Archive->GetHeader()->DataStartAddress + FileHead->DataAddress, SEEK_SET ) ; + + // 暗号化解除読み込み + DXArchive::KeyConvFileRead( temp, FileHead->HuffPressDataSize, this->Archive->GetFilePointer(), this->Archive->GetNoKey() ? NULL : Key, FileHead->DataSize ) ; + + // ハフマン圧縮データを解凍 + Huffman_Decode( temp, this->DataBuffer ) ; + // メモリの解放 free( temp ) ; } @@ -2676,7 +3908,7 @@ s64 DXArchiveFile::Read( void *Buffer, s64 ReadLength ) // データを読み込む if( this->DataBuffer == NULL ) { - DXArchive::KeyConvFileRead( Buffer, ReadSize, this->Archive->GetFilePointer(), this->Archive->GetKey(), this->FileData->DataSize + this->FilePoint ) ; + DXArchive::KeyConvFileRead( Buffer, ReadSize, this->Archive->GetFilePointer(), this->Archive->GetNoKey() ? NULL : Key, this->FileData->DataSize + this->FilePoint ) ; } else { diff --git a/src/WolfDec/3rdParty/DXArchive.h b/src/WolfDec/3rdParty/DXArchive.h index 4d5764b..6912fc0 100644 --- a/src/WolfDec/3rdParty/DXArchive.h +++ b/src/WolfDec/3rdParty/DXArchive.h @@ -4,13 +4,13 @@ // // Creator : 山田 巧 // Creation Date : 2003/09/11 -// Version : 1.02 +// Version : 1.08 // // ------------------------------------------------------------------------------- // 多重インクルード防止用定義 -#ifndef __DXARCHIVE -#define __DXARCHIVE +#ifndef DX_ARCHIVE_H +#define DX_ARCHIVE_H // include -------------------------------------- #include @@ -67,18 +67,27 @@ #define NULL (0) #endif -#define DXA_HEAD *((u16 *)"DX") // ヘッダ -#define DXA_VER (0x0006) // バージョン -#define DXA_BUFFERSIZE (0x1000000) // アーカイブ作成時に使用するバッファのサイズ -#define DXA_KEYSTR_LENGTH (12) // 鍵文字列の長さ +#define DXA_HEAD *((u16 *)"DX") // ヘッダ +#define DXA_VER (0x0008) // バージョン +#define DXA_VER_MIN (0x0008) // 対応している最低バージョン +#define DXA_BUFFERSIZE (0x1000000) // アーカイブ作成時に使用するバッファのサイズ +#define DXA_KEY_BYTES (7) // 鍵のバイト数 +#define DXA_KEY_STRING_LENGTH (63) // 鍵用文字列の長さ +#define DXA_KEY_STRING_MAXLENGTH (2048) // 鍵用文字列バッファのサイズ + +// フラグ +#define DXA_FLAG_NO_KEY (0x00000001) // 鍵処理無し +#define DXA_FLAG_NO_HEAD_PRESS (0x00000002) // ヘッダの圧縮無し /* バージョンごとの違い 0x0002 DARC_FILEHEAD に PressDataSize を追加 - 0x0004 DARC_HEAD に CodePage を追加 + 0x0004 DARC_HEAD に CharCodeFormat を追加 0x0005 暗号化処理を一部変更 0x0006 64bit化 + 0x0007 暗号化処理を変更( パスワードを指定した場合の解読難度を向上 ) + 0x0008 暗号鍵の長さを56bitに変更 */ /* @@ -115,7 +124,10 @@ typedef struct tagDARC_HEAD u64 FileTableStartAddress ; // ファイルテーブルの先頭アドレス(メンバ変数 FileNameTableStartAddress のアドレスを0とする) u64 DirectoryTableStartAddress ; // ディレクトリテーブルの先頭アドレス(メンバ変数 FileNameTableStartAddress のアドレスを0とする) // アドレス0から配置されている DARC_DIRECTORY 構造体がルートディレクトリ - u64 CodePage ; // ファイル名に使用しているコードページ番号 + u32 CharCodeFormat ; // ファイル名に使用しているコードページ番号 + u32 Flags ; // フラグ( DXA_FLAG_NO_KEY 等 ) + u8 HuffmanEncodeKB ; // ファイルの前後のハフマン圧縮するサイズ( 単位:キロバイト 0xff の場合はすべて圧縮する ) + u8 Reserve[ 15 ] ; // 予約領域 } DARC_HEAD ; // ファイルの時間情報 @@ -138,6 +150,7 @@ typedef struct tagDARC_FILEHEAD // ディレクトリの場合:DARC_HEAD構造体 のメンバ変数 DirectoryTableStartAddress のが示すアドレスをアドレス0とする u64 DataSize ; // ファイルのデータサイズ u64 PressDataSize ; // 圧縮後のデータのサイズ( 0xffffffffffffffff:圧縮されていない ) ( Ver0x0002 で追加された ) + u64 HuffPressDataSize ; // ハフマン圧縮後のデータのサイズ( 0xffffffffffffffff:圧縮されていない ) ( Ver0x0008 で追加された ) } DARC_FILEHEAD ; // ディレクトリ格納情報 @@ -151,6 +164,16 @@ typedef struct tagDARC_DIRECTORY #pragma pack(pop) +// エンコード処理進行状況保存用情報 +typedef struct tagDARC_ENCODEINFO +{ + int TotalFileNum ; // ファイル総数 + int CompFileNum ; // 処理したファイルの数 + unsigned int PrevDispTime ; // 前回状況出力した時間 + TCHAR ProcessFileName[ 2048 ] ; // 現在処理しているファイルの名前 + bool OutputStatus ; // 状況出力を行うかどうか +} DARC_ENCODEINFO ; + // class ---------------------------------------- // アーカイブクラス @@ -165,16 +188,16 @@ public : DATE_RESULT_DRAW, // 日付は同じ } ; - explicit DXArchive(TCHAR *ArchivePath = NULL ) ; + DXArchive(TCHAR *ArchivePath = NULL ) ; ~DXArchive() ; - static int EncodeArchive(TCHAR *OutputFileName, TCHAR **FileOrDirectoryPath, int FileNum, bool Press = false, const char *KeyString = NULL ) ; // アーカイブファイルを作成する - static int EncodeArchiveOneDirectory(TCHAR *OutputFileName, TCHAR *FolderPath, bool Press = false, const char *KeyString = NULL ) ; // アーカイブファイルを作成する(ディレクトリ一個だけ) - static int DecodeArchive(TCHAR *ArchiveName, const TCHAR *OutputPath, const char *KeyString = NULL ) ; // アーカイブファイルを展開する + static int EncodeArchive(TCHAR *OutputFileName, TCHAR **FileOrDirectoryPath, int FileNum, bool Press = false, bool AlwaysHuffman = false, u8 HuffmanEncodeKB = 0, const char *KeyString_ = NULL, bool NoKey = false, bool OutputStatus = true, bool MaxPress = false ) ; // アーカイブファイルを作成する + static int EncodeArchiveOneDirectory(TCHAR *OutputFileName, TCHAR *FolderPath, bool Press = false, bool AlwaysHuffman = false, u8 HuffmanEncodeKB = 0, const char *KeyString_ = NULL, bool NoKey = false, bool OutputStatus = true, bool MaxPress = false ) ; // アーカイブファイルを作成する(ディレクトリ一個だけ) + static int DecodeArchive(TCHAR *ArchiveName, const TCHAR *OutputPath, const char *KeyString_ = NULL ) ; // アーカイブファイルを展開する - int OpenArchiveFile( const TCHAR *ArchivePath, const char *KeyString = NULL ) ; // アーカイブファイルを開く( 0:成功 -1:失敗 ) - int OpenArchiveFileMem( const TCHAR *ArchivePath, const char *KeyString = NULL ) ; // アーカイブファイルを開き最初にすべてメモリ上に読み込んでから処理する( 0:成功 -1:失敗 ) - int OpenArchiveMem( void *ArchiveImage, s64 ArchiveSize, const char *KeyString = NULL ) ; // メモリ上にあるアーカイブファイルイメージを開く( 0:成功 -1:失敗 ) + int OpenArchiveFile( const TCHAR *ArchivePath, const char *KeyString_ = NULL ) ; // アーカイブファイルを開く( 0:成功 -1:失敗 ) + int OpenArchiveFileMem( const TCHAR *ArchivePath, const char *KeyString_ = NULL ) ; // アーカイブファイルを開き最初にすべてメモリ上に読み込んでから処理する( 0:成功 -1:失敗 ) + int OpenArchiveMem( void *ArchiveImage, s64 ArchiveSize, const char *KeyString_ = NULL ) ; // メモリ上にあるアーカイブファイルイメージを開く( 0:成功 -1:失敗 ) int CloseArchiveFile( void ) ; // アーカイブファイルを閉じる s64 LoadFileToMem( const TCHAR *FilePath, void *Buffer, u64 BufferLength ) ; // アーカイブファイル中の指定のファイルをメモリに読み込む( -1:エラー 0以上:ファイルサイズ ) @@ -183,9 +206,8 @@ public : void *GetFileImage( void ) ; // アーカイブファイルをメモリに読み込んだ場合のファイルイメージが格納されている先頭アドレスを取得する( メモリから開いている場合のみ有効、圧縮している場合は、圧縮された状態のデータが格納されているので注意 ) class DXArchiveFile *OpenFile( const TCHAR *FilePath ) ; // アーカイブファイル中の指定のファイルを開き、ファイルアクセス用オブジェクトを作成する( ファイルから開いている場合のみ有効 ) - void * LoadFileToCash( const TCHAR *FilePath ) ; // アーカイブファイル中の指定のファイルを、クラス内のキャッシュバッファに読み込む - void * GetCash( void ) ; // キャッシュバッファのアドレスを取得する - int ClearCash( void ) ; // キャッシュバッファを開放する + void * LoadFileToCache( const TCHAR *FilePath ) ; // アーカイブファイル中の指定のファイルを、クラス内のキャッシュバッファに読み込む + int ClearCache( void ) ; // キャッシュバッファを開放する int ChangeCurrentDir( const TCHAR *DirPath ) ; // アーカイブ内のディレクトリパスを変更する( 0:成功 -1:失敗 ) int GetCurrentDir(TCHAR *DirPathBuffer, int BufferLength ) ; // アーカイブ内のカレントディレクトリパスを取得する @@ -193,25 +215,33 @@ public : // 以下は割と内部で使用 - static void fwrite64( void *Data, s64 Size, FILE *fp ) ; // 標準ストリームにデータを書き込む( 64bit版 ) - static void fread64( void *Buffer, s64 Size, FILE *fp ) ; // 標準ストリームからデータを読み込む( 64bit版 ) - static void NotConv( void *Data , s64 Size ) ; // データを反転させる関数 - static void NotConvFileWrite( void *Data, s64 Size, FILE *fp ) ; // データを反転させてファイルに書き出す関数 - static void NotConvFileRead( void *Data, s64 Size, FILE *fp ) ; // データを反転させてファイルから読み込む関数 - static void KeyCreate( const char *Source, unsigned char *Key ) ; // 鍵文字列を作成 - static void KeyConv( void *Data, s64 Size, s64 Position, unsigned char *Key ) ; // 鍵文字列を使用して Xor 演算( Key は必ず DXA_KEYSTR_LENGTH の長さがなければならない ) - static void KeyConvFileWrite( void *Data, s64 Size, FILE *fp, unsigned char *Key, s64 Position = -1 ) ; // データを鍵文字列を使用して Xor 演算した後ファイルに書き出す関数( Key は必ず DXA_KEYSTR_LENGTH の長さがなければならない ) - static void KeyConvFileRead( void *Data, s64 Size, FILE *fp, unsigned char *Key, s64 Position = -1 ) ; // ファイルから読み込んだデータを鍵文字列を使用して Xor 演算する関数( Key は必ず DXA_KEYSTR_LENGTH の長さがなければならない ) - static DATE_RESULT DateCmp( DARC_FILETIME *date1, DARC_FILETIME *date2 ) ; // どちらが新しいかを比較する - static int Encode( void *Src, u32 SrcSize, void *Dest ) ; // データを圧縮する( 戻り値:圧縮後のデータサイズ ) - static int Decode( void *Src, void *Dest ) ; // データを解凍する( 戻り値:解凍後のデータサイズ ) - - DARC_DIRECTORY *GetCurrentDirectoryInfo( void ) ; // アーカイブ内のカレントディレクトリの情報を取得する - DARC_FILEHEAD *GetFileInfo( const TCHAR *FilePath ) ; // ファイルの情報を得る + static void fwrite64( void *Data, s64 Size, FILE *fp ) ; // 標準ストリームにデータを書き込む( 64bit版 ) + static void fread64( void *Buffer, s64 Size, FILE *fp ) ; // 標準ストリームからデータを読み込む( 64bit版 ) + static void NotConv( void *Data , s64 Size ) ; // データを反転させる関数 + static void NotConvFileWrite( void *Data, s64 Size, FILE *fp ) ; // データを反転させてファイルに書き出す関数 + static void NotConvFileRead( void *Data, s64 Size, FILE *fp ) ; // データを反転させてファイルから読み込む関数 + static size_t CreateKeyFileString( int CharCodeFormat, const char *KeyString, size_t KeyStringBytes, DARC_DIRECTORY *Directory, DARC_FILEHEAD *FileHead, u8 *FileTable, u8 *DirectoryTable, u8 *NameTable, u8 *FileString ) ; // カレントディレクトリにある指定のファイルの鍵用の文字列を作成する、戻り値は文字列の長さ( 単位:Byte )( FileString は DXA_KEY_STRING_MAXLENGTH の長さが必要 ) + static void KeyCreate( const char *Source, size_t SourceBytes, u8 *Key ) ; // 鍵文字列を作成 + static void KeyConv( void *Data, s64 Size, s64 Position, unsigned char *Key ) ; // 鍵文字列を使用して Xor 演算( Key は必ず DXA_KEY_BYTES の長さがなければならない ) + static void KeyConvFileWrite( void *Data, s64 Size, FILE *fp, unsigned char *Key, s64 Position = -1 ) ; // データを鍵文字列を使用して Xor 演算した後ファイルに書き出す関数( Key は必ず DXA_KEY_BYTES の長さがなければならない ) + static void KeyConvFileRead( void *Data, s64 Size, FILE *fp, unsigned char *Key, s64 Position = -1 ) ; // ファイルから読み込んだデータを鍵文字列を使用して Xor 演算する関数( Key は必ず DXA_KEY_BYTES の長さがなければならない ) + static DATE_RESULT DateCmp( DARC_FILETIME *date1, DARC_FILETIME *date2 ) ; // どちらが新しいかを比較する + static int Encode( void *Src, u32 SrcSize, void *Dest, bool OutStatus = true, bool MaxPress = false ) ; // データを圧縮する( 戻り値:圧縮後のデータサイズ ) + static int Decode( void *Src, void *Dest ) ; // データを解凍する( 戻り値:解凍後のデータサイズ ) + static u32 HashCRC32( const void *SrcData, size_t SrcDataSize ) ; // バイナリデータを元に CRC32 のハッシュ値を計算する + + DARC_DIRECTORY *GetCurrentDirectoryInfo( void ) ; // アーカイブ内のカレントディレクトリの情報を取得する + DARC_FILEHEAD *GetFileInfo( const TCHAR *FilePath, DARC_DIRECTORY **DirectoryP = NULL ) ; // ファイルの情報を得る inline DARC_HEAD *GetHeader( void ){ return &Head ; } inline u8 *GetKey( void ){ return Key ; } + inline bool GetNoKey( void ){ return NoKey ; } + inline char *GetKeyString( void ){ return KeyString ; } + inline size_t GetKeyStringBytes( void ){ return KeyStringBytes ; } inline FILE *GetFilePointer( void ){ return fp ; } inline u8 *GetNameP( void ){ return NameP ; } + inline u8 *GetFileHeadTable( void ){ return FileP ; } + inline u8 *GetDirectoryTable( void ){ return DirP ; } + inline u8 *GetNameTable( void ){ return NameP ; } protected : FILE *fp ; // アーカイブファイルのポインタ @@ -219,12 +249,15 @@ protected : u8 *FileP, *DirP, *NameP ; // 各種テーブル(ファイルヘッダ情報テーブル、ディレクトリ情報テーブル、名前情報テーブル)へのポインタ DARC_DIRECTORY *CurrentDirectory ; // カレントディレクトリデータへのポインタ - void *CashBuffer ; // 読み込んだファイルデータを一時的に保存しておくバッファ - u64 CashBufferSize ; // キャッシュバッファに確保しているメモリ容量 + void *CacheBuffer ; // 読み込んだファイルデータを一時的に保存しておくバッファ + u64 CacheBufferSize ; // キャッシュバッファに確保しているメモリ容量 bool MemoryOpenFlag ; // メモリ上のファイルを開いているか、フラグ bool UserMemoryImageFlag ; // ユーザーが展開したメモリイメージを使用しているか、フラグ s64 MemoryImageSize ; // メモリ上のファイルから開いていた場合のイメージのサイズ - u8 Key[DXA_KEYSTR_LENGTH] ; // 鍵文字列 + bool NoKey ; // 鍵処理を行わないかどうか + u8 Key[ DXA_KEY_BYTES ] ; // 鍵 + char KeyString[ DXA_KEY_STRING_LENGTH + 1 ] ; // 鍵文字列 + size_t KeyStringBytes ; // 鍵文字列のバイト数 DARC_HEAD Head ; // アーカイブのヘッダ @@ -245,16 +278,19 @@ protected : u16 PackNum ; } SEARCHDATA ; - static int DirectoryEncode(TCHAR *DirectoryName, u8 *NameP, u8 *DirP, u8 *FileP, DARC_DIRECTORY *ParentDir, SIZESAVE *Size, int DataNumber, FILE *DestP, void *TempBuffer, bool Press, unsigned char *Key ) ; // 指定のディレクトリにあるファイルをアーカイブデータに吐き出す - static int DirectoryDecode( u8 *NameP, u8 *DirP, u8 *FileP, DARC_HEAD *Head, DARC_DIRECTORY *Dir, FILE *ArcP, unsigned char *Key ) ; // 指定のディレクトリデータにあるファイルを展開する + static int DirectoryEncode( int CharCodeFormat, TCHAR *DirectoryName, u8 *NameP, u8 *DirP, u8 *FileP, DARC_DIRECTORY *ParentDir, SIZESAVE *Size, int DataNumber, FILE *DestFp, void *TempBuffer, bool Press, bool MaxPress, bool AlwaysHuffman, u8 HuffmanEncodeKB, const char *KeyString, size_t KeyStringBytes, bool NoKey, char *KeyStringBuffer, DARC_ENCODEINFO *EncodeInfo ) ; // 指定のディレクトリにあるファイルをアーカイブデータに吐き出す + static int DirectoryDecode( u8 *NameP, u8 *DirP, u8 *FileP, DARC_HEAD *Head, DARC_DIRECTORY *Dir, FILE *ArcP, unsigned char *Key, const char *KeyString, size_t KeyStringBytes, bool NoKey, char *KeyStringBuffer ) ; // 指定のディレクトリデータにあるファイルを展開する static int StrICmp( const TCHAR *Str1, const TCHAR *Str2 ) ; // 比較対照の文字列中の大文字を小文字として扱い比較する( 0:等しい 1:違う ) static int ConvSearchData( SEARCHDATA *Dest, const TCHAR *Src, int *Length ) ; // 文字列を検索用のデータに変換( ヌル文字か \ があったら終了 ) static int AddFileNameData( const TCHAR *FileName, u8 *FileNameTable ) ; // ファイル名データを追加する( 戻り値は使用したデータバイト数 ) static TCHAR *GetOriginalFileName( u8 *FileNameTable ) ; // ファイル名データから元のファイル名の文字列を取得する static int GetDirectoryFilePath( const TCHAR *DirectoryPath, TCHAR *FilePathBuffer = NULL ) ; // ディレクトリ内のファイルのパスを取得する( FilePathBuffer は一ファイルに付き256バイトの容量が必要 ) + static void EncodeStatusErase( void ) ; // エンコードの進行状況を表示を消去する + static void EncodeStatusOutput( DARC_ENCODEINFO *EncodeInfo, bool Always = false ) ; // エンコードの進行状況を表示する + static void AnalyseHuffmanEncode( u64 DataSize, u8 HuffmanEncodeKB, u64 *HeadDataSize, u64 *FootDataSize ) ; // ハフマン圧縮をする前後のサイズを取得する int ChangeCurrentDirectoryFast( SEARCHDATA *SearchData ) ; // アーカイブ内のディレクトリパスを変更する( 0:成功 -1:失敗 ) int ChangeCurrentDirectoryBase( const TCHAR *DirectoryPath, bool ErrorIsDirectoryReset, SEARCHDATA *LastSearchData = NULL ) ; // アーカイブ内のディレクトリパスを変更する( 0:成功 -1:失敗 ) - int DirectoryKeyConv( DARC_DIRECTORY *Dir ) ; // 指定のディレクトリデータの暗号化を解除する( 丸ごとメモリに読み込んだ場合用 ) + int DirectoryKeyConv( DARC_DIRECTORY *Dir, char *KeyStringBuffer ) ; // 指定のディレクトリデータの暗号化を解除する( 丸ごとメモリに読み込んだ場合用 ) // 2バイト文字か調べる( TRUE:2バイト文字 FALSE:1バイト文字 ) inline static int CheckMultiByteChar( const TCHAR *Buf ) @@ -262,7 +298,6 @@ protected : return ( (unsigned char)*Buf >= 0x81 && (unsigned char)*Buf <= 0x9F ) || ( (unsigned char)*Buf >= 0xE0 && (unsigned char)*Buf <= 0xFC ) ; } - // ファイル名も一緒になっていると分かっているパス中からファイルパスとディレクトリパスを分割する // フルパスである必要は無い static int GetFilePathAndDirPath(TCHAR *Src, TCHAR *FilePath, TCHAR *DirPath ) ; @@ -277,11 +312,13 @@ protected : DXArchive *Archive ; // アーカイブクラスへのポインタ void *DataBuffer ; // メモリにデータを展開した際のバッファのポインタ + u8 Key[ DXA_KEY_BYTES ] ; // 鍵 + int EOFFlag ; // EOFフラグ u64 FilePoint ; // ファイルポインタ public : - DXArchiveFile( DARC_FILEHEAD *FileHead, DXArchive *Archive ) ; + DXArchiveFile( DARC_FILEHEAD *FileHead, DARC_DIRECTORY *Directory, DXArchive *Archive ) ; ~DXArchiveFile() ; s64 Read( void *Buffer, s64 ReadLength ) ; // ファイルの内容を読み込む @@ -291,10 +328,6 @@ public : s64 Size( void ) ; // ファイルのサイズを取得する inline DARC_FILEHEAD *GetFileData( void ){ return FileData ; } - - DXArchiveFile(DXArchiveFile&) = delete; - void operator=(DXArchiveFile const&t) = delete; - DXArchiveFile(DXArchiveFile&&) = delete; } ; #endif diff --git a/src/WolfDec/3rdParty/DXArchiveVer5.cpp b/src/WolfDec/3rdParty/DXArchiveVer5.cpp index 10dc49e..3896031 100644 --- a/src/WolfDec/3rdParty/DXArchiveVer5.cpp +++ b/src/WolfDec/3rdParty/DXArchiveVer5.cpp @@ -16,11 +16,6 @@ #include #include -// Check if 64 Bit -#if __x86_64__ || _WIN64 -#define B64 -#endif - // define ----------------------------- #define MIN_COMPRESS_VER5 (4) // 最低圧縮バイト数 @@ -37,321 +32,320 @@ WCHAR sjis2utf8_(const char* sjis); // 圧縮時間短縮用リスト typedef struct LZ_LIST_VER5 { - LZ_LIST_VER5 *next, *prev; - u32 address; -} LZ_LIST_VER5; + LZ_LIST_VER5 *next, *prev ; + u32 address ; +} LZ_LIST_VER5 ; // class code ------------------------- // ファイル名も一緒になっていると分かっているパス中からファイルパスとディレクトリパスを分割する // フルパスである必要は無い -int DXArchive_VER5::GetFilePathAndDirPath(TCHAR *Src, TCHAR *FilePath, TCHAR *DirPath) +int DXArchive_VER5::GetFilePathAndDirPath(TCHAR *Src, TCHAR *FilePath, TCHAR *DirPath ) { - int i, Last; - + int i, Last ; + // ファイル名を抜き出す - i = 0; - Last = -1; - while(Src[i] != '\0') + i = 0 ; + Last = -1 ; + while( Src[i] != '\0' ) { - if(CheckMultiByteChar(&Src[i]) == FALSE) + if( CheckMultiByteChar( &Src[i] ) == FALSE ) { - if(Src[i] == '\\' || Src[i] == '/' || Src[i] == '\0' || Src[i] == ':') Last = i; - i++; + if( Src[i] == '\\' || Src[i] == '/' || Src[i] == '\0' || Src[i] == ':' ) Last = i ; + i ++ ; } else { - i += 2; + i += 2 ; } } - if(FilePath != NULL) + if( FilePath != NULL ) { - if(Last != -1) _tcscpy(FilePath, &Src[Last + 1]); - else _tcscpy(FilePath, Src); + if( Last != -1 ) _tcscpy( FilePath, &Src[Last+1] ) ; + else _tcscpy( FilePath, Src ) ; } - + // ディレクトリパスを抜き出す - if(DirPath != NULL) + if( DirPath != NULL ) { - if(Last != -1) + if( Last != -1 ) { - _tcsncpy(DirPath, Src, Last); - DirPath[Last] = '\0'; + _tcsncpy( DirPath, Src, Last ) ; + DirPath[Last] = '\0' ; } else { - DirPath[0] = '\0'; + DirPath[0] = '\0' ; } } - + // 終了 - return 0; + return 0 ; } // ファイルの情報を得る -DARC_FILEHEAD_VER5 *DXArchive_VER5::GetFileInfo(const TCHAR *FilePath) +DARC_FILEHEAD_VER5 *DXArchive_VER5::GetFileInfo( const TCHAR *FilePath ) { - DARC_DIRECTORY_VER5 *OldDir; - DARC_FILEHEAD_VER5 *FileH; - TCHAR *NameData; - int i, j, k, Num, FileHeadSize; - SEARCHDATA SearchData; + DARC_DIRECTORY_VER5 *OldDir ; + DARC_FILEHEAD_VER5 *FileH ; + TCHAR *NameData ; + int i, j, k, Num, FileHeadSize ; + SEARCHDATA SearchData ; // 元のディレクトリを保存しておく - OldDir = this->CurrentDirectory; + OldDir = this->CurrentDirectory ; // ファイルパスに \ が含まれている場合、ディレクトリ変更を行う - if(_tcschr(FilePath, '\\') != NULL) + if( _tcschr( FilePath, '\\' ) != NULL ) { // カレントディレクトリを目的のファイルがあるディレクトリに変更する - if(this->ChangeCurrentDirectoryBase(FilePath, false, &SearchData) >= 0) + if( this->ChangeCurrentDirectoryBase( FilePath, false, &SearchData ) >= 0 ) { // エラーが起きなかった場合はファイル名もディレクトリだったことになるのでエラー - goto ERR; + goto ERR ; } } else { // ファイル名を検索用データに変換する - ConvSearchData(&SearchData, FilePath, NULL); + ConvSearchData( &SearchData, FilePath, NULL ) ; } // 同名のファイルを探す - FileHeadSize = this->Head.Version >= 0x0002 ? sizeof(DARC_FILEHEAD_VER5) : sizeof(DARC_FILEHEAD_VER1); - FileH = (DARC_FILEHEAD_VER5 *)(this->FileP + this->CurrentDirectory->FileHeadAddress); - Num = (s32)this->CurrentDirectory->FileHeadNum; - for(i = 0; i < Num; i++, FileH = (DARC_FILEHEAD_VER5 *)((u8 *)FileH + FileHeadSize)) + FileHeadSize = this->Head.Version >= 0x0002 ? sizeof( DARC_FILEHEAD_VER5 ) : sizeof( DARC_FILEHEAD_VER1 ) ; + FileH = ( DARC_FILEHEAD_VER5 * )( this->FileP + this->CurrentDirectory->FileHeadAddress ) ; + Num = (s32)this->CurrentDirectory->FileHeadNum ; + for( i = 0 ; i < Num ; i ++, FileH = (DARC_FILEHEAD_VER5 *)( (u8 *)FileH + FileHeadSize ) ) { // ディレクトリチェック - if((FileH->Attributes & FILE_ATTRIBUTE_DIRECTORY) != 0) continue; + if( ( FileH->Attributes & FILE_ATTRIBUTE_DIRECTORY ) != 0 ) continue ; // 文字列数とパリティチェック - NameData = this->NameP + FileH->NameAddress; - if(SearchData.PackNum != ((u16 *)NameData)[0] || SearchData.Parity != ((u16 *)NameData)[1]) continue; + NameData = this->NameP + FileH->NameAddress ; + if( SearchData.PackNum != ((u16 *)NameData)[0] || SearchData.Parity != ((u16 *)NameData)[1] ) continue ; // 文字列チェック - NameData += 4; - for(j = 0, k = 0; j < SearchData.PackNum; j++, k += 4) - if(*((u32 *)&SearchData.FileName[k]) != *((u32 *)&NameData[k])) break; + NameData += 4 ; + for( j = 0, k = 0 ; j < SearchData.PackNum ; j ++, k += 4 ) + if( *((u32 *)&SearchData.FileName[k]) != *((u32 *)&NameData[k]) ) break ; // 適合したファイルがあったらここで終了 - if(SearchData.PackNum == j) break; + if( SearchData.PackNum == j ) break ; } // 無かったらエラー - if(i == Num) goto ERR; - + if( i == Num ) goto ERR ; + // ディレクトリを元に戻す - this->CurrentDirectory = OldDir; - + this->CurrentDirectory = OldDir ; + // 目的のファイルのアドレスを返す - return FileH; - -ERR: + return FileH ; + +ERR : // ディレクトリを元に戻す - this->CurrentDirectory = OldDir; - + this->CurrentDirectory = OldDir ; + // エラー終了 - return NULL; - - /* - DARC_DIRECTORY_VER5 *OldCurrent ; - DARC_FILEHEAD_VER5 *File ; - char TPath[MAX_PATH], FPath[MAX_PATH], DPath[MAX_PATH] ; - int i, len ; - - // 一文字もない場合は例外処理 - if( FilePath[0] == '\0' ) return ( DARC_FILEHEAD_VER5 * )FileP ; - - // 元のカレントディレクトリを保存しておく - OldCurrent = CurrentDirectory ; + return NULL ; - // ファイルパスとディレクトリパスを分解する - strcpy( TPath, FilePath ) ; - if( TPath[(len = strlen( TPath ))-1] == '\\' ) TPath[len-1] = '\0' ; - GetFilePathAndDirPath( TPath, FPath, DPath ) ; - - // カレントディレクトリの変更 - if( ChangeCurrentDirectory( DPath ) == -1 ) goto ERR ; - - // ファイルパスの変更 - File = ( DARC_FILEHEAD_VER5 * )( FileP + CurrentDirectory->FileHeadAddress ) ; - for( i = 0 ; - i < (int)CurrentDirectory->FileHeadNum && _tcscmp( ( const char * )( NameP + File->NameAddress ), FPath ) != 0 ; - i ++, File ++ ){} - if( i == (int)CurrentDirectory->FileHeadNum ) goto ERR ; - - // カレントディレクトリを元に戻す - CurrentDirectory = OldCurrent ; +/* + DARC_DIRECTORY_VER5 *OldCurrent ; + DARC_FILEHEAD_VER5 *File ; + char TPath[MAX_PATH], FPath[MAX_PATH], DPath[MAX_PATH] ; + int i, len ; + + // 一文字もない場合は例外処理 + if( FilePath[0] == '\0' ) return ( DARC_FILEHEAD_VER5 * )FileP ; + + // 元のカレントディレクトリを保存しておく + OldCurrent = CurrentDirectory ; + + // ファイルパスとディレクトリパスを分解する + strcpy( TPath, FilePath ) ; + if( TPath[(len = strlen( TPath ))-1] == '\\' ) TPath[len-1] = '\0' ; + GetFilePathAndDirPath( TPath, FPath, DPath ) ; + + // カレントディレクトリの変更 + if( ChangeCurrentDirectory( DPath ) == -1 ) goto ERR ; + + // ファイルパスの変更 + File = ( DARC_FILEHEAD_VER5 * )( FileP + CurrentDirectory->FileHeadAddress ) ; + for( i = 0 ; + i < (int)CurrentDirectory->FileHeadNum && _tcscmp( ( const char * )( NameP + File->NameAddress ), FPath ) != 0 ; + i ++, File ++ ){} + if( i == (int)CurrentDirectory->FileHeadNum ) goto ERR ; - // 見つけたファイルの情報を返す - return File ; + // カレントディレクトリを元に戻す + CurrentDirectory = OldCurrent ; - ERR : - // カレントディレクトリを元に戻す - CurrentDirectory = OldCurrent ; + // 見つけたファイルの情報を返す + return File ; - return NULL ; - */ +ERR : + // カレントディレクトリを元に戻す + CurrentDirectory = OldCurrent ; + + return NULL ; +*/ } // アーカイブ内のカレントディレクトリの情報を取得する -DARC_DIRECTORY_VER5 *DXArchive_VER5::GetCurrentDirectoryInfo(void) +DARC_DIRECTORY_VER5 *DXArchive_VER5::GetCurrentDirectoryInfo( void ) { - return CurrentDirectory; + return CurrentDirectory ; } // どちらが新しいかを比較する -DXArchive_VER5::DATE_RESULT DXArchive_VER5::DateCmp(DARC_FILETIME_VER5 *date1, DARC_FILETIME_VER5 *date2) +DXArchive_VER5::DATE_RESULT DXArchive_VER5::DateCmp( DARC_FILETIME_VER5 *date1, DARC_FILETIME_VER5 *date2 ) { - if(date1->LastWrite == date2->LastWrite) return DATE_RESULT_DRAW; - else if(date1->LastWrite > date2->LastWrite) return DATE_RESULT_LEFTNEW; - else return DATE_RESULT_RIGHTNEW; + if( date1->LastWrite == date2->LastWrite ) return DATE_RESULT_DRAW ; + else if( date1->LastWrite > date2->LastWrite ) return DATE_RESULT_LEFTNEW ; + else return DATE_RESULT_RIGHTNEW ; } // 比較対照の文字列中の大文字を小文字として扱い比較する( 0:等しい 1:違う ) -int DXArchive_VER5::StrICmp(const TCHAR *Str1, const TCHAR *Str2) +int DXArchive_VER5::StrICmp( const TCHAR *Str1, const TCHAR *Str2 ) { - int c1, c2; - - while(*Str1 != '\0' && *Str2 != '\0') + int c1, c2 ; + + while( *Str1 != '\0' && *Str2 != '\0' ) { - if(CheckMultiByteChar(Str1) == FALSE) + if( CheckMultiByteChar( Str1 ) == FALSE ) { - c1 = (*Str1 >= 'A' && *Str1 <= 'Z') ? *Str1 - 'A' + 'a' : *Str1; - c2 = (*Str2 >= 'A' && *Str2 <= 'Z') ? *Str2 - 'A' + 'a' : *Str2; - if(c1 != c2) return 1; - Str1++; - Str2++; + c1 = ( *Str1 >= 'A' && *Str1 <= 'Z' ) ? *Str1 - 'A' + 'a' : *Str1 ; + c2 = ( *Str2 >= 'A' && *Str2 <= 'Z' ) ? *Str2 - 'A' + 'a' : *Str2 ; + if( c1 != c2 ) return 1 ; + Str1 ++ ; + Str2 ++ ; } else { - if(*((unsigned short *)Str1) != *((unsigned short *)Str2)) return 1; - Str1 += 2; - Str2 += 2; + if( *( (unsigned short *)Str1 ) != *( (unsigned short *)Str2 ) ) return 1 ; + Str1 += 2 ; + Str2 += 2 ; } } - if(*Str1 != '\0' || *Str2 != '\0') return 1; + if( *Str1 != '\0' || *Str2 != '\0' ) return 1 ; // 此処まで来て初めて等しい - return 0; + return 0 ; } // 文字列中の英字の小文字を大文字に変換 -int DXArchive_VER5::ConvSearchData(SEARCHDATA *SearchData, const TCHAR *Src, int *Length) +int DXArchive_VER5::ConvSearchData( SEARCHDATA *SearchData, const TCHAR *Src, int *Length ) { - int i, StringLength; - u16 ParityData; + int i, StringLength ; + u16 ParityData ; - ParityData = 0; - for(i = 0; Src[i] != '\0' && Src[i] != '\\'; ) + ParityData = 0 ; + for( i = 0 ; Src[i] != '\0' && Src[i] != '\\' ; ) { - if(CheckMultiByteChar(&Src[i]) == TRUE) + if( CheckMultiByteChar( &Src[i] ) == TRUE ) { // 2バイト文字の場合はそのままコピー - *((u16 *)&SearchData->FileName[i]) = *((u16 *)&Src[i]); - ParityData += (u8)Src[i] + (u8)Src[i + 1]; - i += 2; + *((u16 *)&SearchData->FileName[i]) = *((u16 *)&Src[i]) ; + ParityData += (u8)Src[i] + (u8)Src[i+1] ; + i += 2 ; } else { // 小文字の場合は大文字に変換 - if(Src[i] >= 'a' && Src[i] <= 'z') SearchData->FileName[i] = (u8)Src[i] - 'a' + 'A'; - else SearchData->FileName[i] = Src[i]; - ParityData += (u8)SearchData->FileName[i]; - i++; + if( Src[i] >= 'a' && Src[i] <= 'z' ) SearchData->FileName[i] = (u8)Src[i] - 'a' + 'A' ; + else SearchData->FileName[i] = Src[i] ; + ParityData += (u8)SearchData->FileName[i] ; + i ++ ; } } // 文字列の長さを保存 - if(Length != NULL) *Length = i; + if( Length != NULL ) *Length = i ; // 4の倍数の位置まで0を代入 - StringLength = ((i + 1) + 3) / 4 * 4; - memset(&SearchData->FileName[i], 0, StringLength - i); + StringLength = ( ( i + 1 ) + 3 ) / 4 * 4 ; + memset( &SearchData->FileName[i], 0, StringLength - i ) ; // パリティデータの保存 - SearchData->Parity = ParityData; + SearchData->Parity = ParityData ; // パックデータ数の保存 - SearchData->PackNum = (u16)(StringLength / 4); + SearchData->PackNum = StringLength / 4 ; // 正常終了 - return 0; + return 0 ; } // ファイル名データを追加する( 戻り値は使用したデータバイト数 ) -int DXArchive_VER5::AddFileNameData(const TCHAR *FileName, u8 *FileNameTable) +int DXArchive_VER5::AddFileNameData( const TCHAR *FileName, u8 *FileNameTable ) { - int PackNum; - int Length; - int i; - u32 Parity; + int PackNum, i ; + size_t Length; + u32 Parity ; // サイズをセット - Length = static_cast(_tcslen(FileName)); + Length = _tcslen( FileName ) ; // 一文字も無かった場合の処理 - if(Length == 0) + if( Length == 0 ) { // パック数とパリティ情報のみ保存 - *((u32 *)&FileNameTable[0]) = 0; + *((u32 *)&FileNameTable[0]) = 0 ; // 使用サイズを返す - return 4; + return 4 ; } - Length++; + Length ++ ; - PackNum = (Length + 3) / 4; + PackNum = (int)(( Length + 3 ) / 4) ; // パック数を保存 - *((u16 *)&FileNameTable[0]) = static_cast(PackNum); + *((u16 *)&FileNameTable[0]) = (u16)PackNum ; // バッファの初期化 - memset(&FileNameTable[4], 0, PackNum * 4 * 2); + memset( &FileNameTable[4], 0, PackNum * 4 * 2 ) ; // 文字列をコピー - _tcscpy((TCHAR *)&FileNameTable[4 + PackNum * 4], FileName); + _tcscpy( (TCHAR *)&FileNameTable[4 + PackNum * 4], FileName ) ; // 英字の小文字を全て大文字に変換したファイル名を保存 - Parity = 0; - for(i = 0; FileName[i] != '\0'; ) + Parity = 0 ; + for( i = 0 ; FileName[i] != '\0' ; ) { // 2バイト文字かどうかで処理を分岐 - if(CheckMultiByteChar(&FileName[i]) == TRUE) + if( CheckMultiByteChar( &FileName[i] ) == TRUE ) { // 2バイト文字 - *((u16 *)&FileNameTable[4 + i]) = *((u16 *)&FileName[i]); - Parity += (u8)FileName[i] + (u8)FileName[i + 1]; - i += 2; + *((u16 *)&FileNameTable[4 + i]) = *((u16 *)&FileName[i]) ; + Parity += (u8)FileName[i] + (u8)FileName[i+1] ; + i += 2 ; } else { // 1バイト文字 - if(FileName[i] >= 'a' && FileName[i] <= 'z') + if( FileName[i] >= 'a' && FileName[i] <= 'z' ) { // 小文字の場合は大文字に変換 - FileNameTable[4 + i] = (u8)FileName[i] - 'a' + 'A'; + FileNameTable[4 + i] = (u8)FileName[i] - 'a' + 'A' ; } else { // そうではない場合は普通にコピー - FileNameTable[4 + i] = (u8)FileName[i]; + FileNameTable[4 + i] = (u8)FileName[i] ; } - Parity += FileNameTable[4 + i]; - i++; + Parity += FileNameTable[4 + i] ; + i ++ ; } } // パリティ情報を保存 - *((u16 *)&FileNameTable[2]) = (u16)Parity; + *((u16 *)&FileNameTable[2]) = (u16)Parity ; // 使用したサイズを返す - return PackNum * 4 * 2 + 4; + return PackNum * 4 * 2 + 4 ; } // ファイル名データから元のファイル名の文字列を取得する -TCHAR *DXArchive_VER5::GetOriginalFileName(u8 *FileNameTable) +TCHAR *DXArchive_VER5::GetOriginalFileName( u8 *FileNameTable ) { const char *pName = ((char *)FileNameTable + *((u16 *)&FileNameTable[0]) * 4 + 4); @@ -381,34 +375,34 @@ TCHAR *DXArchive_VER5::GetOriginalFileName(u8 *FileNameTable) } // データを反転させる関数 -void DXArchive_VER5::NotConv(void *Data, int Size) +void DXArchive_VER5::NotConv( void *Data , int Size ) { - int DwordNum; - int ByteNum; + int DwordNum ; + int ByteNum ; - DwordNum = Size / 4; - ByteNum = Size - DwordNum * 4; + DwordNum = Size / 4 ; + ByteNum = Size - DwordNum * 4 ; #ifndef INLINE_ASM { - // int i ; - DWORD *dd; - // for( int i = 0 ; i < Size ; i ++ ) ( ( BYTE * )Data )[i] = ~( ( BYTE * )Data )[i] ; +// int i ; + DWORD *dd ; +// for( int i = 0 ; i < Size ; i ++ ) ( ( BYTE * )Data )[i] = ~( ( BYTE * )Data )[i] ; - dd = (DWORD *)Data; - if(DwordNum != 0) + dd = ( DWORD * )Data ; + if( DwordNum != 0 ) { do { - *dd++ = ~*dd; - } while(--DwordNum); + *dd++ = ~*dd ; + }while( --DwordNum ) ; } - if(ByteNum != 0) + if( ByteNum != 0 ) { do { - *((BYTE *)dd) = ~*((BYTE *)dd); - dd = (DWORD *)(((BYTE *)dd) + 1); - } while(--ByteNum); + *((BYTE *)dd) = ~*((BYTE *)dd) ; + dd = (DWORD *)(((BYTE *)dd) + 1) ; + }while( --ByteNum ) ; } } #else @@ -418,117 +412,117 @@ void DXArchive_VER5::NotConv(void *Data, int Size) MOV ECX, DwordNum CMP ECX, 0 JE LABEL1 - LOOP1 : +LOOP1: MOV EAX, [ESI] - NOT EAX - MOV[ESI], EAX - ADD ESI, 4 - DEC ECX - JNZ LOOP1 + NOT EAX + MOV [ESI], EAX + ADD ESI, 4 + DEC ECX + JNZ LOOP1 - LABEL1 : +LABEL1: MOV ECX, ByteNum - CMP ECX, 0 - JE END - LOOP2 : + CMP ECX, 0 + JE END +LOOP2: MOV AL, [ESI] - NOT AL - MOV[ESI], AL - INC ESI - DEC ECX - JNZ LOOP2 - END : - }; + NOT AL + MOV [ESI], AL + INC ESI + DEC ECX + JNZ LOOP2 +END: + } ; #endif } // データを反転させてファイルに書き出す関数 -void DXArchive_VER5::NotConvFileWrite(void *Data, int Size, FILE *fp) +void DXArchive_VER5::NotConvFileWrite( void *Data, int Size, FILE *fp ) { // データを反転する - NotConv(Data, Size); + NotConv( Data, Size ) ; // 書き出す - fwrite(Data, Size, 1, fp); + fwrite( Data, Size, 1, fp ) ; // 再び反転 - NotConv(Data, Size); + NotConv( Data, Size ) ; } // データを反転させてファイルから読み込む関数 -void DXArchive_VER5::NotConvFileRead(void *Data, int Size, FILE *fp) +void DXArchive_VER5::NotConvFileRead( void *Data, int Size, FILE *fp ) { // 読み込む - fread(Data, 1, Size, fp); + fread( Data, 1, Size, fp ) ; // データを反転 - NotConv(Data, Size); + NotConv( Data, Size ) ; } // 鍵文字列を作成 -void DXArchive_VER5::KeyCreate(const char *Source, unsigned char *Key) +void DXArchive_VER5::KeyCreate( const char *Source, unsigned char *Key ) { - size_t Len; + size_t Len ; - if(Source == NULL) + if( Source == NULL ) { - memset(Key, 0xaa, DXA_KEYSTR_LENGTH_VER5); + memset( Key, 0xaaaaaaaa, DXA_KEYSTR_LENGTH_VER5 ) ; } else { - Len = strlen(Source); - if(Len > DXA_KEYSTR_LENGTH_VER5) + Len = strlen( Source ) ; + if( Len > DXA_KEYSTR_LENGTH_VER5 ) { - memcpy(Key, Source, DXA_KEYSTR_LENGTH_VER5); + memcpy( Key, Source, DXA_KEYSTR_LENGTH_VER5 ) ; } else { // 鍵文字列が DXA_KEYSTR_LENGTH_VER5 より短かったらループする - size_t i; - - for(i = 0; i + Len <= DXA_KEYSTR_LENGTH_VER5; i += Len) - memcpy(Key + i, Source, Len); - if(i < DXA_KEYSTR_LENGTH_VER5) - memcpy(Key + i, Source, DXA_KEYSTR_LENGTH_VER5 - i); - } - } - - Key[0] = ~Key[0]; - Key[1] = (Key[1] >> 4) | (Key[1] << 4); - Key[2] = Key[2] ^ 0x8a; - Key[3] = ~((Key[3] >> 4) | (Key[3] << 4)); - Key[4] = ~Key[4]; - Key[5] = Key[5] ^ 0xac; - Key[6] = ~Key[6]; - Key[7] = ~((Key[7] >> 3) | (Key[7] << 5)); - Key[8] = (Key[8] >> 5) | (Key[8] << 3); - Key[9] = Key[9] ^ 0x7f; - Key[10] = ((Key[10] >> 4) | (Key[10] << 4)) ^ 0xd6; - Key[11] = Key[11] ^ 0xcc; + size_t i ; + + for( i = 0 ; i + Len <= DXA_KEYSTR_LENGTH_VER5 ; i += Len ) + memcpy( Key + i, Source, Len ) ; + if( i < DXA_KEYSTR_LENGTH_VER5 ) + memcpy( Key + i, Source, DXA_KEYSTR_LENGTH_VER5 - i ) ; + } + } + + Key[0] = ~Key[0] ; + Key[1] = ( Key[1] >> 4 ) | ( Key[1] << 4 ) ; + Key[2] = Key[2] ^ 0x8a ; + Key[3] = ~( ( Key[3] >> 4 ) | ( Key[3] << 4 ) ) ; + Key[4] = ~Key[4] ; + Key[5] = Key[5] ^ 0xac ; + Key[6] = ~Key[6] ; + Key[7] = ~( ( Key[7] >> 3 ) | ( Key[7] << 5 ) ) ; + Key[8] = ( Key[8] >> 5 ) | ( Key[8] << 3 ) ; + Key[9] = Key[9] ^ 0x7f ; + Key[10] = ( ( Key[10] >> 4 ) | ( Key[10] << 4 ) ) ^ 0xd6 ; + Key[11] = Key[11] ^ 0xcc ; } // 鍵文字列を使用して Xor 演算( Key は必ず DXA_KEYSTR_LENGTH_VER5 の長さがなければならない ) -void DXArchive_VER5::KeyConv(void *Data, int Size, int Position, unsigned char *Key) +void DXArchive_VER5::KeyConv( void *Data, int Size, int Position, unsigned char *Key ) { - Position %= DXA_KEYSTR_LENGTH_VER5; + Position %= DXA_KEYSTR_LENGTH_VER5 ; #ifndef INLINE_ASM - int i, j; + int i, j ; - j = Position; - for(i = 0; i < Size; i++) + j = Position ; + for( i = 0 ; i < Size ; i ++ ) { - ((u8 *)Data)[i] ^= Key[j]; + ((u8 *)Data)[i] ^= Key[j] ; - j++; - if(j == DXA_KEYSTR_LENGTH_VER5) j = 0; + j ++ ; + if( j == DXA_KEYSTR_LENGTH_VER5 ) j = 0 ; } #else - u32 DataT, SizeT; - SizeT = (u32)Size; - DataT = (u32)Data; - Position %= DXA_KEYSTR_LENGTH_VER5; + u32 DataT, SizeT ; + SizeT = (u32)Size ; + DataT = (u32)Data ; + Position %= DXA_KEYSTR_LENGTH_VER5 ; __asm { MOV EDI, DataT @@ -545,98 +539,98 @@ void DXArchive_VER5::KeyConv(void *Data, int Size, int Position, unsigned char * MOV EDX, SizeT - LOOP1 : - MOV BL, [ESI + EAX] - XOR[EDI], BL - INC EAX - INC EDI - DEC EDX - CMP EAX, DXA_KEYSTR_LENGTH_VER5 - JB LOOP1 - XOR ECX, ECX - MOV Position, ECX - - MOV SizeT, EDX - CMP EDX, DXA_KEYSTR_LENGTH_VER5 - JB LABEL2 - - - LABEL1 : +LOOP1: + MOV BL, [ESI+EAX] + XOR [EDI], BL + INC EAX + INC EDI + DEC EDX + CMP EAX, DXA_KEYSTR_LENGTH_VER5 + JB LOOP1 + XOR ECX, ECX + MOV Position, ECX + + MOV SizeT, EDX + CMP EDX, DXA_KEYSTR_LENGTH_VER5 + JB LABEL2 + + +LABEL1: MOV EAX, SizeT - XOR EDX, EDX - MOV ECX, DXA_KEYSTR_LENGTH_VER5 - DIV ECX - MOV SizeT, EDX - MOV ECX, EAX - - MOV EAX, [ESI] - MOV EBX, [ESI + 4] - MOV EDX, [ESI + 8] - LOOP2: - XOR[EDI], EAX - XOR[EDI + 4], EBX - XOR[EDI + 8], EDX - ADD EDI, DXA_KEYSTR_LENGTH_VER5 - DEC ECX - JNZ LOOP2 - - - LABEL2 : + XOR EDX, EDX + MOV ECX, DXA_KEYSTR_LENGTH_VER5 + DIV ECX + MOV SizeT, EDX + MOV ECX, EAX + + MOV EAX, [ESI] + MOV EBX, [ESI+4] + MOV EDX, [ESI+8] +LOOP2: + XOR [EDI], EAX + XOR [EDI+4], EBX + XOR [EDI+8], EDX + ADD EDI, DXA_KEYSTR_LENGTH_VER5 + DEC ECX + JNZ LOOP2 + + +LABEL2: MOV EDX, SizeT - CMP EDX, 0 - JE LABEL3 - - - MOV EAX, Position - LOOP3 : - MOV BL, [ESI + EAX] - XOR[EDI], BL - INC EAX - CMP EAX, DXA_KEYSTR_LENGTH_VER5 - JNE LABEL4 - XOR EAX, EAX - LABEL4 : + CMP EDX, 0 + JE LABEL3 + + + MOV EAX, Position +LOOP3: + MOV BL, [ESI+EAX] + XOR [EDI], BL + INC EAX + CMP EAX, DXA_KEYSTR_LENGTH_VER5 + JNE LABEL4 + XOR EAX, EAX +LABEL4: INC EDI - DEC EDX - JNZ LOOP3 - LABEL3 : - }; + DEC EDX + JNZ LOOP3 +LABEL3: + } ; #endif } // データを鍵文字列を使用して Xor 演算した後ファイルに書き出す関数( Key は必ず DXA_KEYSTR_LENGTH_VER5 の長さがなければならない ) -void DXArchive_VER5::KeyConvFileWrite(void *Data, int Size, FILE *fp, unsigned char *Key, int Position) +void DXArchive_VER5::KeyConvFileWrite( void *Data, int Size, FILE *fp, unsigned char *Key, int Position ) { - int pos; + int pos ; // ファイルの位置を取得しておく - if(Position == -1) pos = ftell(fp); - else pos = Position; + if( Position == -1 ) pos = ftell( fp ) ; + else pos = Position ; // データを鍵文字列を使って Xor 演算する - KeyConv(Data, Size, pos, Key); + KeyConv( Data, Size, pos, Key ) ; // 書き出す - fwrite(Data, Size, 1, fp); + fwrite( Data, Size, 1, fp ) ; // 再び Xor 演算 - KeyConv(Data, Size, pos, Key); + KeyConv( Data, Size, pos, Key ) ; } // ファイルから読み込んだデータを鍵文字列を使用して Xor 演算する関数( Key は必ず DXA_KEYSTR_LENGTH_VER5 の長さがなければならない ) -void DXArchive_VER5::KeyConvFileRead(void *Data, int Size, FILE *fp, unsigned char *Key, int Position) +void DXArchive_VER5::KeyConvFileRead( void *Data, int Size, FILE *fp, unsigned char *Key, int Position ) { - int pos; + int pos ; // ファイルの位置を取得しておく - if(Position == -1) pos = ftell(fp); - else pos = Position; + if( Position == -1 ) pos = ftell( fp ) ; + else pos = Position ; // 読み込む - fread(Data, 1, Size, fp); + fread( Data, 1, Size, fp ) ; // データを鍵文字列を使って Xor 演算 - KeyConv(Data, Size, pos, Key); + KeyConv( Data, Size, pos, Key ) ; } /* @@ -648,1403 +642,1387 @@ int DXArchive_VER5::CheckMultiByteChar( const char *Buf ) */ // 指定のディレクトリにあるファイルをアーカイブデータに吐き出す -int DXArchive_VER5::DirectoryEncode(TCHAR *DirectoryName, u8 *NameP, u8 *DirP, u8 *FileP, DARC_DIRECTORY_VER5 *ParentDir, SIZESAVE *Size, int DataNumber, FILE *DestP, void *TempBuffer, bool Press, unsigned char *Key) +int DXArchive_VER5::DirectoryEncode( TCHAR *DirectoryName, u8 *NameP, u8 *DirP, u8 *FileP, DARC_DIRECTORY_VER5 *ParentDir, SIZESAVE *Size, int DataNumber, FILE *DestP, void *TempBuffer, bool Press, unsigned char *Key ) { - TCHAR DirPath[MAX_PATH]; - WIN32_FIND_DATA FindData; - HANDLE FindHandle; - DARC_DIRECTORY_VER5 Dir; - DARC_FILEHEAD_VER5 File; + TCHAR DirPath[MAX_PATH] ; + WIN32_FIND_DATA FindData ; + HANDLE FindHandle ; + DARC_DIRECTORY_VER5 Dir ; + DARC_FILEHEAD_VER5 File ; // ディレクトリの情報を得る - FindHandle = FindFirstFile(DirectoryName, &FindData); - if(FindHandle == INVALID_HANDLE_VALUE) return 0; - + FindHandle = FindFirstFile( DirectoryName, &FindData ) ; + if( FindHandle == INVALID_HANDLE_VALUE ) return 0 ; + // ディレクトリ情報を格納するファイルヘッダをセットする { - File.NameAddress = Size->NameSize; - File.Time.Create = (((LONGLONG)FindData.ftCreationTime.dwHighDateTime) << 32) + FindData.ftCreationTime.dwLowDateTime; - File.Time.LastAccess = (((LONGLONG)FindData.ftLastAccessTime.dwHighDateTime) << 32) + FindData.ftLastAccessTime.dwLowDateTime; - File.Time.LastWrite = (((LONGLONG)FindData.ftLastWriteTime.dwHighDateTime) << 32) + FindData.ftLastWriteTime.dwLowDateTime; - File.Attributes = FindData.dwFileAttributes; - File.DataAddress = Size->DirectorySize; - File.DataSize = 0; - File.PressDataSize = 0xffffffff; + File.NameAddress = Size->NameSize ; + File.Time.Create = ( ( ( LONGLONG )FindData.ftCreationTime.dwHighDateTime ) << 32 ) + FindData.ftCreationTime.dwLowDateTime ; + File.Time.LastAccess = ( ( ( LONGLONG )FindData.ftLastAccessTime.dwHighDateTime ) << 32 ) + FindData.ftLastAccessTime.dwLowDateTime ; + File.Time.LastWrite = ( ( ( LONGLONG )FindData.ftLastWriteTime.dwHighDateTime ) << 32 ) + FindData.ftLastWriteTime.dwLowDateTime ; + File.Attributes = FindData.dwFileAttributes ; + File.DataAddress = Size->DirectorySize ; + File.DataSize = 0 ; + File.PressDataSize = 0xffffffff ; } // ディレクトリ名を書き出す - Size->NameSize += AddFileNameData(FindData.cFileName, NameP + Size->NameSize); + Size->NameSize += AddFileNameData( FindData.cFileName, NameP + Size->NameSize ) ; // ディレクトリ情報が入ったファイルヘッダを書き出す - memcpy(FileP + ParentDir->FileHeadAddress + DataNumber * sizeof(DARC_FILEHEAD_VER5), - &File, sizeof(DARC_FILEHEAD_VER5)); + memcpy( FileP + ParentDir->FileHeadAddress + DataNumber * sizeof( DARC_FILEHEAD_VER5 ), + &File, sizeof( DARC_FILEHEAD_VER5 ) ) ; // Find ハンドルを閉じる - FindClose(FindHandle); + FindClose( FindHandle ) ; // 指定のディレクトリにカレントディレクトリを移す - GetCurrentDirectory(MAX_PATH, DirPath); - SetCurrentDirectory(DirectoryName); + GetCurrentDirectory( MAX_PATH, DirPath ) ; + SetCurrentDirectory( DirectoryName ) ; // ディレクトリ情報のセット { - Dir.DirectoryAddress = ParentDir->FileHeadAddress + DataNumber * sizeof(DARC_FILEHEAD_VER5); - Dir.FileHeadAddress = Size->FileSize; + Dir.DirectoryAddress = ParentDir->FileHeadAddress + DataNumber * sizeof( DARC_FILEHEAD_VER5 ) ; + Dir.FileHeadAddress = Size->FileSize ; // 親ディレクトリの情報位置をセット - if(ParentDir->DirectoryAddress != 0xffffffff && ParentDir->DirectoryAddress != 0) + if( ParentDir->DirectoryAddress != 0xffffffff && ParentDir->DirectoryAddress != 0 ) { - Dir.ParentDirectoryAddress = ((DARC_FILEHEAD_VER5 *)(FileP + ParentDir->DirectoryAddress))->DataAddress; + Dir.ParentDirectoryAddress = ((DARC_FILEHEAD_VER5 *)( FileP + ParentDir->DirectoryAddress ))->DataAddress ; } else { - Dir.ParentDirectoryAddress = 0; + Dir.ParentDirectoryAddress = 0 ; } // ディレクトリ中のファイルの数を取得する - Dir.FileHeadNum = GetDirectoryFilePath(TEXT(""), NULL); + Dir.FileHeadNum = GetDirectoryFilePath( TEXT(""), NULL ) ; } // ディレクトリの情報を出力する - memcpy(DirP + Size->DirectorySize, &Dir, sizeof(DARC_DIRECTORY_VER5)); + memcpy( DirP + Size->DirectorySize, &Dir, sizeof( DARC_DIRECTORY_VER5 ) ) ; // アドレスを推移させる - Size->DirectorySize += sizeof(DARC_DIRECTORY_VER5); - Size->FileSize += sizeof(DARC_FILEHEAD_VER5) * Dir.FileHeadNum; - + Size->DirectorySize += sizeof( DARC_DIRECTORY_VER5 ) ; + Size->FileSize += sizeof( DARC_FILEHEAD_VER5 ) * Dir.FileHeadNum ; + // ファイルが何も無い場合はここで終了 - if(Dir.FileHeadNum == 0) + if( Dir.FileHeadNum == 0 ) { // もとのディレクトリをカレントディレクトリにセット - SetCurrentDirectory(DirPath); - return 0; + SetCurrentDirectory( DirPath ) ; + return 0 ; } // ファイル情報を出力する { - int i; - - i = 0; - + int i ; + + i = 0 ; + // 列挙開始 - FindHandle = FindFirstFile(TEXT("*"), &FindData); + FindHandle = FindFirstFile( TEXT("*"), &FindData ) ; do { // 上のディレクトリに戻ったりするためのパスは無視する - if(_tcscmp(FindData.cFileName, TEXT(".")) == 0 || _tcscmp(FindData.cFileName, TEXT("..")) == 0) continue; + if( _tcscmp( FindData.cFileName, TEXT(".") ) == 0 || _tcscmp( FindData.cFileName, TEXT("..") ) == 0 ) continue ; // ファイルではなく、ディレクトリだった場合は再帰する - if(FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) + if( FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) { // ディレクトリだった場合の処理 - if(DirectoryEncode(FindData.cFileName, NameP, DirP, FileP, &Dir, Size, i, DestP, TempBuffer, Press, Key) < 0) return -1; + if( DirectoryEncode( FindData.cFileName, NameP, DirP, FileP, &Dir, Size, i, DestP, TempBuffer, Press, Key ) < 0 ) return -1 ; } else { // ファイルだった場合の処理 // ファイルのデータをセット - File.NameAddress = Size->NameSize; - File.Time.Create = (((LONGLONG)FindData.ftCreationTime.dwHighDateTime) << 32) + FindData.ftCreationTime.dwLowDateTime; - File.Time.LastAccess = (((LONGLONG)FindData.ftLastAccessTime.dwHighDateTime) << 32) + FindData.ftLastAccessTime.dwLowDateTime; - File.Time.LastWrite = (((LONGLONG)FindData.ftLastWriteTime.dwHighDateTime) << 32) + FindData.ftLastWriteTime.dwLowDateTime; - File.Attributes = FindData.dwFileAttributes; - File.DataAddress = Size->DataSize; - File.DataSize = FindData.nFileSizeLow; - File.PressDataSize = 0xffffffff; + File.NameAddress = Size->NameSize ; + File.Time.Create = ( ( ( LONGLONG )FindData.ftCreationTime.dwHighDateTime ) << 32 ) + FindData.ftCreationTime.dwLowDateTime ; + File.Time.LastAccess = ( ( ( LONGLONG )FindData.ftLastAccessTime.dwHighDateTime ) << 32 ) + FindData.ftLastAccessTime.dwLowDateTime ; + File.Time.LastWrite = ( ( ( LONGLONG )FindData.ftLastWriteTime.dwHighDateTime ) << 32 ) + FindData.ftLastWriteTime.dwLowDateTime ; + File.Attributes = FindData.dwFileAttributes ; + File.DataAddress = Size->DataSize ; + File.DataSize = FindData.nFileSizeLow ; + File.PressDataSize = 0xffffffff ; // ファイル名を書き出す - Size->NameSize += AddFileNameData(FindData.cFileName, NameP + Size->NameSize); - + Size->NameSize += AddFileNameData( FindData.cFileName, NameP + Size->NameSize ) ; + // ファイルデータを書き出す - if((u64)FindData.nFileSizeLow + ((u64)FindData.nFileSizeHigh << 32) != 0) + if( (u64)FindData.nFileSizeLow + ( (u64)FindData.nFileSizeHigh << 32 ) != 0 ) { - FILE *SrcP; - u32 FileSize, WriteSize, MoveSize; + FILE *SrcP ; + u32 FileSize, WriteSize, MoveSize ; // ファイルを開く - SrcP = _tfopen(FindData.cFileName, TEXT("rb")); - + SrcP = _tfopen( FindData.cFileName, TEXT("rb") ) ; + // サイズを得る - fseek(SrcP, 0, SEEK_END); - FileSize = ftell(SrcP); - fseek(SrcP, 0, SEEK_SET); - + fseek( SrcP, 0, SEEK_END ) ; + FileSize = ftell( SrcP ) ; + fseek( SrcP, 0, SEEK_SET ) ; + // ファイルサイズが 10MB 以下の場合で、圧縮の指定がある場合は圧縮を試みる - if(Press == true && (u64)FindData.nFileSizeLow + ((u64)FindData.nFileSizeHigh << 32) < 10 * 1024 * 1024) + if( Press == true && (u64)FindData.nFileSizeLow + ( (u64)FindData.nFileSizeHigh << 32 ) < 10 * 1024 * 1024 ) { - void *SrcBuf, *DestBuf; + void *SrcBuf, *DestBuf ; u32 DestSize; size_t Len; - + // 一部のファイル形式の場合は予め弾く - if((Len = _tcslen(FindData.cFileName)) > 4) + if( ( Len = _tcslen( FindData.cFileName ) ) > 4 ) { - TCHAR *sp; - - sp = &FindData.cFileName[Len - 3]; - if(StrICmp(sp, TEXT("wav")) == 0 || - StrICmp(sp, TEXT("jpg")) == 0 || - StrICmp(sp, TEXT("png")) == 0 || - StrICmp(sp, TEXT("mpg")) == 0 || - StrICmp(sp, TEXT("mp3")) == 0 || - StrICmp(sp, TEXT("ogg")) == 0 || - StrICmp(sp, TEXT("wmv")) == 0 || - StrICmp(sp - 1, TEXT("jpeg")) == 0) goto NOPRESS; + TCHAR *sp ; + + sp = &FindData.cFileName[Len-3] ; + if( StrICmp( sp, TEXT("wav") ) == 0 || + StrICmp( sp, TEXT("jpg") ) == 0 || + StrICmp( sp, TEXT("png") ) == 0 || + StrICmp( sp, TEXT("mpg") ) == 0 || + StrICmp( sp, TEXT("mp3") ) == 0 || + StrICmp( sp, TEXT("ogg") ) == 0 || + StrICmp( sp, TEXT("wmv") ) == 0 || + StrICmp( sp - 1, TEXT("jpeg") ) == 0 ) goto NOPRESS ; } - + // データが丸ごと入るメモリ領域の確保 - SrcBuf = malloc(FileSize + FileSize * 2 + 64); - DestBuf = (u8 *)SrcBuf + FileSize; - + SrcBuf = malloc( FileSize + FileSize * 2 + 64 ) ; + DestBuf = (u8 *)SrcBuf + FileSize ; + // ファイルを丸ごと読み込む - fread(SrcBuf, FileSize, 1, SrcP); - + fread( SrcBuf, FileSize, 1, SrcP ) ; + // 圧縮 - DestSize = Encode(SrcBuf, FileSize, DestBuf); - + DestSize = Encode( SrcBuf, FileSize, DestBuf ) ; + // 殆ど圧縮出来なかった場合は圧縮無しでアーカイブする - if((f64)DestSize / (f64)FileSize > 0.90) + if( (f64)DestSize / (f64)FileSize > 0.90 ) { - fseek(SrcP, 0L, SEEK_SET); - free(SrcBuf); - goto NOPRESS; + fseek( SrcP, 0L, SEEK_SET ) ; + free( SrcBuf ) ; + goto NOPRESS ; } - + // 圧縮データを反転して書き出す - WriteSize = (DestSize + 3) / 4 * 4; - KeyConvFileWrite(DestBuf, WriteSize, DestP, Key, File.DataSize); - + WriteSize = ( DestSize + 3 ) / 4 * 4 ; + KeyConvFileWrite( DestBuf, WriteSize, DestP, Key, File.DataSize ) ; + // メモリの解放 - free(SrcBuf); - + free( SrcBuf ) ; + // 圧縮データのサイズを保存する - File.PressDataSize = DestSize; + File.PressDataSize = DestSize ; } else { -NOPRESS: +NOPRESS: // 転送開始 - WriteSize = 0; - while(WriteSize < FileSize) + WriteSize = 0 ; + while( WriteSize < FileSize ) { // 転送サイズ決定 - MoveSize = DXA_BUFFERSIZE_VER5 < FileSize - WriteSize ? DXA_BUFFERSIZE_VER5 : FileSize - WriteSize; - MoveSize = (MoveSize + 3) / 4 * 4; // サイズは4の倍数に合わせる - + MoveSize = DXA_BUFFERSIZE_VER5 < FileSize - WriteSize ? DXA_BUFFERSIZE_VER5 : FileSize - WriteSize ; + MoveSize = ( MoveSize + 3 ) / 4 * 4 ; // サイズは4の倍数に合わせる + // ファイルの反転読み込み - KeyConvFileRead(TempBuffer, MoveSize, SrcP, Key, File.DataSize + WriteSize); + KeyConvFileRead( TempBuffer, MoveSize, SrcP, Key, File.DataSize + WriteSize ) ; // 書き出し - fwrite(TempBuffer, MoveSize, 1, DestP); - + fwrite( TempBuffer, MoveSize, 1, DestP ) ; + // 書き出しサイズの加算 - WriteSize += MoveSize; + WriteSize += MoveSize ; } } - + // 書き出したファイルを閉じる - fclose(SrcP); - + fclose( SrcP ) ; + // データサイズの加算 - Size->DataSize += WriteSize; + Size->DataSize += WriteSize ; } - + // ファイルヘッダを書き出す - memcpy(FileP + Dir.FileHeadAddress + sizeof(DARC_FILEHEAD_VER5) * i, &File, sizeof(DARC_FILEHEAD_VER5)); + memcpy( FileP + Dir.FileHeadAddress + sizeof( DARC_FILEHEAD_VER5 ) * i, &File, sizeof( DARC_FILEHEAD_VER5 ) ) ; } - - i++; - } while(FindNextFile(FindHandle, &FindData) != 0); - + + i ++ ; + } + while( FindNextFile( FindHandle, &FindData ) != 0 ) ; + // Find ハンドルを閉じる - FindClose(FindHandle); + FindClose( FindHandle ) ; } - + // もとのディレクトリをカレントディレクトリにセット - SetCurrentDirectory(DirPath); + SetCurrentDirectory( DirPath ) ; // 終了 - return 0; + return 0 ; } // 指定のディレクトリデータにあるファイルを展開する -int DXArchive_VER5::DirectoryDecode(u8 *NameP, u8 *DirP, u8 *FileP, DARC_HEAD_VER5 *Head, DARC_DIRECTORY_VER5 *Dir, FILE *ArcP, unsigned char *Key) +int DXArchive_VER5::DirectoryDecode( u8 *NameP, u8 *DirP, u8 *FileP, DARC_HEAD_VER5 *Head, DARC_DIRECTORY_VER5 *Dir, FILE *ArcP, unsigned char *Key ) { - TCHAR DirPath[MAX_PATH]; - + TCHAR DirPath[MAX_PATH] ; + // 現在のカレントディレクトリを保存 - GetCurrentDirectory(MAX_PATH, DirPath); + GetCurrentDirectory( MAX_PATH, DirPath ) ; // ディレクトリ情報がある場合は、まず展開用のディレクトリを作成する - if(Dir->DirectoryAddress != 0xffffffff && Dir->ParentDirectoryAddress != 0xffffffff) + if( Dir->DirectoryAddress != 0xffffffff && Dir->ParentDirectoryAddress != 0xffffffff ) { - DARC_FILEHEAD_VER5 *DirFile; - + DARC_FILEHEAD_VER5 *DirFile ; + // DARC_FILEHEAD_VER5 のアドレスを取得 - DirFile = (DARC_FILEHEAD_VER5 *)(FileP + Dir->DirectoryAddress); - + DirFile = ( DARC_FILEHEAD_VER5 * )( FileP + Dir->DirectoryAddress ) ; + // ディレクトリの作成 TCHAR *pName = GetOriginalFileName(NameP + DirFile->NameAddress); - CreateDirectory(pName, NULL); + CreateDirectory( pName, NULL ) ; delete[] pName; - + // そのディレクトリにカレントディレクトリを移す pName = GetOriginalFileName(NameP + DirFile->NameAddress); - SetCurrentDirectory(pName); + SetCurrentDirectory( pName ) ; delete[] pName; } // 展開処理開始 { - u32 i, FileHeadSize; - DARC_FILEHEAD_VER5 *File; + u32 i, FileHeadSize ; + DARC_FILEHEAD_VER5 *File ; // 格納されているファイルの数だけ繰り返す - FileHeadSize = Head->Version >= 0x0002 ? sizeof(DARC_FILEHEAD_VER5) : sizeof(DARC_FILEHEAD_VER1); - File = (DARC_FILEHEAD_VER5 *)(FileP + Dir->FileHeadAddress); - for(i = 0; i < Dir->FileHeadNum; i++, File = (DARC_FILEHEAD_VER5 *)((u8 *)File + FileHeadSize)) + FileHeadSize = Head->Version >= 0x0002 ? sizeof( DARC_FILEHEAD_VER5 ) : sizeof( DARC_FILEHEAD_VER1 ) ; + File = ( DARC_FILEHEAD_VER5 * )( FileP + Dir->FileHeadAddress ) ; + for( i = 0 ; i < Dir->FileHeadNum ; i ++, File = (DARC_FILEHEAD_VER5 *)( (u8 *)File + FileHeadSize ) ) { // ディレクトリかどうかで処理を分岐 - if(File->Attributes & FILE_ATTRIBUTE_DIRECTORY) + if( File->Attributes & FILE_ATTRIBUTE_DIRECTORY ) { // ディレクトリの場合は再帰をかける - DirectoryDecode(NameP, DirP, FileP, Head, (DARC_DIRECTORY_VER5 *)(DirP + File->DataAddress), ArcP, Key); + DirectoryDecode( NameP, DirP, FileP, Head, ( DARC_DIRECTORY_VER5 * )( DirP + File->DataAddress ), ArcP, Key ) ; } else { - FILE *DestP; - void *Buffer; - + FILE *DestP ; + void *Buffer ; + // ファイルの場合は展開する - + // バッファを確保する - Buffer = malloc(DXA_BUFFERSIZE_VER5); - if(Buffer == NULL) return -1; + Buffer = malloc( DXA_BUFFERSIZE_VER5 ) ; + if( Buffer == NULL ) return -1 ; // ファイルを開く TCHAR *pName = GetOriginalFileName(NameP + File->NameAddress); - DestP = _tfopen(pName, TEXT("wb")); + DestP = _tfopen( pName, TEXT("wb") ) ; delete[] pName; - + // データがある場合のみ転送 - if(File->DataSize != 0) + if( File->DataSize != 0 ) { // 初期位置をセットする - if(ftell(ArcP) != (s32)(Head->DataStartAddress + File->DataAddress)) - fseek(ArcP, Head->DataStartAddress + File->DataAddress, SEEK_SET); - + if( ftell( ArcP ) != ( s32 )( Head->DataStartAddress + File->DataAddress ) ) + fseek( ArcP, Head->DataStartAddress + File->DataAddress, SEEK_SET ) ; + // データが圧縮されているかどうかで処理を分岐 - if(Head->Version >= 0x0002 && File->PressDataSize != 0xffffffff) + if( Head->Version >= 0x0002 && File->PressDataSize != 0xffffffff ) { - void *temp; - + void *temp ; + // 圧縮されている場合 // 圧縮データが収まるメモリ領域の確保 - temp = malloc(File->PressDataSize + File->DataSize); + temp = malloc( File->PressDataSize + File->DataSize ) ; // 圧縮データの読み込み - if(Head->Version >= 0x0005) + if( Head->Version >= 0x0005 ) { - KeyConvFileRead(temp, File->PressDataSize, ArcP, Key, File->DataSize); + KeyConvFileRead( temp, File->PressDataSize, ArcP, Key, File->DataSize ) ; } else { - KeyConvFileRead(temp, File->PressDataSize, ArcP, Key); + KeyConvFileRead( temp, File->PressDataSize, ArcP, Key ) ; } - + // 解凍 - Decode(temp, (u8 *)temp + File->PressDataSize); - + Decode( temp, (u8 *)temp + File->PressDataSize ) ; + // 書き出し - fwrite((u8 *)temp + File->PressDataSize, File->DataSize, 1, DestP); - + fwrite( (u8 *)temp + File->PressDataSize, File->DataSize, 1, DestP ) ; + // メモリの解放 - free(temp); + free( temp ) ; } else { // 圧縮されていない場合 - + // 転送処理開始 { - u32 MoveSize, WriteSize; - - WriteSize = 0; - while(WriteSize < File->DataSize) + u32 MoveSize, WriteSize ; + + WriteSize = 0 ; + while( WriteSize < File->DataSize ) { - MoveSize = File->DataSize - WriteSize > DXA_BUFFERSIZE_VER5 ? DXA_BUFFERSIZE_VER5 : File->DataSize - WriteSize; + MoveSize = File->DataSize - WriteSize > DXA_BUFFERSIZE_VER5 ? DXA_BUFFERSIZE_VER5 : File->DataSize - WriteSize ; // ファイルの反転読み込み - if(Head->Version >= 0x0005) + if( Head->Version >= 0x0005 ) { - KeyConvFileRead(Buffer, MoveSize, ArcP, Key, File->DataSize + WriteSize); + KeyConvFileRead( Buffer, MoveSize, ArcP, Key, File->DataSize + WriteSize ) ; } else { - KeyConvFileRead(Buffer, MoveSize, ArcP, Key); + KeyConvFileRead( Buffer, MoveSize, ArcP, Key ) ; } // 書き出し - fwrite(Buffer, MoveSize, 1, DestP); - - WriteSize += MoveSize; + fwrite( Buffer, MoveSize, 1, DestP ) ; + + WriteSize += MoveSize ; } } } } - + // ファイルを閉じる - fclose(DestP); + fclose( DestP ) ; // バッファを開放する - free(Buffer); + free( Buffer ) ; // ファイルのタイムスタンプを設定する { - HANDLE HFile; - FILETIME CreateTime, LastAccessTime, LastWriteTime; + HANDLE HFile ; + FILETIME CreateTime, LastAccessTime, LastWriteTime ; - pName = GetOriginalFileName(NameP + File->NameAddress); - HFile = CreateFile(pName, - GENERIC_WRITE, 0, NULL, - OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + TCHAR *pName = GetOriginalFileName(NameP + File->NameAddress); + HFile = CreateFile( pName, + GENERIC_WRITE, 0, NULL, + OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ) ; delete[] pName; - if(HFile == INVALID_HANDLE_VALUE) + if( HFile == INVALID_HANDLE_VALUE ) { - HFile = HFile; + HFile = HFile ; } - CreateTime.dwHighDateTime = (u32)(File->Time.Create >> 32); - CreateTime.dwLowDateTime = (u32)(File->Time.Create & 0xffffffff); - LastAccessTime.dwHighDateTime = (u32)(File->Time.LastAccess >> 32); - LastAccessTime.dwLowDateTime = (u32)(File->Time.LastAccess & 0xffffffff); - LastWriteTime.dwHighDateTime = (u32)(File->Time.LastWrite >> 32); - LastWriteTime.dwLowDateTime = (u32)(File->Time.LastWrite & 0xffffffff); - SetFileTime(HFile, &CreateTime, &LastAccessTime, &LastWriteTime); - CloseHandle(HFile); + CreateTime.dwHighDateTime = ( u32 )( File->Time.Create >> 32 ) ; + CreateTime.dwLowDateTime = ( u32 )( File->Time.Create & 0xffffffff ) ; + LastAccessTime.dwHighDateTime = ( u32 )( File->Time.LastAccess >> 32 ) ; + LastAccessTime.dwLowDateTime = ( u32 )( File->Time.LastAccess & 0xffffffff ) ; + LastWriteTime.dwHighDateTime = ( u32 )( File->Time.LastWrite >> 32 ) ; + LastWriteTime.dwLowDateTime = ( u32 )( File->Time.LastWrite & 0xffffffff ) ; + SetFileTime( HFile, &CreateTime, &LastAccessTime, &LastWriteTime ) ; + CloseHandle( HFile ) ; } // ファイル属性を付ける pName = GetOriginalFileName(NameP + File->NameAddress); - SetFileAttributes(pName, File->Attributes); + SetFileAttributes( pName, File->Attributes ) ; delete[] pName; } } } - + // カレントディレクトリを元に戻す - SetCurrentDirectory(DirPath); + SetCurrentDirectory( DirPath ) ; // 終了 - return 0; + return 0 ; } // ディレクトリ内のファイルパスを取得する -int DXArchive_VER5::GetDirectoryFilePath(const TCHAR *DirectoryPath, TCHAR *FileNameBuffer) +int DXArchive_VER5::GetDirectoryFilePath( const TCHAR *DirectoryPath, TCHAR *FileNameBuffer ) { - WIN32_FIND_DATA FindData; - HANDLE FindHandle; - int FileNum; - TCHAR DirPath[256], String[256]; + WIN32_FIND_DATA FindData ; + HANDLE FindHandle ; + int FileNum ; + TCHAR DirPath[256], String[256] ; // ディレクトリかどうかをチェックする - if(DirectoryPath[0] != '\0') + if( DirectoryPath[0] != '\0' ) { - FindHandle = FindFirstFile(DirectoryPath, &FindData); - if(FindHandle == INVALID_HANDLE_VALUE || (FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0) return -1; - FindClose(FindHandle); + FindHandle = FindFirstFile( DirectoryPath, &FindData ) ; + if( FindHandle == INVALID_HANDLE_VALUE || ( FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) == 0 ) return -1 ; + FindClose( FindHandle ) ; } // 指定のフォルダのファイルの名前を取得する - FileNum = 0; - if(DirectoryPath[0] != '\0') + FileNum = 0 ; + if( DirectoryPath[0] != '\0' ) { - _tcscpy(DirPath, DirectoryPath); - if(DirPath[_tcslen(DirPath) - 1] != '\\') _tcscat(DirPath, TEXT("\\")); - _tcscpy(String, DirPath); - _tcscat(String, TEXT("*")); + _tcscpy( DirPath, DirectoryPath ) ; + if( DirPath[ _tcslen( DirPath ) - 1 ] != '\\' ) _tcscat( DirPath, TEXT("\\") ) ; + _tcscpy( String, DirPath ) ; + _tcscat( String, TEXT("*") ) ; } else { - _tcscpy(DirPath, TEXT("")); - _tcscpy(String, TEXT("*")); + _tcscpy( DirPath, TEXT("") ) ; + _tcscpy( String, TEXT("*") ) ; } - FindHandle = FindFirstFile(String, &FindData); - if(FindHandle != INVALID_HANDLE_VALUE) + FindHandle = FindFirstFile( String, &FindData ) ; + if( FindHandle != INVALID_HANDLE_VALUE ) { do { // 上のディレクトリに戻ったりするためのパスは無視する - if(_tcscmp(FindData.cFileName, TEXT(".")) == 0 || _tcscmp(FindData.cFileName, TEXT("..")) == 0) continue; + if( _tcscmp( FindData.cFileName, TEXT(".") ) == 0 || _tcscmp( FindData.cFileName, TEXT("..") ) == 0 ) continue ; // ファイルパスを保存する - if(FileNameBuffer != NULL) + if( FileNameBuffer != NULL ) { - _tcscpy(FileNameBuffer, DirPath); - _tcscat(FileNameBuffer, FindData.cFileName); - FileNameBuffer += 256; + _tcscpy( FileNameBuffer, DirPath ) ; + _tcscat( FileNameBuffer, FindData.cFileName ) ; + FileNameBuffer += 256 ; } // ファイルの数を増やす - FileNum++; - } while(FindNextFile(FindHandle, &FindData) != 0); - FindClose(FindHandle); + FileNum ++ ; + } + while( FindNextFile( FindHandle, &FindData ) != 0 ) ; + FindClose( FindHandle ) ; } // 数を返す - return FileNum; + return FileNum ; } // エンコード( 戻り値:圧縮後のサイズ -1 はエラー Dest に NULL を入れることも可能 ) -int DXArchive_VER5::Encode(void *Src, unsigned int SrcSize, void *Dest) +int DXArchive_VER5::Encode( void *Src, unsigned int SrcSize, void *Dest ) { - s32 dstsize; - s32 bonus, conbo, conbosize, address, addresssize; - s32 maxbonus, maxconbo, maxconbosize = 0, maxaddress, maxaddresssize = 0; - u8 keycode, *srcp, *destp, *dp, *sp, *sp2, *sp1; - u32 srcaddress, nextprintaddress, code; - s32 j; - u32 i, m; - u32 maxlistnum, maxlistnummask, listaddp; - u32 sublistnum, sublistmaxnum; - LZ_LIST_VER5 *listbuf, *listtemp, *list, *newlist; - u8 *listfirsttable, *usesublistflagtable, *sublistbuf; - + s32 dstsize ; + s32 bonus, conbo, conbosize, address, addresssize ; + s32 maxbonus, maxconbo, maxconbosize, maxaddress, maxaddresssize ; + u8 keycode, *srcp, *destp, *dp, *sp, *sp2, *sp1 ; + u32 srcaddress, nextprintaddress, code ; + s32 j ; + u32 i, m ; + u32 maxlistnum, maxlistnummask, listaddp ; + u32 sublistnum, sublistmaxnum ; + LZ_LIST_VER5 *listbuf, *listtemp, *list, *newlist ; + u8 *listfirsttable, *usesublistflagtable, *sublistbuf ; + // サブリストのサイズを決める { - if(SrcSize < 100 * 1024) sublistmaxnum = 1; - else if(SrcSize < 3 * 1024 * 1024) sublistmaxnum = MAX_SUBLISTNUM_VER5 / 3; - else sublistmaxnum = MAX_SUBLISTNUM_VER5; + if( SrcSize < 100 * 1024 ) sublistmaxnum = 1 ; + else if( SrcSize < 3 * 1024 * 1024 ) sublistmaxnum = MAX_SUBLISTNUM_VER5 / 3 ; + else sublistmaxnum = MAX_SUBLISTNUM_VER5 ; } // リストのサイズを決める { - maxlistnum = MAX_ADDRESSLISTNUM_VER5; - if(maxlistnum > SrcSize) + maxlistnum = MAX_ADDRESSLISTNUM_VER5 ; + if( maxlistnum > SrcSize ) { - while((maxlistnum >> 1) > 0x100 && (maxlistnum >> 1) > SrcSize) - maxlistnum >>= 1; + while( ( maxlistnum >> 1 ) > 0x100 && ( maxlistnum >> 1 ) > SrcSize ) + maxlistnum >>= 1 ; } - maxlistnummask = maxlistnum - 1; + maxlistnummask = maxlistnum - 1 ; } // メモリの確保 - usesublistflagtable = (u8 *)malloc( - sizeof(u32) * 65536 + // メインリストの先頭オブジェクト用領域 - sizeof(LZ_LIST_VER5) * maxlistnum + // メインリスト用領域 - sizeof(u8) * 65536 + // サブリストを使用しているかフラグ用領域 - sizeof(u32) * 256 * sublistmaxnum); // サブリスト用領域 - + usesublistflagtable = (u8 *)malloc( + sizeof( u32 ) * 65536 + // メインリストの先頭オブジェクト用領域 + sizeof( LZ_LIST_VER5 ) * maxlistnum + // メインリスト用領域 + sizeof( u8 ) * 65536 + // サブリストを使用しているかフラグ用領域 + sizeof( u32 ) * 256 * sublistmaxnum ) ; // サブリスト用領域 + // アドレスのセット - listfirsttable = usesublistflagtable + sizeof(u8) * 65536; - sublistbuf = listfirsttable + sizeof(u32) * 65536; - listbuf = (LZ_LIST_VER5 *)(sublistbuf + sizeof(u32) * 256 * sublistmaxnum); - + listfirsttable = usesublistflagtable + sizeof( u8 ) * 65536 ; + sublistbuf = listfirsttable + sizeof( u32 ) * 65536 ; + listbuf = (LZ_LIST_VER5 *)( sublistbuf + sizeof( u32 ) * 256 * sublistmaxnum ) ; + // 初期化 - memset(usesublistflagtable, 0, sizeof(u8) * 65536); - memset(sublistbuf, 0, sizeof(u32) * 256 * sublistmaxnum); - memset(listfirsttable, 0, sizeof(u32) * 65536); - list = listbuf; - for(i = maxlistnum / 8; i; i--, list += 8) + memset( usesublistflagtable, 0, sizeof( u8 ) * 65536 ) ; + memset( sublistbuf, 0, sizeof( u32 ) * 256 * sublistmaxnum ) ; + memset( listfirsttable, 0, sizeof( u32 ) * 65536 ) ; + list = listbuf ; + for( i = maxlistnum / 8 ; i ; i --, list += 8 ) { list[0].address = - list[1].address = - list[2].address = - list[3].address = - list[4].address = - list[5].address = - list[6].address = - list[7].address = 0xffffffff; + list[1].address = + list[2].address = + list[3].address = + list[4].address = + list[5].address = + list[6].address = + list[7].address = 0xffffffff ; } - srcp = (u8 *)Src; - destp = (u8 *)Dest; + srcp = (u8 *)Src ; + destp = (u8 *)Dest ; // 圧縮元データの中で一番出現頻度が低いバイトコードを検索する { - u32 qnum, table[256], mincode; - - for(i = 0; i < 256; i++) - table[i] = 0; - - sp = srcp; - qnum = SrcSize / 8; - i = qnum * 8; - for(; qnum; qnum--, sp += 8) - { - table[sp[0]] ++; - table[sp[1]] ++; - table[sp[2]] ++; - table[sp[3]] ++; - table[sp[4]] ++; - table[sp[5]] ++; - table[sp[6]] ++; - table[sp[7]] ++; + u32 qnum, table[256], mincode ; + + for( i = 0 ; i < 256 ; i ++ ) + table[i] = 0 ; + + sp = srcp ; + qnum = SrcSize / 8 ; + i = qnum * 8 ; + for( ; qnum ; qnum --, sp += 8 ) + { + table[sp[0]] ++ ; + table[sp[1]] ++ ; + table[sp[2]] ++ ; + table[sp[3]] ++ ; + table[sp[4]] ++ ; + table[sp[5]] ++ ; + table[sp[6]] ++ ; + table[sp[7]] ++ ; } - for(; i < SrcSize; i++, sp++) - table[*sp] ++; - - keycode = 0; - mincode = table[0]; - for(i = 1; i < 256; i++) - { - if(mincode < table[i]) continue; - mincode = table[i]; - keycode = (u8)i; + for( ; i < SrcSize ; i ++, sp ++ ) + table[*sp] ++ ; + + keycode = 0 ; + mincode = table[0] ; + for( i = 1 ; i < 256 ; i ++ ) + { + if( mincode < table[i] ) continue ; + mincode = table[i] ; + keycode = (u8)i ; } } // 圧縮元のサイズをセット - ((u32 *)destp)[0] = SrcSize; + ((u32 *)destp)[0] = SrcSize ; // キーコードをセット - destp[8] = keycode; + destp[8] = keycode ; // 圧縮処理 - dp = destp + 9; - sp = srcp; - srcaddress = 0; - dstsize = 0; - listaddp = 0; - sublistnum = 0; - nextprintaddress = 1024 * 100; - while(srcaddress < SrcSize) + dp = destp + 9 ; + sp = srcp ; + srcaddress = 0 ; + dstsize = 0 ; + listaddp = 0 ; + sublistnum = 0 ; + nextprintaddress = 1024 * 100 ; + while( srcaddress < SrcSize ) { // 残りサイズが最低圧縮サイズ以下の場合は圧縮処理をしない - if(srcaddress + MIN_COMPRESS_VER5 >= SrcSize) goto NOENCODE; + if( srcaddress + MIN_COMPRESS_VER5 >= SrcSize ) goto NOENCODE ; // リストを取得 - code = *((u16 *)sp); - list = (LZ_LIST_VER5 *)(listfirsttable + code * sizeof(u32)); - if(usesublistflagtable[code] == 1) + code = *((u16 *)sp) ; + list = (LZ_LIST_VER5 *)( listfirsttable + code * sizeof( u32 ) ) ; + if( usesublistflagtable[code] == 1 ) { - list = (LZ_LIST_VER5 *)((u32 *)list->next + sp[2]); + list = (LZ_LIST_VER5 *)( (u32 *)list->next + sp[2] ) ; } else { - if(sublistnum < sublistmaxnum) + if( sublistnum < sublistmaxnum ) { - list->next = (LZ_LIST_VER5 *)(sublistbuf + sizeof(u32) * 256 * sublistnum); - list = (LZ_LIST_VER5 *)((u32 *)list->next + sp[2]); - - usesublistflagtable[code] = 1; - sublistnum++; + list->next = (LZ_LIST_VER5 *)( sublistbuf + sizeof( u32 ) * 256 * sublistnum ) ; + list = (LZ_LIST_VER5 *)( (u32 *)list->next + sp[2] ) ; + + usesublistflagtable[code] = 1 ; + sublistnum ++ ; } } // 一番一致長の長いコードを探す - maxconbo = -1; - maxaddress = -1; - maxbonus = -1; - for(m = 0, listtemp = list->next; m < MAX_SEARCHLISTNUM_VER5 && listtemp != NULL; listtemp = listtemp->next, m++) + maxconbo = -1 ; + maxaddress = -1 ; + maxbonus = -1 ; + for( m = 0, listtemp = list->next ; m < MAX_SEARCHLISTNUM_VER5 && listtemp != NULL ; listtemp = listtemp->next, m ++ ) { - address = srcaddress - listtemp->address; - if(address >= MAX_POSITION_VER5) + address = srcaddress - listtemp->address ; + if( address >= MAX_POSITION_VER5 ) { - if(listtemp->prev) listtemp->prev->next = listtemp->next; - if(listtemp->next) listtemp->next->prev = listtemp->prev; - listtemp->address = 0xffffffff; - continue; + if( listtemp->prev ) listtemp->prev->next = listtemp->next ; + if( listtemp->next ) listtemp->next->prev = listtemp->prev ; + listtemp->address = 0xffffffff ; + continue ; } - - sp2 = &sp[-address]; - sp1 = sp; - if(srcaddress + MAX_COPYSIZE_VER5 < SrcSize) + + sp2 = &sp[-address] ; + sp1 = sp ; + if( srcaddress + MAX_COPYSIZE_VER5 < SrcSize ) { - conbo = MAX_COPYSIZE_VER5 / 4; - while(conbo && *((u32 *)sp2) == *((u32 *)sp1)) + conbo = MAX_COPYSIZE_VER5 / 4 ; + while( conbo && *((u32 *)sp2) == *((u32 *)sp1) ) { - sp2 += 4; - sp1 += 4; - conbo--; + sp2 += 4 ; + sp1 += 4 ; + conbo -- ; } - conbo = MAX_COPYSIZE_VER5 - (MAX_COPYSIZE_VER5 / 4 - conbo) * 4; + conbo = MAX_COPYSIZE_VER5 - ( MAX_COPYSIZE_VER5 / 4 - conbo ) * 4 ; - while(conbo && *sp2 == *sp1) + while( conbo && *sp2 == *sp1 ) { - sp2++; - sp1++; - conbo--; + sp2 ++ ; + sp1 ++ ; + conbo -- ; } - conbo = MAX_COPYSIZE_VER5 - conbo; + conbo = MAX_COPYSIZE_VER5 - conbo ; } else { - for(conbo = 0; - conbo < MAX_COPYSIZE_VER5 && - conbo + srcaddress < SrcSize && - sp[conbo - address] == sp[conbo]; - conbo++) - { - } + for( conbo = 0 ; + conbo < MAX_COPYSIZE_VER5 && + conbo + srcaddress < SrcSize && + sp[conbo - address] == sp[conbo] ; + conbo ++ ){} } - if(conbo >= 4) + if( conbo >= 4 ) { - conbosize = (conbo - MIN_COMPRESS_VER5) < 0x20 ? 0 : 1; - addresssize = address < 0x100 ? 0 : (address < 0x10000 ? 1 : 2); - bonus = conbo - (3 + conbosize + addresssize); + conbosize = ( conbo - MIN_COMPRESS_VER5 ) < 0x20 ? 0 : 1 ; + addresssize = address < 0x100 ? 0 : ( address < 0x10000 ? 1 : 2 ) ; + bonus = conbo - ( 3 + conbosize + addresssize ) ; - if(bonus > maxbonus) + if( bonus > maxbonus ) { - maxconbo = conbo; - maxaddress = address; - maxaddresssize = addresssize; - maxconbosize = conbosize; - maxbonus = bonus; + maxconbo = conbo ; + maxaddress = address ; + maxaddresssize = addresssize ; + maxconbosize = conbosize ; + maxbonus = bonus ; } } } // リストに登録 - newlist = &listbuf[listaddp]; - if(newlist->address != 0xffffffff) + newlist = &listbuf[listaddp] ; + if( newlist->address != 0xffffffff ) { - if(newlist->prev) newlist->prev->next = newlist->next; - if(newlist->next) newlist->next->prev = newlist->prev; - newlist->address = 0xffffffff; + if( newlist->prev ) newlist->prev->next = newlist->next ; + if( newlist->next ) newlist->next->prev = newlist->prev ; + newlist->address = 0xffffffff ; } - newlist->address = srcaddress; - newlist->prev = list; - newlist->next = list->next; - if(list->next != NULL) list->next->prev = newlist; - list->next = newlist; - listaddp = (listaddp + 1) & maxlistnummask; + newlist->address = srcaddress ; + newlist->prev = list ; + newlist->next = list->next ; + if( list->next != NULL ) list->next->prev = newlist ; + list->next = newlist ; + listaddp = ( listaddp + 1 ) & maxlistnummask ; // 一致コードが見つからなかったら非圧縮コードとして出力 - if(maxconbo == -1) + if( maxconbo == -1 ) { NOENCODE: // キーコードだった場合は2回連続で出力する - if(*sp == keycode) + if( *sp == keycode ) { - if(destp != NULL) + if( destp != NULL ) { - dp[0] = - dp[1] = keycode; - dp += 2; + dp[0] = + dp[1] = keycode ; + dp += 2 ; } - dstsize += 2; + dstsize += 2 ; } else { - if(destp != NULL) + if( destp != NULL ) { - *dp = *sp; - dp++; + *dp = *sp ; + dp ++ ; } - dstsize++; + dstsize ++ ; } - sp++; - srcaddress++; + sp ++ ; + srcaddress ++ ; } else { // 見つかった場合は見つけた位置と長さを出力する - + // キーコードと見つけた位置と長さを出力 - if(destp != NULL) + if( destp != NULL ) { // キーコードの出力 - *dp++ = keycode; + *dp++ = keycode ; // 出力する連続長は最低 MIN_COMPRESS_VER5 あることが前提なので - MIN_COMPRESS_VER5 したものを出力する - maxconbo -= MIN_COMPRESS_VER5; + maxconbo -= MIN_COMPRESS_VER5 ; // 連続長0~4ビットと連続長、相対アドレスのビット長を出力 - *dp = (u8)(((maxconbo & 0x1f) << 3) | (maxconbosize << 2) | maxaddresssize); + *dp = (u8)( ( ( maxconbo & 0x1f ) << 3 ) | ( maxconbosize << 2 ) | maxaddresssize ) ; // キーコードの連続はキーコードと値の等しい非圧縮コードと // 判断するため、キーコードの値以上の場合は値を+1する - if(*dp >= keycode) dp[0] += 1; - dp++; + if( *dp >= keycode ) dp[0] += 1 ; + dp ++ ; // 連続長5~12ビットを出力 - if(maxconbosize == 1) - *dp++ = (u8)((maxconbo >> 5) & 0xff); + if( maxconbosize == 1 ) + *dp++ = (u8)( ( maxconbo >> 5 ) & 0xff ) ; // maxconbo はまだ使うため - MIN_COMPRESS_VER5 した分を戻す - maxconbo += MIN_COMPRESS_VER5; + maxconbo += MIN_COMPRESS_VER5 ; // 出力する相対アドレスは0が( 現在のアドレス-1 )を挿すので、-1したものを出力する - maxaddress--; + maxaddress -- ; // 相対アドレスを出力 - *dp++ = (u8)(maxaddress); - if(maxaddresssize > 0) + *dp++ = (u8)( maxaddress ) ; + if( maxaddresssize > 0 ) { - *dp++ = (u8)(maxaddress >> 8); - if(maxaddresssize == 2) - *dp++ = (u8)(maxaddress >> 16); + *dp++ = (u8)( maxaddress >> 8 ) ; + if( maxaddresssize == 2 ) + *dp++ = (u8)( maxaddress >> 16 ) ; } } - + // 出力サイズを加算 - dstsize += 3 + maxaddresssize + maxconbosize; - + dstsize += 3 + maxaddresssize + maxconbosize ; + // リストに情報を追加 - if(srcaddress + maxconbo < SrcSize) + if( srcaddress + maxconbo < SrcSize ) { - sp2 = &sp[1]; -#ifdef B64 - for(j = 1; j < maxconbo && (u64)&sp2[2] - (u64)srcp < (u64)SrcSize; j++, sp2++) -#else - for(j = 1; j < maxconbo && (u32)&sp2[2] - (u32)srcp < SrcSize; j++, sp2++) -#endif + sp2 = &sp[1] ; + for( j = 1 ; j < maxconbo && (u32)&sp2[2] - (u32)srcp < SrcSize ; j ++, sp2 ++ ) { - code = *((u16 *)sp2); - list = (LZ_LIST_VER5 *)(listfirsttable + code * sizeof(u32)); - if(usesublistflagtable[code] == 1) + code = *((u16 *)sp2) ; + list = (LZ_LIST_VER5 *)( listfirsttable + code * sizeof( u32 ) ) ; + if( usesublistflagtable[code] == 1 ) { - list = (LZ_LIST_VER5 *)((u32 *)list->next + sp2[2]); + list = (LZ_LIST_VER5 *)( (u32 *)list->next + sp2[2] ) ; } else { - if(sublistnum < sublistmaxnum) + if( sublistnum < sublistmaxnum ) { - list->next = (LZ_LIST_VER5 *)(sublistbuf + sizeof(u32) * 256 * sublistnum); - list = (LZ_LIST_VER5 *)((u32 *)list->next + sp2[2]); - - usesublistflagtable[code] = 1; - sublistnum++; + list->next = (LZ_LIST_VER5 *)( sublistbuf + sizeof( u32 ) * 256 * sublistnum ) ; + list = (LZ_LIST_VER5 *)( (u32 *)list->next + sp2[2] ) ; + + usesublistflagtable[code] = 1 ; + sublistnum ++ ; } } - newlist = &listbuf[listaddp]; - if(newlist->address != 0xffffffff) + newlist = &listbuf[listaddp] ; + if( newlist->address != 0xffffffff ) { - if(newlist->prev) newlist->prev->next = newlist->next; - if(newlist->next) newlist->next->prev = newlist->prev; - newlist->address = 0xffffffff; + if( newlist->prev ) newlist->prev->next = newlist->next ; + if( newlist->next ) newlist->next->prev = newlist->prev ; + newlist->address = 0xffffffff ; } - newlist->address = srcaddress + j; - newlist->prev = list; - newlist->next = list->next; - if(list->next != NULL) list->next->prev = newlist; - list->next = newlist; - listaddp = (listaddp + 1) & maxlistnummask; + newlist->address = srcaddress + j ; + newlist->prev = list ; + newlist->next = list->next ; + if( list->next != NULL ) list->next->prev = newlist ; + list->next = newlist ; + listaddp = ( listaddp + 1 ) & maxlistnummask ; } } - - sp += maxconbo; - srcaddress += maxconbo; + + sp += maxconbo ; + srcaddress += maxconbo ; } // 圧縮率の表示 - if(nextprintaddress < srcaddress) + if( nextprintaddress < srcaddress ) { - nextprintaddress = srcaddress + 100 * 1024; + nextprintaddress = srcaddress + 100 * 1024 ; } } // 圧縮後のデータサイズを保存する - *((u32 *)&destp[4]) = dstsize + 9; + *((u32 *)&destp[4]) = dstsize + 9 ; // 確保したメモリの解放 - free(usesublistflagtable); + free( usesublistflagtable ) ; // データのサイズを返す - return dstsize + 9; + return dstsize + 9 ; } // デコード( 戻り値:解凍後のサイズ -1 はエラー Dest に NULL を入れることも可能 ) -int DXArchive_VER5::Decode(void *Src, void *Dest) +int DXArchive_VER5::Decode( void *Src, void *Dest ) { - u32 srcsize, destsize, code, indexsize, keycode, conbo, index = 0; - u8 *srcp, *destp, *dp, *sp; - - destp = (u8 *)Dest; - srcp = (u8 *)Src; + u32 srcsize, destsize, code, indexsize, keycode, conbo, index ; + u8 *srcp, *destp, *dp, *sp ; + destp = (u8 *)Dest ; + srcp = (u8 *)Src ; + // 解凍後のデータサイズを得る - destsize = *((u32 *)&srcp[0]); + destsize = *((u32 *)&srcp[0]) ; // 圧縮データのサイズを得る - srcsize = *((u32 *)&srcp[4]) - 9; + srcsize = *((u32 *)&srcp[4]) - 9 ; // キーコード - keycode = srcp[8]; - + keycode = srcp[8] ; + // 出力先がない場合はサイズだけ返す - if(Dest == NULL) - return destsize; - + if( Dest == NULL ) + return destsize ; + // 展開開始 - sp = srcp + 9; - dp = destp; - while(srcsize) + sp = srcp + 9 ; + dp = destp ; + while( srcsize ) { // キーコードか同かで処理を分岐 - if(sp[0] != keycode) + if( sp[0] != keycode ) { // 非圧縮コードの場合はそのまま出力 - *dp = *sp; - dp++; - sp++; - srcsize--; - continue; + *dp = *sp ; + dp ++ ; + sp ++ ; + srcsize -- ; + continue ; } - + // キーコードが連続していた場合はキーコード自体を出力 - if(sp[1] == keycode) - { - *dp = (u8)keycode; - dp++; - sp += 2; - srcsize -= 2; - - continue; + if( sp[1] == keycode ) + { + *dp = (u8)keycode ; + dp ++ ; + sp += 2 ; + srcsize -= 2 ; + + continue ; } // 第一バイトを得る - code = sp[1]; + code = sp[1] ; // もしキーコードよりも大きな値だった場合はキーコード // とのバッティング防止の為に+1しているので-1する - if(code > keycode) code--; + if( code > keycode ) code -- ; - sp += 2; - srcsize -= 2; + sp += 2 ; + srcsize -= 2 ; // 連続長を取得する - conbo = code >> 3; - if(code & (0x1 << 2)) + conbo = code >> 3 ; + if( code & ( 0x1 << 2 ) ) { - conbo |= *sp << 5; - sp++; - srcsize--; + conbo |= *sp << 5 ; + sp ++ ; + srcsize -- ; } - conbo += MIN_COMPRESS_VER5; // 保存時に減算した最小圧縮バイト数を足す + conbo += MIN_COMPRESS_VER5 ; // 保存時に減算した最小圧縮バイト数を足す // 参照相対アドレスを取得する - indexsize = code & 0x3; - switch(indexsize) - { - case 0: - index = *sp; - sp++; - srcsize--; - break; - - case 1: - index = *((u16 *)sp); - sp += 2; - srcsize -= 2; - break; - - case 2: - index = *((u16 *)sp) | (sp[2] << 16); - sp += 3; - srcsize -= 3; - break; + indexsize = code & 0x3 ; + switch( indexsize ) + { + case 0 : + index = *sp ; + sp ++ ; + srcsize -- ; + break ; + + case 1 : + index = *((u16 *)sp) ; + sp += 2 ; + srcsize -= 2 ; + break ; + + case 2 : + index = *((u16 *)sp) | ( sp[2] << 16 ) ; + sp += 3 ; + srcsize -= 3 ; + break ; } - index++; // 保存時に-1しているので+1する + index ++ ; // 保存時に-1しているので+1する // 展開 - if(index < conbo) + if( index < conbo ) { - u32 num; + u32 num ; - num = index; - while(conbo > num) + num = index ; + while( conbo > num ) { - memcpy(dp, dp - num, num); - dp += num; - conbo -= num; - num += num; + memcpy( dp, dp - num, num ) ; + dp += num ; + conbo -= num ; + num += num ; } - if(conbo != 0) + if( conbo != 0 ) { - memcpy(dp, dp - num, conbo); - dp += conbo; + memcpy( dp, dp - num, conbo ) ; + dp += conbo ; } } else { - memcpy(dp, dp - index, conbo); - dp += conbo; + memcpy( dp, dp - index, conbo ) ; + dp += conbo ; } } // 解凍後のサイズを返す - return (int)destsize; + return (int)destsize ; } // アーカイブファイルを作成する(ディレクトリ一個だけ) -int DXArchive_VER5::EncodeArchiveOneDirectory(TCHAR *OutputFileName, TCHAR *DirectoryPath, bool Press, const char *KeyString) +int DXArchive_VER5::EncodeArchiveOneDirectory(TCHAR *OutputFileName, TCHAR *DirectoryPath, bool Press, const char *KeyString ) { - int i, FileNum, Result; - TCHAR **FilePathList, *NameBuffer; + int i, FileNum, Result ; + TCHAR **FilePathList, *NameBuffer ; // ファイルの数を取得する - FileNum = GetDirectoryFilePath(DirectoryPath, NULL); - if(FileNum < 0) return -1; + FileNum = GetDirectoryFilePath( DirectoryPath, NULL ) ; + if( FileNum < 0 ) return -1 ; // ファイルの数の分だけファイル名とファイルポインタの格納用のメモリを確保する - NameBuffer = (TCHAR *)malloc(FileNum * (256 + 4)); + NameBuffer = (TCHAR *)malloc( FileNum * ( 256 + 4 ) ) ; // ファイルのパスを取得する - GetDirectoryFilePath(DirectoryPath, NameBuffer); + GetDirectoryFilePath( DirectoryPath, NameBuffer ) ; // ファイルパスのリストを作成する - FilePathList = (TCHAR **)(NameBuffer + FileNum * 256); - for(i = 0; i < FileNum; i++) - FilePathList[i] = NameBuffer + i * 256; + FilePathList = (TCHAR **)( NameBuffer + FileNum * 256 ) ; + for( i = 0 ; i < FileNum ; i ++ ) + FilePathList[i] = NameBuffer + i * 256 ; // エンコード - Result = EncodeArchive(OutputFileName, FilePathList, FileNum, Press, KeyString); + Result = EncodeArchive( OutputFileName, FilePathList, FileNum, Press, KeyString ) ; // 確保したメモリの解放 - free(NameBuffer); + free( NameBuffer ) ; // 結果を返す - return Result; + return Result ; } // アーカイブファイルを作成する -int DXArchive_VER5::EncodeArchive(TCHAR *OutputFileName, TCHAR **FileOrDirectoryPath, int FileNum, bool Press, const char *KeyString) +int DXArchive_VER5::EncodeArchive(TCHAR *OutputFileName, TCHAR **FileOrDirectoryPath, int FileNum, bool Press, const char *KeyString ) { - DARC_HEAD_VER5 Head; - DARC_DIRECTORY_VER5 Directory; - SIZESAVE SizeSave; - FILE *DestFp; - u8 *NameP, *FileP, *DirP; - int i; - u32 Type; - void *TempBuffer; - u8 Key[DXA_KEYSTR_LENGTH_VER5]; + DARC_HEAD_VER5 Head ; + DARC_DIRECTORY_VER5 Directory ; + SIZESAVE SizeSave ; + FILE *DestFp ; + u8 *NameP, *FileP, *DirP ; + int i ; + u32 Type ; + void *TempBuffer ; + u8 Key[DXA_KEYSTR_LENGTH_VER5] ; // 鍵文字列の作成 - KeyCreate(KeyString, Key); + KeyCreate( KeyString, Key ) ; // ファイル読み込みに使用するバッファの確保 - TempBuffer = malloc(DXA_BUFFERSIZE_VER5); - + TempBuffer = malloc( DXA_BUFFERSIZE_VER5 ) ; + // 出力ファイルを開く - DestFp = _tfopen(OutputFileName, TEXT("wb")); + DestFp = _tfopen( OutputFileName, TEXT("wb") ) ; // アーカイブのヘッダを出力する { - Head.Head = DXA_HEAD_VER5; - Head.Version = DXA_VER_VER5; - Head.HeadSize = 0xffffffff; - Head.DataStartAddress = sizeof(DARC_HEAD_VER5); - Head.FileNameTableStartAddress = 0xffffffff; - Head.DirectoryTableStartAddress = 0xffffffff; - Head.FileTableStartAddress = 0xffffffff; - Head.CodePage = GetACP(); - SetFileApisToANSI(); + Head.Head = DXA_HEAD_VER5 ; + Head.Version = DXA_VER_VER5 ; + Head.HeadSize = 0xffffffff ; + Head.DataStartAddress = sizeof( DARC_HEAD_VER5 ) ; + Head.FileNameTableStartAddress = 0xffffffff ; + Head.DirectoryTableStartAddress = 0xffffffff ; + Head.FileTableStartAddress = 0xffffffff ; + Head.CodePage = GetACP() ; + SetFileApisToANSI() ; - KeyConvFileWrite(&Head, sizeof(DARC_HEAD_VER5), DestFp, Key, 0); + KeyConvFileWrite( &Head, sizeof( DARC_HEAD_VER5 ), DestFp, Key, 0 ) ; } - + // 各バッファを確保する - if((NameP = (u8 *)calloc(DXA_BUFFERSIZE_VER5, sizeof(u8))) == NULL) - { - free(TempBuffer); - return -1; - } + if( ( NameP = ( u8 * )malloc( DXA_BUFFERSIZE_VER5 ) ) == NULL ) return -1 ; + memset( NameP, 0, DXA_BUFFERSIZE_VER5 ) ; - if((FileP = (u8 *)calloc(DXA_BUFFERSIZE_VER5, sizeof(u8))) == NULL) - { - free(TempBuffer); - free(NameP); - return -1; - } + if( ( FileP = ( u8 * )malloc( DXA_BUFFERSIZE_VER5 ) ) == NULL ) return -1 ; + memset( FileP, 0, DXA_BUFFERSIZE_VER5 ) ; - if((DirP = (u8 *)calloc(DXA_BUFFERSIZE_VER5, sizeof(u8))) == NULL) - { - free(TempBuffer); - free(NameP); - free(FileP); - return -1; - } + if( ( DirP = ( u8 * )malloc( DXA_BUFFERSIZE_VER5 ) ) == NULL ) return -1 ; + memset( DirP, 0, DXA_BUFFERSIZE_VER5 ) ; // サイズ保存構造体にデータをセット - SizeSave.DataSize = 0; - SizeSave.NameSize = 0; - SizeSave.DirectorySize = 0; - SizeSave.FileSize = 0; - + SizeSave.DataSize = 0 ; + SizeSave.NameSize = 0 ; + SizeSave.DirectorySize = 0 ; + SizeSave.FileSize = 0 ; + // 最初のディレクトリのファイル情報を書き出す { - DARC_FILEHEAD_VER5 File; - - memset(&File, 0, sizeof(DARC_FILEHEAD_VER5)); - File.NameAddress = SizeSave.NameSize; - File.Attributes = FILE_ATTRIBUTE_DIRECTORY; - File.DataAddress = SizeSave.DirectorySize; - File.DataSize = 0; - File.PressDataSize = 0xffffffff; + DARC_FILEHEAD_VER5 File ; + + memset( &File, 0, sizeof( DARC_FILEHEAD_VER5 ) ) ; + File.NameAddress = SizeSave.NameSize ; + File.Attributes = FILE_ATTRIBUTE_DIRECTORY ; + File.DataAddress = SizeSave.DirectorySize ; + File.DataSize = 0 ; + File.PressDataSize = 0xffffffff ; // ディレクトリ名の書き出し - SizeSave.NameSize += AddFileNameData(TEXT(""), NameP + SizeSave.NameSize); + SizeSave.NameSize += AddFileNameData( TEXT(""), NameP + SizeSave.NameSize ) ; // ファイル情報の書き出し - memcpy(FileP + SizeSave.FileSize, &File, sizeof(DARC_FILEHEAD_VER5)); - SizeSave.FileSize += sizeof(DARC_FILEHEAD_VER5); + memcpy( FileP + SizeSave.FileSize, &File, sizeof( DARC_FILEHEAD_VER5 ) ) ; + SizeSave.FileSize += sizeof( DARC_FILEHEAD_VER5 ) ; } // 最初のディレクトリ情報を書き出す - Directory.DirectoryAddress = 0; - Directory.ParentDirectoryAddress = 0xffffffff; - Directory.FileHeadNum = FileNum; - Directory.FileHeadAddress = SizeSave.FileSize; - memcpy(DirP + SizeSave.DirectorySize, &Directory, sizeof(DARC_DIRECTORY_VER5)); + Directory.DirectoryAddress = 0 ; + Directory.ParentDirectoryAddress = 0xffffffff ; + Directory.FileHeadNum = FileNum ; + Directory.FileHeadAddress = SizeSave.FileSize ; + memcpy( DirP + SizeSave.DirectorySize, &Directory, sizeof( DARC_DIRECTORY_VER5 ) ) ; // サイズを加算する - SizeSave.DirectorySize += sizeof(DARC_DIRECTORY_VER5); - SizeSave.FileSize += sizeof(DARC_FILEHEAD_VER5) * FileNum; + SizeSave.DirectorySize += sizeof( DARC_DIRECTORY_VER5 ) ; + SizeSave.FileSize += sizeof( DARC_FILEHEAD_VER5 ) * FileNum ; // 渡されたファイルの数だけ処理を繰り返す - for(i = 0; i < FileNum; i++) + for( i = 0 ; i < FileNum ; i ++ ) { // 指定されたファイルがあるかどうか検査 - Type = GetFileAttributes(FileOrDirectoryPath[i]); - if((signed int)Type == -1) continue; + Type = GetFileAttributes( FileOrDirectoryPath[i] ) ; + if( ( signed int )Type == -1 ) continue ; // ファイルのタイプによって処理を分岐 - if((Type & FILE_ATTRIBUTE_DIRECTORY) != 0) + if( ( Type & FILE_ATTRIBUTE_DIRECTORY ) != 0 ) { // ディレクトリの場合はディレクトリのアーカイブに回す - DirectoryEncode(FileOrDirectoryPath[i], NameP, DirP, FileP, &Directory, &SizeSave, i, DestFp, TempBuffer, Press, Key); + DirectoryEncode( FileOrDirectoryPath[i], NameP, DirP, FileP, &Directory, &SizeSave, i, DestFp, TempBuffer, Press, Key ) ; } else { - WIN32_FIND_DATA FindData; - HANDLE FindHandle; - DARC_FILEHEAD_VER5 File; - + WIN32_FIND_DATA FindData ; + HANDLE FindHandle ; + DARC_FILEHEAD_VER5 File ; + // ファイルの情報を得る - FindHandle = FindFirstFile(FileOrDirectoryPath[i], &FindData); - if(FindHandle == INVALID_HANDLE_VALUE) continue; - + FindHandle = FindFirstFile( FileOrDirectoryPath[i], &FindData ) ; + if( FindHandle == INVALID_HANDLE_VALUE ) continue ; + // ファイルヘッダをセットする { - File.NameAddress = SizeSave.NameSize; - File.Time.Create = (((LONGLONG)FindData.ftCreationTime.dwHighDateTime) << 32) + FindData.ftCreationTime.dwLowDateTime; - File.Time.LastAccess = (((LONGLONG)FindData.ftLastAccessTime.dwHighDateTime) << 32) + FindData.ftLastAccessTime.dwLowDateTime; - File.Time.LastWrite = (((LONGLONG)FindData.ftLastWriteTime.dwHighDateTime) << 32) + FindData.ftLastWriteTime.dwLowDateTime; - File.Attributes = FindData.dwFileAttributes; - File.DataAddress = SizeSave.DataSize; - File.DataSize = FindData.nFileSizeLow; - File.PressDataSize = 0xffffffff; + File.NameAddress = SizeSave.NameSize ; + File.Time.Create = ( ( ( LONGLONG )FindData.ftCreationTime.dwHighDateTime ) << 32 ) + FindData.ftCreationTime.dwLowDateTime ; + File.Time.LastAccess = ( ( ( LONGLONG )FindData.ftLastAccessTime.dwHighDateTime ) << 32 ) + FindData.ftLastAccessTime.dwLowDateTime ; + File.Time.LastWrite = ( ( ( LONGLONG )FindData.ftLastWriteTime.dwHighDateTime ) << 32 ) + FindData.ftLastWriteTime.dwLowDateTime ; + File.Attributes = FindData.dwFileAttributes ; + File.DataAddress = SizeSave.DataSize ; + File.DataSize = FindData.nFileSizeLow ; + File.PressDataSize = 0xffffffff ; } // ファイル名を書き出す - SizeSave.NameSize += AddFileNameData(FindData.cFileName, NameP + SizeSave.NameSize); + SizeSave.NameSize += AddFileNameData( FindData.cFileName, NameP + SizeSave.NameSize ) ; // ファイルデータを書き出す - if((u64)FindData.nFileSizeLow + ((u64)FindData.nFileSizeHigh << 32) != 0) + if( (u64)FindData.nFileSizeLow + ( (u64)FindData.nFileSizeHigh << 32 ) != 0 ) { - FILE *SrcP; - u32 FileSize, WriteSize, MoveSize; + FILE *SrcP ; + u32 FileSize, WriteSize, MoveSize ; // ファイルを開く - SrcP = _tfopen(FileOrDirectoryPath[i], TEXT("rb")); - + SrcP = _tfopen( FileOrDirectoryPath[i], TEXT("rb") ) ; + // サイズを得る - fseek(SrcP, 0, SEEK_END); - FileSize = ftell(SrcP); - fseek(SrcP, 0, SEEK_SET); - + fseek( SrcP, 0, SEEK_END ) ; + FileSize = ftell( SrcP ) ; + fseek( SrcP, 0, SEEK_SET ) ; + // ファイルサイズが 10MB 以下の場合で、圧縮の指定がある場合は圧縮を試みる - if(Press == true && (u64)FindData.nFileSizeLow + ((u64)FindData.nFileSizeHigh << 32) < 10 * 1024 * 1024) + if( Press == true && (u64)FindData.nFileSizeLow + ( (u64)FindData.nFileSizeHigh << 32 ) < 10 * 1024 * 1024 ) { - void *SrcBuf, *DestBuf; + void *SrcBuf, *DestBuf ; u32 DestSize; size_t Len; - + // 一部のファイル形式の場合は予め弾く - if((Len = _tcslen(FindData.cFileName)) > 4) + if( ( Len = _tcslen( FindData.cFileName ) ) > 4 ) { - TCHAR *sp; - - sp = &FindData.cFileName[Len - 3]; - if(StrICmp(sp, TEXT("wav")) == 0 || - StrICmp(sp, TEXT("jpg")) == 0 || - StrICmp(sp, TEXT("png")) == 0 || - StrICmp(sp, TEXT("mpg")) == 0 || - StrICmp(sp, TEXT("mp3")) == 0 || - StrICmp(sp, TEXT("ogg")) == 0 || - StrICmp(sp, TEXT("wmv")) == 0 || - StrICmp(sp - 1, TEXT("jpeg")) == 0) goto NOPRESS; + TCHAR *sp ; + + sp = &FindData.cFileName[Len-3] ; + if( StrICmp( sp, TEXT("wav") ) == 0 || + StrICmp( sp, TEXT("jpg") ) == 0 || + StrICmp( sp, TEXT("png") ) == 0 || + StrICmp( sp, TEXT("mpg") ) == 0 || + StrICmp( sp, TEXT("mp3") ) == 0 || + StrICmp( sp, TEXT("ogg") ) == 0 || + StrICmp( sp, TEXT("wmv") ) == 0 || + StrICmp( sp - 1, TEXT("jpeg") ) == 0 ) goto NOPRESS ; } - + // データが丸ごと入るメモリ領域の確保 - SrcBuf = malloc(FileSize + FileSize * 2 + 64); - DestBuf = (u8 *)SrcBuf + FileSize; - + SrcBuf = malloc( FileSize + FileSize * 2 + 64 ) ; + DestBuf = (u8 *)SrcBuf + FileSize ; + // ファイルを丸ごと読み込む - fread(SrcBuf, FileSize, 1, SrcP); - + fread( SrcBuf, FileSize, 1, SrcP ) ; + // 圧縮 - DestSize = Encode(SrcBuf, FileSize, DestBuf); - + DestSize = Encode( SrcBuf, FileSize, DestBuf ) ; + // 殆ど圧縮出来なかった場合は圧縮無しでアーカイブする - if((f64)DestSize / (f64)FileSize > 0.90) + if( (f64)DestSize / (f64)FileSize > 0.90 ) { - fseek(SrcP, 0L, SEEK_SET); - free(SrcBuf); - goto NOPRESS; + fseek( SrcP, 0L, SEEK_SET ) ; + free( SrcBuf ) ; + goto NOPRESS ; } - + // 圧縮データを反転して書き出す - WriteSize = (DestSize + 3) / 4 * 4; - KeyConvFileWrite(DestBuf, WriteSize, DestFp, Key, File.DataSize); - + WriteSize = ( DestSize + 3 ) / 4 * 4 ; + KeyConvFileWrite( DestBuf, WriteSize, DestFp, Key, File.DataSize ) ; + // メモリの解放 - free(SrcBuf); - + free( SrcBuf ) ; + // 圧縮データのサイズを保存する - File.PressDataSize = DestSize; + File.PressDataSize = DestSize ; } else { -NOPRESS: +NOPRESS: // 転送開始 - WriteSize = 0; - while(WriteSize < FileSize) + WriteSize = 0 ; + while( WriteSize < FileSize ) { // 転送サイズ決定 - MoveSize = DXA_BUFFERSIZE_VER5 < FileSize - WriteSize ? DXA_BUFFERSIZE_VER5 : FileSize - WriteSize; - MoveSize = (MoveSize + 3) / 4 * 4; // サイズは4の倍数に合わせる - + MoveSize = DXA_BUFFERSIZE_VER5 < FileSize - WriteSize ? DXA_BUFFERSIZE_VER5 : FileSize - WriteSize ; + MoveSize = ( MoveSize + 3 ) / 4 * 4 ; // サイズは4の倍数に合わせる + // ファイルの反転読み込み - KeyConvFileRead(TempBuffer, MoveSize, SrcP, Key, File.DataSize + WriteSize); + KeyConvFileRead( TempBuffer, MoveSize, SrcP, Key, File.DataSize + WriteSize ) ; // 書き出し - fwrite(TempBuffer, MoveSize, 1, DestFp); - + fwrite( TempBuffer, MoveSize, 1, DestFp ) ; + // 書き出しサイズの加算 - WriteSize += MoveSize; + WriteSize += MoveSize ; } } - + // 書き出したファイルを閉じる - fclose(SrcP); - + fclose( SrcP ) ; + // データサイズの加算 - SizeSave.DataSize += WriteSize; + SizeSave.DataSize += WriteSize ; } - + // ファイルヘッダを書き出す - memcpy(FileP + Directory.FileHeadAddress + sizeof(DARC_FILEHEAD_VER5) * i, &File, sizeof(DARC_FILEHEAD_VER5)); + memcpy( FileP + Directory.FileHeadAddress + sizeof( DARC_FILEHEAD_VER5 ) * i, &File, sizeof( DARC_FILEHEAD_VER5 ) ) ; // Find ハンドルを閉じる - FindClose(FindHandle); + FindClose( FindHandle ) ; } } - + // バッファに溜め込んだ各種ヘッダデータを出力する { // 出力する順番は ファイルネームテーブル、 DARC_FILEHEAD_VER5 テーブル、 DARC_DIRECTORY_VER5 テーブル の順 - KeyConvFileWrite(NameP, SizeSave.NameSize, DestFp, Key, 0); - KeyConvFileWrite(FileP, SizeSave.FileSize, DestFp, Key, SizeSave.NameSize); - KeyConvFileWrite(DirP, SizeSave.DirectorySize, DestFp, Key, SizeSave.NameSize + SizeSave.FileSize); + KeyConvFileWrite( NameP, SizeSave.NameSize, DestFp, Key, 0 ) ; + KeyConvFileWrite( FileP, SizeSave.FileSize, DestFp, Key, SizeSave.NameSize ) ; + KeyConvFileWrite( DirP, SizeSave.DirectorySize, DestFp, Key, SizeSave.NameSize + SizeSave.FileSize ) ; } - + // 再びアーカイブのヘッダを出力する { - Head.Head = DXA_HEAD_VER5; - Head.Version = DXA_VER_VER5; - Head.HeadSize = SizeSave.NameSize + SizeSave.DirectorySize + SizeSave.FileSize; - Head.DataStartAddress = sizeof(DARC_HEAD_VER5); - Head.FileNameTableStartAddress = SizeSave.DataSize + Head.DataStartAddress; - Head.FileTableStartAddress = SizeSave.NameSize; - Head.DirectoryTableStartAddress = Head.FileTableStartAddress + SizeSave.FileSize; + Head.Head = DXA_HEAD_VER5 ; + Head.Version = DXA_VER_VER5 ; + Head.HeadSize = SizeSave.NameSize + SizeSave.DirectorySize + SizeSave.FileSize ; + Head.DataStartAddress = sizeof( DARC_HEAD_VER5 ) ; + Head.FileNameTableStartAddress = SizeSave.DataSize + Head.DataStartAddress ; + Head.FileTableStartAddress = SizeSave.NameSize ; + Head.DirectoryTableStartAddress = Head.FileTableStartAddress + SizeSave.FileSize ; - fseek(DestFp, 0, SEEK_SET); - KeyConvFileWrite(&Head, sizeof(DARC_HEAD_VER5), DestFp, Key, 0); + fseek( DestFp, 0, SEEK_SET ) ; + KeyConvFileWrite( &Head, sizeof( DARC_HEAD_VER5 ), DestFp, Key, 0 ) ; } - + // 書き出したファイルを閉じる - fclose(DestFp); - + fclose( DestFp ) ; + // 確保したバッファを開放する - free(NameP); - free(FileP); - free(DirP); - free(TempBuffer); + free( NameP ) ; + free( FileP ) ; + free( DirP ) ; + free( TempBuffer ) ; // 終了 - return 0; + return 0 ; } // アーカイブファイルを展開する -int DXArchive_VER5::DecodeArchive(TCHAR *ArchiveName, const TCHAR *OutputPath, const char *KeyString) +int DXArchive_VER5::DecodeArchive(TCHAR *ArchiveName, const TCHAR *OutputPath, const char *KeyString ) { - u8 *HeadBuffer = NULL; - DARC_HEAD_VER5 Head; - u8 *FileP, *NameP, *DirP; - FILE *ArcP = NULL; - TCHAR OldDir[MAX_PATH]; - u8 Key[DXA_KEYSTR_LENGTH_VER5]; + u8 *HeadBuffer = NULL ; + DARC_HEAD_VER5 Head ; + u8 *FileP, *NameP, *DirP ; + FILE *ArcP = NULL ; + TCHAR OldDir[MAX_PATH] ; + u8 Key[DXA_KEYSTR_LENGTH_VER5] ; // 鍵文字列の作成 - KeyCreate(KeyString, Key); + KeyCreate( KeyString, Key ) ; // アーカイブファイルを開く - ArcP = _tfopen(ArchiveName, TEXT("rb")); - if(ArcP == NULL) return -1; + ArcP = _tfopen( ArchiveName, TEXT("rb") ) ; + if( ArcP == NULL ) return -1 ; // 出力先のディレクトリにカレントディレクトリを変更する - GetCurrentDirectory(MAX_PATH, OldDir); - SetCurrentDirectory(OutputPath); + GetCurrentDirectory( MAX_PATH, OldDir ) ; + SetCurrentDirectory( OutputPath ) ; // ヘッダを解析する { - KeyConvFileRead(&Head, sizeof(DARC_HEAD_VER5), ArcP, Key, 0); + KeyConvFileRead( &Head, sizeof( DARC_HEAD_VER5 ), ArcP, Key, 0 ) ; // IDの検査 - if(Head.Head != DXA_HEAD_VER5) + if( Head.Head != DXA_HEAD_VER5 ) { // バージョン2以前か調べる - memset(Key, 0xff, DXA_KEYSTR_LENGTH_VER5); + memset( Key, 0xffffffff, DXA_KEYSTR_LENGTH_VER5 ) ; - fseek(ArcP, 0L, SEEK_SET); - KeyConvFileRead(&Head, sizeof(DARC_HEAD_VER5), ArcP, Key, 0); + fseek( ArcP, 0L, SEEK_SET ) ; + KeyConvFileRead( &Head, sizeof( DARC_HEAD_VER5 ), ArcP, Key, 0 ) ; // バージョン2以前でもない場合はエラー - if(Head.Head != DXA_HEAD_VER5) - goto ERR; + if( Head.Head != DXA_HEAD_VER5 ) + goto ERR ; } - + // バージョン検査 - if(Head.Version > DXA_VER_VER5) goto ERR; - + if( Head.Version > DXA_VER_VER5 ) goto ERR ; + // ヘッダのサイズ分のメモリを確保する - HeadBuffer = (u8 *)malloc(Head.HeadSize); - if(HeadBuffer == NULL) goto ERR; - + HeadBuffer = ( u8 * )malloc( Head.HeadSize ) ; + if( HeadBuffer == NULL ) goto ERR ; + // ヘッダパックをメモリに読み込む - fseek(ArcP, Head.FileNameTableStartAddress, SEEK_SET); - if(Head.Version >= 0x0005) + fseek( ArcP, Head.FileNameTableStartAddress, SEEK_SET ) ; + if( Head.Version >= 0x0005 ) { - KeyConvFileRead(HeadBuffer, Head.HeadSize, ArcP, Key, 0); + KeyConvFileRead( HeadBuffer, Head.HeadSize, ArcP, Key, 0 ) ; } else { - KeyConvFileRead(HeadBuffer, Head.HeadSize, ArcP, Key); + KeyConvFileRead( HeadBuffer, Head.HeadSize, ArcP, Key ) ; } - + // 各アドレスをセットする - NameP = HeadBuffer; - FileP = NameP + Head.FileTableStartAddress; - DirP = NameP + Head.DirectoryTableStartAddress; + NameP = HeadBuffer ; + FileP = NameP + Head.FileTableStartAddress ; + DirP = NameP + Head.DirectoryTableStartAddress ; } // アーカイブの展開を開始する - DirectoryDecode(NameP, DirP, FileP, &Head, (DARC_DIRECTORY_VER5 *)DirP, ArcP, Key); - + DirectoryDecode( NameP, DirP, FileP, &Head, ( DARC_DIRECTORY_VER5 * )DirP, ArcP, Key ) ; + // ファイルを閉じる - fclose(ArcP); - + fclose( ArcP ) ; + // ヘッダを読み込んでいたメモリを解放する - free(HeadBuffer); + free( HeadBuffer ) ; // カレントディレクトリを元に戻す - SetCurrentDirectory(OldDir); + SetCurrentDirectory( OldDir ) ; // 終了 - return 0; + return 0 ; -ERR: - if(HeadBuffer != NULL) free(HeadBuffer); - if(ArcP != NULL) fclose(ArcP); +ERR : + if( HeadBuffer != NULL ) free( HeadBuffer ) ; + if( ArcP != NULL ) fclose( ArcP ) ; // カレントディレクトリを元に戻す - SetCurrentDirectory(OldDir); + SetCurrentDirectory( OldDir ) ; // 終了 - return -1; + return -1 ; } // コンストラクタ -DXArchive_VER5::DXArchive_VER5(TCHAR *ArchivePath) +DXArchive_VER5::DXArchive_VER5(TCHAR *ArchivePath ) { - this->fp = NULL; - this->HeadBuffer = NULL; - this->NameP = this->DirP = this->FileP = NULL; - this->CurrentDirectory = NULL; - this->CashBuffer = NULL; + this->fp = NULL ; + this->HeadBuffer = NULL ; + this->NameP = this->DirP = this->FileP = NULL ; + this->CurrentDirectory = NULL ; + this->CashBuffer = NULL ; - if(ArchivePath != NULL) + if( ArchivePath != NULL ) { - this->OpenArchiveFile(ArchivePath); + this->OpenArchiveFile( ArchivePath ) ; } } // デストラクタ DXArchive_VER5::~DXArchive_VER5() { - if(this->fp != NULL) this->CloseArchiveFile(); + if( this->fp != NULL ) this->CloseArchiveFile() ; - if(this->fp != NULL) fclose(this->fp); - if(this->HeadBuffer != NULL) free(this->HeadBuffer); - if(this->CashBuffer != NULL) free(this->CashBuffer); + if( this->fp != NULL ) fclose( this->fp ) ; + if( this->HeadBuffer != NULL ) free( this->HeadBuffer ) ; + if( this->CashBuffer != NULL ) free( this->CashBuffer ) ; - this->fp = NULL; - this->HeadBuffer = NULL; - this->NameP = this->DirP = this->FileP = NULL; - this->CurrentDirectory = NULL; + this->fp = NULL ; + this->HeadBuffer = NULL ; + this->NameP = this->DirP = this->FileP = NULL ; + this->CurrentDirectory = NULL ; } // 指定のディレクトリデータの暗号化を解除する( 丸ごとメモリに読み込んだ場合用 ) -int DXArchive_VER5::DirectoryKeyConv(DARC_DIRECTORY_VER5 *Dir) +int DXArchive_VER5::DirectoryKeyConv( DARC_DIRECTORY_VER5 *Dir ) { // メモリイメージではない場合はエラー - if(this->MemoryOpenFlag == false) - return -1; + if( this->MemoryOpenFlag == false ) + return -1 ; // バージョン 0x0005 より前では何もしない - if(this->Head.Version < 0x0005) - return 0; - + if( this->Head.Version < 0x0005 ) + return 0 ; + // 暗号化解除処理開始 { - u32 i, FileHeadSize; - DARC_FILEHEAD_VER5 *File; + u32 i, FileHeadSize ; + DARC_FILEHEAD_VER5 *File ; // 格納されているファイルの数だけ繰り返す - FileHeadSize = this->Head.Version >= 0x0002 ? sizeof(DARC_FILEHEAD_VER5) : sizeof(DARC_FILEHEAD_VER1); - File = (DARC_FILEHEAD_VER5 *)(this->FileP + Dir->FileHeadAddress); - for(i = 0; i < Dir->FileHeadNum; i++, File = (DARC_FILEHEAD_VER5 *)((u8 *)File + FileHeadSize)) + FileHeadSize = this->Head.Version >= 0x0002 ? sizeof( DARC_FILEHEAD_VER5 ) : sizeof( DARC_FILEHEAD_VER1 ) ; + File = ( DARC_FILEHEAD_VER5 * )( this->FileP + Dir->FileHeadAddress ) ; + for( i = 0 ; i < Dir->FileHeadNum ; i ++, File = (DARC_FILEHEAD_VER5 *)( (u8 *)File + FileHeadSize ) ) { // ディレクトリかどうかで処理を分岐 - if(File->Attributes & FILE_ATTRIBUTE_DIRECTORY) + if( File->Attributes & FILE_ATTRIBUTE_DIRECTORY ) { // ディレクトリの場合は再帰をかける - DirectoryKeyConv((DARC_DIRECTORY_VER5 *)(this->DirP + File->DataAddress)); + DirectoryKeyConv( ( DARC_DIRECTORY_VER5 * )( this->DirP + File->DataAddress ) ) ; } else { - u8 *DataP; + u8 *DataP ; // ファイルの場合は暗号化を解除する - + // データがある場合のみ処理 - if(File->DataSize != 0) + if( File->DataSize != 0 ) { // データ位置をセットする - DataP = (u8 *)this->fp + this->Head.DataStartAddress + File->DataAddress; + DataP = ( u8 * )this->fp + this->Head.DataStartAddress + File->DataAddress ; // データが圧縮されているかどうかで処理を分岐 - if(this->Head.Version >= 0x0002 && File->PressDataSize != 0xffffffff) + if( this->Head.Version >= 0x0002 && File->PressDataSize != 0xffffffff ) { // 圧縮されている場合 - KeyConv(DataP, File->PressDataSize, File->DataSize, this->Key); + KeyConv( DataP, File->PressDataSize, File->DataSize, this->Key ) ; } else { // 圧縮されていない場合 - KeyConv(DataP, File->DataSize, File->DataSize, this->Key); + KeyConv( DataP, File->DataSize, File->DataSize, this->Key ) ; } } } @@ -2052,639 +2030,630 @@ int DXArchive_VER5::DirectoryKeyConv(DARC_DIRECTORY_VER5 *Dir) } // 終了 - return 0; + return 0 ; } // メモリ上にあるアーカイブイメージを開く( 0:成功 -1:失敗 ) -int DXArchive_VER5::OpenArchiveMem(void *ArchiveImage, int ArchiveSize, const char *KeyString) +int DXArchive_VER5::OpenArchiveMem( void *ArchiveImage, int ArchiveSize, const char *KeyString ) { - u8 *datp; + u8 *datp ; // 既になんらかのアーカイブを開いていた場合はエラー - if(this->fp != NULL) return -1; + if( this->fp != NULL ) return -1 ; // 鍵の作成 - KeyCreate(KeyString, this->Key); + KeyCreate( KeyString, this->Key ) ; // 最初にヘッダの部分を反転する - memcpy(&this->Head, ArchiveImage, sizeof(DARC_HEAD_VER5)); - KeyConv(&this->Head, sizeof(DARC_HEAD_VER5), 0, this->Key); + memcpy( &this->Head, ArchiveImage, sizeof( DARC_HEAD_VER5 ) ) ; + KeyConv( &this->Head, sizeof( DARC_HEAD_VER5 ), 0, this->Key ) ; // IDが違う場合はバージョン2以前か調べる - if(Head.Head != DXA_HEAD_VER5) + if( Head.Head != DXA_HEAD_VER5 ) { // バージョン2以前か調べる - memset(this->Key, 0xff, DXA_KEYSTR_LENGTH_VER5); + memset( this->Key, 0xffffffff, DXA_KEYSTR_LENGTH_VER5 ) ; - memcpy(&this->Head, ArchiveImage, sizeof(DARC_HEAD_VER5)); - KeyConv(&this->Head, sizeof(DARC_HEAD_VER5), 0, this->Key); + memcpy( &this->Head, ArchiveImage, sizeof( DARC_HEAD_VER5 ) ) ; + KeyConv( &this->Head, sizeof( DARC_HEAD_VER5 ), 0, this->Key ) ; // バージョン2以前でもない場合はエラー - if(Head.Head != DXA_HEAD_VER5) - return -1; + if( Head.Head != DXA_HEAD_VER5 ) + return -1 ; } - if(Head.Version < 0x0005) + if( Head.Version < 0x0005 ) { // すべてのデータを反転する - KeyConv(ArchiveImage, ArchiveSize, 0, this->Key); + KeyConv( ArchiveImage, ArchiveSize, 0, this->Key ) ; } // ポインタを保存 - this->fp = (FILE *)ArchiveImage; - datp = (u8 *)ArchiveImage; + this->fp = (FILE *)ArchiveImage ; + datp = (u8 *)ArchiveImage ; // ヘッダを解析する { - if(Head.Version >= 0x0005) + if( Head.Version >= 0x0005 ) { - memcpy(&this->Head, datp, sizeof(DARC_HEAD_VER5)); - KeyConv(&this->Head, sizeof(DARC_HEAD_VER5), 0, this->Key); + memcpy( &this->Head, datp, sizeof( DARC_HEAD_VER5 ) ) ; + KeyConv( &this->Head, sizeof( DARC_HEAD_VER5 ), 0, this->Key ) ; } else { - memcpy(&this->Head, datp, sizeof(DARC_HEAD_VER5)); + memcpy( &this->Head, datp, sizeof( DARC_HEAD_VER5 ) ) ; } - datp += sizeof(DARC_HEAD_VER5); + datp += sizeof( DARC_HEAD_VER5 ) ; // IDの検査 - if(this->Head.Head != DXA_HEAD_VER5) goto ERR; - + if( this->Head.Head != DXA_HEAD_VER5 ) goto ERR ; + // バージョン検査 - if(this->Head.Version > DXA_VER_VER5) goto ERR; + if( this->Head.Version > DXA_VER_VER5 ) goto ERR ; // ヘッダパックのアドレスをセットする - this->HeadBuffer = (TCHAR *)this->fp + this->Head.FileNameTableStartAddress; + this->HeadBuffer = (TCHAR *)this->fp + this->Head.FileNameTableStartAddress ; // 各アドレスをセットする - if(Head.Version >= 0x0005) + if( Head.Version >= 0x0005 ) { - KeyConv(this->HeadBuffer, this->Head.HeadSize, 0, this->Key); + KeyConv( this->HeadBuffer, this->Head.HeadSize, 0, this->Key ) ; } - this->NameP = this->HeadBuffer; - this->FileP = this->NameP + this->Head.FileTableStartAddress; - this->DirP = this->NameP + this->Head.DirectoryTableStartAddress; + this->NameP = this->HeadBuffer ; + this->FileP = this->NameP + this->Head.FileTableStartAddress ; + this->DirP = this->NameP + this->Head.DirectoryTableStartAddress ; } // カレントディレクトリのセット - this->CurrentDirectory = (DARC_DIRECTORY_VER5 *)this->DirP; + this->CurrentDirectory = ( DARC_DIRECTORY_VER5 * )this->DirP ; // メモリイメージから開いているフラグを立てる - MemoryOpenFlag = true; + MemoryOpenFlag = true ; // 全てのファイルの暗号化を解除する - if(this->Head.Version >= 0x0005) + if( this->Head.Version >= 0x0005 ) { - DirectoryKeyConv((DARC_DIRECTORY_VER5 *)this->DirP); + DirectoryKeyConv( ( DARC_DIRECTORY_VER5 * )this->DirP ) ; } // ユーザーのイメージから開いたフラグを立てる - UserMemoryImageFlag = true; + UserMemoryImageFlag = true ; // サイズも保存しておく - MemoryImageSize = ArchiveSize; + MemoryImageSize = ArchiveSize ; // 終了 - return 0; + return 0 ; -ERR: - if(Head.Version < 0x0005) +ERR : + if( Head.Version < 0x0005 ) { // 反転したデータを元に戻す - KeyConv(ArchiveImage, ArchiveSize, 0, this->Key); + KeyConv( ArchiveImage, ArchiveSize, 0, this->Key ) ; } // 終了 - return -1; + return -1 ; } // アーカイブファイルを開き最初にすべてメモリ上に読み込んでから処理する( 0:成功 -1:失敗 ) -int DXArchive_VER5::OpenArchiveFileMem(const TCHAR *ArchivePath, const char *KeyString) +int DXArchive_VER5::OpenArchiveFileMem( const TCHAR *ArchivePath, const char *KeyString ) { - FILE *pFp; - u8 *datp; - void *ArchiveImage; - int ArchiveSize; + FILE *fp ; + u8 *datp ; + void *ArchiveImage ; + int ArchiveSize ; // 既になんらかのアーカイブを開いていた場合はエラー - if(this->fp != NULL) return -1; + if( this->fp != NULL ) return -1 ; // 鍵の作成 - KeyCreate(KeyString, this->Key); + KeyCreate( KeyString, this->Key ) ; // メモリに読み込む { - pFp = _tfopen(ArchivePath, TEXT("rb")); - if(pFp == NULL) return -1; - fseek(pFp, 0L, SEEK_END); - ArchiveSize = ftell(pFp); - fseek(pFp, 0L, SEEK_SET); - ArchiveImage = malloc(ArchiveSize); - if(ArchiveImage == NULL) + fp = _tfopen( ArchivePath, TEXT("rb") ) ; + if( fp == NULL ) return -1 ; + fseek( fp, 0L, SEEK_END ) ; + ArchiveSize = ftell( fp ) ; + fseek( fp, 0L, SEEK_SET ) ; + ArchiveImage = malloc( ArchiveSize ) ; + if( ArchiveImage == NULL ) { - fclose(pFp); - return -1; + fclose( fp ) ; + return -1 ; } - fread(ArchiveImage, ArchiveSize, 1, pFp); - fclose(pFp); + fread( ArchiveImage, ArchiveSize, 1, fp ) ; + fclose( fp ) ; } // 最初にヘッダの部分を反転する - memcpy(&this->Head, ArchiveImage, sizeof(DARC_HEAD_VER5)); - KeyConv(&this->Head, sizeof(DARC_HEAD_VER5), 0, this->Key); + memcpy( &this->Head, ArchiveImage, sizeof( DARC_HEAD_VER5 ) ) ; + KeyConv( &this->Head, sizeof( DARC_HEAD_VER5 ), 0, this->Key ) ; // IDが違う場合はバージョン2以前か調べる - if(Head.Head != DXA_HEAD_VER5) + if( Head.Head != DXA_HEAD_VER5 ) { // バージョン2以前か調べる - memset(this->Key, 0xff, DXA_KEYSTR_LENGTH_VER5); + memset( this->Key, 0xffffffff, DXA_KEYSTR_LENGTH_VER5 ) ; - memcpy(&this->Head, ArchiveImage, sizeof(DARC_HEAD_VER5)); - KeyConv(&this->Head, sizeof(DARC_HEAD_VER5), 0, this->Key); + memcpy( &this->Head, ArchiveImage, sizeof( DARC_HEAD_VER5 ) ) ; + KeyConv( &this->Head, sizeof( DARC_HEAD_VER5 ), 0, this->Key ) ; // バージョン2以前でもない場合はエラー - if(Head.Head != DXA_HEAD_VER5) - { - free(ArchiveImage); - return -1; - } + if( Head.Head != DXA_HEAD_VER5 ) + return -1 ; } // すべてのデータを反転する - if(Head.Version < 0x0005) + if( Head.Version < 0x0005 ) { - KeyConv(ArchiveImage, ArchiveSize, 0, this->Key); + KeyConv( ArchiveImage, ArchiveSize, 0, this->Key ) ; } // ポインタを保存 - this->fp = (FILE *)ArchiveImage; - datp = (u8 *)ArchiveImage; + this->fp = (FILE *)ArchiveImage ; + datp = (u8 *)ArchiveImage ; // ヘッダを解析する { - if(Head.Version >= 0x0005) + if( Head.Version >= 0x0005 ) { - memcpy(&this->Head, datp, sizeof(DARC_HEAD_VER5)); - KeyConv(&this->Head, sizeof(DARC_HEAD_VER5), 0, this->Key); + memcpy( &this->Head, datp, sizeof( DARC_HEAD_VER5 ) ) ; + KeyConv( &this->Head, sizeof( DARC_HEAD_VER5 ), 0, this->Key ) ; } else { - memcpy(&this->Head, datp, sizeof(DARC_HEAD_VER5)); + memcpy( &this->Head, datp, sizeof( DARC_HEAD_VER5 ) ) ; } - datp += sizeof(DARC_HEAD_VER5); - + datp += sizeof( DARC_HEAD_VER5 ) ; + // IDの検査 - if(this->Head.Head != DXA_HEAD_VER5) goto ERR; - + if( this->Head.Head != DXA_HEAD_VER5 ) goto ERR ; + // バージョン検査 - if(this->Head.Version > DXA_VER_VER5) goto ERR; + if( this->Head.Version > DXA_VER_VER5 ) goto ERR ; // ヘッダパックのアドレスをセットする - this->HeadBuffer = (TCHAR *)this->fp + this->Head.FileNameTableStartAddress; + this->HeadBuffer = (TCHAR *)this->fp + this->Head.FileNameTableStartAddress ; // 各アドレスをセットする - if(Head.Version >= 0x0005) + if( Head.Version >= 0x0005 ) { - KeyConv(this->HeadBuffer, this->Head.HeadSize, 0, this->Key); + KeyConv( this->HeadBuffer, this->Head.HeadSize, 0, this->Key ) ; } - this->NameP = this->HeadBuffer; - this->FileP = this->NameP + this->Head.FileTableStartAddress; - this->DirP = this->NameP + this->Head.DirectoryTableStartAddress; + this->NameP = this->HeadBuffer ; + this->FileP = this->NameP + this->Head.FileTableStartAddress ; + this->DirP = this->NameP + this->Head.DirectoryTableStartAddress ; } // カレントディレクトリのセット - this->CurrentDirectory = (DARC_DIRECTORY_VER5 *)this->DirP; + this->CurrentDirectory = ( DARC_DIRECTORY_VER5 * )this->DirP ; // メモリイメージから開いているフラグを立てる - MemoryOpenFlag = true; + MemoryOpenFlag = true ; // 全てのファイルの暗号化を解除する - if(this->Head.Version >= 0x0005) + if( this->Head.Version >= 0x0005 ) { - DirectoryKeyConv((DARC_DIRECTORY_VER5 *)this->DirP); + DirectoryKeyConv( ( DARC_DIRECTORY_VER5 * )this->DirP ) ; } - + // ユーザーのイメージから開いたわけではないのでフラグを倒す - UserMemoryImageFlag = false; + UserMemoryImageFlag = false ; // サイズも保存しておく - MemoryImageSize = ArchiveSize; + MemoryImageSize = ArchiveSize ; // 終了 - return 0; + return 0 ; -ERR: - if(Head.Version < 0x0005) +ERR : + if( Head.Version < 0x0005 ) { // 反転したデータを元に戻す - KeyConv(ArchiveImage, ArchiveSize, 0, this->Key); + KeyConv( ArchiveImage, ArchiveSize, 0, this->Key ) ; } - + // 終了 - return -1; + return -1 ; } // アーカイブファイルを開く -int DXArchive_VER5::OpenArchiveFile(const TCHAR *ArchivePath, const char *KeyString) +int DXArchive_VER5::OpenArchiveFile( const TCHAR *ArchivePath, const char *KeyString ) { // 既になんらかのアーカイブを開いていた場合はエラー - if(this->fp != NULL) return -1; + if( this->fp != NULL ) return -1 ; // アーカイブファイルを開こうと試みる - this->fp = _tfopen(ArchivePath, TEXT("rb")); - if(this->fp == NULL) return -1; + this->fp = _tfopen( ArchivePath, TEXT("rb") ) ; + if( this->fp == NULL ) return -1 ; // 鍵文字列の作成 - KeyCreate(KeyString, this->Key); + KeyCreate( KeyString, this->Key ) ; // ヘッダを解析する { - KeyConvFileRead(&this->Head, sizeof(DARC_HEAD_VER5), this->fp, this->Key, 0); - + KeyConvFileRead( &this->Head, sizeof( DARC_HEAD_VER5 ), this->fp, this->Key, 0 ) ; + // IDの検査 - if(this->Head.Head != DXA_HEAD_VER5) + if( this->Head.Head != DXA_HEAD_VER5 ) { // バージョン2以前か調べる - memset(this->Key, 0xff, DXA_KEYSTR_LENGTH_VER5); + memset( this->Key, 0xffffffff, DXA_KEYSTR_LENGTH_VER5 ) ; - fseek(this->fp, 0L, SEEK_SET); - KeyConvFileRead(&Head, sizeof(DARC_HEAD_VER5), this->fp, this->Key, 0); + fseek( this->fp, 0L, SEEK_SET ) ; + KeyConvFileRead( &Head, sizeof( DARC_HEAD_VER5 ), this->fp, this->Key, 0 ) ; // バージョン2以前でもない場合はエラー - if(Head.Head != DXA_HEAD_VER5) - goto ERR; + if( Head.Head != DXA_HEAD_VER5 ) + goto ERR ; } - + // バージョン検査 - if(this->Head.Version > DXA_VER_VER5) goto ERR; - + if( this->Head.Version > DXA_VER_VER5 ) goto ERR ; + // ヘッダのサイズ分のメモリを確保する - this->HeadBuffer = (TCHAR *)calloc(this->Head.HeadSize, sizeof(TCHAR)); - if(this->HeadBuffer == NULL) goto ERR; - + this->HeadBuffer = (TCHAR * )calloc( this->Head.HeadSize, sizeof(TCHAR) ) ; + if( this->HeadBuffer == NULL ) goto ERR ; + // ヘッダパックをメモリに読み込む - fseek(this->fp, this->Head.FileNameTableStartAddress, SEEK_SET); - if(this->Head.Version >= 0x0005) + fseek( this->fp, this->Head.FileNameTableStartAddress, SEEK_SET ) ; + if( this->Head.Version >= 0x0005 ) { - KeyConvFileRead(this->HeadBuffer, this->Head.HeadSize, this->fp, this->Key, 0); + KeyConvFileRead( this->HeadBuffer, this->Head.HeadSize, this->fp, this->Key, 0 ) ; } else { - KeyConvFileRead(this->HeadBuffer, this->Head.HeadSize, this->fp, this->Key); + KeyConvFileRead( this->HeadBuffer, this->Head.HeadSize, this->fp, this->Key ) ; } - + // 各アドレスをセットする - this->NameP = this->HeadBuffer; - this->FileP = this->NameP + this->Head.FileTableStartAddress; - this->DirP = this->NameP + this->Head.DirectoryTableStartAddress; + this->NameP = this->HeadBuffer ; + this->FileP = this->NameP + this->Head.FileTableStartAddress ; + this->DirP = this->NameP + this->Head.DirectoryTableStartAddress ; } // カレントディレクトリのセット - this->CurrentDirectory = (DARC_DIRECTORY_VER5 *)this->DirP; + this->CurrentDirectory = ( DARC_DIRECTORY_VER5 * )this->DirP ; // メモリイメージから開いている、フラグを倒す - MemoryOpenFlag = false; + MemoryOpenFlag = false ; // 終了 - return 0; - -ERR: - if(this->fp != NULL) - { - fclose(this->fp); this->fp = NULL; - } - if(this->HeadBuffer != NULL) - { - free(this->HeadBuffer); this->HeadBuffer = NULL; - } + return 0 ; +ERR : + if( this->fp != NULL ){ fclose( this->fp ) ; this->fp = NULL ; } + if( this->HeadBuffer != NULL ){ free( this->HeadBuffer ) ; this->HeadBuffer = NULL ; } + // 終了 - return -1; + return -1 ; } // アーカイブファイルを閉じる -int DXArchive_VER5::CloseArchiveFile(void) +int DXArchive_VER5::CloseArchiveFile( void ) { // 既に閉じていたら何もせず終了 - if(this->fp == NULL) return 0; + if( this->fp == NULL ) return 0 ; // メモリから開いているかどうかで処理を分岐 - if(MemoryOpenFlag == true) + if( MemoryOpenFlag == true ) { // アーカイブクラスが読み込んだ場合とそうでない場合で処理を分岐 - if(UserMemoryImageFlag == true) + if( UserMemoryImageFlag == true ) { // 反転したデータを元に戻す - if(this->Head.Version >= 0x0005) + if( this->Head.Version >= 0x0005 ) { - DirectoryKeyConv((DARC_DIRECTORY_VER5 *)this->DirP); - KeyConv(this->HeadBuffer, this->Head.HeadSize, 0, this->Key); + DirectoryKeyConv( ( DARC_DIRECTORY_VER5 * )this->DirP ) ; + KeyConv( this->HeadBuffer, this->Head.HeadSize, 0, this->Key ) ; } else { - KeyConv(this->fp, this->MemoryImageSize, 0, this->Key); + KeyConv( this->fp, this->MemoryImageSize, 0, this->Key ) ; } } else { // 確保していたメモリを開放する - free(this->fp); + free( this->fp ) ; } } else { // アーカイブファイルを閉じる - fclose(this->fp); - + fclose( this->fp ) ; + // ヘッダバッファも解放 - free(this->HeadBuffer); + free( this->HeadBuffer ) ; } // ポインタ初期化 - this->fp = NULL; - this->HeadBuffer = NULL; - this->NameP = this->DirP = this->FileP = NULL; - this->CurrentDirectory = NULL; + this->fp = NULL ; + this->HeadBuffer = NULL ; + this->NameP = this->DirP = this->FileP = NULL ; + this->CurrentDirectory = NULL ; // 終了 - return 0; + return 0 ; } // アーカイブ内のディレクトリパスを変更する( 0:成功 -1:失敗 ) -int DXArchive_VER5::ChangeCurrentDirectoryFast(SEARCHDATA *SearchData) +int DXArchive_VER5::ChangeCurrentDirectoryFast( SEARCHDATA *SearchData ) { - DARC_FILEHEAD_VER5 *FileH; - int i, j, k, Num; - TCHAR *NameData, *PathData; - u16 PackNum, Parity; + DARC_FILEHEAD_VER5 *FileH ; + int i, j, k, Num ; + TCHAR *NameData, *PathData ; + u16 PackNum, Parity ; - PackNum = SearchData->PackNum; - Parity = SearchData->Parity; - PathData = SearchData->FileName; + PackNum = SearchData->PackNum ; + Parity = SearchData->Parity ; + PathData = SearchData->FileName ; // カレントディレクトリから同名のディレクトリを探す - FileH = (DARC_FILEHEAD_VER5 *)(this->FileP + this->CurrentDirectory->FileHeadAddress); - Num = (s32)this->CurrentDirectory->FileHeadNum; - for(i = 0; i < Num; i++, FileH++) + FileH = ( DARC_FILEHEAD_VER5 * )( this->FileP + this->CurrentDirectory->FileHeadAddress ) ; + Num = (s32)this->CurrentDirectory->FileHeadNum ; + for( i = 0 ; i < Num ; i ++, FileH ++ ) { // ディレクトリチェック - if((FileH->Attributes & FILE_ATTRIBUTE_DIRECTORY) == 0) continue; + if( ( FileH->Attributes & FILE_ATTRIBUTE_DIRECTORY ) == 0 ) continue ; // 文字列数とパリティチェック - NameData = this->NameP + FileH->NameAddress; - if(PackNum != ((u16 *)NameData)[0] || Parity != ((u16 *)NameData)[1]) continue; + NameData = this->NameP + FileH->NameAddress ; + if( PackNum != ((u16 *)NameData)[0] || Parity != ((u16 *)NameData)[1] ) continue ; // 文字列チェック - NameData += 4; - for(j = 0, k = 0; j < PackNum; j++, k += 4) - if(*((u32 *)&PathData[k]) != *((u32 *)&NameData[k])) break; + NameData += 4 ; + for( j = 0, k = 0 ; j < PackNum ; j ++, k += 4 ) + if( *((u32 *)&PathData[k]) != *((u32 *)&NameData[k]) ) break ; // 適合したディレクトリがあったらここで終了 - if(PackNum == j) break; + if( PackNum == j ) break ; } // 無かったらエラー - if(i == Num) return -1; + if( i == Num ) return -1 ; // 在ったらカレントディレクトリを変更 - this->CurrentDirectory = (DARC_DIRECTORY_VER5 *)(this->DirP + FileH->DataAddress); + this->CurrentDirectory = ( DARC_DIRECTORY_VER5 * )( this->DirP + FileH->DataAddress ) ; // 正常終了 - return 0; + return 0 ; } // アーカイブ内のディレクトリパスを変更する( 0:成功 -1:失敗 ) -int DXArchive_VER5::ChangeCurrentDir(const TCHAR *DirPath) +int DXArchive_VER5::ChangeCurrentDir( const TCHAR *DirPath ) { - return ChangeCurrentDirectoryBase(DirPath, true); + return ChangeCurrentDirectoryBase( DirPath, true ) ; } // アーカイブ内のディレクトリパスを変更する( 0:成功 -1:失敗 ) -int DXArchive_VER5::ChangeCurrentDirectoryBase(const TCHAR *DirectoryPath, bool ErrorIsDirectoryReset, SEARCHDATA *LastSearchData) +int DXArchive_VER5::ChangeCurrentDirectoryBase( const TCHAR *DirectoryPath, bool ErrorIsDirectoryReset, SEARCHDATA *LastSearchData ) { - DARC_DIRECTORY_VER5 *OldDir; - SEARCHDATA SearchData; + DARC_DIRECTORY_VER5 *OldDir ; + SEARCHDATA SearchData ; // ここに留まるパスだったら無視 - if(_tcscmp(DirectoryPath, TEXT(".")) == 0) return 0; + if( _tcscmp( DirectoryPath, TEXT(".") ) == 0 ) return 0 ; // 『\』だけの場合はルートディレクトリに戻る - if(_tcscmp(DirectoryPath, TEXT("\\")) == 0) + if( _tcscmp( DirectoryPath, TEXT("\\") ) == 0 ) { - this->CurrentDirectory = (DARC_DIRECTORY_VER5 *)this->DirP; - return 0; + this->CurrentDirectory = ( DARC_DIRECTORY_VER5 * )this->DirP ; + return 0 ; } // 下に一つ下がるパスだったら処理を分岐 - if(_tcscmp(DirectoryPath, TEXT("..")) == 0) + if( _tcscmp( DirectoryPath, TEXT("..") ) == 0 ) { // ルートディレクトリに居たらエラー - if(this->CurrentDirectory->ParentDirectoryAddress == 0xffffffff) return -1; - + if( this->CurrentDirectory->ParentDirectoryAddress == 0xffffffff ) return -1 ; + // 親ディレクトリがあったらそちらに移る - this->CurrentDirectory = (DARC_DIRECTORY_VER5 *)(this->DirP + this->CurrentDirectory->ParentDirectoryAddress); - return 0; + this->CurrentDirectory = ( DARC_DIRECTORY_VER5 * )( this->DirP + this->CurrentDirectory->ParentDirectoryAddress ) ; + return 0 ; } // それ以外の場合は指定の名前のディレクトリを探す - + // 変更以前のディレクトリを保存しておく - OldDir = this->CurrentDirectory; + OldDir = this->CurrentDirectory ; // パス中に『\』があるかどうかで処理を分岐 - if(_tcschr(DirectoryPath, '\\') == NULL) + if( _tcschr( DirectoryPath, '\\' ) == NULL ) { // ファイル名を検索専用の形式に変換する - ConvSearchData(&SearchData, DirectoryPath, NULL); + ConvSearchData( &SearchData, DirectoryPath, NULL ) ; // ディレクトリを変更 - if(ChangeCurrentDirectoryFast(&SearchData) < 0) goto ERR; - - /* // \ が無い場合は、同名のディレクトリを探す - FileH = ( DARC_FILEHEAD_VER5 * )( this->FileP + this->CurrentDirectory->FileHeadAddress ) ; - for( i = 0 ; - i < (s32)this->CurrentDirectory->FileHeadNum && - StrICmp( ( char * )( this->NameP + FileH->NameAddress ), DirectoryPath ) != 0 ; - i ++, FileH ++ ){} - */ + if( ChangeCurrentDirectoryFast( &SearchData ) < 0 ) goto ERR ; + +/* // \ が無い場合は、同名のディレクトリを探す + FileH = ( DARC_FILEHEAD_VER5 * )( this->FileP + this->CurrentDirectory->FileHeadAddress ) ; + for( i = 0 ; + i < (s32)this->CurrentDirectory->FileHeadNum && + StrICmp( ( char * )( this->NameP + FileH->NameAddress ), DirectoryPath ) != 0 ; + i ++, FileH ++ ){} +*/ } else { // \ がある場合は繋がったディレクトリを一つづつ変更してゆく + + int Point, StrLength ; - int Point, StrLength; - - Point = 0; + Point = 0 ; // ループ for(;;) { // 文字列を取得する - ConvSearchData(&SearchData, &DirectoryPath[Point], &StrLength); - Point += StrLength; - /* StrPoint = 0 ; - while( DirectoryPath[Point] != '\0' && DirectoryPath[Point] != '\\' ) - { - if( CheckMultiByteChar( &DirectoryPath[Point] ) == TRUE ) - { - *((u16 *)&String[StrPoint]) = *((u16 *)&DirectoryPath[Point]) ; - StrPoint += 2 ; - Point += 2 ; - } - else - { - String[StrPoint] = DirectoryPath[Point] ; - StrPoint ++ ; - Point ++ ; - } - } - String[StrPoint] = '\0' ; - */ + ConvSearchData( &SearchData, &DirectoryPath[Point], &StrLength ) ; + Point += StrLength ; +/* StrPoint = 0 ; + while( DirectoryPath[Point] != '\0' && DirectoryPath[Point] != '\\' ) + { + if( CheckMultiByteChar( &DirectoryPath[Point] ) == TRUE ) + { + *((u16 *)&String[StrPoint]) = *((u16 *)&DirectoryPath[Point]) ; + StrPoint += 2 ; + Point += 2 ; + } + else + { + String[StrPoint] = DirectoryPath[Point] ; + StrPoint ++ ; + Point ++ ; + } + } + String[StrPoint] = '\0' ; +*/ // もし初っ端が \ だった場合はルートディレクトリに落とす - if(StrLength == 0 && DirectoryPath[Point] == '\\') + if( StrLength == 0 && DirectoryPath[Point] == '\\' ) { - this->ChangeCurrentDirectoryBase(TEXT("\\"), false); + this->ChangeCurrentDirectoryBase( TEXT("\\"), false ) ; } else { // それ以外の場合は普通にディレクトリ変更 - if(this->ChangeCurrentDirectoryFast(&SearchData) < 0) + if( this->ChangeCurrentDirectoryFast( &SearchData ) < 0 ) { // エラーが起きて、更にエラーが起きた時に元のディレクトリに戻せの // フラグが立っている場合は元のディレクトリに戻す - if(ErrorIsDirectoryReset == true) this->CurrentDirectory = OldDir; + if( ErrorIsDirectoryReset == true ) this->CurrentDirectory = OldDir ; // エラー終了 - goto ERR; + goto ERR ; } } // もし終端文字で終了した場合はループから抜ける // 又はあと \ しかない場合もループから抜ける - if(DirectoryPath[Point] == '\0' || - (DirectoryPath[Point] == '\\' && DirectoryPath[Point + 1] == '\0')) break; - Point++; + if( DirectoryPath[Point] == '\0' || + ( DirectoryPath[Point] == '\\' && DirectoryPath[Point+1] == '\0' ) ) break ; + Point ++ ; } } - if(LastSearchData != NULL) + if( LastSearchData != NULL ) { - memcpy(LastSearchData->FileName, SearchData.FileName, SearchData.PackNum * 4); - LastSearchData->Parity = SearchData.Parity; - LastSearchData->PackNum = SearchData.PackNum; + memcpy( LastSearchData->FileName, SearchData.FileName, SearchData.PackNum * 4 ) ; + LastSearchData->Parity = SearchData.Parity ; + LastSearchData->PackNum = SearchData.PackNum ; } // 正常終了 - return 0; + return 0 ; ERR: - if(LastSearchData != NULL) + if( LastSearchData != NULL ) { - memcpy(LastSearchData->FileName, SearchData.FileName, SearchData.PackNum * 4); - LastSearchData->Parity = SearchData.Parity; - LastSearchData->PackNum = SearchData.PackNum; + memcpy( LastSearchData->FileName, SearchData.FileName, SearchData.PackNum * 4 ) ; + LastSearchData->Parity = SearchData.Parity ; + LastSearchData->PackNum = SearchData.PackNum ; } // エラー終了 - return -1; + return -1 ; } - + // アーカイブ内のカレントディレクトリパスを取得する -int DXArchive_VER5::GetCurrentDir(TCHAR *DirPathBuffer, int BufferLength) +int DXArchive_VER5::GetCurrentDir(TCHAR *DirPathBuffer, int BufferLength ) { - TCHAR DirPath[MAX_PATH]; - DARC_DIRECTORY_VER5 *Dir[200], *DirTempP; - int Depth, i; + TCHAR DirPath[MAX_PATH] ; + DARC_DIRECTORY_VER5 *Dir[200], *DirTempP ; + int Depth, i ; // ルートディレクトリに着くまで検索する - Depth = 0; - DirTempP = this->CurrentDirectory; - while(DirTempP->DirectoryAddress != 0xffffffff && DirTempP->DirectoryAddress != 0) + Depth = 0 ; + DirTempP = this->CurrentDirectory ; + while( DirTempP->DirectoryAddress != 0xffffffff && DirTempP->DirectoryAddress != 0 ) { - Dir[Depth] = DirTempP; - DirTempP = (DARC_DIRECTORY_VER5 *)(this->DirP + DirTempP->ParentDirectoryAddress); - Depth++; + Dir[Depth] = DirTempP ; + DirTempP = ( DARC_DIRECTORY_VER5 * )( this->DirP + DirTempP->ParentDirectoryAddress ) ; + Depth ++ ; } - + // パス名を連結する - DirPath[0] = '\0'; - for(i = Depth - 1; i >= 0; i--) + DirPath[0] = '\0' ; + for( i = Depth - 1 ; i >= 0 ; i -- ) { - _tcscat(DirPath, TEXT("\\")); - _tcscat(DirPath, (TCHAR *)(this->NameP + ((DARC_FILEHEAD_VER5 *)(this->FileP + Dir[i]->DirectoryAddress))->NameAddress)); + _tcscat( DirPath, TEXT("\\") ) ; + _tcscat( DirPath, ( TCHAR * )( this->NameP + ( ( DARC_FILEHEAD_VER5 * )( this->FileP + Dir[i]->DirectoryAddress ) )->NameAddress ) ) ; } // バッファの長さが0か、長さが足りないときはディレクトリ名の長さを返す - if(BufferLength == 0 || BufferLength < (s32)_tcslen(DirPath)) + if( BufferLength == 0 || BufferLength < (s32)_tcslen( DirPath ) ) { - return static_cast(_tcslen(DirPath) + 1); + return (int)(_tcslen(DirPath) + 1); } else { // ディレクトリ名をバッファに転送する - _tcscpy(DirPathBuffer, DirPath); + _tcscpy( DirPathBuffer, DirPath ) ; } // 終了 - return 0; + return 0 ; } // アーカイブファイル中の指定のファイルをメモリに読み込む -int DXArchive_VER5::LoadFileToMem(const TCHAR *FilePath, void *Buffer, unsigned int BufferLength) +int DXArchive_VER5::LoadFileToMem( const TCHAR *FilePath, void *Buffer, unsigned int BufferLength ) { - DARC_FILEHEAD_VER5 *FileH; + DARC_FILEHEAD_VER5 *FileH ; // 指定のファイルの情報を得る - FileH = this->GetFileInfo(FilePath); - if(FileH == NULL) return -1; + FileH = this->GetFileInfo( FilePath ) ; + if( FileH == NULL ) return -1 ; // ファイルサイズが足りているか調べる、足りていないか、バッファ、又はサイズが0だったらサイズを返す - if(BufferLength < FileH->DataSize || BufferLength == 0 || Buffer == NULL) + if( BufferLength < FileH->DataSize || BufferLength == 0 || Buffer == NULL ) { - return (int)FileH->DataSize; + return ( int )FileH->DataSize ; } // 足りている場合はバッファーに読み込む // ファイルが圧縮されているかどうかで処理を分岐 - if(this->Head.Version >= 0x0002 && FileH->PressDataSize != 0xffffffff) + if( this->Head.Version >= 0x0002 && FileH->PressDataSize != 0xffffffff ) { // 圧縮されている場合 // メモリ上に読み込んでいるかどうかで処理を分岐 - if(MemoryOpenFlag == true) + if( MemoryOpenFlag == true ) { // メモリ上の圧縮データを解凍する - Decode((u8 *)this->fp + this->Head.DataStartAddress + FileH->DataAddress, Buffer); + Decode( (u8 *)this->fp + this->Head.DataStartAddress + FileH->DataAddress, Buffer ) ; } else { - void *temp; + void *temp ; // 圧縮データをメモリに読み込んでから解凍する // 圧縮データが収まるメモリ領域の確保 - temp = malloc(FileH->PressDataSize); + temp = malloc( FileH->PressDataSize ) ; // 圧縮データの読み込み - fseek(this->fp, this->Head.DataStartAddress + FileH->DataAddress, SEEK_SET); - if(this->Head.Version >= 0x0005) + fseek( this->fp, this->Head.DataStartAddress + FileH->DataAddress, SEEK_SET ) ; + if( this->Head.Version >= 0x0005 ) { - KeyConvFileRead(temp, FileH->PressDataSize, this->fp, this->Key, FileH->DataSize); + KeyConvFileRead( temp, FileH->PressDataSize, this->fp, this->Key, FileH->DataSize ) ; } else { - KeyConvFileRead(temp, FileH->PressDataSize, this->fp, this->Key); + KeyConvFileRead( temp, FileH->PressDataSize, this->fp, this->Key ) ; } - + // 解凍 - Decode(temp, Buffer); - + Decode( temp, Buffer ) ; + // メモリの解放 - free(temp); + free( temp ) ; } } else @@ -2692,134 +2661,134 @@ int DXArchive_VER5::LoadFileToMem(const TCHAR *FilePath, void *Buffer, unsigned // 圧縮されていない場合 // メモリ上に読み込んでいるかどうかで処理を分岐 - if(MemoryOpenFlag == true) + if( MemoryOpenFlag == true ) { // コピー - memcpy(Buffer, (u8 *)this->fp + this->Head.DataStartAddress + FileH->DataAddress, FileH->DataSize); + memcpy( Buffer, (u8 *)this->fp + this->Head.DataStartAddress + FileH->DataAddress, FileH->DataSize ) ; } else { // ファイルポインタを移動 - fseek(this->fp, this->Head.DataStartAddress + FileH->DataAddress, SEEK_SET); + fseek( this->fp, this->Head.DataStartAddress + FileH->DataAddress, SEEK_SET ) ; // 読み込み - if(this->Head.Version >= 0x0005) + if( this->Head.Version >= 0x0005 ) { - KeyConvFileRead(Buffer, FileH->DataSize, this->fp, this->Key, FileH->DataSize); + KeyConvFileRead( Buffer, FileH->DataSize, this->fp, this->Key, FileH->DataSize ) ; } else { - KeyConvFileRead(Buffer, FileH->DataSize, this->fp, this->Key); + KeyConvFileRead( Buffer, FileH->DataSize, this->fp, this->Key ) ; } } } - + // 終了 - return 0; + return 0 ; } // アーカイブファイル中の指定のファイルをサイズを取得する -int DXArchive_VER5::GetFileSize(const TCHAR *FilePath) +int DXArchive_VER5::GetFileSize( const TCHAR *FilePath ) { // ファイルサイズを返す - return this->LoadFileToMem(FilePath, NULL, 0); + return this->LoadFileToMem( FilePath, NULL, 0 ) ; } // アーカイブファイルをメモリに読み込んだ場合のファイルイメージが格納されている先頭アドレスを取得する( メモリから開いている場合のみ有効 ) -void *DXArchive_VER5::GetFileImage(void) +void *DXArchive_VER5::GetFileImage( void ) { // メモリイメージから開いていなかったらエラー - if(MemoryOpenFlag == false) return NULL; + if( MemoryOpenFlag == false ) return NULL ; // 先頭アドレスを返す - return this->fp; + return this->fp ; } // アーカイブファイル中の指定のファイルのファイル内の位置とファイルの大きさを得る( -1:エラー ) -int DXArchive_VER5::GetFileInfo(const TCHAR *FilePath, int *PositionP, int *SizeP) +int DXArchive_VER5::GetFileInfo( const TCHAR *FilePath, int *PositionP, int *SizeP ) { - DARC_FILEHEAD_VER5 *FileH; + DARC_FILEHEAD_VER5 *FileH ; // 指定のファイルの情報を得る - FileH = this->GetFileInfo(FilePath); - if(FileH == NULL) return -1; + FileH = this->GetFileInfo( FilePath ) ; + if( FileH == NULL ) return -1 ; // ファイルのデータがある位置とファイルサイズを保存する - if(PositionP != NULL) *PositionP = this->Head.DataStartAddress + FileH->DataAddress; - if(SizeP != NULL) *SizeP = FileH->DataSize; + if( PositionP != NULL ) *PositionP = this->Head.DataStartAddress + FileH->DataAddress ; + if( SizeP != NULL ) *SizeP = FileH->DataSize ; // 成功終了 - return 0; + return 0 ; } // アーカイブファイル中の指定のファイルを、クラス内のバッファに読み込む -void *DXArchive_VER5::LoadFileToCash(const TCHAR *FilePath) +void *DXArchive_VER5::LoadFileToCash( const TCHAR *FilePath ) { - int FileSize; + int FileSize ; // ファイルサイズを取得する - FileSize = this->GetFileSize(FilePath); + FileSize = this->GetFileSize( FilePath ) ; // ファイルが無かったらエラー - if(FileSize < 0) return NULL; + if( FileSize < 0 ) return NULL ; // 確保しているキャッシュバッファのサイズよりも大きい場合はバッファを再確保する - if(FileSize > (int)this->CashBufferSize) + if( FileSize > ( int )this->CashBufferSize ) { // キャッシュバッファのクリア - this->ClearCash(); + this->ClearCash() ; // キャッシュバッファの再確保 - this->CashBuffer = malloc(FileSize); + this->CashBuffer = malloc( FileSize ) ; // 確保に失敗した場合は NULL を返す - if(this->CashBuffer == NULL) return NULL; + if( this->CashBuffer == NULL ) return NULL ; // キャッシュバッファのサイズを保存 - this->CashBufferSize = FileSize; + this->CashBufferSize = FileSize ; } // ファイルをメモリに読み込む - this->LoadFileToMem(FilePath, this->CashBuffer, FileSize); + this->LoadFileToMem( FilePath, this->CashBuffer, FileSize ) ; // キャッシュバッファのアドレスを返す - return this->CashBuffer; + return this->CashBuffer ; } // キャッシュバッファを開放する -int DXArchive_VER5::ClearCash(void) +int DXArchive_VER5::ClearCash( void ) { // メモリが確保されていたら解放する - if(this->CashBuffer != NULL) + if( this->CashBuffer != NULL ) { - free(this->CashBuffer); - this->CashBuffer = NULL; - this->CashBufferSize = 0; + free( this->CashBuffer ) ; + this->CashBuffer = NULL ; + this->CashBufferSize = 0 ; } // 終了 - return 0; + return 0 ; } - + // アーカイブファイル中の指定のファイルを開き、ファイルアクセス用オブジェクトを作成する -DXArchiveFile_VER5 *DXArchive_VER5::OpenFile(const TCHAR *FilePath) +DXArchiveFile_VER5 *DXArchive_VER5::OpenFile( const TCHAR *FilePath ) { - DARC_FILEHEAD_VER5 *FileH; - DXArchiveFile_VER5 *CDArc = NULL; + DARC_FILEHEAD_VER5 *FileH ; + DXArchiveFile_VER5 *CDArc = NULL ; // メモリから開いている場合は無効 - if(MemoryOpenFlag == true) return NULL; + if( MemoryOpenFlag == true ) return NULL ; // 指定のファイルの情報を得る - FileH = this->GetFileInfo(FilePath); - if(FileH == NULL) return NULL; + FileH = this->GetFileInfo( FilePath ) ; + if( FileH == NULL ) return NULL ; // 新しく DXArchiveFile_VER5 クラスを作成する - CDArc = new DXArchiveFile_VER5(FileH, this); - + CDArc = new DXArchiveFile_VER5( FileH, this ) ; + // DXArchiveFile_VER5 クラスのポインタを返す - return CDArc; + return CDArc ; } @@ -2835,41 +2804,41 @@ DXArchiveFile_VER5 *DXArchive_VER5::OpenFile(const TCHAR *FilePath) // コンストラクタ -DXArchiveFile_VER5::DXArchiveFile_VER5(DARC_FILEHEAD_VER5 *FileHead, DXArchive_VER5 *Archive) +DXArchiveFile_VER5::DXArchiveFile_VER5( DARC_FILEHEAD_VER5 *FileHead, DXArchive_VER5 *Archive ) { - this->FileData = FileHead; - this->Archive = Archive; - this->EOFFlag = FALSE; - this->FilePoint = 0; - this->DataBuffer = NULL; - + this->FileData = FileHead ; + this->Archive = Archive ; + this->EOFFlag = FALSE ; + this->FilePoint = 0 ; + this->DataBuffer = NULL ; + // ファイルが圧縮されている場合はここで読み込んで解凍してしまう - if(this->Archive->GetHeader()->Version >= 0x0002 && FileHead->PressDataSize != 0xffffffff) + if( this->Archive->GetHeader()->Version >= 0x0002 && FileHead->PressDataSize != 0xffffffff ) { - void *temp; + void *temp ; // 圧縮データが収まるメモリ領域の確保 - temp = malloc(FileHead->PressDataSize); + temp = malloc( FileHead->PressDataSize ) ; // 解凍データが収まるメモリ領域の確保 - this->DataBuffer = malloc(FileHead->DataSize); + this->DataBuffer = malloc( FileHead->DataSize ) ; // 圧縮データの読み込み - fseek(this->Archive->GetFilePointer(), this->Archive->GetHeader()->DataStartAddress + FileHead->DataAddress, SEEK_SET); - if(this->Archive->GetHeader()->Version >= 0x0005) + fseek( this->Archive->GetFilePointer(), this->Archive->GetHeader()->DataStartAddress + FileHead->DataAddress, SEEK_SET ) ; + if( this->Archive->GetHeader()->Version >= 0x0005 ) { - DXArchive_VER5::KeyConvFileRead(temp, FileHead->PressDataSize, this->Archive->GetFilePointer(), this->Archive->GetKey(), FileHead->DataSize); + DXArchive_VER5::KeyConvFileRead( temp, FileHead->PressDataSize, this->Archive->GetFilePointer(), this->Archive->GetKey(), FileHead->DataSize ) ; } else { - DXArchive_VER5::KeyConvFileRead(temp, FileHead->PressDataSize, this->Archive->GetFilePointer(), this->Archive->GetKey()); + DXArchive_VER5::KeyConvFileRead( temp, FileHead->PressDataSize, this->Archive->GetFilePointer(), this->Archive->GetKey() ) ; } - + // 解凍 - DXArchive_VER5::Decode(temp, this->DataBuffer); - + DXArchive_VER5::Decode( temp, this->DataBuffer ) ; + // メモリの解放 - free(temp); + free( temp ) ; } } @@ -2877,106 +2846,106 @@ DXArchiveFile_VER5::DXArchiveFile_VER5(DARC_FILEHEAD_VER5 *FileHead, DXArchive_V DXArchiveFile_VER5::~DXArchiveFile_VER5() { // メモリの解放 - if(this->DataBuffer != NULL) + if( this->DataBuffer != NULL ) { - free(this->DataBuffer); - this->DataBuffer = NULL; + free( this->DataBuffer ) ; + this->DataBuffer = NULL ; } } // ファイルの内容を読み込む -int DXArchiveFile_VER5::Read(void *Buffer, int ReadLength) +int DXArchiveFile_VER5::Read( void *Buffer, int ReadLength ) { - int ReadSize; + int ReadSize ; // EOF フラグが立っていたら0を返す - if(this->EOFFlag == TRUE) return 0; - + if( this->EOFFlag == TRUE ) return 0 ; + // アーカイブファイルポインタと、仮想ファイルポインタが一致しているか調べる // 一致していなかったらアーカイブファイルポインタを移動する - if(this->DataBuffer == NULL && ftell(this->Archive->GetFilePointer()) != (s32)(this->FileData->DataAddress + this->Archive->GetHeader()->DataStartAddress + this->FilePoint)) + if( this->DataBuffer == NULL && ftell( this->Archive->GetFilePointer() ) != (s32)( this->FileData->DataAddress + this->Archive->GetHeader()->DataStartAddress + this->FilePoint ) ) { - fseek(this->Archive->GetFilePointer(), this->FileData->DataAddress + this->Archive->GetHeader()->DataStartAddress + this->FilePoint, SEEK_SET); + fseek( this->Archive->GetFilePointer(), this->FileData->DataAddress + this->Archive->GetHeader()->DataStartAddress + this->FilePoint, SEEK_SET ) ; } - + // EOF 検出 - if(this->FileData->DataSize == this->FilePoint) + if( this->FileData->DataSize == this->FilePoint ) { - this->EOFFlag = TRUE; - return 0; + this->EOFFlag = TRUE ; + return 0 ; } - + // データを読み込む量を設定する - ReadSize = ReadLength < (s32)(this->FileData->DataSize - this->FilePoint) ? ReadLength : this->FileData->DataSize - this->FilePoint; - + ReadSize = ReadLength < (s32)( this->FileData->DataSize - this->FilePoint ) ? ReadLength : this->FileData->DataSize - this->FilePoint ; + // データを読み込む - if(this->DataBuffer == NULL) + if( this->DataBuffer == NULL ) { - if(this->Archive->GetHeader()->Version >= 0x0005) + if( this->Archive->GetHeader()->Version >= 0x0005 ) { - DXArchive_VER5::KeyConvFileRead(Buffer, ReadSize, this->Archive->GetFilePointer(), this->Archive->GetKey(), this->FileData->DataSize + this->FilePoint); + DXArchive_VER5::KeyConvFileRead( Buffer, ReadSize, this->Archive->GetFilePointer(), this->Archive->GetKey(), this->FileData->DataSize + this->FilePoint ) ; } else { - DXArchive_VER5::KeyConvFileRead(Buffer, ReadSize, this->Archive->GetFilePointer(), this->Archive->GetKey()); + DXArchive_VER5::KeyConvFileRead( Buffer, ReadSize, this->Archive->GetFilePointer(), this->Archive->GetKey() ) ; } } else { - memcpy(Buffer, (u8 *)this->DataBuffer + this->FilePoint, ReadSize); + memcpy( Buffer, (u8 *)this->DataBuffer + this->FilePoint, ReadSize ) ; } - + // EOF フラグを倒す - this->EOFFlag = FALSE; + this->EOFFlag = FALSE ; // 読み込んだ分だけファイルポインタを移動する - this->FilePoint += ReadSize; - + this->FilePoint += ReadSize ; + // 読み込んだ容量を返す - return ReadSize; + return ReadSize ; } - + // ファイルポインタを変更する -int DXArchiveFile_VER5::Seek(int SeekPoint, int SeekMode) +int DXArchiveFile_VER5::Seek( int SeekPoint, int SeekMode ) { // シークタイプによって処理を分岐 - switch(SeekMode) + switch( SeekMode ) { - case SEEK_SET: break; - case SEEK_CUR: SeekPoint += this->FilePoint; break; - case SEEK_END: SeekPoint = this->FileData->DataSize + SeekPoint; break; + case SEEK_SET : break ; + case SEEK_CUR : SeekPoint += this->FilePoint ; break ; + case SEEK_END : SeekPoint = this->FileData->DataSize + SeekPoint ; break ; } - + // 補正 - if(SeekPoint > (s32)this->FileData->DataSize) SeekPoint = this->FileData->DataSize; - if(SeekPoint < 0) SeekPoint = 0; - + if( SeekPoint > (s32)this->FileData->DataSize ) SeekPoint = this->FileData->DataSize ; + if( SeekPoint < 0 ) SeekPoint = 0 ; + // セット - this->FilePoint = SeekPoint; - + this->FilePoint = SeekPoint ; + // EOFフラグを倒す - this->EOFFlag = FALSE; - + this->EOFFlag = FALSE ; + // 終了 - return 0; + return 0 ; } // 現在のファイルポインタを得る -int DXArchiveFile_VER5::Tell(void) +int DXArchiveFile_VER5::Tell( void ) { - return this->FilePoint; + return this->FilePoint ; } // ファイルの終端に来ているか、のフラグを得る -int DXArchiveFile_VER5::Eof(void) +int DXArchiveFile_VER5::Eof( void ) { - return this->EOFFlag; + return this->EOFFlag ; } // ファイルのサイズを取得する -int DXArchiveFile_VER5::Size(void) +int DXArchiveFile_VER5::Size( void ) { - return this->FileData->DataSize; + return this->FileData->DataSize ; } diff --git a/src/WolfDec/3rdParty/DXArchiveVer5.h b/src/WolfDec/3rdParty/DXArchiveVer5.h index 1a8a4d2..a9c6188 100644 --- a/src/WolfDec/3rdParty/DXArchiveVer5.h +++ b/src/WolfDec/3rdParty/DXArchiveVer5.h @@ -190,7 +190,7 @@ public : DATE_RESULT_DRAW, // 日付は同じ } ; - explicit DXArchive_VER5(TCHAR *ArchivePath = NULL ) ; + DXArchive_VER5(TCHAR *ArchivePath = NULL ) ; ~DXArchive_VER5() ; static int EncodeArchive(TCHAR *OutputFileName, TCHAR **FileOrDirectoryPath, int FileNum, bool Press = false, const char *KeyString = NULL ) ; // アーカイブファイルを作成する @@ -313,10 +313,6 @@ public : int Size( void ) ; // ファイルのサイズを取得する inline DARC_FILEHEAD_VER5 *GetFileData( void ){ return FileData ; } - - DXArchiveFile_VER5(DXArchiveFile_VER5&) = delete; - void operator=(DXArchiveFile_VER5 const&t) = delete; - DXArchiveFile_VER5(DXArchiveFile_VER5&&) = delete; } ; #endif diff --git a/src/WolfDec/3rdParty/DXArchiveVer6.cpp b/src/WolfDec/3rdParty/DXArchiveVer6.cpp new file mode 100644 index 0000000..541d791 --- /dev/null +++ b/src/WolfDec/3rdParty/DXArchiveVer6.cpp @@ -0,0 +1,2741 @@ +// ------------------------------------------------------------------------------- +// +// DXライブラリアーカイバ +// +// Creator : 山田 巧 +// Creation Date : 2003/09/11 +// Version : 1.02 +// +// ------------------------------------------------------------------------------- + +#define INLINE_ASM + +// include ---------------------------- +#include "DXArchiveVer6.h" +#include +#include +#include + +// define ----------------------------- + +#define MIN_COMPRESS (4) // 最低圧縮バイト数 +#define MAX_SEARCHLISTNUM (64) // 最大一致長を探す為のリストを辿る最大数 +#define MAX_SUBLISTNUM (65536) // 圧縮時間短縮のためのサブリストの最大数 +#define MAX_COPYSIZE (0x1fff + MIN_COMPRESS) // 参照アドレスからコピー出切る最大サイズ( 圧縮コードが表現できるコピーサイズの最大値 + 最低圧縮バイト数 ) +#define MAX_ADDRESSLISTNUM (1024 * 1024 * 1) // スライド辞書の最大サイズ +#define MAX_POSITION (1 << 24) // 参照可能な最大相対アドレス( 16MB ) + +WCHAR sjis2utf8_VER6(const char* sjis); + +// struct ----------------------------- + +// 圧縮時間短縮用リスト +typedef struct LZ_LIST +{ + LZ_LIST *next, *prev ; + u32 address ; +} LZ_LIST ; + +// class code ------------------------- + +// ファイル名も一緒になっていると分かっているパス中からファイルパスとディレクトリパスを分割する +// フルパスである必要は無い +int DXArchive_VER6::GetFilePathAndDirPath(TCHAR *Src, TCHAR *FilePath, TCHAR *DirPath ) +{ + int i, Last ; + + // ファイル名を抜き出す + i = 0 ; + Last = -1 ; + while( Src[i] != '\0' ) + { + if( CheckMultiByteChar( &Src[i] ) == FALSE ) + { + if( Src[i] == '\\' || Src[i] == '/' || Src[i] == '\0' || Src[i] == ':' ) Last = i ; + i ++ ; + } + else + { + i += 2 ; + } + } + if( FilePath != NULL ) + { + if( Last != -1 ) _tcscpy( FilePath, &Src[Last+1] ) ; + else _tcscpy( FilePath, Src ) ; + } + + // ディレクトリパスを抜き出す + if( DirPath != NULL ) + { + if( Last != -1 ) + { + _tcsncpy( DirPath, Src, Last ) ; + DirPath[Last] = '\0' ; + } + else + { + DirPath[0] = '\0' ; + } + } + + // 終了 + return 0 ; +} + +// ファイルの情報を得る +DARC_FILEHEAD_VER6 *DXArchive_VER6::GetFileInfo( const TCHAR *FilePath ) +{ + DARC_DIRECTORY_VER6 *OldDir ; + DARC_FILEHEAD_VER6 *FileH ; + u8 *NameData ; + int i, j, k, Num, FileHeadSize ; + SEARCHDATA SearchData ; + + // 元のディレクトリを保存しておく + OldDir = this->CurrentDirectory ; + + // ファイルパスに \ が含まれている場合、ディレクトリ変更を行う + if( _tcschr( FilePath, '\\' ) != NULL ) + { + // カレントディレクトリを目的のファイルがあるディレクトリに変更する + if( this->ChangeCurrentDirectoryBase( FilePath, false, &SearchData ) >= 0 ) + { + // エラーが起きなかった場合はファイル名もディレクトリだったことになるのでエラー + goto ERR ; + } + } + else + { + // ファイル名を検索用データに変換する + ConvSearchData( &SearchData, FilePath, NULL ) ; + } + + // 同名のファイルを探す + FileHeadSize = sizeof( DARC_FILEHEAD_VER6 ) ; + FileH = ( DARC_FILEHEAD_VER6 * )( this->FileP + this->CurrentDirectory->FileHeadAddress ) ; + Num = ( int )this->CurrentDirectory->FileHeadNum ; + for( i = 0 ; i < Num ; i ++, FileH = (DARC_FILEHEAD_VER6 *)( (u8 *)FileH + FileHeadSize ) ) + { + // ディレクトリチェック + if( ( FileH->Attributes & FILE_ATTRIBUTE_DIRECTORY ) != 0 ) continue ; + + // 文字列数とパリティチェック + NameData = this->NameP + FileH->NameAddress ; + if( SearchData.PackNum != ((u16 *)NameData)[0] || SearchData.Parity != ((u16 *)NameData)[1] ) continue ; + + // 文字列チェック + NameData += 4 ; + for( j = 0, k = 0 ; j < SearchData.PackNum ; j ++, k += 4 ) + if( *((u32 *)&SearchData.FileName[k]) != *((u32 *)&NameData[k]) ) break ; + + // 適合したファイルがあったらここで終了 + if( SearchData.PackNum == j ) break ; + } + + // 無かったらエラー + if( i == Num ) goto ERR ; + + // ディレクトリを元に戻す + this->CurrentDirectory = OldDir ; + + // 目的のファイルのアドレスを返す + return FileH ; + +ERR : + // ディレクトリを元に戻す + this->CurrentDirectory = OldDir ; + + // エラー終了 + return NULL ; +} + +// アーカイブ内のカレントディレクトリの情報を取得する +DARC_DIRECTORY_VER6 *DXArchive_VER6::GetCurrentDirectoryInfo( void ) +{ + return CurrentDirectory ; +} + +// どちらが新しいかを比較する +DXArchive_VER6::DATE_RESULT DXArchive_VER6::DateCmp( DARC_FILETIME_VER6 *date1, DARC_FILETIME_VER6 *date2 ) +{ + if( date1->LastWrite == date2->LastWrite ) return DATE_RESULT_DRAW ; + else if( date1->LastWrite > date2->LastWrite ) return DATE_RESULT_LEFTNEW ; + else return DATE_RESULT_RIGHTNEW ; +} + +// 比較対照の文字列中の大文字を小文字として扱い比較する( 0:等しい 1:違う ) +int DXArchive_VER6::StrICmp( const TCHAR *Str1, const TCHAR *Str2 ) +{ + int c1, c2 ; + + while( *Str1 != '\0' && *Str2 != '\0' ) + { + if( CheckMultiByteChar( Str1 ) == FALSE ) + { + c1 = ( *Str1 >= 'A' && *Str1 <= 'Z' ) ? *Str1 - 'A' + 'a' : *Str1 ; + c2 = ( *Str2 >= 'A' && *Str2 <= 'Z' ) ? *Str2 - 'A' + 'a' : *Str2 ; + if( c1 != c2 ) return 1 ; + Str1 ++ ; + Str2 ++ ; + } + else + { + if( *( (unsigned short *)Str1 ) != *( (unsigned short *)Str2 ) ) return 1 ; + Str1 += 2 ; + Str2 += 2 ; + } + } + if( *Str1 != '\0' || *Str2 != '\0' ) return 1 ; + + // 此処まで来て初めて等しい + return 0 ; +} + +// 文字列中の英字の小文字を大文字に変換 +int DXArchive_VER6::ConvSearchData( SEARCHDATA *SearchData, const TCHAR *Src, int *Length ) +{ + int i, StringLength ; + u16 ParityData ; + + ParityData = 0 ; + for( i = 0 ; Src[i] != '\0' && Src[i] != '\\' ; ) + { + if( CheckMultiByteChar( &Src[i] ) == TRUE ) + { + // 2バイト文字の場合はそのままコピー + *((u16 *)&SearchData->FileName[i]) = *((u16 *)&Src[i]) ; + ParityData += (u8)Src[i] + (u8)Src[i+1] ; + i += 2 ; + } + else + { + // 小文字の場合は大文字に変換 + if( Src[i] >= 'a' && Src[i] <= 'z' ) SearchData->FileName[i] = (u8)Src[i] - 'a' + 'A' ; + else SearchData->FileName[i] = (u8)Src[i] ; + ParityData += (u8)SearchData->FileName[i] ; + i ++ ; + } + } + + // 文字列の長さを保存 + if( Length != NULL ) *Length = i ; + + // 4の倍数の位置まで0を代入 + StringLength = ( ( i + 1 ) + 3 ) / 4 * 4 ; + memset( &SearchData->FileName[i], 0, StringLength - i ) ; + + // パリティデータの保存 + SearchData->Parity = ParityData ; + + // パックデータ数の保存 + SearchData->PackNum = StringLength / 4 ; + + // 正常終了 + return 0 ; +} + +// ファイル名データを追加する( 戻り値は使用したデータバイト数 ) +int DXArchive_VER6::AddFileNameData( const TCHAR *FileName, u8 *FileNameTable ) +{ + int PackNum, Length, i ; + u32 Parity ; + + // サイズをセット + Length = ( int )_tcslen( FileName ) ; + + // 一文字も無かった場合の処理 + if( Length == 0 ) + { + // パック数とパリティ情報のみ保存 + *((u32 *)&FileNameTable[0]) = 0 ; + + // 使用サイズを返す + return 4 ; + } + Length ++ ; + + PackNum = ( Length + 3 ) / 4 ; + + // パック数を保存 + *((u16 *)&FileNameTable[0]) = PackNum ; + + // バッファの初期化 + memset( &FileNameTable[4], 0, PackNum * 4 * 2 ) ; + + // 文字列をコピー + _tcscpy( (TCHAR *)&FileNameTable[4 + PackNum * 4], FileName ) ; + + // 英字の小文字を全て大文字に変換したファイル名を保存 + Parity = 0 ; + for( i = 0 ; FileName[i] != '\0' ; ) + { + // 2バイト文字かどうかで処理を分岐 + if( CheckMultiByteChar( &FileName[i] ) == TRUE ) + { + // 2バイト文字 + *((u16 *)&FileNameTable[4 + i]) = *((u16 *)&FileName[i]) ; + Parity += (u8)FileName[i] + (u8)FileName[i+1] ; + i += 2 ; + } + else + { + // 1バイト文字 + if( FileName[i] >= 'a' && FileName[i] <= 'z' ) + { + // 小文字の場合は大文字に変換 + FileNameTable[4 + i] = (u8)FileName[i] - 'a' + 'A' ; + } + else + { + // そうではない場合は普通にコピー + FileNameTable[4 + i] = (u8)FileName[i] ; + } + Parity += FileNameTable[4 + i] ; + i ++ ; + } + } + + // パリティ情報を保存 + *((u16 *)&FileNameTable[2]) = (u16)Parity ; + + // 使用したサイズを返す + return PackNum * 4 * 2 + 4 ; +} + +// ファイル名データから元のファイル名の文字列を取得する +TCHAR *DXArchive_VER6::GetOriginalFileName( u8 *FileNameTable ) +{ + const char *pName = ((char *)FileNameTable + *((u16 *)&FileNameTable[0]) * 4 + 4); + + bool isMultiByte = false; + size_t nameLen = strlen(pName); + TCHAR *pFileStr = new TCHAR[nameLen+1](); + + for(size_t si = 0, sf = 0; si < nameLen; si++, sf++) + { +#ifdef _UNICODE + if(CheckMultiByteChar((TCHAR*)&pName[si])) + { + isMultiByte = true; + char ss[3]; + ss[0] = pName[si]; + ss[1] = pName[si + 1]; + ss[2] = 0; + pFileStr[sf] = sjis2utf8_VER6(ss); + si++; + } + else +#endif + pFileStr[sf] = pName[si]; + } + + return pFileStr; +} + +// 標準ストリームにデータを書き込む( 64bit版 ) +void DXArchive_VER6::fwrite64( void *Data, s64 Size, FILE *fp ) +{ + int WriteSize ; + s64 TotalWriteSize ; + + TotalWriteSize = 0 ; + while( TotalWriteSize < Size ) + { + if( Size > 0x7fffffff ) + { + WriteSize = 0x7fffffff ; + } + else + { + WriteSize = ( int )Size ; + } + + fwrite( ( u8 * )Data + TotalWriteSize, 1, WriteSize, fp ) ; + + TotalWriteSize += WriteSize ; + } +} + +// 標準ストリームからデータを読み込む( 64bit版 ) +void DXArchive_VER6::fread64( void *Buffer, s64 Size, FILE *fp ) +{ + int ReadSize ; + s64 TotalReadSize ; + + TotalReadSize = 0 ; + while( TotalReadSize < Size ) + { + if( Size > 0x7fffffff ) + { + ReadSize = 0x7fffffff ; + } + else + { + ReadSize = ( int )Size ; + } + + fread( ( u8 * )Buffer + TotalReadSize, 1, ReadSize, fp ) ; + + TotalReadSize += ReadSize ; + } +} + +// データを反転させる関数 +void DXArchive_VER6::NotConv( void *Data , s64 Size ) +{ + s64 DwordNumQ ; + s64 ByteNum ; + u32 *dd ; + + dd = ( u32 * )Data ; + + DwordNumQ = Size / 4 ; + ByteNum = Size - DwordNumQ * 4 ; + + if( DwordNumQ != 0 ) + { + if( DwordNumQ < 0x100000000 ) + { + u32 DwordNum ; + + DwordNum = ( u32 )DwordNumQ ; + do + { + *dd++ = ~*dd ; + }while( --DwordNum ) ; + } + else + { + do + { + *dd++ = ~*dd ; + }while( --DwordNumQ ) ; + } + } + if( ByteNum != 0 ) + { + do + { + *((BYTE *)dd) = ~*((u8 *)dd) ; + dd = (u32 *)(((u8 *)dd) + 1) ; + }while( --ByteNum ) ; + } +} + + +// データを反転させてファイルに書き出す関数 +void DXArchive_VER6::NotConvFileWrite( void *Data, s64 Size, FILE *fp ) +{ + // データを反転する + NotConv( Data, Size ) ; + + // 書き出す + fwrite64( Data, Size, fp ) ; + + // 再び反転 + NotConv( Data, Size ) ; +} + +// データを反転させてファイルから読み込む関数 +void DXArchive_VER6::NotConvFileRead( void *Data, s64 Size, FILE *fp ) +{ + // 読み込む + fread64( Data, Size, fp ) ; + + // データを反転 + NotConv( Data, Size ) ; +} + +// 鍵文字列を作成 +void DXArchive_VER6::KeyCreate( const char *Source, unsigned char *Key ) +{ + int Len ; + + if( Source == NULL ) + { + memset( Key, 0xaaaaaaaa, DXA_KEYSTR_LENGTH_VER6 ) ; + } + else + { + Len = ( int )strlen( Source ) ; + if( Len > DXA_KEYSTR_LENGTH_VER6 ) + { + memcpy( Key, Source, DXA_KEYSTR_LENGTH_VER6 ) ; + } + else + { + // 鍵文字列が DXA_KEYSTR_LENGTH_VER6 より短かったらループする + int i ; + + for( i = 0 ; i + Len <= DXA_KEYSTR_LENGTH_VER6 ; i += Len ) + memcpy( Key + i, Source, Len ) ; + if( i < DXA_KEYSTR_LENGTH_VER6 ) + memcpy( Key + i, Source, DXA_KEYSTR_LENGTH_VER6 - i ) ; + } + } + + Key[0] = ~Key[0] ; + Key[1] = ( Key[1] >> 4 ) | ( Key[1] << 4 ) ; + Key[2] = Key[2] ^ 0x8a ; + Key[3] = ~( ( Key[3] >> 4 ) | ( Key[3] << 4 ) ) ; + Key[4] = ~Key[4] ; + Key[5] = Key[5] ^ 0xac ; + Key[6] = ~Key[6] ; + Key[7] = ~( ( Key[7] >> 3 ) | ( Key[7] << 5 ) ) ; + Key[8] = ( Key[8] >> 5 ) | ( Key[8] << 3 ) ; + Key[9] = Key[9] ^ 0x7f ; + Key[10] = ( ( Key[10] >> 4 ) | ( Key[10] << 4 ) ) ^ 0xd6 ; + Key[11] = Key[11] ^ 0xcc ; +} + +// 鍵文字列を使用して Xor 演算( Key は必ず DXA_KEYSTR_LENGTH_VER6 の長さがなければならない ) +void DXArchive_VER6::KeyConv( void *Data, s64 Size, s64 Position, unsigned char *Key ) +{ + Position %= DXA_KEYSTR_LENGTH_VER6 ; + + if( Size < 0x100000000 ) + { + u32 i, j ; + + j = ( u32 )Position ; + for( i = 0 ; i < Size ; i ++ ) + { + ((u8 *)Data)[i] ^= Key[j] ; + + j ++ ; + if( j == DXA_KEYSTR_LENGTH_VER6 ) j = 0 ; + } + } + else + { + s64 i, j ; + + j = Position ; + for( i = 0 ; i < Size ; i ++ ) + { + ((u8 *)Data)[i] ^= Key[j] ; + + j ++ ; + if( j == DXA_KEYSTR_LENGTH_VER6 ) j = 0 ; + } + } +} + +// データを鍵文字列を使用して Xor 演算した後ファイルに書き出す関数( Key は必ず DXA_KEYSTR_LENGTH_VER6 の長さがなければならない ) +void DXArchive_VER6::KeyConvFileWrite( void *Data, s64 Size, FILE *fp, unsigned char *Key, s64 Position ) +{ + s64 pos ; + + // ファイルの位置を取得しておく + if( Position == -1 ) pos = _ftelli64( fp ) ; + else pos = Position ; + + // データを鍵文字列を使って Xor 演算する + KeyConv( Data, Size, pos, Key ) ; + + // 書き出す + fwrite64( Data, Size, fp ) ; + + // 再び Xor 演算 + KeyConv( Data, Size, pos, Key ) ; +} + +// ファイルから読み込んだデータを鍵文字列を使用して Xor 演算する関数( Key は必ず DXA_KEYSTR_LENGTH_VER6 の長さがなければならない ) +void DXArchive_VER6::KeyConvFileRead( void *Data, s64 Size, FILE *fp, unsigned char *Key, s64 Position ) +{ + s64 pos ; + + // ファイルの位置を取得しておく + if( Position == -1 ) pos = _ftelli64( fp ) ; + else pos = Position ; + + // 読み込む + fread64( Data, Size, fp ) ; + + // データを鍵文字列を使って Xor 演算 + KeyConv( Data, Size, pos, Key ) ; +} + +/* +// 2バイト文字か調べる( TRUE:2バイト文字 FALSE:1バイト文字 ) +int DXArchive_VER6::CheckMultiByteChar( const char *Buf ) +{ + return ( (unsigned char)*Buf >= 0x81 && (unsigned char)*Buf <= 0x9F ) || ( (unsigned char)*Buf >= 0xE0 && (unsigned char)*Buf <= 0xFC ) ; +} +*/ + +// 指定のディレクトリにあるファイルをアーカイブデータに吐き出す +int DXArchive_VER6::DirectoryEncode(TCHAR *DirectoryName, u8 *NameP, u8 *DirP, u8 *FileP, DARC_DIRECTORY_VER6 *ParentDir, SIZESAVE *Size, int DataNumber, FILE *DestP, void *TempBuffer, bool Press, unsigned char *Key ) +{ + TCHAR DirPath[MAX_PATH] ; + WIN32_FIND_DATA FindData ; + HANDLE FindHandle ; + DARC_DIRECTORY_VER6 Dir ; + DARC_FILEHEAD_VER6 File ; + + // ディレクトリの情報を得る + FindHandle = FindFirstFile( DirectoryName, &FindData ) ; + if( FindHandle == INVALID_HANDLE_VALUE ) return 0 ; + + // ディレクトリ情報を格納するファイルヘッダをセットする + { + File.NameAddress = Size->NameSize ; + File.Time.Create = ( ( ( LONGLONG )FindData.ftCreationTime.dwHighDateTime ) << 32 ) + FindData.ftCreationTime.dwLowDateTime ; + File.Time.LastAccess = ( ( ( LONGLONG )FindData.ftLastAccessTime.dwHighDateTime ) << 32 ) + FindData.ftLastAccessTime.dwLowDateTime ; + File.Time.LastWrite = ( ( ( LONGLONG )FindData.ftLastWriteTime.dwHighDateTime ) << 32 ) + FindData.ftLastWriteTime.dwLowDateTime ; + File.Attributes = FindData.dwFileAttributes ; + File.DataAddress = Size->DirectorySize ; + File.DataSize = 0 ; + File.PressDataSize = 0xffffffffffffffff ; + } + + // ディレクトリ名を書き出す + Size->NameSize += AddFileNameData( FindData.cFileName, NameP + Size->NameSize ) ; + + // ディレクトリ情報が入ったファイルヘッダを書き出す + memcpy( FileP + ParentDir->FileHeadAddress + DataNumber * sizeof( DARC_FILEHEAD_VER6 ), + &File, sizeof( DARC_FILEHEAD_VER6 ) ) ; + + // Find ハンドルを閉じる + FindClose( FindHandle ) ; + + // 指定のディレクトリにカレントディレクトリを移す + GetCurrentDirectory( MAX_PATH, DirPath ) ; + SetCurrentDirectory( DirectoryName ) ; + + // ディレクトリ情報のセット + { + Dir.DirectoryAddress = ParentDir->FileHeadAddress + DataNumber * sizeof( DARC_FILEHEAD_VER6 ) ; + Dir.FileHeadAddress = Size->FileSize ; + + // 親ディレクトリの情報位置をセット + if( ParentDir->DirectoryAddress != 0xffffffffffffffff && ParentDir->DirectoryAddress != 0 ) + { + Dir.ParentDirectoryAddress = ((DARC_FILEHEAD_VER6 *)( FileP + ParentDir->DirectoryAddress ))->DataAddress ; + } + else + { + Dir.ParentDirectoryAddress = 0 ; + } + + // ディレクトリ中のファイルの数を取得する + Dir.FileHeadNum = GetDirectoryFilePath(TEXT(""), NULL ) ; + } + + // ディレクトリの情報を出力する + memcpy( DirP + Size->DirectorySize, &Dir, sizeof( DARC_DIRECTORY_VER6 ) ) ; + + // アドレスを推移させる + Size->DirectorySize += sizeof( DARC_DIRECTORY_VER6 ) ; + Size->FileSize += sizeof( DARC_FILEHEAD_VER6 ) * Dir.FileHeadNum ; + + // ファイルが何も無い場合はここで終了 + if( Dir.FileHeadNum == 0 ) + { + // もとのディレクトリをカレントディレクトリにセット + SetCurrentDirectory( DirPath ) ; + return 0 ; + } + + // ファイル情報を出力する + { + int i ; + + i = 0 ; + + // 列挙開始 + FindHandle = FindFirstFile(TEXT("*"), &FindData ) ; + do + { + // 上のディレクトリに戻ったりするためのパスは無視する + if( _tcscmp( FindData.cFileName, TEXT(".") ) == 0 || _tcscmp( FindData.cFileName, TEXT("..") ) == 0 ) continue ; + + // ファイルではなく、ディレクトリだった場合は再帰する + if( FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) + { + // ディレクトリだった場合の処理 + if( DirectoryEncode( FindData.cFileName, NameP, DirP, FileP, &Dir, Size, i, DestP, TempBuffer, Press, Key ) < 0 ) return -1 ; + } + else + { + // ファイルだった場合の処理 + + // ファイルのデータをセット + File.NameAddress = Size->NameSize ; + File.Time.Create = ( ( ( LONGLONG )FindData.ftCreationTime.dwHighDateTime ) << 32 ) + FindData.ftCreationTime.dwLowDateTime ; + File.Time.LastAccess = ( ( ( LONGLONG )FindData.ftLastAccessTime.dwHighDateTime ) << 32 ) + FindData.ftLastAccessTime.dwLowDateTime ; + File.Time.LastWrite = ( ( ( LONGLONG )FindData.ftLastWriteTime.dwHighDateTime ) << 32 ) + FindData.ftLastWriteTime.dwLowDateTime ; + File.Attributes = FindData.dwFileAttributes ; + File.DataAddress = Size->DataSize ; + File.DataSize = ( ( ( LONGLONG )FindData.nFileSizeHigh ) << 32 ) + FindData.nFileSizeLow ; + File.PressDataSize = 0xffffffffffffffff ; + + // ファイル名を書き出す + Size->NameSize += AddFileNameData( FindData.cFileName, NameP + Size->NameSize ) ; + + // ファイルデータを書き出す + if( File.DataSize != 0 ) + { + FILE *SrcP ; + u64 FileSize, WriteSize, MoveSize ; + + // ファイルを開く + SrcP = _tfopen( FindData.cFileName, TEXT("rb") ) ; + + // サイズを得る + _fseeki64( SrcP, 0, SEEK_END ) ; + FileSize = _ftelli64( SrcP ) ; + _fseeki64( SrcP, 0, SEEK_SET ) ; + + // ファイルサイズが 10MB 以下の場合で、圧縮の指定がある場合は圧縮を試みる + if( Press == true && File.DataSize < 10 * 1024 * 1024 ) + { + void *SrcBuf, *DestBuf ; + u32 DestSize, Len ; + + // 一部のファイル形式の場合は予め弾く + if( ( Len = ( int )_tcslen( FindData.cFileName ) ) > 4 ) + { + TCHAR *sp ; + + sp = &FindData.cFileName[Len-3] ; + if( StrICmp( sp, TEXT("wav") ) == 0 || + StrICmp( sp, TEXT("jpg") ) == 0 || + StrICmp( sp, TEXT("png") ) == 0 || + StrICmp( sp, TEXT("mpg") ) == 0 || + StrICmp( sp, TEXT("mp3") ) == 0 || + StrICmp( sp, TEXT("ogg") ) == 0 || + StrICmp( sp, TEXT("wmv") ) == 0 || + StrICmp( sp - 1, TEXT("jpeg") ) == 0 ) goto NOPRESS ; + } + + // データが丸ごと入るメモリ領域の確保 + SrcBuf = malloc( ( size_t )( FileSize + FileSize * 2 + 64 ) ) ; + DestBuf = (u8 *)SrcBuf + FileSize ; + + // ファイルを丸ごと読み込む + fread64( SrcBuf, FileSize, SrcP ) ; + + // 圧縮 + DestSize = Encode( SrcBuf, ( u32 )FileSize, DestBuf ) ; + + // 殆ど圧縮出来なかった場合は圧縮無しでアーカイブする + if( (f64)DestSize / (f64)FileSize > 0.90 ) + { + _fseeki64( SrcP, 0L, SEEK_SET ) ; + free( SrcBuf ) ; + goto NOPRESS ; + } + + // 圧縮データを反転して書き出す + WriteSize = ( DestSize + 3 ) / 4 * 4 ; + KeyConvFileWrite( DestBuf, WriteSize, DestP, Key, File.DataSize ) ; + + // メモリの解放 + free( SrcBuf ) ; + + // 圧縮データのサイズを保存する + File.PressDataSize = DestSize ; + } + else + { +NOPRESS: + // 転送開始 + WriteSize = 0 ; + while( WriteSize < FileSize ) + { + // 転送サイズ決定 + MoveSize = DXA_BUFFERSIZE_VER6 < FileSize - WriteSize ? DXA_BUFFERSIZE_VER6 : FileSize - WriteSize ; + MoveSize = ( MoveSize + 3 ) / 4 * 4 ; // サイズは4の倍数に合わせる + + // ファイルの反転読み込み + KeyConvFileRead( TempBuffer, MoveSize, SrcP, Key, File.DataSize + WriteSize ) ; + + // 書き出し + fwrite64( TempBuffer, MoveSize, DestP ) ; + + // 書き出しサイズの加算 + WriteSize += MoveSize ; + } + } + + // 書き出したファイルを閉じる + fclose( SrcP ) ; + + // データサイズの加算 + Size->DataSize += WriteSize ; + } + + // ファイルヘッダを書き出す + memcpy( FileP + Dir.FileHeadAddress + sizeof( DARC_FILEHEAD_VER6 ) * i, &File, sizeof( DARC_FILEHEAD_VER6 ) ) ; + } + + i ++ ; + } + while( FindNextFile( FindHandle, &FindData ) != 0 ) ; + + // Find ハンドルを閉じる + FindClose( FindHandle ) ; + } + + // もとのディレクトリをカレントディレクトリにセット + SetCurrentDirectory( DirPath ) ; + + // 終了 + return 0 ; +} + +#include + +// 指定のディレクトリデータにあるファイルを展開する +int DXArchive_VER6::DirectoryDecode( u8 *NameP, u8 *DirP, u8 *FileP, DARC_HEAD_VER6 *Head, DARC_DIRECTORY_VER6 *Dir, FILE *ArcP, unsigned char *Key ) +{ + TCHAR DirPath[MAX_PATH] ; + + // 現在のカレントディレクトリを保存 + GetCurrentDirectory( MAX_PATH, DirPath ) ; + + // ディレクトリ情報がある場合は、まず展開用のディレクトリを作成する + if( Dir->DirectoryAddress != 0xffffffffffffffff && Dir->ParentDirectoryAddress != 0xffffffffffffffff ) + { + DARC_FILEHEAD_VER6 *DirFile ; + + // DARC_FILEHEAD_VER6 のアドレスを取得 + DirFile = ( DARC_FILEHEAD_VER6 * )( FileP + Dir->DirectoryAddress ) ; + + // ディレクトリの作成 + TCHAR *pName = GetOriginalFileName(NameP + DirFile->NameAddress); + CreateDirectory( pName, NULL ) ; + delete[] pName; + + // そのディレクトリにカレントディレクトリを移す + pName = GetOriginalFileName(NameP + DirFile->NameAddress); + SetCurrentDirectory(pName) ; + delete[] pName; + } + + // 展開処理開始 + { + u32 i, FileHeadSize ; + DARC_FILEHEAD_VER6 *File ; + + // 格納されているファイルの数だけ繰り返す + FileHeadSize = sizeof( DARC_FILEHEAD_VER6 ) ; + File = ( DARC_FILEHEAD_VER6 * )( FileP + Dir->FileHeadAddress ) ; + for( i = 0 ; i < Dir->FileHeadNum ; i ++, File = (DARC_FILEHEAD_VER6 *)( (u8 *)File + FileHeadSize ) ) + { + // ディレクトリかどうかで処理を分岐 + if( File->Attributes & FILE_ATTRIBUTE_DIRECTORY ) + { + // ディレクトリの場合は再帰をかける + DirectoryDecode( NameP, DirP, FileP, Head, ( DARC_DIRECTORY_VER6 * )( DirP + File->DataAddress ), ArcP, Key ) ; + } + else + { + FILE *DestP ; + void *Buffer ; + + // ファイルの場合は展開する + + // バッファを確保する + Buffer = malloc( DXA_BUFFERSIZE_VER6 ) ; + if( Buffer == NULL ) return -1 ; + + // ファイルを開く + TCHAR *pName = GetOriginalFileName(NameP + File->NameAddress); + + DestP = _tfopen(pName, TEXT("wb")); + + delete[] pName; + + // データがある場合のみ転送 + if( File->DataSize != 0 ) + { + // 初期位置をセットする + if( _ftelli64( ArcP ) != ( s32 )( Head->DataStartAddress + File->DataAddress ) ) + _fseeki64( ArcP, Head->DataStartAddress + File->DataAddress, SEEK_SET ) ; + + // データが圧縮されているかどうかで処理を分岐 + if( File->PressDataSize != 0xffffffffffffffff ) + { + void *temp ; + + // 圧縮されている場合 + + // 圧縮データが収まるメモリ領域の確保 + temp = malloc( ( size_t )( File->PressDataSize + File->DataSize ) ) ; + + // 圧縮データの読み込み + KeyConvFileRead( temp, File->PressDataSize, ArcP, Key, File->DataSize ) ; + + // 解凍 + Decode( temp, (u8 *)temp + File->PressDataSize ) ; + + // 書き出し + fwrite64( (u8 *)temp + File->PressDataSize, File->DataSize, DestP ) ; + + // メモリの解放 + free( temp ) ; + } + else + { + // 圧縮されていない場合 + + // 転送処理開始 + { + u64 MoveSize, WriteSize ; + + WriteSize = 0 ; + while( WriteSize < File->DataSize ) + { + MoveSize = File->DataSize - WriteSize > DXA_BUFFERSIZE_VER6 ? DXA_BUFFERSIZE_VER6 : File->DataSize - WriteSize ; + + // ファイルの反転読み込み + KeyConvFileRead( Buffer, MoveSize, ArcP, Key, File->DataSize + WriteSize ) ; + + // 書き出し + fwrite64( Buffer, MoveSize, DestP ) ; + + WriteSize += MoveSize ; + } + } + } + } + + // ファイルを閉じる + fclose( DestP ) ; + + // バッファを開放する + free( Buffer ) ; + + // ファイルのタイムスタンプを設定する + { + HANDLE HFile ; + FILETIME CreateTime, LastAccessTime, LastWriteTime ; + TCHAR *pName = GetOriginalFileName(NameP + File->NameAddress); + HFile = CreateFile(pName, + GENERIC_WRITE, 0, NULL, + OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ) ; + delete[] pName; + + if( HFile == INVALID_HANDLE_VALUE ) + { + HFile = HFile ; + } + + CreateTime.dwHighDateTime = ( u32 )( File->Time.Create >> 32 ) ; + CreateTime.dwLowDateTime = ( u32 )( File->Time.Create & 0xffffffffffffffff ) ; + LastAccessTime.dwHighDateTime = ( u32 )( File->Time.LastAccess >> 32 ) ; + LastAccessTime.dwLowDateTime = ( u32 )( File->Time.LastAccess & 0xffffffffffffffff ) ; + LastWriteTime.dwHighDateTime = ( u32 )( File->Time.LastWrite >> 32 ) ; + LastWriteTime.dwLowDateTime = ( u32 )( File->Time.LastWrite & 0xffffffffffffffff ) ; + SetFileTime( HFile, &CreateTime, &LastAccessTime, &LastWriteTime ) ; + CloseHandle( HFile ) ; + } + + // ファイル属性を付ける + pName = GetOriginalFileName(NameP + File->NameAddress); + SetFileAttributes( pName, ( u32 )File->Attributes ) ; + delete[] pName; + } + } + } + + // カレントディレクトリを元に戻す + SetCurrentDirectory( DirPath ) ; + + // 終了 + return 0 ; +} + +// ディレクトリ内のファイルパスを取得する +int DXArchive_VER6::GetDirectoryFilePath( const TCHAR *DirectoryPath, TCHAR *FileNameBuffer ) +{ + WIN32_FIND_DATA FindData ; + HANDLE FindHandle ; + int FileNum ; + TCHAR DirPath[256], String[256] ; + + // ディレクトリかどうかをチェックする + if( DirectoryPath[0] != '\0' ) + { + FindHandle = FindFirstFile( DirectoryPath, &FindData ) ; + if( FindHandle == INVALID_HANDLE_VALUE || ( FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) == 0 ) return -1 ; + FindClose( FindHandle ) ; + } + + // 指定のフォルダのファイルの名前を取得する + FileNum = 0 ; + if( DirectoryPath[0] != '\0' ) + { + _tcscpy( DirPath, DirectoryPath ) ; + if( DirPath[ _tcslen( DirPath ) - 1 ] != '\\' ) _tcscat( DirPath, TEXT("\\") ) ; + _tcscpy( String, DirPath ) ; + _tcscat( String, TEXT("*") ) ; + } + else + { + _tcscpy( DirPath, TEXT("") ) ; + _tcscpy( String, TEXT("*") ) ; + } + FindHandle = FindFirstFile( String, &FindData ) ; + if( FindHandle != INVALID_HANDLE_VALUE ) + { + do + { + // 上のディレクトリに戻ったりするためのパスは無視する + if( _tcscmp( FindData.cFileName, TEXT(".") ) == 0 || _tcscmp( FindData.cFileName, TEXT("..") ) == 0 ) continue ; + + // ファイルパスを保存する + if( FileNameBuffer != NULL ) + { + _tcscpy( FileNameBuffer, DirPath ) ; + _tcscat( FileNameBuffer, FindData.cFileName ) ; + FileNameBuffer += 256 ; + } + + // ファイルの数を増やす + FileNum ++ ; + } + while( FindNextFile( FindHandle, &FindData ) != 0 ) ; + FindClose( FindHandle ) ; + } + + // 数を返す + return FileNum ; +} + +// エンコード( 戻り値:圧縮後のサイズ -1 はエラー Dest に NULL を入れることも可能 ) +int DXArchive_VER6::Encode( void *Src, u32 SrcSize, void *Dest ) +{ + s32 dstsize ; + s32 bonus, conbo, conbosize, address, addresssize ; + s32 maxbonus, maxconbo, maxconbosize, maxaddress, maxaddresssize ; + u8 keycode, *srcp, *destp, *dp, *sp, *sp2, *sp1 ; + u32 srcaddress, nextprintaddress, code ; + s32 j ; + u32 i, m ; + u32 maxlistnum, maxlistnummask, listaddp ; + u32 sublistnum, sublistmaxnum ; + LZ_LIST *listbuf, *listtemp, *list, *newlist ; + u8 *listfirsttable, *usesublistflagtable, *sublistbuf ; + + // サブリストのサイズを決める + { + if( SrcSize < 100 * 1024 ) sublistmaxnum = 1 ; + else if( SrcSize < 3 * 1024 * 1024 ) sublistmaxnum = MAX_SUBLISTNUM / 3 ; + else sublistmaxnum = MAX_SUBLISTNUM ; + } + + // リストのサイズを決める + { + maxlistnum = MAX_ADDRESSLISTNUM ; + if( maxlistnum > SrcSize ) + { + while( ( maxlistnum >> 1 ) > 0x100 && ( maxlistnum >> 1 ) > SrcSize ) + maxlistnum >>= 1 ; + } + maxlistnummask = maxlistnum - 1 ; + } + + // メモリの確保 + usesublistflagtable = (u8 *)malloc( + sizeof( void * ) * 65536 + // メインリストの先頭オブジェクト用領域 + sizeof( LZ_LIST ) * maxlistnum + // メインリスト用領域 + sizeof( u8 ) * 65536 + // サブリストを使用しているかフラグ用領域 + sizeof( void * ) * 256 * sublistmaxnum ) ; // サブリスト用領域 + + // アドレスのセット + listfirsttable = usesublistflagtable + sizeof( u8 ) * 65536 ; + sublistbuf = listfirsttable + sizeof( void * ) * 65536 ; + listbuf = (LZ_LIST *)( sublistbuf + sizeof( void * ) * 256 * sublistmaxnum ) ; + + // 初期化 + memset( usesublistflagtable, 0, sizeof( u8 ) * 65536 ) ; + memset( sublistbuf, 0, sizeof( void * ) * 256 * sublistmaxnum ) ; + memset( listfirsttable, 0, sizeof( void * ) * 65536 ) ; + list = listbuf ; + for( i = maxlistnum / 8 ; i ; i --, list += 8 ) + { + list[0].address = + list[1].address = + list[2].address = + list[3].address = + list[4].address = + list[5].address = + list[6].address = + list[7].address = 0xffffffff ; + } + + srcp = (u8 *)Src ; + destp = (u8 *)Dest ; + + // 圧縮元データの中で一番出現頻度が低いバイトコードを検索する + { + u32 qnum, table[256], mincode ; + + for( i = 0 ; i < 256 ; i ++ ) + table[i] = 0 ; + + sp = srcp ; + qnum = SrcSize / 8 ; + i = qnum * 8 ; + for( ; qnum ; qnum --, sp += 8 ) + { + table[sp[0]] ++ ; + table[sp[1]] ++ ; + table[sp[2]] ++ ; + table[sp[3]] ++ ; + table[sp[4]] ++ ; + table[sp[5]] ++ ; + table[sp[6]] ++ ; + table[sp[7]] ++ ; + } + for( ; i < SrcSize ; i ++, sp ++ ) + table[*sp] ++ ; + + keycode = 0 ; + mincode = table[0] ; + for( i = 1 ; i < 256 ; i ++ ) + { + if( mincode < table[i] ) continue ; + mincode = table[i] ; + keycode = (u8)i ; + } + } + + // 圧縮元のサイズをセット + ((u32 *)destp)[0] = SrcSize ; + + // キーコードをセット + destp[8] = keycode ; + + // 圧縮処理 + dp = destp + 9 ; + sp = srcp ; + srcaddress = 0 ; + dstsize = 0 ; + listaddp = 0 ; + sublistnum = 0 ; + nextprintaddress = 1024 * 100 ; + while( srcaddress < SrcSize ) + { + // 残りサイズが最低圧縮サイズ以下の場合は圧縮処理をしない + if( srcaddress + MIN_COMPRESS >= SrcSize ) goto NOENCODE ; + + // リストを取得 + code = *((u16 *)sp) ; + list = (LZ_LIST *)( listfirsttable + code * sizeof( void * ) ) ; + if( usesublistflagtable[code] == 1 ) + { + list = (LZ_LIST *)( (void **)list->next + sp[2] ) ; + } + else + { + if( sublistnum < sublistmaxnum ) + { + list->next = (LZ_LIST *)( sublistbuf + sizeof( void * ) * 256 * sublistnum ) ; + list = (LZ_LIST *)( (void **)list->next + sp[2] ) ; + + usesublistflagtable[code] = 1 ; + sublistnum ++ ; + } + } + + // 一番一致長の長いコードを探す + maxconbo = -1 ; + maxaddress = -1 ; + maxbonus = -1 ; + for( m = 0, listtemp = list->next ; m < MAX_SEARCHLISTNUM && listtemp != NULL ; listtemp = listtemp->next, m ++ ) + { + address = srcaddress - listtemp->address ; + if( address >= MAX_POSITION ) + { + if( listtemp->prev ) listtemp->prev->next = listtemp->next ; + if( listtemp->next ) listtemp->next->prev = listtemp->prev ; + listtemp->address = 0xffffffff ; + continue ; + } + + sp2 = &sp[-address] ; + sp1 = sp ; + if( srcaddress + MAX_COPYSIZE < SrcSize ) + { + conbo = MAX_COPYSIZE / 4 ; + while( conbo && *((u32 *)sp2) == *((u32 *)sp1) ) + { + sp2 += 4 ; + sp1 += 4 ; + conbo -- ; + } + conbo = MAX_COPYSIZE - ( MAX_COPYSIZE / 4 - conbo ) * 4 ; + + while( conbo && *sp2 == *sp1 ) + { + sp2 ++ ; + sp1 ++ ; + conbo -- ; + } + conbo = MAX_COPYSIZE - conbo ; + } + else + { + for( conbo = 0 ; + conbo < MAX_COPYSIZE && + conbo + srcaddress < SrcSize && + sp[conbo - address] == sp[conbo] ; + conbo ++ ){} + } + + if( conbo >= 4 ) + { + conbosize = ( conbo - MIN_COMPRESS ) < 0x20 ? 0 : 1 ; + addresssize = address < 0x100 ? 0 : ( address < 0x10000 ? 1 : 2 ) ; + bonus = conbo - ( 3 + conbosize + addresssize ) ; + + if( bonus > maxbonus ) + { + maxconbo = conbo ; + maxaddress = address ; + maxaddresssize = addresssize ; + maxconbosize = conbosize ; + maxbonus = bonus ; + } + } + } + + // リストに登録 + newlist = &listbuf[listaddp] ; + if( newlist->address != 0xffffffff ) + { + if( newlist->prev ) newlist->prev->next = newlist->next ; + if( newlist->next ) newlist->next->prev = newlist->prev ; + newlist->address = 0xffffffff ; + } + newlist->address = srcaddress ; + newlist->prev = list ; + newlist->next = list->next ; + if( list->next != NULL ) list->next->prev = newlist ; + list->next = newlist ; + listaddp = ( listaddp + 1 ) & maxlistnummask ; + + // 一致コードが見つからなかったら非圧縮コードとして出力 + if( maxconbo == -1 ) + { +NOENCODE: + // キーコードだった場合は2回連続で出力する + if( *sp == keycode ) + { + if( destp != NULL ) + { + dp[0] = + dp[1] = keycode ; + dp += 2 ; + } + dstsize += 2 ; + } + else + { + if( destp != NULL ) + { + *dp = *sp ; + dp ++ ; + } + dstsize ++ ; + } + sp ++ ; + srcaddress ++ ; + } + else + { + // 見つかった場合は見つけた位置と長さを出力する + + // キーコードと見つけた位置と長さを出力 + if( destp != NULL ) + { + // キーコードの出力 + *dp++ = keycode ; + + // 出力する連続長は最低 MIN_COMPRESS あることが前提なので - MIN_COMPRESS したものを出力する + maxconbo -= MIN_COMPRESS ; + + // 連続長0~4ビットと連続長、相対アドレスのビット長を出力 + *dp = (u8)( ( ( maxconbo & 0x1f ) << 3 ) | ( maxconbosize << 2 ) | maxaddresssize ) ; + + // キーコードの連続はキーコードと値の等しい非圧縮コードと + // 判断するため、キーコードの値以上の場合は値を+1する + if( *dp >= keycode ) dp[0] += 1 ; + dp ++ ; + + // 連続長5~12ビットを出力 + if( maxconbosize == 1 ) + *dp++ = (u8)( ( maxconbo >> 5 ) & 0xff ) ; + + // maxconbo はまだ使うため - MIN_COMPRESS した分を戻す + maxconbo += MIN_COMPRESS ; + + // 出力する相対アドレスは0が( 現在のアドレス-1 )を挿すので、-1したものを出力する + maxaddress -- ; + + // 相対アドレスを出力 + *dp++ = (u8)( maxaddress ) ; + if( maxaddresssize > 0 ) + { + *dp++ = (u8)( maxaddress >> 8 ) ; + if( maxaddresssize == 2 ) + *dp++ = (u8)( maxaddress >> 16 ) ; + } + } + + // 出力サイズを加算 + dstsize += 3 + maxaddresssize + maxconbosize ; + + // リストに情報を追加 + if( srcaddress + maxconbo < SrcSize ) + { + sp2 = &sp[1] ; + for( j = 1 ; j < maxconbo && (u64)&sp2[2] - (u64)srcp < SrcSize ; j ++, sp2 ++ ) + { + code = *((u16 *)sp2) ; + list = (LZ_LIST *)( listfirsttable + code * sizeof( void * ) ) ; + if( usesublistflagtable[code] == 1 ) + { + list = (LZ_LIST *)( (void **)list->next + sp2[2] ) ; + } + else + { + if( sublistnum < sublistmaxnum ) + { + list->next = (LZ_LIST *)( sublistbuf + sizeof( void * ) * 256 * sublistnum ) ; + list = (LZ_LIST *)( (void **)list->next + sp2[2] ) ; + + usesublistflagtable[code] = 1 ; + sublistnum ++ ; + } + } + + newlist = &listbuf[listaddp] ; + if( newlist->address != 0xffffffff ) + { + if( newlist->prev ) newlist->prev->next = newlist->next ; + if( newlist->next ) newlist->next->prev = newlist->prev ; + newlist->address = 0xffffffff ; + } + newlist->address = srcaddress + j ; + newlist->prev = list ; + newlist->next = list->next ; + if( list->next != NULL ) list->next->prev = newlist ; + list->next = newlist ; + listaddp = ( listaddp + 1 ) & maxlistnummask ; + } + } + + sp += maxconbo ; + srcaddress += maxconbo ; + } + + // 圧縮率の表示 + if( nextprintaddress < srcaddress ) + { + nextprintaddress = srcaddress + 100 * 1024 ; + } + } + + // 圧縮後のデータサイズを保存する + *((u32 *)&destp[4]) = dstsize + 9 ; + + // 確保したメモリの解放 + free( usesublistflagtable ) ; + + // データのサイズを返す + return dstsize + 9 ; +} + +// デコード( 戻り値:解凍後のサイズ -1 はエラー Dest に NULL を入れることも可能 ) +int DXArchive_VER6::Decode( void *Src, void *Dest ) +{ + u32 srcsize, destsize, code, indexsize, keycode, conbo, index ; + u8 *srcp, *destp, *dp, *sp ; + + destp = (u8 *)Dest ; + srcp = (u8 *)Src ; + + // 解凍後のデータサイズを得る + destsize = *((u32 *)&srcp[0]) ; + + // 圧縮データのサイズを得る + srcsize = *((u32 *)&srcp[4]) - 9 ; + + // キーコード + keycode = srcp[8] ; + + // 出力先がない場合はサイズだけ返す + if( Dest == NULL ) + return destsize ; + + // 展開開始 + sp = srcp + 9 ; + dp = destp ; + while( srcsize ) + { + // キーコードか同かで処理を分岐 + if( sp[0] != keycode ) + { + // 非圧縮コードの場合はそのまま出力 + *dp = *sp ; + dp ++ ; + sp ++ ; + srcsize -- ; + continue ; + } + + // キーコードが連続していた場合はキーコード自体を出力 + if( sp[1] == keycode ) + { + *dp = (u8)keycode ; + dp ++ ; + sp += 2 ; + srcsize -= 2 ; + + continue ; + } + + // 第一バイトを得る + code = sp[1] ; + + // もしキーコードよりも大きな値だった場合はキーコード + // とのバッティング防止の為に+1しているので-1する + if( code > keycode ) code -- ; + + sp += 2 ; + srcsize -= 2 ; + + // 連続長を取得する + conbo = code >> 3 ; + if( code & ( 0x1 << 2 ) ) + { + conbo |= *sp << 5 ; + sp ++ ; + srcsize -- ; + } + conbo += MIN_COMPRESS ; // 保存時に減算した最小圧縮バイト数を足す + + // 参照相対アドレスを取得する + indexsize = code & 0x3 ; + switch( indexsize ) + { + case 0 : + index = *sp ; + sp ++ ; + srcsize -- ; + break ; + + case 1 : + index = *((u16 *)sp) ; + sp += 2 ; + srcsize -= 2 ; + break ; + + case 2 : + index = *((u16 *)sp) | ( sp[2] << 16 ) ; + sp += 3 ; + srcsize -= 3 ; + break ; + } + index ++ ; // 保存時に-1しているので+1する + + // 展開 + if( index < conbo ) + { + u32 num ; + + num = index ; + while( conbo > num ) + { + memcpy( dp, dp - num, num ) ; + dp += num ; + conbo -= num ; + num += num ; + } + if( conbo != 0 ) + { + memcpy( dp, dp - num, conbo ) ; + dp += conbo ; + } + } + else + { + memcpy( dp, dp - index, conbo ) ; + dp += conbo ; + } + } + + // 解凍後のサイズを返す + return (int)destsize ; +} + + +// アーカイブファイルを作成する(ディレクトリ一個だけ) +int DXArchive_VER6::EncodeArchiveOneDirectory(TCHAR *OutputFileName, TCHAR *DirectoryPath, bool Press, const char *KeyString ) +{ + int i, FileNum, Result ; + TCHAR **FilePathList, *NameBuffer ; + + // ファイルの数を取得する + FileNum = GetDirectoryFilePath( DirectoryPath, NULL ) ; + if( FileNum < 0 ) return -1 ; + + // ファイルの数の分だけファイル名とファイルポインタの格納用のメモリを確保する + NameBuffer = (TCHAR *)malloc( FileNum * ( 256 + sizeof(TCHAR * ) ) ) ; + + // ファイルのパスを取得する + GetDirectoryFilePath( DirectoryPath, NameBuffer ) ; + + // ファイルパスのリストを作成する + FilePathList = (TCHAR **)( NameBuffer + FileNum * 256 ) ; + for( i = 0 ; i < FileNum ; i ++ ) + FilePathList[i] = NameBuffer + i * 256 ; + + // エンコード + Result = EncodeArchive( OutputFileName, FilePathList, FileNum, Press, KeyString ) ; + + // 確保したメモリの解放 + free( NameBuffer ) ; + + // 結果を返す + return Result ; +} + +// アーカイブファイルを作成する +int DXArchive_VER6::EncodeArchive(TCHAR *OutputFileName, TCHAR **FileOrDirectoryPath, int FileNum, bool Press, const char *KeyString ) +{ + DARC_HEAD_VER6 Head ; + DARC_DIRECTORY_VER6 Directory ; + SIZESAVE SizeSave ; + FILE *DestFp ; + u8 *NameP, *FileP, *DirP ; + int i ; + u32 Type ; + void *TempBuffer ; + u8 Key[DXA_KEYSTR_LENGTH_VER6] ; + + // 鍵文字列の作成 + KeyCreate( KeyString, Key ) ; + + // ファイル読み込みに使用するバッファの確保 + TempBuffer = malloc( DXA_BUFFERSIZE_VER6 ) ; + + // 出力ファイルを開く + DestFp = _tfopen( OutputFileName, TEXT("wb") ) ; + + // アーカイブのヘッダを出力する + { + Head.Head = DXA_HEAD_VER6 ; + Head.Version = DXA_VER_VER6 ; + Head.HeadSize = 0xffffffff ; + Head.DataStartAddress = sizeof( DARC_HEAD_VER6 ) ; + Head.FileNameTableStartAddress = 0xffffffffffffffff ; + Head.DirectoryTableStartAddress = 0xffffffffffffffff ; + Head.FileTableStartAddress = 0xffffffffffffffff ; + Head.CodePage = GetACP() ; + SetFileApisToANSI() ; + + KeyConvFileWrite( &Head, sizeof( DARC_HEAD_VER6 ), DestFp, Key, 0 ) ; + } + + // 各バッファを確保する + NameP = ( u8 * )malloc( DXA_BUFFERSIZE_VER6 ) ; + if( NameP == NULL ) return -1 ; + memset( NameP, 0, DXA_BUFFERSIZE_VER6 ) ; + + FileP = ( u8 * )malloc( DXA_BUFFERSIZE_VER6 ) ; + if( FileP == NULL ) return -1 ; + memset( FileP, 0, DXA_BUFFERSIZE_VER6 ) ; + + DirP = ( u8 * )malloc( DXA_BUFFERSIZE_VER6 ) ; + if( DirP == NULL ) return -1 ; + memset( DirP, 0, DXA_BUFFERSIZE_VER6 ) ; + + // サイズ保存構造体にデータをセット + SizeSave.DataSize = 0 ; + SizeSave.NameSize = 0 ; + SizeSave.DirectorySize = 0 ; + SizeSave.FileSize = 0 ; + + // 最初のディレクトリのファイル情報を書き出す + { + DARC_FILEHEAD_VER6 File ; + + memset( &File, 0, sizeof( DARC_FILEHEAD_VER6 ) ) ; + File.NameAddress = SizeSave.NameSize ; + File.Attributes = FILE_ATTRIBUTE_DIRECTORY ; + File.DataAddress = SizeSave.DirectorySize ; + File.DataSize = 0 ; + File.PressDataSize = 0xffffffffffffffff ; + + // ディレクトリ名の書き出し + SizeSave.NameSize += AddFileNameData(TEXT(""), NameP + SizeSave.NameSize ) ; + + // ファイル情報の書き出し + memcpy( FileP + SizeSave.FileSize, &File, sizeof( DARC_FILEHEAD_VER6 ) ) ; + SizeSave.FileSize += sizeof( DARC_FILEHEAD_VER6 ) ; + } + + // 最初のディレクトリ情報を書き出す + Directory.DirectoryAddress = 0 ; + Directory.ParentDirectoryAddress = 0xffffffffffffffff ; + Directory.FileHeadNum = FileNum ; + Directory.FileHeadAddress = SizeSave.FileSize ; + memcpy( DirP + SizeSave.DirectorySize, &Directory, sizeof( DARC_DIRECTORY_VER6 ) ) ; + + // サイズを加算する + SizeSave.DirectorySize += sizeof( DARC_DIRECTORY_VER6 ) ; + SizeSave.FileSize += sizeof( DARC_FILEHEAD_VER6 ) * FileNum ; + + // 渡されたファイルの数だけ処理を繰り返す + for( i = 0 ; i < FileNum ; i ++ ) + { + // 指定されたファイルがあるかどうか検査 + Type = GetFileAttributes( FileOrDirectoryPath[i] ) ; + if( ( signed int )Type == -1 ) continue ; + + // ファイルのタイプによって処理を分岐 + if( ( Type & FILE_ATTRIBUTE_DIRECTORY ) != 0 ) + { + // ディレクトリの場合はディレクトリのアーカイブに回す + DirectoryEncode( FileOrDirectoryPath[i], NameP, DirP, FileP, &Directory, &SizeSave, i, DestFp, TempBuffer, Press, Key ) ; + } + else + { + WIN32_FIND_DATA FindData ; + HANDLE FindHandle ; + DARC_FILEHEAD_VER6 File ; + + // ファイルの情報を得る + FindHandle = FindFirstFile( FileOrDirectoryPath[i], &FindData ) ; + if( FindHandle == INVALID_HANDLE_VALUE ) continue ; + + // ファイルヘッダをセットする + { + File.NameAddress = SizeSave.NameSize ; + File.Time.Create = ( ( ( LONGLONG )FindData.ftCreationTime.dwHighDateTime ) << 32 ) + FindData.ftCreationTime.dwLowDateTime ; + File.Time.LastAccess = ( ( ( LONGLONG )FindData.ftLastAccessTime.dwHighDateTime ) << 32 ) + FindData.ftLastAccessTime.dwLowDateTime ; + File.Time.LastWrite = ( ( ( LONGLONG )FindData.ftLastWriteTime.dwHighDateTime ) << 32 ) + FindData.ftLastWriteTime.dwLowDateTime ; + File.Attributes = FindData.dwFileAttributes ; + File.DataAddress = SizeSave.DataSize ; + File.DataSize = ( ( ( LONGLONG )FindData.nFileSizeHigh ) << 32 ) + FindData.nFileSizeLow ; + File.PressDataSize = 0xffffffffffffffff ; + } + + // ファイル名を書き出す + SizeSave.NameSize += AddFileNameData( FindData.cFileName, NameP + SizeSave.NameSize ) ; + + // ファイルデータを書き出す + if( File.DataSize != 0 ) + { + FILE *SrcP ; + u64 FileSize, WriteSize, MoveSize ; + + // ファイルを開く + SrcP = _tfopen( FileOrDirectoryPath[i], TEXT("rb") ) ; + + // サイズを得る + _fseeki64( SrcP, 0, SEEK_END ) ; + FileSize = _ftelli64( SrcP ) ; + _fseeki64( SrcP, 0, SEEK_SET ) ; + + // ファイルサイズが 10MB 以下の場合で、圧縮の指定がある場合は圧縮を試みる + if( Press == true && File.DataSize < 10 * 1024 * 1024 ) + { + void *SrcBuf, *DestBuf ; + u32 DestSize, Len ; + + // 一部のファイル形式の場合は予め弾く + if( ( Len = ( int )_tcslen( FindData.cFileName ) ) > 4 ) + { + TCHAR *sp ; + + sp = &FindData.cFileName[Len-3] ; + if( StrICmp( sp, TEXT("wav") ) == 0 || + StrICmp( sp, TEXT("jpg") ) == 0 || + StrICmp( sp, TEXT("png") ) == 0 || + StrICmp( sp, TEXT("mpg") ) == 0 || + StrICmp( sp, TEXT("mp3") ) == 0 || + StrICmp( sp, TEXT("ogg") ) == 0 || + StrICmp( sp, TEXT("wmv") ) == 0 || + StrICmp( sp - 1, TEXT("jpeg") ) == 0 ) goto NOPRESS ; + } + + // データが丸ごと入るメモリ領域の確保 + SrcBuf = malloc( ( size_t )( FileSize + FileSize * 2 + 64 ) ) ; + DestBuf = (u8 *)SrcBuf + FileSize ; + + // ファイルを丸ごと読み込む + fread64( SrcBuf, FileSize, SrcP ) ; + + // 圧縮 + DestSize = Encode( SrcBuf, ( u32 )FileSize, DestBuf ) ; + + // 殆ど圧縮出来なかった場合は圧縮無しでアーカイブする + if( (f64)DestSize / (f64)FileSize > 0.90 ) + { + _fseeki64( SrcP, 0L, SEEK_SET ) ; + free( SrcBuf ) ; + goto NOPRESS ; + } + + // 圧縮データを反転して書き出す + WriteSize = ( DestSize + 3 ) / 4 * 4 ; + KeyConvFileWrite( DestBuf, WriteSize, DestFp, Key, File.DataSize ) ; + + // メモリの解放 + free( SrcBuf ) ; + + // 圧縮データのサイズを保存する + File.PressDataSize = DestSize ; + } + else + { +NOPRESS: + // 転送開始 + WriteSize = 0 ; + while( WriteSize < FileSize ) + { + // 転送サイズ決定 + MoveSize = DXA_BUFFERSIZE_VER6 < FileSize - WriteSize ? DXA_BUFFERSIZE_VER6 : FileSize - WriteSize ; + MoveSize = ( MoveSize + 3 ) / 4 * 4 ; // サイズは4の倍数に合わせる + + // ファイルの反転読み込み + KeyConvFileRead( TempBuffer, MoveSize, SrcP, Key, File.DataSize + WriteSize ) ; + + // 書き出し + fwrite64( TempBuffer, MoveSize, DestFp ) ; + + // 書き出しサイズの加算 + WriteSize += MoveSize ; + } + } + + // 書き出したファイルを閉じる + fclose( SrcP ) ; + + // データサイズの加算 + SizeSave.DataSize += WriteSize ; + } + + // ファイルヘッダを書き出す + memcpy( FileP + Directory.FileHeadAddress + sizeof( DARC_FILEHEAD_VER6 ) * i, &File, sizeof( DARC_FILEHEAD_VER6 ) ) ; + + // Find ハンドルを閉じる + FindClose( FindHandle ) ; + } + } + + // バッファに溜め込んだ各種ヘッダデータを出力する + { + // 出力する順番は ファイルネームテーブル、 DARC_FILEHEAD_VER6 テーブル、 DARC_DIRECTORY_VER6 テーブル の順 + KeyConvFileWrite( NameP, SizeSave.NameSize, DestFp, Key, 0 ) ; + KeyConvFileWrite( FileP, SizeSave.FileSize, DestFp, Key, SizeSave.NameSize ) ; + KeyConvFileWrite( DirP, SizeSave.DirectorySize, DestFp, Key, SizeSave.NameSize + SizeSave.FileSize ) ; + } + + // 再びアーカイブのヘッダを出力する + { + Head.Head = DXA_HEAD_VER6 ; + Head.Version = DXA_VER_VER6 ; + Head.HeadSize = ( u32 )( SizeSave.NameSize + SizeSave.DirectorySize + SizeSave.FileSize ) ; + Head.DataStartAddress = sizeof( DARC_HEAD_VER6 ) ; + Head.FileNameTableStartAddress = SizeSave.DataSize + Head.DataStartAddress ; + Head.FileTableStartAddress = SizeSave.NameSize ; + Head.DirectoryTableStartAddress = Head.FileTableStartAddress + SizeSave.FileSize ; + + _fseeki64( DestFp, 0, SEEK_SET ) ; + KeyConvFileWrite( &Head, sizeof( DARC_HEAD_VER6 ), DestFp, Key, 0 ) ; + } + + // 書き出したファイルを閉じる + fclose( DestFp ) ; + + // 確保したバッファを開放する + free( NameP ) ; + free( FileP ) ; + free( DirP ) ; + free( TempBuffer ) ; + + // 終了 + return 0 ; +} + +// アーカイブファイルを展開する +int DXArchive_VER6::DecodeArchive(TCHAR *ArchiveName, const TCHAR *OutputPath, const char *KeyString ) +{ + u8 *HeadBuffer = NULL ; + DARC_HEAD_VER6 Head ; + u8 *FileP, *NameP, *DirP ; + FILE *ArcP = NULL ; + TCHAR OldDir[MAX_PATH] ; + u8 Key[DXA_KEYSTR_LENGTH_VER6] ; + + // 鍵文字列の作成 + KeyCreate( KeyString, Key ) ; + + // アーカイブファイルを開く + ArcP = _tfopen( ArchiveName, TEXT("rb") ) ; + if( ArcP == NULL ) return -1 ; + + // 出力先のディレクトリにカレントディレクトリを変更する + GetCurrentDirectory( MAX_PATH, OldDir ) ; + SetCurrentDirectory( OutputPath ) ; + + // ヘッダを解析する + { + KeyConvFileRead( &Head, sizeof( DARC_HEAD_VER6 ), ArcP, Key, 0 ) ; + + // IDの検査 + if( Head.Head != DXA_HEAD_VER6 ) + goto ERR ; + + // バージョン検査 + if( Head.Version > DXA_VER_VER6 || Head.Version < 0x0006 ) goto ERR ; + + // ヘッダのサイズ分のメモリを確保する + HeadBuffer = ( u8 * )malloc( ( size_t )Head.HeadSize ) ; + if( HeadBuffer == NULL ) goto ERR ; + + // ヘッダパックをメモリに読み込む + _fseeki64( ArcP, Head.FileNameTableStartAddress, SEEK_SET ) ; + KeyConvFileRead( HeadBuffer, Head.HeadSize, ArcP, Key, 0 ) ; + + // 各アドレスをセットする + NameP = HeadBuffer ; + FileP = NameP + Head.FileTableStartAddress ; + DirP = NameP + Head.DirectoryTableStartAddress ; + } + + // アーカイブの展開を開始する + DirectoryDecode( NameP, DirP, FileP, &Head, ( DARC_DIRECTORY_VER6 * )DirP, ArcP, Key ) ; + + // ファイルを閉じる + fclose( ArcP ) ; + + // ヘッダを読み込んでいたメモリを解放する + free( HeadBuffer ) ; + + // カレントディレクトリを元に戻す + SetCurrentDirectory( OldDir ) ; + + // 終了 + return 0 ; + +ERR : + if( HeadBuffer != NULL ) free( HeadBuffer ) ; + if( ArcP != NULL ) fclose( ArcP ) ; + + // カレントディレクトリを元に戻す + SetCurrentDirectory( OldDir ) ; + + // 終了 + return -1 ; +} + + + +// コンストラクタ +DXArchive_VER6::DXArchive_VER6(TCHAR *ArchivePath ) +{ + this->fp = NULL ; + this->HeadBuffer = NULL ; + this->NameP = this->DirP = this->FileP = NULL ; + this->CurrentDirectory = NULL ; + this->CashBuffer = NULL ; + + if( ArchivePath != NULL ) + { + this->OpenArchiveFile( ArchivePath ) ; + } +} + +// デストラクタ +DXArchive_VER6::~DXArchive_VER6() +{ + if( this->fp != NULL ) this->CloseArchiveFile() ; + + if( this->fp != NULL ) fclose( this->fp ) ; + if( this->HeadBuffer != NULL ) free( this->HeadBuffer ) ; + if( this->CashBuffer != NULL ) free( this->CashBuffer ) ; + + this->fp = NULL ; + this->HeadBuffer = NULL ; + this->NameP = this->DirP = this->FileP = NULL ; + this->CurrentDirectory = NULL ; +} + +// 指定のディレクトリデータの暗号化を解除する( 丸ごとメモリに読み込んだ場合用 ) +int DXArchive_VER6::DirectoryKeyConv( DARC_DIRECTORY_VER6 *Dir ) +{ + // メモリイメージではない場合はエラー + if( this->MemoryOpenFlag == false ) + return -1 ; + + // バージョン 0x0005 より前では何もしない + if( this->Head.Version < 0x0005 ) + return 0 ; + + // 暗号化解除処理開始 + { + u32 i, FileHeadSize ; + DARC_FILEHEAD_VER6 *File ; + + // 格納されているファイルの数だけ繰り返す + FileHeadSize = sizeof( DARC_FILEHEAD_VER6 ) ; + File = ( DARC_FILEHEAD_VER6 * )( this->FileP + Dir->FileHeadAddress ) ; + for( i = 0 ; i < Dir->FileHeadNum ; i ++, File = (DARC_FILEHEAD_VER6 *)( (u8 *)File + FileHeadSize ) ) + { + // ディレクトリかどうかで処理を分岐 + if( File->Attributes & FILE_ATTRIBUTE_DIRECTORY ) + { + // ディレクトリの場合は再帰をかける + DirectoryKeyConv( ( DARC_DIRECTORY_VER6 * )( this->DirP + File->DataAddress ) ) ; + } + else + { + u8 *DataP ; + + // ファイルの場合は暗号化を解除する + + // データがある場合のみ処理 + if( File->DataSize != 0 ) + { + // データ位置をセットする + DataP = ( u8 * )this->fp + this->Head.DataStartAddress + File->DataAddress ; + + // データが圧縮されているかどうかで処理を分岐 + if( File->PressDataSize != 0xffffffffffffffff ) + { + // 圧縮されている場合 + KeyConv( DataP, File->PressDataSize, File->DataSize, this->Key ) ; + } + else + { + // 圧縮されていない場合 + KeyConv( DataP, File->DataSize, File->DataSize, this->Key ) ; + } + } + } + } + } + + // 終了 + return 0 ; +} + +// メモリ上にあるアーカイブイメージを開く( 0:成功 -1:失敗 ) +int DXArchive_VER6::OpenArchiveMem( void *ArchiveImage, s64 ArchiveSize, const char *KeyString ) +{ + u8 *datp ; + + // 既になんらかのアーカイブを開いていた場合はエラー + if( this->fp != NULL ) return -1 ; + + // 鍵の作成 + KeyCreate( KeyString, this->Key ) ; + + // 最初にヘッダの部分を反転する + memcpy( &this->Head, ArchiveImage, sizeof( DARC_HEAD_VER6 ) ) ; + KeyConv( &this->Head, sizeof( DARC_HEAD_VER6 ), 0, this->Key ) ; + + // IDが違う場合はエラー + if( Head.Head != DXA_HEAD_VER6 ) + goto ERR ; + + // ポインタを保存 + this->fp = (FILE *)ArchiveImage ; + datp = (u8 *)ArchiveImage ; + + // ヘッダを解析する + { + memcpy( &this->Head, datp, sizeof( DARC_HEAD_VER6 ) ) ; + KeyConv( &this->Head, sizeof( DARC_HEAD_VER6 ), 0, this->Key ) ; + + datp += sizeof( DARC_HEAD_VER6 ) ; + + // IDの検査 + if( this->Head.Head != DXA_HEAD_VER6 ) goto ERR ; + + // バージョン検査 + if( this->Head.Version > DXA_VER_VER6 || this->Head.Version < 0x0006 ) goto ERR ; + + // ヘッダパックのアドレスをセットする + this->HeadBuffer = (u8 *)this->fp + this->Head.FileNameTableStartAddress ; + + // 各アドレスをセットする + KeyConv( this->HeadBuffer, this->Head.HeadSize, 0, this->Key ) ; + this->NameP = this->HeadBuffer ; + this->FileP = this->NameP + this->Head.FileTableStartAddress ; + this->DirP = this->NameP + this->Head.DirectoryTableStartAddress ; + } + + // カレントディレクトリのセット + this->CurrentDirectory = ( DARC_DIRECTORY_VER6 * )this->DirP ; + + // メモリイメージから開いているフラグを立てる + MemoryOpenFlag = true ; + + // 全てのファイルの暗号化を解除する + DirectoryKeyConv( ( DARC_DIRECTORY_VER6 * )this->DirP ) ; + + // ユーザーのイメージから開いたフラグを立てる + UserMemoryImageFlag = true ; + + // サイズも保存しておく + MemoryImageSize = ArchiveSize ; + + // 終了 + return 0 ; + +ERR : + // 終了 + return -1 ; +} + +// アーカイブファイルを開き最初にすべてメモリ上に読み込んでから処理する( 0:成功 -1:失敗 ) +int DXArchive_VER6::OpenArchiveFileMem( const TCHAR *ArchivePath, const char *KeyString ) +{ + FILE *fp ; + u8 *datp ; + void *ArchiveImage ; + s64 ArchiveSize ; + + // 既になんらかのアーカイブを開いていた場合はエラー + if( this->fp != NULL ) return -1 ; + + // 鍵の作成 + KeyCreate( KeyString, this->Key ) ; + + // メモリに読み込む + { + fp = _tfopen( ArchivePath, TEXT("rb") ) ; + if( fp == NULL ) return -1 ; + _fseeki64( fp, 0L, SEEK_END ) ; + ArchiveSize = _ftelli64( fp ) ; + _fseeki64( fp, 0L, SEEK_SET ) ; + ArchiveImage = malloc( ( size_t )ArchiveSize ) ; + if( ArchiveImage == NULL ) + { + fclose( fp ) ; + return -1 ; + } + fread64( ArchiveImage, ArchiveSize, fp ) ; + fclose( fp ) ; + } + + // 最初にヘッダの部分を反転する + memcpy( &this->Head, ArchiveImage, sizeof( DARC_HEAD_VER6 ) ) ; + KeyConv( &this->Head, sizeof( DARC_HEAD_VER6 ), 0, this->Key ) ; + + // IDが違う場合はエラー + if( Head.Head != DXA_HEAD_VER6 ) + return -1 ; + + // ポインタを保存 + this->fp = (FILE *)ArchiveImage ; + datp = (u8 *)ArchiveImage ; + + // ヘッダを解析する + { + memcpy( &this->Head, datp, sizeof( DARC_HEAD_VER6 ) ) ; + KeyConv( &this->Head, sizeof( DARC_HEAD_VER6 ), 0, this->Key ) ; + + datp += sizeof( DARC_HEAD_VER6 ) ; + + // IDの検査 + if( this->Head.Head != DXA_HEAD_VER6 ) goto ERR ; + + // バージョン検査 + if( this->Head.Version > DXA_VER_VER6 || this->Head.Version < 0x0006 ) goto ERR ; + + // ヘッダパックのアドレスをセットする + this->HeadBuffer = (u8 *)this->fp + this->Head.FileNameTableStartAddress ; + + // 各アドレスをセットする + KeyConv( this->HeadBuffer, this->Head.HeadSize, 0, this->Key ) ; + this->NameP = this->HeadBuffer ; + this->FileP = this->NameP + this->Head.FileTableStartAddress ; + this->DirP = this->NameP + this->Head.DirectoryTableStartAddress ; + } + + // カレントディレクトリのセット + this->CurrentDirectory = ( DARC_DIRECTORY_VER6 * )this->DirP ; + + // メモリイメージから開いているフラグを立てる + MemoryOpenFlag = true ; + + // 全てのファイルの暗号化を解除する + DirectoryKeyConv( ( DARC_DIRECTORY_VER6 * )this->DirP ) ; + + // ユーザーのイメージから開いたわけではないのでフラグを倒す + UserMemoryImageFlag = false ; + + // サイズも保存しておく + MemoryImageSize = ArchiveSize ; + + // 終了 + return 0 ; + +ERR : + + // 終了 + return -1 ; +} + +// アーカイブファイルを開く +int DXArchive_VER6::OpenArchiveFile( const TCHAR *ArchivePath, const char *KeyString ) +{ + // 既になんらかのアーカイブを開いていた場合はエラー + if( this->fp != NULL ) return -1 ; + + // アーカイブファイルを開こうと試みる + this->fp = _tfopen( ArchivePath, TEXT("rb") ) ; + if( this->fp == NULL ) return -1 ; + + // 鍵文字列の作成 + KeyCreate( KeyString, this->Key ) ; + + // ヘッダを解析する + { + KeyConvFileRead( &this->Head, sizeof( DARC_HEAD_VER6 ), this->fp, this->Key, 0 ) ; + + // IDの検査 + if( this->Head.Head != DXA_HEAD_VER6 ) + goto ERR ; + + // バージョン検査 + if( this->Head.Version > DXA_VER_VER6 || this->Head.Version < 0x0006 ) goto ERR ; + + // ヘッダのサイズ分のメモリを確保する + this->HeadBuffer = (u8 * )malloc( ( size_t )this->Head.HeadSize ) ; + if( this->HeadBuffer == NULL ) goto ERR ; + + // ヘッダパックをメモリに読み込む + _fseeki64( this->fp, this->Head.FileNameTableStartAddress, SEEK_SET ) ; + KeyConvFileRead( this->HeadBuffer, this->Head.HeadSize, this->fp, this->Key, 0 ) ; + + // 各アドレスをセットする + this->NameP = this->HeadBuffer ; + this->FileP = this->NameP + this->Head.FileTableStartAddress ; + this->DirP = this->NameP + this->Head.DirectoryTableStartAddress ; + } + + // カレントディレクトリのセット + this->CurrentDirectory = ( DARC_DIRECTORY_VER6 * )this->DirP ; + + // メモリイメージから開いている、フラグを倒す + MemoryOpenFlag = false ; + + // 終了 + return 0 ; + +ERR : + if( this->fp != NULL ){ fclose( this->fp ) ; this->fp = NULL ; } + if( this->HeadBuffer != NULL ){ free( this->HeadBuffer ) ; this->HeadBuffer = NULL ; } + + // 終了 + return -1 ; +} + +// アーカイブファイルを閉じる +int DXArchive_VER6::CloseArchiveFile( void ) +{ + // 既に閉じていたら何もせず終了 + if( this->fp == NULL ) return 0 ; + + // メモリから開いているかどうかで処理を分岐 + if( MemoryOpenFlag == true ) + { + // アーカイブクラスが読み込んだ場合とそうでない場合で処理を分岐 + if( UserMemoryImageFlag == true ) + { + // 反転したデータを元に戻す + DirectoryKeyConv( ( DARC_DIRECTORY_VER6 * )this->DirP ) ; + KeyConv( this->HeadBuffer, this->Head.HeadSize, 0, this->Key ) ; + } + else + { + // 確保していたメモリを開放する + free( this->fp ) ; + } + } + else + { + // アーカイブファイルを閉じる + fclose( this->fp ) ; + + // ヘッダバッファも解放 + free( this->HeadBuffer ) ; + } + + // ポインタ初期化 + this->fp = NULL ; + this->HeadBuffer = NULL ; + this->NameP = this->DirP = this->FileP = NULL ; + this->CurrentDirectory = NULL ; + + // 終了 + return 0 ; +} + +// アーカイブ内のディレクトリパスを変更する( 0:成功 -1:失敗 ) +int DXArchive_VER6::ChangeCurrentDirectoryFast( SEARCHDATA *SearchData ) +{ + DARC_FILEHEAD_VER6 *FileH ; + int i, j, k, Num ; + u8 *NameData, *PathData ; + u16 PackNum, Parity ; + + PackNum = SearchData->PackNum ; + Parity = SearchData->Parity ; + PathData = SearchData->FileName ; + + // カレントディレクトリから同名のディレクトリを探す + FileH = ( DARC_FILEHEAD_VER6 * )( this->FileP + this->CurrentDirectory->FileHeadAddress ) ; + Num = (s32)this->CurrentDirectory->FileHeadNum ; + for( i = 0 ; i < Num ; i ++, FileH ++ ) + { + // ディレクトリチェック + if( ( FileH->Attributes & FILE_ATTRIBUTE_DIRECTORY ) == 0 ) continue ; + + // 文字列数とパリティチェック + NameData = this->NameP + FileH->NameAddress ; + if( PackNum != ((u16 *)NameData)[0] || Parity != ((u16 *)NameData)[1] ) continue ; + + // 文字列チェック + NameData += 4 ; + for( j = 0, k = 0 ; j < PackNum ; j ++, k += 4 ) + if( *((u32 *)&PathData[k]) != *((u32 *)&NameData[k]) ) break ; + + // 適合したディレクトリがあったらここで終了 + if( PackNum == j ) break ; + } + + // 無かったらエラー + if( i == Num ) return -1 ; + + // 在ったらカレントディレクトリを変更 + this->CurrentDirectory = ( DARC_DIRECTORY_VER6 * )( this->DirP + FileH->DataAddress ) ; + + // 正常終了 + return 0 ; +} + +// アーカイブ内のディレクトリパスを変更する( 0:成功 -1:失敗 ) +int DXArchive_VER6::ChangeCurrentDir( const TCHAR *DirPath ) +{ + return ChangeCurrentDirectoryBase( DirPath, true ) ; +} + +// アーカイブ内のディレクトリパスを変更する( 0:成功 -1:失敗 ) +int DXArchive_VER6::ChangeCurrentDirectoryBase( const TCHAR *DirectoryPath, bool ErrorIsDirectoryReset, SEARCHDATA *LastSearchData ) +{ + DARC_DIRECTORY_VER6 *OldDir ; + SEARCHDATA SearchData ; + + // ここに留まるパスだったら無視 + if( _tcscmp( DirectoryPath, TEXT(".") ) == 0 ) return 0 ; + + // 『\』だけの場合はルートディレクトリに戻る + if( _tcscmp( DirectoryPath, TEXT("\\") ) == 0 ) + { + this->CurrentDirectory = ( DARC_DIRECTORY_VER6 * )this->DirP ; + return 0 ; + } + + // 下に一つ下がるパスだったら処理を分岐 + if( _tcscmp( DirectoryPath, TEXT("..") ) == 0 ) + { + // ルートディレクトリに居たらエラー + if( this->CurrentDirectory->ParentDirectoryAddress == 0xffffffffffffffff ) return -1 ; + + // 親ディレクトリがあったらそちらに移る + this->CurrentDirectory = ( DARC_DIRECTORY_VER6 * )( this->DirP + this->CurrentDirectory->ParentDirectoryAddress ) ; + return 0 ; + } + + // それ以外の場合は指定の名前のディレクトリを探す + + // 変更以前のディレクトリを保存しておく + OldDir = this->CurrentDirectory ; + + // パス中に『\』があるかどうかで処理を分岐 + if( _tcschr( DirectoryPath, '\\' ) == NULL ) + { + // ファイル名を検索専用の形式に変換する + ConvSearchData( &SearchData, DirectoryPath, NULL ) ; + + // ディレクトリを変更 + if( ChangeCurrentDirectoryFast( &SearchData ) < 0 ) goto ERR ; + +/* // \ が無い場合は、同名のディレクトリを探す + FileH = ( DARC_FILEHEAD_VER6 * )( this->FileP + this->CurrentDirectory->FileHeadAddress ) ; + for( i = 0 ; + i < (s32)this->CurrentDirectory->FileHeadNum && + StrICmp( ( char * )( this->NameP + FileH->NameAddress ), DirectoryPath ) != 0 ; + i ++, FileH ++ ){} +*/ + } + else + { + // \ がある場合は繋がったディレクトリを一つづつ変更してゆく + + int Point, StrLength ; + + Point = 0 ; + // ループ + for(;;) + { + // 文字列を取得する + ConvSearchData( &SearchData, &DirectoryPath[Point], &StrLength ) ; + Point += StrLength ; +/* StrPoint = 0 ; + while( DirectoryPath[Point] != '\0' && DirectoryPath[Point] != '\\' ) + { + if( CheckMultiByteChar( &DirectoryPath[Point] ) == TRUE ) + { + *((u16 *)&String[StrPoint]) = *((u16 *)&DirectoryPath[Point]) ; + StrPoint += 2 ; + Point += 2 ; + } + else + { + String[StrPoint] = DirectoryPath[Point] ; + StrPoint ++ ; + Point ++ ; + } + } + String[StrPoint] = '\0' ; +*/ + // もし初っ端が \ だった場合はルートディレクトリに落とす + if( StrLength == 0 && DirectoryPath[Point] == '\\' ) + { + this->ChangeCurrentDirectoryBase(TEXT("\\"), false ) ; + } + else + { + // それ以外の場合は普通にディレクトリ変更 + if( this->ChangeCurrentDirectoryFast( &SearchData ) < 0 ) + { + // エラーが起きて、更にエラーが起きた時に元のディレクトリに戻せの + // フラグが立っている場合は元のディレクトリに戻す + if( ErrorIsDirectoryReset == true ) this->CurrentDirectory = OldDir ; + + // エラー終了 + goto ERR ; + } + } + + // もし終端文字で終了した場合はループから抜ける + // 又はあと \ しかない場合もループから抜ける + if( DirectoryPath[Point] == '\0' || + ( DirectoryPath[Point] == '\\' && DirectoryPath[Point+1] == '\0' ) ) break ; + Point ++ ; + } + } + + if( LastSearchData != NULL ) + { + memcpy( LastSearchData->FileName, SearchData.FileName, SearchData.PackNum * 4 ) ; + LastSearchData->Parity = SearchData.Parity ; + LastSearchData->PackNum = SearchData.PackNum ; + } + + // 正常終了 + return 0 ; + +ERR: + if( LastSearchData != NULL ) + { + memcpy( LastSearchData->FileName, SearchData.FileName, SearchData.PackNum * 4 ) ; + LastSearchData->Parity = SearchData.Parity ; + LastSearchData->PackNum = SearchData.PackNum ; + } + + // エラー終了 + return -1 ; +} + +// アーカイブ内のカレントディレクトリパスを取得する +int DXArchive_VER6::GetCurrentDir(TCHAR *DirPathBuffer, int BufferLength ) +{ + TCHAR DirPath[MAX_PATH] ; + DARC_DIRECTORY_VER6 *Dir[200], *DirTempP ; + int Depth, i ; + + // ルートディレクトリに着くまで検索する + Depth = 0 ; + DirTempP = this->CurrentDirectory ; + while( DirTempP->DirectoryAddress != 0xffffffffffffffff && DirTempP->DirectoryAddress != 0 ) + { + Dir[Depth] = DirTempP ; + DirTempP = ( DARC_DIRECTORY_VER6 * )( this->DirP + DirTempP->ParentDirectoryAddress ) ; + Depth ++ ; + } + + // パス名を連結する + DirPath[0] = '\0' ; + for( i = Depth - 1 ; i >= 0 ; i -- ) + { + _tcscat( DirPath, TEXT("\\") ) ; + _tcscat( DirPath, (TCHAR * )( this->NameP + ( ( DARC_FILEHEAD_VER6 * )( this->FileP + Dir[i]->DirectoryAddress ) )->NameAddress ) ) ; + } + + // バッファの長さが0か、長さが足りないときはディレクトリ名の長さを返す + if( BufferLength == 0 || BufferLength < (s32)_tcslen( DirPath ) ) + { + return ( int )( _tcslen( DirPath ) + 1 ) ; + } + else + { + // ディレクトリ名をバッファに転送する + _tcscpy( DirPathBuffer, DirPath ) ; + } + + // 終了 + return 0 ; +} + + + +// アーカイブファイル中の指定のファイルをメモリに読み込む +s64 DXArchive_VER6::LoadFileToMem( const TCHAR *FilePath, void *Buffer, u64 BufferLength ) +{ + DARC_FILEHEAD_VER6 *FileH ; + + // 指定のファイルの情報を得る + FileH = this->GetFileInfo( FilePath ) ; + if( FileH == NULL ) return -1 ; + + // ファイルサイズが足りているか調べる、足りていないか、バッファ、又はサイズが0だったらサイズを返す + if( BufferLength < FileH->DataSize || BufferLength == 0 || Buffer == NULL ) + { + return ( s64 )FileH->DataSize ; + } + + // 足りている場合はバッファーに読み込む + + // ファイルが圧縮されているかどうかで処理を分岐 + if( FileH->PressDataSize != 0xffffffffffffffff ) + { + // 圧縮されている場合 + + // メモリ上に読み込んでいるかどうかで処理を分岐 + if( MemoryOpenFlag == true ) + { + // メモリ上の圧縮データを解凍する + Decode( (u8 *)this->fp + this->Head.DataStartAddress + FileH->DataAddress, Buffer ) ; + } + else + { + void *temp ; + + // 圧縮データをメモリに読み込んでから解凍する + + // 圧縮データが収まるメモリ領域の確保 + temp = malloc( ( size_t )FileH->PressDataSize ) ; + + // 圧縮データの読み込み + _fseeki64( this->fp, this->Head.DataStartAddress + FileH->DataAddress, SEEK_SET ) ; + KeyConvFileRead( temp, FileH->PressDataSize, this->fp, this->Key, FileH->DataSize ) ; + + // 解凍 + Decode( temp, Buffer ) ; + + // メモリの解放 + free( temp ) ; + } + } + else + { + // 圧縮されていない場合 + + // メモリ上に読み込んでいるかどうかで処理を分岐 + if( MemoryOpenFlag == true ) + { + // コピー + memcpy( Buffer, (u8 *)this->fp + this->Head.DataStartAddress + FileH->DataAddress, ( size_t )FileH->DataSize ) ; + } + else + { + // ファイルポインタを移動 + _fseeki64( this->fp, this->Head.DataStartAddress + FileH->DataAddress, SEEK_SET ) ; + + // 読み込み + KeyConvFileRead( Buffer, FileH->DataSize, this->fp, this->Key, FileH->DataSize ) ; + } + } + + // 終了 + return 0 ; +} + +// アーカイブファイル中の指定のファイルをサイズを取得する +s64 DXArchive_VER6::GetFileSize( const TCHAR *FilePath ) +{ + // ファイルサイズを返す + return this->LoadFileToMem( FilePath, NULL, 0 ) ; +} + +// アーカイブファイルをメモリに読み込んだ場合のファイルイメージが格納されている先頭アドレスを取得する( メモリから開いている場合のみ有効 ) +void *DXArchive_VER6::GetFileImage( void ) +{ + // メモリイメージから開いていなかったらエラー + if( MemoryOpenFlag == false ) return NULL ; + + // 先頭アドレスを返す + return this->fp ; +} + +// アーカイブファイル中の指定のファイルのファイル内の位置とファイルの大きさを得る( -1:エラー ) +int DXArchive_VER6::GetFileInfo( const TCHAR *FilePath, u64 *PositionP, u64 *SizeP ) +{ + DARC_FILEHEAD_VER6 *FileH ; + + // 指定のファイルの情報を得る + FileH = this->GetFileInfo( FilePath ) ; + if( FileH == NULL ) return -1 ; + + // ファイルのデータがある位置とファイルサイズを保存する + if( PositionP != NULL ) *PositionP = this->Head.DataStartAddress + FileH->DataAddress ; + if( SizeP != NULL ) *SizeP = FileH->DataSize ; + + // 成功終了 + return 0 ; +} + +// アーカイブファイル中の指定のファイルを、クラス内のバッファに読み込む +void *DXArchive_VER6::LoadFileToCash( const TCHAR *FilePath ) +{ + s64 FileSize ; + + // ファイルサイズを取得する + FileSize = this->GetFileSize( FilePath ) ; + + // ファイルが無かったらエラー + if( FileSize < 0 ) return NULL ; + + // 確保しているキャッシュバッファのサイズよりも大きい場合はバッファを再確保する + if( FileSize > ( s64 )this->CashBufferSize ) + { + // キャッシュバッファのクリア + this->ClearCash() ; + + // キャッシュバッファの再確保 + this->CashBuffer = malloc( ( size_t )FileSize ) ; + + // 確保に失敗した場合は NULL を返す + if( this->CashBuffer == NULL ) return NULL ; + + // キャッシュバッファのサイズを保存 + this->CashBufferSize = FileSize ; + } + + // ファイルをメモリに読み込む + this->LoadFileToMem( FilePath, this->CashBuffer, FileSize ) ; + + // キャッシュバッファのアドレスを返す + return this->CashBuffer ; +} + +// キャッシュバッファを開放する +int DXArchive_VER6::ClearCash( void ) +{ + // メモリが確保されていたら解放する + if( this->CashBuffer != NULL ) + { + free( this->CashBuffer ) ; + this->CashBuffer = NULL ; + this->CashBufferSize = 0 ; + } + + // 終了 + return 0 ; +} + + +// アーカイブファイル中の指定のファイルを開き、ファイルアクセス用オブジェクトを作成する +DXArchiveFile_VER6*DXArchive_VER6::OpenFile( const TCHAR *FilePath ) +{ + DARC_FILEHEAD_VER6 *FileH ; + DXArchiveFile_VER6*CDArc = NULL ; + + // メモリから開いている場合は無効 + if( MemoryOpenFlag == true ) return NULL ; + + // 指定のファイルの情報を得る + FileH = this->GetFileInfo( FilePath ) ; + if( FileH == NULL ) return NULL ; + + // 新しく DXArchiveFile クラスを作成する + CDArc = new DXArchiveFile_VER6( FileH, this ) ; + + // DXArchiveFile_VER6 クラスのポインタを返す + return CDArc ; +} + + + + + + + + + + + + + +// コンストラクタ +DXArchiveFile_VER6::DXArchiveFile_VER6( DARC_FILEHEAD_VER6 *FileHead, DXArchive_VER6*Archive ) +{ + this->FileData = FileHead ; + this->Archive = Archive ; + this->EOFFlag = FALSE ; + this->FilePoint = 0 ; + this->DataBuffer = NULL ; + + // ファイルが圧縮されている場合はここで読み込んで解凍してしまう + if( FileHead->PressDataSize != 0xffffffffffffffff ) + { + void *temp ; + + // 圧縮データが収まるメモリ領域の確保 + temp = malloc( ( size_t )FileHead->PressDataSize ) ; + + // 解凍データが収まるメモリ領域の確保 + this->DataBuffer = malloc( ( size_t )FileHead->DataSize ) ; + + // 圧縮データの読み込み + _fseeki64( this->Archive->GetFilePointer(), this->Archive->GetHeader()->DataStartAddress + FileHead->DataAddress, SEEK_SET ) ; + DXArchive_VER6::KeyConvFileRead( temp, FileHead->PressDataSize, this->Archive->GetFilePointer(), this->Archive->GetKey(), FileHead->DataSize ) ; + + // 解凍 + DXArchive_VER6::Decode( temp, this->DataBuffer ) ; + + // メモリの解放 + free( temp ) ; + } +} + +// デストラクタ +DXArchiveFile_VER6::~DXArchiveFile_VER6() +{ + // メモリの解放 + if( this->DataBuffer != NULL ) + { + free( this->DataBuffer ) ; + this->DataBuffer = NULL ; + } +} + +// ファイルの内容を読み込む +s64 DXArchiveFile_VER6::Read( void *Buffer, s64 ReadLength ) +{ + s64 ReadSize ; + + // EOF フラグが立っていたら0を返す + if( this->EOFFlag == TRUE ) return 0 ; + + // アーカイブファイルポインタと、仮想ファイルポインタが一致しているか調べる + // 一致していなかったらアーカイブファイルポインタを移動する + if( this->DataBuffer == NULL && _ftelli64( this->Archive->GetFilePointer() ) != (s32)( this->FileData->DataAddress + this->Archive->GetHeader()->DataStartAddress + this->FilePoint ) ) + { + _fseeki64( this->Archive->GetFilePointer(), this->FileData->DataAddress + this->Archive->GetHeader()->DataStartAddress + this->FilePoint, SEEK_SET ) ; + } + + // EOF 検出 + if( this->FileData->DataSize == this->FilePoint ) + { + this->EOFFlag = TRUE ; + return 0 ; + } + + // データを読み込む量を設定する + ReadSize = ReadLength < (s64)( this->FileData->DataSize - this->FilePoint ) ? ReadLength : this->FileData->DataSize - this->FilePoint ; + + // データを読み込む + if( this->DataBuffer == NULL ) + { + DXArchive_VER6::KeyConvFileRead( Buffer, ReadSize, this->Archive->GetFilePointer(), this->Archive->GetKey(), this->FileData->DataSize + this->FilePoint ) ; + } + else + { + memcpy( Buffer, (u8 *)this->DataBuffer + this->FilePoint, ( size_t )ReadSize ) ; + } + + // EOF フラグを倒す + this->EOFFlag = FALSE ; + + // 読み込んだ分だけファイルポインタを移動する + this->FilePoint += ReadSize ; + + // 読み込んだ容量を返す + return ReadSize ; +} + +// ファイルポインタを変更する +s64 DXArchiveFile_VER6::Seek( s64 SeekPoint, s64 SeekMode ) +{ + // シークタイプによって処理を分岐 + switch( SeekMode ) + { + case SEEK_SET : break ; + case SEEK_CUR : SeekPoint += this->FilePoint ; break ; + case SEEK_END : SeekPoint = this->FileData->DataSize + SeekPoint ; break ; + } + + // 補正 + if( SeekPoint > (s64)this->FileData->DataSize ) SeekPoint = this->FileData->DataSize ; + if( SeekPoint < 0 ) SeekPoint = 0 ; + + // セット + this->FilePoint = SeekPoint ; + + // EOFフラグを倒す + this->EOFFlag = FALSE ; + + // 終了 + return 0 ; +} + +// 現在のファイルポインタを得る +s64 DXArchiveFile_VER6::Tell( void ) +{ + return this->FilePoint ; +} + +// ファイルの終端に来ているか、のフラグを得る +s64 DXArchiveFile_VER6::Eof( void ) +{ + return this->EOFFlag ; +} + +// ファイルのサイズを取得する +s64 DXArchiveFile_VER6::Size( void ) +{ + return this->FileData->DataSize ; +} + + + + + +WCHAR sjis2utf8_VER6(const char* sjis) +{ + LPCCH pSJIS = (LPCCH)sjis; + + int sjisSize = 2; + WCHAR *pUTF8 = new WCHAR[sjisSize]; + MultiByteToWideChar(932, 0, (LPCCH)pSJIS, -1, pUTF8, 2); + WCHAR utf8 = pUTF8[0]; + delete[] pUTF8; + return utf8; +} diff --git a/src/WolfDec/3rdParty/DXArchiveVer6.h b/src/WolfDec/3rdParty/DXArchiveVer6.h new file mode 100644 index 0000000..656883d --- /dev/null +++ b/src/WolfDec/3rdParty/DXArchiveVer6.h @@ -0,0 +1,297 @@ +// ------------------------------------------------------------------------------- +// +// DXライブラリアーカイバ +// +// Creator : 山田 巧 +// Creation Date : 2003/09/11 +// Version : 1.02 +// +// ------------------------------------------------------------------------------- + +// 多重インクルード防止用定義 +#ifndef __DXARCHIVE_VER6 +#define __DXARCHIVE_VER6 + +// include -------------------------------------- +#include +#include + +// define --------------------------------------- + +// データ型定義 +#ifndef u64 +#define u64 unsigned __int64 +#endif + +#ifndef u32 +#define u32 unsigned int +#endif + +#ifndef u16 +#define u16 unsigned short +#endif + +#ifndef u8 +#define u8 unsigned char +#endif + +#ifndef s64 +#define s64 signed __int64 +#endif + +#ifndef s32 +#define s32 signed int +#endif + +#ifndef s16 +#define s16 signed short +#endif + +#ifndef s8 +#define s8 signed char +#endif + +#ifndef f64 +#define f64 double +#endif + +#ifndef TRUE +#define TRUE (1) +#endif + +#ifndef FALSE +#define FALSE (0) +#endif + +#ifndef NULL +#define NULL (0) +#endif + +#define DXA_HEAD_VER6 *((u16 *)"DX") // ヘッダ +#define DXA_VER_VER6 (0x0006) // バージョン +#define DXA_BUFFERSIZE_VER6 (0x1000000) // アーカイブ作成時に使用するバッファのサイズ +#define DXA_KEYSTR_LENGTH_VER6 (12) // 鍵文字列の長さ + +/* + バージョンごとの違い + + 0x0002 DARC_FILEHEAD に PressDataSize を追加 + 0x0004 DARC_HEAD に CodePage を追加 + 0x0005 暗号化処理を一部変更 + 0x0006 64bit化 +*/ + +/* + データマップ + + DARC_HEAD + ファイル実データ + ファイル名テーブル + DARC_FILEHEAD テーブル + DARC_DIRECTORY テーブル +*/ + +/* + ファイル名のデータ形式 + 2byte:文字列の長さ(バイトサイズ÷4) + 2byte:文字列のパリティデータ(全ての文字の値を足したもの) + 英字は大文字に変換されたファイル名のデータ(4の倍数のサイズ) + 英字が大文字に変換されていないファイル名のデータ +*/ + +// struct --------------------------------------- + +#pragma pack(push) +#pragma pack(1) + +// アーカイブデータの最初のヘッダ +typedef struct tagDARC_HEAD_VER6 +{ + u16 Head; // ヘッダ + u16 Version; // バージョン + u32 HeadSize; // ヘッダ情報の DARC_HEAD を抜いた全サイズ + u64 DataStartAddress; // 最初のファイルのデータが格納されているデータアドレス(ファイルの先頭アドレスをアドレス0とする) + u64 FileNameTableStartAddress; // ファイル名テーブルの先頭アドレス(ファイルの先頭アドレスをアドレス0とする) + u64 FileTableStartAddress; // ファイルテーブルの先頭アドレス(メンバ変数 FileNameTableStartAddress のアドレスを0とする) + u64 DirectoryTableStartAddress; // ディレクトリテーブルの先頭アドレス(メンバ変数 FileNameTableStartAddress のアドレスを0とする) + // アドレス0から配置されている DARC_DIRECTORY 構造体がルートディレクトリ + u64 CodePage; // ファイル名に使用しているコードページ番号 +} DARC_HEAD_VER6; + +// ファイルの時間情報 +typedef struct tagDARC_FILETIME_VER6 +{ + u64 Create; // 作成時間 + u64 LastAccess; // 最終アクセス時間 + u64 LastWrite; // 最終更新時間 +} DARC_FILETIME_VER6; + +// ファイル格納情報 +typedef struct tagDARC_FILEHEAD_VER6 +{ + u64 NameAddress; // ファイル名が格納されているアドレス( ARCHIVE_HEAD構造体 のメンバ変数 FileNameTableStartAddress のアドレスをアドレス0とする) + + u64 Attributes; // ファイル属性 + DARC_FILETIME_VER6 Time; // 時間情報 + u64 DataAddress; // ファイルが格納されているアドレス + // ファイルの場合:DARC_HEAD構造体 のメンバ変数 DataStartAddress が示すアドレスをアドレス0とする + // ディレクトリの場合:DARC_HEAD構造体 のメンバ変数 DirectoryTableStartAddress のが示すアドレスをアドレス0とする + u64 DataSize; // ファイルのデータサイズ + u64 PressDataSize; // 圧縮後のデータのサイズ( 0xffffffffffffffff:圧縮されていない ) ( Ver0x0002 で追加された ) +} DARC_FILEHEAD_VER6; + +// ディレクトリ格納情報 +typedef struct tagDARC_DIRECTORY_VER6 +{ + u64 DirectoryAddress; // 自分の DARC_FILEHEAD が格納されているアドレス( DARC_HEAD 構造体 のメンバ変数 FileTableStartAddress が示すアドレスをアドレス0とする) + u64 ParentDirectoryAddress; // 親ディレクトリの DARC_DIRECTORY が格納されているアドレス( DARC_HEAD構造体 のメンバ変数 DirectoryTableStartAddress が示すアドレスをアドレス0とする) + u64 FileHeadNum; // ディレクトリ内のファイルの数 + u64 FileHeadAddress; // ディレクトリ内のファイルのヘッダ列が格納されているアドレス( DARC_HEAD構造体 のメンバ変数 FileTableStartAddress が示すアドレスをアドレス0とする) +} DARC_DIRECTORY_VER6; + +#pragma pack(pop) + +// class ---------------------------------------- + +// アーカイブクラス +class DXArchive_VER6 +{ +public: + // 日付の比較結果 + enum DATE_RESULT + { + DATE_RESULT_LEFTNEW = 0, // 第一引数が新しい + DATE_RESULT_RIGHTNEW, // 第二引数が新しい + DATE_RESULT_DRAW, // 日付は同じ + }; + + DXArchive_VER6(TCHAR* ArchivePath = NULL); + ~DXArchive_VER6(); + + static int EncodeArchive(TCHAR* OutputFileName, TCHAR** FileOrDirectoryPath, int FileNum, bool Press = false, const char* KeyString = NULL); // アーカイブファイルを作成する + static int EncodeArchiveOneDirectory(TCHAR* OutputFileName, TCHAR* FolderPath, bool Press = false, const char* KeyString = NULL); // アーカイブファイルを作成する(ディレクトリ一個だけ) + static int DecodeArchive(TCHAR* ArchiveName, const TCHAR* OutputPath, const char* KeyString = NULL); // アーカイブファイルを展開する + + int OpenArchiveFile(const TCHAR* ArchivePath, const char* KeyString = NULL); // アーカイブファイルを開く( 0:成功 -1:失敗 ) + int OpenArchiveFileMem(const TCHAR* ArchivePath, const char* KeyString = NULL); // アーカイブファイルを開き最初にすべてメモリ上に読み込んでから処理する( 0:成功 -1:失敗 ) + int OpenArchiveMem(void* ArchiveImage, s64 ArchiveSize, const char* KeyString = NULL); // メモリ上にあるアーカイブファイルイメージを開く( 0:成功 -1:失敗 ) + int CloseArchiveFile(void); // アーカイブファイルを閉じる + + s64 LoadFileToMem(const TCHAR* FilePath, void* Buffer, u64 BufferLength); // アーカイブファイル中の指定のファイルをメモリに読み込む( -1:エラー 0以上:ファイルサイズ ) + s64 GetFileSize(const TCHAR* FilePath); // アーカイブファイル中の指定のファイルをサイズを取得する( -1:エラー ) + int GetFileInfo(const TCHAR* FilePath, u64* PositionP, u64* SizeP); // アーカイブファイル中の指定のファイルのファイル内の位置とファイルの大きさを得る( -1:エラー ) + void* GetFileImage(void); // アーカイブファイルをメモリに読み込んだ場合のファイルイメージが格納されている先頭アドレスを取得する( メモリから開いている場合のみ有効、圧縮している場合は、圧縮された状態のデータが格納されているので注意 ) + class DXArchiveFile_VER6* OpenFile(const TCHAR* FilePath); // アーカイブファイル中の指定のファイルを開き、ファイルアクセス用オブジェクトを作成する( ファイルから開いている場合のみ有効 ) + + void* LoadFileToCash(const TCHAR* FilePath); // アーカイブファイル中の指定のファイルを、クラス内のキャッシュバッファに読み込む + void* GetCash(void); // キャッシュバッファのアドレスを取得する + int ClearCash(void); // キャッシュバッファを開放する + + int ChangeCurrentDir(const TCHAR* DirPath); // アーカイブ内のディレクトリパスを変更する( 0:成功 -1:失敗 ) + int GetCurrentDir(TCHAR* DirPathBuffer, int BufferLength); // アーカイブ内のカレントディレクトリパスを取得する + + + + // 以下は割と内部で使用 + static void fwrite64(void* Data, s64 Size, FILE* fp); // 標準ストリームにデータを書き込む( 64bit版 ) + static void fread64(void* Buffer, s64 Size, FILE* fp); // 標準ストリームからデータを読み込む( 64bit版 ) + static void NotConv(void* Data, s64 Size); // データを反転させる関数 + static void NotConvFileWrite(void* Data, s64 Size, FILE* fp); // データを反転させてファイルに書き出す関数 + static void NotConvFileRead(void* Data, s64 Size, FILE* fp); // データを反転させてファイルから読み込む関数 + static void KeyCreate(const char* Source, unsigned char* Key); // 鍵文字列を作成 + static void KeyConv(void* Data, s64 Size, s64 Position, unsigned char* Key); // 鍵文字列を使用して Xor 演算( Key は必ず DXA_KEYSTR_LENGTH の長さがなければならない ) + static void KeyConvFileWrite(void* Data, s64 Size, FILE* fp, unsigned char* Key, s64 Position = -1); // データを鍵文字列を使用して Xor 演算した後ファイルに書き出す関数( Key は必ず DXA_KEYSTR_LENGTH の長さがなければならない ) + static void KeyConvFileRead(void* Data, s64 Size, FILE* fp, unsigned char* Key, s64 Position = -1); // ファイルから読み込んだデータを鍵文字列を使用して Xor 演算する関数( Key は必ず DXA_KEYSTR_LENGTH の長さがなければならない ) + static DATE_RESULT DateCmp(DARC_FILETIME_VER6* date1, DARC_FILETIME_VER6* date2); // どちらが新しいかを比較する + static int Encode(void* Src, u32 SrcSize, void* Dest); // データを圧縮する( 戻り値:圧縮後のデータサイズ ) + static int Decode(void* Src, void* Dest); // データを解凍する( 戻り値:解凍後のデータサイズ ) + + DARC_DIRECTORY_VER6* GetCurrentDirectoryInfo(void); // アーカイブ内のカレントディレクトリの情報を取得する + DARC_FILEHEAD_VER6* GetFileInfo(const TCHAR* FilePath); // ファイルの情報を得る + inline DARC_HEAD_VER6* GetHeader(void) { return &Head; } + inline u8* GetKey(void) { return Key; } + inline FILE* GetFilePointer(void) { return fp; } + inline u8* GetNameP(void) { return NameP; } + +protected: + FILE* fp; // アーカイブファイルのポインタ + u8* HeadBuffer; // ヘッダーバッファー + u8* FileP, * DirP, * NameP; // 各種テーブル(ファイルヘッダ情報テーブル、ディレクトリ情報テーブル、名前情報テーブル)へのポインタ + DARC_DIRECTORY_VER6* CurrentDirectory; // カレントディレクトリデータへのポインタ + + void* CashBuffer; // 読み込んだファイルデータを一時的に保存しておくバッファ + u64 CashBufferSize; // キャッシュバッファに確保しているメモリ容量 + bool MemoryOpenFlag; // メモリ上のファイルを開いているか、フラグ + bool UserMemoryImageFlag; // ユーザーが展開したメモリイメージを使用しているか、フラグ + s64 MemoryImageSize; // メモリ上のファイルから開いていた場合のイメージのサイズ + u8 Key[DXA_KEYSTR_LENGTH_VER6]; // 鍵文字列 + + DARC_HEAD_VER6 Head; // アーカイブのヘッダ + + // サイズ保存用構造体 + typedef struct tagSIZESAVE + { + u64 DataSize; // 実データの総量 + u64 NameSize; // ファイル名データの総量 + u64 DirectorySize; // ディレクトリデータの総量 + u64 FileSize; // ファイルプロパティデータの総量 + } SIZESAVE; + + // ファイル名検索用データ構造体 + typedef struct tagSEARCHDATA + { + u8 FileName[1024]; + u16 Parity; + u16 PackNum; + } SEARCHDATA; + + static int DirectoryEncode(TCHAR* DirectoryName, u8* NameP, u8* DirP, u8* FileP, DARC_DIRECTORY_VER6* ParentDir, SIZESAVE* Size, int DataNumber, FILE* DestP, void* TempBuffer, bool Press, unsigned char* Key); // 指定のディレクトリにあるファイルをアーカイブデータに吐き出す + static int DirectoryDecode(u8* NameP, u8* DirP, u8* FileP, DARC_HEAD_VER6* Head, DARC_DIRECTORY_VER6* Dir, FILE* ArcP, unsigned char* Key); // 指定のディレクトリデータにあるファイルを展開する + static int StrICmp(const TCHAR* Str1, const TCHAR* Str2); // 比較対照の文字列中の大文字を小文字として扱い比較する( 0:等しい 1:違う ) + static int ConvSearchData(SEARCHDATA* Dest, const TCHAR* Src, int* Length); // 文字列を検索用のデータに変換( ヌル文字か \ があったら終了 ) + static int AddFileNameData(const TCHAR* FileName, u8* FileNameTable); // ファイル名データを追加する( 戻り値は使用したデータバイト数 ) + static TCHAR* GetOriginalFileName(u8* FileNameTable); // ファイル名データから元のファイル名の文字列を取得する + static int GetDirectoryFilePath(const TCHAR* DirectoryPath, TCHAR* FilePathBuffer = NULL); // ディレクトリ内のファイルのパスを取得する( FilePathBuffer は一ファイルに付き256バイトの容量が必要 ) + int ChangeCurrentDirectoryFast(SEARCHDATA* SearchData); // アーカイブ内のディレクトリパスを変更する( 0:成功 -1:失敗 ) + int ChangeCurrentDirectoryBase(const TCHAR* DirectoryPath, bool ErrorIsDirectoryReset, SEARCHDATA* LastSearchData = NULL); // アーカイブ内のディレクトリパスを変更する( 0:成功 -1:失敗 ) + int DirectoryKeyConv(DARC_DIRECTORY_VER6* Dir); // 指定のディレクトリデータの暗号化を解除する( 丸ごとメモリに読み込んだ場合用 ) + + // 2バイト文字か調べる( TRUE:2バイト文字 FALSE:1バイト文字 ) + inline static int CheckMultiByteChar(const TCHAR* Buf) + { + return ((unsigned char)*Buf >= 0x81 && (unsigned char)*Buf <= 0x9F) || ((unsigned char)*Buf >= 0xE0 && (unsigned char)*Buf <= 0xFC); + } + + + // ファイル名も一緒になっていると分かっているパス中からファイルパスとディレクトリパスを分割する + // フルパスである必要は無い + static int GetFilePathAndDirPath(TCHAR* Src, TCHAR* FilePath, TCHAR* DirPath); +}; + + +// アーカイブされたファイルのアクセス用のクラス +class DXArchiveFile_VER6 +{ +protected: + DARC_FILEHEAD_VER6* FileData; // ファイルデータへのポインタ + DXArchive_VER6* Archive; // アーカイブクラスへのポインタ + void* DataBuffer; // メモリにデータを展開した際のバッファのポインタ + + int EOFFlag; // EOFフラグ + u64 FilePoint; // ファイルポインタ + +public: + DXArchiveFile_VER6(DARC_FILEHEAD_VER6* FileHead, DXArchive_VER6* Archive); + ~DXArchiveFile_VER6(); + + s64 Read(void* Buffer, s64 ReadLength); // ファイルの内容を読み込む + s64 Seek(s64 SeekPoint, s64 SeekMode); // ファイルポインタを変更する + s64 Tell(void); // 現在のファイルポインタを得る + s64 Eof(void); // ファイルの終端に来ているか、のフラグを得る + s64 Size(void); // ファイルのサイズを取得する + + inline DARC_FILEHEAD_VER6* GetFileData(void) { return FileData; } +}; + +#endif + diff --git a/src/WolfDec/3rdParty/DataType.h b/src/WolfDec/3rdParty/DataType.h index 50976e3..fd0e730 100644 --- a/src/WolfDec/3rdParty/DataType.h +++ b/src/WolfDec/3rdParty/DataType.h @@ -8,8 +8,8 @@ // // ============================================================================ -#ifndef __DATA_TYPE -#define __DATA_TYPE +#ifndef DATA_TYPE_H +#define DATA_TYPE_H #ifndef u64 #define u64 unsigned __int64 diff --git a/src/WolfDec/3rdParty/FileLib.cpp b/src/WolfDec/3rdParty/FileLib.cpp index ee8a6b1..a0029b3 100644 --- a/src/WolfDec/3rdParty/FileLib.cpp +++ b/src/WolfDec/3rdParty/FileLib.cpp @@ -16,7 +16,7 @@ // define --------------------------------------- -#define PATH_LENGTH (256) // パスバッファの長さ +#define PATH_LENGTH (2048) // パスバッファの長さ #define TEXTCHECKSIZE (0x2000) // テキストデータか調べるサイズ // data type ------------------------------------ @@ -55,28 +55,58 @@ unsigned char Char128ToBinTable[ 256 ] = 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, } ; +unsigned char BinToBase64Table[ 64 ] = +{ + 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, + 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, + 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, + 0x77, 0x78, 0x79, 0x7A, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x2B, 0x2F +} ; + +unsigned char Base64ToBinTable[ 256 ] = +{ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x3F, + 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, + 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, + 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +} ; + // function proto type -------------------------- // ファイルオブジェクト列挙用関数( -1:エラー 0以上:ファイルの数 ) // flist は NULL でも良い -static int __EnumObject(TCHAR *Path, TCHAR *CurrentPath, FILE_INFOLIST *FileList, - int OmitDirectory, int SubDirectory, - TCHAR **OmitName, TCHAR **OmitExName, TCHAR **ValidExName ) ; +static int __EnumObject( TCHAR *Path, TCHAR *CurrentPath, FILE_INFOLIST *FileList, + int OmitDirectory, int SubDirectory, + TCHAR **OmitName, TCHAR **OmitExName, TCHAR **ValidExName, int *TotalFileNumCounter, int TotalFileNum, + void ( *EnumFileCallback )( int Phase, int NowFileNum, int TotalFileNum, const TCHAR *FileName, const TCHAR *RelDirPath, const TCHAR *AbsDirPath ) ) ; // function code -------------------------------- // ファイルオブジェクト列挙用関数( -1:エラー 0以上:ファイルの数 ) // flist は NULL でも良い -static int __EnumObject(TCHAR *Path, TCHAR *CurrentPath, FILE_INFOLIST *FileList, - int OmitDirectory, int SubDirectory, - TCHAR **OmitName, TCHAR **OmitExName, TCHAR **ValidExName ) +static int __EnumObject( TCHAR *Path, TCHAR *CurrentPath, FILE_INFOLIST *FileList, + int OmitDirectory, int SubDirectory, + TCHAR **OmitName, TCHAR **OmitExName, TCHAR **ValidExName, int *TotalFileNumCounter, int TotalFileNum, + void ( *EnumFileCallback )( int Phase, int NowFileNum, int TotalFileNum, const TCHAR *FileName, const TCHAR *RelDirPath, const TCHAR *AbsDirPath ) ) { WIN32_FIND_DATA FindData ; HANDLE FindHandle = INVALID_HANDLE_VALUE ; int FileNum, IsDirectory ; TCHAR RelDir[PATH_LENGTH] ; TCHAR *AbsDir ; - int RelDirLen, AbsDirLen, StartNum = 0 ; + int RelDirLen, AbsDirLen, StartNum ; // ディレクトリパスの作成 AbsDir = Path ; @@ -89,7 +119,7 @@ static int __EnumObject(TCHAR *Path, TCHAR *CurrentPath, FILE_INFOLIST *FileList TCHAR temp[PATH_LENGTH] ; _tcscpy( temp, AbsDir ) ; - _tcscat( temp, TEXT("*") ) ; + _tcscat( temp, TEXT( "*" ) ) ; FindHandle = FindFirstFile( temp, &FindData ) ; if( FindHandle == INVALID_HANDLE_VALUE ) return -1 ; @@ -101,7 +131,7 @@ static int __EnumObject(TCHAR *Path, TCHAR *CurrentPath, FILE_INFOLIST *FileList do { // 上のフォルダに戻ったりするためのパスは無視する - if( _tcscmp( FindData.cFileName, TEXT(".") ) == 0 || _tcscmp( FindData.cFileName, TEXT("..") ) == 0 ) continue ; + if( _tcscmp( FindData.cFileName, TEXT( "." ) ) == 0 || _tcscmp( FindData.cFileName, TEXT( ".." ) ) == 0 ) continue ; // ディレクトリかどうかを得る IsDirectory = ( FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) != 0 ? 1 : 0 ; @@ -110,10 +140,10 @@ static int __EnumObject(TCHAR *Path, TCHAR *CurrentPath, FILE_INFOLIST *FileList if( ValidExName != NULL && IsDirectory == 0 ) { int i ; - TCHAR *name ; + const TCHAR *name ; - name = _tcschr( FindData.cFileName, '.' ) ; - if( name == NULL ); + name = _tcschr( FindData.cFileName, TEXT( '.' ) ) ; + if( name == NULL ) name = TEXT( "" ) ; else name ++ ; for( i = 0 ; ValidExName[i] != NULL && _tcsicmp( name, ValidExName[i] ) != 0 ; i ++ ){} @@ -133,10 +163,10 @@ static int __EnumObject(TCHAR *Path, TCHAR *CurrentPath, FILE_INFOLIST *FileList if( OmitExName != NULL && IsDirectory == 0 ) { int i ; - TCHAR *name ; + const TCHAR *name ; - name = _tcschr( FindData.cFileName, '.' ) ; - if( name == NULL ); + name = _tcschr( FindData.cFileName, TEXT( '.' ) ) ; + if( name == NULL ) name = TEXT( "" ) ; else name ++ ; for( i = 0 ; OmitExName[i] != NULL && _tcscmp( name, OmitExName[i] ) != 0 ; i ++ ){} @@ -152,20 +182,25 @@ static int __EnumObject(TCHAR *Path, TCHAR *CurrentPath, FILE_INFOLIST *FileList // 絶対パスの作成 _tcscpy( tempAbs, AbsDir ) ; _tcscat( tempAbs, FindData.cFileName ) ; - _tcscat( tempAbs, TEXT("\\") ) ; + _tcscat( tempAbs, TEXT( "\\" ) ) ; // 相対パスの作成 _tcscpy( tempRel, RelDir ) ; _tcscat( tempRel, FindData.cFileName ) ; - _tcscat( tempRel, TEXT("\\") ) ; + _tcscat( tempRel, TEXT( "\\" ) ) ; // 列挙 - res = __EnumObject( tempAbs, CurrentPath, FileList, OmitDirectory, SubDirectory, OmitName, OmitExName, ValidExName ) ; + res = __EnumObject( tempAbs, CurrentPath, FileList, OmitDirectory, SubDirectory, OmitName, OmitExName, ValidExName, TotalFileNumCounter, TotalFileNum, EnumFileCallback ) ; if( res < 0 ) goto ERR ; FileNum += res ; } + if( EnumFileCallback != 0 ) + { + EnumFileCallback( FileList == NULL ? 0 : 1, *TotalFileNumCounter, TotalFileNum, FindData.cFileName, RelDir, AbsDir ) ; + } + // データを格納することが出来る場合はデータを格納する if( FileList != NULL && ( IsDirectory == 0 || ( IsDirectory == 1 && OmitDirectory == 0 ) ) ) @@ -181,7 +216,7 @@ static int __EnumObject(TCHAR *Path, TCHAR *CurrentPath, FILE_INFOLIST *FileList info->Date.LastAccess = ( ( ( LONGLONG )FindData.ftLastAccessTime .dwHighDateTime ) << 32 ) + FindData.ftLastAccessTime .dwLowDateTime ; info->Date.LastWrite = ( ( ( LONGLONG )FindData.ftLastWriteTime .dwHighDateTime ) << 32 ) + FindData.ftLastWriteTime .dwLowDateTime ; - info->Size = FindData.nFileSizeLow ; // サイズを保存 + info->Size = ( u64 )FindData.nFileSizeLow | ( ( ( u64 )FindData.nFileSizeHigh ) << 32 ) ; // サイズを保存 info->Attributes = FindData.dwFileAttributes ; // 属性を保存 info->IsDirectory = (u8)IsDirectory ; @@ -189,7 +224,7 @@ static int __EnumObject(TCHAR *Path, TCHAR *CurrentPath, FILE_INFOLIST *FileList { // パス系を保存するメモリ領域の確保 FileNameLen = ( int )_tcslen( FindData.cFileName ) ; - info->FileName = (TCHAR * )calloc( ( FileNameLen + 1 ) + ( AbsDirLen + 1 ) + ( RelDirLen + 1 ), sizeof(TCHAR) ) ; + info->FileName = ( TCHAR * )malloc( sizeof( TCHAR ) * ( ( FileNameLen + 1 ) + ( AbsDirLen + 1 ) + ( RelDirLen + 1 ) ) ) ; if( info->FileName == NULL ) goto ERR ; info->RelDirectoryPath = info->FileName + FileNameLen + 1 ; @@ -199,6 +234,9 @@ static int __EnumObject(TCHAR *Path, TCHAR *CurrentPath, FILE_INFOLIST *FileList _tcscpy( info->FileName, FindData.cFileName ) ; _tcscpy( info->RelDirectoryPath, RelDir ) ; _tcscpy( info->AbsDirectoryPath, AbsDir ) ; + + // ハッシュ値を計算 + info->FileNameHash = FileLib_HashCRC32( info->FileName, FileNameLen * sizeof( TCHAR ) ) ; } // ファイルの数を増やす @@ -207,6 +245,7 @@ static int __EnumObject(TCHAR *Path, TCHAR *CurrentPath, FILE_INFOLIST *FileList // ファイルの数を増やす FileNum ++ ; + *TotalFileNumCounter += 1 ; } while( FindNextFile( FindHandle, &FindData ) != 0 ) ; @@ -462,36 +501,147 @@ extern unsigned int Char128ToBin( void *Src, void *Dest ) return DestSize ; } +// バイナリデータをBase64文字列に変換する( 戻り値:変換後のデータサイズ ) +extern unsigned int BinToBase64( void *Src, unsigned int SrcSize, void *Dest ) +{ + unsigned int DestSize ; + unsigned int ModNum ; + unsigned int PackNum ; + + PackNum = SrcSize / 3 ; + ModNum = SrcSize - PackNum * 3 ; + DestSize = PackNum * 4 + ( ModNum > 0 ? ModNum + 1 : 0 ) + 6 ; + + if( Dest != NULL ) + { + unsigned char *DestP ; + unsigned char *SrcP ; + unsigned int i ; + + DestP = ( unsigned char * )Dest ; + SrcP = ( unsigned char * )&SrcSize ; + + DestP[ 0 ] = BinToBase64Table[ ( SrcP[ 0 ] >> 2 ) ] ; + DestP[ 1 ] = BinToBase64Table[ ( ( SrcP[ 0 ] & 0x03 ) << 4 ) | ( SrcP[ 1 ] >> 4 ) ] ; + DestP[ 2 ] = BinToBase64Table[ ( ( SrcP[ 1 ] & 0x0f ) << 2 ) | ( SrcP[ 2 ] >> 6 ) ] ; + DestP[ 3 ] = BinToBase64Table[ ( ( SrcP[ 2 ] & 0x3f ) ) ] ; + DestP[ 4 ] = BinToBase64Table[ ( SrcP[ 3 ] >> 2 ) ] ; + DestP[ 5 ] = BinToBase64Table[ ( ( SrcP[ 3 ] & 0x03 ) << 4 ) ] ; + + DestP += 6 ; + + SrcP = ( unsigned char * )Src ; + for( i = 0 ; i < PackNum ; i ++ ) + { + DestP[ 0 ] = BinToBase64Table[ ( SrcP[ 0 ] >> 2 ) ] ; + DestP[ 1 ] = BinToBase64Table[ ( ( SrcP[ 0 ] & 0x03 ) << 4 ) | ( SrcP[ 1 ] >> 4 ) ] ; + DestP[ 2 ] = BinToBase64Table[ ( ( SrcP[ 1 ] & 0x0f ) << 2 ) | ( SrcP[ 2 ] >> 6 ) ] ; + DestP[ 3 ] = BinToBase64Table[ ( ( SrcP[ 2 ] & 0x3f ) ) ] ; + + DestP += 4 ; + SrcP += 3 ; + } + + if( ModNum != 0 ) + { + DestP[ 0 ] = BinToBase64Table[ ( SrcP[ 0 ] >> 2 ) ] ; + if( ModNum == 1 ) + { + DestP[ 1 ] = BinToBase64Table[ ( ( SrcP[ 0 ] & 0x03 ) << 4 ) ] ; + DestP += 2 ; + } + else + { + DestP[ 1 ] = BinToBase64Table[ ( ( SrcP[ 0 ] & 0x03 ) << 4 ) | ( SrcP[ 1 ] >> 4 ) ] ; + DestP[ 2 ] = BinToBase64Table[ ( ( SrcP[ 1 ] & 0x0f ) << 2 ) ] ; + DestP += 3 ; + } + } + } + + return DestSize ; +} + +// Base64文字列をバイナリデータに変換する( 戻り値:変換後のデータサイズ ) +extern unsigned int Base64ToBin( void *Src, void *Dest ) +{ + unsigned int DestSize ; + unsigned char *SrcP ; + unsigned char *DestP ; + + SrcP = ( unsigned char * )Src ; + DestP = ( unsigned char * )&DestSize ; + + DestP[ 0 ] = ( Base64ToBinTable[ SrcP[ 0 ] ] << 2 ) | ( Base64ToBinTable[ SrcP[ 1 ] ] >> 4 ) ; + DestP[ 1 ] = ( Base64ToBinTable[ SrcP[ 1 ] ] << 4 ) | ( Base64ToBinTable[ SrcP[ 2 ] ] >> 2 ) ; + DestP[ 2 ] = ( Base64ToBinTable[ SrcP[ 2 ] ] << 6 ) | ( Base64ToBinTable[ SrcP[ 3 ] ] ) ; + DestP[ 3 ] = ( Base64ToBinTable[ SrcP[ 4 ] ] << 2 ) | ( Base64ToBinTable[ SrcP[ 5 ] ] >> 4 ) ; + + SrcP += 6 ; + + if( Dest != NULL ) + { + unsigned int PackNum ; + unsigned int ModNum ; + unsigned int i ; + + PackNum = DestSize / 3 ; + ModNum = DestSize - PackNum * 3 ; + DestP = ( unsigned char * )Dest ; + for( i = 0 ; i < PackNum ; i ++ ) + { + DestP[ 0 ] = ( Base64ToBinTable[ SrcP[ 0 ] ] << 2 ) | ( Base64ToBinTable[ SrcP[ 1 ] ] >> 4 ) ; + DestP[ 1 ] = ( Base64ToBinTable[ SrcP[ 1 ] ] << 4 ) | ( Base64ToBinTable[ SrcP[ 2 ] ] >> 2 ) ; + DestP[ 2 ] = ( Base64ToBinTable[ SrcP[ 2 ] ] << 6 ) | ( Base64ToBinTable[ SrcP[ 3 ] ] ) ; + + DestP += 3 ; + SrcP += 4 ; + } + + if( ModNum != 0 ) + { + DestP[ 0 ] = ( Base64ToBinTable[ SrcP[ 0 ] ] << 2 ) | ( Base64ToBinTable[ SrcP[ 1 ] ] >> 4 ) ; + if( ModNum > 1 ) + { + DestP[ 1 ] = ( Base64ToBinTable[ SrcP[ 1 ] ] << 4 ) | ( Base64ToBinTable[ SrcP[ 2 ] ] >> 2 ) ; + if( ModNum > 2 ) + { + DestP[ 2 ] = ( Base64ToBinTable[ SrcP[ 2 ] ] << 6 ) | ( Base64ToBinTable[ SrcP[ 3 ] ] ) ; + } + } + } + } + + return DestSize ; +} + // ファイルの内容をメモリに読み込む( 0:成功 -1:失敗 ) -extern int LoadFileMem( const TCHAR *Path, void **DataBuf, int *Size ) +extern int LoadFileMem( const TCHAR *Path, void **DataBuf, size_t *Size ) { FILE *fp = NULL ; void *buf = NULL ; - int size ; + __int64 size ; - fp = _tfopen( Path, TEXT("rb") ) ; + fp = _tfopen( Path, TEXT( "rb" ) ) ; if( fp == NULL ) goto ERR ; // サイズを得る fseek( fp, 0L, SEEK_END ) ; - size = ftell( fp ) ; + size = _ftelli64( fp ) ; + if( size == 0 ) goto ERR ; fseek( fp, 0L, SEEK_SET ) ; // メモリの確保 - buf = malloc( size ) ; + buf = malloc( ( size_t )size ) ; if( buf == NULL ) goto ERR ; // 読み込み - fread( buf, size, 1, fp ) ; + fread( buf, ( size_t )size, 1, fp ) ; fclose( fp ) ; // セット - if(DataBuf != NULL) - *DataBuf = buf; - else - free(buf); - - if( Size != NULL ) *Size = size ; + if( DataBuf != NULL ) *DataBuf = buf ; + if( Size != NULL ) *Size = ( size_t )size ; // 終了 return 0 ; @@ -504,37 +654,39 @@ ERR : } // ファイルの内容をメモリに読み込む( 0:成功 -1:失敗 ) -extern int LoadFileMem( const TCHAR *Path, void *DataBuf, int *Size ) +extern int LoadFileMem( const TCHAR *Path, void *DataBuf, size_t *Size ) { FILE *fp = NULL ; - int size ; + __int64 size ; - fp = _tfopen( Path, TEXT("rb") ) ; + fp = _tfopen( Path, TEXT( "rb" ) ) ; if( fp == NULL ) return -1; // サイズを得る fseek( fp, 0L, SEEK_END ) ; - size = ftell( fp ) ; + size = _ftelli64( fp ) ; fseek( fp, 0L, SEEK_SET ) ; // 読み込み if( DataBuf ) - fread( DataBuf, size, 1, fp ) ; + { + fread( DataBuf, ( size_t )size, 1, fp ) ; + } fclose( fp ) ; // セット - if( Size != NULL ) *Size = size ; + if( Size != NULL ) *Size = ( size_t )size ; // 終了 return 0 ; } // メモリの内容をファイルに書き出す -extern int SaveFileMem( const TCHAR *Path, void *Data, int Size ) +extern int SaveFileMem( const TCHAR *Path, void *Data, size_t Size ) { FILE *fp ; - fp = _tfopen( Path, TEXT("wb") ) ; + fp = _tfopen( Path, TEXT( "wb" ) ) ; if( fp == NULL ) return -1 ; fwrite( Data, Size, 1, fp ) ; fclose( fp ) ; @@ -570,14 +722,14 @@ extern int __CreateDirectory( const TCHAR *Path ) // ディレクトリを作成するループ { TCHAR *p ; - p = _tcschr( dir, '\\' ) ; + p = _tcschr( dir, TEXT( '\\' ) ) ; while( p != NULL ) { *p = '\0' ; CreateDirectory( dir, NULL ) ; *p = '\\' ; - p = _tcschr( p + 1, '\\' ) ; + p = _tcschr( p + 1, TEXT( '\\' ) ) ; } } @@ -616,8 +768,8 @@ extern int CreateFileInfo( const TCHAR *Path, FILE_INFO *FileInfoBuffer ) // ディレクトリパスの作成 { ConvertFullPath__( Path, AbsDir ) ; - DelChr( AbsDir, '\\' ) ; - _tcsrchr( AbsDir, '\\' )[1] = '\0' ; + DelChr( AbsDir, TEXT( '\\' ) ) ; + _tcsrchr( AbsDir, TEXT( '\\' ) )[1] = TEXT( '\0' ) ; AbsDirLen = ( int )_tcslen( AbsDir ) ; RelDir[0] = '\0' ; RelDirLen = 0 ; @@ -646,7 +798,7 @@ extern int CreateFileInfo( const TCHAR *Path, FILE_INFO *FileInfoBuffer ) // パス系を保存するメモリ領域の確保 FileNameLen = ( int )_tcslen( FindData.cFileName ) ; - info->FileName = (TCHAR * )calloc( ( FileNameLen + 1 ) + ( AbsDirLen + 1 ) + ( RelDirLen + 1 ), sizeof(TCHAR) ) ; + info->FileName = ( TCHAR * )malloc( sizeof( TCHAR ) * ( ( FileNameLen + 1 ) + ( AbsDirLen + 1 ) + ( RelDirLen + 1 ) ) ) ; if( info->FileName == NULL ) return -1 ; info->RelDirectoryPath = info->FileName + FileNameLen + 1 ; info->AbsDirectoryPath = info->RelDirectoryPath + RelDirLen + 1 ; @@ -720,12 +872,15 @@ extern int CmpFileTimeStamp( FILE_INFO *FileInfo1, FILE_INFO *FileInfo2, bool Cr // 戻り値 : -1 = エラー 0以上 = 列挙したファイルの数 extern int CreateFileList( const TCHAR *DirectoryPath, FILE_INFOLIST *FileListInfo, int OmitDirectory, int SubDirectory, - const TCHAR *OmitName, const TCHAR *OmitExName, const TCHAR *ValidExName ) + const TCHAR *OmitName, const TCHAR *OmitExName, const TCHAR *ValidExName, + void ( *EnumFileCallback )( int Phase, int NowFileNum, int TotalFileNum, const TCHAR *FileName, const TCHAR *RelDirPath, const TCHAR *AbsDirPath ) ) { TCHAR DirPath[PATH_LENGTH] ; FILE_INFOLIST FileList ; TCHAR *OmitStrBuf = NULL, *OmitExStrBuf = NULL, *ValidExStrBuf = NULL ; TCHAR *OmitStr[50], *OmitExStr[50], *ValidExStr[100] ; + int TotalFileNum ; + int TotalFileNumCounter ; // フルパスを得る ConvertFullPath__( DirectoryPath, DirPath, NULL ) ; @@ -755,11 +910,11 @@ extern int CreateFileList( const TCHAR *DirectoryPath, FILE_INFOLIST *FileListIn // 初期化 FileList.Num = 0 ; FileList.List = NULL ; - OmitStrBuf = (TCHAR * )calloc( 1024, sizeof(TCHAR)) ; + OmitStrBuf = ( TCHAR * )malloc( sizeof( TCHAR ) * 2048 ) ; if( OmitStrBuf == NULL ) goto ERR ; - OmitExStrBuf = (TCHAR * )calloc( 1024, sizeof(TCHAR)) ; + OmitExStrBuf = ( TCHAR * )malloc( sizeof( TCHAR ) * 2048 ) ; if( OmitExStrBuf == NULL ) goto ERR ; - ValidExStrBuf = (TCHAR * )calloc( 1024, sizeof(TCHAR) ) ; + ValidExStrBuf = ( TCHAR * )malloc( sizeof( TCHAR ) * 2048 ) ; if( ValidExStrBuf == NULL ) goto ERR ; // 除外文字列リストの作成 @@ -773,9 +928,9 @@ extern int CreateFileList( const TCHAR *DirectoryPath, FILE_INFOLIST *FileListIn p = OmitStrBuf ; OmitStr[i] = p ; i ++ ; - while( ( p = _tcschr( p, ';' ) ) != NULL ) + while( ( p = _tcschr( p, TEXT( ';' ) ) ) != NULL ) { - *p = '\0' ; + *p = TEXT( '\0' ) ; p ++ ; OmitStr[i] = p ; i ++ ; @@ -795,9 +950,9 @@ extern int CreateFileList( const TCHAR *DirectoryPath, FILE_INFOLIST *FileListIn p = OmitExStrBuf ; OmitExStr[i] = p ; i ++ ; - while( ( p = _tcschr( p, ';' ) ) != NULL ) + while( ( p = _tcschr( p, TEXT( ';' ) ) ) != NULL ) { - *p = '\0' ; + *p = TEXT( '\0' ) ; p ++ ; OmitExStr[i] = p ; i ++ ; @@ -817,9 +972,9 @@ extern int CreateFileList( const TCHAR *DirectoryPath, FILE_INFOLIST *FileListIn p = ValidExStrBuf ; ValidExStr[i] = p ; i ++ ; - while( ( p = _tcschr( p, ';' ) ) != NULL ) + while( ( p = _tcschr( p, TEXT( ';' ) ) ) != NULL ) { - *p = '\0' ; + *p = TEXT( '\0' ) ; p ++ ; ValidExStr[i] = p ; i ++ ; @@ -829,9 +984,11 @@ extern int CreateFileList( const TCHAR *DirectoryPath, FILE_INFOLIST *FileListIn else ValidExStr[0] = NULL ; // 列挙用関数に投げてファイルの数を得る - FileList.Num = __EnumObject( DirPath, DirPath, NULL, OmitDirectory, SubDirectory, OmitStr, OmitExStr, ValidExStr[0] != NULL ? ValidExStr : NULL ) ; + TotalFileNumCounter = 0 ; + FileList.Num = __EnumObject( DirPath, DirPath, NULL, OmitDirectory, SubDirectory, OmitStr, OmitExStr, ValidExStr[0] != NULL ? ValidExStr : NULL, &TotalFileNumCounter, 0, EnumFileCallback ) ; if( FileList.Num < 0 ) goto ERR ; + TotalFileNum = TotalFileNumCounter ; // ファイルリストのデータが格納できるメモリ領域を確保 FileList.List = ( FILE_INFO * )malloc( FileList.Num * sizeof( FILE_INFO ) ) ; @@ -840,8 +997,9 @@ extern int CreateFileList( const TCHAR *DirectoryPath, FILE_INFOLIST *FileListIn memset( FileList.List, 0, FileList.Num * sizeof( FILE_INFO ) ) ; // ファイルリストにデータを格納する + TotalFileNumCounter = 0 ; FileList.Num = 0 ; - if( __EnumObject( DirPath, DirPath, &FileList, OmitDirectory, SubDirectory, OmitStr, OmitExStr, ValidExStr[0] != NULL ? ValidExStr : NULL ) < 0 ) + if( __EnumObject( DirPath, DirPath, &FileList, OmitDirectory, SubDirectory, OmitStr, OmitExStr, ValidExStr[0] != NULL ? ValidExStr : NULL, &TotalFileNumCounter, TotalFileNum, EnumFileCallback ) < 0 ) goto ERR ; // データを格納 @@ -899,7 +1057,7 @@ extern int AnalyseFilePath( const TCHAR *Src, TCHAR *FullPath, TCHAR *DirPath, TCHAR *FileName, TCHAR *Name, TCHAR *ExeName, const TCHAR *CurrentDir ) { - TCHAR full[256], dir[256], fname[256], name[256], exename[256]; + TCHAR full[1124], dir[1124], fname[1124], name[1124], exename[1124]; ConvertFullPath__( Src, full, CurrentDir ); AnalysisFileNameAndDirPath( full, fname, dir ); @@ -919,11 +1077,11 @@ extern int AnalyseFilePath( extern int ConvertFullPath__( const TCHAR *Src, TCHAR *Dest, const TCHAR *CurrentDir ) { int i, j, k ; - TCHAR iden[256], cur[MAX_PATH] ; + TCHAR iden[512], cur[1024] ; if( CurrentDir == NULL ) { - GetCurrentDirectory( MAX_PATH, cur ) ; + GetCurrentDirectory( 1024, cur ) ; CurrentDir = cur ; } @@ -938,47 +1096,47 @@ extern int ConvertFullPath__( const TCHAR *Src, TCHAR *Dest, const TCHAR *Curren k = 0 ; // 最初に『\』又は『/』が2回連続で続いている場合はネットワークを介していると判断 - if( ( Src[0] == '\\' && Src[1] == '\\' ) || - ( Src[0] == '/' && Src[1] == '/' ) ) + if( ( Src[0] == TEXT( '\\' ) && Src[1] == TEXT( '\\' ) ) || + ( Src[0] == TEXT( '/' ) && Src[1] == TEXT( '/' ) ) ) { - Dest[0] = '\\'; - Dest[1] = '\0'; + Dest[0] = TEXT( '\\' ); + Dest[1] = TEXT( '\0' ); i += 2; j ++ ; } else // 最初が『\』又は『/』の場合はカレントドライブのルートディレクトリまで落ちる - if( Src[0] == '\\' ) + if( Src[0] == TEXT( '\\' ) ) { Dest[0] = CurrentDir[0] ; Dest[1] = CurrentDir[1] ; - Dest[2] = '\0' ; + Dest[2] = TEXT( '\0' ) ; i ++ ; j = 2 ; } else // ドライブ名が書かれていたらそのドライブへ - if( Src[1] == ':' ) + if( Src[1] == TEXT( ':' ) ) { Dest[0] = Src[0] ; Dest[1] = Src[1] ; - Dest[2] = '\0' ; + Dest[2] = TEXT( '\0' ) ; i = 2 ; j = 2 ; - if( Src[i] == '\\' ) i ++ ; + if( Src[i] == TEXT( '\\' ) ) i ++ ; } else // それ以外の場合はカレントディレクトリ { _tcscpy( Dest, CurrentDir ) ; j = ( int )_tcslen( Dest ) ; - if( Dest[j-1] == '\\' || Dest[j-1] == '/' ) + if( Dest[j-1] == TEXT( '\\' ) || Dest[j-1] == TEXT( '/' ) ) { - Dest[j-1] = '\0' ; + Dest[j-1] = TEXT( '\0' ) ; j -- ; } } @@ -987,40 +1145,40 @@ extern int ConvertFullPath__( const TCHAR *Src, TCHAR *Dest, const TCHAR *Curren { switch( Src[i] ) { - case '\0' : + case TEXT( '\0' ) : if( k != 0 ) { - Dest[j] = '\\' ; j ++ ; + Dest[j] = TEXT( '\\' ) ; j ++ ; _tcscpy( &Dest[j], iden ) ; j += k ; k = 0 ; } goto END ; - case '\\' : - case '/' : + case TEXT( '\\' ) : + case TEXT( '/' ) : // 文字列が無かったらスキップ if( k == 0 ) { i ++ ; break; } - if( _tcscmp( iden, TEXT(".") ) == 0 ) + if( _tcscmp( iden, TEXT( "." ) ) == 0 ) { // なにもしない } else - if( _tcscmp( iden, TEXT("..") ) == 0 ) + if( _tcscmp( iden, TEXT( ".." ) ) == 0 ) { // 一つ下のディレクトリへ j -- ; - while( Dest[j] != '\\' && Dest[j] != '/' && Dest[j] != ':' ) j -- ; - if( Dest[j] != ':' ) Dest[j] = '\0' ; + while( Dest[j] != TEXT( '\\' ) && Dest[j] != TEXT( '/' ) && Dest[j] != TEXT( ':' ) ) j -- ; + if( Dest[j] != TEXT( ':' ) ) Dest[j] = TEXT( '\0' ) ; else j ++ ; } else { - Dest[j] = '\\' ; j ++ ; + Dest[j] = TEXT( '\\' ) ; j ++ ; _tcscpy( &Dest[j], iden ) ; j += k ; } @@ -1030,6 +1188,12 @@ extern int ConvertFullPath__( const TCHAR *Src, TCHAR *Dest, const TCHAR *Curren break ; default : +#ifdef _UNICODE + iden[k] = Src[i] ; + iden[k+1] = 0 ; + k ++ ; + i ++ ; +#else // _UNICODE if( _mbsbtype( ( const unsigned char * )&Src[i], 0 ) == 0/*(_MBC_SINGLE)*/ ) { iden[k] = Src[i] ; @@ -1040,10 +1204,11 @@ extern int ConvertFullPath__( const TCHAR *Src, TCHAR *Dest, const TCHAR *Curren else { *(( unsigned short * )&iden[k] ) = *(( unsigned short * )&Src[i] ) ; - iden[k+1] = '\0' ; - k ++ ; - i ++ ; + iden[k+2] = '\0' ; + k += 2 ; + i += 2 ; } +#endif // _UNICODE break ; } } @@ -1062,8 +1227,12 @@ extern int AnalysisFileNameAndDirPath( const TCHAR *Src, TCHAR *FileName, TCHAR // ファイル名を抜き出す i = 0 ; Last = -1 ; - while( Src[i] != '\0' ) + while( Src[i] != TEXT( '\0' ) ) { +#ifdef _UNICODE + if( Src[i] == TEXT( '\\' ) || Src[i] == TEXT( '/' ) || Src[i] == TEXT( '\0' ) || Src[i] == TEXT( ':' ) ) Last = i ; + i ++ ; +#else // _UNICODE if( _mbsbtype( ( const unsigned char * )&Src[i], 0 ) == 0/*(_MBC_SINGLE)*/ ) { if( Src[i] == '\\' || Src[i] == '/' || Src[i] == '\0' || Src[i] == ':' ) Last = i ; @@ -1073,6 +1242,7 @@ extern int AnalysisFileNameAndDirPath( const TCHAR *Src, TCHAR *FileName, TCHAR { i += 2 ; } +#endif // _UNICODE } if( FileName != NULL ) { @@ -1086,11 +1256,11 @@ extern int AnalysisFileNameAndDirPath( const TCHAR *Src, TCHAR *FileName, TCHAR if( Last != -1 ) { _tcsncpy( DirPath, Src, Last ) ; - DirPath[Last] = '\0' ; + DirPath[Last] = TEXT( '\0' ) ; } else { - DirPath[0] = '\0' ; + DirPath[0] = TEXT( '\0' ) ; } } @@ -1101,21 +1271,21 @@ extern int AnalysisFileNameAndDirPath( const TCHAR *Src, TCHAR *FileName, TCHAR // ファイルパスからファイル名と拡張子を取得する extern int AnalysisFileNameAndExeName( const TCHAR *Src, TCHAR *Name, TCHAR *ExeName ) { - TCHAR FileName[256], *p, ename[128], name[128] ; + TCHAR FileName[256], *p, ename[256], name[256] ; // ファイル名のみを取得 AnalysisFileNameAndDirPath( Src, FileName, 0 ) ; // 『.』があるかどうかで処理を分岐 - if( ( p = _tcsrchr( FileName, '.' ) ) == NULL ) + if( ( p = _tcsrchr( FileName, TEXT( '.' ) ) ) == NULL ) { _tcscpy( name, FileName ) ; - ename[0] = '\0' ; + ename[0] = TEXT( '\0' ) ; } else { _tcsncpy( name, FileName, p - FileName ) ; - name[p - FileName] = '\0' ; + name[p - FileName] = TEXT( '\0' ) ; _tcscpy( ename, p + 1 ) ; } @@ -1129,50 +1299,50 @@ extern int AnalysisFileNameAndExeName( const TCHAR *Src, TCHAR *Name, TCHAR *Exe // ファイルパスの拡張子を変えた文字列を得る extern int GetChangeExeNamePath( const TCHAR *Src, TCHAR *Dest, const TCHAR *ExeName ) { - TCHAR DirPath[256], FileName[128] ; + TCHAR DirPath[1024], FileName[1024] ; AnalysisFileNameAndDirPath( Src, NULL, DirPath ) ; AnalysisFileNameAndExeName( Src, FileName, 0 ) ; SetEnMark( DirPath ) ; - _stprintf( Dest, TEXT("%s%s.%s"), DirPath, FileName, ExeName ) ; - + _stprintf( Dest, TEXT( "%s%s.%s" ), DirPath, FileName, ExeName ) ; + // 終了 return 0 ; } // 語尾に『\』がついていない場合は付ける -extern void SetEnMark(TCHAR *PathBuf ) +extern void SetEnMark( TCHAR *PathBuf ) { int Len = ( int )_tcslen( PathBuf ) ; - if( PathBuf[Len-1] != '\\' ) + if( PathBuf[Len-1] != TEXT( '\\' ) ) { - PathBuf[Len] = '\\' ; - PathBuf[Len+1] = '\0' ; + PathBuf[Len] = TEXT( '\\' ) ; + PathBuf[Len+1] = TEXT( '\0' ) ; } } // 語尾に指定の文字がない場合はつける -extern void SetChr(TCHAR *PathBuf, char chr ) +extern void SetChr( TCHAR *PathBuf, TCHAR chr ) { int Len = ( int )_tcslen( PathBuf ) ; if( PathBuf[Len-1] != chr ) { PathBuf[Len] = chr ; - PathBuf[Len+1] = '\0' ; + PathBuf[Len+1] = TEXT( '\0' ) ; } } // 語尾に指定の文字がある場合は削除する -extern void DelChr( TCHAR *PathBuf, char chr ) +extern void DelChr( TCHAR *PathBuf, TCHAR chr ) { int Len = ( int )_tcslen( PathBuf ) ; if( PathBuf[Len-1] == chr ) { - PathBuf[Len-1] = '\0' ; + PathBuf[Len-1] = TEXT( '\0' ) ; } } @@ -1183,8 +1353,8 @@ extern int GetExName( const TCHAR *Path, TCHAR *ExNameBuf ) TCHAR *p ; // 一番最後に '.' が出る部分を取得する - p = _tcsrchr( (TCHAR * )Path, '.' ) ; - if( p == NULL ) ExNameBuf[0] = '\0' ; + p = _tcsrchr( ( TCHAR * )Path, TEXT( '.' ) ) ; + if( p == NULL ) ExNameBuf[0] = TEXT( '\0' ) ; else _tcscpy( ExNameBuf, p + 1 ) ; // 終了 @@ -1192,18 +1362,18 @@ extern int GetExName( const TCHAR *Path, TCHAR *ExNameBuf ) } // 拡張子を変更する -extern int SetExName( const TCHAR *Path, TCHAR *ExName, TCHAR *DestBuf ) +extern int SetExName( const TCHAR *Path, const TCHAR *ExName, TCHAR *DestBuf ) { TCHAR *p ; - TCHAR tempstr[256] ; + TCHAR tempstr[1024] ; _tcscpy( tempstr, Path ) ; // 一番最後に '.' が出る部分を取得する - p = _tcsrchr( tempstr, '.' ) ; + p = _tcsrchr( tempstr, TEXT( '.' ) ) ; if( p == NULL ) { - _stprintf( DestBuf, TEXT("%s.%s"), tempstr, ExName ) ; + _stprintf( DestBuf, TEXT( "%s.%s" ), tempstr, ExName ) ; } else { @@ -1287,7 +1457,7 @@ extern int CheckTextFile( const TCHAR *Path ) int size, res ; FILE *fp ; - fp = _tfopen( Path, TEXT("rb") ) ; + fp = _tfopen( Path, TEXT( "rb" ) ) ; if( fp == NULL ) return -1 ; fseek( fp, 0L, SEEK_END ) ; @@ -1314,11 +1484,52 @@ extern int CheckTextFile( const TCHAR *Path ) } // 2バイト文字か調べる( TRUE:2バイト文字 FALSE:1バイト文字 ) -extern int CheckMultiByteChar(TCHAR *Buf ) +extern int CheckMultiByteChar( char *Buf ) { return ( (unsigned char)*Buf >= 0x81 && (unsigned char)*Buf <= 0x9F ) || ( (unsigned char)*Buf >= 0xE0 && (unsigned char)*Buf <= 0xFC ) ; } +// バイナリデータを元に CRC32 のハッシュ値を計算する +extern u32 FileLib_HashCRC32( const void *SrcData, size_t SrcDataSize ) +{ + static u32 CRC32Table[ 256 ] ; + static int CRC32TableInit = 0 ; + u32 CRC = 0xffffffff ; + u8 *SrcByte = ( u8 * )SrcData ; + u32 i ; + + // テーブルが初期化されていなかったら初期化する + if( CRC32TableInit == 0 ) + { + u32 Magic = 0xedb88320 ; // 0x4c11db7 をビットレベルで順番を逆にしたものが 0xedb88320 + u32 j ; + + for( i = 0; i < 256; i++ ) + { + u32 Data = i ; + for( j = 0; j < 8; j++ ) + { + int b = ( Data & 1 ) ; + Data >>= 1 ; + if( b != 0 ) + { + Data ^= Magic ; + } + } + CRC32Table[ i ] = Data ; + } + + // テーブルを初期化したフラグを立てる + CRC32TableInit = 1 ; + } + + for( i = 0 ; i < SrcDataSize ; i ++ ) + { + CRC = CRC32Table[ ( u8 )( CRC ^ SrcByte[ i ] ) ] ^ ( CRC >> 8 ) ; + } + + return CRC ^ 0xffffffff ; +} diff --git a/src/WolfDec/3rdParty/FileLib.h b/src/WolfDec/3rdParty/FileLib.h index fe07d31..5e50cb6 100644 --- a/src/WolfDec/3rdParty/FileLib.h +++ b/src/WolfDec/3rdParty/FileLib.h @@ -7,8 +7,8 @@ // // ============================================================================ -#ifndef __FILELIB -#define __FILELIB +#ifndef FILELIB_H +#define FILELIB_H // include -------------------------------------- #include @@ -31,9 +31,10 @@ typedef struct tagFILE_DATE typedef struct tagFILE_INFO { TCHAR *FileName ; // ファイル名 + u32 FileNameHash; // ファイル名の CRC32 のハッシュ値 TCHAR *RelDirectoryPath ; // 列挙処理時のカレントディレクトリからの相対ディレクトリパス( 語尾に '\' が着いている ) TCHAR *AbsDirectoryPath ; // 絶対ディレクトリパス( 語尾に '\' が着いている ) - u32 Size ; // ファイルのサイズ(ディレクトリの場合は何も入っていない) + u64 Size ; // ファイルのサイズ(ディレクトリの場合は何も入っていない) u32 IsDirectory ; // ディレクトリか否か FILE_DATE Date ; // 日付データ u32 Attributes ; // ファイル属性 @@ -57,9 +58,12 @@ extern void EasyEncodeFileRead( void *Data, int Size, FILE *fp ) ; // デー extern unsigned int BinToChar128( void *Src, unsigned int SrcSize, void *Dest ) ; // バイナリデータを半角文字列に変換する( 戻り値:変換後のデータサイズ ) extern unsigned int Char128ToBin( void *Src, void *Dest ) ; // 半角文字列をバイナリデータに変換する( 戻り値:変換後のデータサイズ ) -extern int LoadFileMem( const TCHAR *Path, void **DataBuf, int *Size ) ; // ファイルの内容をメモリに読み込む( 0:成功 -1:失敗 ) -extern int LoadFileMem( const TCHAR *Path, void *DataBuf, int *Size ) ; // ファイルの内容をメモリに読み込む( 0:成功 -1:失敗 ) -extern int SaveFileMem( const TCHAR *Path, void *Data, int Size ) ; // メモリの内容をファイルに書き出す +extern unsigned int BinToBase64( void *Src, unsigned int SrcSize, void *Dest ) ; // バイナリデータをBase64文字列に変換する( 戻り値:変換後のデータサイズ ) +extern unsigned int Base64ToBin( void *Src, void *Dest ) ; // Base64文字列をバイナリデータに変換する( 戻り値:変換後のデータサイズ ) + +extern int LoadFileMem( const TCHAR *Path, void **DataBuf, size_t *Size ) ; // ファイルの内容をメモリに読み込む( 0:成功 -1:失敗 ) +extern int LoadFileMem( const TCHAR *Path, void *DataBuf, size_t *Size ) ; // ファイルの内容をメモリに読み込む( 0:成功 -1:失敗 ) +extern int SaveFileMem( const TCHAR *Path, void *Data, size_t Size ) ; // メモリの内容をファイルに書き出す // 指定のディレクトリを作成する、中間のディレクトリも存在しない場合は作成する // 最後尾に '\' があっても無視する @@ -86,10 +90,11 @@ extern int CmpFileTimeStamp( FILE_INFO *FileInfo1, FILE_INFO *FileInfo2, bool Cr // OmitName に除外したいファイル名を渡すとその文字列を除外してくれる( ';'で複数の文字列を連結可能 ) // OmitExName に除外したい拡張子を渡すとその拡張子を持つファイルを除外してくれる( ';'で複数の文字列を連結可能 ) // ValidExName に有効にしたい拡張子を渡すとその拡張子を持つファイルのみ列挙してくれる( Omit系よりも優先度が高い, ';'で複数の文字列を連結可能 ) +// EnumFileCallback は 1ファイルごとに呼ばれるコールバック関数、Phase は 0=ファイル数列挙中 1=ファイル情報取得中 extern int CreateFileList( const TCHAR *DirectoryPath, FILE_INFOLIST *FileListInfo = 0, int OmitDirectory = 0, int SubDirectory = 0, const TCHAR *OmitName = 0, const TCHAR *OmitExName = 0, - const TCHAR *ValidExName = 0 ) ; + const TCHAR *ValidExName = 0, void ( *EnumFileCallback )( int Phase, int NowFileNum, int TotalFileNum, const TCHAR *FileName, const TCHAR *RelDirPath, const TCHAR *AbsDirPath ) = 0 ) ; extern int ReleaseFileList( FILE_INFOLIST *DirectoryInfo ) ; // 特定のパス文字列から色々な情報を取得する @@ -116,16 +121,18 @@ extern int AnalysisFileNameAndExeName( const TCHAR *Src, TCHAR *Name = 0, TCHAR extern int GetChangeExeNamePath( const TCHAR *Src, TCHAR *Dest, const TCHAR *ExeName ) ; extern void SetEnMark( TCHAR *PathBuf ) ; // 語尾に『\』がついていない場合は付ける -extern void SetChr( TCHAR *PathBuf, char chr ) ; // 語尾に指定の文字がない場合はつける -extern void DelChr( TCHAR *PathBuf, char chr ) ; // 語尾に指定の文字がある場合は削除する +extern void SetChr( TCHAR *PathBuf, TCHAR chr ) ; // 語尾に指定の文字がない場合はつける +extern void DelChr( TCHAR *PathBuf, TCHAR chr ) ; // 語尾に指定の文字がある場合は削除する -extern int GetExName( const TCHAR *Path, TCHAR *ExNameBuf ) ; // 拡張子を得る -extern int SetExName( const TCHAR *Path, TCHAR *ExName, TCHAR *DestBuf ) ; // 拡張子を変更する +extern int GetExName( const TCHAR *Path, TCHAR *ExNameBuf ) ; // 拡張子を得る +extern int SetExName( const TCHAR *Path, const TCHAR *ExName, TCHAR *DestBuf ) ; // 拡張子を変更する -extern int CheckTextData( void *buffer, int size ) ; // テキストデータかどうかを判定する( 1:テキストデータ 0:バイナリデータ ) -extern int CheckTextFile( const TCHAR *Path ) ; // テキストファイルかどうかを判定する( 1:テキストデータ 0:バイナリデータ ) +extern int CheckTextData( void *buffer, int size ) ; // テキストデータかどうかを判定する( シフトJISファイルタイプのみ対応 )( 1:テキストデータ 0:バイナリデータ ) +extern int CheckTextFile( const TCHAR *Path ) ; // テキストファイルかどうかを判定する( シフトJISファイルタイプのみ対応 )( 1:テキストデータ 0:バイナリデータ ) // 2バイト文字か調べる( TRUE:2バイト文字 FALSE:1バイト文字 ) -extern int CheckMultiByteChar(TCHAR *Buf ) ; +extern int CheckMultiByteChar( char *Buf ) ; + +extern u32 FileLib_HashCRC32( const void *SrcData, size_t SrcDataSize ) ; // CRC32 のハッシュ値を取得する #endif diff --git a/src/WolfDec/3rdParty/Huffman.cpp b/src/WolfDec/3rdParty/Huffman.cpp new file mode 100644 index 0000000..5563737 --- /dev/null +++ b/src/WolfDec/3rdParty/Huffman.cpp @@ -0,0 +1,875 @@ +// ============================================================================ +// +// Huffman圧縮ライブラリ +// +// Huffman.cpp +// +// Creator : 山田 巧 +// Creation Date : 2018/12/16 +// +// ============================================================================ + +// include -------------------------------------- +#include "Huffman.h" +#include +#include +#include + +// data type ------------------------------------ + +// 数値ごとの出現数や算出されたエンコード後のビット列や、結合部分の情報等の構造体 +struct HUFFMAN_NODE +{ + u64 Weight ; // 出現数( 結合データでは出現数を足したモノ ) + int BitNum ; // 圧縮後のビット列のビット数( 結合データでは使わない ) + unsigned char BitArray[32] ; // 圧縮後のビット列( 結合データでは使わない ) + int Index ; // 結合データに割り当てられた参照インデックス( 0 or 1 ) + + int ParentNode ; // このデータを従えている結合データの要素配列のインデックス + int ChildNode[2] ; // このデータが結合させた2要素の要素配列インデックス( 結合データではない場合はどちらも -1 ) +} ; + +// ビット単位入出力用データ構造体 +struct BIT_STREAM +{ + u8 *Buffer ; + u64 Bytes ; + u8 Bits ; +} ; + +// 圧縮データの情報 +// 6bit 圧縮前のデータのサイズのビット数(A) - 1( 0=1ビット 63=64ビット ) +// (A)bit 圧縮前のデータのサイズ +// 6bit 圧縮後のデータのサイズのビット数(B) - 1( ヘッダ部分含まない )( 0=1ビット 63=64ビット ) +// (B)bit 圧縮後のデータのサイズ +// +// 3bit 数値ごとの出現頻度の差分値のビット数(C) / 2 - 1( 0=2ビット 7=16ビット ) +// 1bit 符号ビット( 0=プラス 1=マイナス ) +// (C)bit 数値ごとの出現頻度の差分値 +// ↑これが256個ある + +// proto type ----------------------------------- + +static void BitStream_Init( BIT_STREAM *BitStream, void *Buffer, bool IsRead ) ; // ビット単位入出力の初期化 +static void BitStream_Write( BIT_STREAM *BitStream, u8 BitNum, u64 OutputData ) ; // ビット単位の数値の書き込みを行う +static u64 BitStream_Read( BIT_STREAM *BitStream, u8 BitNum ) ; // ビット単位の数値の読み込みを行う +static u8 BitStream_GetBitNum( u64 Data ) ; // 指定の数値のビット数を取得する +static u64 BitStream_GetBytes( BIT_STREAM *BitStream ) ; // ビット単位の入出力データのサイズ( バイト数 )を取得する + +// code ----------------------------------------- + +// ビット単位入出力の初期化 +void BitStream_Init( BIT_STREAM *BitStream, void *Buffer, bool IsRead ) +{ + BitStream->Buffer = ( u8 * )Buffer ; + BitStream->Bytes = 0 ; + BitStream->Bits = 0 ; + if( IsRead == false ) + { + BitStream->Buffer[ 0 ] = 0 ; + } +} + +// ビット単位の数値の書き込みを行う +void BitStream_Write( BIT_STREAM *BitStream, u8 BitNum, u64 OutputData ) +{ + u32 i ; + for( i = 0 ; i < BitNum ; i ++ ) + { + BitStream->Buffer[ BitStream->Bytes ] |= ( ( OutputData >> ( BitNum - 1 - i ) ) & 1 ) << ( 7 - BitStream->Bits ) ; + BitStream->Bits ++ ; + if( BitStream->Bits == 8 ) + { + BitStream->Bytes ++ ; + BitStream->Bits = 0 ; + BitStream->Buffer[ BitStream->Bytes ] = 0 ; + } + } +} + +// ビット単位の数値の読み込みを行う +u64 BitStream_Read( BIT_STREAM *BitStream, u8 BitNum ) +{ + u64 Result = 0 ; + u32 i ; + for( i = 0 ; i < BitNum ; i ++ ) + { + Result |= ( ( u64 )( ( BitStream->Buffer[ BitStream->Bytes ] >> ( 7 - BitStream->Bits ) ) & 1 ) ) << ( BitNum - 1 - i ) ; + BitStream->Bits ++ ; + if( BitStream->Bits == 8 ) + { + BitStream->Bytes ++ ; + BitStream->Bits = 0 ; + } + } + + return Result ; +} + +// 指定の数値のビット数を取得する +u8 BitStream_GetBitNum( u64 Data ) +{ + u32 i ; + for( i = 1 ; i < 64 ; i ++ ) + { + if( Data < ( 1ULL << i ) ) + { + return i ; + } + } + + return i ; +} + +// ビット単位の入出力データのサイズ( バイト数 )を取得する +u64 BitStream_GetBytes( BIT_STREAM *BitStream ) +{ + return BitStream->Bytes + ( BitStream->Bits != 0 ? 1 : 0 ) ; +} + +// データを圧縮 +// +// 戻り値:圧縮後のサイズ 0 はエラー Dest に NULL を入れると圧縮データ格納に必要なサイズが返る +u64 Huffman_Encode( void *Src, u64 SrcSize, void *Dest ) +{ + // 結合データと数値データ、0~255までが数値データ + // (結合データの数と圧縮するデータの種類の数を足すと必ず『種類の数+(種類の数-1)』になる。 + // 『ホントか?』と思われる方はハフマン圧縮の説明で出てきたA,B,C,D,Eの結合部分の数を + // 数えてみて下さい、種類が5つに対して結合部分は一つ少ない4つになっているはずです。 + // 種類が6つの時は結合部分は5つに、そして種類が256この時は結合部分は255個になります) + HUFFMAN_NODE Node[256 + 255] ; + + unsigned char *SrcPoint ; + u64 PressBitCounter, PressSizeCounter, SrcSizeCounter ; + u64 i ; + + // void 型のポインタではアドレスの操作が出来ないので unsigned char 型のポインタにする + SrcPoint = ( unsigned char * )Src ; + + // 各数値の圧縮後のビット列を算出する + { + int NodeIndex, MinNode1, MinNode2 ; + int NodeNum, DataNum ; + + // 数値データを初期化する + for( i = 0 ; i < 256 ; i ++ ) + { + Node[i].Weight = 0 ; // 出現数はこれから算出するので0に初期化 + Node[i].ChildNode[0] = -1 ; // 数値データが終点なので -1 をセットする + Node[i].ChildNode[1] = -1 ; // 数値データが終点なので -1 をセットする + Node[i].ParentNode = -1 ; // まだどの要素とも結合されていないので -1 をセットする + } + + // 各数値の出現数をカウント + for( i = 0 ; i < SrcSize ; i ++ ) + { + Node[ SrcPoint[i] ].Weight ++ ; + } + + // 出現数を 0~65535 の比率に変換する + for( i = 0 ; i < 256 ; i ++ ) + { + Node[ i ].Weight = Node[ i ].Weight * 0xffff / SrcSize ; + } + + // 出現数の少ない数値データ or 結合データを繋いで + // 新しい結合データを作成、全ての要素を繋いで残り1個になるまで繰り返す + DataNum = 256 ; // 残り要素数 + NodeNum = 256 ; // 次に新しく作る結合データの要素配列のインデックス + while( DataNum > 1 ) + { + // 出現数値の低い要素二つを探す + { + MinNode1 = -1 ; + MinNode2 = -1 ; + + // 残っている要素全てを調べるまでループ + NodeIndex = 0 ; + for( i = 0 ; i < DataNum ; NodeIndex ++ ) + { + // もう既に何処かの要素と結合されている場合は対象外 + if( Node[NodeIndex].ParentNode != -1 ) continue ; + + i ++ ; + + // まだ有効な要素をセットしていないか、より出現数値の + // 少ない要素が見つかったら更新 + if( MinNode1 == -1 || Node[MinNode1].Weight > Node[NodeIndex].Weight ) + { + // 今まで一番出現数値が少なかったと思われた + // 要素は二番目に降格 + MinNode2 = MinNode1 ; + + // 新しい一番の要素の要素配列のインデックスを保存 + MinNode1 = NodeIndex ; + } + else + { + // 一番よりは出現数値が多くても、二番目よりは出現数値が + // 少ないかもしれないので一応チェック(又は二番目に出現数値の + // 少ない要素がセットされていなかった場合もセット) + if( MinNode2 == -1 || Node[MinNode2].Weight > Node[NodeIndex].Weight ) + { + MinNode2 = NodeIndex ; + } + } + } + } + + // 二つの要素を繋いで新しい要素(結合データ)を作る + Node[NodeNum].ParentNode = -1 ; // 新しいデータは当然まだ何処とも繋がっていないので -1 + Node[NodeNum].Weight = Node[MinNode1].Weight + Node[MinNode2].Weight ; // 出現数値は二つの数値を足したものをセットする + Node[NodeNum].ChildNode[0] = MinNode1 ; // この結合部で 0 を選んだら出現数値が一番少ない要素に繋がる + Node[NodeNum].ChildNode[1] = MinNode2 ; // この結合部で 1 を選んだら出現数値が二番目に少ない要素に繋がる + + // 結合された要素二つに、自分達に何の値が割り当てられたかをセットする + Node[MinNode1].Index = 0 ; // 一番出現数値が少ない要素は 0 番 + Node[MinNode2].Index = 1 ; // 二番目に出現数値が少ない要素は 1 番 + + // 結合された要素二つに、自分達を結合した結合データの要素配列インデックスをセットする + Node[MinNode1].ParentNode = NodeNum ; + Node[MinNode2].ParentNode = NodeNum ; + + // 要素の数を一個増やす + NodeNum ++ ; + + // 残り要素の数は、一つ要素が新しく追加された代わりに + // 二つの要素が結合されて検索の対象から外れたので + // 結果 1 - 2 で -1 + DataNum -- ; + } + + // 各数値の圧縮後のビット列を割り出す + { + unsigned char TempBitArray[32] ; + int TempBitIndex, TempBitCount, BitIndex, BitCount ; + + // 数値データの種類の数だけ繰り返す + for( i = 0 ; i < 256 ; i ++ ) + { + // 数値データから結合データを上へ上へと辿ってビット数を数える + { + // ビット数を初期化しておく + Node[i].BitNum = 0 ; + + // 一時的に数値データから遡っていったときのビット列を保存する処理の準備 + TempBitIndex = 0 ; + TempBitCount = 0 ; + TempBitArray[TempBitIndex] = 0 ; + + // 何処かと結合されている限りカウントし続ける(天辺は何処とも結合されていないので終点だと分かる) + for( NodeIndex = ( int )i ; Node[NodeIndex].ParentNode != -1 ; NodeIndex = Node[NodeIndex].ParentNode ) + { + // 配列要素一つに入るビットデータは8個なので、同じ配列要素に + // 既に8個保存していたら次の配列要素に保存先を変更する + if( TempBitCount == 8 ) + { + TempBitCount = 0 ; + TempBitIndex ++ ; + TempBitArray[TempBitIndex] = 0 ; + } + + // 新しく書き込む情報で今までのデータを上書きしてしまわないように1ビット左にシフトする + TempBitArray[TempBitIndex] <<= 1 ; + + // 結合データに割り振られたインデックスを最下位ビット(一番右側のビット)に書き込む + TempBitArray[TempBitIndex] |= (unsigned char)Node[NodeIndex].Index ; + + // 保存したビット数を増やす + TempBitCount ++ ; + + // ビット数を増やす + Node[i].BitNum ++ ; + } + } + + // TempBitArray に溜まったデータは数値データから結合データを天辺に向かって + // 上へ上へと遡っていった時のビット列なので、逆さまにしないと圧縮後のビット + // 配列として使えない(展開時に天辺の結合データから数値データまで辿ることが + // 出来ない)ので、順序を逆さまにしたものを数値データ内のビット列バッファに保存する + { + BitCount = 0 ; + BitIndex = 0 ; + + // 最初のバッファを初期化しておく + // (全部 論理和(or)演算 で書き込むので、最初から1になっている + // ビットに0を書き込んでも1のままになってしまうため) + Node[i].BitArray[BitIndex] = 0 ; + + // 一時的に保存しておいたビット列の最初まで遡る + while( TempBitIndex >= 0 ) + { + // 書き込んだビット数が一つの配列要素に入る8ビットに + // 達してしまったら次の配列要素に移る + if( BitCount == 8 ) + { + BitCount = 0 ; + BitIndex ++ ; + Node[i].BitArray[BitIndex] = 0 ; + } + + // まだ何も書き込まれていないビットアドレスに1ビット書き込む + Node[i].BitArray[BitIndex] |= (unsigned char)( ( TempBitArray[TempBitIndex] & 1 ) << BitCount ) ; + + // 書き込み終わったビットはもういらないので次のビットを + // 書き込めるように1ビット右にシフトする + TempBitArray[TempBitIndex] >>= 1 ; + + // 1ビット書き込んだので残りビット数を1個減らす + TempBitCount -- ; + + // もし現在書き込み元となっている配列要素に書き込んでいない + // ビット情報が無くなったら次の配列要素に移る + if( TempBitCount == 0 ) + { + TempBitIndex -- ; + TempBitCount = 8 ; + } + + // 書き込んだビット数を増やす + BitCount ++ ; + } + } + } + } + } + + // 変換処理 + { + unsigned char *PressData ; + int BitData, BitCounter, BitIndex, BitNum, NodeIndex ; + + // 圧縮データを格納するアドレスをセット + // (圧縮データ本体は元のサイズ、圧縮後のサイズ、各数値の出現数等を + // 格納するデータ領域の後に格納する) + PressData = ( unsigned char * )Dest ; + + // 圧縮するデータの参照アドレスを初期化 + SrcSizeCounter = 0 ; + + // 圧縮したデータの参照アドレスを初期化 + PressSizeCounter = 0 ; + + // 圧縮したビットデータのカウンタを初期化 + PressBitCounter = 0 ; + + // 圧縮データの最初のバイトを初期化しておく + if( Dest != NULL ) PressData[PressSizeCounter] = 0 ; + + // 圧縮対照のデータを全て圧縮後のビット列に変換するまでループ + for( SrcSizeCounter = 0 ; SrcSizeCounter < SrcSize ; SrcSizeCounter ++ ) + { + // 保存する数値データのインデックスを取得 + NodeIndex = SrcPoint[SrcSizeCounter] ; + + // 指定の数値データの圧縮後のビット列を出力 + { + // 参照する配列のインデックスを初期化 + BitIndex = 0 ; + + // 配列要素中の出力したビット数の初期化 + BitNum = 0 ; + + // 最初に書き込むビット列の配列要素をセット + BitData = Node[NodeIndex].BitArray[0] ; + + // 全てのビットを出力するまでループ + for( BitCounter = 0 ; BitCounter < Node[NodeIndex].BitNum ; BitCounter ++ ) + { + // もし書き込んだビット数が8個になっていたら次の配列要素に移る + if( PressBitCounter == 8 ) + { + PressSizeCounter ++ ; + if( Dest != NULL ) PressData[PressSizeCounter] = 0 ; + PressBitCounter = 0 ; + } + + // もし書き出したビット数が8個になっていたら次の配列要素に移る + if( BitNum == 8 ) + { + BitIndex ++ ; + BitData = Node[NodeIndex].BitArray[BitIndex] ; + BitNum = 0 ; + } + + // まだ何も書き込まれていないビットアドレスに1ビット書き込む + if( Dest != NULL ) PressData[PressSizeCounter] |= (unsigned char)( ( BitData & 1 ) << PressBitCounter ) ; + + // 書き込んだビット数を増やす + PressBitCounter ++ ; + + // 次に書き出すビットを最下位ビット(一番右のビット)にする為に + // 1ビット右シフトする + BitData >>= 1 ; + + // 書き出したビット数を増やす + BitNum ++ ; + } + } + } + + // 最後の1バイト分のサイズを足す + PressSizeCounter ++ ; + } + + // 圧縮データの情報を保存する + { + BIT_STREAM BitStream ; + u8 HeadBuffer[ 256 * 2 + 32 ] ; + u8 BitNum ; + u64 HeadSize ; + s32 WeightSaveData[ 256 ] ; + + BitStream_Init( &BitStream, HeadBuffer, false ) ; + + // 元のデータのサイズをセット + BitNum = BitStream_GetBitNum( SrcSize ) ; + if( BitNum > 0 ) + { + BitNum -- ; + } + BitStream_Write( &BitStream, 6, BitNum ) ; + BitStream_Write( &BitStream, BitNum + 1, SrcSize ) ; + + // 圧縮後のデータのサイズをセット + BitNum = BitStream_GetBitNum( PressSizeCounter ) ; + BitStream_Write( &BitStream, 6, BitNum ) ; + BitStream_Write( &BitStream, BitNum + 1, PressSizeCounter ) ; + + // 各数値の出現率の差分値を保存する + WeightSaveData[ 0 ] = ( s32 )Node[ 0 ].Weight ; + for( i = 1 ; i < 256 ; i ++ ) + { + WeightSaveData[ i ] = ( s32 )Node[ i ].Weight - ( s32 )Node[ i - 1 ].Weight ; + } + for( i = 0 ; i < 256 ; i ++ ) + { + u64 OutputNum ; + bool Minus ; + + if( WeightSaveData[ i ] < 0 ) + { + OutputNum = ( u64 )( -WeightSaveData[ i ] ) ; + Minus = true ; + } + else + { + OutputNum = ( u64 )WeightSaveData[ i ] ; + Minus = false ; + } + + BitNum = ( BitStream_GetBitNum( OutputNum ) + 1 ) / 2 ; + if( BitNum > 0 ) + { + BitNum -- ; + } + BitStream_Write( &BitStream, 3, BitNum ) ; + BitStream_Write( &BitStream, 1, Minus ? 1 : 0 ) ; + BitStream_Write( &BitStream, ( BitNum + 1 ) * 2, OutputNum ) ; + } + + // ヘッダサイズを取得 + HeadSize = BitStream_GetBytes( &BitStream ) ; + + // 圧縮データの情報を圧縮データにコピーする + if( Dest != NULL ) + { + u64 j ; + + // ヘッダの分だけ移動 + for( j = PressSizeCounter - 1 ; j >= 0 ; j -- ) + { + ( ( u8 * )Dest )[ HeadSize + j ] = ( ( u8 * )Dest )[ j ] ; + if( j == 0 ) + { + break ; + } + } + + // ヘッダを書き込み + memcpy( Dest, HeadBuffer, ( size_t )HeadSize ) ; + } + + // 圧縮後のサイズを返す + return PressSizeCounter + HeadSize ; + } +} + +// 圧縮データを解凍 +// +// 戻り値:解凍後のサイズ 0 はエラー Dest に NULL を入れると解凍データ格納に必要なサイズが返る +u64 Huffman_Decode( void *Press, void *Dest ) +{ + // 結合データと数値データ、0~255までが数値データ + HUFFMAN_NODE Node[256 + 255] ; + + u64 PressSizeCounter, DestSizeCounter, DestSize ; + unsigned char *PressPoint, *DestPoint ; + u64 OriginalSize ; + u64 PressSize ; + u64 HeadSize ; + u16 Weight[ 256 ] ; + int i ; + + // void 型のポインタではアドレスの操作が出来ないので unsigned char 型のポインタにする + PressPoint = ( unsigned char * )Press ; + DestPoint = ( unsigned char * )Dest ; + + // 圧縮データの情報を取得する + { + BIT_STREAM BitStream ; + u8 BitNum ; + u8 Minus ; + u16 SaveData ; + + BitStream_Init( &BitStream, PressPoint, true ) ; + + OriginalSize = BitStream_Read( &BitStream, ( u8 )( BitStream_Read( &BitStream, 6 ) + 1 ) ) ; + PressSize = BitStream_Read( &BitStream, ( u8 )( BitStream_Read( &BitStream, 6 ) + 1 ) ) ; + + // 出現頻度のテーブルを復元する + BitNum = ( u8 )( BitStream_Read( &BitStream, 3 ) + 1 ) * 2 ; + Minus = ( u8 )BitStream_Read( &BitStream, 1 ) ; + SaveData = ( u16 )BitStream_Read( &BitStream, BitNum ) ; + Weight[ 0 ] = SaveData ; + for( i = 1 ; i < 256 ; i ++ ) + { + BitNum = ( u8 )( BitStream_Read( &BitStream, 3 ) + 1 ) * 2 ; + Minus = ( u8 )BitStream_Read( &BitStream, 1 ) ; + SaveData = ( u16 )BitStream_Read( &BitStream, BitNum ) ; + Weight[ i ] = Minus == 1 ? Weight[ i - 1 ] - SaveData : Weight[ i - 1 ] + SaveData ; + } + + HeadSize = BitStream_GetBytes( &BitStream ) ; + } + + // Dest が NULL の場合は 解凍後のデータのサイズを返す + if( Dest == NULL ) + return OriginalSize ; + + // 解凍後のデータのサイズを取得する + DestSize = OriginalSize ; + + // 各数値の結合データを構築する + { + int NodeIndex, MinNode1, MinNode2 ; + int NodeNum, DataNum ; + + // 数値データを初期化する + for( i = 0 ; i < 256 + 255 ; i ++ ) + { + Node[i].Weight = Weight[i] ; // 出現数は保存しておいたデータからコピー + Node[i].ChildNode[0] = -1 ; // 数値データが終点なので -1 をセットする + Node[i].ChildNode[1] = -1 ; // 数値データが終点なので -1 をセットする + Node[i].ParentNode = -1 ; // まだどの要素とも結合されていないので -1 をセットする + } + + // 出現数の少ない数値データ or 結合データを繋いで + // 新しい結合データを作成、全ての要素を繋いで残り1個になるまで繰り返す + // (圧縮時と同じコードです) + DataNum = 256 ; // 残り要素数 + NodeNum = 256 ; // 次に新しく作る結合データの要素配列のインデックス + while( DataNum > 1 ) + { + // 出現数値の低い要素二つを探す + { + MinNode1 = -1 ; + MinNode2 = -1 ; + + // 残っている要素全てを調べるまでループ + NodeIndex = 0 ; + for( i = 0 ; i < DataNum ; NodeIndex ++ ) + { + // もう既に何処かの要素と結合されている場合は対象外 + if( Node[NodeIndex].ParentNode != -1 ) continue ; + + i ++ ; + + // まだ有効な要素をセットしていないか、より出現数値の + // 少ない要素が見つかったら更新 + if( MinNode1 == -1 || Node[MinNode1].Weight > Node[NodeIndex].Weight ) + { + // 今まで一番出現数値が少なかったと思われた + // 要素は二番目に降格 + MinNode2 = MinNode1 ; + + // 新しい一番の要素の要素配列のインデックスを保存 + MinNode1 = NodeIndex ; + } + else + { + // 一番よりは出現数値が多くても、二番目よりは出現数値が + // 少ないかもしれないので一応チェック(又は二番目に出現数値の + // 少ない要素がセットされていなかった場合もセット) + if( MinNode2 == -1 || Node[MinNode2].Weight > Node[NodeIndex].Weight ) + { + MinNode2 = NodeIndex ; + } + } + } + } + + // 二つの要素を繋いで新しい要素(結合データ)を作る + Node[NodeNum].ParentNode = -1 ; // 新しいデータは当然まだ何処とも繋がっていないので -1 + Node[NodeNum].Weight = Node[MinNode1].Weight + Node[MinNode2].Weight ; // 出現数値は二つの数値を足したものをセットする + Node[NodeNum].ChildNode[0] = MinNode1 ; // この結合部で 0 を選んだら出現数値が一番少ない要素に繋がる + Node[NodeNum].ChildNode[1] = MinNode2 ; // この結合部で 1 を選んだら出現数値が二番目に少ない要素に繋がる + + // 結合された要素二つに、自分達に何の値が割り当てられたかをセットする + Node[MinNode1].Index = 0 ; // 一番出現数値が少ない要素は 0 番 + Node[MinNode2].Index = 1 ; // 二番目に出現数値が少ない要素は 1 番 + + // 結合された要素二つに、自分達を結合した結合データの要素配列インデックスをセットする + Node[MinNode1].ParentNode = NodeNum ; + Node[MinNode2].ParentNode = NodeNum ; + + // 要素の数を一個増やす + NodeNum ++ ; + + // 残り要素の数は、一つ要素が新しく追加された代わりに + // 二つの要素が結合されて検索の対象から外れたので + // 結果 1 - 2 で -1 + DataNum -- ; + } + + // 各数値の圧縮時のビット列を割り出す + { + unsigned char TempBitArray[32] ; + int TempBitIndex, TempBitCount, BitIndex, BitCount ; + + // 数値データと結合データの数だけ繰り返す + for( i = 0 ; i < 256 + 254 ; i ++ ) + { + // 数値データから結合データを上へ上へと辿ってビット数を数える + { + // ビット数を初期化しておく + Node[i].BitNum = 0 ; + + // 一時的に数値データから遡っていったときのビット列を保存する処理の準備 + TempBitIndex = 0 ; + TempBitCount = 0 ; + TempBitArray[TempBitIndex] = 0 ; + + // 何処かと結合されている限りカウントし続ける(天辺は何処とも結合されていないので終点だと分かる) + for( NodeIndex = ( int )i ; Node[NodeIndex].ParentNode != -1 ; NodeIndex = Node[NodeIndex].ParentNode ) + { + // 配列要素一つに入るビットデータは8個なので、同じ配列要素に + // 既に8個保存していたら次の配列要素に保存先を変更する + if( TempBitCount == 8 ) + { + TempBitCount = 0 ; + TempBitIndex ++ ; + TempBitArray[TempBitIndex] = 0 ; + } + + // 新しく書き込む情報で今までのデータを上書きしてしまわないように1ビット左にシフトする + TempBitArray[TempBitIndex] <<= 1 ; + + // 結合データに割り振られたインデックスを最下位ビット(一番右側のビット)に書き込む + TempBitArray[TempBitIndex] |= (unsigned char)Node[NodeIndex].Index ; + + // 保存したビット数を増やす + TempBitCount ++ ; + + // ビット数を増やす + Node[i].BitNum ++ ; + } + } + + // TempBitArray に溜まったデータは数値データから結合データを天辺に向かって + // 上へ上へと遡っていった時のビット列なので、逆さまにしないと圧縮後のビット + // 配列として使えない(展開時に天辺の結合データから数値データまで辿ることが + // 出来ない)ので、順序を逆さまにしたものを数値データ内のビット列バッファに保存する + { + BitCount = 0 ; + BitIndex = 0 ; + + // 最初のバッファを初期化しておく + // (全部 論理和(or)演算 で書き込むので、最初から1になっている + // ビットに0を書き込んでも1のままになってしまうため) + Node[i].BitArray[BitIndex] = 0 ; + + // 一時的に保存しておいたビット列の最初まで遡る + while( TempBitIndex >= 0 ) + { + // 書き込んだビット数が一つの配列要素に入る8ビットに + // 達してしまったら次の配列要素に移る + if( BitCount == 8 ) + { + BitCount = 0 ; + BitIndex ++ ; + Node[i].BitArray[BitIndex] = 0 ; + } + + // まだ何も書き込まれていないビットアドレスに1ビット書き込む + Node[i].BitArray[BitIndex] |= (unsigned char)( ( TempBitArray[TempBitIndex] & 1 ) << BitCount ) ; + + // 書き込み終わったビットはもういらないので次のビットを + // 書き込めるように1ビット右にシフトする + TempBitArray[TempBitIndex] >>= 1 ; + + // 1ビット書き込んだので残りビット数を1個減らす + TempBitCount -- ; + + // もし現在書き込み元となっている配列要素に書き込んでいない + // ビット情報が無くなったら次の配列要素に移る + if( TempBitCount == 0 ) + { + TempBitIndex -- ; + TempBitCount = 8 ; + } + + // 書き込んだビット数を増やす + BitCount ++ ; + } + } + } + } + } + + // 解凍処理 + { + unsigned char *PressData ; + int PressBitCounter, PressBitData, Index, NodeIndex ; + int NodeIndexTable[ 512 ] ; + int j ; + + // 各ビット配列がどのノードに繋がるかのテーブルを作成する + { + u16 BitMask[ 9 ] ; + + for( i = 0 ; i < 9 ; i ++ ) + { + BitMask[ i ] = ( u16 )( ( 1 << ( i + 1 ) ) - 1 ) ; + } + + for( i = 0 ; i < 512 ; i ++ ) + { + NodeIndexTable[ i ] = -1 ; + + // ビット列に適合したノードを探す + for( j = 0 ; j < 256 + 254 ; j ++ ) + { + u16 BitArray01 ; + + if( Node[ j ].BitNum > 9 ) + { + continue ; + } + + BitArray01 = ( u16 )Node[ j ].BitArray[ 0 ] | ( Node[ j ].BitArray[ 1 ] << 8 ) ; + if( ( i & BitMask[ Node[ j ].BitNum - 1 ] ) == ( BitArray01 & BitMask[ Node[ j ].BitNum - 1 ] ) ) + { + NodeIndexTable[ i ] = j ; + break ; + } + } + } + } + + // 圧縮データ本体の先頭アドレスをセット + // (圧縮データ本体は元のサイズ、圧縮後のサイズ、各数値の出現数等を + // 格納するデータ領域の後にある) + PressData = PressPoint + HeadSize ; + + // 解凍したデータの格納アドレスを初期化 + DestSizeCounter = 0 ; + + // 圧縮データの参照アドレスを初期化 + PressSizeCounter = 0 ; + + // 圧縮ビットデータのカウンタを初期化 + PressBitCounter = 0 ; + + // 圧縮データの1バイト目をセット + PressBitData = PressData[PressSizeCounter] ; + + // 圧縮前のデータサイズになるまで解凍処理を繰り返す + for( DestSizeCounter = 0 ; DestSizeCounter < DestSize ; DestSizeCounter ++ ) + { + // ビット列から数値データを検索する + { + // 最後の17byte分のデータは天辺から探す( 最後の次のバイトを読み出そうとしてメモリの不正なアクセスになる可能性があるため ) + if( DestSizeCounter >= DestSize - 17 ) + { + // 結合データの天辺は一番最後の結合データが格納される510番目(0番から数える) + // 天辺から順に下に降りていく + NodeIndex = 510 ; + } + else + { + // それ以外の場合はテーブルを使用する + + // もし PressBitData に格納されている全ての + // ビットデータを使い切ってしまった場合は次の + // ビットデータをセットする + if( PressBitCounter == 8 ) + { + PressSizeCounter ++ ; + PressBitData = PressData[PressSizeCounter] ; + PressBitCounter = 0 ; + } + + // 圧縮データを9bit分用意する + PressBitData = ( PressBitData | ( PressData[ PressSizeCounter + 1 ] << ( 8 - PressBitCounter ) ) ) & 0x1ff ; + + // テーブルから最初の結合データを探す + NodeIndex = NodeIndexTable[ PressBitData ] ; + + // 使った分圧縮データのアドレスを進める + PressBitCounter += Node[ NodeIndex ].BitNum ; + if( PressBitCounter >= 16 ) + { + PressSizeCounter += 2 ; + PressBitCounter -= 16 ; + PressBitData = PressData[PressSizeCounter] >> PressBitCounter ; + } + else + if( PressBitCounter >= 8 ) + { + PressSizeCounter ++ ; + PressBitCounter -= 8 ; + PressBitData = PressData[PressSizeCounter] >> PressBitCounter ; + } + else + { + PressBitData >>= Node[ NodeIndex ].BitNum ; + } + } + + // 数値データに辿り着くまで結合データを下りていく + while( NodeIndex > 255 ) + { + // もし PressBitData に格納されている全ての + // ビットデータを使い切ってしまった場合は次の + // ビットデータをセットする + if( PressBitCounter == 8 ) + { + PressSizeCounter ++ ; + PressBitData = PressData[PressSizeCounter] ; + PressBitCounter = 0 ; + } + + // 1ビット取得する + Index = PressBitData & 1 ; + + // 使用した1ビット分だけ右にシフトする + PressBitData >>= 1 ; + + // 使用したビット数を一個増やす + PressBitCounter ++ ; + + // 次の要素(結合データか数値データかはまだ分からない)に移る + NodeIndex = Node[NodeIndex].ChildNode[Index] ; + } + } + + // 辿り着いた数値データを出力 + DestPoint[DestSizeCounter] = (unsigned char)NodeIndex ; + } + } + + // 解凍後のサイズを返す + return OriginalSize ; +} + diff --git a/src/WolfDec/3rdParty/Huffman.h b/src/WolfDec/3rdParty/Huffman.h new file mode 100644 index 0000000..785e379 --- /dev/null +++ b/src/WolfDec/3rdParty/Huffman.h @@ -0,0 +1,55 @@ +// ============================================================================ +// +// Huffman圧縮ライブラリ +// +// Huffman.h +// +// Creator : 山田 巧 +// Creation Date : 2018/12/16 +// +// ============================================================================ + +#ifndef HUFFMAN_H +#define HUFFMAN_H + +// define --------------------------------------- + +#ifndef u64 +#define u64 unsigned long long +#endif + +#ifndef u32 +#define u32 unsigned int +#endif + +#ifndef u16 +#define u16 unsigned short +#endif + +#ifndef u8 +#define u8 unsigned char +#endif + +#ifndef s32 +#define s32 signed int +#endif + +#ifndef f32 +#define f32 float +#endif + +#ifndef NULL +#define NULL (0) +#endif + +// proto type ----------------------------------- + +// データを圧縮 +// 戻り値:圧縮後のサイズ 0 はエラー Dest に NULL を入れると圧縮データ格納に必要なサイズが返る +extern u64 Huffman_Encode( void *Src, u64 SrcSize, void *Dest ) ; + +// 圧縮データを解凍 +// 戻り値:解凍後のサイズ 0 はエラー Dest に NULL を入れると解凍データ格納に必要なサイズが返る +extern u64 Huffman_Decode( void *Press, void *Dest ) ; + +#endif // HUFFMAN_H \ No newline at end of file diff --git a/src/WolfDec/WolfDec.vcxproj b/src/WolfDec/WolfDec.vcxproj index 66d73ce..0c93faf 100644 --- a/src/WolfDec/WolfDec.vcxproj +++ b/src/WolfDec/WolfDec.vcxproj @@ -23,32 +23,32 @@ {FF44B3EF-437E-49A4-A2D2-86B381D25732} Win32Proj WolfDec - 10.0.17134.0 + 10.0 Application true - v141 + v143 Unicode Application false - v141 + v143 true Unicode Application true - v141 + v143 Unicode Application false - v141 + v143 true Unicode @@ -159,16 +159,25 @@ + + + + + + + + + diff --git a/src/WolfDec/WolfDec.vcxproj.filters b/src/WolfDec/WolfDec.vcxproj.filters index 9ea5272..dc858dd 100644 --- a/src/WolfDec/WolfDec.vcxproj.filters +++ b/src/WolfDec/WolfDec.vcxproj.filters @@ -11,6 +11,18 @@ 3rdParty + + 3rdParty + + + 3rdParty + + + 3rdParty + + + 3rdParty + @@ -25,6 +37,17 @@ 3rdParty + + + + 3rdParty + + + 3rdParty + + + 3rdParty + diff --git a/src/WolfDec/main.cpp b/src/WolfDec/main.cpp index faf54c4..7f22a72 100644 Binary files a/src/WolfDec/main.cpp and b/src/WolfDec/main.cpp differ