www.pudn.com > av3dec_20050318.zip > sam_decode_cbc.c
/* *********************************************************************** * COPYRIGHT AND WARRANTY INFORMATION * * Copyright 2004, Audio Video Coding Standard, Part III * * This software module was originally developed by * * JungHoe Kim (kjh94@samsung.com), Samsung AIT * * edited by * * Lei Miao (win.miaolei@samsung.com), Samsung AIT * * DISCLAIMER OF WARRANTY * * These software programs are available to the users without any * license fee or royalty on an "as is" basis. The AVS disclaims * any and all warranties, whether express, implied, or statutory, * including any implied warranties of merchantability or of fitness * for a particular purpose. In no event shall the contributors or * the AVS be liable for any incidental, punitive, or consequential * damages of any kind whatsoever arising from the use of this program. * * This disclaimer of warranty extends to the user of this program * and user's customers, employees, agents, transferees, successors, * and assigns. * * The AVS does not represent or warrant that the program furnished * hereunder are free of infringement of any third-party patents. * Commercial implementations of AVS, including shareware, may be * subject to royalty fees to patent holders. Information regarding * the AVS patent policy is available from the AVS Web site at * http://www.avs.org.cn * * THIS IS NOT A GRANT OF PATENT RIGHTS - SEE THE AVS PATENT POLICY. ************************************************************************ */ #include#include "sam_cbc_dec.h" #define TOP_LAYER 48 static double fs_tbl[9] = { 48000, 44100, 32000, 24000, 22050, 16000, 12000, 11025, 8000 }; static int sampling_rate; unsigned int codeBook[36][16][16] = { {{5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}}, {{1, 0, 5, 30, 6, 16, 29, 56, 1, 62, 17, 255, 9, 126, 57, 254}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}}, {{7, 0, 12, 7, 11, 27, 6, 21, 1, 4, 5, 19, 8, 20, 26, 18}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}}, {{1, 0, 6, 5, 7, 28, 4, 62, 2, 60, 29, 247, 6, 122, 63, 246}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}}, {{1, 7, 2, 9, 3, 21, 27, 17, 0, 24, 25, 16, 11, 53, 20, 52}, {2, 13, 1, 3, 12, 9, 15, 59, 28, 17, 0, 117, 5, 16, 1, 116}, {5, 7, 25, 1, 3, 4, 9, 0, 2, 3, 17, 16, 13, 5, 49, 48}, {1, 1, 15, 0, 5, 8, 9, 25, 1, 53, 52, 110, 14, 54, 24, 111}, {6, 2, 3, 10, 11, 12, 10, 14, 7, 4, 4, 11, 1, 13, 0, 15}, {1, 18, 1, 12, 52, 5, 27, 19, 5, 0, 7, 8, 53, 4, 1, 3}, {6, 2, 1, 0, 7, 20, 21, 57, 4, 1, 6, 31, 11, 30, 29, 56}, {0, 14, 4, 4, 5, 12, 13, 121, 6, 7, 11, 20, 31, 61, 21, 120}, {2, 28, 12, 15, 0, 4, 15, 5, 13, 57, 29, 56, 6, 116, 59, 117}, {2, 12, 7, 3, 6, 7, 2, 2, 6, 20, 13, 4, 0, 21, 7, 11}, {14, 15, 24, 55, 0, 1, 11, 8, 54, 52, 107, 106, 10, 9, 51, 50}, {4, 3, 0, 5, 3, 7, 2, 11, 13, 48, 99, 98, 10, 4, 1, 25}, {1, 3, 6, 15, 11, 58, 10, 17, 0, 4, 9, 5, 28, 119, 16, 118}, {4, 13, 3, 10, 7, 185, 0, 2, 3, 24, 2, 47, 93, 184, 22, 25}, {0, 6, 9, 31, 3, 11, 4, 28, 10, 5, 59, 33, 30, 17, 58, 32}, {2, 2, 0, 3, 15, 28, 27, 15, 29, 13, 26, 29, 12, 12, 2, 28}}, {{1, 7, 5, 2, 6, 17, 0, 37, 1, 16, 19, 36, 3, 7, 2, 6}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}}, {{14, 11, 5, 4, 7, 0, 2, 10, 13, 3, 1, 6, 9, 8, 12, 15}, {12, 250, 2, 124, 13, 120, 5, 126, 14, 251, 4, 127, 3, 121, 0, 61}, {12, 0, 228, 112, 15, 5, 113, 119, 13, 1, 229, 118, 4, 1, 115, 58}, {1, 2, 0, 12, 7, 15, 14, 7, 6, 11, 10, 13, 2, 6, 4, 1}, {10, 11, 15, 4, 228, 229, 112, 118, 0, 1, 6, 1, 113, 115, 119, 58}, {9, 17, 0, 17, 16, 128, 11, 129, 5, 9, 3, 6, 10, 65, 7, 33}, {9, 0, 21, 16, 20, 9, 34, 35, 5, 3, 35, 7, 11, 6, 16, 34}, {5, 15, 6, 2, 14, 65, 6, 64, 3, 1, 2, 17, 9, 33, 0, 7}, {12, 14, 13, 3, 2, 4, 5, 0, 253, 252, 120, 121, 125, 124, 127, 61}, {2, 72, 5, 38, 0, 39, 3, 7, 26, 294, 12, 146, 37, 295, 8, 27}, {9, 5, 18, 11, 0, 3, 10, 6, 19, 8, 122, 123, 14, 8, 60, 31}, {0, 19, 15, 55, 3, 2, 11, 18, 17, 24, 25, 54, 10, 14, 16, 26}, {1, 6, 7, 2, 30, 2, 14, 4, 3, 10, 0, 6, 46, 47, 22, 31}, {5, 62, 0, 9, 17, 100, 13, 63, 30, 203, 14, 51, 33, 202, 24, 32}, {5, 3, 15, 9, 17, 2, 33, 13, 0, 1, 65, 12, 29, 1, 64, 28}, {3, 0, 1, 23, 2, 18, 7, 16, 10, 12, 17, 27, 22, 26, 39, 38}}, {{1, 1, 7, 26, 0, 98, 25, 199, 2, 396, 97, 794, 27, 1590, 96, 1591}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}}, {{1, 1, 1, 1, 6, 61, 31, 1, 2, 0, 60, 6, 14, 15, 2, 14}, {0, 6, 2, 14, 61, 248, 63, 120, 251, 974, 250, 975, 242, 972, 249, 973}, {2, 0, 7, 5, 7, 12, 27, 9, 13, 24, 101, 100, 26, 8, 103, 102}, {0, 6, 5, 15, 8, 19, 28, 36, 119, 237, 232, 467, 37, 236, 117, 466}, {2, 9, 7, 13, 7, 51, 25, 24, 0, 48, 13, 49, 5, 100, 8, 101}, {6, 6, 2, 14, 2, 6, 2, 15, 31, 14, 0, 31, 61, 30, 14, 60}, {2, 2, 15, 14, 12, 6, 14, 27, 1, 26, 3, 30, 0, 62, 2, 63}, {1, 1, 5, 0, 15, 51, 14, 18, 13, 50, 24, 17, 39, 77, 16, 76}, {0, 48, 25, 98, 7, 110, 26, 109, 5, 435, 99, 432, 4, 434, 111, 433}, {5, 8, 0, 8, 3, 19, 7, 18, 25, 19, 18, 53, 24, 27, 5, 52}, {6, 5, 0, 57, 2, 15, 4, 13, 7, 56, 59, 116, 1, 12, 1, 117}, {7, 21, 20, 23, 6, 3, 3, 22, 17, 16, 19, 18, 2, 5, 0, 4}, {3, 82, 1, 2, 4, 163, 0, 167, 1, 166, 21, 80, 11, 324, 3, 325}, {4, 1, 3, 2, 0, 11, 3, 2, 29, 28, 31, 10, 13, 30, 25, 24}, {0, 10, 2, 44, 4, 23, 3, 90, 15, 28, 13, 182, 12, 59, 58, 183}, {1, 0, 2, 7, 4, 6, 11, 29, 28, 31, 30, 25, 10, 24, 27, 26}}, {{1, 6, 1, 10, 2, 0, 6, 17, 7, 23, 1, 16, 9, 14, 22, 15}, {1, 1, 6, 11, 9, 17, 14, 31, 30, 32, 0, 40, 21, 33, 1, 41}, {4, 2, 1, 29, 15, 1, 0, 28, 12, 7, 13, 21, 11, 13, 12, 20}, {5, 14, 9, 3, 3, 12, 8, 2, 5, 26, 30, 8, 0, 27, 31, 9}, {4, 11, 0, 12, 2, 9, 28, 10, 3, 10, 15, 13, 3, 8, 29, 11}, {4, 6, 5, 2, 0, 3, 3, 9, 15, 29, 6, 5, 28, 2, 7, 8}, {0, 2, 10, 11, 30, 6, 62, 25, 1, 4, 28, 7, 29, 13, 63, 24}, {3, 10, 15, 28, 4, 26, 1, 59, 4, 11, 1, 0, 12, 27, 5, 58}, {0, 17, 13, 24, 5, 6, 15, 7, 14, 32, 4, 33, 9, 50, 5, 51}, {12, 30, 4, 6, 2, 29, 0, 11, 31, 86, 7, 87, 28, 20, 13, 42}, {0, 3, 2, 31, 6, 5, 28, 5, 3, 30, 19, 59, 4, 8, 58, 18}, {5, 5, 12, 27, 0, 14, 9, 4, 7, 13, 16, 35, 15, 34, 26, 12}, {5, 5, 3, 15, 12, 19, 8, 28, 0, 9, 13, 29, 3, 8, 2, 18}, {3, 8, 5, 9, 15, 25, 14, 24, 13, 8, 1, 9, 0, 2, 5, 3}, {3, 6, 4, 10, 14, 15, 0, 3, 9, 11, 2, 17, 5, 2, 16, 3}, {7, 3, 1, 11, 9, 0, 5, 1, 13, 17, 25, 49, 4, 16, 10, 48}}, {{1, 0, 5, 30, 6, 63, 29, 33, 1, 62, 17, 115, 9, 32, 56, 114}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}}, {{3, 0, 9, 23, 10, 16, 22, 13, 2, 17, 15, 4, 3, 5, 14, 12}, {1, 0, 5, 18, 13, 38, 1, 39, 12, 5, 14, 6, 8, 4, 15, 7}, {5, 4, 60, 63, 2, 3, 62, 24, 13, 14, 102, 103, 0, 1, 50, 61}, {6, 5, 31, 58, 5, 4, 28, 59, 3, 18, 17, 33, 0, 19, 30, 32}, {4, 11, 2, 14, 0, 4, 1, 5, 6, 15, 3, 1, 3, 43, 20, 42}, {3, 25, 7, 26, 19, 47, 8, 22, 5, 10, 0, 4, 24, 46, 27, 18}, {4, 5, 9, 6, 3, 15, 16, 17, 6, 7, 1, 5, 2, 0, 28, 29}, {7, 2, 13, 8, 22, 36, 37, 13, 1, 10, 0, 23, 12, 19, 7, 12}, {1, 10, 9, 3, 7, 11, 0, 13, 2, 34, 33, 32, 25, 49, 35, 48}, {4, 20, 7, 3, 6, 2, 1, 0, 22, 93, 21, 92, 3, 95, 2, 94}, {4, 5, 8, 15, 6, 0, 14, 6, 11, 31, 20, 43, 30, 14, 42, 9}, {6, 30, 3, 12, 2, 0, 2, 15, 2, 63, 53, 52, 14, 14, 27, 62}, {7, 2, 6, 4, 23, 7, 2, 1, 10, 0, 7, 22, 6, 26, 12, 27}, {7, 24, 2, 7, 2, 25, 0, 13, 3, 204, 13, 103, 24, 205, 2, 50}, {5, 1, 30, 25, 0, 1, 16, 24, 9, 14, 107, 17, 27, 31, 106, 52}, {3, 3, 8, 22, 10, 18, 4, 3, 0, 46, 39, 38, 2, 11, 10, 47}}, {{20, 1, 0, 7, 21, 2, 5, 12, 3, 6, 4, 13, 11, 14, 15, 4}, {8, 58, 15, 13, 9, 59, 2, 23, 10, 12, 1, 28, 0, 22, 6, 7}, {2, 11, 54, 7, 10, 3, 6, 26, 9, 0, 55, 24, 2, 7, 25, 8}, {10, 24, 15, 50, 4, 6, 4, 14, 1, 5, 1, 51, 7, 13, 11, 0}, {1, 9, 10, 2, 54, 55, 1, 26, 12, 1, 3, 7, 0, 22, 23, 8}, {10, 17, 2, 31, 22, 56, 30, 57, 3, 9, 0, 13, 29, 16, 12, 23}, {9, 3, 21, 0, 26, 8, 6, 7, 2, 7, 1, 11, 2, 12, 20, 27}, {2, 6, 7, 24, 3, 5, 21, 4, 7, 13, 0, 8, 11, 25, 9, 20}, {6, 10, 7, 0, 14, 1, 2, 6, 62, 63, 18, 22, 19, 23, 30, 8}, {12, 20, 4, 29, 2, 31, 0, 11, 15, 56, 6, 57, 30, 14, 13, 21}, {12, 3, 10, 0, 4, 7, 2, 10, 22, 4, 2, 11, 3, 13, 3, 23}, {3, 9, 5, 21, 7, 11, 13, 8, 3, 20, 24, 8, 0, 25, 2, 9}, {11, 2, 3, 7, 21, 0, 2, 9, 26, 3, 8, 12, 2, 3, 20, 27}, {2, 7, 7, 11, 8, 24, 13, 25, 6, 20, 0, 3, 21, 18, 2, 19}, {15, 0, 6, 12, 9, 14, 17, 23, 4, 13, 21, 5, 22, 7, 16, 20}, {0, 11, 15, 6, 14, 7, 10, 27, 12, 26, 4, 17, 5, 18, 19, 16}}, {{1, 1, 7, 53, 0, 208, 27, 423, 2, 845, 209, 3378, 12, 1688, 210, 3379}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}}, {{1, 2, 1, 6, 2, 5, 1, 1, 3, 8, 0, 18, 7, 38, 3, 39}, {1, 3, 0, 5, 19, 144, 8, 73, 150, 581, 148, 580, 303, 302, 149, 291}, {3, 4, 2, 6, 0, 21, 11, 40, 41, 250, 30, 249, 14, 251, 63, 248}, {0, 7, 4, 12, 13, 45, 23, 21, 41, 161, 179, 160, 88, 178, 163, 162}, {2, 8, 6, 9, 3, 244, 5, 123, 0, 981, 31, 491, 14, 1960, 60, 1961}, {7, 52, 2, 0, 1, 107, 1, 27, 106, 49, 48, 51, 50, 5, 4, 3}, {2, 1, 6, 6, 2, 59, 0, 28, 15, 234, 15, 470, 1, 116, 14, 471}, {1, 19, 1, 13, 5, 12, 0, 18, 16, 35, 29, 34, 28, 61, 31, 60}, {0, 224, 58, 459, 2, 902, 59, 228, 6, 450, 113, 1807, 15, 1806, 115, 458}, {1, 8, 5, 19, 0, 18, 3, 29, 28, 31, 30, 25, 24, 27, 2, 26}, {1, 22, 37, 36, 7, 10, 47, 39, 0, 46, 38, 33, 6, 32, 35, 34}, {14, 31, 30, 9, 6, 8, 11, 10, 5, 4, 7, 6, 1, 0, 3, 2}, {3, 86, 7, 81, 5, 80, 6, 165, 0, 83, 4, 87, 4, 42, 11, 164}, {14, 31, 30, 9, 8, 11, 10, 5, 4, 7, 6, 1, 0, 3, 6, 2}, {7, 47, 0, 46, 4, 22, 10, 13, 6, 12, 15, 14, 1, 9, 5, 8}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}}, {{1, 0, 4, 11, 6, 61, 31, 43, 1, 83, 60, 80, 14, 81, 42, 82}, {3, 1, 5, 0, 3, 19, 8, 2, 74, 300, 151, 146, 147, 602, 72, 603}, {1, 6, 4, 14, 15, 23, 3, 20, 2, 45, 2, 7, 0, 44, 21, 6}, {0, 15, 4, 4, 6, 3, 14, 10, 46, 45, 23, 44, 22, 21, 47, 20}, {1, 1, 15, 22, 1, 20, 0, 21, 6, 47, 8, 46, 14, 36, 19, 37}, {0, 5, 3, 4, 14, 30, 4, 62, 10, 11, 13, 49, 25, 126, 48, 127}, {5, 6, 4, 25, 0, 4, 13, 7, 14, 5, 2, 24, 31, 7, 6, 30}, {5, 0, 2, 6, 12, 7, 17, 6, 15, 4, 14, 9, 13, 5, 7, 16}, {2, 48, 7, 102, 7, 103, 6, 101, 0, 100, 27, 198, 2, 199, 26, 98}, {5, 4, 7, 0, 3, 2, 6, 17, 16, 19, 1, 18, 13, 7, 12, 5}, {0, 59, 2, 117, 6, 116, 15, 20, 3, 56, 43, 115, 4, 42, 11, 114}, {13, 22, 12, 15, 14, 47, 46, 1, 10, 13, 4, 12, 5, 4, 7, 0}, {0, 14, 15, 57, 4, 31, 11, 59, 6, 56, 10, 30, 2, 116, 6, 117}, {0, 12, 21, 3, 3, 20, 23, 7, 2, 22, 13, 17, 2, 16, 19, 18}, {5, 8, 13, 10, 3, 15, 28, 4, 2, 29, 25, 24, 0, 9, 3, 11}, {5, 4, 11, 10, 17, 13, 16, 19, 1, 12, 18, 29, 0, 28, 3, 15}}, {{1, 7, 1, 11, 2, 0, 6, 18, 6, 17, 1, 14, 10, 16, 19, 15}, {4, 3, 7, 0, 12, 2, 2, 10, 13, 46, 26, 47, 27, 12, 7, 22}, {0, 1, 24, 25, 3, 15, 8, 5, 4, 10, 18, 19, 11, 13, 29, 28}, {2, 13, 0, 16, 3, 10, 1, 31, 12, 30, 22, 17, 1, 14, 9, 23}, {10, 9, 3, 14, 17, 16, 1, 4, 12, 13, 15, 1, 22, 23, 0, 5}, {15, 7, 2, 13, 13, 48, 2, 49, 0, 3, 5, 14, 8, 25, 9, 12}, {12, 1, 0, 10, 5, 8, 8, 28, 15, 3, 9, 13, 1, 11, 9, 29}, {3, 5, 12, 8, 0, 38, 9, 39, 5, 14, 1, 13, 15, 8, 1, 18}, {4, 21, 15, 5, 6, 1, 1, 6, 4, 56, 29, 20, 11, 57, 7, 0}, {14, 10, 6, 1, 15, 7, 5, 6, 8, 22, 4, 23, 9, 1, 1, 0}, {12, 3, 0, 15, 2, 1, 17, 11, 14, 13, 5, 16, 9, 10, 4, 3}, {2, 2, 9, 1, 5, 13, 7, 7, 6, 14, 0, 16, 12, 6, 17, 15}, {10, 12, 1, 3, 27, 5, 4, 8, 9, 0, 15, 14, 22, 23, 26, 1}, {0, 8, 7, 11, 3, 23, 6, 2, 9, 20, 10, 44, 4, 21, 3, 45}, {2, 4, 25, 11, 15, 0, 24, 14, 3, 13, 20, 5, 7, 6, 4, 21}, {7, 1, 2, 1, 4, 0, 12, 27, 11, 43, 26, 84, 7, 20, 6, 85}}, {{1, 0, 7, 4, 6, 26, 14, 25, 2, 31, 27, 49, 5, 60, 61, 48}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}}, {{1, 7, 5, 6, 4, 11, 4, 55, 0, 26, 24, 51, 7, 54, 10, 50}, {3, 0, 5, 2, 7, 19, 6, 8, 9, 33, 5, 18, 17, 65, 3, 64}, {1, 6, 30, 29, 5, 1, 3, 2, 9, 0, 115, 112, 31, 8, 113, 114}, {7, 0, 9, 22, 6, 10, 23, 17, 2, 4, 5, 12, 3, 16, 7, 13}, {1, 9, 5, 8, 29, 123, 28, 12, 6, 31, 0, 2, 7, 13, 60, 122}, {6, 23, 7, 10, 19, 33, 22, 18, 3, 10, 0, 11, 9, 32, 8, 17}, {7, 6, 17, 1, 5, 16, 17, 37, 3, 5, 0, 19, 1, 9, 36, 16}, {7, 15, 12, 6, 10, 55, 26, 108, 0, 5, 9, 11, 4, 109, 8, 14}, {3, 9, 6, 16, 5, 1, 7, 0, 1, 35, 34, 16, 5, 18, 19, 17}, {0, 27, 5, 24, 7, 26, 4, 14, 6, 19, 25, 8, 15, 36, 5, 37}, {5, 2, 7, 1, 6, 3, 9, 8, 14, 0, 62, 126, 30, 2, 6, 127}, {7, 13, 11, 97, 1, 2, 1, 7, 4, 96, 6, 0, 10, 25, 49, 1}, {2, 7, 2, 1, 13, 119, 0, 13, 15, 12, 12, 2, 28, 118, 58, 3}, {1, 3, 2, 14, 31, 97, 30, 0, 13, 1, 5, 25, 4, 96, 49, 1}, {0, 1, 9, 29, 15, 26, 25, 28, 24, 11, 43, 85, 8, 27, 84, 20}, {7, 12, 0, 3, 11, 26, 2, 9, 10, 7, 109, 108, 8, 6, 55, 2}}, {{2, 0, 12, 31, 13, 15, 30, 14, 1, 29, 28, 12, 4, 10, 13, 11}, {7, 8, 2, 3, 13, 13, 0, 19, 10, 12, 12, 5, 7, 4, 11, 18}, {3, 2, 28, 29, 1, 15, 19, 25, 10, 13, 17, 16, 11, 0, 18, 24}, {5, 12, 4, 27, 3, 9, 8, 26, 15, 11, 29, 10, 0, 3, 2, 28}, {3, 9, 0, 13, 29, 16, 23, 20, 2, 12, 1, 15, 28, 17, 22, 21}, {15, 1, 3, 8, 0, 59, 5, 18, 1, 4, 5, 13, 28, 58, 12, 19}, {4, 5, 2, 12, 6, 30, 26, 7, 0, 2, 29, 31, 28, 7, 6, 27}, {4, 14, 3, 4, 7, 10, 2, 24, 5, 6, 15, 1, 13, 25, 0, 11}, {7, 12, 0, 5, 3, 11, 13, 9, 4, 16, 20, 6, 2, 17, 21, 7}, {5, 30, 2, 7, 4, 29, 1, 13, 31, 0, 6, 1, 1, 24, 28, 25}, {3, 15, 29, 28, 0, 4, 2, 5, 4, 13, 20, 6, 11, 12, 7, 21}, {2, 10, 8, 28, 6, 1, 1, 7, 11, 29, 0, 39, 15, 6, 18, 38}, {2, 14, 4, 1, 30, 31, 1, 0, 7, 6, 12, 10, 26, 22, 27, 23}, {3, 12, 4, 14, 5, 21, 15, 1, 11, 20, 1, 4, 27, 52, 0, 53}, {3, 5, 4, 8, 12, 14, 27, 0, 9, 15, 11, 1, 2, 3, 10, 26}, {7, 0, 1, 11, 6, 5, 10, 26, 9, 4, 8, 25, 7, 55, 24, 54}}, {{30, 5, 31, 10, 0, 1, 7, 12, 4, 8, 6, 13, 9, 11, 14, 1}, {5, 22, 12, 27, 6, 26, 1, 31, 7, 23, 0, 4, 14, 30, 4, 10}, {0, 11, 12, 13, 10, 1, 25, 1, 13, 2, 24, 28, 15, 4, 29, 7}, {8, 2, 31, 14, 0, 9, 4, 30, 14, 6, 3, 15, 5, 13, 12, 5}, {0, 7, 11, 15, 12, 27, 26, 4, 12, 14, 1, 4, 13, 1, 5, 10}, {8, 2, 0, 5, 3, 14, 9, 30, 13, 6, 5, 14, 4, 15, 12, 31}, {13, 15, 29, 6, 28, 7, 16, 17, 0, 5, 3, 9, 4, 12, 2, 5}, {13, 5, 4, 31, 7, 30, 2, 22, 4, 12, 14, 3, 0, 6, 10, 23}, {4, 10, 9, 14, 12, 15, 0, 3, 16, 17, 27, 2, 26, 3, 5, 11}, {7, 19, 0, 5, 13, 3, 5, 12, 2, 18, 6, 31, 8, 30, 14, 4}, {10, 0, 29, 31, 1, 3, 4, 12, 30, 11, 18, 28, 8, 13, 19, 5}, {14, 5, 10, 31, 4, 13, 12, 11, 6, 30, 2, 8, 0, 3, 7, 9}, {10, 15, 2, 4, 0, 3, 2, 13, 29, 6, 7, 12, 22, 28, 23, 1}, {0, 7, 4, 13, 11, 2, 12, 4, 5, 21, 15, 6, 29, 20, 3, 28}, {15, 4, 6, 12, 11, 13, 2, 3, 7, 0, 21, 5, 28, 4, 20, 29}, {4, 11, 14, 7, 13, 6, 5, 25, 0, 3, 2, 30, 10, 31, 4, 24}}, {{0, 10, 30, 23, 31, 27, 59, 17, 12, 58, 28, 19, 22, 18, 16, 26}, {11, 6, 14, 26, 0, 31, 2, 9, 2, 7, 12, 27, 10, 30, 3, 8}, {5, 12, 22, 26, 9, 14, 23, 0, 10, 1, 27, 1, 15, 3, 4, 8}, {6, 0, 31, 18, 13, 5, 1, 19, 14, 4, 7, 30, 5, 1, 12, 8}, {1, 14, 7, 15, 18, 27, 19, 3, 6, 2, 12, 5, 26, 2, 0, 8}, {12, 2, 0, 9, 31, 22, 3, 30, 14, 5, 3, 10, 8, 23, 13, 4}, {8, 14, 2, 4, 31, 10, 22, 30, 0, 3, 3, 12, 9, 13, 23, 5}, {12, 3, 6, 0, 7, 23, 1, 22, 2, 14, 15, 10, 13, 8, 9, 2}, {2, 31, 0, 11, 10, 7, 2, 4, 13, 12, 3, 30, 28, 29, 12, 13}, {10, 2, 14, 5, 15, 8, 3, 11, 3, 1, 9, 26, 4, 0, 12, 27}, {10, 14, 2, 5, 15, 3, 4, 12, 0, 9, 23, 1, 8, 13, 22, 3}, {14, 3, 10, 1, 2, 12, 13, 7, 9, 0, 2, 30, 11, 6, 8, 31}, {6, 14, 13, 5, 19, 4, 3, 12, 2, 5, 7, 0, 18, 30, 31, 8}, {15, 8, 2, 11, 10, 2, 14, 7, 6, 0, 13, 3, 1, 24, 9, 25}, {13, 2, 9, 14, 8, 12, 0, 7, 3, 11, 31, 2, 1, 10, 30, 6}, {1, 10, 14, 12, 11, 7, 8, 1, 13, 6, 5, 0, 9, 31, 4, 30}}, {{1, 6, 1, 9, 2, 0, 6, 23, 7, 16, 1, 15, 10, 14, 22, 17}, {6, 1, 4, 10, 2, 31, 1, 7, 28, 0, 30, 1, 29, 12, 11, 13}, {2, 1, 0, 7, 15, 14, 1, 6, 9, 13, 20, 21, 8, 11, 24, 25}, {0, 8, 7, 28, 2, 10, 9, 29, 12, 2, 3, 26, 15, 11, 6, 27}, {2, 9, 0, 10, 25, 16, 6, 24, 1, 13, 14, 11, 30, 17, 7, 31}, {13, 3, 0, 10, 7, 24, 2, 30, 14, 8, 2, 11, 9, 25, 6, 31}, {15, 1, 6, 5, 7, 8, 25, 28, 0, 13, 4, 9, 10, 11, 24, 29}, {0, 9, 11, 29, 7, 28, 30, 2, 2, 12, 13, 8, 10, 3, 6, 31}, {5, 2, 14, 0, 3, 1, 15, 9, 13, 8, 3, 16, 12, 9, 5, 17}, {14, 8, 0, 3, 15, 7, 2, 11, 2, 20, 6, 21, 9, 26, 12, 27}, {11, 15, 6, 5, 0, 1, 4, 7, 10, 9, 24, 28, 8, 13, 25, 29}, {0, 5, 10, 4, 3, 11, 14, 3, 8, 30, 31, 25, 13, 2, 9, 24}, {15, 9, 14, 2, 6, 27, 8, 7, 10, 1, 12, 11, 2, 26, 3, 0}, {2, 6, 1, 8, 14, 7, 12, 0, 9, 20, 15, 27, 1, 26, 11, 21}, {0, 1, 7, 12, 8, 13, 4, 6, 10, 14, 23, 30, 5, 9, 22, 31}, {2, 10, 12, 1, 14, 8, 9, 6, 13, 3, 7, 0, 11, 31, 2, 30}}, {{1, 7, 4, 12, 3, 22, 4, 10, 0, 11, 23, 53, 10, 52, 55, 54}, {1, 5, 7, 13, 8, 0, 9, 24, 1, 11, 6, 51, 4, 10, 7, 50}, {6, 4, 11, 7, 1, 14, 1, 30, 6, 31, 10, 21, 4, 0, 11, 20}, {6, 15, 1, 7, 2, 10, 8, 1, 6, 28, 22, 1, 9, 29, 23, 0}, {6, 6, 1, 4, 15, 15, 5, 14, 4, 1, 11, 28, 10, 58, 0, 59}, {1, 0, 4, 12, 10, 12, 5, 23, 14, 4, 13, 30, 7, 13, 31, 22}, {3, 15, 11, 0, 10, 5, 1, 24, 13, 14, 9, 8, 2, 3, 25, 4}, {5, 15, 1, 9, 12, 26, 0, 27, 14, 7, 8, 6, 4, 11, 1, 10}, {2, 30, 14, 11, 3, 26, 4, 10, 1, 55, 1, 62, 12, 54, 0, 63}, {3, 1, 15, 12, 14, 0, 2, 9, 2, 20, 3, 26, 8, 27, 11, 21}, {1, 11, 8, 4, 0, 14, 7, 9, 15, 5, 26, 20, 12, 6, 21, 27}, {3, 1, 12, 11, 4, 10, 14, 4, 11, 26, 27, 0, 15, 3, 2, 10}, {6, 10, 1, 7, 15, 9, 9, 29, 0, 12, 11, 28, 8, 8, 5, 13}, {1, 9, 2, 11, 14, 7, 10, 30, 12, 0, 13, 6, 31, 17, 1, 16}, {2, 14, 9, 12, 10, 13, 6, 3, 0, 7, 2, 30, 11, 31, 16, 17}, {6, 8, 14, 2, 2, 1, 7, 3, 9, 30, 0, 21, 11, 20, 6, 31}}, {{1, 0, 6, 8, 5, 61, 28, 60, 1, 59, 62, 117, 9, 116, 127, 126}, {0, 4, 6, 11, 28, 63, 30, 62, 59, 80, 58, 81, 43, 83, 42, 82}, {1, 5, 14, 0, 4, 13, 30, 3, 3, 2, 24, 125, 2, 63, 25, 124}, {2, 3, 0, 30, 1, 4, 12, 29, 31, 52, 10, 57, 27, 11, 56, 53}, {2, 11, 0, 10, 3, 10, 4, 11, 7, 51, 3, 4, 13, 100, 24, 101}, {3, 14, 5, 8, 4, 31, 5, 27, 1, 26, 12, 19, 0, 18, 1, 30}, {0, 7, 9, 25, 15, 24, 11, 35, 5, 4, 14, 10, 13, 16, 6, 34}, {1, 6, 0, 10, 7, 27, 26, 30, 2, 8, 14, 31, 12, 23, 9, 22}, {0, 58, 19, 32, 6, 36, 28, 34, 5, 75, 59, 66, 15, 67, 35, 74}, {5, 61, 14, 2, 2, 9, 0, 12, 8, 7, 6, 31, 27, 60, 3, 26}, {3, 15, 10, 28, 1, 2, 13, 0, 11, 59, 19, 8, 12, 1, 18, 58}, {15, 11, 14, 4, 0, 10, 9, 3, 13, 6, 8, 14, 12, 15, 2, 5}, {2, 11, 12, 26, 3, 125, 30, 20, 0, 21, 4, 127, 14, 124, 27, 126}, {15, 4, 5, 6, 8, 13, 12, 1, 5, 19, 14, 18, 15, 14, 1, 0}, {4, 1, 13, 20, 2, 11, 7, 12, 15, 6, 28, 2, 0, 29, 3, 21}, {3, 0, 13, 1, 10, 28, 9, 12, 15, 11, 10, 9, 11, 8, 8, 29}}, {{1, 0, 6, 4, 7, 53, 5, 55, 2, 51, 24, 105, 7, 104, 54, 50}, {0, 5, 7, 13, 19, 48, 25, 36, 16, 99, 35, 197, 34, 196, 75, 74}, {3, 3, 0, 9, 2, 10, 6, 16, 2, 44, 35, 15, 23, 45, 14, 34}, {3, 3, 5, 0, 2, 19, 7, 4, 5, 34, 35, 64, 18, 65, 6, 33}, {0, 58, 4, 59, 11, 112, 57, 83, 6, 113, 30, 82, 31, 80, 21, 81}, {1, 12, 0, 11, 15, 8, 27, 57, 19, 56, 26, 18, 21, 40, 41, 29}, {4, 14, 10, 15, 6, 14, 2, 31, 6, 11, 0, 7, 2, 6, 1, 30}, {6, 1, 4, 5, 10, 60, 0, 8, 3, 29, 1, 11, 28, 9, 61, 31}, {0, 35, 25, 36, 7, 34, 19, 37, 5, 97, 49, 64, 13, 96, 33, 65}, {6, 4, 1, 21, 4, 20, 3, 31, 0, 44, 30, 91, 14, 90, 23, 5}, {0, 6, 20, 9, 7, 5, 8, 4, 23, 22, 27, 15, 12, 14, 21, 26}, {2, 0, 29, 28, 1, 7, 6, 9, 13, 12, 8, 11, 20, 43, 15, 42}, {3, 30, 6, 14, 4, 3, 11, 21, 5, 63, 4, 2, 1, 62, 0, 20}, {3, 19, 5, 16, 2, 0, 13, 12, 15, 18, 1, 29, 35, 34, 57, 56}, {5, 3, 0, 2, 2, 13, 9, 29, 12, 28, 17, 16, 61, 60, 31, 3}, {0, 14, 13, 12, 22, 63, 4, 10, 7, 62, 6, 46, 2, 95, 30, 94}}, {{1, 7, 6, 3, 1, 5, 0, 13, 2, 12, 15, 18, 2, 19, 14, 8}, {1, 0, 2, 14, 30, 24, 27, 52, 124, 100, 63, 203, 51, 202, 53, 125}, {3, 1, 0, 45, 4, 2, 21, 20, 6, 89, 15, 29, 23, 28, 177, 176}, {7, 4, 13, 24, 0, 25, 5, 4, 7, 12, 21, 26, 11, 20, 55, 54}, {0, 43, 14, 45, 15, 92, 9, 93, 6, 177, 20, 42, 8, 176, 47, 89}, {1, 9, 0, 4, 3, 11, 7, 10, 25, 24, 27, 26, 21, 8, 11, 20}, {6, 5, 2, 0, 7, 3, 7, 8, 4, 2, 15, 5, 6, 14, 6, 9}, {1, 13, 0, 12, 3, 21, 20, 23, 2, 15, 22, 14, 17, 16, 19, 18}, {0, 64, 39, 36, 7, 65, 17, 74, 6, 301, 38, 601, 5, 600, 33, 151}, {9, 8, 6, 11, 10, 15, 5, 4, 7, 6, 1, 0, 3, 2, 29, 28}, {9, 8, 8, 11, 1, 19, 6, 15, 0, 3, 18, 57, 10, 29, 5, 56}, {1, 9, 8, 11, 0, 10, 29, 3, 2, 28, 31, 30, 25, 24, 27, 26}, {3, 9, 6, 23, 0, 28, 5, 8, 4, 58, 10, 118, 1, 119, 22, 15}, {5, 29, 4, 28, 31, 30, 25, 24, 1, 27, 0, 26, 5, 4, 7, 6}, {7, 2, 6, 0, 15, 14, 9, 3, 2, 6, 21, 20, 1, 23, 8, 22}, {3, 1, 0, 3, 2, 21, 2, 20, 7, 23, 22, 17, 6, 16, 19, 18}}, {{1, 1, 0, 17, 5, 72, 16, 151, 3, 146, 150, 294, 19, 295, 148, 149}, {1, 1, 1, 2, 12, 27, 1, 26, 1, 0, 3, 2, 29, 28, 31, 30}, {3, 4, 2, 28, 5, 15, 0, 9, 6, 8, 59, 58, 3, 21, 11, 20}, {0, 5, 2, 6, 15, 14, 13, 17, 16, 19, 18, 29, 12, 28, 31, 30}, {2, 51, 0, 50, 2, 48, 14, 99, 6, 98, 7, 27, 15, 105, 53, 104}, {14, 31, 30, 9, 8, 11, 6, 10, 5, 4, 7, 6, 1, 0, 3, 2}, {2, 49, 2, 48, 1, 51, 0, 50, 7, 13, 29, 28, 13, 12, 31, 30}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {1, 252, 29, 507, 2, 506, 60, 62, 0, 245, 127, 244, 6, 247, 28, 246}, {9, 8, 11, 10, 5, 4, 6, 7, 6, 1, 0, 3, 2, 15, 29, 28}, {1, 0, 3, 3, 2, 29, 2, 28, 31, 30, 25, 24, 27, 26, 5, 4}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {3, 5, 1, 4, 2, 7, 12, 6, 5, 1, 7, 0, 4, 3, 13, 2}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {29, 28, 2, 31, 30, 25, 24, 27, 26, 5, 4, 7, 1, 6, 1, 0}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}}, {{1, 7, 5, 75, 6, 297, 19, 596, 0, 296, 72, 1195, 8, 1194, 73, 299}, {1, 0, 29, 28, 31, 30, 25, 24, 27, 26, 21, 20, 23, 22, 9, 8}, {3, 5, 2, 4, 2, 7, 6, 1, 0, 3, 2, 29, 6, 28, 31, 30}, {14, 31, 30, 9, 6, 8, 11, 10, 5, 4, 7, 6, 1, 0, 3, 2}, {0, 126, 5, 255, 4, 254, 30, 105, 14, 104, 27, 107, 12, 106, 125, 124}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {2, 12, 27, 26, 5, 4, 7, 6, 1, 0, 3, 2, 29, 28, 31, 30}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {0, 33, 32, 35, 6, 34, 77, 76, 7, 79, 78, 73, 5, 72, 75, 74}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {3, 0, 3, 2, 13, 12, 15, 14, 2, 9, 8, 11, 3, 10, 5, 4}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}}, {{1, 0, 2, 24, 2, 105, 27, 104, 3, 107, 106, 101, 7, 100, 103, 102}, {2, 12, 27, 26, 5, 4, 7, 6, 1, 0, 3, 2, 29, 28, 31, 30}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {7, 12, 27, 26, 9, 8, 11, 10, 5, 4, 7, 6, 1, 0, 3, 2}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {1, 2, 7, 6, 2, 29, 28, 31, 1, 30, 25, 24, 27, 26, 1, 0}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {2, 12, 27, 26, 5, 4, 7, 6, 1, 0, 3, 2, 29, 28, 31, 30}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}}, {{1, 5, 13, 17, 1, 16, 19, 18, 1, 29, 28, 31, 0, 30, 25, 24}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {2, 12, 27, 26, 5, 4, 7, 6, 1, 0, 3, 2, 29, 28, 31, 30}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}}, {{1, 5, 4, 7, 6, 1, 0, 3, 2, 2, 29, 28, 31, 30, 13, 12}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}}, {{5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}}, {{5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}}, {{5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}}, {{5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}} }; unsigned int codeBookLen[36][16][16] = { {{4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}}, {{1, 3, 4, 6, 4, 6, 6, 7, 3, 7, 6, 9, 5, 8, 7, 9}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}}, {{3, 3, 4, 4, 4, 5, 4, 5, 3, 4, 4, 5, 4, 5, 5, 5}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}}, {{1, 3, 4, 5, 4, 7, 5, 8, 3, 8, 7, 10, 5, 9, 8, 10}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}}, {{1, 4, 4, 5, 4, 6, 6, 6, 3, 6, 6, 6, 5, 7, 6, 7}, {2, 4, 2, 4, 4, 6, 4, 6, 5, 7, 4, 7, 5, 7, 4, 7}, {3, 3, 5, 4, 3, 3, 5, 4, 4, 4, 6, 6, 4, 4, 6, 6}, {2, 3, 4, 4, 3, 4, 4, 5, 4, 6, 6, 7, 4, 6, 5, 7}, {3, 4, 3, 4, 5, 6, 5, 6, 3, 4, 3, 4, 4, 6, 4, 6}, {3, 5, 2, 4, 6, 7, 5, 5, 3, 5, 3, 4, 6, 7, 4, 6}, {3, 3, 4, 4, 4, 5, 5, 6, 3, 3, 4, 5, 4, 5, 5, 6}, {2, 4, 3, 4, 4, 5, 5, 7, 3, 4, 4, 5, 5, 6, 5, 7}, {2, 5, 4, 5, 2, 4, 4, 4, 4, 7, 6, 7, 4, 7, 6, 7}, {3, 5, 3, 5, 3, 5, 2, 4, 5, 8, 5, 6, 4, 8, 4, 7}, {4, 4, 5, 6, 2, 2, 4, 4, 6, 6, 7, 7, 4, 4, 6, 6}, {3, 4, 4, 5, 2, 4, 3, 4, 5, 7, 8, 8, 4, 5, 4, 6}, {2, 4, 3, 4, 4, 6, 4, 5, 3, 5, 4, 5, 5, 7, 5, 7}, {3, 5, 2, 4, 4, 8, 3, 4, 4, 6, 3, 6, 7, 8, 5, 6}, {2, 3, 4, 5, 3, 4, 4, 5, 4, 4, 6, 6, 5, 5, 6, 6}, {2, 3, 3, 4, 4, 5, 5, 5, 5, 5, 5, 6, 4, 5, 4, 6}}, {{1, 4, 4, 5, 4, 6, 5, 7, 3, 6, 6, 7, 5, 7, 6, 7}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}}, {{4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 8, 3, 7, 4, 7, 3, 7, 4, 8, 3, 7, 3, 7, 2, 6}, {4, 3, 8, 7, 4, 3, 7, 7, 4, 3, 8, 7, 3, 2, 7, 6}, {3, 5, 5, 7, 3, 5, 5, 6, 3, 5, 5, 7, 2, 4, 4, 5}, {4, 4, 4, 3, 8, 8, 7, 7, 3, 3, 3, 2, 7, 7, 7, 6}, {4, 6, 2, 5, 6, 8, 5, 8, 3, 5, 2, 4, 5, 7, 4, 6}, {4, 2, 6, 5, 6, 5, 7, 7, 3, 2, 6, 4, 5, 4, 6, 6}, {3, 5, 4, 5, 5, 7, 6, 7, 2, 3, 3, 5, 4, 6, 4, 6}, {4, 4, 4, 3, 3, 3, 3, 2, 8, 8, 7, 7, 7, 7, 7, 6}, {3, 7, 3, 6, 2, 6, 2, 4, 6, 9, 5, 8, 6, 9, 4, 6}, {4, 3, 6, 5, 2, 2, 5, 4, 6, 5, 8, 8, 5, 4, 7, 6}, {2, 5, 5, 7, 2, 3, 4, 5, 5, 6, 6, 7, 4, 5, 5, 6}, {3, 3, 3, 2, 6, 5, 5, 4, 5, 5, 4, 4, 7, 7, 6, 6}, {3, 6, 1, 4, 5, 7, 4, 6, 5, 8, 4, 6, 6, 8, 5, 6}, {3, 2, 5, 4, 5, 3, 6, 5, 4, 3, 7, 5, 6, 4, 7, 6}, {2, 3, 3, 5, 3, 5, 4, 5, 4, 5, 5, 6, 5, 6, 6, 6}}, {{1, 3, 4, 6, 3, 8, 6, 9, 3, 10, 8, 11, 6, 12, 8, 12}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}}, {{1, 3, 4, 5, 4, 7, 6, 7, 3, 7, 7, 8, 5, 9, 7, 9}, {1, 3, 2, 4, 6, 8, 6, 7, 8, 10, 8, 10, 8, 10, 8, 10}, {2, 2, 4, 4, 3, 4, 5, 5, 5, 6, 8, 8, 5, 5, 8, 8}, {1, 3, 3, 4, 4, 5, 5, 6, 7, 8, 8, 9, 6, 8, 7, 9}, {2, 5, 3, 5, 4, 7, 5, 6, 2, 6, 4, 6, 4, 8, 5, 8}, {3, 4, 2, 4, 4, 5, 3, 5, 5, 6, 3, 7, 6, 7, 5, 6}, {2, 3, 4, 4, 4, 4, 5, 5, 3, 5, 5, 6, 4, 7, 5, 7}, {2, 3, 3, 3, 4, 6, 4, 5, 4, 6, 5, 5, 6, 7, 5, 7}, {1, 6, 5, 7, 3, 7, 5, 7, 3, 9, 7, 9, 3, 9, 7, 9}, {3, 5, 2, 4, 3, 5, 3, 5, 5, 6, 6, 6, 5, 5, 4, 6}, {3, 4, 4, 6, 2, 4, 4, 5, 4, 6, 6, 7, 3, 5, 4, 7}, {3, 5, 5, 5, 3, 3, 4, 5, 5, 5, 5, 5, 3, 5, 3, 5}, {2, 7, 3, 5, 3, 8, 4, 8, 2, 8, 5, 7, 4, 9, 5, 9}, {3, 4, 3, 3, 4, 4, 4, 4, 5, 5, 5, 4, 4, 5, 5, 5}, {2, 4, 3, 6, 3, 5, 3, 7, 4, 5, 4, 8, 4, 6, 6, 8}, {2, 3, 4, 5, 3, 5, 4, 5, 5, 5, 5, 5, 4, 5, 5, 5}}, {{1, 4, 4, 5, 4, 5, 5, 6, 4, 6, 5, 6, 5, 6, 6, 6}, {2, 3, 3, 4, 4, 5, 4, 5, 5, 6, 4, 6, 5, 6, 4, 6}, {3, 3, 4, 5, 4, 3, 4, 5, 4, 4, 5, 5, 4, 4, 5, 5}, {3, 4, 4, 4, 3, 4, 4, 4, 4, 5, 5, 5, 3, 5, 5, 5}, {3, 4, 3, 4, 4, 5, 5, 5, 3, 4, 4, 4, 4, 5, 5, 5}, {3, 4, 3, 4, 4, 5, 4, 5, 4, 5, 3, 4, 5, 5, 4, 5}, {3, 3, 4, 4, 5, 4, 6, 5, 3, 3, 5, 4, 5, 4, 6, 5}, {3, 4, 4, 5, 4, 5, 4, 6, 3, 4, 3, 4, 4, 5, 4, 6}, {2, 5, 4, 5, 3, 4, 4, 4, 4, 6, 4, 6, 4, 6, 4, 6}, {4, 5, 3, 4, 3, 5, 2, 4, 5, 7, 4, 7, 5, 5, 4, 6}, {3, 3, 4, 5, 3, 3, 5, 4, 4, 5, 5, 6, 4, 4, 6, 5}, {3, 4, 4, 5, 2, 4, 4, 4, 4, 5, 5, 6, 4, 6, 5, 5}, {3, 4, 3, 4, 4, 5, 4, 5, 3, 5, 4, 5, 4, 5, 4, 5}, {3, 4, 3, 4, 4, 5, 4, 5, 4, 5, 3, 5, 4, 5, 4, 5}, {3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 4, 4, 5, 5}, {3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 6, 4, 5, 4, 6}}, {{1, 3, 4, 6, 4, 7, 6, 7, 3, 7, 6, 8, 5, 7, 7, 8}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}}, {{2, 3, 4, 5, 4, 5, 5, 5, 3, 5, 5, 5, 4, 5, 5, 5}, {2, 4, 3, 5, 4, 6, 3, 6, 4, 6, 4, 6, 4, 6, 4, 6}, {3, 3, 6, 6, 3, 3, 6, 5, 4, 4, 7, 7, 3, 3, 6, 6}, {3, 4, 5, 6, 3, 4, 5, 6, 3, 5, 5, 6, 2, 5, 5, 6}, {3, 4, 3, 4, 5, 6, 5, 6, 3, 4, 3, 3, 5, 6, 5, 6}, {3, 5, 3, 5, 5, 7, 4, 6, 3, 5, 2, 4, 5, 7, 5, 5}, {3, 3, 5, 4, 4, 5, 6, 6, 3, 3, 4, 4, 4, 4, 6, 6}, {3, 4, 4, 4, 5, 6, 6, 6, 2, 4, 3, 5, 4, 5, 5, 6}, {2, 4, 4, 4, 3, 4, 3, 4, 4, 6, 6, 6, 5, 6, 6, 6}, {3, 5, 3, 5, 3, 5, 2, 4, 5, 7, 5, 7, 4, 7, 4, 7}, {3, 3, 5, 5, 3, 2, 5, 4, 5, 5, 6, 7, 5, 4, 7, 5}, {3, 5, 4, 5, 2, 3, 3, 5, 4, 6, 7, 7, 4, 5, 6, 6}, {3, 3, 3, 3, 5, 5, 4, 4, 4, 4, 4, 5, 5, 6, 5, 6}, {3, 5, 2, 4, 3, 6, 3, 5, 4, 8, 4, 7, 6, 8, 4, 6}, {3, 2, 5, 5, 3, 3, 5, 5, 4, 4, 7, 5, 5, 5, 7, 6}, {2, 3, 4, 5, 4, 5, 4, 4, 3, 6, 6, 6, 4, 5, 5, 6}}, {{5, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3}, {4, 6, 4, 5, 4, 6, 3, 5, 4, 5, 3, 5, 3, 5, 3, 4}, {4, 4, 6, 5, 4, 3, 5, 5, 4, 3, 6, 5, 3, 3, 5, 4}, {4, 5, 5, 6, 3, 4, 4, 5, 3, 4, 4, 6, 3, 4, 4, 4}, {4, 4, 4, 3, 6, 6, 5, 5, 4, 3, 3, 3, 5, 5, 5, 4}, {4, 5, 3, 5, 5, 6, 5, 6, 3, 4, 2, 4, 5, 5, 4, 5}, {4, 3, 5, 4, 5, 4, 5, 5, 3, 3, 4, 4, 4, 4, 5, 5}, {3, 4, 4, 5, 4, 5, 5, 5, 3, 4, 3, 4, 4, 5, 4, 5}, {4, 4, 4, 3, 4, 3, 3, 3, 6, 6, 5, 5, 5, 5, 5, 4}, {4, 5, 3, 5, 3, 5, 2, 4, 5, 6, 4, 6, 5, 5, 4, 5}, {4, 3, 5, 4, 3, 3, 4, 4, 5, 4, 5, 5, 4, 4, 5, 5}, {3, 4, 4, 5, 3, 4, 4, 4, 4, 5, 5, 5, 3, 5, 4, 5}, {4, 3, 3, 3, 5, 4, 4, 4, 5, 4, 4, 4, 5, 5, 5, 5}, {3, 4, 3, 4, 4, 5, 4, 5, 4, 5, 3, 4, 5, 5, 4, 5}, {4, 2, 4, 4, 4, 4, 5, 5, 4, 4, 5, 4, 5, 4, 5, 5}, {2, 4, 4, 4, 4, 4, 4, 5, 4, 5, 4, 5, 4, 5, 5, 5}}, {{1, 3, 4, 7, 3, 9, 6, 10, 3, 11, 9, 13, 5, 12, 9, 13}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}}, {{1, 3, 4, 5, 4, 8, 5, 7, 3, 9, 7, 10, 5, 11, 7, 11}, {1, 3, 2, 4, 6, 9, 5, 8, 9, 11, 9, 11, 10, 10, 9, 10}, {2, 3, 3, 4, 2, 5, 4, 6, 6, 9, 6, 9, 5, 9, 7, 9}, {1, 3, 3, 4, 4, 6, 5, 5, 6, 8, 8, 8, 7, 8, 8, 8}, {2, 5, 3, 5, 3, 8, 4, 7, 2, 10, 5, 9, 4, 11, 6, 11}, {3, 6, 2, 4, 3, 7, 2, 5, 7, 6, 6, 6, 6, 6, 6, 5}, {2, 3, 3, 4, 3, 6, 4, 5, 4, 8, 5, 9, 4, 7, 5, 9}, {2, 5, 3, 4, 3, 4, 3, 5, 5, 6, 5, 6, 5, 6, 5, 6}, {1, 8, 6, 9, 2, 10, 6, 8, 3, 9, 7, 11, 4, 11, 7, 9}, {3, 4, 3, 5, 3, 5, 3, 5, 5, 5, 5, 5, 5, 5, 3, 5}, {2, 5, 6, 6, 3, 4, 6, 6, 2, 6, 6, 6, 3, 6, 6, 6}, {4, 5, 5, 4, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {2, 8, 4, 8, 3, 8, 4, 9, 2, 8, 4, 8, 3, 7, 5, 9}, {4, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 4}, {3, 6, 3, 6, 3, 5, 4, 6, 3, 6, 6, 6, 2, 6, 5, 6}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}}, {{1, 3, 4, 5, 4, 7, 6, 7, 3, 8, 7, 8, 5, 8, 7, 8}, {2, 2, 3, 3, 4, 5, 4, 4, 7, 9, 8, 8, 8, 10, 7, 10}, {2, 3, 3, 4, 4, 5, 4, 5, 4, 6, 5, 6, 4, 6, 5, 6}, {2, 4, 3, 4, 3, 3, 4, 4, 6, 7, 6, 7, 5, 6, 6, 6}, {2, 4, 4, 5, 3, 5, 4, 5, 3, 6, 4, 6, 4, 6, 5, 6}, {2, 3, 3, 3, 4, 5, 4, 6, 5, 5, 4, 6, 5, 7, 6, 7}, {3, 4, 3, 5, 3, 4, 4, 5, 4, 4, 4, 5, 5, 4, 5, 5}, {3, 3, 3, 4, 4, 5, 5, 5, 4, 5, 4, 4, 4, 5, 4, 5}, {2, 6, 4, 7, 3, 7, 4, 7, 2, 7, 5, 8, 3, 8, 5, 7}, {4, 4, 3, 4, 5, 5, 3, 5, 5, 5, 3, 5, 5, 4, 5, 3}, {2, 6, 3, 7, 3, 7, 4, 5, 3, 6, 6, 7, 3, 6, 4, 7}, {4, 5, 4, 4, 4, 6, 6, 3, 4, 5, 3, 5, 4, 4, 4, 3}, {2, 5, 4, 6, 3, 6, 4, 6, 3, 6, 4, 6, 3, 7, 4, 7}, {3, 4, 5, 4, 3, 5, 5, 3, 3, 5, 4, 5, 4, 5, 5, 5}, {3, 4, 4, 6, 3, 4, 5, 5, 3, 5, 5, 5, 3, 4, 4, 6}, {3, 4, 5, 5, 5, 4, 5, 5, 3, 4, 5, 5, 3, 5, 3, 4}}, {{1, 4, 4, 5, 4, 5, 5, 6, 4, 6, 5, 6, 5, 6, 6, 6}, {3, 4, 3, 3, 4, 4, 3, 4, 5, 6, 5, 6, 5, 5, 4, 5}, {3, 3, 5, 5, 3, 4, 4, 4, 4, 4, 5, 5, 4, 4, 5, 5}, {3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 5, 3, 4, 4, 5}, {4, 4, 3, 4, 5, 5, 4, 4, 4, 4, 4, 3, 5, 5, 4, 4}, {4, 4, 3, 4, 5, 6, 4, 6, 3, 4, 3, 4, 4, 5, 4, 5}, {4, 3, 4, 4, 4, 4, 5, 5, 4, 3, 4, 4, 4, 4, 5, 5}, {3, 4, 4, 4, 4, 6, 5, 6, 3, 4, 3, 4, 4, 5, 4, 5}, {3, 5, 4, 4, 3, 4, 3, 4, 4, 6, 5, 5, 4, 6, 4, 4}, {4, 5, 3, 4, 4, 4, 3, 4, 4, 6, 4, 6, 4, 5, 3, 5}, {4, 3, 4, 4, 3, 3, 5, 4, 4, 4, 6, 5, 4, 4, 6, 5}, {3, 4, 4, 4, 3, 4, 3, 4, 4, 6, 4, 5, 4, 5, 5, 6}, {4, 4, 3, 3, 5, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 4}, {3, 4, 3, 5, 3, 5, 3, 4, 4, 6, 4, 6, 4, 6, 4, 6}, {3, 3, 5, 4, 4, 3, 5, 4, 4, 4, 5, 5, 4, 4, 5, 5}, {3, 3, 3, 4, 3, 4, 4, 5, 4, 6, 5, 7, 4, 5, 4, 7}}, {{1, 3, 4, 5, 4, 7, 6, 7, 3, 7, 7, 8, 5, 8, 8, 8}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}}, {{1, 4, 4, 5, 4, 6, 5, 7, 3, 6, 6, 7, 5, 7, 6, 7}, {2, 3, 3, 4, 4, 6, 4, 5, 4, 6, 4, 6, 5, 7, 4, 7}, {2, 3, 5, 5, 3, 3, 5, 5, 4, 4, 7, 7, 5, 4, 7, 7}, {3, 3, 4, 5, 3, 4, 5, 5, 3, 5, 5, 6, 3, 5, 5, 6}, {2, 4, 3, 4, 5, 7, 5, 6, 3, 5, 3, 4, 5, 6, 6, 7}, {3, 5, 3, 4, 5, 7, 5, 5, 3, 5, 2, 5, 5, 7, 4, 6}, {3, 3, 5, 3, 4, 5, 6, 6, 3, 3, 4, 5, 4, 5, 6, 6}, {3, 5, 4, 4, 4, 6, 5, 7, 2, 4, 4, 4, 4, 7, 4, 5}, {2, 4, 4, 5, 3, 4, 4, 4, 3, 6, 6, 6, 4, 6, 6, 6}, {2, 5, 3, 5, 3, 5, 3, 5, 4, 6, 5, 5, 5, 7, 4, 7}, {3, 3, 5, 4, 3, 3, 4, 4, 4, 4, 6, 7, 5, 4, 5, 7}, {3, 4, 4, 7, 2, 4, 4, 5, 3, 7, 5, 5, 4, 5, 6, 5}, {2, 4, 3, 3, 4, 7, 4, 5, 4, 5, 4, 5, 5, 7, 6, 5}, {2, 4, 2, 4, 5, 7, 5, 5, 4, 4, 5, 5, 5, 7, 6, 5}, {2, 2, 4, 5, 4, 5, 5, 5, 5, 4, 6, 7, 4, 5, 7, 5}, {3, 4, 3, 3, 4, 5, 3, 4, 4, 5, 7, 7, 4, 5, 6, 4}}, {{2, 3, 4, 5, 4, 5, 5, 5, 3, 5, 5, 5, 4, 5, 5, 5}, {3, 4, 3, 4, 4, 5, 3, 5, 4, 5, 4, 5, 4, 5, 4, 5}, {3, 3, 5, 5, 3, 4, 5, 5, 4, 4, 5, 5, 4, 3, 5, 5}, {3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 5, 3, 4, 4, 5}, {3, 4, 3, 4, 5, 5, 5, 5, 3, 4, 3, 4, 5, 5, 5, 5}, {4, 4, 3, 4, 4, 6, 4, 5, 3, 4, 3, 4, 5, 6, 4, 5}, {3, 3, 4, 4, 4, 5, 5, 5, 3, 3, 5, 5, 5, 4, 5, 5}, {3, 4, 4, 4, 4, 5, 4, 5, 3, 4, 4, 4, 4, 5, 4, 5}, {3, 4, 3, 4, 3, 4, 4, 4, 4, 5, 5, 5, 4, 5, 5, 5}, {3, 5, 3, 4, 3, 5, 3, 4, 5, 5, 4, 5, 4, 5, 5, 5}, {3, 4, 5, 5, 3, 3, 4, 4, 4, 4, 5, 5, 4, 4, 5, 5}, {3, 4, 4, 5, 3, 3, 4, 4, 4, 5, 4, 6, 4, 4, 5, 6}, {3, 4, 3, 3, 5, 5, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5}, {3, 4, 3, 4, 4, 5, 4, 4, 4, 5, 3, 4, 5, 6, 4, 6}, {3, 3, 4, 4, 4, 4, 5, 4, 4, 4, 5, 4, 4, 4, 5, 5}, {3, 3, 3, 4, 4, 4, 4, 5, 4, 4, 4, 5, 4, 6, 5, 6}}, {{5, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3}, {4, 5, 4, 5, 4, 5, 3, 5, 4, 5, 3, 4, 4, 5, 3, 4}, {4, 4, 5, 5, 4, 3, 5, 4, 4, 3, 5, 5, 4, 3, 5, 4}, {4, 4, 5, 5, 3, 4, 4, 5, 4, 4, 4, 5, 3, 4, 4, 4}, {4, 4, 4, 4, 5, 5, 5, 4, 4, 4, 3, 3, 5, 4, 4, 4}, {4, 4, 3, 4, 4, 5, 4, 5, 4, 4, 3, 4, 4, 5, 4, 5}, {4, 4, 5, 4, 5, 4, 5, 5, 3, 3, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 5, 4, 5, 4, 5, 3, 4, 4, 4, 3, 4, 4, 5}, {4, 4, 4, 4, 4, 4, 3, 3, 5, 5, 5, 4, 5, 4, 4, 4}, {4, 5, 3, 4, 4, 4, 3, 4, 4, 5, 4, 5, 4, 5, 4, 4}, {4, 3, 5, 5, 3, 3, 4, 4, 5, 4, 5, 5, 4, 4, 5, 4}, {4, 4, 4, 5, 3, 4, 4, 4, 4, 5, 4, 5, 3, 4, 4, 5}, {4, 4, 3, 3, 4, 4, 4, 4, 5, 4, 4, 4, 5, 5, 5, 4}, {3, 4, 3, 4, 4, 4, 4, 4, 4, 5, 4, 4, 5, 5, 4, 5}, {4, 3, 4, 4, 4, 4, 4, 4, 4, 3, 5, 4, 5, 4, 5, 5}, {3, 4, 4, 4, 4, 4, 4, 5, 3, 4, 4, 5, 4, 5, 4, 5}}, {{1, 4, 5, 5, 5, 5, 6, 5, 4, 6, 5, 5, 5, 5, 5, 5}, {4, 5, 4, 5, 3, 5, 3, 4, 4, 5, 4, 5, 4, 5, 3, 4}, {4, 4, 5, 5, 4, 4, 5, 4, 4, 3, 5, 4, 4, 3, 4, 4}, {4, 4, 5, 5, 4, 4, 4, 5, 4, 4, 4, 5, 3, 3, 4, 4}, {4, 4, 4, 4, 5, 5, 5, 4, 4, 3, 4, 3, 5, 4, 4, 4}, {4, 4, 3, 4, 5, 5, 4, 5, 4, 4, 3, 4, 4, 5, 4, 4}, {4, 4, 4, 4, 5, 4, 5, 5, 3, 3, 4, 4, 4, 4, 5, 4}, {4, 4, 4, 4, 4, 5, 4, 5, 3, 4, 4, 4, 4, 4, 4, 4}, {4, 5, 3, 4, 4, 4, 3, 3, 5, 5, 4, 5, 5, 5, 4, 4}, {4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 5, 4, 4, 4, 5}, {4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 5, 4, 4, 4, 5, 4}, {4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 5}, {4, 4, 4, 3, 5, 4, 4, 4, 4, 4, 4, 3, 5, 5, 5, 4}, {4, 4, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 5}, {4, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 5, 4}, {3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 5}}, {{1, 4, 4, 5, 4, 5, 5, 6, 4, 6, 5, 6, 5, 6, 6, 6}, {3, 4, 3, 4, 3, 5, 3, 4, 5, 5, 5, 5, 5, 5, 4, 5}, {3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 4, 4, 5, 5}, {3, 4, 4, 5, 3, 4, 4, 5, 4, 4, 4, 5, 4, 4, 4, 5}, {3, 4, 3, 4, 5, 5, 4, 5, 3, 4, 4, 4, 5, 5, 4, 5}, {4, 4, 3, 4, 4, 5, 4, 5, 4, 4, 3, 4, 4, 5, 4, 5}, {4, 3, 4, 4, 4, 4, 5, 5, 3, 4, 4, 4, 4, 4, 5, 5}, {3, 4, 4, 5, 4, 5, 5, 4, 3, 4, 4, 4, 4, 4, 4, 5}, {3, 4, 4, 4, 3, 4, 4, 4, 4, 5, 4, 5, 4, 5, 4, 5}, {4, 4, 3, 4, 4, 4, 3, 4, 4, 5, 4, 5, 4, 5, 4, 5}, {4, 4, 4, 4, 3, 3, 4, 4, 4, 4, 5, 5, 4, 4, 5, 5}, {3, 4, 4, 4, 3, 4, 4, 4, 4, 5, 5, 5, 4, 4, 4, 5}, {4, 4, 4, 3, 4, 5, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4}, {3, 4, 3, 4, 4, 4, 4, 4, 4, 5, 4, 5, 4, 5, 4, 5}, {3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 4, 4, 5, 5}, {3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 5}}, {{1, 4, 4, 5, 4, 6, 5, 6, 3, 6, 6, 7, 5, 7, 7, 7}, {2, 3, 3, 4, 4, 4, 4, 5, 4, 6, 5, 6, 5, 6, 5, 6}, {3, 3, 4, 4, 3, 4, 4, 5, 4, 5, 5, 5, 4, 4, 5, 5}, {3, 4, 3, 4, 3, 4, 4, 4, 4, 5, 5, 5, 4, 5, 5, 5}, {3, 4, 3, 4, 4, 5, 4, 5, 3, 4, 4, 5, 4, 6, 4, 6}, {3, 3, 3, 4, 4, 5, 4, 5, 4, 4, 4, 5, 4, 5, 5, 5}, {3, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 5, 4}, {3, 4, 3, 4, 4, 5, 4, 5, 4, 4, 4, 4, 4, 5, 4, 5}, {2, 5, 4, 5, 3, 5, 4, 5, 3, 6, 4, 6, 4, 6, 4, 6}, {3, 4, 4, 4, 4, 4, 3, 4, 4, 5, 4, 5, 4, 5, 4, 5}, {3, 4, 4, 4, 3, 4, 4, 4, 4, 4, 5, 5, 4, 4, 5, 5}, {3, 4, 4, 5, 3, 4, 4, 4, 4, 5, 5, 4, 4, 4, 4, 5}, {3, 4, 3, 4, 4, 5, 4, 5, 3, 5, 4, 5, 4, 5, 4, 5}, {3, 4, 3, 4, 4, 4, 4, 5, 4, 4, 4, 4, 5, 5, 4, 5}, {3, 4, 4, 4, 4, 4, 4, 4, 3, 4, 4, 5, 4, 5, 5, 5}, {3, 4, 4, 4, 3, 4, 4, 4, 4, 5, 4, 5, 4, 5, 4, 5}}, {{1, 3, 4, 5, 4, 7, 6, 7, 3, 7, 7, 8, 5, 8, 8, 8}, {1, 3, 3, 4, 5, 6, 5, 6, 6, 7, 6, 7, 6, 7, 6, 7}, {2, 3, 4, 4, 3, 4, 5, 5, 4, 5, 5, 7, 4, 6, 5, 7}, {2, 3, 3, 5, 3, 4, 4, 5, 5, 6, 5, 6, 5, 5, 6, 6}, {2, 5, 3, 5, 3, 6, 4, 6, 3, 6, 4, 5, 4, 7, 5, 7}, {3, 4, 3, 4, 4, 5, 4, 5, 3, 5, 4, 5, 4, 5, 4, 5}, {2, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 4, 6}, {3, 4, 3, 4, 4, 5, 5, 5, 3, 4, 4, 5, 4, 5, 4, 5}, {1, 6, 5, 6, 3, 6, 5, 6, 3, 7, 6, 7, 4, 7, 6, 7}, {3, 6, 4, 4, 3, 4, 3, 4, 4, 4, 4, 5, 5, 6, 4, 5}, {3, 4, 4, 5, 3, 3, 4, 4, 4, 6, 5, 4, 4, 4, 5, 6}, {4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 5, 4, 5, 4, 4}, {2, 5, 4, 5, 3, 7, 5, 6, 2, 6, 4, 7, 4, 7, 5, 7}, {4, 4, 3, 4, 4, 4, 4, 4, 4, 5, 4, 5, 5, 5, 3, 4}, {3, 3, 4, 5, 3, 4, 4, 4, 4, 4, 5, 5, 4, 5, 5, 5}, {3, 3, 4, 3, 4, 5, 4, 4, 4, 5, 5, 5, 4, 5, 4, 5}}, {{1, 3, 4, 5, 4, 8, 5, 8, 3, 8, 7, 9, 5, 9, 8, 8}, {1, 3, 3, 4, 5, 6, 5, 6, 5, 7, 6, 8, 6, 8, 7, 7}, {2, 3, 3, 4, 3, 4, 5, 5, 4, 6, 6, 6, 5, 6, 6, 6}, {2, 3, 3, 3, 3, 5, 5, 5, 5, 6, 6, 7, 5, 7, 5, 6}, {1, 6, 3, 6, 4, 7, 6, 7, 3, 7, 5, 7, 5, 7, 5, 7}, {2, 4, 2, 4, 4, 4, 5, 6, 5, 6, 5, 5, 5, 6, 6, 5}, {3, 4, 4, 4, 4, 5, 4, 6, 3, 4, 4, 5, 3, 5, 4, 6}, {3, 4, 3, 4, 4, 6, 4, 5, 3, 5, 3, 4, 5, 5, 6, 5}, {1, 6, 5, 6, 3, 6, 5, 6, 3, 7, 6, 7, 4, 7, 6, 7}, {3, 4, 3, 5, 3, 5, 3, 5, 3, 6, 5, 7, 4, 7, 5, 4}, {2, 4, 5, 4, 3, 4, 4, 4, 5, 5, 5, 5, 4, 5, 5, 5}, {3, 3, 5, 5, 3, 4, 4, 4, 4, 4, 4, 4, 5, 6, 4, 6}, {2, 6, 4, 5, 3, 5, 5, 6, 3, 7, 4, 5, 3, 7, 4, 6}, {3, 5, 3, 5, 3, 3, 4, 4, 4, 5, 3, 5, 6, 6, 6, 6}, {3, 3, 3, 4, 3, 4, 4, 5, 4, 5, 5, 5, 6, 6, 5, 4}, {2, 4, 4, 4, 5, 6, 3, 4, 4, 6, 4, 6, 3, 7, 5, 7}}, {{1, 4, 4, 5, 3, 7, 5, 8, 3, 8, 8, 9, 5, 9, 8, 8}, {1, 2, 3, 5, 6, 6, 6, 7, 8, 8, 7, 9, 7, 9, 7, 8}, {2, 2, 3, 6, 3, 4, 5, 5, 5, 7, 6, 7, 5, 7, 8, 8}, {3, 3, 4, 5, 2, 5, 4, 4, 4, 5, 5, 6, 4, 5, 7, 7}, {1, 6, 4, 6, 4, 7, 4, 7, 3, 8, 5, 6, 4, 8, 6, 7}, {3, 4, 3, 4, 3, 5, 3, 5, 5, 5, 5, 5, 5, 4, 4, 5}, {3, 3, 3, 4, 3, 5, 5, 6, 3, 5, 5, 5, 4, 5, 5, 6}, {3, 4, 3, 4, 3, 5, 5, 5, 3, 4, 5, 4, 5, 5, 5, 5}, {1, 7, 6, 6, 3, 7, 5, 7, 3, 9, 6, 10, 3, 10, 6, 8}, {4, 4, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5}, {4, 5, 4, 4, 3, 6, 3, 4, 3, 3, 6, 6, 4, 5, 4, 6}, {3, 4, 4, 4, 3, 4, 5, 3, 3, 5, 5, 5, 5, 5, 5, 5}, {2, 5, 4, 5, 3, 6, 4, 5, 3, 7, 4, 8, 3, 8, 5, 5}, {3, 5, 3, 5, 5, 5, 5, 5, 3, 5, 3, 5, 4, 4, 4, 4}, {4, 3, 4, 4, 4, 4, 4, 5, 5, 3, 5, 5, 3, 5, 4, 5}, {2, 4, 4, 4, 4, 5, 3, 5, 4, 5, 5, 5, 4, 5, 5, 5}}, {{1, 3, 3, 6, 4, 8, 6, 9, 3, 9, 9, 10, 6, 10, 9, 9}, {1, 2, 3, 5, 7, 8, 5, 8, 7, 7, 7, 7, 8, 8, 8, 8}, {2, 3, 3, 7, 3, 6, 3, 6, 5, 6, 8, 8, 3, 7, 6, 7}, {2, 3, 3, 4, 5, 5, 4, 5, 5, 5, 5, 5, 4, 5, 5, 5}, {2, 7, 2, 7, 3, 7, 4, 8, 3, 8, 4, 6, 4, 8, 7, 8}, {4, 5, 5, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {2, 6, 3, 6, 3, 6, 3, 6, 3, 5, 6, 6, 4, 5, 6, 6}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {1, 9, 6, 10, 3, 10, 7, 7, 2, 9, 8, 9, 4, 9, 6, 9}, {4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 4, 5, 5}, {4, 4, 3, 4, 4, 5, 2, 5, 5, 5, 5, 5, 5, 5, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {2, 6, 3, 6, 3, 6, 5, 6, 3, 6, 4, 6, 3, 6, 5, 6}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {5, 5, 2, 5, 5, 5, 5, 5, 5, 4, 4, 4, 3, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}}, {{1, 4, 4, 8, 4, 10, 6, 11, 2, 10, 8, 12, 5, 12, 8, 10}, {1, 2, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5}, {2, 5, 3, 5, 2, 5, 5, 5, 5, 5, 5, 6, 4, 6, 6, 6}, {4, 5, 5, 4, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {1, 7, 3, 8, 3, 8, 5, 7, 4, 7, 5, 7, 4, 7, 7, 7}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {2, 4, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {1, 6, 6, 6, 3, 6, 7, 7, 3, 7, 7, 7, 3, 7, 7, 7}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {2, 4, 5, 5, 5, 5, 5, 5, 2, 5, 5, 5, 4, 5, 5, 5}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}}, {{1, 3, 4, 7, 3, 9, 7, 9, 3, 9, 9, 9, 5, 9, 9, 9}, {2, 4, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {3, 4, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {1, 5, 6, 6, 3, 6, 6, 6, 3, 6, 6, 6, 6, 6, 5, 5}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {2, 4, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}}, {{1, 5, 6, 7, 4, 7, 7, 7, 2, 7, 7, 7, 4, 7, 7, 7}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {2, 4, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}}, {{1, 5, 5, 5, 5, 5, 5, 5, 3, 5, 6, 6, 6, 6, 5, 5}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}}, {{4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}}, {{4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}}, {{4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}}, {{4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}} }; #define SI_NUM 30 unsigned int codeBookSi[SI_NUM] = { 103653, 51827, 12957, 808, 504, 246, 121, 120, 203, 122, 247, 51, 127, 14, 13, 0, 4, 5, 24, 62, 100, 253, 405, 1011, 1010, 1618, 3238, 6479, 25912, 103652}; unsigned int codeBookLenSi[SI_NUM] = { 17, 16, 14, 10, 9, 8, 7, 7, 8, 7, 8, 6, 7, 4, 4, 1, 3, 3, 5, 6, 7, 8, 9, 10, 10, 11, 12, 13, 15, 17}; #define SF_NUM 128 unsigned int codeBookSf[SF_NUM] = { 61533, 61532, 61535, 61534, 61529, 61528, 61531, 61530, 153365, 153364, 153367, 153366, 153361, 153360, 153363, 153362, 153373, 153372, 153375, 153374, 153369, 153368, 153371, 153370, 15381, 15380, 19173, 19172, 4935, 9590, 4934, 2466, 2310, 960, 4794, 1217, 1219, 1232, 2311, 481, 1185, 617, 1199, 241, 312, 309, 598, 89, 153, 289, 33, 45, 79, 20, 31, 75, 14, 39, 8, 25, 8, 13, 3, 7, 1, 5, 0, 5, 24, 6, 38, 18, 9, 73, 23, 17, 145, 61, 43, 32, 297, 157, 155, 121, 88, 85, 597, 576, 313, 305, 169, 1192, 1186, 1193, 1187, 1184, 168, 2309, 2308, 1218, 1216, 1923, 9591, 3844, 19175, 153349, 76697, 153348, 153351, 153350, 153345, 153344, 153347, 153346, 153357, 153356, 153359, 153358, 153353, 153352, 153355, 153354, 153397, 153396, 153399, 153398, 153393, 153392}; unsigned int codeBookLenSf[SF_NUM] = { 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 17, 17, 16, 16, 15, 15, 15, 14, 13, 13, 14, 13, 13, 13, 13, 12, 12, 12, 12, 11, 11, 11, 11, 10, 10, 10, 9, 9, 9, 8, 8, 8, 7, 7, 6, 6, 5, 5, 4, 4, 1, 4, 4, 5, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 11, 13, 13, 13, 13, 14, 15, 15, 16, 19, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19 }; extern unsigned int codeBookBin[2]; extern unsigned int codeBookLenBin[2]; void cbc_decode_init(int fsidx) { fsidx -= 3; sampling_rate = (int)fs_tbl[fsidx]; } void cbc_decode( int windowSequence, int target, int sample_buf[][FRAMESIZE], int scalefactors[][8][MAX_SCFAC_BANDS], int maxSfb, int num_window_groups, int window_group_length[], int ps_mask[], int stereo_mode, int swb_offset[][52], int used_bits, int frameLength, int enc_top_layer, int base_snf, int base_band, int nch, int fill_length) { int i, ch, g; int cband; int layer_reg[2][64]; int layer_max_freq[2][64]; int layer_max_cband[2][64]; int layer_max_qband[2][64]; int layer_bit_flush[64]; int layer_buf_offset[64]; int start_freq[2][64]; int start_qband[2][64]; int start_cband[2][64]; int end_freq[2][64]; int end_cband[2][64]; int end_qband[2][64]; int s_freq[2][64]; int e_freq[2][64]; int cw_len; int layer; int slayer_size; int available_len; int band_snf[2][8][32]; int ModelIndex[2][8][32]; int *sample[2][8]; int *sign_is_coded[2][8]; int *coded_samp_bit[2][8]; int *cur_snf[2][8]; int sign_is_coded_buf[2][FRAMESIZE]; int coded_samp_bit_buf[2][FRAMESIZE]; int cur_snf_buf[2][FRAMESIZE]; int stereo_si_coded[MAX_SCFAC_BANDS]; int code_len; int layerBit; ///////////////////////////////////////////////////////// // Variable Initialization // ///////////////////////////////////////////////////////// for (ch = 0; ch < nch; ch++) { int s; s = 0; for (g = 0; g < num_window_groups; g++) { sample[ch][g] = &(sample_buf[ch][FRAMESIZE*s/8]); sign_is_coded[ch][g] = &(sign_is_coded_buf[ch][FRAMESIZE*s/8]); coded_samp_bit[ch][g] = &(coded_samp_bit_buf[ch][FRAMESIZE*s/8]); cur_snf[ch][g] = &(cur_snf_buf[ch][FRAMESIZE*s/8]); s += window_group_length[g]; for (i = 0; i < MAX_SCFAC_BANDS; i++)//except global gain { if(i==0 && g==0) continue; scalefactors[ch][g][i] = 0; } for (i = 0; i < 32; i++) { band_snf[ch][g][i] = 0; ModelIndex[ch][g][i] = 0; } } for (i = 0; i < FRAMESIZE; i++) { sign_is_coded_buf[ch][i] = 0; coded_samp_bit_buf[ch][i] = 0; cur_snf_buf[ch][i] = 0; sample_buf[ch][i] = 0; } } for (i = 0; i < MAX_SCFAC_BANDS; i++) stereo_si_coded[i] = 0; /* Initialize layer_max_freq layer_max_cband layer_max_qband layer_bit_flush */ slayer_size = initialize_layer_data(windowSequence, num_window_groups, window_group_length, base_band, enc_top_layer, maxSfb, swb_offset, layer_max_freq, layer_max_cband, layer_max_qband, layer_bit_flush, layer_reg, nch); /* ##################################################### */ /* CBC MAIN ROUTINE */ /* ##################################################### */ /* ***************************************************** */ /* CBC_layer_stream() */ /* ***************************************************** */ /* to calculate core CBC data size */ if(fill_length != 0) frameLength -= fill_length*8; /* calculate layer buffer position */ layer_buf_offset[0] = (double)16.*(frameLength-used_bits)/(double)(enc_top_layer+16)/(double)slayer_size; for (layer = 1; layer < slayer_size-1; layer++) { layer_buf_offset[layer] = layer_buf_offset[layer-1] + (double)16.*(frameLength-used_bits)/(enc_top_layer+16)/slayer_size; } layer_buf_offset[slayer_size-1] = (double)16.*(frameLength-used_bits)/(enc_top_layer+16); layerBit = (frameLength-used_bits) - layer_buf_offset[slayer_size-1]; for (layer = slayer_size; layer < enc_top_layer+slayer_size-1; layer++) { layer_buf_offset[layer] = layer_buf_offset[layer-1] + layerBit/(enc_top_layer); } layer_buf_offset[enc_top_layer+slayer_size-1] = (frameLength-used_bits); for (layer = enc_top_layer+slayer_size; layer < 64; layer++) layer_buf_offset[layer] = (frameLength-used_bits)*2; /* ********************************************************* */ /* Split Input Bitstream into Layer Bitstreams */ /* ********************************************************* */ init_layer_buf(); setRBitBufPos(used_bits); { unsigned data; cw_len = frameLength - used_bits; while(cw_len > 0) { int len; len = (cw_len > 8) ? 8 : cw_len; data = getbits(len); putbits2buf(data, len); cw_len -= len; } putbits2buf(0x00, 32); } for(ch = 0; ch < nch; ch++) for(g = 0; g < num_window_groups; g++) { start_qband[ch][g] = 0;; start_cband[ch][g] = 0;; start_freq[ch][g] = 0; end_qband[ch][g] = 0;; end_cband[ch][g] = 0;; end_freq[ch][g] = 0; } code_len = 0; setRBitBufPos(used_bits); available_len = 0; for(ch = 0; ch < nch; ch++) for(g = 0; g < num_window_groups; g++) s_freq[ch][g] = 0; if (windowSequence == 2) { for (layer = 0; layer < slayer_size; layer++) { for(ch = 0; ch < nch; ch++) { g = layer_reg[ch][layer]; e_freq[ch][g] = layer_max_freq[ch][layer]; } } } /* ##################################################### */ /* CBC MAIN LOOP */ /* ##################################################### */ for (layer = 0; layer < target+slayer_size; layer++) { int min_snf; for(ch = 0; ch < nch; ch++) { g = layer_reg[ch][layer]; start_freq[ch][g] = end_freq[ch][g]; start_qband[ch][g] = end_qband[ch][g]; start_cband[ch][g] = end_cband[ch][g]; end_qband[ch][g] = layer_max_qband[ch][layer]; end_cband[ch][g] = layer_max_cband[ch][layer]; end_freq[ch][g] = layer_max_freq[ch][layer]; } if (windowSequence == 2) { if(layer >= slayer_size) { for(ch = 0; ch < nch; ch++) { g = layer_reg[ch][layer]; e_freq[ch][g] = layer_max_freq[ch][layer]; } } } else { for(ch = 0; ch < nch; ch++) { if (layer >= slayer_size) e_freq[ch][0] = layer_max_freq[ch][layer]; else e_freq[ch][0] = layer_max_freq[ch][slayer_size-1]; } } if(layer==0) available_len = layer_buf_offset[0]; else available_len += layer_buf_offset[layer]-layer_buf_offset[layer-1]; /* coding band side infomation */ cw_len = decode_cband_si(ModelIndex, start_cband, end_cband, g, nch); for(ch = 0; ch < nch; ch++) { g = layer_reg[ch][layer]; for(cband = start_cband[ch][g]; cband < end_cband[ch][g]; cband++) { if(ModelIndex[ch][g][cband] > 8) band_snf[ch][g][cband] = ModelIndex[ch][g][cband] - 4; else band_snf[ch][g][cband] = (ModelIndex[ch][g][cband]+1) / 2; } for(i = start_freq[ch][g]; i < end_freq[ch][g]; i++) { cur_snf[ch][g][i] = band_snf[ch][g][i/32]; } } code_len += cw_len; g = layer_reg[0][layer]; available_len -= cw_len; /* side infomation : scalefactor */ cw_len = decode_scfband_si(scalefactors, start_qband, end_qband, stereo_mode, ps_mask, maxSfb, stereo_si_coded, g, nch); code_len += cw_len; available_len -= cw_len; min_snf = layer < slayer_size ? base_snf : 1; /* Bit-Sliced Spectral Data Coding */ cw_len = decode_spectra(sample, g, g+1, start_freq, end_freq, min_snf, available_len, ModelIndex, cur_snf, coded_samp_bit, sign_is_coded, nch); code_len += cw_len; available_len -= cw_len; if(available_len > 0) { cw_len = decode_spectra(sample, 0, num_window_groups, s_freq, e_freq, 1, available_len, ModelIndex, cur_snf, coded_samp_bit, sign_is_coded, nch); code_len += cw_len; available_len -= cw_len; } } /* for (layer = 0; layer <= top_layer; layer++) */ } /*--------------------------------------------------------------*/ /*************** coding band side infomation ****************/ /*--------------------------------------------------------------*/ extern int siCodeMode; static int decode_cband_si( int model_index[][8][32], int start_cband[][64], int end_cband[][64], int g, int nch) { int ch; int cband; int si_cw_len; //HUFF static int prevSi[2][8]; int res; int decData; si_cw_len = 0; for(ch = 0; ch < nch; ch++) { if(siCodeMode==0) { if(g==0 && start_cband[ch][g]==0) prevSi[ch][0] = 0; for (cband = start_cband[ch][g]; cband < end_cband[ch][g]; cband++) { res = BSHCDecHuff(codeBookSi,codeBookLenSi,SI_NUM,&decData); if(res==-1) return -1; si_cw_len +=res; model_index[ch][g][cband] = prevSi[ch][0] - decData + 15; if(model_index[ch][g][cband] < 0) fprintf(stderr,"\nMode Error"); prevSi[ch][0] = model_index[ch][g][cband]; } } else { if(start_cband[ch][g]==0) prevSi[ch][g] = 0; for (cband = start_cband[ch][g]; cband < end_cband[ch][g]; cband++) { res = BSHCDecHuff(codeBookSi,codeBookLenSi,SI_NUM,&decData); if(res==-1) return -1; si_cw_len +=res; model_index[ch][g][cband] = prevSi[ch][g] - decData + 15; if(model_index[ch][g][cband] < 0) fprintf(stderr,"\nMode Error"); prevSi[ch][g] = model_index[ch][g][cband]; } } } return si_cw_len; } /*--------------------------------------------------------------*/ /*********** scalefactor band side infomation ****************/ /*--------------------------------------------------------------*/ static int decode_scfband_si( int scf[][8][MAX_SCFAC_BANDS], int start_sfb[][64], int end_sfb[][64], int stereo_mode, int ps_mask[], int maxSfb, int stereo_si_coded[], int g, int nch) { int ch; int m; int sfb; int si_cw_len; static int prevSf[2][8]; si_cw_len = 0; for(ch = 0; ch < nch; ch++) { if(start_sfb[ch][g]==0) prevSf[ch][g] = scf[ch][0][0]; for(sfb = start_sfb[ch][g]; sfb < end_sfb[ch][g]; sfb++) { if(nch == 1) { } else if(stereo_si_coded[maxSfb*g+sfb] == 0) { if(stereo_mode != 2) { m = 0; if(stereo_mode == 1) { si_cw_len += BSHCDecHuff(codeBookBin,codeBookLenBin,2,&m); } else if(stereo_mode == 3) ; switch(m) { case 1: ps_mask[g*maxSfb + sfb + 1] = 1; break; case 2: break; case 3: break; } } stereo_si_coded[maxSfb*g+sfb] = 1; } { if(sfb==0 && g==0) { continue; } si_cw_len += BSHCDecHuff(codeBookSf,codeBookLenSf,128,&m); scf[ch][g][sfb] = m+prevSf[ch][g]-64; prevSf[ch][g] = scf[ch][g][sfb]; } //no IS } } return si_cw_len; } /*--------------------------------------------------------------*/ /*********** Bit-Sliced Spectral Data ****************/ /*--------------------------------------------------------------*/ static int decode_spectra( int *sample[][8], int s_reg, int e_reg, int s_freq[][64], int e_freq[][64], int min_bpl, int available_len, int model_index[][8][32], int *cur_bpl[][8], int *coded_samp_bit[][8], int *sign_coded[][8], int nch) { int ch, i, m, j; int maxbpl; int bpl; int cband; int maxhalf; int cw_len; int reg; int modelIdx; int sign; maxbpl = 0; for(ch = 0; ch < nch; ch++) for (reg = s_reg; reg < e_reg; reg++) for(i = s_freq[ch][reg]; i< e_freq[ch][reg]; i++) if (maxbpl < cur_bpl[ch][reg][i]) maxbpl = cur_bpl[ch][reg][i]; cw_len = available_len; for (bpl=maxbpl; bpl>=min_bpl; bpl--) { maxhalf = 1<<(bpl-1); if (cw_len <= 0 ) return (available_len-cw_len); for (reg = s_reg; reg < e_reg; reg++) for (i=s_freq[0][reg]; i =0) sample[ch][reg][i+j] += maxhalf; else sample[ch][reg][i+j] -= maxhalf; coded_samp_bit[ch][reg][i+j] |= 0x01; } if (coded_samp_bit[ch][reg][i+j] && sign_coded[ch][reg][i+j]==0) { BSHCDecHuff(codeBookBin,codeBookLenBin,2,&sign); if (sign) sample[ch][reg][i+j] *= -1; cw_len--; sign_coded[ch][reg][i+j] = 0x01; } } } } cur_bpl[ch][reg][i]-=1; if (cw_len <= 0 ) return (available_len-cw_len); } } return (available_len-cw_len); } static int initialize_layer_data( int windowSequence, int num_window_groups, int window_group_length[], int base_band, int enc_top_layer, int maxSfb, int swb_offset[][52], int layer_max_freq[][64], int layer_max_cband[][64], int layer_max_qband[][64], int layer_bit_flush[], int layer_reg[2][64], int nch) { int i, ch, g; int sfb, cband, reg; int last_freq[2][64]; int init_max_freq[2][8]; int end_freq[2][64]; int end_cband[2][64]; int layer; int slayer_size; if (windowSequence == 2) { for(ch = 0; ch < nch; ch++) { slayer_size = 0; for(g = 0; g < num_window_groups; g++) { init_max_freq[ch][g] = base_band * window_group_length[g] * 4; switch(sampling_rate) { case 48000: case 44100: if ((init_max_freq[ch][g]%32) >= 16) init_max_freq[ch][g] = (init_max_freq[ch][g] / 32) * 32 + 20; else if ((init_max_freq[ch][g]%32) >= 4) init_max_freq[ch][g] = (init_max_freq[ch][g] / 32) * 32 + 8; break; case 32000: case 24000: case 22050: init_max_freq[ch][g] = (init_max_freq[ch][g] / 16) * 16; break; case 16000: case 12000: case 11025: init_max_freq[ch][g] = (init_max_freq[ch][g] / 32) * 32; break; case 8000: init_max_freq[ch][g] = (init_max_freq[ch][g] / 64) * 64; break; } end_freq[ch][g] = init_max_freq[ch][g]; end_cband[ch][g] = (end_freq[ch][g] + 31) / 32; slayer_size += (init_max_freq[ch][g]+31)/32; } layer = 0; for(g = 0; g < num_window_groups; g++) for (cband = 1; cband <= end_cband[ch][g]; layer++, cband++) { layer_reg[ch][layer] = g; layer_max_freq[ch][layer] = cband * 32; if (layer_max_freq[ch][layer] > init_max_freq[ch][g]) layer_max_freq[ch][layer] = init_max_freq[ch][g]; layer_max_cband[ch][layer] = cband; } layer = slayer_size; for(g = 0; g < num_window_groups; g++) { for (i=0; i last_freq[ch][reg] ) end_freq[ch][reg] = last_freq[ch][reg]; layer_max_freq[ch][layer] = end_freq[ch][reg]; layer_max_cband[ch][layer] = (layer_max_freq[ch][layer]+31)/32; } for (layer = 0; layer < (enc_top_layer+slayer_size-1); layer++) { if (layer_max_cband[ch][layer] != layer_max_cband[ch][layer+1] || layer_reg[ch][layer] != layer_reg[ch][layer+1] ) layer_bit_flush[layer] = 1; else layer_bit_flush[layer] = 0; } for ( ; layer < 64; layer++) layer_bit_flush[layer] = 1; for (layer = 0; layer < 64; layer++) { int end_layer; end_layer = layer; while ( !layer_bit_flush[end_layer] ) end_layer++; reg = layer_reg[ch][layer]; for (sfb=0; sfb<14; sfb++) { if (layer_max_freq[ch][end_layer] <= swb_offset[reg][sfb+1]) { layer_max_qband[ch][layer] = sfb+1; break; } } if (layer_max_qband[ch][layer] > maxSfb) layer_max_qband[ch][layer] = maxSfb; } } } else { // for long type for (ch = 0; ch < nch; ch++) { g = 0; for (layer = 0; layer < 64; layer++) layer_reg[ch][layer] = 0; last_freq[ch][g] = swb_offset[g][maxSfb]; /************************************************/ /* calculate layer_max_cband and layer_max_freq */ /************************************************/ init_max_freq[ch][g] = base_band * 32; if (init_max_freq[ch][g] > last_freq[ch][g]) init_max_freq[ch][g] = last_freq[ch][g]; slayer_size = (init_max_freq[ch][g]+31) / 32; cband = 1; for (layer = 0; layer < slayer_size; layer++, cband++) { layer_max_freq[ch][layer] = cband * 32; if (layer_max_freq[ch][layer] > init_max_freq[ch][g]) layer_max_freq[ch][layer] = init_max_freq[ch][g]; layer_max_cband[ch][layer] = cband; } for (layer = slayer_size; layer < 64; layer++) { switch(sampling_rate) { case 48000: case 44100: layer_max_freq[ch][layer] = layer_max_freq[ch][layer-1] + 8; if ((layer_max_freq[ch][layer]%32) != 0) layer_max_freq[ch][layer] += 4; break; case 32000: case 24000: case 22050: layer_max_freq[ch][layer] = layer_max_freq[ch][layer-1] + 16; break; case 16000: case 12000: case 11025: layer_max_freq[ch][layer] = layer_max_freq[ch][layer-1] + 32; break; default: layer_max_freq[ch][layer] = layer_max_freq[ch][layer-1] + 64; break; } if (layer_max_freq[ch][layer] > last_freq[ch][g]) layer_max_freq[ch][layer] = last_freq[ch][g]; layer_max_cband[ch][layer] = (layer_max_freq[ch][layer]+31) / 32; } /*****************************/ /* calculate layer_bit_flush */ /*****************************/ for (layer = 0; layer < (enc_top_layer+slayer_size-1); layer++) { if (layer_max_cband[ch][layer] != layer_max_cband[ch][layer+1]) layer_bit_flush[layer] = 1; else layer_bit_flush[layer] = 0; } for ( ; layer < 64; layer++) layer_bit_flush[layer] = 1; /*****************************/ /* calculate layer_max_qband */ /*****************************/ for (layer = 0; layer < 64; layer++) { int end_layer; end_layer = layer; while (!layer_bit_flush[end_layer]) end_layer++; for (sfb = 0; sfb < 49; sfb++) { if (layer_max_freq[ch][end_layer] <= swb_offset[0][sfb+1]) { layer_max_qband[ch][layer] = sfb+1; break; } } if (layer_max_qband[ch][layer] > maxSfb) layer_max_qband[ch][layer] = maxSfb; } } // for (ch = 0; ... } // else { return slayer_size; }