From 34d6f94fd25259b2a413901566d2b32db2f25c0c Mon Sep 17 00:00:00 2001 From: Ram Mohan M Date: Thu, 5 Oct 2023 01:24:47 +0530 Subject: [PATCH] libavc: correct return value of buf mgr avbl check util The function returns status as success even in failed scenarios. This is corrected. --- common/ih264_buf_mgr.c | 304 +- common/ih264_buf_mgr.h | 58 +- common/ih264_cabac_tables.c | 18182 ++++++++++----------- common/ih264_cabac_tables.h | 35 +- common/ih264_cavlc_tables.c | 22 +- common/ih264_cavlc_tables.h | 81 +- common/ih264_chroma_intra_pred_filters.c | 235 +- common/ih264_common_tables.c | 136 +- common/ih264_common_tables.h | 16 +- common/ih264_deblk_edge_filters.c | 1283 +- common/ih264_deblk_edge_filters.h | 79 +- common/ih264_deblk_tables.c | 15 +- common/ih264_deblk_tables.h | 61 +- common/ih264_debug.h | 17 +- common/ih264_defs.h | 24 +- common/ih264_disp_mgr.c | 55 +- common/ih264_disp_mgr.h | 24 +- common/ih264_dpb_mgr.c | 806 +- common/ih264_dpb_mgr.h | 60 +- common/ih264_error.h | 7 +- common/ih264_ihadamard_scaling.c | 280 +- common/ih264_inter_pred_filters.c | 1076 +- common/ih264_inter_pred_filters.h | 138 +- common/ih264_intra_pred_filters.h | 182 +- common/ih264_iquant_itrans_recon.c | 631 +- common/ih264_list.c | 269 +- common/ih264_list.h | 34 +- common/ih264_luma_intra_pred_filters.c | 1604 +- common/ih264_macros.h | 11 +- common/ih264_mem_fns.c | 171 +- common/ih264_mem_fns.h | 81 +- common/ih264_padding.c | 90 +- common/ih264_padding.h | 11 +- common/ih264_resi_trans.h | 70 - common/ih264_resi_trans_quant.c | 692 +- common/ih264_size_defs.h | 35 +- common/ih264_structs.h | 298 +- common/ih264_trans_data.c | 100 +- common/ih264_trans_data.h | 111 +- common/ih264_trans_macros.h | 11 +- common/ih264_trans_quant_itrans_iquant.h | 90 +- common/ih264_typedefs.h | 9 +- common/ih264_weighted_pred.c | 536 +- common/ih264_weighted_pred.h | 66 +- common/ithread.h | 61 +- 45 files changed, 13936 insertions(+), 14221 deletions(-) delete mode 100644 common/ih264_resi_trans.h diff --git a/common/ih264_buf_mgr.c b/common/ih264_buf_mgr.c index 0b5a596c..a6c66d02 100644 --- a/common/ih264_buf_mgr.c +++ b/common/ih264_buf_mgr.c @@ -17,6 +17,7 @@ ***************************************************************************** * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore */ + /** ******************************************************************************* * @file @@ -26,53 +27,65 @@ * Contains function definitions for buffer management * * @author -* Srinivas T +* ittiam * * @par List of Functions: -* - ih264_buf_mgr_size() -* - ih264_buf_mgr_lock() -* - ih264_buf_mgr_unlock() -* - ih264_buf_mgr_yield() -* - ih264_buf_mgr_free() -* - ih264_buf_mgr_init() -* - ih264_buf_mgr_add() -* - ih264_buf_mgr_get_next_free() -* - ih264_buf_mgr_check_free() -* - ih264_buf_mgr_set_status() -* - ih264_buf_mgr_get_status() -* - ih264_buf_mgr_get_buf() -* - ih264_buf_mgr_get_bufid() -* - ih264_buf_mgr_get_num_active_buf() +* - ih264_buf_mgr_size +* - ih264_buf_mgr_lock +* - ih264_buf_mgr_unlock +* - ih264_buf_mgr_yield +* - ih264_buf_mgr_free +* - ih264_buf_mgr_init +* - ih264_buf_mgr_add +* - ih264_buf_mgr_get_next_free +* - ih264_buf_mgr_check_free +* - ih264_buf_mgr_release +* - ih264_buf_mgr_set_status +* - ih264_buf_mgr_get_status +* - ih264_buf_mgr_get_buf +* - ih264_buf_mgr_get_bufid +* - ih264_buf_mgr_get_num_active_buf * * @remarks -* None +* none * ******************************************************************************* */ + +/*****************************************************************************/ +/* File Includes */ +/*****************************************************************************/ + +/* System Include Files */ #include #include + +/* User Include Files */ #include "ih264_typedefs.h" +#include "ithread.h" #include "ih264_macros.h" -#include "ih264_defs.h" #include "ih264_error.h" +#include "ih264_defs.h" #include "ih264_buf_mgr.h" -#include "ithread.h" + +/*****************************************************************************/ +/* Function Definitions */ +/*****************************************************************************/ /** ******************************************************************************* * -* @brief Returns size for buf queue context. Does not include buf queue buffer -* requirements +* @brief Returns size for buffer queue context. Does not include the size of the +* actual buffers that are stored here. * -* @par Description -* Returns size for buf queue context. Does not include buf queue buffer -* requirements. Buffer size required to store the bufs should be allocated in -* addition to the value returned here. +* @par Description +* Returns size for buf queue context. Does not include the size of the +* actual buffers that are stored here. * * @returns Size of the buf queue context * -* @remarks +* @remarks none * ******************************************************************************* */ @@ -89,43 +102,40 @@ WORD32 ih264_buf_mgr_size(void) /** ******************************************************************************* * -* @brief -* Locks the buf_mgr context +* @brief Locks the buffer manager context * -* @par Description -* Locks the buf_mgr context by calling ithread_mutex_lock() +* @par Description +* Locks the buffer manager context by calling ithread_mutex_lock() * * @param[in] ps_buf_mgr -* Job Queue context +* Pointer to the buffer manager * * @returns IH264_FAIL if mutex lock fails else IH264_SUCCESS * -* @remarks +* @remarks none * ******************************************************************************* */ IH264_ERROR_T ih264_buf_mgr_lock(buf_mgr_t *ps_buf_mgr) { WORD32 retval; + retval = ithread_mutex_lock(ps_buf_mgr->pv_mutex); if(retval) - { return IH264_FAIL; - } return IH264_SUCCESS; } /** ******************************************************************************* * -* @brief -* Unlocks the buf_mgr context +* @brief Unlocks the buffer manager context * -* @par Description -* Unlocks the buf_mgr context by calling ithread_mutex_unlock() +* @par Description +* Unlocks the buffer manager context by calling ithread_mutex_unlock() * * @param[in] ps_buf_mgr -* Job Queue context +* Pointer to the buffer manager * * @returns IH264_FAIL if mutex unlock fails else IH264_SUCCESS * @@ -133,33 +143,30 @@ IH264_ERROR_T ih264_buf_mgr_lock(buf_mgr_t *ps_buf_mgr) * ******************************************************************************* */ - IH264_ERROR_T ih264_buf_mgr_unlock(buf_mgr_t *ps_buf_mgr) { WORD32 retval; + retval = ithread_mutex_unlock(ps_buf_mgr->pv_mutex); if(retval) - { return IH264_FAIL; - } return IH264_SUCCESS; - } + /** ******************************************************************************* * -* @brief -* Yeilds the thread +* @brief Yields the thread * -* @par Description -* Unlocks the buf_mgr context by calling -* ih264_buf_mgr_unlock(), ithread_yield() and then ih264_buf_mgr_lock() -* buf_mgr is unlocked before to ensure the buf_mgr can be accessed by other threads -* If unlock is not done before calling yield then no other thread can access -* the buf_mgr functions and update buf_mgr. +* @par Description +* Unlocks the buf_mgr context by calling ih264_buf_mgr_unlock(), +* ithread_yield() and then ih264_buf_mgr_lock(). buf_mgr is unlocked before to +* ensure the buf_mgr can be accessed by other threads. If unlock is not done +* before calling yield then no other thread can access the buf_mgr functions +* and update buf_mgr. * * @param[in] ps_buf_mgr -* Job Queue context +* Pointer to the buffer manager * * @returns IH264_FAIL if mutex lock unlock or yield fails else IH264_SUCCESS * @@ -169,89 +176,78 @@ IH264_ERROR_T ih264_buf_mgr_unlock(buf_mgr_t *ps_buf_mgr) */ IH264_ERROR_T ih264_buf_mgr_yield(buf_mgr_t *ps_buf_mgr) { + IH264_ERROR_T ret; - IH264_ERROR_T ret = IH264_SUCCESS; - - IH264_ERROR_T rettmp; - rettmp = ih264_buf_mgr_unlock(ps_buf_mgr); - RETURN_IF((rettmp != IH264_SUCCESS), rettmp); + ret = ih264_buf_mgr_unlock(ps_buf_mgr); + RETURN_IF((ret != IH264_SUCCESS), ret); //ithread_usleep(10); ithread_yield(); - rettmp = ih264_buf_mgr_lock(ps_buf_mgr); - RETURN_IF((rettmp != IH264_SUCCESS), rettmp); - return ret; + ret = ih264_buf_mgr_lock(ps_buf_mgr); + RETURN_IF((ret != IH264_SUCCESS), ret); + return IH264_SUCCESS; } - /** ******************************************************************************* * -* @brief free the buf queue pointers +* @brief frees the buffer manager context * -* @par Description -* Frees the buf_mgr context +* @par Description +* Frees the buffer manager context * -* @param[in] pv_buf -* Memoy for buf queue buffer and buf queue context +* @param[in] ps_buf_mgr +* Pointer to the buffer manager * -* @returns Pointer to buf queue context +* @returns IH264_FAIL if mutex destory fails else IH264_SUCCESS * * @remarks -* Since it will be called only once by master thread this is not thread safe. +* Since it will be called only once by master thread this is not thread safe. * ******************************************************************************* */ IH264_ERROR_T ih264_buf_mgr_free(buf_mgr_t *ps_buf_mgr) { WORD32 ret; - ret = ithread_mutex_destroy(ps_buf_mgr->pv_mutex); + ret = ithread_mutex_destroy(ps_buf_mgr->pv_mutex); if(0 == ret) return IH264_SUCCESS; - else - return IH264_FAIL; + return IH264_FAIL; } + /** ******************************************************************************* * -* @brief -* Buffer manager initialization function. +* @brief Buffer manager context initialization. * * @par Description: -* Initializes the buffer manager structure +* Initializes the buffer manager structure * -* @param[in] ps_buf_mgr +* @param[in] pv_buf * Pointer to the buffer manager * -* @returns +* @returns none * -* @remarks -* None +* @remarks none * ******************************************************************************* */ - - -void *ih264_buf_mgr_init(void *pv_buf) +void* ih264_buf_mgr_init(void *pv_buf) { WORD32 id; - UWORD8 *pu1_buf; - buf_mgr_t *ps_buf_mgr; - pu1_buf = (UWORD8 *)pv_buf; + UWORD8 *pu1_buf = (UWORD8 *)pv_buf; + buf_mgr_t *ps_buf_mgr = (buf_mgr_t *)pu1_buf; - ps_buf_mgr = (buf_mgr_t *)pu1_buf; pu1_buf += sizeof(buf_mgr_t); - ps_buf_mgr->pv_mutex = pu1_buf; - pu1_buf += ithread_get_mutex_lock_size(); + pu1_buf += ithread_get_mutex_lock_size(); ithread_mutex_init(ps_buf_mgr->pv_mutex); ps_buf_mgr->i4_max_buf_cnt = BUF_MGR_MAX_CNT; ps_buf_mgr->i4_active_buf_cnt = 0; - for(id = 0; id < BUF_MGR_MAX_CNT; id++) { ps_buf_mgr->au4_status[id] = 0; @@ -264,19 +260,17 @@ void *ih264_buf_mgr_init(void *pv_buf) /** ******************************************************************************* * -* @brief -* Buffer manager reset function. +* @brief Buffer manager reset function. * * @par Description: -* resets the buffer manager structure +* resets the buffer manager structure * -* @param[in] ps_buf_mgr +* @param[in] pv_buf * Pointer to the buffer manager * -* @returns +* @returns none * -* @remarks -* None +* @remarks none * ******************************************************************************* */ @@ -298,12 +292,11 @@ void ih264_buf_mgr_reset(void *pv_buf_mgr) /** ******************************************************************************* * -* @brief -* Adds and increments the buffer and buffer count. +* @brief Adds and increments the buffer and buffer count. * * @par Description: -* Adds a buffer to the buffer manager if it is not already present and -* increments the active buffer count +* Adds a buffer to the buffer manager if it is not already present and +* increments the active buffer count * * @param[in] ps_buf_mgr * Pointer to the buffer manager @@ -311,10 +304,13 @@ void ih264_buf_mgr_reset(void *pv_buf_mgr) * @param[in] pv_ptr * Pointer to the buffer to be added * +* @param[in] buf_id +* buffer id +* * @returns Returns 0 on success, -1 otherwise * * @remarks -* None +* none * ******************************************************************************* */ @@ -322,8 +318,8 @@ IH264_ERROR_T ih264_buf_mgr_add(buf_mgr_t *ps_buf_mgr, void *pv_ptr, WORD32 buf_id) { - IH264_ERROR_T ret = IH264_SUCCESS; + ret = ih264_buf_mgr_lock(ps_buf_mgr); RETURN_IF((ret != IH264_SUCCESS), ret); @@ -332,17 +328,15 @@ IH264_ERROR_T ih264_buf_mgr_add(buf_mgr_t *ps_buf_mgr, { ret = ih264_buf_mgr_unlock(ps_buf_mgr); RETURN_IF((ret != IH264_SUCCESS), ret); - return IH264_FAIL; } /* Check if the current ID is being used to hold some other buffer */ if((ps_buf_mgr->apv_ptr[buf_id] != NULL) && - (ps_buf_mgr->apv_ptr[buf_id] !=pv_ptr)) + (ps_buf_mgr->apv_ptr[buf_id] != pv_ptr)) { ret = ih264_buf_mgr_unlock(ps_buf_mgr); RETURN_IF((ret != IH264_SUCCESS), ret); - return IH264_FAIL; } ps_buf_mgr->apv_ptr[buf_id] = pv_ptr; @@ -357,12 +351,11 @@ IH264_ERROR_T ih264_buf_mgr_add(buf_mgr_t *ps_buf_mgr, /** ******************************************************************************* * -* @brief -* Gets the next free buffer. +* @brief Gets the next free buffer. * * @par Description: -* Returns the next free buffer available and sets the corresponding status -* to DEC +* Returns the next free buffer available and sets the corresponding status +* to Busy * * @param[in] ps_buf_mgr * Pointer to the buffer manager @@ -373,26 +366,26 @@ IH264_ERROR_T ih264_buf_mgr_add(buf_mgr_t *ps_buf_mgr, * @returns Pointer to the free buffer * * @remarks -* None +* none * ******************************************************************************* */ void* ih264_buf_mgr_get_next_free(buf_mgr_t *ps_buf_mgr, WORD32 *pi4_buf_id) { WORD32 id; - void *pv_ret_ptr; + void *pv_ret_ptr = NULL; IH264_ERROR_T ret = IH264_SUCCESS; + ret = ih264_buf_mgr_lock(ps_buf_mgr); RETURN_IF((ret != IH264_SUCCESS), NULL); - pv_ret_ptr = NULL; for(id = 0; id < ps_buf_mgr->i4_active_buf_cnt; id++) { /* Check if the buffer is non-null and status is zero */ if((ps_buf_mgr->au4_status[id] == 0) && (ps_buf_mgr->apv_ptr[id])) { *pi4_buf_id = id; - /* DEC is set to 1 */ + /* mark buffer as busy before returning */ ps_buf_mgr->au4_status[id] = 1; pv_ret_ptr = ps_buf_mgr->apv_ptr[id]; break; @@ -404,12 +397,10 @@ void* ih264_buf_mgr_get_next_free(buf_mgr_t *ps_buf_mgr, WORD32 *pi4_buf_id) return pv_ret_ptr; } - /** ******************************************************************************* * -* @brief -* Checks the buffer manager for free buffers available. +* @brief Checks the buffer manager for free buffers available. * * @par Description: * Checks if there are any free buffers available @@ -417,22 +408,22 @@ void* ih264_buf_mgr_get_next_free(buf_mgr_t *ps_buf_mgr, WORD32 *pi4_buf_id) * @param[in] ps_buf_mgr * Pointer to the buffer manager * -* @returns Returns 0 if available, -1 otherwise +* @returns Returns IH264_SUCCESS if available, IH264_FAIL otherwise * * @remarks -* None +* none * ******************************************************************************* */ IH264_ERROR_T ih264_buf_mgr_check_free(buf_mgr_t *ps_buf_mgr) { WORD32 id; - IH264_ERROR_T ret = IH264_SUCCESS; + IH264_ERROR_T ret = IH264_FAIL; IH264_ERROR_T rettmp = IH264_SUCCESS; + rettmp = ih264_buf_mgr_lock(ps_buf_mgr); - RETURN_IF((rettmp != IH264_SUCCESS), ret); + RETURN_IF((rettmp != IH264_SUCCESS), rettmp); - ret = IH264_FAIL; for(id = 0; id < ps_buf_mgr->i4_active_buf_cnt; id++) { if((ps_buf_mgr->au4_status[id] == 0) && @@ -443,22 +434,19 @@ IH264_ERROR_T ih264_buf_mgr_check_free(buf_mgr_t *ps_buf_mgr) } } rettmp = ih264_buf_mgr_unlock(ps_buf_mgr); - RETURN_IF((rettmp != IH264_SUCCESS), ret); + RETURN_IF((rettmp != IH264_SUCCESS), rettmp); return ret; - } - /** ******************************************************************************* * -* @brief -* Resets the status bits. +* @brief Release buffer to buffer manager * * @par Description: -* resets the status bits that the mask contains (status corresponding to -* the id) +* Clear the status bit basing on the mask. If the buffer is no longer used by +* the codec then release back to the pool * * @param[in] ps_buf_mgr * Pointer to the buffer manager @@ -469,10 +457,10 @@ IH264_ERROR_T ih264_buf_mgr_check_free(buf_mgr_t *ps_buf_mgr) * @param[in] mask * Contains the bits that are to be reset * -* @returns 0 if success, -1 otherwise +* @returns IH264_SUCCESS if success, IH264_FAIL otherwise * * @remarks -* None +* none * ******************************************************************************* */ @@ -481,10 +469,10 @@ IH264_ERROR_T ih264_buf_mgr_release(buf_mgr_t *ps_buf_mgr, UWORD32 mask) { IH264_ERROR_T ret = IH264_SUCCESS; + ret = ih264_buf_mgr_lock(ps_buf_mgr); RETURN_IF((ret != IH264_SUCCESS), ret); - /* If the given id is pointing to an id which is not yet added */ if(buf_id >= ps_buf_mgr->i4_active_buf_cnt) { @@ -495,31 +483,25 @@ IH264_ERROR_T ih264_buf_mgr_release(buf_mgr_t *ps_buf_mgr, ps_buf_mgr->au4_status[buf_id] &= ~mask; - -/* If both the REF and DISP are zero, DEC is set to zero */ + /* If both the REF and DISP are zero, DEC is set to zero */ if(ps_buf_mgr->au4_status[buf_id] == 1) { ps_buf_mgr->au4_status[buf_id] = 0; } - ret = ih264_buf_mgr_unlock(ps_buf_mgr); RETURN_IF((ret != IH264_SUCCESS), ret); return ret; } - /** ******************************************************************************* * -* @brief -* Sets the status bit. +* @brief Sets the status bit. * * @par Description: -* sets the status bits that the mask contains (status corresponding to the -* id) -* +* sets the status bits that the mask contains (status corresponding to the id) * * @param[in] ps_buf_mgr * Pointer to the buffer manager @@ -527,14 +509,13 @@ IH264_ERROR_T ih264_buf_mgr_release(buf_mgr_t *ps_buf_mgr, * @param[in] buf_id * ID of the buffer whose status needs to be modified * -* * @param[in] mask * Contains the bits that are to be set * -* @returns 0 if success, -1 otherwise +* @returns IH264_SUCCESS if success, IH264_FAIL otherwise * * @remarks -* None +* none * ******************************************************************************* */ @@ -543,6 +524,7 @@ IH264_ERROR_T ih264_buf_mgr_set_status(buf_mgr_t *ps_buf_mgr, UWORD32 mask) { IH264_ERROR_T ret = IH264_SUCCESS; + ret = ih264_buf_mgr_lock(ps_buf_mgr); RETURN_IF((ret != IH264_SUCCESS), ret); @@ -553,7 +535,6 @@ IH264_ERROR_T ih264_buf_mgr_set_status(buf_mgr_t *ps_buf_mgr, return IH264_FAIL; } - if((ps_buf_mgr->au4_status[buf_id] & mask) != 0) { ret = ih264_buf_mgr_unlock(ps_buf_mgr); @@ -568,12 +549,10 @@ IH264_ERROR_T ih264_buf_mgr_set_status(buf_mgr_t *ps_buf_mgr, return ret; } - /** ******************************************************************************* * -* @brief -* Returns the status of the buffer. +* @brief Returns the status of the buffer. * * @par Description: * Returns the status of the buffer corresponding to the id @@ -587,11 +566,11 @@ IH264_ERROR_T ih264_buf_mgr_set_status(buf_mgr_t *ps_buf_mgr, * @returns Status of the buffer corresponding to the id * * @remarks -* None +* none * ******************************************************************************* */ -WORD32 ih264_buf_mgr_get_status( buf_mgr_t *ps_buf_mgr, WORD32 buf_id ) +WORD32 ih264_buf_mgr_get_status(buf_mgr_t *ps_buf_mgr, WORD32 buf_id) { IH264_ERROR_T ret = IH264_SUCCESS; UWORD32 status; @@ -607,15 +586,13 @@ WORD32 ih264_buf_mgr_get_status( buf_mgr_t *ps_buf_mgr, WORD32 buf_id ) return status; } - /** ******************************************************************************* * -* @brief -* Gets the buffer from the buffer manager +* @brief Gets the buffer from the buffer manager * * @par Description: -* Returns the pointer to the buffer corresponding to the id +* Returns the pointer to the buffer corresponding to the id * * @param[in] ps_buf_mgr * Pointer to the buffer manager @@ -626,7 +603,7 @@ WORD32 ih264_buf_mgr_get_status( buf_mgr_t *ps_buf_mgr, WORD32 buf_id ) * @returns Pointer to the buffer required * * @remarks -* None +* none * ******************************************************************************* */ @@ -634,6 +611,7 @@ void* ih264_buf_mgr_get_buf(buf_mgr_t *ps_buf_mgr, WORD32 buf_id) { IH264_ERROR_T ret = IH264_SUCCESS; void *pv_buf; + ret = ih264_buf_mgr_lock(ps_buf_mgr); RETURN_IF((ret != IH264_SUCCESS), NULL); @@ -645,13 +623,11 @@ void* ih264_buf_mgr_get_buf(buf_mgr_t *ps_buf_mgr, WORD32 buf_id) return pv_buf; } - /** ******************************************************************************* * -* @brief -* Gets the buffer id from the buffer manager if the buffer is added to the -* buffer manager +* @brief Gets the buffer id from the buffer manager if the buffer is added to +* the buffer manager * * @par Description: * Returns the buffer id corresponding to the given buffer if it exists @@ -665,7 +641,7 @@ void* ih264_buf_mgr_get_buf(buf_mgr_t *ps_buf_mgr, WORD32 buf_id) * @returns Buffer id if exists, else -1 * * @remarks -* None +* none * ******************************************************************************* */ @@ -674,6 +650,7 @@ WORD32 ih264_buf_mgr_get_bufid(buf_mgr_t *ps_buf_mgr, void *pv_buf) WORD32 id; WORD32 buf_id = -1; IH264_ERROR_T ret = IH264_SUCCESS; + ret = ih264_buf_mgr_lock(ps_buf_mgr); RETURN_IF((ret != IH264_SUCCESS), ret); @@ -691,15 +668,13 @@ WORD32 ih264_buf_mgr_get_bufid(buf_mgr_t *ps_buf_mgr, void *pv_buf) return buf_id; } - /** ******************************************************************************* * -* @brief -* Gets the no.of active buffer +* @brief Gets the no.of active buffer * * @par Description: -* Return the number of active buffers in the buffer manager +* Return the number of active buffers in the buffer manager * * @param[in] ps_buf_mgr * Pointer to the buffer manager @@ -707,19 +682,18 @@ WORD32 ih264_buf_mgr_get_bufid(buf_mgr_t *ps_buf_mgr, void *pv_buf) * @returns number of active buffers * * @remarks -* None +* none * ******************************************************************************* */ UWORD32 ih264_buf_mgr_get_num_active_buf(buf_mgr_t *ps_buf_mgr) { - UWORD32 u4_buf_cnt; + UWORD32 u4_buf_cnt = 0; IH264_ERROR_T ret = IH264_SUCCESS; - u4_buf_cnt = 0; - ret = ih264_buf_mgr_lock(ps_buf_mgr); RETURN_IF((ret != IH264_SUCCESS), ret); + u4_buf_cnt = ps_buf_mgr->i4_active_buf_cnt; ret = ih264_buf_mgr_unlock(ps_buf_mgr); diff --git a/common/ih264_buf_mgr.h b/common/ih264_buf_mgr.h index fe9c53dc..435df8cb 100644 --- a/common/ih264_buf_mgr.h +++ b/common/ih264_buf_mgr.h @@ -17,6 +17,7 @@ ***************************************************************************** * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore */ + /** ******************************************************************************* * @file @@ -25,14 +26,21 @@ * @brief * Function declarations used for buffer management * +* @author +* ittiam +* * @remarks -* None +* none * ******************************************************************************* */ + #ifndef _IH264_BUF_MGR_H_ #define _IH264_BUF_MGR_H_ +/*****************************************************************************/ +/* Constant Macros */ +/*****************************************************************************/ #define BUF_MGR_MAX_CNT 64 /** Flag for current encoding decoder */ @@ -44,6 +52,9 @@ /** Flag for I/O - Display/output in case of decoder, capture/input in case of encoder */ #define BUF_MGR_IO (1 << 3) +/*****************************************************************************/ +/* Structure Definitions */ +/*****************************************************************************/ typedef struct { /** @@ -61,65 +72,50 @@ typedef struct */ WORD32 i4_active_buf_cnt; - /** - * au4_status[BUF_MGR_MAX_CNT] - */ - UWORD32 au4_status[BUF_MGR_MAX_CNT]; - /* The last three bit of status are: */ - /* Bit 0 - IN USE */ /* Bit 1 - CODEC */ /* Bit 2 - REF */ /* Bit 3 - DISP/IO/RECON */ - void *apv_ptr[BUF_MGR_MAX_CNT]; + UWORD32 au4_status[BUF_MGR_MAX_CNT]; + + /** + * pointer to buffer + */ + void *apv_ptr[BUF_MGR_MAX_CNT]; }buf_mgr_t; -// Returns size of the buffer manager context +/*****************************************************************************/ +/* Function Declarations */ +/*****************************************************************************/ WORD32 ih264_buf_mgr_size(void); -//Free buffer manager IH264_ERROR_T ih264_buf_mgr_free(buf_mgr_t *ps_buf_mgr); -// Reset the buffer manager -void ih264_buf_mgr_reset(void *pv_buf_mgr); - -// Initializes the buffer API structure void *ih264_buf_mgr_init(void *pv_buf); -// Add buffer to buffer manager. 0: success, -1: fail (u4_active_buf_cnt has reached u4_max_buf_cnt) -IH264_ERROR_T ih264_buf_mgr_add(buf_mgr_t *ps_buf_mgr, - void *pv_ptr, +void ih264_buf_mgr_reset(void *pv_buf_mgr); + +IH264_ERROR_T ih264_buf_mgr_add(buf_mgr_t *ps_buf_mgr, void *pv_ptr, WORD32 buf_id); -// this function will set the buffer status to DEC void* ih264_buf_mgr_get_next_free(buf_mgr_t *ps_buf_mgr, WORD32 *pi4_id); -// this function will check if there are any free buffers IH264_ERROR_T ih264_buf_mgr_check_free(buf_mgr_t *ps_buf_mgr); -// mask will have who released it: DISP:REF:DEC -IH264_ERROR_T ih264_buf_mgr_release(buf_mgr_t *ps_buf_mgr, - WORD32 id, +IH264_ERROR_T ih264_buf_mgr_release(buf_mgr_t *ps_buf_mgr, WORD32 id, UWORD32 mask); -// sets the status to one or all of DISP:REF:DEC -IH264_ERROR_T ih264_buf_mgr_set_status(buf_mgr_t *ps_buf_mgr, - WORD32 id, +IH264_ERROR_T ih264_buf_mgr_set_status(buf_mgr_t *ps_buf_mgr, WORD32 id, UWORD32 mask); -// Gets status of the buffer WORD32 ih264_buf_mgr_get_status(buf_mgr_t *ps_buf_mgr, WORD32 id); -// pass the ID - buffer will be returned void* ih264_buf_mgr_get_buf(buf_mgr_t *ps_buf_mgr, WORD32 id); -//Pass buffer to get ID + WORD32 ih264_buf_mgr_get_bufid(buf_mgr_t *ps_buf_mgr, void *pv_buf); -// will return number of active buffers UWORD32 ih264_buf_mgr_get_num_active_buf(buf_mgr_t *ps_buf_mgr); - - #endif /* _IH264_BUF_MGR_H_ */ diff --git a/common/ih264_cabac_tables.c b/common/ih264_cabac_tables.c index 835ea334..f938a632 100644 --- a/common/ih264_cabac_tables.c +++ b/common/ih264_cabac_tables.c @@ -18,7 +18,6 @@ * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore */ - /** ****************************************************************************** * @file @@ -29,11 +28,10 @@ * cabac state transitions * * @author -* Ittiam +* ittiam * -* @par List of Tables -* - gau4_ih264_cabac_table[][] -* - gau1_ih264_cabac_ctxt_init_table[][][] +* @remarks +* none * ****************************************************************************** */ @@ -51,9230 +49,9222 @@ /*****************************************************************************/ /* Extern global definitions */ /*****************************************************************************/ -/*****************************************************************************/ -/* CABAC TABLES */ -/*****************************************************************************/ -/*combined table :guc_RTAB,NextStateLPS,NextStateMPS - input(combined_state): - bits 0-5: state - bits 6:mps - output - bits 0-7:rangeTabLPS - bits 8-14 :combined_next_state_if_mps - bits 15 -21:combined_next_state_if_lps +/** + ****************************************************************************** + * @brief combined table :guc_RTAB, NextStateLPS, NextStateMPS. + * input combined_state bits 0-5: state, bits 6:mps + * output bits 0-7: rangeTabLPS, bits 8-14 : combined_next_state_if_mps, + * bits 15-21 : combined_next_state_if_lps + ****************************************************************************** */ - const UWORD32 gau4_ih264_cabac_table[128][4] = - { - { 2097536, 2097584, 2097616, 2097648 }, +{ + { 2097536, 2097584, 2097616, 2097648 }, - { 640, 679, 709, 739 }, + { 640, 679, 709, 739 }, - { 33664, 33694, 33723, 33752 }, + { 33664, 33694, 33723, 33752 }, - { 66683, 66710, 66738, 66765 }, + { 66683, 66710, 66738, 66765 }, - { 66932, 66958, 66985, 67011 }, + { 66932, 66958, 66985, 67011 }, - { 132719, 132743, 132768, 132793 }, + { 132719, 132743, 132768, 132793 }, - { 132969, 132992, 133016, 133039 }, + { 132969, 132992, 133016, 133039 }, - { 165988, 166010, 166032, 166054 }, + { 165988, 166010, 166032, 166054 }, - { 199007, 199028, 199049, 199070 }, + { 199007, 199028, 199049, 199070 }, - { 232026, 232046, 232066, 232086 }, + { 232026, 232046, 232066, 232086 }, - { 265045, 265064, 265083, 265102 }, + { 265045, 265064, 265083, 265102 }, - { 298065, 298083, 298101, 298119 }, + { 298065, 298083, 298101, 298119 }, - { 298317, 298334, 298351, 298368 }, + { 298317, 298334, 298351, 298368 }, - { 364105, 364121, 364137, 364154 }, + { 364105, 364121, 364137, 364154 }, - { 364357, 364373, 364388, 364404 }, + { 364357, 364373, 364388, 364404 }, - { 397378, 397392, 397407, 397422 }, + { 397378, 397392, 397407, 397422 }, - { 430398, 430412, 430426, 430440 }, + { 430398, 430412, 430426, 430440 }, - { 430651, 430664, 430678, 430691 }, + { 430651, 430664, 430678, 430691 }, - { 496440, 496453, 496465, 496478 }, + { 496440, 496453, 496465, 496478 }, - { 496693, 496705, 496717, 496729 }, + { 496693, 496705, 496717, 496729 }, - { 529715, 529726, 529737, 529749 }, + { 529715, 529726, 529737, 529749 }, - { 529968, 529979, 529989, 530000 }, + { 529968, 529979, 529989, 530000 }, - { 595758, 595768, 595778, 595788 }, + { 595758, 595768, 595778, 595788 }, - { 596011, 596021, 596031, 596040 }, + { 596011, 596021, 596031, 596040 }, - { 629033, 629042, 629051, 629061 }, + { 629033, 629042, 629051, 629061 }, - { 629287, 629296, 629304, 629313 }, + { 629287, 629296, 629304, 629313 }, - { 695077, 695085, 695094, 695102 }, + { 695077, 695085, 695094, 695102 }, - { 695331, 695339, 695347, 695355 }, + { 695331, 695339, 695347, 695355 }, - { 728353, 728361, 728368, 728376 }, + { 728353, 728361, 728368, 728376 }, - { 728608, 728615, 728622, 728629 }, + { 728608, 728615, 728622, 728629 }, - { 761630, 761637, 761643, 761650 }, + { 761630, 761637, 761643, 761650 }, - { 794653, 794659, 794665, 794672 }, + { 794653, 794659, 794665, 794672 }, - { 794907, 794913, 794919, 794925 }, + { 794907, 794913, 794919, 794925 }, - { 827930, 827935, 827941, 827947 }, + { 827930, 827935, 827941, 827947 }, - { 860952, 860958, 860963, 860969 }, + { 860952, 860958, 860963, 860969 }, - { 861207, 861212, 861217, 861223 }, + { 861207, 861212, 861217, 861223 }, - { 894230, 894235, 894240, 894245 }, + { 894230, 894235, 894240, 894245 }, - { 894485, 894490, 894494, 894499 }, + { 894485, 894490, 894494, 894499 }, - { 927508, 927512, 927517, 927521 }, + { 927508, 927512, 927517, 927521 }, - { 960531, 960535, 960539, 960543 }, + { 960531, 960535, 960539, 960543 }, - { 960786, 960790, 960794, 960798 }, + { 960786, 960790, 960794, 960798 }, - { 993809, 993813, 993817, 993820 }, + { 993809, 993813, 993817, 993820 }, - { 994064, 994068, 994071, 994075 }, + { 994064, 994068, 994071, 994075 }, - { 994319, 994323, 994326, 994329 }, + { 994319, 994323, 994326, 994329 }, - { 1027342, 1027346, 1027349, 1027352 }, + { 1027342, 1027346, 1027349, 1027352 }, - { 1060366, 1060369, 1060372, 1060375 }, + { 1060366, 1060369, 1060372, 1060375 }, - { 1060621, 1060624, 1060627, 1060630 }, + { 1060621, 1060624, 1060627, 1060630 }, - { 1093644, 1093647, 1093650, 1093653 }, + { 1093644, 1093647, 1093650, 1093653 }, - { 1093900, 1093902, 1093905, 1093908 }, + { 1093900, 1093902, 1093905, 1093908 }, - { 1094155, 1094158, 1094160, 1094163 }, + { 1094155, 1094158, 1094160, 1094163 }, - { 1127179, 1127181, 1127183, 1127186 }, + { 1127179, 1127181, 1127183, 1127186 }, - { 1127434, 1127436, 1127439, 1127441 }, + { 1127434, 1127436, 1127439, 1127441 }, - { 1160458, 1160460, 1160462, 1160464 }, + { 1160458, 1160460, 1160462, 1160464 }, - { 1160713, 1160715, 1160717, 1160719 }, + { 1160713, 1160715, 1160717, 1160719 }, - { 1160969, 1160971, 1160972, 1160974 }, + { 1160969, 1160971, 1160972, 1160974 }, - { 1193992, 1193994, 1193996, 1193998 }, + { 1193992, 1193994, 1193996, 1193998 }, - { 1194248, 1194249, 1194251, 1194253 }, + { 1194248, 1194249, 1194251, 1194253 }, - { 1194503, 1194505, 1194507, 1194508 }, + { 1194503, 1194505, 1194507, 1194508 }, - { 1227527, 1227529, 1227530, 1227532 }, + { 1227527, 1227529, 1227530, 1227532 }, - { 1227783, 1227784, 1227786, 1227787 }, + { 1227783, 1227784, 1227786, 1227787 }, - { 1228038, 1228040, 1228041, 1228043 }, + { 1228038, 1228040, 1228041, 1228043 }, - { 1261062, 1261063, 1261065, 1261066 }, + { 1261062, 1261063, 1261065, 1261066 }, - { 1261062, 1261063, 1261064, 1261065 }, + { 1261062, 1261063, 1261064, 1261065 }, - { 2080514, 2080514, 2080514, 2080514 }, + { 2080514, 2080514, 2080514, 2080514 }, - { 16768, 16816, 16848, 16880 }, + { 16768, 16816, 16848, 16880 }, - { 2114176, 2114215, 2114245, 2114275 }, + { 2114176, 2114215, 2114245, 2114275 }, - { 2147200, 2147230, 2147259, 2147288 }, + { 2147200, 2147230, 2147259, 2147288 }, - { 2180219, 2180246, 2180274, 2180301 }, + { 2180219, 2180246, 2180274, 2180301 }, - { 2180468, 2180494, 2180521, 2180547 }, + { 2180468, 2180494, 2180521, 2180547 }, - { 2246255, 2246279, 2246304, 2246329 }, + { 2246255, 2246279, 2246304, 2246329 }, - { 2246505, 2246528, 2246552, 2246575 }, + { 2246505, 2246528, 2246552, 2246575 }, - { 2279524, 2279546, 2279568, 2279590 }, + { 2279524, 2279546, 2279568, 2279590 }, - { 2312543, 2312564, 2312585, 2312606 }, + { 2312543, 2312564, 2312585, 2312606 }, - { 2345562, 2345582, 2345602, 2345622 }, + { 2345562, 2345582, 2345602, 2345622 }, - { 2378581, 2378600, 2378619, 2378638 }, + { 2378581, 2378600, 2378619, 2378638 }, - { 2411601, 2411619, 2411637, 2411655 }, + { 2411601, 2411619, 2411637, 2411655 }, - { 2411853, 2411870, 2411887, 2411904 }, + { 2411853, 2411870, 2411887, 2411904 }, - { 2477641, 2477657, 2477673, 2477690 }, + { 2477641, 2477657, 2477673, 2477690 }, - { 2477893, 2477909, 2477924, 2477940 }, + { 2477893, 2477909, 2477924, 2477940 }, - { 2510914, 2510928, 2510943, 2510958 }, + { 2510914, 2510928, 2510943, 2510958 }, - { 2543934, 2543948, 2543962, 2543976 }, + { 2543934, 2543948, 2543962, 2543976 }, - { 2544187, 2544200, 2544214, 2544227 }, + { 2544187, 2544200, 2544214, 2544227 }, - { 2609976, 2609989, 2610001, 2610014 }, + { 2609976, 2609989, 2610001, 2610014 }, - { 2610229, 2610241, 2610253, 2610265 }, + { 2610229, 2610241, 2610253, 2610265 }, - { 2643251, 2643262, 2643273, 2643285 }, + { 2643251, 2643262, 2643273, 2643285 }, - { 2643504, 2643515, 2643525, 2643536 }, + { 2643504, 2643515, 2643525, 2643536 }, - { 2709294, 2709304, 2709314, 2709324 }, + { 2709294, 2709304, 2709314, 2709324 }, - { 2709547, 2709557, 2709567, 2709576 }, + { 2709547, 2709557, 2709567, 2709576 }, - { 2742569, 2742578, 2742587, 2742597 }, + { 2742569, 2742578, 2742587, 2742597 }, - { 2742823, 2742832, 2742840, 2742849 }, + { 2742823, 2742832, 2742840, 2742849 }, - { 2808613, 2808621, 2808630, 2808638 }, + { 2808613, 2808621, 2808630, 2808638 }, - { 2808867, 2808875, 2808883, 2808891 }, + { 2808867, 2808875, 2808883, 2808891 }, - { 2841889, 2841897, 2841904, 2841912 }, + { 2841889, 2841897, 2841904, 2841912 }, - { 2842144, 2842151, 2842158, 2842165 }, + { 2842144, 2842151, 2842158, 2842165 }, - { 2875166, 2875173, 2875179, 2875186 }, + { 2875166, 2875173, 2875179, 2875186 }, - { 2908189, 2908195, 2908201, 2908208 }, + { 2908189, 2908195, 2908201, 2908208 }, - { 2908443, 2908449, 2908455, 2908461 }, + { 2908443, 2908449, 2908455, 2908461 }, - { 2941466, 2941471, 2941477, 2941483 }, + { 2941466, 2941471, 2941477, 2941483 }, - { 2974488, 2974494, 2974499, 2974505 }, + { 2974488, 2974494, 2974499, 2974505 }, - { 2974743, 2974748, 2974753, 2974759 }, + { 2974743, 2974748, 2974753, 2974759 }, - { 3007766, 3007771, 3007776, 3007781 }, + { 3007766, 3007771, 3007776, 3007781 }, - { 3008021, 3008026, 3008030, 3008035 }, + { 3008021, 3008026, 3008030, 3008035 }, - { 3041044, 3041048, 3041053, 3041057 }, + { 3041044, 3041048, 3041053, 3041057 }, - { 3074067, 3074071, 3074075, 3074079 }, + { 3074067, 3074071, 3074075, 3074079 }, - { 3074322, 3074326, 3074330, 3074334 }, + { 3074322, 3074326, 3074330, 3074334 }, - { 3107345, 3107349, 3107353, 3107356 }, + { 3107345, 3107349, 3107353, 3107356 }, - { 3107600, 3107604, 3107607, 3107611 }, + { 3107600, 3107604, 3107607, 3107611 }, - { 3107855, 3107859, 3107862, 3107865 }, + { 3107855, 3107859, 3107862, 3107865 }, - { 3140878, 3140882, 3140885, 3140888 }, + { 3140878, 3140882, 3140885, 3140888 }, - { 3173902, 3173905, 3173908, 3173911 }, + { 3173902, 3173905, 3173908, 3173911 }, - { 3174157, 3174160, 3174163, 3174166 }, + { 3174157, 3174160, 3174163, 3174166 }, - { 3207180, 3207183, 3207186, 3207189 }, + { 3207180, 3207183, 3207186, 3207189 }, - { 3207436, 3207438, 3207441, 3207444 }, + { 3207436, 3207438, 3207441, 3207444 }, - { 3207691, 3207694, 3207696, 3207699 }, + { 3207691, 3207694, 3207696, 3207699 }, - { 3240715, 3240717, 3240719, 3240722 }, + { 3240715, 3240717, 3240719, 3240722 }, - { 3240970, 3240972, 3240975, 3240977 }, + { 3240970, 3240972, 3240975, 3240977 }, - { 3273994, 3273996, 3273998, 3274000 }, + { 3273994, 3273996, 3273998, 3274000 }, - { 3274249, 3274251, 3274253, 3274255 }, + { 3274249, 3274251, 3274253, 3274255 }, - { 3274505, 3274507, 3274508, 3274510 }, + { 3274505, 3274507, 3274508, 3274510 }, - { 3307528, 3307530, 3307532, 3307534 }, + { 3307528, 3307530, 3307532, 3307534 }, - { 3307784, 3307785, 3307787, 3307789 }, + { 3307784, 3307785, 3307787, 3307789 }, - { 3308039, 3308041, 3308043, 3308044 }, + { 3308039, 3308041, 3308043, 3308044 }, - { 3341063, 3341065, 3341066, 3341068 }, + { 3341063, 3341065, 3341066, 3341068 }, - { 3341319, 3341320, 3341322, 3341323 }, + { 3341319, 3341320, 3341322, 3341323 }, - { 3341574, 3341576, 3341577, 3341579 }, + { 3341574, 3341576, 3341577, 3341579 }, - { 3374598, 3374599, 3374601, 3374602 }, + { 3374598, 3374599, 3374601, 3374602 }, - { 3374598, 3374599, 3374600, 3374601 }, + { 3374598, 3374599, 3374600, 3374601 }, - { 4194050, 4194050, 4194050, 4194050 }, + { 4194050, 4194050, 4194050, 4194050 }, + +}; - }; -/*****************************************************************************/ -/* Global Variable Initialization */ -/*****************************************************************************/ const UWORD8 gau1_ih264_cabac_ctxt_init_table[NUM_CAB_INIT_IDC_PLUS_ONE][QP_RANGE][NUM_CABAC_CTXTS] = +{ + + { - { - - { - - { - - 62, - 9, 74, 62, 9, 74, 126, 104, 10, 9, 12, 30, 61, 62, - 54, 14, 118, 6, 78, 65, 1, 14, 73, 13, 64, 20, 62, - 67, 90, 104, 126, 104, 67, 78, 65, 1, 86, 95, 2, - 18, 69, 81, 96, 8, 67, 86, 88, 5, 76, 94, 9, 69, - 81, 88, 67, 74, 74, 80, 72, 5, 22, 0, 0, 0, 83, - 86, 97, 72, 22, 1, 18, 78, 96, 126, 98, 101, 67, - 82, 94, 83, 110, 91, 102, 93, 126, 92, 89, 96, - 108, 17, 65, 6, 93, 74, 92, 87, 126, 9, 3, 4, 69, - 15, 68, 69, 88, 85, 78, 75, 77, 9, 13, 68, 13, 21, - 81, 0, 70, 67, 6, 76, 28, 64, 2, 28, 38, 39, 34, - 27, 93, 73, 73, 17, 14, 100, 10, 10, 10, 2, 7, 7, - 0, 3, 1, 6, 69, 6, 24, 12, 68, 64, 2, 0, 13, 24, - 19, 11, 15, 3, 4, 4, 30, 19, 20, 78, 3, 69, 35, - 23, 19, 14, 17, 19, 12, 16, 24, 1, 17, 9, 9, 5, 0, - 12, 6, 10, 11, 8, 18, 27, 10, 82, 8, 78, 17, 32, - 84, 56, 62, 60, 59, 62, 62, 57, 57, 54, 44, 36, - 33, 43, 29, 70, 67, 4, 67, 33, 31, 28, 34, 32, 25, - 20, 22, 0, 4, 64, 94, 89, 108, 76, 19, 18, 11, 64, - 4, 70, 75, 82, 102, 77, 39, 21, 15, 8, 4, 71, 83, - 87, 119, 5, 34, 27, 25, 20, 8, 5, 64, 74, 90, 70, - 34, 32, 21, 4, 5, 72, 81, 97, 5, 58, 49, 45, 36, - 23, 5, 70, 79, 85, 62, 106, 106, 87, 114, 110, 98, - 110, 106, 103, 107, 108, 112, 96, 95, 91, 93, 94, - 86, 67, 80, 85, 70, 3, 5, 2, 13, 13, 14, 9, 22, - 17, 12, 14, 11, 22, 16, 8, 22, 19, 13, 10, 14, 0, - 64, 69, 4, 70, 19, 32, 20, 10, 29, 25, 11, 23, 31, - 19, 25, 13, 6, 20, 52, 49, 52, 52, 54, 62, 62, 62, - 62, 62, 62, 62, 62, 62, 34, 62, 62, 62, 62, 62, - 62, 54, 37, 36, 6, 82, 75, 97, 125, 62, 62, 62, - 57, 55, 53, 41, 44, 31, 32, 22, 19, 16, 65, 71, 3, - 0, 65, 39, 43, 40, 31, 40, 39, 23, 31, 34, 21, 6, - 10, 2, 86, 23, 12, 4, 79, 71, 69, 70, 66, 68, 73, - 69, 70, 67, 1, 70, 66, 65, 0, 62, 62, 62, 62, 62, - 60, 54, 36, 4, 66, 28, 21, 18, 15, 7, 3, 1, 66, - 76, 85, 81, 77, 81, 80, 73, 74, 83, 71, 67, 2, 66, - 66, 4, 4, 62, 62, 62, 62, 61, 57, 46, 29, 1 }, - - { - - 62, - 9, 74, 62, 9, 74, 125, 102, 11, 10, 12, 29, 60, - 62, 54, 14, 115, 6, 77, 64, 1, 14, 72, 12, 65, - 20, 62, 68, 91, 104, 124, 102, 67, 77, 64, 1, - 85, 93, 3, 18, 68, 80, 95, 8, 67, 85, 88, 5, 75, - 93, 9, 69, 80, 88, 66, 73, 73, 79, 71, 5, 22, 0, - 0, 0, 82, 86, 97, 71, 22, 1, 18, 77, 95, 124, - 96, 99, 65, 80, 92, 82, 108, 89, 100, 92, 125, - 91, 88, 95, 107, 18, 64, 7, 92, 73, 91, 86, 124, - 9, 3, 4, 69, 16, 68, 68, 87, 84, 77, 74, 76, 9, - 13, 67, 13, 21, 80, 0, 69, 67, 6, 75, 28, 64, 2, - 28, 37, 39, 34, 27, 92, 72, 72, 17, 14, 99, 10, - 10, 10, 3, 7, 7, 1, 4, 2, 6, 68, 6, 24, 12, 68, - 64, 2, 0, 13, 23, 19, 11, 15, 4, 5, 4, 29, 19, - 20, 77, 3, 69, 35, 23, 19, 14, 17, 19, 12, 16, - 24, 1, 17, 9, 9, 5, 0, 12, 6, 10, 11, 8, 18, 27, - 10, 81, 8, 77, 17, 31, 83, 55, 62, 59, 58, 61, - 62, 56, 56, 52, 43, 35, 32, 41, 28, 71, 67, 4, - 67, 32, 30, 27, 33, 31, 24, 19, 21, 0, 4, 64, - 93, 88, 107, 75, 20, 18, 11, 0, 5, 69, 74, 81, - 100, 76, 39, 21, 15, 8, 5, 70, 82, 86, 117, 5, - 35, 28, 25, 20, 9, 5, 64, 73, 89, 70, 35, 32, - 21, 4, 6, 71, 80, 96, 5, 58, 49, 45, 36, 23, 5, - 69, 78, 84, 62, 105, 105, 86, 112, 108, 97, 108, - 104, 101, 105, 106, 110, 95, 94, 90, 92, 92, 85, - 67, 79, 84, 69, 3, 5, 2, 13, 13, 13, 8, 22, 17, - 13, 14, 11, 22, 16, 8, 22, 19, 13, 10, 14, 0, - 64, 68, 5, 70, 19, 32, 20, 10, 29, 25, 12, 23, - 30, 19, 25, 13, 6, 19, 52, 49, 52, 51, 53, 62, - 62, 62, 62, 62, 62, 62, 62, 62, 33, 62, 62, 62, - 62, 62, 62, 53, 36, 35, 6, 81, 74, 95, 122, 62, - 62, 62, 56, 53, 52, 40, 42, 30, 31, 21, 18, 15, - 66, 71, 3, 0, 66, 38, 42, 39, 30, 39, 38, 22, - 30, 33, 20, 5, 9, 1, 86, 23, 12, 4, 78, 70, 68, - 69, 65, 67, 71, 68, 69, 66, 3, 68, 65, 0, 2, 62, - 62, 62, 62, 62, 58, 51, 34, 2, 65, 29, 22, 19, - 16, 8, 4, 2, 65, 75, 84, 80, 76, 80, 78, 71, 73, - 82, 70, 66, 3, 65, 65, 4, 4, 62, 62, 62, 62, 58, - 54, 43, 26, 64 }, - - { - - 62, - 9, 74, 62, 9, 74, 123, 101, 11, 10, 12, 28, 59, - 61, 54, 14, 113, 6, 76, 0, 1, 13, 72, 11, 66, - 19, 60, 70, 92, 105, 121, 101, 67, 76, 0, 1, 85, - 92, 3, 17, 68, 80, 94, 8, 67, 85, 88, 5, 75, 92, - 9, 69, 80, 88, 66, 73, 73, 79, 71, 5, 22, 0, 0, - 0, 81, 86, 97, 71, 21, 1, 18, 77, 95, 122, 94, - 97, 64, 78, 91, 81, 107, 88, 99, 91, 123, 91, - 88, 95, 106, 18, 64, 7, 91, 73, 90, 86, 123, 9, - 3, 4, 69, 16, 68, 68, 87, 84, 77, 74, 76, 9, 13, - 67, 13, 21, 80, 0, 69, 67, 6, 75, 27, 64, 2, 27, - 36, 38, 33, 26, 91, 72, 72, 16, 13, 99, 9, 10, - 10, 3, 7, 7, 2, 4, 2, 6, 68, 6, 23, 12, 69, 64, - 2, 64, 13, 22, 19, 11, 14, 4, 5, 4, 28, 19, 19, - 77, 3, 70, 34, 23, 19, 14, 17, 19, 12, 16, 24, - 1, 17, 9, 9, 5, 0, 12, 6, 10, 11, 8, 17, 26, 9, - 81, 8, 77, 16, 30, 83, 53, 62, 57, 56, 59, 60, - 54, 54, 50, 41, 33, 30, 39, 26, 72, 67, 4, 68, - 31, 29, 26, 32, 29, 23, 18, 20, 64, 3, 65, 93, - 88, 106, 75, 20, 18, 11, 0, 5, 69, 74, 81, 99, - 75, 39, 21, 15, 8, 5, 70, 81, 85, 115, 5, 35, - 28, 25, 20, 9, 5, 64, 73, 88, 70, 35, 32, 21, 4, - 6, 71, 80, 95, 5, 57, 48, 44, 35, 23, 5, 69, 78, - 84, 62, 104, 104, 85, 111, 107, 96, 107, 103, - 100, 104, 105, 108, 94, 93, 90, 91, 91, 85, 68, - 79, 83, 69, 3, 4, 2, 12, 12, 12, 7, 21, 17, 13, - 14, 10, 21, 16, 8, 21, 18, 13, 10, 13, 0, 64, - 68, 5, 70, 18, 31, 19, 10, 28, 24, 12, 22, 29, - 19, 25, 12, 5, 17, 51, 48, 51, 50, 52, 62, 62, - 62, 62, 62, 62, 62, 62, 62, 32, 62, 62, 62, 62, - 62, 62, 51, 35, 34, 6, 80, 74, 94, 120, 60, 60, - 62, 54, 51, 50, 38, 40, 29, 29, 20, 16, 14, 67, - 72, 2, 0, 67, 37, 41, 37, 28, 37, 36, 21, 28, - 31, 19, 4, 8, 0, 87, 22, 11, 3, 78, 70, 68, 68, - 65, 66, 70, 67, 68, 65, 4, 67, 64, 1, 3, 62, 62, - 62, 62, 60, 55, 48, 31, 0, 65, 29, 22, 19, 16, - 9, 4, 2, 65, 75, 84, 80, 75, 80, 77, 70, 73, 81, - 69, 65, 3, 65, 64, 4, 4, 62, 62, 62, 60, 55, 50, - 39, 23, 67 }, - - { - - 62, - 9, 74, 62, 9, 74, 121, 99, 12, 10, 11, 26, 57, - 60, 54, 14, 111, 6, 75, 1, 1, 12, 72, 10, 67, - 19, 58, 71, 93, 105, 118, 100, 67, 75, 1, 1, 84, - 91, 4, 17, 68, 79, 93, 7, 68, 85, 88, 5, 75, 92, - 9, 69, 80, 88, 65, 73, 73, 79, 70, 5, 22, 0, 0, - 0, 81, 86, 97, 70, 20, 1, 18, 77, 95, 120, 92, - 96, 1, 76, 90, 80, 105, 87, 98, 90, 121, 90, 88, - 94, 105, 18, 64, 7, 91, 73, 90, 85, 121, 9, 2, - 3, 70, 16, 68, 68, 86, 84, 76, 74, 75, 9, 13, - 67, 13, 20, 80, 0, 69, 67, 6, 75, 26, 64, 2, 26, - 35, 37, 32, 25, 91, 71, 72, 15, 13, 98, 9, 10, - 10, 3, 7, 7, 3, 4, 2, 6, 67, 6, 22, 12, 70, 64, - 2, 64, 12, 21, 19, 11, 13, 4, 5, 4, 26, 19, 18, - 77, 3, 70, 33, 23, 19, 14, 17, 19, 12, 16, 24, - 1, 16, 9, 9, 5, 0, 11, 5, 9, 10, 7, 16, 25, 9, - 81, 7, 77, 15, 28, 83, 52, 62, 55, 54, 57, 58, - 52, 52, 48, 39, 32, 29, 37, 24, 73, 67, 4, 68, - 30, 28, 25, 30, 28, 21, 17, 19, 65, 3, 65, 93, - 88, 106, 74, 20, 18, 11, 0, 5, 69, 74, 80, 98, - 75, 39, 21, 15, 8, 6, 69, 80, 84, 113, 5, 35, - 28, 25, 20, 10, 5, 64, 73, 88, 70, 35, 32, 20, - 4, 6, 71, 80, 94, 5, 57, 48, 43, 34, 23, 5, 69, - 77, 83, 62, 103, 103, 85, 110, 106, 95, 105, - 102, 99, 103, 103, 107, 94, 92, 90, 91, 89, 85, - 68, 79, 83, 69, 2, 4, 2, 11, 11, 11, 6, 21, 16, - 13, 13, 10, 21, 15, 8, 20, 18, 12, 10, 12, 0, - 65, 68, 5, 71, 18, 31, 18, 10, 27, 24, 12, 21, - 28, 18, 24, 11, 5, 16, 50, 47, 51, 49, 51, 61, - 62, 62, 62, 62, 62, 62, 62, 62, 31, 62, 62, 62, - 62, 62, 62, 49, 34, 33, 6, 79, 74, 93, 118, 58, - 58, 62, 52, 49, 48, 37, 38, 27, 28, 19, 15, 12, - 68, 73, 2, 64, 68, 36, 39, 36, 26, 35, 34, 19, - 27, 29, 17, 3, 6, 65, 88, 21, 10, 2, 78, 69, 68, - 68, 64, 66, 69, 66, 67, 64, 5, 66, 0, 3, 4, 62, - 62, 62, 62, 58, 52, 45, 28, 65, 64, 30, 23, 20, - 16, 10, 5, 2, 64, 74, 84, 79, 75, 79, 76, 69, - 73, 81, 69, 65, 3, 64, 0, 4, 4, 62, 62, 62, 57, - 52, 46, 35, 19, 69 }, - - { - - 62, - 9, 74, 62, 9, 74, 120, 98, 12, 10, 11, 25, 56, - 58, 54, 14, 108, 5, 74, 1, 1, 11, 72, 9, 68, 18, - 56, 73, 94, 106, 115, 99, 67, 74, 1, 1, 84, 90, - 4, 16, 68, 79, 93, 7, 68, 84, 88, 5, 75, 91, 8, - 70, 80, 88, 65, 72, 73, 78, 70, 5, 22, 0, 0, 0, - 80, 87, 97, 70, 19, 1, 18, 77, 95, 119, 91, 94, - 2, 75, 89, 79, 104, 85, 97, 89, 119, 90, 87, 94, - 104, 18, 64, 7, 90, 73, 89, 85, 120, 8, 2, 3, - 70, 16, 68, 68, 86, 84, 76, 74, 75, 9, 12, 67, - 13, 20, 80, 0, 69, 67, 6, 75, 26, 65, 2, 26, 34, - 36, 31, 24, 90, 71, 72, 14, 12, 98, 8, 10, 9, 3, - 7, 7, 4, 5, 2, 5, 67, 5, 21, 11, 71, 64, 2, 65, - 12, 20, 18, 10, 13, 5, 5, 4, 25, 18, 17, 77, 3, - 71, 33, 23, 19, 14, 17, 19, 12, 16, 23, 1, 16, - 9, 9, 5, 64, 11, 5, 9, 10, 7, 16, 24, 8, 81, 7, - 77, 14, 27, 83, 50, 62, 53, 52, 55, 56, 50, 50, - 46, 37, 30, 27, 34, 22, 74, 67, 3, 69, 29, 27, - 24, 29, 26, 20, 16, 17, 65, 2, 66, 93, 88, 105, - 74, 20, 18, 11, 0, 5, 69, 74, 80, 97, 74, 39, - 21, 15, 8, 6, 69, 80, 84, 111, 5, 35, 28, 25, - 20, 10, 5, 64, 73, 87, 70, 35, 31, 20, 4, 6, 71, - 80, 94, 5, 56, 47, 42, 33, 23, 5, 69, 77, 83, - 62, 102, 102, 84, 108, 105, 94, 104, 100, 98, - 101, 102, 105, 93, 92, 89, 90, 88, 84, 69, 79, - 82, 69, 2, 3, 1, 10, 10, 10, 5, 20, 16, 13, 13, - 9, 20, 15, 8, 19, 17, 12, 9, 11, 64, 65, 68, 5, - 71, 17, 30, 17, 10, 26, 23, 12, 20, 27, 18, 24, - 10, 4, 14, 49, 47, 50, 48, 49, 60, 62, 62, 62, - 62, 62, 62, 62, 62, 29, 62, 62, 62, 62, 62, 62, - 47, 33, 31, 6, 78, 73, 92, 116, 57, 56, 60, 51, - 47, 46, 35, 36, 26, 26, 17, 13, 11, 69, 74, 1, - 64, 69, 34, 38, 34, 25, 33, 32, 18, 25, 27, 16, - 2, 5, 66, 88, 20, 10, 1, 78, 69, 67, 67, 64, 65, - 68, 66, 66, 0, 6, 65, 1, 4, 5, 62, 62, 62, 61, - 55, 49, 42, 25, 68, 64, 30, 23, 20, 17, 10, 5, - 3, 64, 74, 83, 79, 74, 79, 75, 68, 73, 80, 68, - 64, 3, 64, 1, 4, 4, 62, 62, 61, 54, 49, 42, 31, - 16, 72 }, - - { - - 62, - 9, 74, 62, 9, 74, 118, 96, 12, 10, 10, 23, 54, - 57, 54, 14, 106, 5, 73, 2, 1, 11, 71, 8, 69, 18, - 54, 75, 95, 106, 112, 97, 67, 73, 2, 1, 84, 89, - 4, 16, 68, 79, 92, 7, 69, 84, 88, 5, 75, 90, 8, - 70, 80, 88, 64, 72, 72, 78, 69, 5, 22, 0, 0, 0, - 80, 87, 97, 69, 18, 1, 18, 76, 95, 117, 89, 93, - 4, 73, 87, 78, 103, 84, 96, 88, 117, 89, 87, 93, - 103, 18, 64, 7, 90, 73, 89, 84, 118, 8, 2, 3, - 70, 16, 68, 67, 85, 84, 76, 74, 74, 9, 12, 67, - 13, 20, 79, 0, 68, 67, 6, 75, 25, 65, 2, 25, 33, - 36, 30, 23, 89, 70, 72, 13, 12, 97, 8, 10, 9, 3, - 7, 7, 5, 5, 2, 5, 67, 5, 20, 11, 72, 64, 2, 65, - 11, 19, 18, 10, 12, 5, 5, 4, 24, 18, 16, 77, 3, - 71, 32, 23, 19, 14, 17, 19, 12, 16, 23, 1, 16, - 9, 9, 5, 64, 11, 5, 8, 10, 7, 15, 23, 8, 81, 6, - 77, 13, 26, 83, 49, 61, 52, 51, 53, 54, 48, 48, - 44, 35, 28, 25, 32, 21, 75, 67, 3, 69, 28, 26, - 23, 28, 25, 18, 15, 16, 66, 2, 66, 93, 88, 105, - 74, 20, 18, 11, 0, 5, 68, 73, 79, 96, 74, 39, - 21, 15, 8, 6, 68, 79, 83, 109, 5, 35, 28, 25, - 20, 10, 5, 64, 73, 86, 70, 36, 31, 19, 4, 6, 71, - 80, 93, 5, 56, 46, 41, 32, 23, 5, 69, 77, 82, - 62, 101, 101, 83, 107, 104, 93, 103, 99, 97, - 100, 100, 103, 92, 91, 89, 90, 87, 84, 69, 78, - 81, 69, 1, 3, 1, 10, 9, 9, 4, 19, 15, 13, 12, 9, - 20, 15, 8, 18, 16, 12, 9, 10, 64, 65, 68, 5, 71, - 16, 30, 17, 10, 25, 22, 12, 19, 26, 17, 23, 9, - 3, 12, 48, 46, 50, 47, 48, 58, 62, 62, 62, 62, - 62, 62, 62, 62, 28, 62, 62, 62, 62, 62, 61, 45, - 32, 30, 6, 77, 73, 91, 114, 55, 55, 58, 49, 45, - 44, 34, 34, 25, 24, 16, 11, 9, 70, 75, 1, 64, - 70, 33, 36, 32, 23, 32, 31, 16, 24, 26, 14, 1, - 4, 67, 89, 20, 9, 0, 77, 68, 67, 67, 0, 64, 67, - 65, 65, 1, 8, 64, 2, 5, 7, 62, 62, 62, 58, 53, - 46, 39, 22, 70, 64, 31, 24, 21, 17, 11, 5, 3, 0, - 73, 83, 79, 73, 78, 74, 67, 72, 79, 68, 64, 3, - 0, 2, 4, 4, 62, 62, 58, 51, 46, 39, 27, 12, 75 }, - - { - - 62, - 9, 75, 62, 9, 75, 116, 95, 13, 10, 10, 22, 53, - 56, 54, 14, 104, 5, 73, 3, 1, 10, 71, 7, 70, 17, - 53, 76, 96, 107, 109, 96, 67, 73, 3, 1, 83, 88, - 5, 15, 67, 78, 91, 6, 69, 84, 88, 5, 74, 90, 8, - 70, 79, 88, 64, 72, 72, 78, 69, 5, 22, 0, 0, 0, - 79, 87, 97, 69, 18, 0, 18, 76, 94, 115, 87, 91, - 5, 71, 86, 77, 101, 83, 95, 88, 116, 89, 87, 93, - 103, 19, 64, 7, 89, 72, 88, 84, 117, 8, 1, 2, - 71, 16, 68, 67, 85, 84, 75, 74, 74, 9, 12, 66, - 13, 19, 79, 0, 68, 67, 6, 75, 24, 65, 2, 24, 32, - 35, 30, 23, 89, 70, 72, 13, 11, 97, 7, 10, 9, 3, - 7, 7, 5, 5, 2, 5, 66, 5, 19, 11, 72, 65, 2, 66, - 11, 18, 18, 10, 11, 5, 5, 4, 22, 18, 15, 77, 3, - 72, 31, 23, 18, 14, 17, 19, 12, 16, 23, 1, 15, - 9, 8, 5, 64, 10, 4, 8, 9, 6, 14, 22, 7, 81, 6, - 76, 12, 24, 83, 47, 59, 50, 49, 51, 52, 46, 46, - 42, 33, 27, 24, 30, 19, 76, 67, 3, 70, 27, 25, - 22, 26, 23, 17, 14, 15, 67, 1, 67, 93, 88, 104, - 73, 20, 18, 11, 1, 5, 68, 73, 79, 95, 73, 38, - 21, 15, 8, 7, 68, 78, 82, 107, 5, 36, 28, 25, - 20, 11, 5, 64, 72, 86, 70, 36, 31, 19, 4, 6, 70, - 79, 92, 5, 55, 46, 40, 32, 23, 5, 68, 76, 82, - 62, 101, 100, 83, 106, 103, 92, 101, 98, 96, 99, - 99, 102, 92, 90, 89, 89, 85, 84, 70, 78, 81, 69, - 1, 2, 1, 9, 8, 8, 3, 19, 15, 13, 12, 8, 19, 14, - 8, 18, 16, 11, 9, 10, 64, 66, 68, 5, 72, 16, 29, - 16, 9, 24, 22, 13, 19, 25, 17, 23, 9, 3, 11, 47, - 45, 49, 46, 47, 57, 62, 62, 62, 62, 62, 62, 62, - 61, 27, 62, 62, 62, 62, 62, 59, 43, 31, 29, 6, - 76, 73, 89, 111, 53, 53, 56, 47, 43, 42, 32, 32, - 23, 23, 15, 10, 8, 71, 76, 0, 65, 71, 32, 35, - 31, 21, 30, 29, 15, 22, 24, 13, 64, 2, 69, 90, - 19, 8, 64, 77, 68, 67, 66, 0, 64, 65, 64, 64, 2, - 9, 1, 3, 7, 8, 62, 62, 60, 56, 50, 44, 36, 20, - 72, 0, 31, 24, 21, 17, 12, 6, 3, 0, 73, 83, 78, - 73, 78, 73, 66, 72, 79, 67, 0, 3, 0, 3, 4, 4, - 62, 62, 56, 48, 42, 35, 24, 9, 77 }, - - { - - 62, - 9, 75, 62, 9, 75, 114, 93, 13, 10, 9, 20, 51, - 54, 54, 14, 101, 4, 72, 3, 1, 9, 71, 6, 71, 17, - 51, 78, 97, 107, 106, 95, 67, 72, 3, 1, 83, 87, - 5, 15, 67, 78, 91, 6, 70, 83, 88, 5, 74, 89, 7, - 70, 79, 88, 0, 71, 72, 77, 68, 5, 22, 0, 0, 0, - 79, 87, 97, 68, 17, 0, 18, 76, 94, 114, 85, 90, - 7, 69, 85, 76, 100, 81, 94, 87, 114, 88, 86, 92, - 102, 19, 64, 7, 89, 72, 88, 83, 115, 7, 1, 2, - 71, 16, 68, 67, 84, 84, 75, 74, 73, 9, 11, 66, - 13, 19, 79, 0, 68, 67, 6, 75, 24, 65, 2, 24, 31, - 34, 29, 22, 88, 69, 72, 12, 11, 96, 7, 10, 8, 3, - 7, 7, 6, 6, 2, 5, 66, 5, 18, 11, 73, 65, 2, 66, - 10, 17, 17, 10, 11, 6, 5, 4, 21, 17, 14, 77, 3, - 72, 31, 23, 18, 14, 17, 19, 12, 16, 23, 1, 15, - 9, 8, 5, 64, 10, 4, 7, 9, 6, 14, 21, 7, 81, 5, - 76, 11, 23, 83, 46, 57, 48, 47, 49, 50, 44, 44, - 40, 31, 25, 22, 27, 17, 77, 67, 2, 70, 26, 24, - 21, 25, 22, 15, 13, 14, 67, 1, 67, 93, 88, 104, - 73, 20, 18, 11, 1, 5, 68, 73, 78, 94, 73, 38, - 21, 15, 8, 7, 67, 77, 82, 105, 5, 36, 28, 25, - 20, 11, 5, 64, 72, 85, 70, 36, 30, 18, 4, 6, 70, - 79, 92, 5, 55, 45, 39, 31, 23, 5, 68, 76, 81, - 62, 100, 99, 82, 104, 102, 91, 100, 96, 95, 97, - 97, 100, 91, 89, 88, 89, 84, 83, 70, 78, 80, 69, - 0, 2, 0, 8, 7, 7, 2, 18, 14, 13, 11, 8, 19, 14, - 8, 17, 15, 11, 8, 9, 64, 66, 68, 5, 72, 15, 29, - 15, 9, 23, 21, 13, 18, 24, 16, 22, 8, 2, 9, 46, - 45, 49, 45, 45, 55, 62, 62, 62, 62, 62, 62, 62, - 59, 25, 62, 62, 62, 62, 62, 56, 41, 30, 28, 6, - 75, 72, 88, 109, 52, 51, 54, 46, 41, 40, 31, 30, - 22, 21, 13, 8, 6, 72, 77, 0, 65, 72, 30, 33, 29, - 20, 28, 27, 13, 21, 22, 11, 65, 1, 70, 90, 18, - 8, 65, 77, 67, 66, 66, 1, 0, 64, 0, 0, 3, 10, 2, - 4, 8, 9, 62, 61, 58, 53, 48, 41, 33, 17, 74, 0, - 32, 25, 22, 18, 13, 6, 4, 1, 72, 82, 78, 72, 77, - 72, 65, 72, 78, 67, 0, 3, 1, 4, 4, 4, 62, 62, - 53, 45, 39, 31, 20, 5, 80 }, - - { - - 62, - 8, 75, 62, 8, 75, 113, 92, 13, 10, 9, 19, 50, - 53, 54, 14, 99, 4, 71, 4, 1, 8, 71, 5, 73, 16, - 49, 80, 98, 108, 104, 94, 67, 71, 4, 1, 83, 86, - 5, 14, 67, 78, 90, 5, 70, 83, 89, 5, 74, 89, 7, - 71, 79, 88, 0, 71, 72, 77, 68, 5, 22, 0, 0, 0, - 78, 88, 97, 68, 16, 0, 18, 76, 94, 112, 84, 88, - 8, 68, 84, 75, 99, 80, 93, 86, 112, 88, 86, 92, - 101, 19, 64, 7, 88, 72, 87, 83, 114, 7, 0, 1, - 72, 16, 68, 67, 84, 84, 75, 74, 73, 8, 11, 66, - 13, 18, 79, 0, 68, 67, 5, 75, 23, 66, 2, 23, 29, - 33, 28, 21, 88, 69, 72, 11, 10, 96, 6, 9, 8, 3, - 7, 7, 7, 6, 2, 4, 66, 4, 17, 10, 74, 65, 2, 67, - 10, 16, 17, 9, 10, 6, 5, 4, 19, 17, 13, 77, 3, - 73, 30, 22, 18, 14, 17, 18, 11, 16, 22, 0, 14, - 9, 8, 4, 65, 9, 3, 7, 8, 5, 13, 20, 6, 81, 5, - 76, 10, 21, 83, 44, 55, 46, 45, 47, 47, 42, 42, - 38, 29, 23, 20, 25, 15, 78, 67, 2, 71, 25, 22, - 19, 23, 20, 14, 11, 12, 68, 0, 68, 93, 88, 103, - 73, 20, 18, 11, 1, 5, 68, 73, 78, 93, 72, 38, - 21, 15, 8, 7, 67, 77, 81, 104, 5, 36, 28, 25, - 19, 11, 5, 64, 72, 85, 70, 36, 30, 18, 4, 6, 70, - 79, 91, 5, 54, 44, 38, 30, 22, 5, 68, 76, 81, - 62, 99, 98, 82, 103, 101, 91, 99, 95, 94, 96, - 96, 99, 91, 89, 88, 88, 83, 83, 71, 78, 80, 69, - 0, 1, 0, 7, 6, 5, 1, 17, 14, 13, 11, 7, 18, 13, - 7, 16, 14, 10, 8, 8, 65, 67, 68, 5, 73, 14, 28, - 14, 9, 22, 20, 13, 17, 23, 16, 22, 7, 1, 7, 45, - 44, 48, 43, 44, 54, 62, 62, 62, 62, 62, 62, 62, - 56, 24, 62, 62, 62, 62, 61, 54, 39, 28, 26, 6, - 75, 72, 87, 107, 50, 49, 52, 44, 38, 38, 29, 28, - 20, 19, 12, 6, 5, 73, 78, 64, 66, 73, 29, 32, - 27, 18, 26, 25, 12, 19, 20, 10, 66, 64, 72, 91, - 17, 7, 66, 77, 67, 66, 65, 1, 0, 0, 0, 1, 4, 11, - 3, 5, 9, 10, 61, 59, 56, 51, 45, 38, 30, 14, 77, - 0, 32, 25, 22, 18, 13, 6, 4, 1, 72, 82, 78, 72, - 77, 71, 64, 72, 78, 66, 1, 3, 1, 4, 4, 3, 62, - 61, 51, 42, 36, 27, 16, 2, 83 }, - - { - - 62, - 8, 75, 62, 8, 75, 111, 91, 14, 10, 9, 18, 49, - 52, 54, 14, 97, 4, 70, 5, 1, 8, 70, 4, 74, 15, - 47, 81, 99, 109, 101, 92, 67, 70, 5, 1, 82, 85, - 6, 13, 67, 77, 89, 5, 70, 83, 89, 5, 74, 88, 7, - 71, 79, 88, 0, 71, 71, 77, 68, 5, 22, 0, 0, 0, - 77, 88, 97, 68, 15, 0, 18, 75, 94, 110, 82, 86, - 9, 66, 82, 74, 97, 79, 91, 85, 110, 88, 86, 92, - 100, 19, 64, 7, 87, 72, 86, 82, 113, 7, 0, 1, - 72, 16, 68, 66, 83, 83, 74, 74, 73, 8, 11, 66, - 13, 18, 78, 0, 67, 67, 5, 74, 22, 66, 2, 22, 28, - 33, 27, 20, 87, 69, 71, 10, 9, 96, 5, 9, 8, 4, - 7, 7, 8, 6, 2, 4, 65, 4, 17, 10, 75, 65, 2, 68, - 10, 15, 17, 9, 9, 6, 5, 4, 18, 17, 13, 77, 3, - 74, 29, 22, 18, 14, 17, 18, 11, 16, 22, 0, 14, - 9, 8, 4, 65, 9, 3, 7, 8, 5, 12, 20, 6, 81, 5, - 76, 9, 20, 83, 42, 54, 45, 44, 45, 45, 41, 41, - 36, 27, 22, 19, 23, 14, 79, 67, 2, 72, 24, 21, - 18, 22, 19, 13, 10, 11, 69, 64, 69, 93, 87, 102, - 72, 21, 18, 11, 1, 6, 67, 72, 77, 92, 71, 38, - 21, 15, 8, 8, 67, 76, 80, 102, 5, 36, 28, 25, - 19, 12, 5, 64, 72, 84, 70, 37, 30, 18, 4, 7, 70, - 79, 90, 5, 54, 44, 38, 29, 22, 5, 68, 75, 80, - 62, 98, 97, 81, 102, 99, 90, 97, 94, 92, 95, 95, - 97, 90, 88, 88, 87, 81, 83, 72, 77, 79, 69, 0, - 0, 0, 7, 5, 4, 0, 17, 14, 13, 11, 7, 17, 13, 7, - 15, 14, 10, 8, 7, 65, 67, 67, 6, 73, 14, 27, 14, - 9, 22, 20, 13, 16, 22, 16, 22, 6, 1, 6, 45, 43, - 47, 42, 43, 53, 60, 60, 62, 62, 62, 62, 62, 54, - 23, 62, 62, 62, 62, 58, 52, 38, 27, 25, 6, 74, - 72, 86, 105, 48, 48, 50, 42, 36, 37, 28, 26, 19, - 18, 11, 5, 4, 74, 78, 64, 66, 74, 28, 31, 26, - 16, 25, 24, 11, 18, 19, 9, 67, 65, 73, 92, 17, - 6, 66, 76, 67, 66, 64, 2, 1, 1, 1, 2, 5, 13, 4, - 6, 11, 12, 60, 58, 54, 49, 42, 35, 27, 11, 79, - 1, 32, 25, 23, 18, 14, 7, 4, 2, 71, 82, 77, 71, - 77, 70, 1, 71, 77, 65, 2, 3, 2, 5, 4, 3, 62, 59, - 49, 40, 33, 24, 12, 64, 85 }, - - { - - 62, - 8, 75, 62, 8, 75, 109, 89, 14, 10, 8, 16, 47, - 50, 54, 14, 94, 3, 69, 5, 1, 7, 70, 3, 75, 15, - 45, 83, 100, 109, 98, 91, 67, 69, 5, 1, 82, 84, - 6, 13, 67, 77, 89, 5, 71, 82, 89, 5, 74, 87, 6, - 71, 79, 88, 1, 70, 71, 76, 67, 5, 22, 0, 0, 0, - 77, 88, 97, 67, 14, 0, 18, 75, 94, 109, 80, 85, - 11, 64, 81, 73, 96, 77, 90, 84, 108, 87, 85, 91, - 99, 19, 64, 7, 87, 72, 86, 82, 111, 6, 0, 1, 72, - 16, 68, 66, 83, 83, 74, 74, 72, 8, 10, 66, 13, - 18, 78, 0, 67, 67, 5, 74, 22, 66, 2, 22, 27, 32, - 26, 19, 86, 68, 71, 9, 9, 95, 5, 9, 7, 4, 7, 7, - 9, 7, 2, 4, 65, 4, 16, 10, 76, 65, 2, 68, 9, 14, - 16, 9, 9, 7, 5, 4, 17, 16, 12, 77, 3, 74, 29, - 22, 18, 14, 17, 18, 11, 16, 22, 0, 14, 9, 8, 4, - 65, 9, 3, 6, 8, 5, 12, 19, 5, 81, 4, 76, 8, 19, - 83, 41, 52, 43, 42, 43, 43, 39, 39, 34, 25, 20, - 17, 20, 12, 80, 67, 1, 72, 23, 20, 17, 21, 17, - 11, 9, 10, 69, 64, 69, 93, 87, 102, 72, 21, 18, - 11, 1, 6, 67, 72, 77, 91, 71, 38, 21, 15, 8, 8, - 66, 75, 80, 100, 5, 36, 28, 25, 19, 12, 5, 64, - 72, 83, 70, 37, 29, 17, 4, 7, 70, 79, 90, 5, 53, - 43, 37, 28, 22, 5, 68, 75, 80, 62, 97, 96, 80, - 100, 98, 89, 96, 92, 91, 93, 93, 95, 89, 87, 87, - 87, 80, 82, 72, 77, 78, 69, 64, 0, 64, 6, 4, 3, - 64, 16, 13, 13, 10, 6, 17, 13, 7, 14, 13, 10, 7, - 6, 65, 67, 67, 6, 73, 13, 27, 13, 9, 21, 19, 13, - 15, 21, 15, 21, 5, 0, 4, 44, 43, 47, 41, 41, 51, - 58, 58, 62, 62, 62, 62, 62, 52, 21, 59, 62, 59, - 62, 56, 49, 36, 26, 24, 6, 73, 71, 85, 103, 47, - 46, 48, 41, 34, 35, 26, 24, 18, 16, 9, 3, 2, 75, - 79, 65, 66, 75, 26, 29, 24, 15, 23, 22, 9, 16, - 17, 7, 68, 66, 74, 92, 16, 6, 67, 76, 66, 65, - 64, 2, 2, 2, 2, 3, 6, 14, 5, 7, 12, 13, 60, 56, - 52, 46, 40, 32, 24, 8, 81, 1, 33, 26, 23, 19, - 15, 7, 5, 2, 71, 81, 77, 70, 76, 69, 2, 71, 76, - 65, 2, 3, 2, 6, 4, 3, 62, 57, 46, 37, 30, 20, 8, - 68, 88 }, - - { - - 62, - 8, 76, 62, 8, 76, 107, 88, 15, 10, 8, 15, 46, - 49, 54, 14, 92, 3, 69, 6, 1, 6, 70, 2, 76, 14, - 44, 84, 101, 110, 95, 90, 67, 69, 6, 1, 81, 83, - 7, 12, 66, 76, 88, 4, 71, 82, 89, 5, 73, 87, 6, - 71, 78, 88, 1, 70, 71, 76, 67, 5, 22, 0, 0, 0, - 76, 88, 97, 67, 14, 64, 18, 75, 93, 107, 78, 83, - 12, 1, 80, 72, 94, 76, 89, 84, 107, 87, 85, 91, - 99, 20, 64, 7, 86, 71, 85, 81, 110, 6, 64, 0, - 73, 16, 68, 66, 82, 83, 73, 74, 72, 8, 10, 65, - 13, 17, 78, 0, 67, 67, 5, 74, 21, 66, 2, 21, 26, - 31, 26, 19, 86, 68, 71, 9, 8, 95, 4, 9, 7, 4, 7, - 7, 9, 7, 2, 4, 64, 4, 15, 10, 76, 66, 2, 69, 9, - 13, 16, 9, 8, 7, 5, 4, 15, 16, 11, 77, 3, 75, - 28, 22, 17, 14, 17, 18, 11, 16, 22, 0, 13, 9, 7, - 4, 65, 8, 2, 6, 7, 4, 11, 18, 5, 81, 4, 75, 7, - 17, 83, 39, 50, 41, 40, 41, 41, 37, 37, 32, 23, - 19, 16, 18, 10, 81, 67, 1, 73, 22, 19, 16, 19, - 16, 10, 8, 9, 70, 65, 70, 93, 87, 101, 71, 21, - 18, 11, 2, 6, 67, 72, 76, 90, 70, 37, 21, 15, 8, - 9, 66, 74, 79, 98, 5, 37, 28, 25, 19, 13, 5, 64, - 71, 83, 70, 37, 29, 17, 4, 7, 69, 78, 89, 5, 53, - 43, 36, 28, 22, 5, 67, 74, 79, 62, 97, 95, 80, - 99, 97, 88, 94, 91, 90, 92, 92, 94, 89, 86, 87, - 86, 78, 82, 73, 77, 78, 69, 64, 64, 64, 5, 3, 2, - 65, 16, 13, 13, 10, 6, 16, 12, 7, 14, 13, 9, 7, - 6, 65, 68, 67, 6, 74, 13, 26, 12, 8, 20, 19, 14, - 15, 20, 15, 21, 5, 0, 3, 43, 42, 46, 40, 40, 50, - 56, 56, 61, 60, 62, 62, 60, 49, 20, 57, 62, 56, - 62, 53, 47, 34, 25, 23, 6, 72, 71, 83, 100, 45, - 44, 46, 39, 32, 33, 25, 22, 16, 15, 8, 2, 1, 76, - 80, 65, 67, 76, 25, 28, 23, 13, 21, 20, 8, 15, - 15, 6, 70, 68, 76, 93, 15, 5, 68, 76, 66, 65, 0, - 3, 2, 4, 3, 4, 7, 15, 7, 8, 14, 14, 59, 55, 50, - 44, 37, 30, 21, 6, 83, 2, 33, 26, 24, 19, 16, 8, - 5, 3, 70, 81, 76, 70, 76, 68, 3, 71, 76, 64, 3, - 3, 3, 7, 4, 3, 62, 55, 44, 34, 26, 16, 5, 71, 90 }, - - { - - 62, - 8, 76, 62, 8, 76, 106, 86, 15, 10, 7, 13, 44, - 48, 54, 14, 90, 3, 68, 7, 1, 5, 70, 1, 77, 14, - 42, 86, 102, 110, 92, 89, 67, 68, 7, 1, 81, 82, - 7, 12, 66, 76, 87, 4, 72, 82, 89, 5, 73, 86, 6, - 72, 78, 88, 2, 70, 71, 76, 66, 5, 22, 0, 0, 0, - 76, 89, 97, 66, 13, 64, 18, 75, 93, 105, 77, 82, - 14, 2, 79, 71, 93, 75, 88, 83, 105, 86, 85, 90, - 98, 20, 64, 7, 86, 71, 85, 81, 108, 6, 64, 0, - 73, 16, 68, 66, 82, 83, 73, 74, 71, 8, 10, 65, - 13, 17, 78, 0, 67, 67, 5, 74, 20, 67, 2, 20, 25, - 30, 25, 18, 85, 67, 71, 8, 8, 94, 4, 9, 7, 4, 7, - 7, 10, 7, 2, 3, 64, 3, 14, 9, 77, 66, 2, 69, 8, - 12, 16, 8, 7, 7, 5, 4, 14, 16, 10, 77, 3, 75, - 27, 22, 17, 14, 17, 18, 11, 16, 21, 0, 13, 9, 7, - 4, 66, 8, 2, 5, 7, 4, 10, 17, 4, 81, 3, 75, 6, - 16, 83, 38, 48, 39, 38, 39, 39, 35, 35, 30, 21, - 17, 14, 16, 8, 82, 67, 1, 73, 21, 18, 15, 18, - 14, 8, 7, 7, 71, 65, 70, 93, 87, 101, 71, 21, - 18, 11, 2, 6, 67, 72, 76, 89, 70, 37, 21, 15, 8, - 9, 65, 74, 78, 96, 5, 37, 28, 25, 19, 13, 5, 64, - 71, 82, 70, 37, 29, 16, 4, 7, 69, 78, 88, 5, 52, - 42, 35, 27, 22, 5, 67, 74, 79, 62, 96, 94, 79, - 98, 96, 87, 93, 90, 89, 91, 90, 92, 88, 86, 87, - 86, 77, 82, 73, 77, 77, 69, 65, 64, 64, 4, 2, 1, - 66, 15, 12, 13, 9, 5, 16, 12, 7, 13, 12, 9, 7, - 5, 66, 68, 67, 6, 74, 12, 26, 11, 8, 19, 18, 14, - 14, 19, 14, 20, 4, 64, 1, 42, 41, 46, 39, 39, - 48, 54, 54, 59, 57, 62, 62, 57, 47, 19, 54, 62, - 53, 58, 50, 44, 32, 24, 21, 6, 71, 71, 82, 98, - 43, 42, 44, 37, 30, 31, 23, 20, 15, 13, 7, 0, - 64, 77, 81, 66, 67, 77, 24, 26, 21, 11, 19, 18, - 6, 13, 13, 4, 71, 69, 77, 94, 14, 4, 69, 76, 65, - 65, 0, 3, 3, 5, 3, 5, 8, 16, 8, 9, 15, 15, 59, - 53, 48, 41, 35, 27, 18, 3, 86, 2, 34, 27, 24, - 19, 16, 8, 5, 3, 70, 81, 76, 69, 75, 67, 4, 71, - 75, 64, 3, 3, 3, 8, 4, 3, 61, 53, 41, 31, 23, - 12, 1, 75, 93 }, - - { - - 62, - 8, 76, 62, 8, 76, 104, 85, 15, 10, 7, 12, 43, - 46, 54, 14, 87, 2, 67, 7, 1, 5, 69, 0, 78, 13, - 40, 88, 103, 111, 89, 87, 67, 67, 7, 1, 81, 81, - 7, 11, 66, 76, 87, 4, 72, 81, 89, 5, 73, 85, 5, - 72, 78, 88, 2, 69, 70, 75, 66, 5, 22, 0, 0, 0, - 75, 89, 97, 66, 12, 64, 18, 74, 93, 104, 75, 80, - 15, 4, 77, 70, 92, 73, 87, 82, 103, 86, 84, 90, - 97, 20, 64, 7, 85, 71, 84, 80, 107, 5, 64, 0, - 73, 16, 68, 65, 81, 83, 73, 74, 71, 8, 9, 65, - 13, 17, 77, 0, 66, 67, 5, 74, 20, 67, 2, 20, 24, - 30, 24, 17, 84, 67, 71, 7, 7, 94, 3, 9, 6, 4, 7, - 7, 11, 8, 2, 3, 64, 3, 13, 9, 78, 66, 2, 70, 8, - 11, 15, 8, 7, 8, 5, 4, 13, 15, 9, 77, 3, 76, 27, - 22, 17, 14, 17, 18, 11, 16, 21, 0, 13, 9, 7, 4, - 66, 8, 2, 5, 7, 4, 10, 16, 4, 81, 3, 75, 5, 15, - 83, 36, 46, 38, 37, 37, 37, 33, 33, 28, 19, 15, - 12, 13, 7, 83, 67, 0, 74, 20, 17, 14, 17, 13, 7, - 6, 6, 71, 66, 71, 93, 87, 100, 71, 21, 18, 11, - 2, 6, 66, 71, 75, 88, 69, 37, 21, 15, 8, 9, 65, - 73, 78, 94, 5, 37, 28, 25, 19, 13, 5, 64, 71, - 81, 70, 38, 28, 16, 4, 7, 69, 78, 88, 5, 52, 41, - 34, 26, 22, 5, 67, 74, 78, 62, 95, 93, 78, 96, - 95, 86, 92, 88, 88, 89, 89, 90, 87, 85, 86, 85, - 76, 81, 74, 76, 76, 69, 65, 65, 65, 4, 1, 0, 67, - 14, 12, 13, 9, 5, 15, 12, 7, 12, 11, 9, 6, 4, - 66, 68, 67, 6, 74, 11, 25, 11, 8, 18, 17, 14, - 13, 18, 14, 20, 3, 65, 64, 41, 41, 45, 38, 37, - 47, 52, 52, 57, 55, 62, 61, 54, 45, 17, 51, 62, - 50, 54, 48, 42, 30, 23, 20, 6, 70, 70, 81, 96, - 42, 41, 42, 36, 28, 29, 22, 18, 14, 11, 5, 65, - 65, 78, 82, 66, 67, 78, 22, 25, 19, 10, 18, 17, - 5, 12, 12, 3, 72, 70, 78, 94, 14, 4, 70, 75, 65, - 64, 1, 4, 4, 6, 4, 6, 9, 18, 9, 10, 16, 17, 58, - 51, 46, 39, 32, 24, 15, 0, 88, 2, 34, 27, 25, - 20, 17, 8, 6, 4, 69, 80, 76, 68, 75, 66, 5, 70, - 74, 0, 4, 3, 4, 9, 4, 3, 59, 51, 39, 28, 20, 9, - 66, 78, 96 }, - - { - - 61, - 8, 76, 61, 8, 76, 102, 83, 16, 10, 6, 10, 41, - 45, 54, 14, 85, 2, 66, 8, 1, 4, 69, 64, 79, 13, - 38, 89, 104, 111, 86, 86, 67, 66, 8, 1, 80, 80, - 8, 11, 66, 75, 86, 3, 73, 81, 89, 5, 73, 85, 5, - 72, 78, 88, 3, 69, 70, 75, 65, 5, 22, 0, 0, 0, - 75, 89, 97, 65, 11, 64, 18, 74, 93, 102, 73, 79, - 17, 6, 76, 69, 90, 72, 86, 81, 101, 85, 84, 89, - 96, 20, 64, 7, 85, 71, 84, 80, 105, 5, 65, 64, - 74, 16, 68, 65, 81, 83, 72, 74, 70, 8, 9, 65, - 13, 16, 77, 0, 66, 67, 5, 74, 19, 67, 2, 19, 23, - 29, 23, 16, 84, 66, 71, 6, 7, 93, 3, 9, 6, 4, 7, - 7, 12, 8, 2, 3, 0, 3, 12, 9, 79, 66, 2, 70, 7, - 10, 15, 8, 6, 8, 5, 4, 11, 15, 8, 77, 3, 76, 26, - 22, 17, 14, 17, 18, 11, 16, 21, 0, 12, 9, 7, 4, - 66, 7, 1, 4, 6, 3, 9, 15, 3, 81, 2, 75, 4, 13, - 83, 35, 44, 36, 35, 35, 35, 31, 31, 26, 17, 14, - 11, 11, 5, 84, 67, 0, 74, 19, 16, 13, 15, 11, 5, - 5, 5, 72, 66, 71, 93, 87, 100, 70, 21, 18, 11, - 2, 6, 66, 71, 75, 87, 69, 37, 21, 15, 8, 10, 64, - 72, 77, 92, 5, 37, 28, 25, 19, 14, 5, 64, 71, - 81, 70, 38, 28, 15, 4, 7, 69, 78, 87, 5, 51, 41, - 33, 25, 22, 5, 67, 73, 78, 62, 94, 92, 78, 95, - 94, 85, 90, 87, 87, 88, 87, 89, 87, 84, 86, 85, - 74, 81, 74, 76, 76, 69, 66, 65, 65, 3, 0, 64, - 68, 14, 11, 13, 8, 4, 15, 11, 7, 11, 11, 8, 6, - 3, 66, 69, 67, 6, 75, 11, 25, 10, 8, 17, 17, 14, - 12, 17, 13, 19, 2, 65, 65, 40, 40, 45, 37, 36, - 45, 50, 50, 55, 52, 60, 59, 51, 42, 16, 48, 62, - 47, 50, 45, 39, 28, 22, 19, 6, 69, 70, 80, 94, - 40, 39, 40, 34, 26, 27, 20, 16, 12, 10, 4, 66, - 67, 79, 83, 67, 68, 79, 21, 23, 18, 8, 16, 15, - 3, 10, 10, 1, 73, 72, 80, 95, 13, 3, 71, 75, 64, - 64, 1, 4, 4, 7, 5, 7, 10, 19, 10, 11, 18, 18, - 58, 50, 44, 36, 30, 21, 12, 66, 90, 3, 35, 28, - 25, 20, 18, 9, 6, 4, 69, 80, 75, 68, 74, 65, 6, - 70, 74, 0, 4, 3, 4, 10, 4, 3, 58, 49, 36, 25, - 17, 5, 70, 82, 98 }, - - { - - 60, - 8, 76, 60, 8, 76, 100, 82, 16, 10, 6, 9, 40, 44, - 54, 14, 83, 2, 65, 9, 1, 3, 69, 65, 80, 12, 36, - 91, 105, 112, 83, 85, 67, 65, 9, 1, 80, 79, 8, - 10, 66, 75, 85, 3, 73, 81, 89, 5, 73, 84, 5, 72, - 78, 88, 3, 69, 70, 75, 65, 5, 22, 0, 0, 0, 74, - 89, 97, 65, 10, 64, 18, 74, 93, 100, 71, 77, 18, - 8, 75, 68, 89, 71, 85, 80, 99, 85, 84, 89, 95, - 20, 64, 7, 84, 71, 83, 79, 104, 5, 65, 64, 74, - 16, 68, 65, 80, 83, 72, 74, 70, 8, 9, 65, 13, - 16, 77, 0, 66, 67, 5, 74, 18, 67, 2, 18, 22, 28, - 22, 15, 83, 66, 71, 5, 6, 93, 2, 9, 6, 4, 7, 7, - 13, 8, 2, 3, 0, 3, 11, 9, 80, 66, 2, 71, 7, 9, - 15, 8, 5, 8, 5, 4, 10, 15, 7, 77, 3, 77, 25, 22, - 17, 14, 17, 18, 11, 16, 21, 0, 12, 9, 7, 4, 66, - 7, 1, 4, 6, 3, 8, 14, 3, 81, 2, 75, 3, 12, 83, - 33, 42, 34, 33, 33, 33, 29, 29, 24, 15, 12, 9, - 9, 3, 85, 67, 0, 75, 18, 15, 12, 14, 10, 4, 4, - 4, 73, 67, 72, 93, 87, 99, 70, 21, 18, 11, 2, 6, - 66, 71, 74, 86, 68, 37, 21, 15, 8, 10, 64, 71, - 76, 90, 5, 37, 28, 25, 19, 14, 5, 64, 71, 80, - 70, 38, 28, 15, 4, 7, 69, 78, 86, 5, 51, 40, 32, - 24, 22, 5, 67, 73, 77, 62, 93, 91, 77, 94, 93, - 84, 89, 86, 86, 87, 86, 87, 86, 83, 86, 84, 73, - 81, 75, 76, 75, 69, 66, 66, 65, 2, 64, 65, 69, - 13, 11, 13, 8, 4, 14, 11, 7, 10, 10, 8, 6, 2, - 66, 69, 67, 6, 75, 10, 24, 9, 8, 16, 16, 14, 11, - 16, 13, 19, 1, 66, 67, 39, 39, 44, 36, 35, 44, - 48, 48, 53, 50, 57, 56, 48, 40, 15, 45, 59, 44, - 46, 42, 37, 26, 21, 18, 6, 68, 70, 79, 92, 38, - 37, 38, 32, 24, 25, 19, 14, 11, 8, 3, 68, 68, - 80, 84, 67, 68, 80, 20, 22, 16, 6, 14, 13, 2, 9, - 8, 0, 74, 73, 81, 96, 12, 2, 72, 75, 64, 64, 2, - 5, 5, 8, 6, 8, 11, 20, 11, 12, 19, 19, 57, 48, - 42, 34, 27, 18, 9, 69, 92, 3, 35, 28, 26, 20, - 19, 9, 6, 5, 68, 80, 75, 67, 74, 64, 7, 70, 73, - 1, 5, 3, 5, 11, 4, 3, 57, 47, 34, 22, 14, 1, 74, - 85, 101 }, - - { - - 58, - 7, 77, 58, 7, 77, 99, 81, 16, 10, 5, 7, 38, 42, - 53, 14, 81, 1, 65, 9, 0, 2, 69, 67, 82, 11, 34, - 93, 106, 113, 81, 84, 68, 65, 9, 0, 80, 78, 8, - 9, 66, 75, 85, 2, 74, 81, 90, 5, 73, 84, 4, 73, - 78, 88, 3, 69, 70, 75, 65, 4, 22, 0, 0, 0, 74, - 90, 97, 65, 9, 65, 18, 74, 93, 99, 70, 76, 19, - 9, 74, 67, 88, 70, 84, 80, 98, 85, 84, 89, 95, - 20, 64, 7, 84, 71, 83, 79, 103, 4, 66, 65, 75, - 16, 68, 65, 80, 83, 72, 74, 70, 7, 8, 65, 12, - 15, 77, 64, 66, 67, 4, 74, 17, 68, 1, 17, 20, - 27, 21, 14, 83, 66, 71, 4, 5, 93, 1, 8, 5, 4, 7, - 7, 13, 8, 2, 2, 0, 2, 10, 8, 81, 67, 1, 72, 6, - 8, 14, 7, 4, 8, 5, 4, 8, 14, 6, 77, 3, 78, 24, - 21, 16, 14, 17, 17, 10, 16, 20, 64, 11, 9, 6, 3, - 67, 6, 0, 3, 5, 2, 7, 13, 2, 81, 1, 75, 2, 10, - 83, 31, 40, 32, 31, 31, 30, 27, 27, 22, 13, 10, - 7, 6, 1, 87, 68, 64, 76, 17, 13, 10, 12, 8, 2, - 2, 2, 74, 68, 73, 93, 87, 99, 70, 21, 18, 11, 2, - 6, 66, 71, 74, 85, 68, 36, 21, 15, 8, 10, 64, - 71, 76, 89, 4, 37, 28, 24, 18, 14, 5, 64, 71, - 80, 70, 38, 27, 14, 3, 7, 69, 78, 86, 5, 50, 39, - 31, 23, 21, 5, 67, 73, 77, 62, 93, 90, 77, 93, - 92, 84, 88, 85, 85, 86, 85, 86, 86, 83, 86, 84, - 72, 81, 76, 76, 75, 69, 67, 67, 66, 1, 65, 67, - 71, 12, 10, 13, 7, 3, 13, 10, 6, 9, 9, 7, 5, 1, - 67, 70, 67, 6, 76, 9, 23, 8, 7, 15, 15, 14, 10, - 14, 12, 18, 0, 67, 69, 38, 38, 43, 34, 33, 42, - 46, 46, 50, 47, 54, 53, 45, 37, 13, 42, 55, 41, - 41, 39, 34, 24, 19, 16, 6, 68, 70, 78, 90, 36, - 35, 36, 30, 21, 23, 17, 11, 9, 6, 1, 70, 70, 81, - 85, 68, 69, 82, 18, 20, 14, 4, 12, 11, 0, 7, 6, - 65, 76, 75, 83, 97, 11, 1, 73, 75, 64, 64, 2, 5, - 5, 9, 6, 9, 11, 21, 12, 13, 20, 20, 56, 46, 39, - 31, 24, 15, 5, 72, 95, 3, 35, 28, 26, 20, 19, 9, - 6, 5, 68, 80, 75, 67, 74, 0, 8, 70, 73, 1, 5, 3, - 5, 11, 4, 2, 55, 44, 31, 19, 10, 66, 78, 89, 104 }, - - { - - 57, - 7, 77, 57, 7, 77, 97, 79, 17, 11, 5, 6, 37, 41, - 53, 14, 78, 1, 64, 10, 0, 2, 68, 68, 83, 11, 33, - 94, 107, 113, 78, 82, 68, 64, 10, 0, 79, 76, 9, - 9, 65, 74, 84, 2, 74, 80, 90, 5, 72, 83, 4, 73, - 77, 88, 4, 68, 69, 74, 64, 4, 22, 0, 0, 0, 73, - 90, 97, 64, 9, 65, 18, 73, 92, 97, 68, 74, 21, - 11, 72, 66, 86, 68, 82, 79, 96, 84, 83, 88, 94, - 21, 0, 8, 83, 70, 82, 78, 101, 4, 66, 65, 75, - 17, 68, 64, 79, 82, 71, 73, 69, 7, 8, 64, 12, - 15, 76, 64, 65, 67, 4, 73, 17, 68, 1, 17, 19, - 27, 21, 14, 82, 65, 70, 4, 5, 92, 1, 8, 5, 5, 7, - 7, 14, 9, 3, 2, 1, 2, 10, 8, 81, 67, 1, 72, 6, - 7, 14, 7, 4, 9, 6, 4, 7, 14, 6, 76, 3, 78, 24, - 21, 16, 14, 17, 17, 10, 16, 20, 64, 11, 9, 6, 3, - 67, 6, 0, 3, 5, 2, 7, 13, 2, 80, 1, 74, 2, 9, - 82, 30, 39, 31, 30, 29, 28, 26, 26, 20, 12, 9, - 6, 4, 0, 88, 68, 64, 76, 16, 12, 9, 11, 7, 1, 1, - 1, 74, 68, 73, 92, 86, 98, 69, 22, 18, 11, 3, 7, - 65, 70, 73, 83, 67, 36, 21, 15, 8, 11, 0, 70, - 75, 87, 4, 38, 29, 24, 18, 15, 5, 64, 70, 79, - 70, 39, 27, 14, 3, 8, 68, 77, 85, 5, 50, 39, 31, - 23, 21, 5, 66, 72, 76, 62, 92, 89, 76, 91, 90, - 83, 86, 83, 83, 84, 83, 84, 85, 82, 85, 83, 70, - 80, 76, 75, 74, 68, 67, 67, 66, 1, 65, 68, 72, - 12, 10, 14, 7, 3, 13, 10, 6, 9, 9, 7, 5, 1, 67, - 70, 66, 7, 76, 9, 23, 8, 7, 15, 15, 15, 10, 13, - 12, 18, 0, 67, 70, 38, 38, 43, 33, 32, 41, 44, - 44, 48, 45, 52, 51, 43, 35, 12, 40, 52, 38, 37, - 37, 32, 23, 18, 15, 6, 67, 69, 76, 87, 35, 34, - 35, 29, 19, 22, 16, 9, 8, 5, 0, 71, 71, 82, 85, - 68, 69, 83, 17, 19, 13, 3, 11, 10, 64, 6, 5, 66, - 77, 76, 84, 97, 11, 1, 73, 74, 0, 0, 3, 6, 6, - 11, 7, 10, 12, 23, 14, 14, 22, 22, 56, 45, 37, - 29, 22, 13, 2, 74, 97, 4, 36, 29, 27, 21, 20, - 10, 7, 6, 67, 79, 74, 66, 73, 2, 10, 69, 72, 2, - 6, 4, 6, 12, 4, 2, 54, 42, 29, 17, 7, 69, 81, - 92, 106 }, - - { - - 56, - 7, 77, 56, 7, 77, 95, 78, 17, 11, 5, 5, 36, 40, - 53, 14, 76, 1, 0, 11, 0, 1, 68, 69, 84, 10, 31, - 96, 108, 114, 75, 81, 68, 0, 11, 0, 79, 75, 9, - 8, 65, 74, 83, 2, 74, 80, 90, 5, 72, 82, 4, 73, - 77, 88, 4, 68, 69, 74, 64, 4, 22, 0, 0, 0, 72, - 90, 97, 64, 8, 65, 18, 73, 92, 95, 66, 72, 22, - 13, 71, 65, 85, 67, 81, 78, 94, 84, 83, 88, 93, - 21, 0, 8, 82, 70, 81, 78, 100, 4, 66, 65, 75, - 17, 68, 64, 79, 82, 71, 73, 69, 7, 8, 64, 12, - 15, 76, 64, 65, 67, 4, 73, 16, 68, 1, 16, 18, - 26, 20, 13, 81, 65, 70, 3, 4, 92, 0, 8, 5, 5, 7, - 7, 15, 9, 3, 2, 1, 2, 9, 8, 82, 67, 1, 73, 6, 6, - 14, 7, 3, 9, 6, 4, 6, 14, 5, 76, 3, 79, 23, 21, - 16, 14, 17, 17, 10, 16, 20, 64, 11, 9, 6, 3, 67, - 6, 0, 3, 5, 2, 6, 12, 1, 80, 1, 74, 1, 8, 82, - 28, 37, 29, 28, 27, 26, 24, 24, 18, 10, 7, 4, 2, - 65, 89, 68, 64, 77, 15, 11, 8, 10, 5, 0, 0, 0, - 75, 69, 74, 92, 86, 97, 69, 22, 18, 11, 3, 7, - 65, 70, 73, 82, 66, 36, 21, 15, 8, 11, 0, 69, - 74, 85, 4, 38, 29, 24, 18, 15, 5, 64, 70, 78, - 70, 39, 27, 14, 3, 8, 68, 77, 84, 5, 49, 38, 30, - 22, 21, 5, 66, 72, 76, 62, 91, 88, 75, 90, 89, - 82, 85, 82, 82, 83, 82, 82, 84, 81, 85, 82, 69, - 80, 77, 75, 73, 68, 67, 68, 66, 0, 66, 69, 73, - 11, 10, 14, 7, 2, 12, 10, 6, 8, 8, 7, 5, 0, 67, - 70, 66, 7, 76, 8, 22, 7, 7, 14, 14, 15, 9, 12, - 12, 18, 64, 68, 72, 37, 37, 42, 32, 31, 40, 42, - 42, 46, 43, 49, 48, 40, 33, 11, 37, 49, 35, 33, - 34, 30, 21, 17, 14, 6, 66, 69, 75, 85, 33, 32, - 33, 27, 17, 20, 14, 7, 7, 3, 64, 73, 72, 83, 86, - 69, 69, 84, 16, 18, 11, 1, 9, 8, 65, 4, 3, 67, - 78, 77, 85, 98, 10, 0, 74, 74, 0, 0, 4, 6, 7, - 12, 8, 11, 13, 24, 15, 15, 23, 23, 55, 43, 35, - 27, 19, 10, 64, 77, 99, 4, 36, 29, 27, 21, 21, - 10, 7, 6, 67, 79, 74, 65, 73, 3, 11, 69, 71, 3, - 7, 4, 6, 13, 4, 2, 53, 40, 27, 14, 4, 73, 85, - 95, 109 }, - - { - - 55, - 7, 77, 55, 7, 77, 93, 76, 18, 11, 4, 3, 34, 39, - 53, 14, 74, 1, 1, 12, 0, 0, 68, 70, 85, 10, 29, - 97, 109, 114, 72, 80, 68, 1, 12, 0, 78, 74, 10, - 8, 65, 73, 82, 1, 75, 80, 90, 5, 72, 82, 4, 73, - 77, 88, 5, 68, 69, 74, 0, 4, 22, 0, 0, 0, 72, - 90, 97, 0, 7, 65, 18, 73, 92, 93, 64, 71, 24, - 15, 70, 64, 83, 66, 80, 77, 92, 83, 83, 87, 92, - 21, 0, 8, 82, 70, 81, 77, 98, 4, 67, 66, 76, 17, - 68, 64, 78, 82, 70, 73, 68, 7, 8, 64, 12, 14, - 76, 64, 65, 67, 4, 73, 15, 68, 1, 15, 17, 25, - 19, 12, 81, 64, 70, 2, 4, 91, 0, 8, 5, 5, 7, 7, - 16, 9, 3, 2, 2, 2, 8, 8, 83, 67, 1, 73, 5, 5, - 14, 7, 2, 9, 6, 4, 4, 14, 4, 76, 3, 79, 22, 21, - 16, 14, 17, 17, 10, 16, 20, 64, 10, 9, 6, 3, 67, - 5, 64, 2, 4, 1, 5, 11, 1, 80, 0, 74, 0, 6, 82, - 27, 35, 27, 26, 25, 24, 22, 22, 16, 8, 6, 3, 0, - 67, 90, 68, 64, 77, 14, 10, 7, 8, 4, 65, 64, 64, - 76, 69, 74, 92, 86, 97, 68, 22, 18, 11, 3, 7, - 65, 70, 72, 81, 66, 36, 21, 15, 8, 12, 1, 68, - 73, 83, 4, 38, 29, 24, 18, 16, 5, 64, 70, 78, - 70, 39, 27, 13, 3, 8, 68, 77, 83, 5, 49, 38, 29, - 21, 21, 5, 66, 71, 75, 62, 90, 87, 75, 89, 88, - 81, 83, 81, 81, 82, 80, 81, 84, 80, 85, 82, 67, - 80, 77, 75, 73, 68, 68, 68, 66, 64, 67, 70, 74, - 11, 9, 14, 6, 2, 12, 9, 6, 7, 8, 6, 5, 64, 67, - 71, 66, 7, 77, 8, 22, 6, 7, 13, 14, 15, 8, 11, - 11, 17, 65, 68, 73, 36, 36, 42, 31, 30, 38, 40, - 40, 44, 40, 47, 46, 37, 30, 10, 34, 46, 32, 29, - 31, 27, 19, 16, 13, 6, 65, 69, 74, 83, 31, 30, - 31, 25, 15, 18, 13, 5, 5, 2, 65, 74, 74, 84, 87, - 69, 70, 85, 15, 16, 10, 64, 7, 6, 67, 3, 1, 69, - 79, 79, 87, 99, 9, 64, 75, 74, 1, 0, 4, 7, 7, - 13, 9, 12, 14, 25, 16, 16, 25, 24, 55, 42, 33, - 24, 17, 7, 67, 80, 101, 5, 37, 30, 28, 21, 22, - 11, 7, 7, 66, 79, 73, 65, 72, 4, 12, 69, 71, 3, - 7, 4, 7, 14, 4, 2, 52, 38, 24, 11, 1, 77, 89, - 99, 111 }, - - { - - 53, - 7, 77, 53, 7, 77, 92, 75, 18, 11, 4, 2, 33, 37, - 53, 14, 71, 0, 2, 12, 0, 64, 68, 71, 86, 9, 27, - 99, 110, 115, 69, 79, 68, 2, 12, 0, 78, 73, 10, - 7, 65, 73, 82, 1, 75, 79, 90, 5, 72, 81, 3, 74, - 77, 88, 5, 67, 69, 73, 0, 4, 22, 0, 0, 0, 71, - 91, 97, 0, 6, 65, 18, 73, 92, 92, 0, 69, 25, 16, - 69, 0, 82, 64, 79, 76, 90, 83, 82, 87, 91, 21, - 0, 8, 81, 70, 80, 77, 97, 3, 67, 66, 76, 17, 68, - 64, 78, 82, 70, 73, 68, 7, 7, 64, 12, 14, 76, - 64, 65, 67, 4, 73, 15, 69, 1, 15, 16, 24, 18, - 11, 80, 64, 70, 1, 3, 91, 64, 8, 4, 5, 7, 7, 17, - 10, 3, 1, 2, 1, 7, 7, 84, 67, 1, 74, 5, 4, 13, - 6, 2, 10, 6, 4, 3, 13, 3, 76, 3, 80, 22, 21, 16, - 14, 17, 17, 10, 16, 19, 64, 10, 9, 6, 3, 68, 5, - 64, 2, 4, 1, 5, 10, 0, 80, 0, 74, 64, 5, 82, 25, - 33, 25, 24, 23, 22, 20, 20, 14, 6, 4, 1, 66, 69, - 91, 68, 65, 78, 13, 9, 6, 7, 2, 66, 65, 66, 76, - 70, 75, 92, 86, 96, 68, 22, 18, 11, 3, 7, 65, - 70, 72, 80, 65, 36, 21, 15, 8, 12, 1, 68, 73, - 81, 4, 38, 29, 24, 18, 16, 5, 64, 70, 77, 70, - 39, 26, 13, 3, 8, 68, 77, 83, 5, 48, 37, 28, 20, - 21, 5, 66, 71, 75, 62, 89, 86, 74, 87, 87, 80, - 82, 79, 80, 80, 79, 79, 83, 80, 84, 81, 66, 79, - 78, 75, 72, 68, 68, 69, 67, 65, 68, 71, 75, 10, - 9, 14, 6, 1, 11, 9, 6, 6, 7, 6, 4, 65, 68, 71, - 66, 7, 77, 7, 21, 5, 7, 12, 13, 15, 7, 10, 11, - 17, 66, 69, 75, 35, 36, 41, 30, 28, 37, 38, 38, - 42, 38, 44, 43, 34, 28, 8, 31, 42, 29, 25, 29, - 25, 17, 15, 11, 6, 64, 68, 73, 81, 30, 28, 29, - 24, 13, 16, 11, 3, 4, 0, 67, 76, 75, 85, 88, 70, - 70, 86, 13, 15, 8, 65, 5, 4, 68, 1, 64, 70, 80, - 80, 88, 99, 8, 64, 76, 74, 1, 1, 5, 7, 8, 14, 9, - 13, 15, 26, 17, 17, 26, 25, 54, 40, 31, 22, 14, - 4, 70, 83, 104, 5, 37, 30, 28, 22, 22, 11, 8, 7, - 66, 78, 73, 64, 72, 5, 13, 69, 70, 4, 8, 4, 7, - 15, 4, 2, 50, 36, 22, 8, 65, 81, 93, 102, 114 }, - - { - - 52, - 7, 77, 52, 7, 77, 90, 73, 18, 11, 3, 0, 31, 36, - 53, 14, 69, 0, 3, 13, 0, 64, 67, 72, 87, 9, 25, - 101, 111, 115, 66, 77, 68, 3, 13, 0, 78, 72, 10, - 7, 65, 73, 81, 1, 76, 79, 90, 5, 72, 80, 3, 74, - 77, 88, 6, 67, 68, 73, 1, 4, 22, 0, 0, 0, 71, - 91, 97, 1, 5, 65, 18, 72, 92, 90, 2, 68, 27, 18, - 67, 1, 81, 0, 78, 75, 88, 82, 82, 86, 90, 21, 0, - 8, 81, 70, 80, 76, 95, 3, 67, 66, 76, 17, 68, 0, - 77, 82, 70, 73, 67, 7, 7, 64, 12, 14, 75, 64, - 64, 67, 4, 73, 14, 69, 1, 14, 15, 24, 17, 10, - 79, 0, 70, 0, 3, 90, 64, 8, 4, 5, 7, 7, 18, 10, - 3, 1, 2, 1, 6, 7, 85, 67, 1, 74, 4, 3, 13, 6, 1, - 10, 6, 4, 2, 13, 2, 76, 3, 80, 21, 21, 16, 14, - 17, 17, 10, 16, 19, 64, 10, 9, 6, 3, 68, 5, 64, - 1, 4, 1, 4, 9, 0, 80, 64, 74, 65, 4, 82, 24, 31, - 24, 23, 21, 20, 18, 18, 12, 4, 2, 64, 68, 70, - 92, 68, 65, 78, 12, 8, 5, 6, 1, 68, 66, 67, 77, - 70, 75, 92, 86, 96, 68, 22, 18, 11, 3, 7, 64, - 69, 71, 79, 65, 36, 21, 15, 8, 12, 2, 67, 72, - 79, 4, 38, 29, 24, 18, 16, 5, 64, 70, 76, 70, - 40, 26, 12, 3, 8, 68, 77, 82, 5, 48, 36, 27, 19, - 21, 5, 66, 71, 74, 62, 88, 85, 73, 86, 86, 79, - 81, 78, 79, 79, 77, 77, 82, 79, 84, 81, 65, 79, - 78, 74, 71, 68, 69, 69, 67, 65, 69, 72, 76, 9, - 8, 14, 5, 1, 11, 9, 6, 5, 6, 6, 4, 66, 68, 71, - 66, 7, 77, 6, 21, 5, 7, 11, 12, 15, 6, 9, 10, - 16, 67, 70, 77, 34, 35, 41, 29, 27, 35, 36, 36, - 40, 35, 41, 41, 31, 26, 7, 28, 39, 26, 21, 26, - 22, 15, 14, 10, 6, 0, 68, 72, 79, 28, 27, 27, - 22, 11, 14, 10, 1, 3, 65, 68, 78, 77, 86, 89, - 70, 70, 87, 12, 13, 6, 67, 4, 3, 70, 0, 65, 72, - 81, 81, 89, 100, 8, 65, 77, 73, 2, 1, 5, 8, 9, - 15, 10, 14, 16, 28, 18, 18, 27, 27, 54, 38, 29, - 19, 12, 1, 73, 86, 106, 5, 38, 31, 29, 22, 23, - 11, 8, 8, 65, 78, 73, 0, 71, 6, 14, 68, 69, 4, - 8, 4, 8, 16, 4, 2, 49, 34, 19, 5, 68, 84, 97, - 106, 117 }, - - { - - 51, - 7, 78, 51, 7, 78, 88, 72, 19, 11, 3, 64, 30, 35, - 53, 14, 67, 0, 3, 14, 0, 65, 67, 73, 88, 8, 24, - 102, 112, 116, 0, 76, 68, 3, 14, 0, 77, 71, 11, - 6, 64, 72, 80, 0, 76, 79, 90, 5, 71, 80, 3, 74, - 76, 88, 6, 67, 68, 73, 1, 4, 22, 0, 0, 0, 70, - 91, 97, 1, 5, 66, 18, 72, 91, 88, 4, 66, 28, 20, - 66, 2, 79, 1, 77, 75, 87, 82, 82, 86, 90, 22, 0, - 8, 80, 69, 79, 76, 94, 3, 68, 67, 77, 17, 68, 0, - 77, 82, 69, 73, 67, 7, 7, 0, 12, 13, 75, 64, 64, - 67, 4, 73, 13, 69, 1, 13, 14, 23, 17, 10, 79, 0, - 70, 0, 2, 90, 65, 8, 4, 5, 7, 7, 18, 10, 3, 1, - 3, 1, 5, 7, 85, 68, 1, 75, 4, 2, 13, 6, 0, 10, - 6, 4, 0, 13, 1, 76, 3, 81, 20, 21, 15, 14, 17, - 17, 10, 16, 19, 64, 9, 9, 5, 3, 68, 4, 65, 1, 3, - 0, 3, 8, 64, 80, 64, 73, 66, 2, 82, 22, 29, 22, - 21, 19, 18, 16, 16, 10, 2, 1, 65, 70, 72, 93, - 68, 65, 79, 11, 7, 4, 4, 64, 69, 67, 68, 78, 71, - 76, 92, 86, 95, 67, 22, 18, 11, 4, 7, 64, 69, - 71, 78, 64, 35, 21, 15, 8, 13, 2, 66, 71, 77, 4, - 39, 29, 24, 18, 17, 5, 64, 69, 76, 70, 40, 26, - 12, 3, 8, 67, 76, 81, 5, 47, 36, 26, 19, 21, 5, - 65, 70, 74, 62, 88, 84, 73, 85, 85, 78, 79, 77, - 78, 78, 76, 76, 82, 78, 84, 80, 0, 79, 79, 74, - 71, 68, 69, 70, 67, 66, 70, 73, 77, 9, 8, 14, 5, - 0, 10, 8, 6, 5, 6, 5, 4, 66, 68, 72, 66, 7, 78, - 6, 20, 4, 6, 10, 12, 16, 6, 8, 10, 16, 67, 70, - 78, 33, 34, 40, 28, 26, 34, 34, 34, 38, 33, 39, - 38, 28, 23, 6, 26, 36, 23, 17, 23, 20, 13, 13, - 9, 6, 1, 68, 70, 76, 26, 25, 25, 20, 9, 12, 8, - 64, 1, 66, 69, 79, 78, 87, 90, 71, 71, 88, 11, - 12, 5, 69, 2, 1, 71, 65, 67, 73, 83, 83, 91, - 101, 7, 66, 78, 73, 2, 1, 6, 8, 9, 17, 11, 15, - 17, 29, 20, 19, 29, 28, 53, 37, 27, 17, 9, 64, - 76, 88, 108, 6, 38, 31, 29, 22, 24, 12, 8, 8, - 65, 78, 72, 0, 71, 7, 15, 68, 69, 5, 9, 4, 8, - 17, 4, 2, 48, 32, 17, 2, 72, 88, 100, 109, 119 }, - - { - - 50, - 7, 78, 50, 7, 78, 86, 70, 19, 11, 2, 66, 28, 33, - 53, 14, 64, 64, 4, 14, 0, 66, 67, 74, 89, 8, 22, - 104, 113, 116, 3, 75, 68, 4, 14, 0, 77, 70, 11, - 6, 64, 72, 80, 0, 77, 78, 90, 5, 71, 79, 2, 74, - 76, 88, 7, 66, 68, 72, 2, 4, 22, 0, 0, 0, 70, - 91, 97, 2, 4, 66, 18, 72, 91, 87, 6, 65, 30, 22, - 65, 3, 78, 3, 76, 74, 85, 81, 81, 85, 89, 22, 0, - 8, 80, 69, 79, 75, 92, 2, 68, 67, 77, 17, 68, 0, - 76, 82, 69, 73, 66, 7, 6, 0, 12, 13, 75, 64, 64, - 67, 4, 73, 13, 69, 1, 13, 13, 22, 16, 9, 78, 1, - 70, 64, 2, 89, 65, 8, 3, 5, 7, 7, 19, 11, 3, 1, - 3, 1, 4, 7, 86, 68, 1, 75, 3, 1, 12, 6, 0, 11, - 6, 4, 64, 12, 0, 76, 3, 81, 20, 21, 15, 14, 17, - 17, 10, 16, 19, 64, 9, 9, 5, 3, 68, 4, 65, 0, 3, - 0, 3, 7, 64, 80, 65, 73, 67, 1, 82, 21, 27, 20, - 19, 17, 16, 14, 14, 8, 0, 64, 67, 73, 74, 94, - 68, 66, 79, 10, 6, 3, 3, 65, 71, 68, 69, 78, 71, - 76, 92, 86, 95, 67, 22, 18, 11, 4, 7, 64, 69, - 70, 77, 64, 35, 21, 15, 8, 13, 3, 65, 71, 75, 4, - 39, 29, 24, 18, 17, 5, 64, 69, 75, 70, 40, 25, - 11, 3, 8, 67, 76, 81, 5, 47, 35, 25, 18, 21, 5, - 65, 70, 73, 62, 87, 83, 72, 83, 84, 77, 78, 75, - 77, 76, 74, 74, 81, 77, 83, 80, 1, 78, 79, 74, - 70, 68, 70, 70, 68, 67, 71, 74, 78, 8, 7, 14, 4, - 0, 10, 8, 6, 4, 5, 5, 3, 67, 68, 72, 66, 7, 78, - 5, 20, 3, 6, 9, 11, 16, 5, 7, 9, 15, 68, 71, 80, - 32, 34, 40, 27, 24, 32, 32, 32, 36, 30, 36, 36, - 25, 21, 4, 23, 32, 20, 13, 21, 17, 11, 12, 8, 6, - 2, 67, 69, 74, 25, 23, 23, 19, 7, 10, 7, 66, 0, - 68, 71, 81, 80, 88, 91, 71, 71, 89, 9, 10, 3, - 70, 0, 64, 73, 66, 69, 75, 84, 84, 92, 101, 6, - 66, 79, 73, 3, 2, 6, 9, 10, 18, 12, 16, 18, 30, - 21, 20, 30, 29, 53, 35, 25, 14, 7, 67, 79, 91, - 110, 6, 39, 32, 30, 23, 25, 12, 9, 9, 64, 77, - 72, 1, 70, 8, 16, 68, 68, 5, 9, 4, 9, 18, 4, 2, - 46, 30, 14, 64, 75, 92, 104, 113, 122 }, - - { - - 48, - 6, 78, 48, 6, 78, 85, 69, 19, 11, 2, 67, 27, 32, - 53, 14, 1, 64, 5, 15, 0, 67, 67, 75, 91, 7, 20, - 106, 114, 117, 5, 74, 68, 5, 15, 0, 77, 69, 11, - 5, 64, 72, 79, 64, 77, 78, 91, 5, 71, 79, 2, 75, - 76, 88, 7, 66, 68, 72, 2, 4, 22, 0, 0, 0, 69, - 92, 97, 2, 3, 66, 18, 72, 91, 85, 7, 0, 31, 23, - 64, 4, 77, 4, 75, 73, 83, 81, 81, 85, 88, 22, 0, - 8, 79, 69, 78, 75, 91, 2, 69, 68, 78, 17, 68, 0, - 76, 82, 69, 73, 66, 6, 6, 0, 12, 12, 75, 64, 64, - 67, 3, 73, 12, 70, 1, 12, 11, 21, 15, 8, 78, 1, - 70, 65, 1, 89, 66, 7, 3, 5, 7, 7, 20, 11, 3, 0, - 3, 0, 3, 6, 87, 68, 1, 76, 3, 0, 12, 5, 64, 11, - 6, 4, 66, 12, 64, 76, 3, 82, 19, 20, 15, 14, 17, - 16, 9, 16, 18, 65, 8, 9, 5, 2, 69, 3, 66, 0, 2, - 64, 2, 6, 65, 80, 65, 73, 68, 64, 82, 19, 25, - 18, 17, 15, 13, 12, 12, 6, 65, 66, 69, 75, 76, - 95, 68, 66, 80, 9, 4, 1, 1, 67, 72, 70, 71, 79, - 72, 77, 92, 86, 94, 67, 22, 18, 11, 4, 7, 64, - 69, 70, 76, 0, 35, 21, 15, 8, 13, 3, 65, 70, 74, - 4, 39, 29, 24, 17, 17, 5, 64, 69, 75, 70, 40, - 25, 11, 3, 8, 67, 76, 80, 5, 46, 34, 24, 17, 20, - 5, 65, 70, 73, 62, 86, 82, 72, 82, 83, 77, 77, - 74, 76, 75, 73, 73, 81, 77, 83, 79, 2, 78, 80, - 74, 70, 68, 70, 71, 68, 68, 72, 76, 79, 7, 7, - 14, 4, 64, 9, 7, 5, 3, 4, 4, 3, 68, 69, 73, 66, - 7, 79, 4, 19, 2, 6, 8, 10, 16, 4, 6, 9, 15, 69, - 72, 82, 31, 33, 39, 25, 23, 31, 30, 30, 33, 28, - 33, 33, 22, 18, 3, 20, 29, 17, 9, 18, 15, 9, 10, - 6, 6, 2, 67, 68, 72, 23, 21, 21, 17, 4, 8, 5, - 68, 65, 70, 72, 83, 81, 89, 92, 72, 72, 90, 8, - 9, 1, 72, 65, 66, 74, 68, 71, 76, 85, 86, 94, - 102, 5, 67, 80, 73, 3, 2, 7, 9, 10, 19, 12, 17, - 19, 31, 22, 21, 31, 30, 52, 33, 23, 12, 4, 70, - 82, 94, 113, 6, 39, 32, 30, 23, 25, 12, 9, 9, - 64, 77, 72, 1, 70, 9, 17, 68, 68, 6, 10, 4, 9, - 18, 4, 1, 45, 28, 12, 67, 78, 96, 108, 116, 125 }, - - { - - 47, - 6, 78, 47, 6, 78, 83, 68, 20, 11, 2, 68, 26, 31, - 53, 14, 3, 64, 6, 16, 0, 67, 66, 76, 92, 6, 18, - 107, 115, 118, 8, 72, 68, 6, 16, 0, 76, 68, 12, - 4, 64, 71, 78, 64, 77, 78, 91, 5, 71, 78, 2, 75, - 76, 88, 7, 66, 67, 72, 2, 4, 22, 0, 0, 0, 68, - 92, 97, 2, 2, 66, 18, 71, 91, 83, 9, 2, 32, 25, - 1, 5, 75, 5, 73, 72, 81, 81, 81, 85, 87, 22, 0, - 8, 78, 69, 77, 74, 90, 2, 69, 68, 78, 17, 68, 1, - 75, 81, 68, 73, 66, 6, 6, 0, 12, 12, 74, 64, 0, - 67, 3, 72, 11, 70, 1, 11, 10, 21, 14, 7, 77, 1, - 69, 66, 0, 89, 67, 7, 3, 6, 7, 7, 21, 11, 3, 0, - 4, 0, 3, 6, 88, 68, 1, 77, 3, 64, 12, 5, 65, 11, - 6, 4, 67, 12, 64, 76, 3, 83, 18, 20, 15, 14, 17, - 16, 9, 16, 18, 65, 8, 9, 5, 2, 69, 3, 66, 0, 2, - 64, 1, 6, 65, 80, 65, 73, 69, 65, 82, 17, 24, - 17, 16, 13, 11, 11, 11, 4, 67, 67, 70, 77, 77, - 96, 68, 66, 81, 8, 3, 0, 0, 68, 73, 71, 72, 80, - 73, 78, 92, 85, 93, 66, 23, 18, 11, 4, 8, 0, 68, - 69, 75, 1, 35, 21, 15, 8, 14, 3, 64, 69, 72, 4, - 39, 29, 24, 17, 18, 5, 64, 69, 74, 70, 41, 25, - 11, 3, 9, 67, 76, 79, 5, 46, 34, 24, 16, 20, 5, - 65, 69, 72, 62, 85, 81, 71, 81, 81, 76, 75, 73, - 74, 74, 72, 71, 80, 76, 83, 78, 4, 78, 81, 73, - 69, 68, 70, 72, 68, 68, 73, 77, 80, 7, 7, 14, 4, - 64, 8, 7, 5, 2, 4, 4, 3, 69, 69, 73, 65, 8, 79, - 4, 18, 2, 6, 8, 10, 16, 3, 5, 9, 15, 70, 72, 83, - 31, 32, 38, 24, 22, 30, 28, 28, 31, 26, 31, 30, - 20, 16, 2, 17, 26, 14, 5, 15, 13, 8, 9, 5, 6, 3, - 67, 67, 70, 21, 20, 19, 15, 2, 7, 4, 70, 66, 71, - 73, 84, 82, 90, 92, 72, 72, 91, 7, 8, 0, 74, 66, - 67, 75, 69, 72, 77, 86, 87, 95, 103, 5, 68, 80, - 72, 3, 2, 8, 10, 11, 20, 13, 18, 20, 33, 23, 22, - 33, 32, 51, 32, 21, 10, 1, 73, 85, 97, 115, 7, - 39, 32, 31, 23, 26, 13, 9, 10, 0, 77, 71, 2, 70, - 10, 19, 67, 67, 7, 11, 4, 10, 19, 4, 1, 44, 26, - 10, 69, 81, 99, 112, 119, 126 }, - - { - - 46, - 6, 78, 46, 6, 78, 81, 66, 20, 11, 1, 70, 24, 29, - 53, 14, 6, 65, 7, 16, 0, 68, 66, 77, 93, 6, 16, - 109, 116, 118, 11, 71, 68, 7, 16, 0, 76, 67, 12, - 4, 64, 71, 78, 64, 78, 77, 91, 5, 71, 77, 1, 75, - 76, 88, 8, 65, 67, 71, 3, 4, 22, 0, 0, 0, 68, - 92, 97, 3, 1, 66, 18, 71, 91, 82, 11, 3, 34, 27, - 2, 6, 74, 7, 72, 71, 79, 80, 80, 84, 86, 22, 0, - 8, 78, 69, 77, 74, 88, 1, 69, 68, 78, 17, 68, 1, - 75, 81, 68, 73, 65, 6, 5, 0, 12, 12, 74, 64, 0, - 67, 3, 72, 11, 70, 1, 11, 9, 20, 13, 6, 76, 2, - 69, 67, 0, 88, 67, 7, 2, 6, 7, 7, 22, 12, 3, 0, - 4, 0, 2, 6, 89, 68, 1, 77, 2, 65, 11, 5, 65, 12, - 6, 4, 68, 11, 65, 76, 3, 83, 18, 20, 15, 14, 17, - 16, 9, 16, 18, 65, 8, 9, 5, 2, 69, 3, 66, 64, 2, - 64, 1, 5, 66, 80, 66, 73, 70, 66, 82, 16, 22, - 15, 14, 11, 9, 9, 9, 2, 69, 69, 72, 80, 79, 97, - 68, 67, 81, 7, 2, 64, 64, 70, 75, 72, 73, 80, - 73, 78, 92, 85, 93, 66, 23, 18, 11, 4, 8, 0, 68, - 69, 74, 1, 35, 21, 15, 8, 14, 4, 0, 69, 70, 4, - 39, 29, 24, 17, 18, 5, 64, 69, 73, 70, 41, 24, - 10, 3, 9, 67, 76, 79, 5, 45, 33, 23, 15, 20, 5, - 65, 69, 72, 62, 84, 80, 70, 79, 80, 75, 74, 71, - 73, 72, 70, 69, 79, 75, 82, 78, 5, 77, 81, 73, - 68, 68, 71, 72, 69, 69, 74, 78, 81, 6, 6, 14, 3, - 65, 8, 7, 5, 1, 3, 4, 2, 70, 69, 73, 65, 8, 79, - 3, 18, 1, 6, 7, 9, 16, 2, 4, 8, 14, 71, 73, 85, - 30, 32, 38, 23, 20, 28, 26, 26, 29, 23, 28, 28, - 17, 14, 0, 14, 22, 11, 1, 13, 10, 6, 8, 4, 6, 4, - 66, 66, 68, 20, 18, 17, 14, 0, 5, 2, 72, 67, 73, - 75, 86, 84, 91, 93, 73, 72, 92, 5, 6, 65, 75, - 68, 69, 77, 71, 74, 79, 87, 88, 96, 103, 4, 68, - 81, 72, 4, 3, 8, 10, 12, 21, 14, 19, 21, 34, 24, - 23, 34, 33, 51, 30, 19, 7, 64, 76, 88, 100, 117, - 7, 40, 33, 31, 24, 27, 13, 10, 10, 0, 76, 71, 3, - 69, 11, 20, 67, 66, 7, 11, 4, 10, 20, 4, 1, 42, - 24, 7, 72, 84, 103, 116, 123, 126 }, - - { - - 45, - 6, 79, 45, 6, 79, 79, 65, 21, 11, 1, 71, 23, 28, - 53, 14, 8, 65, 7, 17, 0, 69, 66, 78, 94, 5, 15, - 110, 117, 119, 14, 70, 68, 7, 17, 0, 75, 66, 13, - 3, 0, 70, 77, 65, 78, 77, 91, 5, 70, 77, 1, 75, - 75, 88, 8, 65, 67, 71, 3, 4, 22, 0, 0, 0, 67, - 92, 97, 3, 1, 67, 18, 71, 90, 80, 13, 5, 35, 29, - 3, 7, 72, 8, 71, 71, 78, 80, 80, 84, 86, 23, 0, - 8, 77, 68, 76, 73, 87, 1, 70, 69, 79, 17, 68, 1, - 74, 81, 67, 73, 65, 6, 5, 1, 12, 11, 74, 64, 0, - 67, 3, 72, 10, 70, 1, 10, 8, 19, 13, 6, 76, 2, - 69, 67, 64, 88, 68, 7, 2, 6, 7, 7, 22, 12, 3, 0, - 5, 0, 1, 6, 89, 69, 1, 78, 2, 66, 11, 5, 66, 12, - 6, 4, 70, 11, 66, 76, 3, 84, 17, 20, 14, 14, 17, - 16, 9, 16, 18, 65, 7, 9, 4, 2, 69, 2, 67, 64, 1, - 65, 0, 4, 66, 80, 66, 72, 71, 68, 82, 14, 20, - 13, 12, 9, 7, 7, 7, 0, 71, 70, 73, 82, 81, 98, - 68, 67, 82, 6, 1, 65, 66, 71, 76, 73, 74, 81, - 74, 79, 92, 85, 92, 65, 23, 18, 11, 5, 8, 0, 68, - 68, 73, 2, 34, 21, 15, 8, 15, 4, 1, 68, 68, 4, - 40, 29, 24, 17, 19, 5, 64, 68, 73, 70, 41, 24, - 10, 3, 9, 66, 75, 78, 5, 45, 33, 22, 15, 20, 5, - 64, 68, 71, 62, 84, 79, 70, 78, 79, 74, 72, 70, - 72, 71, 69, 68, 79, 74, 82, 77, 7, 77, 82, 73, - 68, 68, 71, 73, 69, 70, 75, 79, 82, 6, 6, 14, 3, - 65, 7, 6, 5, 1, 3, 3, 2, 70, 69, 74, 65, 8, 80, - 3, 17, 0, 5, 6, 9, 17, 2, 3, 8, 14, 71, 73, 86, - 29, 31, 37, 22, 19, 27, 24, 24, 27, 21, 26, 25, - 14, 11, 64, 12, 19, 8, 66, 10, 8, 4, 7, 3, 6, 5, - 66, 64, 65, 18, 16, 15, 12, 65, 3, 1, 74, 69, - 74, 76, 87, 85, 92, 94, 73, 73, 93, 4, 5, 66, - 77, 70, 71, 78, 72, 76, 80, 89, 90, 98, 104, 3, - 69, 82, 72, 4, 3, 9, 11, 12, 23, 15, 20, 22, 35, - 26, 24, 36, 34, 50, 29, 17, 5, 67, 78, 91, 102, - 119, 8, 40, 33, 32, 24, 28, 14, 10, 11, 1, 76, - 70, 3, 69, 12, 21, 67, 66, 8, 12, 4, 11, 21, 4, - 1, 41, 22, 5, 75, 88, 107, 119, 126, 126 }, - - { - - 43, - 6, 79, 43, 6, 79, 78, 0, 21, 11, 0, 73, 21, 27, - 53, 14, 10, 65, 8, 18, 0, 70, 66, 79, 95, 5, 13, - 112, 118, 119, 17, 69, 68, 8, 18, 0, 75, 65, 13, - 3, 0, 70, 76, 65, 79, 77, 91, 5, 70, 76, 1, 76, - 75, 88, 9, 65, 67, 71, 4, 4, 22, 0, 0, 0, 67, - 93, 97, 4, 0, 67, 18, 71, 90, 78, 14, 6, 37, 30, - 4, 8, 71, 9, 70, 70, 76, 79, 80, 83, 85, 23, 0, - 8, 77, 68, 76, 73, 85, 1, 70, 69, 79, 17, 68, 1, - 74, 81, 67, 73, 64, 6, 5, 1, 12, 11, 74, 64, 0, - 67, 3, 72, 9, 71, 1, 9, 7, 18, 12, 5, 75, 3, 69, - 68, 64, 87, 68, 7, 2, 6, 7, 7, 23, 12, 3, 64, 5, - 64, 0, 5, 90, 69, 1, 78, 1, 67, 11, 4, 67, 12, - 6, 4, 71, 11, 67, 76, 3, 84, 16, 20, 14, 14, 17, - 16, 9, 16, 17, 65, 7, 9, 4, 2, 70, 2, 67, 65, 1, - 65, 64, 3, 67, 80, 67, 72, 72, 69, 82, 13, 18, - 11, 10, 7, 5, 5, 5, 65, 73, 72, 75, 84, 83, 99, - 68, 67, 82, 5, 0, 66, 67, 73, 78, 74, 76, 82, - 74, 79, 92, 85, 92, 65, 23, 18, 11, 5, 8, 0, 68, - 68, 72, 2, 34, 21, 15, 8, 15, 5, 1, 67, 66, 4, - 40, 29, 24, 17, 19, 5, 64, 68, 72, 70, 41, 24, - 9, 3, 9, 66, 75, 77, 5, 44, 32, 21, 14, 20, 5, - 64, 68, 71, 62, 83, 78, 69, 77, 78, 73, 71, 69, - 71, 70, 67, 66, 78, 74, 82, 77, 8, 77, 82, 73, - 67, 68, 72, 73, 69, 71, 76, 80, 83, 5, 5, 14, 2, - 66, 7, 6, 5, 0, 2, 3, 2, 71, 70, 74, 65, 8, 80, - 2, 17, 64, 5, 5, 8, 17, 1, 2, 7, 13, 72, 74, 88, - 28, 30, 37, 21, 18, 25, 22, 22, 25, 18, 23, 23, - 11, 9, 65, 9, 16, 5, 70, 7, 5, 2, 6, 1, 6, 6, - 66, 0, 0, 16, 14, 13, 10, 67, 1, 64, 76, 70, 76, - 77, 89, 87, 93, 95, 74, 73, 94, 3, 3, 68, 79, - 72, 73, 80, 74, 78, 82, 90, 91, 99, 105, 2, 70, - 83, 72, 5, 3, 9, 11, 13, 24, 15, 21, 23, 36, 27, - 25, 37, 35, 50, 27, 15, 2, 69, 81, 94, 105, 122, - 8, 41, 34, 32, 24, 28, 14, 10, 11, 1, 76, 70, 4, - 68, 13, 22, 67, 65, 8, 12, 4, 11, 22, 4, 1, 40, - 20, 2, 78, 91, 111, 123, 126, 126 }, - - { - - 42, - 6, 79, 42, 6, 79, 76, 1, 21, 11, 0, 74, 20, 25, - 53, 14, 13, 66, 9, 18, 0, 70, 65, 80, 96, 4, 11, - 114, 119, 120, 20, 67, 68, 9, 18, 0, 75, 64, 13, - 2, 0, 70, 76, 65, 79, 76, 91, 5, 70, 75, 0, 76, - 75, 88, 9, 64, 66, 70, 4, 4, 22, 0, 0, 0, 66, - 93, 97, 4, 64, 67, 18, 70, 90, 77, 16, 8, 38, - 32, 6, 9, 70, 11, 69, 69, 74, 79, 79, 83, 84, - 23, 0, 8, 76, 68, 75, 72, 84, 0, 70, 69, 79, 17, - 68, 2, 73, 81, 67, 73, 64, 6, 4, 1, 12, 11, 73, - 64, 1, 67, 3, 72, 9, 71, 1, 9, 6, 18, 11, 4, 74, - 3, 69, 69, 65, 87, 69, 7, 1, 6, 7, 7, 24, 13, 3, - 64, 5, 64, 64, 5, 91, 69, 1, 79, 1, 68, 10, 4, - 67, 13, 6, 4, 72, 10, 68, 76, 3, 85, 16, 20, 14, - 14, 17, 16, 9, 16, 17, 65, 7, 9, 4, 2, 70, 2, - 67, 65, 1, 65, 64, 2, 67, 80, 67, 72, 73, 70, - 82, 11, 16, 10, 9, 5, 3, 3, 3, 67, 75, 74, 77, - 87, 84, 100, 68, 68, 83, 4, 64, 67, 68, 74, 79, - 75, 77, 82, 75, 80, 92, 85, 91, 65, 23, 18, 11, - 5, 8, 1, 67, 67, 71, 3, 34, 21, 15, 8, 15, 5, 2, - 67, 64, 4, 40, 29, 24, 17, 19, 5, 64, 68, 71, - 70, 42, 23, 9, 3, 9, 66, 75, 77, 5, 44, 31, 20, - 13, 20, 5, 64, 68, 70, 62, 82, 77, 68, 75, 77, - 72, 70, 67, 70, 68, 66, 64, 77, 73, 81, 76, 9, - 76, 83, 72, 66, 68, 72, 74, 70, 71, 77, 81, 84, - 4, 5, 14, 2, 66, 6, 6, 5, 64, 1, 3, 1, 72, 70, - 74, 65, 8, 80, 1, 16, 64, 5, 4, 7, 17, 0, 1, 7, - 13, 73, 75, 90, 27, 30, 36, 20, 16, 24, 20, 20, - 23, 16, 20, 20, 8, 7, 67, 6, 12, 2, 74, 5, 3, 0, - 5, 0, 6, 7, 65, 1, 2, 15, 13, 11, 9, 69, 64, 65, - 78, 71, 78, 79, 91, 88, 94, 96, 74, 73, 95, 1, - 2, 70, 80, 73, 74, 81, 75, 79, 83, 91, 92, 100, - 105, 2, 70, 84, 71, 5, 4, 10, 12, 14, 25, 16, - 22, 24, 38, 28, 26, 38, 37, 49, 25, 13, 0, 72, - 84, 97, 108, 124, 8, 41, 34, 33, 25, 29, 14, 11, - 12, 2, 75, 70, 5, 68, 14, 23, 66, 64, 9, 13, 4, - 12, 23, 4, 1, 38, 18, 0, 81, 94, 114, 126, 126, - 126 }, - - { - - 41, - 6, 79, 41, 6, 79, 74, 3, 22, 11, 64, 76, 18, 24, - 53, 14, 15, 66, 10, 19, 0, 71, 65, 81, 97, 4, 9, - 115, 120, 120, 23, 66, 68, 10, 19, 0, 74, 0, 14, - 2, 0, 69, 75, 66, 80, 76, 91, 5, 70, 75, 0, 76, - 75, 88, 10, 64, 66, 70, 5, 4, 22, 0, 0, 0, 66, - 93, 97, 5, 65, 67, 18, 70, 90, 75, 18, 9, 40, - 34, 7, 10, 68, 12, 68, 68, 72, 78, 79, 82, 83, - 23, 0, 8, 76, 68, 75, 72, 82, 0, 71, 70, 80, 17, - 68, 2, 73, 81, 66, 73, 0, 6, 4, 1, 12, 10, 73, - 64, 1, 67, 3, 72, 8, 71, 1, 8, 5, 17, 10, 3, 74, - 4, 69, 70, 65, 86, 69, 7, 1, 6, 7, 7, 25, 13, 3, - 64, 6, 64, 65, 5, 92, 69, 1, 79, 0, 69, 10, 4, - 68, 13, 6, 4, 74, 10, 69, 76, 3, 85, 15, 20, 14, - 14, 17, 16, 9, 16, 17, 65, 6, 9, 4, 2, 70, 1, - 68, 66, 0, 66, 65, 1, 68, 80, 68, 72, 74, 72, - 82, 10, 14, 8, 7, 3, 1, 1, 1, 69, 77, 75, 78, - 89, 86, 101, 68, 68, 83, 3, 65, 68, 70, 76, 81, - 76, 78, 83, 75, 80, 92, 85, 91, 64, 23, 18, 11, - 5, 8, 1, 67, 67, 70, 3, 34, 21, 15, 8, 16, 6, 3, - 66, 1, 4, 40, 29, 24, 17, 20, 5, 64, 68, 71, 70, - 42, 23, 8, 3, 9, 66, 75, 76, 5, 43, 31, 19, 12, - 20, 5, 64, 67, 70, 62, 81, 76, 68, 74, 76, 71, - 68, 66, 69, 67, 64, 0, 77, 72, 81, 76, 11, 76, - 83, 72, 66, 68, 73, 74, 70, 72, 78, 82, 85, 4, - 4, 14, 1, 67, 6, 5, 5, 65, 1, 2, 1, 73, 70, 75, - 65, 8, 81, 1, 16, 65, 5, 3, 7, 17, 64, 0, 6, 12, - 74, 75, 91, 26, 29, 36, 19, 15, 22, 18, 18, 21, - 13, 18, 18, 5, 4, 68, 3, 9, 64, 78, 2, 0, 65, 4, - 64, 6, 8, 65, 2, 4, 13, 11, 9, 7, 71, 66, 67, - 80, 73, 79, 80, 92, 90, 95, 97, 75, 74, 96, 0, - 0, 71, 82, 75, 76, 83, 77, 81, 85, 92, 94, 102, - 106, 1, 71, 85, 71, 6, 4, 10, 12, 14, 26, 17, - 23, 25, 39, 29, 27, 40, 38, 49, 24, 11, 66, 74, - 87, 100, 111, 126, 9, 42, 35, 33, 25, 30, 15, - 11, 12, 2, 75, 69, 5, 67, 15, 24, 66, 64, 9, 13, - 4, 12, 24, 4, 1, 37, 16, 66, 84, 97, 118, 126, - 126, 126 }, - - { - - 40, - 6, 79, 40, 6, 79, 72, 4, 22, 11, 64, 77, 17, 23, - 53, 14, 17, 66, 11, 20, 0, 72, 65, 82, 98, 3, 7, - 117, 121, 121, 26, 65, 68, 11, 20, 0, 74, 1, 14, - 1, 0, 69, 74, 66, 80, 76, 91, 5, 70, 74, 0, 76, - 75, 88, 10, 64, 66, 70, 5, 4, 22, 0, 0, 0, 65, - 93, 97, 5, 66, 67, 18, 70, 90, 73, 20, 11, 41, - 36, 8, 11, 67, 13, 67, 67, 70, 78, 79, 82, 82, - 23, 0, 8, 75, 68, 74, 71, 81, 0, 71, 70, 80, 17, - 68, 2, 72, 81, 66, 73, 0, 6, 4, 1, 12, 10, 73, - 64, 1, 67, 3, 72, 7, 71, 1, 7, 4, 16, 9, 2, 73, - 4, 69, 71, 66, 86, 70, 7, 1, 6, 7, 7, 26, 13, 3, - 64, 6, 64, 66, 5, 93, 69, 1, 80, 0, 70, 10, 4, - 69, 13, 6, 4, 75, 10, 70, 76, 3, 86, 14, 20, 14, - 14, 17, 16, 9, 16, 17, 65, 6, 9, 4, 2, 70, 1, - 68, 66, 0, 66, 66, 0, 68, 80, 68, 72, 75, 73, - 82, 8, 12, 6, 5, 1, 64, 64, 64, 71, 79, 77, 80, - 91, 88, 102, 68, 68, 84, 2, 66, 69, 71, 77, 82, - 77, 79, 84, 76, 81, 92, 85, 90, 64, 23, 18, 11, - 5, 8, 1, 67, 66, 69, 4, 34, 21, 15, 8, 16, 6, 4, - 65, 3, 4, 40, 29, 24, 17, 20, 5, 64, 68, 70, 70, - 42, 23, 8, 3, 9, 66, 75, 75, 5, 43, 30, 18, 11, - 20, 5, 64, 67, 69, 62, 80, 75, 67, 73, 75, 70, - 67, 65, 68, 66, 0, 2, 76, 71, 81, 75, 12, 76, - 84, 72, 65, 68, 73, 75, 70, 73, 79, 83, 86, 3, - 4, 14, 1, 67, 5, 5, 5, 66, 0, 2, 1, 74, 70, 75, - 65, 8, 81, 0, 15, 66, 5, 2, 6, 17, 65, 64, 6, - 12, 75, 76, 93, 25, 28, 35, 18, 14, 21, 16, 16, - 19, 11, 15, 15, 2, 2, 69, 0, 6, 67, 82, 64, 65, - 67, 3, 65, 6, 9, 65, 3, 6, 11, 9, 7, 5, 73, 68, - 68, 82, 74, 81, 81, 94, 91, 96, 98, 75, 74, 97, - 64, 64, 73, 84, 77, 78, 84, 78, 83, 86, 93, 95, - 103, 107, 0, 72, 86, 71, 6, 4, 11, 13, 15, 27, - 18, 24, 26, 40, 30, 28, 41, 39, 48, 22, 9, 68, - 77, 90, 103, 114, 126, 9, 42, 35, 34, 25, 31, - 15, 11, 13, 3, 75, 69, 6, 67, 16, 25, 66, 0, 10, - 14, 4, 13, 25, 4, 1, 36, 14, 68, 87, 100, 122, - 126, 126, 126 }, - - { - - 38, - 5, 80, 38, 5, 80, 71, 5, 22, 11, 65, 79, 15, 21, - 52, 14, 19, 67, 11, 20, 64, 73, 65, 84, 100, 2, - 5, 119, 122, 122, 28, 64, 69, 11, 20, 64, 74, 2, - 14, 0, 0, 69, 74, 67, 81, 76, 92, 5, 70, 74, 64, - 77, 75, 88, 10, 64, 66, 70, 5, 3, 22, 0, 0, 0, - 65, 94, 97, 5, 67, 68, 18, 70, 90, 72, 21, 12, - 42, 37, 9, 12, 66, 14, 66, 67, 69, 78, 79, 82, - 82, 23, 0, 8, 75, 68, 74, 71, 80, 64, 72, 71, - 81, 17, 68, 2, 72, 81, 66, 73, 0, 5, 3, 1, 11, - 9, 73, 65, 1, 67, 2, 72, 6, 72, 0, 6, 2, 15, 8, - 1, 73, 4, 69, 72, 67, 86, 71, 6, 0, 6, 7, 7, 26, - 13, 3, 65, 6, 65, 67, 4, 94, 70, 0, 81, 64, 71, - 9, 3, 70, 13, 6, 4, 77, 9, 71, 76, 3, 87, 13, - 19, 13, 14, 17, 15, 8, 16, 16, 66, 5, 9, 3, 1, - 71, 0, 69, 67, 64, 67, 67, 64, 69, 80, 69, 72, - 76, 75, 82, 6, 10, 4, 3, 64, 67, 66, 66, 73, 81, - 79, 82, 94, 90, 104, 69, 69, 85, 1, 68, 71, 73, - 79, 84, 79, 81, 85, 77, 82, 92, 85, 90, 64, 23, - 18, 11, 5, 8, 1, 67, 66, 68, 4, 33, 21, 15, 8, - 16, 6, 4, 65, 4, 3, 40, 29, 23, 16, 20, 5, 64, - 68, 70, 70, 42, 22, 7, 2, 9, 66, 75, 75, 5, 42, - 29, 17, 10, 19, 5, 64, 67, 69, 62, 80, 74, 67, - 72, 74, 70, 66, 64, 67, 65, 1, 3, 76, 71, 81, - 75, 13, 76, 85, 72, 65, 68, 74, 76, 71, 74, 80, - 85, 88, 2, 3, 14, 0, 68, 4, 4, 4, 67, 64, 1, 0, - 75, 71, 76, 65, 8, 82, 64, 14, 67, 4, 1, 5, 17, - 66, 66, 5, 11, 76, 77, 95, 24, 27, 34, 16, 12, - 19, 14, 14, 16, 8, 12, 12, 64, 64, 71, 66, 2, - 70, 87, 67, 68, 69, 1, 67, 6, 9, 65, 4, 8, 9, 7, - 5, 3, 76, 70, 70, 85, 76, 83, 83, 96, 93, 97, - 99, 76, 75, 99, 66, 66, 75, 86, 79, 80, 86, 80, - 85, 88, 95, 97, 105, 108, 64, 73, 87, 71, 6, 4, - 11, 13, 15, 28, 18, 25, 26, 41, 31, 29, 42, 40, - 47, 20, 6, 71, 80, 93, 107, 117, 126, 9, 42, 35, - 34, 25, 31, 15, 11, 13, 3, 75, 69, 6, 67, 17, - 26, 66, 0, 10, 14, 4, 13, 25, 4, 0, 34, 11, 71, - 90, 104, 126, 126, 126, 126 }, - - { - - 37, - 5, 80, 37, 5, 80, 69, 7, 23, 12, 65, 80, 14, 20, - 52, 14, 22, 67, 12, 21, 64, 73, 64, 85, 101, 2, - 4, 120, 123, 122, 31, 1, 69, 12, 21, 64, 73, 4, - 15, 0, 1, 68, 73, 67, 81, 75, 92, 5, 69, 73, 64, - 77, 74, 88, 11, 0, 65, 69, 6, 3, 22, 0, 0, 0, - 64, 94, 97, 6, 67, 68, 18, 69, 89, 70, 23, 14, - 44, 39, 11, 13, 64, 16, 64, 66, 67, 77, 78, 81, - 81, 24, 1, 9, 74, 67, 73, 70, 78, 64, 72, 71, - 81, 18, 68, 3, 71, 80, 65, 72, 1, 5, 3, 2, 11, - 9, 72, 65, 2, 67, 2, 71, 6, 72, 0, 6, 1, 15, 8, - 1, 72, 5, 68, 72, 67, 85, 71, 6, 0, 7, 7, 7, 27, - 14, 4, 65, 7, 65, 67, 4, 94, 70, 0, 81, 64, 72, - 9, 3, 70, 14, 7, 4, 78, 9, 71, 75, 3, 87, 13, - 19, 13, 14, 17, 15, 8, 16, 16, 66, 5, 9, 3, 1, - 71, 0, 69, 67, 64, 67, 67, 64, 69, 79, 69, 71, - 76, 76, 81, 5, 9, 3, 2, 66, 69, 67, 67, 75, 82, - 80, 83, 96, 91, 105, 69, 69, 85, 0, 69, 72, 74, - 80, 85, 80, 82, 85, 77, 82, 91, 84, 89, 0, 24, - 18, 11, 6, 9, 2, 66, 65, 66, 5, 33, 21, 15, 8, - 17, 7, 5, 64, 6, 3, 41, 30, 23, 16, 21, 5, 64, - 67, 69, 70, 43, 22, 7, 2, 10, 65, 74, 74, 5, 42, - 29, 17, 10, 19, 5, 0, 66, 68, 62, 79, 73, 66, - 70, 72, 69, 64, 1, 65, 0, 3, 5, 75, 70, 80, 74, - 15, 75, 85, 71, 64, 67, 74, 76, 71, 74, 80, 86, - 89, 2, 3, 15, 0, 68, 4, 4, 4, 67, 64, 1, 0, 75, - 71, 76, 64, 9, 82, 64, 14, 67, 4, 1, 5, 18, 66, - 67, 5, 11, 76, 77, 96, 24, 27, 34, 15, 11, 18, - 12, 12, 14, 6, 10, 10, 66, 66, 72, 68, 64, 73, - 91, 69, 70, 70, 0, 68, 6, 10, 64, 6, 11, 8, 6, - 4, 2, 78, 71, 71, 87, 77, 84, 84, 97, 94, 98, - 99, 76, 75, 100, 67, 67, 76, 87, 80, 81, 87, 81, - 86, 89, 96, 98, 106, 108, 64, 73, 87, 70, 7, 5, - 12, 14, 16, 30, 19, 26, 27, 43, 33, 30, 44, 42, - 47, 19, 4, 73, 82, 95, 110, 119, 126, 10, 43, - 36, 35, 26, 32, 16, 12, 14, 4, 74, 68, 7, 66, - 19, 28, 65, 1, 11, 15, 5, 14, 26, 4, 0, 33, 9, - 73, 92, 107, 126, 126, 126, 126 }, - - { - - 36, - 5, 80, 36, 5, 80, 67, 8, 23, 12, 65, 81, 13, 19, - 52, 14, 24, 67, 13, 22, 64, 74, 64, 86, 102, 1, - 2, 122, 124, 123, 34, 2, 69, 13, 22, 64, 73, 5, - 15, 64, 1, 68, 72, 67, 81, 75, 92, 5, 69, 72, - 64, 77, 74, 88, 11, 0, 65, 69, 6, 3, 22, 0, 0, - 0, 0, 94, 97, 6, 68, 68, 18, 69, 89, 68, 25, 16, - 45, 41, 12, 14, 0, 17, 0, 65, 65, 77, 78, 81, - 80, 24, 1, 9, 73, 67, 72, 70, 77, 64, 72, 71, - 81, 18, 68, 3, 71, 80, 65, 72, 1, 5, 3, 2, 11, - 9, 72, 65, 2, 67, 2, 71, 5, 72, 0, 5, 0, 14, 7, - 0, 71, 5, 68, 73, 68, 85, 72, 6, 0, 7, 7, 7, 28, - 14, 4, 65, 7, 65, 68, 4, 95, 70, 0, 82, 64, 73, - 9, 3, 71, 14, 7, 4, 79, 9, 72, 75, 3, 88, 12, - 19, 13, 14, 17, 15, 8, 16, 16, 66, 5, 9, 3, 1, - 71, 0, 69, 67, 64, 67, 68, 65, 70, 79, 69, 71, - 77, 77, 81, 3, 7, 1, 0, 68, 71, 69, 69, 77, 84, - 82, 85, 98, 93, 106, 69, 69, 86, 64, 70, 73, 75, - 82, 86, 81, 83, 86, 78, 83, 91, 84, 88, 0, 24, - 18, 11, 6, 9, 2, 66, 65, 65, 6, 33, 21, 15, 8, - 17, 7, 6, 0, 8, 3, 41, 30, 23, 16, 21, 5, 64, - 67, 68, 70, 43, 22, 7, 2, 10, 65, 74, 73, 5, 41, - 28, 16, 9, 19, 5, 0, 66, 68, 62, 78, 72, 65, 69, - 71, 68, 0, 2, 64, 1, 4, 7, 74, 69, 80, 73, 16, - 75, 86, 71, 0, 67, 74, 77, 71, 75, 81, 87, 90, - 1, 3, 15, 0, 69, 3, 4, 4, 68, 65, 1, 0, 76, 71, - 76, 64, 9, 82, 65, 13, 68, 4, 0, 4, 18, 67, 68, - 5, 11, 77, 78, 98, 23, 26, 33, 14, 10, 17, 10, - 10, 12, 4, 7, 7, 69, 68, 73, 71, 67, 76, 95, 72, - 72, 72, 64, 69, 6, 11, 64, 7, 13, 6, 4, 2, 0, - 80, 73, 73, 89, 78, 86, 85, 99, 95, 99, 100, 77, - 75, 101, 68, 68, 78, 89, 82, 83, 88, 83, 88, 90, - 97, 99, 107, 109, 65, 74, 88, 70, 7, 5, 13, 14, - 17, 31, 20, 27, 28, 44, 34, 31, 45, 43, 46, 17, - 2, 75, 85, 98, 113, 122, 126, 10, 43, 36, 35, - 26, 33, 16, 12, 14, 4, 74, 68, 8, 66, 20, 29, - 65, 2, 12, 16, 5, 14, 27, 4, 0, 32, 7, 75, 95, - 110, 126, 126, 126, 126 }, - - { - - 35, - 5, 80, 35, 5, 80, 65, 10, 24, 12, 66, 83, 11, - 18, 52, 14, 26, 67, 14, 23, 64, 75, 64, 87, 103, - 1, 0, 123, 125, 123, 37, 3, 69, 14, 23, 64, 72, - 6, 16, 64, 1, 67, 71, 68, 82, 75, 92, 5, 69, 72, - 64, 77, 74, 88, 12, 0, 65, 69, 7, 3, 22, 0, 0, - 0, 0, 94, 97, 7, 69, 68, 18, 69, 89, 66, 27, 17, - 47, 43, 13, 15, 2, 18, 1, 64, 0, 76, 78, 80, 79, - 24, 1, 9, 73, 67, 72, 69, 75, 64, 73, 72, 82, - 18, 68, 3, 70, 80, 64, 72, 2, 5, 3, 2, 11, 8, - 72, 65, 2, 67, 2, 71, 4, 72, 0, 4, 64, 13, 6, - 64, 71, 6, 68, 74, 68, 84, 72, 6, 0, 7, 7, 7, - 29, 14, 4, 65, 8, 65, 69, 4, 96, 70, 0, 82, 65, - 74, 9, 3, 72, 14, 7, 4, 81, 9, 73, 75, 3, 88, - 11, 19, 13, 14, 17, 15, 8, 16, 16, 66, 4, 9, 3, - 1, 71, 64, 70, 68, 65, 68, 69, 66, 70, 79, 70, - 71, 78, 79, 81, 2, 5, 64, 65, 70, 73, 71, 71, - 79, 86, 83, 86, 100, 95, 107, 69, 69, 86, 65, - 71, 74, 77, 83, 88, 82, 84, 87, 78, 83, 91, 84, - 88, 1, 24, 18, 11, 6, 9, 2, 66, 64, 64, 6, 33, - 21, 15, 8, 18, 8, 7, 1, 10, 3, 41, 30, 23, 16, - 22, 5, 64, 67, 68, 70, 43, 22, 6, 2, 10, 65, 74, - 72, 5, 41, 28, 15, 8, 19, 5, 0, 65, 67, 62, 77, - 71, 65, 68, 70, 67, 2, 3, 0, 2, 6, 8, 74, 68, - 80, 73, 18, 75, 86, 71, 0, 67, 75, 77, 71, 76, - 82, 88, 91, 1, 2, 15, 64, 69, 3, 3, 4, 69, 65, - 0, 0, 77, 71, 77, 64, 9, 83, 65, 13, 69, 4, 64, - 4, 18, 68, 69, 4, 10, 78, 78, 99, 22, 25, 33, - 13, 9, 15, 8, 8, 10, 1, 5, 5, 72, 71, 74, 74, - 70, 79, 99, 75, 75, 74, 65, 70, 6, 12, 64, 8, - 15, 4, 2, 0, 65, 82, 75, 74, 91, 80, 87, 86, - 100, 97, 100, 101, 77, 76, 102, 69, 70, 79, 91, - 84, 85, 90, 84, 90, 92, 98, 101, 109, 110, 66, - 75, 89, 70, 8, 5, 13, 15, 17, 32, 21, 28, 29, - 45, 35, 32, 47, 44, 46, 16, 0, 78, 87, 101, 116, - 125, 126, 11, 44, 37, 36, 26, 34, 17, 12, 15, 5, - 74, 67, 8, 65, 21, 30, 65, 2, 12, 16, 5, 15, 28, - 4, 0, 31, 5, 78, 98, 113, 126, 126, 126, 126 }, - - { - - 33, - 5, 80, 33, 5, 80, 64, 11, 24, 12, 66, 84, 10, - 16, 52, 14, 29, 68, 15, 23, 64, 76, 64, 88, 104, - 0, 65, 125, 126, 124, 40, 4, 69, 15, 23, 64, 72, - 7, 16, 65, 1, 67, 71, 68, 82, 74, 92, 5, 69, 71, - 65, 78, 74, 88, 12, 1, 65, 68, 7, 3, 22, 0, 0, - 0, 1, 95, 97, 7, 70, 68, 18, 69, 89, 65, 28, 19, - 48, 44, 14, 16, 3, 20, 2, 0, 2, 76, 77, 80, 78, - 24, 1, 9, 72, 67, 71, 69, 74, 65, 73, 72, 82, - 18, 68, 3, 70, 80, 64, 72, 2, 5, 2, 2, 11, 8, - 72, 65, 2, 67, 2, 71, 4, 73, 0, 4, 65, 12, 5, - 65, 70, 6, 68, 75, 69, 84, 73, 6, 64, 7, 7, 7, - 30, 15, 4, 66, 8, 66, 70, 3, 97, 70, 0, 83, 65, - 75, 8, 2, 72, 15, 7, 4, 82, 8, 74, 75, 3, 89, - 11, 19, 13, 14, 17, 15, 8, 16, 15, 66, 4, 9, 3, - 1, 72, 64, 70, 68, 65, 68, 69, 67, 71, 79, 70, - 71, 79, 80, 81, 0, 3, 66, 67, 72, 75, 73, 73, - 81, 88, 85, 88, 103, 97, 108, 69, 70, 87, 66, - 72, 75, 78, 85, 89, 83, 86, 87, 79, 84, 91, 84, - 87, 1, 24, 18, 11, 6, 9, 2, 66, 64, 0, 7, 33, - 21, 15, 8, 18, 8, 7, 1, 12, 3, 41, 30, 23, 16, - 22, 5, 64, 67, 67, 70, 43, 21, 6, 2, 10, 65, 74, - 72, 5, 40, 27, 14, 7, 19, 5, 0, 65, 67, 62, 76, - 70, 64, 66, 69, 66, 3, 5, 1, 4, 7, 10, 73, 68, - 79, 72, 19, 74, 87, 71, 1, 67, 75, 78, 72, 77, - 83, 89, 92, 0, 2, 15, 64, 70, 2, 3, 4, 70, 66, - 0, 64, 78, 72, 77, 64, 9, 83, 66, 12, 70, 4, 65, - 3, 18, 69, 70, 4, 10, 79, 79, 101, 21, 25, 32, - 12, 7, 14, 6, 6, 8, 64, 2, 2, 75, 73, 76, 77, - 74, 82, 103, 77, 77, 76, 66, 72, 6, 13, 0, 9, - 17, 3, 0, 65, 66, 84, 77, 76, 93, 81, 89, 88, - 102, 98, 101, 102, 78, 76, 103, 71, 71, 81, 92, - 86, 87, 91, 86, 92, 93, 99, 102, 110, 110, 67, - 75, 90, 70, 8, 6, 14, 15, 18, 33, 21, 29, 30, - 46, 36, 33, 48, 45, 45, 14, 65, 80, 90, 104, - 119, 126, 126, 11, 44, 37, 36, 27, 34, 17, 13, - 15, 5, 73, 67, 9, 65, 22, 31, 65, 3, 13, 17, 5, - 15, 29, 4, 0, 29, 3, 80, 101, 116, 126, 126, - 126, 126 }, - - { - - 32, - 5, 80, 32, 5, 80, 1, 13, 24, 12, 67, 86, 8, 15, - 52, 14, 31, 68, 16, 24, 64, 76, 0, 89, 105, 0, - 67, 126, 126, 124, 43, 6, 69, 16, 24, 64, 72, 8, - 16, 65, 1, 67, 70, 68, 83, 74, 92, 5, 69, 70, - 65, 78, 74, 88, 13, 1, 64, 68, 8, 3, 22, 0, 0, - 0, 1, 95, 97, 8, 71, 68, 18, 68, 89, 0, 30, 20, - 50, 46, 16, 17, 4, 21, 3, 1, 4, 75, 77, 79, 77, - 24, 1, 9, 72, 67, 71, 68, 72, 65, 73, 72, 82, - 18, 68, 4, 69, 80, 64, 72, 3, 5, 2, 2, 11, 8, - 71, 65, 3, 67, 2, 71, 3, 73, 0, 3, 66, 12, 4, - 66, 69, 7, 68, 76, 69, 83, 73, 6, 64, 7, 7, 7, - 31, 15, 4, 66, 8, 66, 71, 3, 98, 70, 0, 83, 66, - 76, 8, 2, 73, 15, 7, 4, 83, 8, 75, 75, 3, 89, - 10, 19, 13, 14, 17, 15, 8, 16, 15, 66, 4, 9, 3, - 1, 72, 64, 70, 69, 65, 68, 70, 68, 71, 79, 71, - 71, 80, 81, 81, 64, 1, 67, 68, 74, 77, 75, 75, - 83, 90, 87, 90, 105, 98, 109, 69, 70, 87, 67, - 73, 76, 79, 86, 91, 84, 87, 88, 79, 84, 91, 84, - 87, 1, 24, 18, 11, 6, 9, 3, 65, 0, 1, 7, 33, 21, - 15, 8, 18, 9, 8, 2, 14, 3, 41, 30, 23, 16, 22, - 5, 64, 67, 66, 70, 44, 21, 5, 2, 10, 65, 74, 71, - 5, 40, 26, 13, 6, 19, 5, 0, 65, 66, 62, 75, 69, - 0, 65, 68, 65, 4, 6, 2, 5, 9, 12, 72, 67, 79, - 72, 20, 74, 87, 70, 2, 67, 76, 78, 72, 77, 84, - 90, 93, 64, 1, 15, 65, 70, 2, 3, 4, 71, 67, 0, - 64, 79, 72, 77, 64, 9, 83, 67, 12, 70, 4, 66, 2, - 18, 70, 71, 3, 9, 80, 80, 103, 20, 24, 32, 11, - 6, 12, 4, 4, 6, 67, 64, 0, 78, 75, 77, 80, 77, - 85, 107, 80, 80, 78, 67, 73, 6, 14, 0, 10, 19, - 1, 64, 67, 68, 86, 79, 77, 95, 82, 91, 89, 104, - 100, 102, 103, 78, 76, 104, 72, 73, 83, 94, 87, - 88, 93, 87, 93, 95, 100, 103, 111, 111, 67, 76, - 91, 69, 9, 6, 14, 16, 19, 34, 22, 30, 31, 48, - 37, 34, 49, 47, 45, 12, 67, 83, 92, 107, 122, - 126, 126, 11, 45, 38, 37, 27, 35, 17, 13, 16, 6, - 73, 67, 10, 64, 23, 32, 64, 4, 13, 17, 5, 16, - 30, 4, 0, 28, 1, 83, 104, 119, 126, 126, 126, - 126 }, - - { - - 31, - 5, 81, 31, 5, 81, 3, 14, 25, 12, 67, 87, 7, 14, - 52, 14, 33, 68, 16, 25, 64, 77, 0, 90, 106, 64, - 68, 126, 126, 125, 46, 7, 69, 16, 25, 64, 71, 9, - 17, 66, 2, 66, 69, 69, 83, 74, 92, 5, 68, 70, - 65, 78, 73, 88, 13, 1, 64, 68, 8, 3, 22, 0, 0, - 0, 2, 95, 97, 8, 71, 69, 18, 68, 88, 2, 32, 22, - 51, 48, 17, 18, 6, 22, 4, 1, 5, 75, 77, 79, 77, - 25, 1, 9, 71, 66, 70, 68, 71, 65, 74, 73, 83, - 18, 68, 4, 69, 80, 0, 72, 3, 5, 2, 3, 11, 7, 71, - 65, 3, 67, 2, 71, 2, 73, 0, 2, 67, 11, 4, 66, - 69, 7, 68, 76, 70, 83, 74, 6, 64, 7, 7, 7, 31, - 15, 4, 66, 9, 66, 72, 3, 98, 71, 0, 84, 66, 77, - 8, 2, 74, 15, 7, 4, 85, 8, 76, 75, 3, 90, 9, 19, - 12, 14, 17, 15, 8, 16, 15, 66, 3, 9, 2, 1, 72, - 65, 71, 69, 66, 69, 71, 69, 72, 79, 71, 70, 81, - 83, 81, 66, 64, 69, 70, 76, 79, 77, 77, 85, 92, - 88, 91, 107, 100, 110, 69, 70, 88, 68, 74, 77, - 81, 88, 92, 85, 88, 89, 80, 85, 91, 84, 86, 2, - 24, 18, 11, 7, 9, 3, 65, 0, 2, 8, 32, 21, 15, 8, - 19, 9, 9, 3, 16, 3, 42, 30, 23, 16, 23, 5, 64, - 66, 66, 70, 44, 21, 5, 2, 10, 64, 73, 70, 5, 39, - 26, 12, 6, 19, 5, 1, 64, 66, 62, 75, 68, 0, 64, - 67, 64, 6, 7, 3, 6, 10, 13, 72, 66, 79, 71, 22, - 74, 88, 70, 2, 67, 76, 79, 72, 78, 85, 91, 94, - 64, 1, 15, 65, 71, 1, 2, 4, 71, 67, 64, 64, 79, - 72, 78, 64, 9, 84, 67, 11, 71, 3, 67, 2, 19, 70, - 72, 3, 9, 80, 80, 104, 19, 23, 31, 10, 5, 11, 2, - 2, 4, 69, 66, 66, 81, 78, 78, 82, 80, 88, 111, - 83, 82, 80, 68, 74, 6, 15, 0, 12, 22, 64, 66, - 69, 70, 88, 81, 79, 97, 84, 92, 90, 105, 101, - 103, 104, 79, 77, 105, 73, 74, 84, 96, 89, 90, - 94, 89, 95, 96, 102, 105, 113, 112, 68, 77, 92, - 69, 9, 6, 15, 16, 19, 36, 23, 31, 32, 49, 39, - 35, 51, 48, 44, 11, 69, 85, 95, 109, 125, 126, - 126, 12, 45, 38, 37, 27, 36, 18, 13, 16, 6, 73, - 66, 10, 64, 24, 33, 64, 4, 14, 18, 5, 16, 31, 4, - 0, 27, 64, 85, 107, 123, 126, 126, 126, 126 }, - - { - - 30, - 5, 81, 30, 5, 81, 5, 16, 25, 12, 68, 89, 5, 12, - 52, 14, 36, 69, 17, 25, 64, 78, 0, 91, 107, 64, - 70, 126, 126, 125, 49, 8, 69, 17, 25, 64, 71, - 10, 17, 66, 2, 66, 69, 69, 84, 73, 92, 5, 68, - 69, 66, 78, 73, 88, 14, 2, 64, 67, 9, 3, 22, 0, - 0, 0, 2, 95, 97, 9, 72, 69, 18, 68, 88, 3, 34, - 23, 53, 50, 18, 19, 7, 24, 5, 2, 7, 74, 76, 78, - 76, 25, 1, 9, 71, 66, 70, 67, 69, 66, 74, 73, - 83, 18, 68, 4, 68, 80, 0, 72, 4, 5, 1, 3, 11, 7, - 71, 65, 3, 67, 2, 71, 2, 73, 0, 2, 68, 10, 3, - 67, 68, 8, 68, 77, 70, 82, 74, 6, 65, 7, 7, 7, - 32, 16, 4, 66, 9, 66, 73, 3, 99, 71, 0, 84, 67, - 78, 7, 2, 74, 16, 7, 4, 86, 7, 77, 75, 3, 90, 9, - 19, 12, 14, 17, 15, 8, 16, 15, 66, 3, 9, 2, 1, - 72, 65, 71, 70, 66, 69, 71, 70, 72, 79, 72, 70, - 82, 84, 81, 67, 66, 71, 72, 78, 81, 79, 79, 87, - 94, 90, 93, 110, 102, 111, 69, 71, 88, 69, 75, - 78, 82, 89, 94, 86, 89, 89, 80, 85, 91, 84, 86, - 2, 24, 18, 11, 7, 9, 3, 65, 1, 3, 8, 32, 21, 15, - 8, 19, 10, 10, 3, 18, 3, 42, 30, 23, 16, 23, 5, - 64, 66, 65, 70, 44, 20, 4, 2, 10, 64, 73, 70, 5, - 39, 25, 11, 5, 19, 5, 1, 64, 65, 62, 74, 67, 1, - 1, 66, 0, 7, 9, 4, 8, 12, 15, 71, 65, 78, 71, - 23, 73, 88, 70, 3, 67, 77, 79, 73, 79, 86, 92, - 95, 65, 0, 15, 66, 71, 1, 2, 4, 72, 68, 64, 65, - 80, 72, 78, 64, 9, 84, 68, 11, 72, 3, 68, 1, 19, - 71, 73, 2, 8, 81, 81, 106, 18, 23, 31, 9, 3, 9, - 0, 0, 2, 72, 69, 68, 84, 80, 80, 85, 84, 91, - 115, 85, 85, 82, 69, 75, 6, 16, 1, 13, 24, 65, - 68, 71, 71, 90, 83, 80, 99, 85, 94, 92, 107, - 103, 104, 105, 79, 77, 106, 75, 76, 86, 97, 91, - 92, 96, 90, 97, 98, 103, 106, 114, 112, 69, 77, - 93, 69, 10, 7, 15, 17, 20, 37, 24, 32, 33, 50, - 40, 36, 52, 49, 44, 9, 71, 88, 97, 112, 126, - 126, 126, 12, 46, 39, 38, 28, 37, 18, 14, 17, 7, - 72, 66, 11, 0, 25, 34, 64, 5, 14, 18, 5, 17, 32, - 4, 0, 25, 66, 88, 110, 126, 126, 126, 126, 126 }, - - { - - 28, - 4, 81, 28, 4, 81, 6, 17, 25, 12, 68, 90, 4, 11, - 52, 14, 38, 69, 18, 26, 64, 79, 0, 92, 109, 65, - 72, 126, 126, 126, 51, 9, 69, 18, 26, 64, 71, - 11, 17, 67, 2, 66, 68, 70, 84, 73, 93, 5, 68, - 69, 66, 79, 73, 88, 14, 2, 64, 67, 9, 3, 22, 0, - 0, 0, 3, 96, 97, 9, 73, 69, 18, 68, 88, 5, 35, - 25, 54, 51, 19, 20, 8, 25, 6, 3, 9, 74, 76, 78, - 75, 25, 1, 9, 70, 66, 69, 67, 68, 66, 75, 74, - 84, 18, 68, 4, 68, 80, 0, 72, 4, 4, 1, 3, 11, 6, - 71, 65, 3, 67, 1, 71, 1, 74, 0, 1, 70, 9, 2, 68, - 68, 8, 68, 78, 71, 82, 75, 5, 65, 7, 7, 7, 33, - 16, 4, 67, 9, 67, 74, 2, 100, 71, 0, 85, 67, 79, - 7, 1, 75, 16, 7, 4, 88, 7, 78, 75, 3, 91, 8, 18, - 12, 14, 17, 14, 7, 16, 14, 67, 2, 9, 2, 0, 73, - 66, 72, 70, 67, 70, 72, 71, 73, 79, 72, 70, 83, - 86, 81, 69, 68, 73, 74, 80, 84, 81, 81, 89, 96, - 92, 95, 112, 104, 112, 69, 71, 89, 70, 77, 80, - 84, 91, 95, 88, 91, 90, 81, 86, 91, 84, 85, 2, - 24, 18, 11, 7, 9, 3, 65, 1, 4, 9, 32, 21, 15, 8, - 19, 10, 10, 4, 19, 3, 42, 30, 23, 15, 23, 5, 64, - 66, 65, 70, 44, 20, 4, 2, 10, 64, 73, 69, 5, 38, - 24, 10, 4, 18, 5, 1, 64, 65, 62, 73, 66, 1, 2, - 65, 0, 8, 10, 5, 9, 13, 16, 71, 65, 78, 70, 24, - 73, 89, 70, 3, 67, 77, 80, 73, 80, 87, 94, 96, - 66, 0, 15, 66, 72, 0, 1, 3, 73, 69, 65, 65, 81, - 73, 79, 64, 9, 85, 69, 10, 73, 3, 69, 0, 19, 72, - 74, 2, 8, 82, 82, 108, 17, 22, 30, 7, 2, 8, 65, - 65, 64, 74, 72, 71, 87, 83, 81, 88, 87, 94, 119, - 88, 87, 84, 71, 77, 6, 16, 1, 14, 26, 67, 70, - 73, 73, 93, 85, 82, 101, 87, 96, 93, 109, 104, - 105, 106, 80, 78, 107, 76, 77, 88, 99, 93, 94, - 97, 92, 99, 99, 104, 108, 116, 113, 70, 78, 94, - 69, 10, 7, 16, 17, 20, 38, 24, 33, 34, 51, 41, - 37, 53, 50, 43, 7, 73, 90, 100, 115, 126, 126, - 126, 12, 46, 39, 38, 28, 37, 18, 14, 17, 7, 72, - 66, 11, 0, 26, 35, 64, 5, 15, 19, 5, 17, 32, 4, - 64, 24, 68, 90, 113, 126, 126, 126, 126, 126 }, - - { - - 27, - 4, 81, 27, 4, 81, 8, 18, 26, 12, 68, 91, 3, 10, - 52, 14, 40, 69, 19, 27, 64, 79, 1, 93, 110, 66, - 74, 126, 126, 126, 54, 11, 69, 19, 27, 64, 70, - 12, 18, 68, 2, 65, 67, 70, 84, 73, 93, 5, 68, - 68, 66, 79, 73, 88, 14, 2, 0, 67, 9, 3, 22, 0, - 0, 0, 4, 96, 97, 9, 74, 69, 18, 67, 88, 7, 37, - 27, 55, 53, 21, 21, 10, 26, 8, 4, 11, 74, 76, - 78, 74, 25, 1, 9, 69, 66, 68, 66, 67, 66, 75, - 74, 84, 18, 68, 5, 67, 79, 1, 72, 4, 4, 1, 3, - 11, 6, 70, 65, 4, 67, 1, 70, 0, 74, 0, 0, 71, 9, - 1, 69, 67, 8, 67, 79, 72, 82, 76, 5, 65, 8, 7, - 7, 34, 16, 4, 67, 10, 67, 74, 2, 101, 71, 0, 86, - 67, 80, 7, 1, 76, 16, 7, 4, 89, 7, 78, 75, 3, - 92, 7, 18, 12, 14, 17, 14, 7, 16, 14, 67, 2, 9, - 2, 0, 73, 66, 72, 70, 67, 70, 73, 71, 73, 79, - 72, 70, 84, 87, 81, 71, 69, 74, 75, 82, 86, 82, - 82, 91, 98, 93, 96, 114, 105, 113, 69, 71, 90, - 71, 78, 81, 85, 92, 96, 89, 92, 91, 82, 87, 91, - 83, 84, 3, 25, 18, 11, 7, 10, 4, 64, 2, 5, 10, - 32, 21, 15, 8, 20, 10, 11, 5, 21, 3, 42, 30, 23, - 15, 24, 5, 64, 66, 64, 70, 45, 20, 4, 2, 11, 64, - 73, 68, 5, 38, 24, 10, 3, 18, 5, 1, 0, 64, 62, - 72, 65, 2, 3, 0, 1, 10, 11, 7, 10, 14, 18, 70, - 64, 78, 69, 26, 73, 90, 69, 4, 67, 77, 81, 73, - 80, 88, 95, 97, 66, 0, 15, 66, 72, 64, 1, 3, 74, - 69, 65, 65, 82, 73, 79, 0, 10, 85, 69, 9, 73, 3, - 69, 0, 19, 73, 75, 2, 8, 83, 82, 109, 17, 21, - 29, 6, 1, 7, 67, 67, 66, 76, 74, 74, 89, 85, 82, - 91, 90, 97, 123, 91, 89, 85, 72, 78, 6, 17, 1, - 15, 28, 69, 71, 75, 75, 95, 86, 83, 103, 88, 97, - 94, 110, 105, 106, 106, 80, 78, 108, 77, 78, 89, - 101, 94, 95, 98, 93, 100, 100, 105, 109, 117, - 114, 70, 79, 94, 68, 10, 7, 17, 18, 21, 39, 25, - 34, 35, 53, 42, 38, 55, 52, 42, 6, 75, 92, 103, - 118, 126, 126, 126, 13, 46, 39, 39, 28, 38, 19, - 14, 18, 8, 72, 65, 12, 0, 27, 37, 0, 6, 16, 20, - 5, 18, 33, 4, 64, 23, 70, 92, 115, 126, 126, - 126, 126, 126 }, - - { - - 26, - 4, 81, 26, 4, 81, 10, 20, 26, 12, 69, 93, 1, 8, - 52, 14, 43, 70, 20, 27, 64, 80, 1, 94, 111, 66, - 76, 126, 126, 126, 57, 12, 69, 20, 27, 64, 70, - 13, 18, 68, 2, 65, 67, 70, 85, 72, 93, 5, 68, - 67, 67, 79, 73, 88, 15, 3, 0, 66, 10, 3, 22, 0, - 0, 0, 4, 96, 97, 10, 75, 69, 18, 67, 88, 8, 39, - 28, 57, 55, 22, 22, 11, 28, 9, 5, 13, 73, 75, - 77, 73, 25, 1, 9, 69, 66, 68, 66, 65, 67, 75, - 74, 84, 18, 68, 5, 67, 79, 1, 72, 5, 4, 0, 3, - 11, 6, 70, 65, 4, 67, 1, 70, 0, 74, 0, 0, 72, 8, - 0, 70, 66, 9, 67, 80, 72, 81, 76, 5, 66, 8, 7, - 7, 35, 17, 4, 67, 10, 67, 75, 2, 102, 71, 0, 86, - 68, 81, 6, 1, 76, 17, 7, 4, 90, 6, 79, 75, 3, - 92, 7, 18, 12, 14, 17, 14, 7, 16, 14, 67, 2, 9, - 2, 0, 73, 66, 72, 71, 67, 70, 73, 72, 74, 79, - 73, 70, 85, 88, 81, 72, 71, 76, 77, 84, 88, 84, - 84, 93, 100, 95, 98, 117, 107, 114, 69, 72, 90, - 72, 79, 82, 86, 94, 98, 90, 93, 91, 82, 87, 91, - 83, 84, 3, 25, 18, 11, 7, 10, 4, 64, 2, 6, 10, - 32, 21, 15, 8, 20, 11, 12, 5, 23, 3, 42, 30, 23, - 15, 24, 5, 64, 66, 0, 70, 45, 19, 3, 2, 11, 64, - 73, 68, 5, 37, 23, 9, 2, 18, 5, 1, 0, 64, 62, - 71, 64, 3, 5, 1, 2, 11, 13, 8, 12, 16, 20, 69, - 0, 77, 69, 27, 72, 90, 69, 5, 67, 78, 81, 74, - 81, 89, 96, 98, 67, 64, 15, 67, 73, 64, 1, 3, - 75, 70, 65, 66, 83, 73, 79, 0, 10, 85, 70, 9, - 74, 3, 70, 64, 19, 74, 76, 1, 7, 84, 83, 111, - 16, 21, 29, 5, 64, 5, 69, 69, 68, 79, 77, 76, - 92, 87, 84, 94, 94, 100, 126, 93, 92, 87, 73, - 79, 6, 18, 2, 16, 30, 70, 73, 77, 76, 97, 88, - 85, 105, 89, 99, 96, 112, 107, 107, 107, 81, 78, - 109, 79, 80, 91, 102, 96, 97, 100, 95, 102, 102, - 106, 110, 118, 114, 71, 79, 95, 68, 11, 8, 17, - 18, 22, 40, 26, 35, 36, 54, 43, 39, 56, 53, 42, - 4, 77, 95, 105, 121, 126, 126, 126, 13, 47, 40, - 39, 29, 39, 19, 15, 18, 8, 71, 65, 13, 1, 28, - 38, 0, 7, 16, 20, 5, 18, 34, 4, 64, 21, 72, 95, - 118, 126, 126, 126, 126, 126 }, - - { - - 25, - 4, 82, 25, 4, 82, 12, 21, 27, 12, 69, 94, 0, 7, - 52, 14, 45, 70, 20, 28, 64, 81, 1, 95, 112, 67, - 77, 126, 126, 126, 60, 13, 69, 20, 28, 64, 69, - 14, 19, 69, 3, 64, 66, 71, 85, 72, 93, 5, 67, - 67, 67, 79, 72, 88, 15, 3, 0, 66, 10, 3, 22, 0, - 0, 0, 5, 96, 97, 10, 75, 70, 18, 67, 87, 10, 41, - 30, 58, 57, 23, 23, 13, 29, 10, 5, 14, 73, 75, - 77, 73, 26, 1, 9, 68, 65, 67, 65, 64, 67, 76, - 75, 85, 18, 68, 5, 66, 79, 2, 72, 5, 4, 0, 4, - 11, 5, 70, 65, 4, 67, 1, 70, 64, 74, 0, 64, 73, - 7, 0, 70, 66, 9, 67, 80, 73, 81, 77, 5, 66, 8, - 7, 7, 35, 17, 4, 67, 11, 67, 76, 2, 102, 72, 0, - 87, 68, 82, 6, 1, 77, 17, 7, 4, 92, 6, 80, 75, - 3, 93, 6, 18, 11, 14, 17, 14, 7, 16, 14, 67, 1, - 9, 1, 0, 73, 67, 73, 71, 68, 71, 74, 73, 74, 79, - 73, 69, 86, 90, 81, 74, 73, 78, 79, 86, 90, 86, - 86, 95, 102, 96, 99, 119, 109, 115, 69, 72, 91, - 73, 80, 83, 88, 95, 99, 91, 94, 92, 83, 88, 91, - 83, 83, 4, 25, 18, 11, 8, 10, 4, 64, 3, 7, 11, - 31, 21, 15, 8, 21, 11, 13, 6, 25, 3, 43, 30, 23, - 15, 25, 5, 64, 65, 0, 70, 45, 19, 3, 2, 11, 0, - 72, 67, 5, 37, 23, 8, 2, 18, 5, 2, 1, 0, 62, 71, - 0, 3, 6, 2, 3, 13, 14, 9, 13, 17, 21, 69, 1, 77, - 68, 29, 72, 91, 69, 5, 67, 78, 82, 74, 82, 90, - 97, 99, 67, 64, 15, 67, 73, 65, 0, 3, 75, 70, - 66, 66, 83, 73, 80, 0, 10, 86, 70, 8, 75, 2, 71, - 64, 20, 74, 77, 1, 7, 84, 83, 112, 15, 20, 28, - 4, 65, 4, 71, 71, 70, 81, 79, 79, 95, 90, 85, - 96, 97, 103, 126, 96, 94, 89, 74, 80, 6, 19, 2, - 18, 33, 72, 75, 79, 78, 99, 90, 86, 107, 91, - 100, 97, 113, 108, 108, 108, 81, 79, 110, 80, - 81, 92, 104, 98, 99, 101, 96, 104, 103, 108, - 112, 120, 115, 72, 80, 96, 68, 11, 8, 18, 19, - 22, 42, 27, 36, 37, 55, 45, 40, 58, 54, 41, 3, - 79, 97, 108, 123, 126, 126, 126, 14, 47, 40, 40, - 29, 40, 20, 15, 19, 9, 71, 64, 13, 1, 29, 39, 0, - 7, 17, 21, 5, 19, 35, 4, 64, 20, 74, 97, 121, - 126, 126, 126, 126, 126 }, - - { - - 23, - 4, 82, 23, 4, 82, 13, 23, 27, 12, 70, 96, 65, 6, - 52, 14, 47, 70, 21, 29, 64, 82, 1, 96, 113, 67, - 79, 126, 126, 126, 62, 14, 69, 21, 29, 64, 69, - 15, 19, 69, 3, 64, 65, 71, 86, 72, 93, 5, 67, - 66, 67, 80, 72, 88, 16, 3, 0, 66, 11, 3, 22, 0, - 0, 0, 5, 97, 97, 11, 76, 70, 18, 67, 87, 12, 42, - 31, 60, 58, 24, 24, 14, 30, 11, 6, 16, 72, 75, - 76, 72, 26, 1, 9, 68, 65, 67, 65, 1, 67, 76, 75, - 85, 18, 68, 5, 66, 79, 2, 72, 6, 4, 0, 4, 11, 5, - 70, 65, 4, 67, 1, 70, 65, 75, 0, 65, 74, 6, 64, - 71, 65, 10, 67, 81, 73, 80, 77, 5, 66, 8, 7, 7, - 36, 17, 4, 68, 11, 68, 77, 1, 103, 72, 0, 87, - 69, 83, 6, 0, 78, 17, 7, 4, 93, 6, 81, 75, 3, - 93, 5, 18, 11, 14, 17, 14, 7, 16, 13, 67, 1, 9, - 1, 0, 74, 67, 73, 72, 68, 71, 75, 74, 75, 79, - 74, 69, 87, 91, 81, 75, 75, 80, 81, 88, 92, 88, - 88, 97, 104, 98, 101, 121, 111, 116, 69, 72, 91, - 74, 81, 84, 89, 97, 101, 92, 96, 93, 83, 88, 91, - 83, 83, 4, 25, 18, 11, 8, 10, 4, 64, 3, 8, 11, - 31, 21, 15, 8, 21, 12, 13, 7, 27, 3, 43, 30, 23, - 15, 25, 5, 64, 65, 1, 70, 45, 19, 2, 2, 11, 0, - 72, 66, 5, 36, 22, 7, 1, 18, 5, 2, 1, 0, 62, 70, - 1, 4, 7, 3, 4, 14, 15, 10, 14, 19, 23, 68, 1, - 77, 68, 30, 72, 91, 69, 6, 67, 79, 82, 74, 83, - 91, 98, 100, 68, 65, 15, 68, 74, 65, 0, 3, 76, - 71, 66, 66, 84, 74, 80, 0, 10, 86, 71, 8, 76, 2, - 72, 65, 20, 75, 78, 0, 6, 85, 84, 114, 14, 19, - 28, 3, 66, 2, 73, 73, 72, 84, 82, 81, 98, 92, - 86, 99, 100, 106, 126, 99, 97, 91, 75, 82, 6, - 20, 2, 19, 35, 74, 77, 81, 80, 101, 92, 88, 109, - 92, 102, 98, 115, 110, 109, 109, 82, 79, 111, - 81, 83, 94, 106, 100, 101, 103, 98, 106, 105, - 109, 113, 121, 116, 73, 81, 97, 68, 12, 8, 18, - 19, 23, 43, 27, 37, 38, 56, 46, 41, 59, 55, 41, - 1, 81, 100, 110, 126, 126, 126, 126, 14, 48, 41, - 40, 29, 40, 20, 15, 19, 9, 71, 64, 14, 2, 30, - 40, 0, 8, 17, 21, 5, 19, 36, 4, 64, 19, 76, 100, - 124, 126, 126, 126, 126, 126 }, - - { - - 22, - 4, 82, 22, 4, 82, 15, 24, 27, 12, 70, 97, 66, 4, - 52, 14, 50, 71, 22, 29, 64, 82, 2, 97, 114, 68, - 81, 126, 126, 126, 62, 16, 69, 22, 29, 64, 69, - 16, 19, 70, 3, 64, 65, 71, 86, 71, 93, 5, 67, - 65, 68, 80, 72, 88, 16, 4, 1, 65, 11, 3, 22, 0, - 0, 0, 6, 97, 97, 11, 77, 70, 18, 66, 87, 13, 44, - 33, 61, 60, 26, 25, 15, 32, 12, 7, 18, 72, 74, - 76, 71, 26, 1, 9, 67, 65, 66, 64, 2, 68, 76, 75, - 85, 18, 68, 6, 65, 79, 2, 72, 6, 4, 64, 4, 11, - 5, 69, 65, 5, 67, 1, 70, 65, 75, 0, 65, 75, 6, - 65, 72, 64, 10, 67, 82, 74, 80, 78, 5, 67, 8, 7, - 7, 37, 18, 4, 68, 11, 68, 78, 1, 104, 72, 0, 88, - 69, 84, 5, 0, 78, 18, 7, 4, 94, 5, 82, 75, 3, - 94, 5, 18, 11, 14, 17, 14, 7, 16, 13, 67, 1, 9, - 1, 0, 74, 67, 73, 72, 68, 71, 75, 75, 75, 79, - 74, 69, 88, 92, 81, 77, 77, 81, 82, 90, 94, 90, - 90, 99, 106, 100, 103, 124, 112, 117, 69, 73, - 92, 75, 82, 85, 90, 98, 102, 93, 97, 93, 84, 89, - 91, 83, 82, 4, 25, 18, 11, 8, 10, 5, 0, 4, 9, - 12, 31, 21, 15, 8, 21, 12, 14, 7, 29, 3, 43, 30, - 23, 15, 25, 5, 64, 65, 2, 70, 46, 18, 2, 2, 11, - 0, 72, 66, 5, 36, 21, 6, 0, 18, 5, 2, 1, 1, 62, - 69, 2, 5, 9, 4, 5, 15, 17, 11, 16, 20, 25, 67, - 2, 76, 67, 31, 71, 92, 68, 7, 67, 79, 83, 75, - 83, 92, 99, 101, 69, 65, 15, 68, 74, 66, 0, 3, - 77, 72, 66, 67, 85, 74, 80, 0, 10, 86, 72, 7, - 76, 2, 73, 66, 20, 76, 79, 0, 6, 86, 85, 116, - 13, 19, 27, 2, 68, 1, 75, 75, 74, 86, 85, 84, - 101, 94, 88, 102, 104, 109, 126, 101, 99, 93, - 76, 83, 6, 21, 3, 20, 37, 75, 78, 83, 81, 103, - 94, 89, 111, 93, 104, 100, 117, 111, 110, 110, - 82, 79, 112, 83, 84, 96, 107, 101, 102, 104, 99, - 107, 106, 110, 114, 122, 116, 73, 81, 98, 67, - 12, 9, 19, 20, 24, 44, 28, 38, 39, 58, 47, 42, - 60, 57, 40, 64, 83, 102, 113, 126, 126, 126, - 126, 14, 48, 41, 41, 30, 41, 20, 16, 20, 10, 70, - 64, 15, 2, 31, 41, 1, 9, 18, 22, 5, 20, 37, 4, - 64, 17, 78, 102, 126, 126, 126, 126, 126, 126 }, - - { - - 21, - 4, 82, 21, 4, 82, 17, 26, 28, 12, 71, 99, 68, 3, - 52, 14, 52, 71, 23, 30, 64, 83, 2, 98, 115, 68, - 83, 126, 126, 126, 62, 17, 69, 23, 30, 64, 68, - 17, 20, 70, 3, 0, 64, 72, 87, 71, 93, 5, 67, 65, - 68, 80, 72, 88, 17, 4, 1, 65, 12, 3, 22, 0, 0, - 0, 6, 97, 97, 12, 78, 70, 18, 66, 87, 15, 46, - 34, 62, 62, 27, 26, 17, 33, 13, 8, 20, 71, 74, - 75, 70, 26, 1, 9, 67, 65, 66, 64, 4, 68, 77, 76, - 86, 18, 68, 6, 65, 79, 3, 72, 7, 4, 64, 4, 11, - 4, 69, 65, 5, 67, 1, 70, 66, 75, 0, 66, 76, 5, - 66, 73, 64, 11, 67, 83, 74, 79, 78, 5, 67, 8, 7, - 7, 38, 18, 4, 68, 12, 68, 79, 1, 105, 72, 0, 88, - 70, 85, 5, 0, 79, 18, 7, 4, 96, 5, 83, 75, 3, - 94, 4, 18, 11, 14, 17, 14, 7, 16, 13, 67, 0, 9, - 1, 0, 74, 68, 74, 73, 69, 72, 76, 76, 76, 79, - 75, 69, 89, 94, 81, 78, 79, 83, 84, 92, 96, 92, - 92, 101, 108, 101, 104, 126, 114, 118, 69, 73, - 92, 76, 83, 86, 92, 100, 104, 94, 98, 94, 84, - 89, 91, 83, 82, 5, 25, 18, 11, 8, 10, 5, 0, 4, - 10, 12, 31, 21, 15, 8, 22, 13, 15, 8, 31, 3, 43, - 30, 23, 15, 26, 5, 64, 65, 2, 70, 46, 18, 1, 2, - 11, 0, 72, 65, 5, 35, 21, 5, 64, 18, 5, 2, 2, 1, - 62, 68, 3, 5, 10, 5, 6, 17, 18, 12, 17, 22, 26, - 67, 3, 76, 67, 33, 71, 92, 68, 7, 67, 80, 83, - 75, 84, 93, 100, 102, 69, 66, 15, 69, 75, 66, - 64, 3, 78, 72, 67, 67, 86, 74, 81, 0, 10, 87, - 72, 7, 77, 2, 74, 66, 20, 77, 80, 64, 5, 87, 85, - 117, 12, 18, 27, 1, 69, 64, 77, 77, 76, 89, 87, - 86, 104, 97, 89, 105, 107, 112, 126, 104, 102, - 95, 77, 84, 6, 22, 3, 21, 39, 77, 80, 85, 83, - 105, 96, 91, 113, 95, 105, 101, 118, 113, 111, - 111, 83, 80, 113, 84, 86, 97, 109, 103, 104, - 106, 101, 109, 108, 111, 116, 124, 117, 74, 82, - 99, 67, 13, 9, 19, 20, 24, 45, 29, 39, 40, 59, - 48, 43, 62, 58, 40, 65, 85, 105, 115, 126, 126, - 126, 126, 15, 49, 42, 41, 30, 42, 21, 16, 20, - 10, 70, 0, 15, 3, 32, 42, 1, 9, 18, 22, 5, 20, - 38, 4, 64, 16, 80, 105, 126, 126, 126, 126, 126, - 126 }, - - { - - 20, - 4, 82, 20, 4, 82, 19, 27, 28, 12, 71, 100, 69, - 2, 52, 14, 54, 71, 24, 31, 64, 84, 2, 99, 116, - 69, 85, 126, 126, 126, 62, 18, 69, 24, 31, 64, - 68, 18, 20, 71, 3, 0, 0, 72, 87, 71, 93, 5, 67, - 64, 68, 80, 72, 88, 17, 4, 1, 65, 12, 3, 22, 0, - 0, 0, 7, 97, 97, 12, 79, 70, 18, 66, 87, 17, 48, - 36, 62, 62, 28, 27, 18, 34, 14, 9, 22, 71, 74, - 75, 69, 26, 1, 9, 66, 65, 65, 0, 5, 68, 77, 76, - 86, 18, 68, 6, 64, 79, 3, 72, 7, 4, 64, 4, 11, - 4, 69, 65, 5, 67, 1, 70, 67, 75, 0, 67, 77, 4, - 67, 74, 0, 11, 67, 84, 75, 79, 79, 5, 67, 8, 7, - 7, 39, 18, 4, 68, 12, 68, 80, 1, 106, 72, 0, 89, - 70, 86, 5, 0, 80, 18, 7, 4, 97, 5, 84, 75, 3, - 95, 3, 18, 11, 14, 17, 14, 7, 16, 13, 67, 0, 9, - 1, 0, 74, 68, 74, 73, 69, 72, 77, 77, 76, 79, - 75, 69, 90, 95, 81, 80, 81, 85, 86, 94, 98, 94, - 94, 103, 110, 103, 106, 126, 116, 119, 69, 73, - 93, 77, 84, 87, 93, 101, 105, 95, 99, 95, 85, - 90, 91, 83, 81, 5, 25, 18, 11, 8, 10, 5, 0, 5, - 11, 13, 31, 21, 15, 8, 22, 13, 16, 9, 33, 3, 43, - 30, 23, 15, 26, 5, 64, 65, 3, 70, 46, 18, 1, 2, - 11, 0, 72, 64, 5, 35, 20, 4, 65, 18, 5, 2, 2, 2, - 62, 67, 4, 6, 11, 6, 7, 18, 19, 13, 18, 23, 28, - 66, 4, 76, 66, 34, 71, 93, 68, 8, 67, 80, 84, - 75, 85, 94, 101, 103, 70, 66, 15, 69, 75, 67, - 64, 3, 79, 73, 67, 67, 87, 74, 81, 0, 10, 87, - 73, 6, 78, 2, 75, 67, 20, 78, 81, 64, 5, 88, 86, - 119, 11, 17, 26, 0, 70, 65, 79, 79, 78, 91, 90, - 89, 107, 99, 90, 108, 110, 115, 126, 107, 104, - 97, 78, 85, 6, 23, 3, 22, 41, 79, 82, 87, 85, - 107, 98, 92, 115, 96, 107, 102, 120, 114, 112, - 112, 83, 80, 114, 85, 87, 99, 111, 105, 106, - 107, 102, 111, 109, 112, 117, 125, 118, 75, 83, - 100, 67, 13, 9, 20, 21, 25, 46, 30, 40, 41, 60, - 49, 44, 62, 59, 39, 67, 87, 107, 118, 126, 126, - 126, 126, 15, 49, 42, 42, 30, 43, 21, 16, 21, - 11, 70, 0, 16, 3, 33, 43, 1, 10, 19, 23, 5, 21, - 39, 4, 64, 15, 82, 107, 126, 126, 126, 126, 126, - 126 }, - - { - - 18, - 3, 83, 18, 3, 83, 20, 28, 28, 12, 72, 102, 71, - 0, 51, 14, 56, 72, 24, 31, 65, 85, 2, 101, 118, - 70, 87, 126, 126, 126, 62, 19, 70, 24, 31, 65, - 68, 19, 20, 72, 3, 0, 0, 73, 88, 71, 94, 5, 67, - 64, 69, 81, 72, 88, 17, 4, 1, 65, 12, 2, 22, 0, - 0, 0, 7, 98, 97, 12, 80, 71, 18, 66, 87, 18, 49, - 37, 62, 62, 29, 28, 19, 35, 15, 9, 23, 71, 74, - 75, 69, 26, 1, 9, 66, 65, 65, 0, 6, 69, 78, 77, - 87, 18, 68, 6, 64, 79, 3, 72, 7, 3, 65, 4, 10, - 3, 69, 66, 5, 67, 0, 70, 68, 76, 64, 68, 79, 3, - 68, 75, 0, 11, 67, 85, 76, 79, 80, 4, 68, 8, 7, - 7, 39, 18, 4, 69, 12, 69, 81, 0, 107, 73, 64, - 90, 71, 87, 4, 64, 81, 18, 7, 4, 99, 4, 85, 75, - 3, 96, 2, 17, 10, 14, 17, 13, 6, 16, 12, 68, 64, - 9, 0, 64, 75, 69, 75, 74, 70, 73, 78, 78, 77, - 79, 76, 69, 91, 97, 81, 82, 83, 87, 88, 96, 101, - 96, 96, 105, 112, 105, 108, 126, 118, 121, 70, - 74, 94, 78, 86, 89, 95, 103, 107, 97, 101, 96, - 86, 91, 91, 83, 81, 5, 25, 18, 11, 8, 10, 5, 0, - 5, 12, 13, 30, 21, 15, 8, 22, 13, 16, 9, 34, 2, - 43, 30, 22, 14, 26, 5, 64, 65, 3, 70, 46, 17, 0, - 1, 11, 0, 72, 64, 5, 34, 19, 3, 66, 17, 5, 2, 2, - 2, 62, 67, 5, 6, 12, 7, 7, 19, 20, 14, 19, 24, - 29, 66, 4, 76, 66, 35, 71, 94, 68, 8, 67, 81, - 85, 76, 86, 95, 103, 105, 71, 67, 15, 70, 76, - 68, 65, 2, 80, 74, 68, 68, 88, 75, 82, 0, 10, - 88, 74, 5, 79, 1, 76, 68, 20, 79, 83, 65, 4, 89, - 87, 121, 10, 16, 25, 65, 72, 67, 81, 81, 81, 94, - 93, 92, 110, 102, 92, 111, 114, 118, 126, 110, - 107, 99, 80, 87, 6, 23, 3, 23, 43, 81, 84, 89, - 87, 110, 100, 94, 118, 98, 109, 104, 122, 116, - 113, 113, 84, 81, 116, 87, 89, 101, 113, 107, - 108, 109, 104, 113, 111, 114, 119, 126, 119, 76, - 84, 101, 67, 13, 9, 20, 21, 25, 47, 30, 41, 41, - 61, 50, 45, 62, 60, 38, 69, 90, 110, 121, 126, - 126, 126, 126, 15, 49, 42, 42, 30, 43, 21, 16, - 21, 11, 70, 0, 16, 3, 34, 44, 1, 10, 19, 23, 5, - 21, 39, 4, 65, 13, 85, 110, 126, 126, 126, 126, - 126, 126 }, - - { - - 17, - 3, 83, 17, 3, 83, 22, 30, 29, 13, 72, 103, 72, - 64, 51, 14, 59, 72, 25, 32, 65, 85, 3, 102, 119, - 70, 88, 126, 126, 126, 62, 21, 70, 25, 32, 65, - 67, 21, 21, 72, 4, 1, 1, 73, 88, 70, 94, 5, 66, - 0, 69, 81, 71, 88, 18, 5, 2, 64, 13, 2, 22, 0, - 0, 0, 8, 98, 97, 13, 80, 71, 18, 65, 86, 20, 51, - 39, 62, 62, 31, 29, 21, 37, 17, 10, 25, 70, 73, - 74, 68, 27, 2, 10, 65, 64, 64, 1, 8, 69, 78, 77, - 87, 19, 68, 7, 0, 78, 4, 71, 8, 3, 65, 5, 10, 3, - 68, 66, 6, 67, 0, 69, 68, 76, 64, 68, 80, 3, 68, - 75, 1, 12, 66, 85, 76, 78, 80, 4, 68, 9, 7, 7, - 40, 19, 5, 69, 13, 69, 81, 0, 107, 73, 64, 90, - 71, 88, 4, 64, 81, 19, 8, 4, 100, 4, 85, 74, 3, - 96, 2, 17, 10, 14, 17, 13, 6, 16, 12, 68, 64, 9, - 0, 64, 75, 69, 75, 74, 70, 73, 78, 78, 77, 78, - 76, 68, 91, 98, 80, 83, 84, 88, 89, 98, 103, 97, - 97, 107, 113, 106, 109, 126, 119, 122, 70, 74, - 94, 79, 87, 90, 96, 104, 108, 98, 102, 96, 86, - 91, 90, 82, 80, 6, 26, 18, 11, 9, 11, 6, 1, 6, - 14, 14, 30, 21, 15, 8, 23, 14, 17, 10, 36, 2, - 44, 31, 22, 14, 27, 5, 64, 64, 4, 70, 47, 17, 0, - 1, 12, 1, 71, 0, 5, 34, 19, 3, 66, 17, 5, 3, 3, - 3, 62, 66, 6, 7, 14, 9, 8, 21, 22, 16, 21, 26, - 31, 65, 5, 75, 65, 37, 70, 94, 67, 9, 66, 81, - 85, 76, 86, 95, 104, 106, 71, 67, 16, 70, 76, - 68, 65, 2, 80, 74, 68, 68, 88, 75, 82, 1, 11, - 88, 74, 5, 79, 1, 76, 68, 21, 79, 84, 65, 4, 89, - 87, 122, 10, 16, 25, 66, 73, 68, 83, 83, 83, 96, - 95, 94, 112, 104, 93, 113, 117, 121, 126, 112, - 109, 100, 81, 88, 6, 24, 4, 25, 46, 82, 85, 90, - 88, 112, 101, 95, 120, 99, 110, 105, 123, 117, - 114, 113, 84, 81, 117, 88, 90, 102, 114, 108, - 109, 110, 105, 114, 112, 115, 120, 126, 119, 76, - 84, 101, 66, 14, 10, 21, 22, 26, 49, 31, 42, 42, - 62, 52, 46, 62, 62, 38, 70, 92, 112, 123, 126, - 126, 126, 126, 16, 50, 43, 43, 31, 44, 22, 17, - 22, 12, 69, 1, 17, 4, 36, 46, 2, 11, 20, 24, 6, - 22, 40, 4, 65, 12, 87, 112, 126, 126, 126, 126, - 126, 126 }, - - { - - 16, - 3, 83, 16, 3, 83, 24, 31, 29, 13, 72, 104, 73, - 65, 51, 14, 61, 72, 26, 33, 65, 86, 3, 103, 120, - 71, 90, 126, 126, 126, 62, 22, 70, 26, 33, 65, - 67, 22, 21, 73, 4, 1, 2, 73, 88, 70, 94, 5, 66, - 1, 69, 81, 71, 88, 18, 5, 2, 64, 13, 2, 22, 0, - 0, 0, 9, 98, 97, 13, 81, 71, 18, 65, 86, 22, 53, - 41, 62, 62, 32, 30, 22, 38, 18, 11, 27, 70, 73, - 74, 67, 27, 2, 10, 64, 64, 0, 1, 9, 69, 78, 77, - 87, 19, 68, 7, 0, 78, 4, 71, 8, 3, 65, 5, 10, 3, - 68, 66, 6, 67, 0, 69, 69, 76, 64, 69, 81, 2, 69, - 76, 2, 12, 66, 86, 77, 78, 81, 4, 68, 9, 7, 7, - 41, 19, 5, 69, 13, 69, 82, 0, 108, 73, 64, 91, - 71, 89, 4, 64, 82, 19, 8, 4, 101, 4, 86, 74, 3, - 97, 1, 17, 10, 14, 17, 13, 6, 16, 12, 68, 64, 9, - 0, 64, 75, 69, 75, 74, 70, 73, 79, 79, 78, 78, - 76, 68, 92, 99, 80, 85, 86, 90, 91, 100, 105, - 99, 99, 109, 115, 108, 111, 126, 121, 123, 70, - 74, 95, 80, 88, 91, 97, 106, 109, 99, 103, 97, - 87, 92, 90, 82, 79, 6, 26, 18, 11, 9, 11, 6, 1, - 6, 15, 15, 30, 21, 15, 8, 23, 14, 18, 11, 38, 2, - 44, 31, 22, 14, 27, 5, 64, 64, 5, 70, 47, 17, 0, - 1, 12, 1, 71, 1, 5, 33, 18, 2, 67, 17, 5, 3, 3, - 3, 62, 65, 7, 8, 15, 10, 9, 22, 23, 17, 22, 27, - 33, 64, 6, 75, 64, 38, 70, 95, 67, 10, 66, 81, - 86, 76, 87, 96, 105, 107, 72, 67, 16, 70, 77, - 69, 65, 2, 81, 75, 68, 68, 89, 75, 82, 1, 11, - 88, 75, 4, 80, 1, 77, 69, 21, 80, 85, 65, 4, 90, - 88, 124, 9, 15, 24, 67, 74, 69, 85, 85, 85, 98, - 98, 97, 115, 106, 94, 116, 120, 124, 126, 115, - 111, 102, 82, 89, 6, 25, 4, 26, 48, 84, 87, 92, - 90, 114, 103, 97, 122, 100, 112, 106, 125, 118, - 115, 114, 85, 81, 118, 89, 91, 104, 116, 110, - 111, 111, 107, 116, 113, 116, 121, 126, 120, 77, - 85, 102, 66, 14, 10, 22, 22, 27, 50, 32, 43, 43, - 62, 53, 47, 62, 62, 37, 72, 94, 114, 126, 126, - 126, 126, 126, 16, 50, 43, 43, 31, 45, 22, 17, - 22, 12, 69, 1, 18, 4, 37, 47, 2, 12, 21, 25, 6, - 22, 41, 4, 65, 11, 89, 114, 126, 126, 126, 126, - 126, 126 }, - - { - - 15, - 3, 83, 15, 3, 83, 26, 33, 30, 13, 73, 106, 75, - 66, 51, 14, 62, 72, 27, 34, 65, 87, 3, 104, 121, - 71, 92, 126, 126, 126, 62, 23, 70, 27, 34, 65, - 66, 23, 22, 73, 4, 2, 3, 74, 89, 70, 94, 5, 66, - 1, 69, 81, 71, 88, 19, 5, 2, 64, 14, 2, 22, 0, - 0, 0, 9, 98, 97, 14, 82, 71, 18, 65, 86, 24, 55, - 42, 62, 62, 33, 31, 24, 39, 19, 12, 29, 69, 73, - 73, 66, 27, 2, 10, 64, 64, 0, 2, 11, 69, 79, 78, - 88, 19, 68, 7, 1, 78, 5, 71, 9, 3, 65, 5, 10, 2, - 68, 66, 6, 67, 0, 69, 70, 76, 64, 70, 82, 1, 70, - 77, 2, 13, 66, 87, 77, 77, 81, 4, 68, 9, 7, 7, - 42, 19, 5, 69, 14, 69, 83, 0, 109, 73, 64, 91, - 72, 90, 4, 64, 83, 19, 8, 4, 103, 4, 87, 74, 3, - 97, 0, 17, 10, 14, 17, 13, 6, 16, 12, 68, 65, 9, - 0, 64, 75, 70, 76, 75, 71, 74, 80, 80, 78, 78, - 77, 68, 93, 101, 80, 86, 88, 92, 93, 102, 107, - 101, 101, 111, 117, 109, 112, 126, 123, 124, 70, - 74, 95, 81, 89, 92, 99, 107, 111, 100, 104, 98, - 87, 92, 90, 82, 79, 7, 26, 18, 11, 9, 11, 6, 1, - 7, 16, 15, 30, 21, 15, 8, 24, 15, 19, 12, 40, 2, - 44, 31, 22, 14, 28, 5, 64, 64, 5, 70, 47, 17, - 64, 1, 12, 1, 71, 2, 5, 33, 18, 1, 68, 17, 5, 3, - 4, 4, 62, 64, 8, 8, 16, 11, 10, 24, 24, 18, 23, - 29, 34, 64, 7, 75, 64, 40, 70, 95, 67, 10, 66, - 82, 86, 76, 88, 97, 106, 108, 72, 68, 16, 71, - 77, 69, 66, 2, 82, 75, 69, 68, 90, 75, 83, 1, - 11, 89, 75, 4, 81, 1, 78, 69, 21, 81, 86, 66, 3, - 91, 88, 125, 8, 14, 24, 68, 75, 71, 87, 87, 87, - 101, 100, 99, 118, 109, 95, 119, 123, 126, 126, - 118, 114, 104, 83, 90, 6, 26, 4, 27, 50, 86, 89, - 94, 92, 116, 105, 98, 124, 102, 113, 107, 126, - 120, 116, 115, 85, 82, 119, 90, 93, 105, 118, - 112, 113, 113, 108, 118, 115, 117, 123, 126, - 121, 78, 86, 103, 66, 15, 10, 22, 23, 27, 51, - 33, 44, 44, 62, 54, 48, 62, 62, 37, 73, 96, 117, - 126, 126, 126, 126, 126, 17, 51, 44, 44, 31, 46, - 23, 17, 23, 13, 69, 2, 18, 5, 38, 48, 2, 12, 21, - 25, 6, 23, 42, 4, 65, 10, 91, 117, 126, 126, - 126, 126, 126, 126 }, - - }, - - { - - { - - 62, - 9, 74, 62, 9, 74, 126, 104, 10, 9, 12, 38, 62, - 62, 54, 22, 118, 65, 71, 79, 11, 13, 70, 9, 29, - 41, 62, 61, 27, 69, 126, 101, 76, 71, 79, 11, - 69, 90, 11, 20, 69, 82, 96, 4, 75, 87, 100, 7, - 74, 85, 4, 81, 86, 95, 66, 77, 70, 86, 72, 2, - 22, 0, 0, 0, 83, 86, 97, 72, 22, 1, 48, 12, 80, - 126, 91, 96, 81, 98, 102, 97, 119, 99, 110, 102, - 126, 80, 89, 94, 92, 24, 65, 84, 126, 73, 104, - 91, 126, 8, 7, 8, 2, 10, 68, 74, 88, 103, 91, - 89, 92, 76, 87, 110, 105, 78, 112, 99, 126, 126, - 126, 126, 66, 78, 71, 72, 4, 8, 70, 75, 89, 119, - 75, 43, 41, 126, 9, 2, 5, 3, 2, 67, 84, 74, 65, - 11, 6, 2, 69, 70, 8, 71, 5, 2, 22, 38, 31, 20, - 16, 19, 12, 17, 25, 66, 25, 21, 29, 89, 18, 35, - 32, 62, 62, 48, 62, 62, 62, 62, 62, 62, 62, 62, - 62, 62, 53, 62, 62, 62, 62, 62, 62, 62, 56, 62, - 62, 62, 27, 62, 62, 62, 62, 62, 62, 62, 62, 62, - 62, 62, 53, 45, 38, 22, 75, 72, 77, 28, 32, 28, - 33, 18, 21, 18, 37, 9, 66, 7, 73, 67, 116, 112, - 71, 2, 10, 66, 77, 80, 84, 87, 126, 101, 24, 10, - 2, 75, 77, 91, 107, 111, 122, 76, 19, 11, 6, 5, - 72, 69, 69, 74, 86, 66, 29, 31, 32, 11, 8, 67, - 73, 89, 11, 59, 55, 55, 44, 26, 2, 73, 70, 78, - 62, 126, 124, 110, 126, 124, 105, 121, 117, 102, - 117, 116, 122, 95, 100, 95, 111, 114, 89, 80, - 82, 85, 81, 72, 64, 67, 7, 69, 69, 69, 69, 67, - 77, 64, 2, 67, 64, 6, 65, 66, 1, 12, 66, 71, 75, - 70, 72, 3, 26, 16, 28, 26, 22, 22, 15, 22, 22, - 4, 13, 23, 66, 13, 62, 62, 62, 62, 62, 62, 62, - 62, 62, 62, 62, 62, 62, 62, 54, 62, 62, 62, 62, - 62, 62, 62, 62, 62, 49, 37, 26, 8, 65, 62, 62, - 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 43, 33, - 19, 15, 14, 18, 41, 41, 42, 43, 35, 39, 29, 21, - 24, 13, 70, 9, 71, 83, 31, 14, 9, 85, 81, 77, - 81, 80, 73, 74, 83, 71, 67, 2, 66, 66, 4, 4, 62, - 62, 62, 62, 62, 60, 53, 36, 6, 71, 39, 27, 21, - 11, 6, 0, 65, 67, 82, 81, 76, 72, 78, 72, 68, - 70, 76, 66, 1, 6, 2, 3, 9, 5, 62, 62, 62, 62, - 62, 60, 53, 36, 6 }, - - { - - 62, - 9, 74, 62, 9, 74, 125, 102, 11, 10, 12, 37, - 61, 62, 55, 22, 116, 65, 70, 78, 11, 13, 69, - 9, 28, 40, 61, 58, 25, 70, 124, 100, 75, 70, - 78, 11, 69, 89, 11, 20, 68, 81, 95, 4, 75, 86, - 99, 7, 73, 84, 4, 80, 85, 94, 65, 76, 70, 85, - 71, 2, 22, 0, 0, 0, 82, 86, 97, 71, 22, 1, 48, - 12, 80, 124, 89, 94, 79, 95, 100, 95, 117, 97, - 108, 100, 124, 80, 88, 93, 91, 24, 65, 83, - 124, 72, 103, 90, 125, 8, 7, 8, 2, 11, 68, 73, - 87, 102, 90, 88, 91, 75, 86, 108, 103, 77, - 110, 97, 122, 122, 123, 124, 65, 77, 70, 71, - 4, 9, 69, 74, 88, 116, 74, 41, 40, 124, 9, 3, - 5, 4, 3, 66, 82, 73, 64, 11, 6, 2, 68, 69, 7, - 70, 5, 2, 22, 37, 31, 20, 16, 19, 12, 17, 24, - 65, 25, 21, 29, 89, 18, 35, 32, 62, 62, 47, - 62, 62, 62, 61, 62, 62, 62, 62, 62, 62, 52, - 62, 62, 62, 62, 62, 62, 62, 54, 62, 60, 62, - 26, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, - 61, 52, 44, 37, 21, 75, 72, 77, 28, 31, 27, - 32, 17, 20, 17, 36, 8, 66, 6, 73, 67, 115, - 110, 70, 3, 10, 65, 76, 79, 83, 86, 124, 99, - 25, 11, 3, 74, 76, 89, 105, 109, 120, 75, 20, - 12, 7, 6, 71, 68, 68, 73, 85, 66, 30, 31, 32, - 11, 9, 66, 73, 88, 11, 59, 55, 54, 43, 26, 3, - 72, 69, 77, 62, 124, 122, 108, 124, 122, 103, - 119, 115, 100, 115, 114, 119, 94, 99, 94, 109, - 112, 88, 79, 81, 84, 80, 71, 64, 67, 7, 69, - 69, 69, 68, 66, 76, 0, 2, 66, 0, 6, 64, 65, 1, - 12, 65, 70, 74, 69, 71, 3, 25, 16, 27, 26, 22, - 22, 15, 22, 22, 4, 13, 22, 66, 12, 62, 62, 62, - 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, - 52, 62, 62, 62, 62, 62, 62, 62, 61, 62, 48, - 36, 25, 8, 65, 62, 62, 62, 62, 62, 62, 62, 62, - 62, 62, 62, 62, 42, 32, 18, 15, 14, 17, 40, - 40, 41, 41, 34, 38, 28, 20, 23, 12, 70, 8, 71, - 83, 30, 13, 8, 84, 80, 76, 80, 78, 71, 73, 82, - 70, 66, 3, 65, 65, 4, 4, 62, 62, 62, 62, 60, - 56, 49, 32, 4, 70, 39, 28, 22, 12, 7, 1, 64, - 66, 81, 80, 75, 71, 77, 71, 67, 69, 75, 65, 2, - 6, 3, 4, 9, 5, 62, 62, 62, 62, 60, 56, 49, 32, - 4 }, - - { - - 62, - 9, 74, 62, 9, 74, 123, 101, 11, 10, 12, 36, - 59, 61, 55, 22, 114, 65, 70, 77, 11, 12, 69, - 8, 26, 39, 58, 54, 22, 72, 121, 99, 75, 70, - 77, 11, 69, 88, 11, 19, 68, 81, 94, 4, 75, 86, - 99, 7, 73, 84, 4, 80, 85, 94, 65, 76, 70, 85, - 71, 2, 22, 0, 0, 0, 81, 86, 97, 71, 21, 1, 47, - 12, 80, 122, 88, 93, 77, 93, 99, 94, 115, 96, - 107, 99, 122, 80, 88, 93, 91, 24, 65, 82, 122, - 72, 102, 89, 123, 8, 7, 8, 1, 11, 68, 73, 86, - 101, 89, 87, 90, 75, 85, 107, 102, 76, 109, - 96, 117, 118, 120, 121, 65, 77, 70, 71, 4, 9, - 69, 74, 88, 114, 74, 39, 38, 121, 9, 3, 5, 4, - 3, 66, 80, 72, 64, 11, 6, 2, 67, 68, 6, 70, 5, - 2, 21, 36, 30, 20, 15, 19, 12, 17, 23, 65, 24, - 20, 28, 89, 18, 34, 31, 62, 62, 46, 60, 62, - 62, 59, 62, 62, 62, 62, 62, 62, 50, 62, 62, - 62, 62, 62, 62, 62, 52, 62, 58, 62, 24, 62, - 62, 62, 62, 62, 62, 62, 62, 62, 62, 59, 50, - 42, 35, 19, 75, 72, 78, 27, 30, 26, 31, 16, - 19, 16, 34, 7, 66, 5, 74, 68, 114, 109, 69, 3, - 10, 65, 75, 78, 82, 85, 122, 98, 25, 11, 3, - 73, 75, 88, 103, 107, 118, 74, 21, 13, 8, 7, - 70, 68, 68, 73, 84, 66, 31, 31, 31, 11, 9, 66, - 73, 88, 11, 59, 54, 53, 42, 26, 3, 72, 69, 77, - 62, 123, 121, 107, 122, 120, 102, 117, 113, - 99, 113, 112, 117, 93, 98, 94, 108, 110, 88, - 79, 81, 83, 80, 71, 64, 67, 6, 69, 69, 69, 68, - 66, 75, 0, 2, 66, 0, 6, 64, 65, 1, 11, 65, 70, - 74, 69, 70, 2, 24, 16, 26, 25, 21, 21, 15, 21, - 21, 4, 13, 21, 66, 11, 62, 62, 62, 62, 62, 62, - 62, 62, 62, 62, 62, 62, 62, 62, 50, 62, 62, - 62, 62, 62, 62, 62, 59, 59, 46, 34, 24, 7, 66, - 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, - 62, 40, 30, 16, 14, 13, 15, 39, 39, 39, 39, - 32, 36, 26, 19, 21, 11, 71, 7, 72, 84, 28, 12, - 7, 84, 80, 75, 80, 77, 70, 73, 81, 69, 65, 3, - 65, 64, 4, 4, 62, 62, 62, 62, 57, 52, 45, 28, - 1, 70, 39, 28, 22, 12, 8, 1, 64, 66, 81, 80, - 75, 71, 77, 70, 66, 69, 75, 65, 2, 6, 3, 5, 9, - 5, 62, 62, 62, 62, 57, 52, 45, 28, 1 }, - - { - - 62, - 9, 74, 62, 9, 74, 121, 99, 12, 10, 11, 34, 57, - 60, 55, 22, 112, 65, 69, 76, 11, 12, 69, 8, - 25, 38, 56, 51, 20, 73, 118, 98, 75, 69, 76, - 11, 70, 87, 11, 19, 68, 81, 94, 4, 75, 86, 99, - 7, 73, 83, 4, 80, 84, 94, 65, 76, 70, 85, 71, - 2, 22, 0, 0, 0, 81, 86, 97, 70, 20, 1, 46, 11, - 80, 119, 87, 92, 76, 91, 97, 92, 113, 94, 106, - 98, 120, 80, 88, 92, 91, 24, 65, 81, 120, 72, - 101, 89, 121, 8, 6, 7, 1, 11, 68, 72, 86, 100, - 88, 87, 89, 74, 84, 105, 100, 76, 108, 95, - 112, 113, 117, 118, 65, 77, 70, 70, 4, 9, 68, - 73, 87, 112, 74, 37, 36, 118, 9, 3, 5, 4, 3, - 65, 79, 71, 64, 11, 6, 2, 67, 67, 5, 70, 5, 1, - 21, 35, 30, 20, 15, 19, 12, 17, 22, 65, 23, - 19, 28, 89, 18, 34, 31, 62, 62, 45, 58, 62, - 62, 57, 62, 62, 62, 62, 62, 61, 48, 62, 62, - 62, 62, 62, 62, 60, 50, 62, 56, 62, 22, 62, - 62, 62, 62, 62, 62, 62, 62, 62, 62, 57, 48, - 40, 34, 17, 75, 72, 78, 26, 29, 25, 30, 15, - 18, 15, 32, 6, 67, 4, 75, 68, 114, 107, 68, 4, - 10, 65, 74, 78, 82, 85, 120, 97, 25, 11, 4, - 72, 74, 87, 102, 106, 116, 73, 21, 13, 8, 7, - 69, 67, 68, 73, 84, 66, 31, 31, 30, 11, 9, 66, - 73, 87, 11, 58, 54, 52, 41, 26, 3, 72, 69, 77, - 62, 122, 119, 106, 121, 119, 101, 115, 111, - 98, 112, 110, 115, 93, 97, 93, 107, 108, 87, - 79, 81, 83, 79, 71, 64, 67, 6, 69, 69, 70, 67, - 65, 74, 0, 2, 65, 0, 6, 64, 65, 1, 11, 65, 70, - 74, 69, 70, 1, 23, 16, 25, 24, 20, 21, 15, 20, - 20, 4, 13, 20, 66, 10, 62, 62, 61, 62, 62, 62, - 62, 62, 62, 62, 62, 62, 62, 62, 48, 62, 62, - 62, 62, 62, 62, 62, 57, 57, 44, 32, 22, 6, 67, - 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 59, - 60, 38, 28, 15, 13, 12, 14, 37, 37, 37, 37, - 31, 34, 24, 18, 20, 10, 72, 6, 73, 85, 27, 11, - 6, 84, 79, 75, 79, 76, 69, 73, 81, 69, 65, 3, - 64, 0, 4, 4, 62, 62, 62, 59, 54, 48, 41, 24, - 65, 70, 39, 28, 22, 12, 8, 2, 64, 66, 80, 80, - 75, 70, 76, 69, 65, 69, 74, 65, 2, 6, 3, 5, 9, - 5, 62, 62, 62, 59, 54, 48, 41, 24, 65 }, - - { - - 62, - 9, 74, 62, 9, 74, 120, 98, 12, 10, 11, 33, 55, - 59, 55, 21, 110, 65, 69, 75, 10, 11, 69, 7, - 23, 37, 53, 47, 17, 75, 115, 97, 75, 69, 75, - 10, 70, 86, 11, 18, 68, 80, 93, 4, 75, 86, 99, - 7, 73, 83, 4, 80, 84, 93, 65, 76, 70, 85, 70, - 2, 22, 0, 0, 0, 80, 87, 97, 70, 19, 1, 45, 11, - 80, 117, 86, 91, 74, 89, 96, 91, 112, 93, 104, - 97, 118, 80, 87, 92, 91, 24, 65, 80, 118, 72, - 101, 88, 119, 8, 6, 7, 0, 11, 68, 72, 85, 99, - 87, 86, 88, 74, 84, 104, 99, 75, 107, 94, 107, - 109, 114, 115, 65, 76, 70, 70, 4, 9, 68, 73, - 87, 110, 74, 35, 34, 116, 9, 4, 5, 4, 3, 65, - 77, 70, 0, 10, 6, 2, 66, 67, 4, 70, 5, 1, 20, - 34, 29, 19, 14, 19, 12, 17, 21, 65, 22, 18, - 27, 89, 17, 33, 30, 62, 62, 44, 56, 62, 62, - 55, 62, 62, 62, 62, 62, 59, 46, 59, 62, 62, - 62, 62, 62, 57, 48, 62, 54, 62, 21, 62, 62, - 62, 62, 62, 62, 62, 62, 62, 60, 55, 46, 38, - 32, 15, 75, 72, 79, 25, 28, 24, 28, 14, 16, - 14, 31, 5, 67, 3, 75, 69, 113, 106, 67, 4, 10, - 64, 74, 77, 81, 84, 118, 95, 25, 12, 4, 72, - 73, 86, 100, 104, 115, 73, 22, 14, 9, 8, 68, - 67, 68, 72, 83, 66, 32, 31, 30, 10, 9, 66, 73, - 87, 11, 58, 53, 51, 40, 26, 3, 71, 69, 77, 62, - 120, 118, 105, 119, 117, 100, 114, 110, 97, - 110, 109, 113, 92, 96, 93, 106, 107, 87, 79, - 81, 82, 79, 71, 65, 67, 5, 69, 69, 70, 67, 65, - 73, 0, 2, 65, 0, 6, 64, 65, 1, 10, 65, 70, 74, - 69, 69, 0, 22, 16, 24, 24, 19, 20, 15, 19, 19, - 4, 13, 19, 66, 9, 62, 62, 60, 62, 62, 62, 62, - 62, 62, 62, 62, 62, 62, 62, 46, 62, 62, 62, - 62, 62, 62, 62, 54, 54, 42, 30, 21, 5, 67, 62, - 62, 62, 62, 62, 62, 62, 62, 62, 62, 57, 57, - 36, 26, 13, 12, 12, 12, 36, 36, 36, 35, 29, - 32, 23, 17, 18, 9, 73, 4, 74, 85, 25, 9, 4, - 83, 79, 74, 79, 75, 68, 73, 80, 68, 64, 3, 64, - 1, 4, 4, 62, 62, 62, 56, 50, 44, 36, 20, 68, - 69, 39, 28, 22, 12, 9, 2, 64, 66, 80, 80, 75, - 70, 76, 69, 64, 69, 74, 64, 3, 6, 3, 6, 9, 5, - 62, 62, 62, 56, 50, 44, 36, 20, 68 }, - - { - - 62, - 9, 74, 62, 9, 74, 118, 96, 12, 10, 10, 32, 53, - 58, 55, 21, 108, 65, 69, 74, 10, 11, 69, 6, - 21, 36, 51, 44, 15, 77, 112, 96, 74, 69, 74, - 10, 70, 85, 11, 18, 68, 80, 92, 4, 75, 86, 99, - 7, 73, 83, 4, 80, 83, 93, 65, 76, 70, 85, 70, - 2, 22, 0, 0, 0, 80, 87, 97, 69, 18, 1, 44, 10, - 80, 114, 85, 90, 72, 87, 94, 89, 110, 91, 103, - 96, 115, 80, 87, 91, 90, 24, 65, 79, 116, 72, - 100, 88, 117, 8, 5, 6, 0, 11, 68, 71, 85, 98, - 86, 86, 87, 73, 83, 102, 97, 74, 105, 93, 102, - 105, 111, 112, 64, 76, 69, 69, 4, 9, 67, 73, - 86, 108, 74, 33, 32, 113, 9, 4, 5, 4, 3, 64, - 76, 69, 0, 10, 6, 2, 66, 66, 3, 69, 5, 0, 20, - 33, 29, 19, 14, 19, 12, 17, 20, 64, 21, 18, - 27, 89, 17, 32, 29, 62, 62, 43, 55, 62, 62, - 53, 62, 62, 62, 62, 61, 57, 44, 57, 62, 60, - 62, 62, 62, 55, 46, 62, 52, 62, 19, 62, 62, - 62, 62, 62, 62, 62, 62, 61, 58, 53, 44, 37, - 30, 13, 75, 72, 79, 24, 27, 23, 27, 13, 15, - 13, 29, 4, 68, 2, 76, 70, 112, 104, 66, 5, 10, - 64, 73, 77, 81, 83, 116, 94, 25, 12, 5, 71, - 72, 85, 99, 103, 113, 72, 23, 15, 10, 8, 67, - 66, 67, 72, 83, 66, 32, 31, 29, 10, 9, 66, 73, - 86, 11, 57, 52, 50, 39, 26, 3, 71, 69, 76, 62, - 119, 116, 103, 117, 116, 99, 112, 108, 96, - 108, 107, 111, 91, 95, 92, 105, 105, 87, 79, - 80, 82, 78, 71, 65, 67, 5, 69, 69, 71, 66, 65, - 72, 0, 2, 65, 0, 6, 64, 65, 1, 10, 65, 70, 74, - 69, 69, 64, 21, 16, 23, 23, 19, 19, 15, 19, - 18, 4, 13, 18, 66, 8, 62, 62, 59, 62, 62, 62, - 62, 62, 62, 62, 62, 62, 62, 62, 44, 62, 62, - 62, 62, 62, 62, 61, 52, 52, 40, 29, 19, 5, 68, - 62, 62, 62, 62, 62, 62, 62, 62, 62, 61, 55, - 54, 34, 24, 12, 12, 11, 10, 35, 34, 34, 33, - 27, 30, 21, 16, 17, 8, 73, 3, 75, 86, 24, 8, - 3, 83, 79, 73, 78, 74, 67, 72, 79, 68, 64, 3, - 0, 2, 4, 4, 62, 62, 59, 53, 47, 40, 32, 16, - 71, 69, 39, 28, 22, 12, 9, 2, 0, 65, 79, 80, - 75, 69, 76, 68, 0, 69, 74, 64, 3, 6, 4, 6, 9, - 5, 62, 62, 59, 53, 47, 40, 32, 16, 71 }, - - { - - 62, - 9, 75, 62, 9, 75, 116, 95, 13, 10, 10, 30, 51, - 57, 55, 21, 107, 65, 68, 74, 10, 10, 68, 6, - 20, 34, 48, 40, 12, 78, 110, 95, 74, 68, 74, - 10, 71, 85, 11, 17, 68, 80, 92, 4, 75, 85, 98, - 7, 72, 82, 4, 79, 83, 93, 65, 76, 70, 85, 70, - 2, 22, 0, 0, 0, 79, 87, 97, 69, 18, 0, 44, 10, - 80, 112, 84, 89, 71, 84, 93, 88, 108, 90, 102, - 95, 113, 80, 87, 91, 90, 24, 65, 78, 113, 72, - 99, 87, 115, 7, 5, 6, 64, 12, 68, 71, 84, 98, - 86, 85, 86, 73, 82, 101, 96, 74, 104, 92, 97, - 100, 108, 109, 64, 76, 69, 69, 4, 9, 67, 72, - 86, 106, 73, 31, 30, 110, 9, 4, 5, 4, 4, 64, - 74, 68, 0, 10, 6, 2, 65, 65, 2, 69, 5, 0, 19, - 32, 28, 19, 13, 19, 12, 17, 18, 64, 20, 17, - 26, 89, 17, 32, 29, 62, 62, 42, 53, 62, 62, - 51, 62, 62, 62, 62, 57, 55, 43, 55, 62, 58, - 62, 62, 62, 52, 44, 62, 50, 62, 17, 62, 62, - 62, 62, 62, 62, 62, 62, 59, 56, 50, 42, 35, - 29, 12, 75, 72, 80, 23, 26, 22, 26, 12, 14, - 12, 27, 3, 68, 1, 77, 70, 112, 103, 65, 5, 10, - 64, 72, 76, 80, 83, 114, 93, 26, 12, 5, 70, - 71, 84, 97, 101, 111, 71, 23, 15, 10, 9, 66, - 66, 67, 72, 82, 66, 33, 31, 28, 10, 9, 66, 73, - 86, 10, 57, 52, 49, 38, 25, 3, 71, 69, 76, 62, - 118, 115, 102, 116, 114, 98, 110, 106, 95, - 107, 105, 109, 91, 94, 92, 104, 103, 86, 79, - 80, 81, 78, 71, 65, 67, 4, 69, 69, 71, 66, 64, - 71, 0, 2, 64, 1, 6, 0, 64, 1, 9, 65, 70, 74, - 69, 68, 65, 20, 16, 22, 22, 18, 19, 15, 18, - 18, 4, 12, 16, 67, 7, 62, 62, 58, 62, 62, 62, - 62, 62, 62, 62, 62, 62, 62, 62, 42, 62, 62, - 62, 62, 62, 62, 58, 50, 49, 38, 27, 18, 4, 69, - 62, 62, 62, 62, 62, 62, 62, 62, 61, 58, 52, - 51, 32, 23, 10, 11, 10, 9, 33, 33, 32, 31, 26, - 28, 19, 15, 15, 7, 74, 2, 76, 87, 22, 7, 2, - 83, 78, 73, 78, 73, 66, 72, 79, 67, 0, 3, 0, - 3, 4, 4, 62, 62, 57, 50, 44, 36, 28, 12, 74, - 69, 39, 28, 22, 12, 10, 3, 0, 65, 79, 79, 74, - 69, 75, 67, 1, 68, 73, 64, 3, 6, 4, 7, 9, 5, - 62, 62, 57, 50, 44, 36, 28, 12, 74 }, - - { - - 62, - 9, 75, 62, 9, 75, 114, 93, 13, 10, 9, 29, 49, - 56, 55, 21, 105, 65, 68, 73, 9, 10, 68, 5, 18, - 33, 46, 37, 10, 80, 107, 94, 74, 68, 73, 9, - 71, 84, 11, 17, 68, 79, 91, 4, 75, 85, 98, 7, - 72, 82, 4, 79, 82, 92, 65, 76, 70, 85, 69, 2, - 22, 0, 0, 0, 79, 87, 97, 68, 17, 0, 43, 9, 80, - 109, 83, 88, 69, 82, 91, 86, 107, 88, 100, 94, - 111, 80, 86, 90, 90, 24, 65, 77, 111, 72, 98, - 87, 113, 7, 4, 5, 64, 12, 68, 70, 84, 97, 85, - 85, 85, 72, 81, 99, 94, 73, 103, 91, 92, 96, - 105, 106, 64, 75, 69, 68, 4, 9, 66, 72, 85, - 104, 73, 29, 28, 107, 9, 5, 5, 4, 4, 0, 73, - 67, 1, 9, 6, 2, 65, 65, 1, 69, 5, 64, 19, 31, - 28, 18, 13, 19, 12, 17, 17, 64, 19, 16, 26, - 89, 17, 31, 28, 60, 62, 41, 51, 62, 62, 49, - 62, 61, 62, 62, 54, 53, 41, 52, 62, 55, 62, - 62, 62, 49, 42, 62, 48, 62, 16, 62, 62, 62, - 62, 62, 62, 62, 62, 57, 53, 48, 40, 33, 27, - 10, 75, 72, 80, 22, 25, 21, 24, 11, 13, 11, - 26, 2, 69, 0, 77, 71, 111, 101, 64, 6, 10, 0, - 72, 76, 80, 82, 112, 91, 26, 13, 6, 70, 70, - 83, 96, 100, 109, 71, 24, 16, 11, 9, 65, 65, - 67, 71, 82, 66, 33, 31, 28, 9, 9, 66, 73, 85, - 10, 56, 51, 48, 37, 25, 3, 70, 69, 76, 62, - 116, 113, 101, 114, 113, 97, 109, 105, 94, - 105, 104, 107, 90, 93, 91, 103, 101, 86, 79, - 80, 81, 77, 71, 66, 67, 4, 69, 69, 72, 65, 64, - 70, 0, 2, 64, 1, 6, 0, 64, 1, 9, 65, 70, 74, - 69, 68, 66, 19, 16, 21, 22, 17, 18, 15, 17, - 17, 4, 12, 15, 67, 6, 61, 62, 57, 62, 62, 62, - 62, 62, 62, 62, 62, 62, 62, 62, 40, 62, 62, - 62, 62, 62, 62, 56, 48, 47, 36, 25, 16, 3, 69, - 62, 62, 62, 62, 62, 62, 62, 62, 59, 56, 50, - 48, 30, 21, 9, 10, 10, 7, 32, 31, 31, 29, 24, - 26, 18, 14, 14, 6, 75, 0, 77, 87, 21, 5, 0, - 82, 78, 72, 77, 72, 65, 72, 78, 67, 0, 3, 1, - 4, 4, 4, 62, 62, 54, 47, 40, 32, 24, 8, 77, - 68, 39, 28, 22, 12, 10, 3, 0, 65, 78, 79, 74, - 68, 75, 66, 2, 68, 73, 0, 4, 6, 4, 7, 9, 5, - 62, 62, 54, 47, 40, 32, 24, 8, 77 }, - - { - - 62, - 8, 75, 62, 8, 75, 113, 92, 13, 10, 9, 27, 46, - 55, 55, 20, 103, 66, 68, 72, 9, 9, 68, 4, 16, - 32, 43, 33, 7, 82, 104, 93, 74, 68, 72, 9, 72, - 83, 11, 16, 68, 79, 91, 3, 76, 85, 98, 7, 72, - 82, 4, 79, 82, 92, 65, 76, 70, 85, 69, 2, 22, - 0, 0, 0, 78, 88, 97, 68, 16, 0, 42, 9, 81, - 107, 82, 87, 68, 80, 90, 85, 105, 87, 99, 93, - 109, 80, 86, 90, 90, 24, 65, 76, 109, 72, 98, - 86, 111, 7, 4, 5, 65, 12, 68, 70, 83, 96, 84, - 84, 85, 72, 81, 98, 93, 73, 102, 90, 88, 92, - 102, 104, 64, 75, 69, 68, 3, 9, 66, 72, 85, - 102, 73, 27, 26, 105, 9, 5, 5, 4, 4, 0, 71, - 67, 1, 9, 5, 2, 64, 64, 64, 69, 5, 64, 18, 29, - 27, 18, 12, 19, 12, 16, 16, 64, 18, 15, 25, - 89, 16, 30, 27, 58, 62, 39, 49, 62, 62, 46, - 62, 59, 62, 62, 50, 51, 39, 50, 62, 53, 62, - 62, 62, 46, 40, 62, 46, 62, 14, 62, 62, 62, - 62, 62, 62, 62, 60, 55, 51, 46, 38, 31, 25, 8, - 75, 73, 81, 21, 23, 20, 23, 10, 11, 9, 24, 1, - 69, 64, 78, 72, 111, 100, 0, 6, 10, 0, 71, 75, - 79, 82, 110, 90, 26, 13, 6, 69, 69, 82, 94, - 98, 108, 70, 24, 16, 11, 10, 64, 65, 67, 71, - 81, 67, 34, 31, 27, 9, 9, 66, 73, 85, 10, 56, - 50, 47, 36, 25, 3, 70, 69, 76, 62, 115, 112, - 100, 113, 111, 96, 107, 103, 93, 104, 102, - 105, 90, 93, 91, 102, 100, 86, 79, 80, 80, 77, - 71, 66, 67, 3, 69, 69, 72, 65, 64, 69, 0, 1, - 64, 1, 5, 0, 64, 1, 8, 65, 70, 74, 69, 67, 67, - 18, 16, 19, 21, 16, 17, 14, 16, 16, 4, 12, 14, - 67, 4, 60, 60, 56, 62, 62, 62, 62, 62, 62, 62, - 62, 62, 62, 60, 38, 62, 62, 62, 62, 62, 62, - 53, 45, 44, 34, 23, 15, 2, 70, 62, 62, 62, 62, - 62, 62, 62, 62, 56, 53, 47, 45, 28, 19, 7, 9, - 9, 5, 30, 30, 29, 27, 22, 24, 16, 12, 12, 4, - 76, 64, 78, 88, 19, 4, 64, 82, 78, 72, 77, 71, - 64, 72, 78, 66, 1, 3, 1, 4, 4, 3, 62, 60, 51, - 44, 37, 28, 19, 3, 80, 68, 39, 28, 22, 12, 11, - 3, 0, 65, 78, 79, 74, 68, 75, 66, 2, 68, 73, - 0, 4, 6, 4, 8, 9, 4, 62, 60, 51, 44, 37, 28, - 19, 3, 80 }, - - { - - 62, - 8, 75, 62, 8, 75, 111, 91, 14, 10, 9, 26, 44, - 54, 56, 20, 101, 66, 67, 71, 9, 8, 68, 4, 15, - 31, 41, 29, 4, 83, 101, 92, 73, 67, 71, 9, 72, - 82, 11, 16, 67, 79, 90, 3, 76, 85, 98, 7, 72, - 81, 4, 79, 82, 92, 65, 76, 70, 84, 69, 2, 22, - 0, 0, 0, 77, 88, 97, 68, 15, 0, 41, 9, 81, - 105, 80, 86, 66, 78, 88, 84, 103, 85, 98, 91, - 106, 80, 86, 90, 89, 24, 65, 75, 107, 71, 97, - 85, 109, 7, 4, 5, 65, 12, 68, 70, 82, 95, 83, - 83, 84, 71, 80, 97, 91, 72, 100, 89, 83, 87, - 98, 101, 0, 75, 68, 67, 3, 9, 66, 71, 84, 99, - 73, 25, 25, 102, 9, 5, 5, 4, 4, 1, 69, 66, 1, - 9, 5, 2, 0, 0, 65, 68, 5, 64, 17, 28, 26, 18, - 11, 19, 12, 16, 15, 0, 17, 15, 24, 89, 16, 30, - 27, 56, 62, 38, 48, 62, 62, 44, 60, 57, 62, - 62, 47, 49, 37, 48, 62, 51, 62, 62, 62, 44, - 38, 62, 44, 62, 12, 62, 62, 62, 62, 62, 62, - 60, 58, 53, 49, 44, 37, 30, 24, 6, 75, 73, 81, - 21, 22, 19, 22, 9, 10, 8, 22, 0, 69, 65, 79, - 72, 110, 99, 1, 6, 10, 0, 70, 74, 78, 81, 107, - 89, 26, 13, 6, 68, 68, 81, 92, 96, 106, 69, - 25, 17, 12, 11, 0, 65, 66, 71, 80, 67, 35, 31, - 26, 9, 10, 65, 73, 84, 10, 56, 50, 46, 35, 25, - 3, 70, 69, 75, 62, 114, 111, 98, 111, 109, 95, - 105, 101, 92, 102, 100, 103, 89, 92, 90, 101, - 98, 85, 78, 79, 79, 76, 71, 66, 67, 2, 69, 69, - 72, 65, 0, 68, 1, 1, 0, 1, 5, 0, 64, 1, 7, 65, - 69, 73, 69, 66, 67, 17, 16, 18, 20, 16, 17, - 14, 16, 15, 4, 12, 13, 67, 3, 59, 59, 56, 61, - 62, 62, 62, 62, 62, 62, 62, 62, 62, 57, 36, - 62, 62, 62, 62, 62, 62, 50, 43, 42, 33, 22, - 14, 2, 71, 62, 62, 62, 62, 62, 62, 62, 62, 54, - 51, 45, 43, 26, 17, 5, 9, 8, 4, 29, 29, 27, - 25, 21, 23, 14, 11, 10, 3, 76, 65, 78, 89, 17, - 3, 65, 82, 77, 71, 77, 70, 1, 71, 77, 65, 2, - 3, 2, 5, 4, 3, 62, 58, 49, 41, 34, 24, 15, 64, - 83, 68, 39, 28, 23, 13, 12, 4, 1, 64, 78, 79, - 74, 68, 74, 65, 3, 68, 72, 0, 4, 6, 5, 9, 9, - 4, 62, 58, 49, 41, 34, 24, 15, 64, 83 }, - - { - - 62, - 8, 75, 62, 8, 75, 109, 89, 14, 10, 8, 25, 42, - 53, 56, 20, 99, 66, 67, 70, 8, 8, 68, 3, 13, - 30, 38, 26, 2, 85, 98, 91, 73, 67, 70, 8, 72, - 81, 11, 15, 67, 78, 89, 3, 76, 85, 98, 7, 72, - 81, 4, 79, 81, 91, 65, 76, 70, 84, 68, 2, 22, - 0, 0, 0, 77, 88, 97, 67, 14, 0, 40, 8, 81, - 102, 79, 85, 64, 76, 87, 82, 102, 84, 96, 90, - 104, 80, 85, 89, 89, 24, 65, 74, 105, 71, 96, - 85, 107, 7, 3, 4, 66, 12, 68, 69, 82, 94, 82, - 83, 83, 71, 79, 95, 90, 71, 99, 88, 78, 83, - 95, 98, 0, 74, 68, 67, 3, 9, 65, 71, 84, 97, - 73, 23, 23, 99, 9, 6, 5, 4, 4, 1, 68, 65, 2, - 8, 5, 2, 0, 0, 66, 68, 5, 65, 17, 27, 26, 17, - 11, 19, 12, 16, 14, 0, 16, 14, 24, 89, 16, 29, - 26, 54, 62, 37, 46, 62, 62, 42, 57, 55, 62, - 62, 43, 47, 35, 45, 61, 48, 62, 62, 62, 41, - 36, 58, 42, 62, 11, 62, 62, 62, 62, 62, 60, - 58, 56, 51, 46, 42, 35, 28, 22, 4, 75, 73, 82, - 20, 21, 18, 20, 8, 9, 7, 21, 64, 70, 66, 79, - 73, 109, 97, 2, 7, 10, 1, 70, 74, 78, 80, 105, - 87, 26, 14, 7, 68, 67, 80, 91, 95, 104, 69, - 26, 18, 13, 11, 1, 64, 66, 70, 80, 67, 35, 31, - 26, 8, 10, 65, 73, 84, 10, 55, 49, 45, 34, 25, - 3, 69, 69, 75, 62, 112, 109, 97, 109, 108, 94, - 104, 100, 91, 100, 99, 101, 88, 91, 90, 100, - 96, 85, 78, 79, 79, 76, 71, 67, 67, 2, 69, 69, - 73, 64, 0, 67, 1, 1, 0, 1, 5, 0, 64, 1, 7, 65, - 69, 73, 69, 66, 68, 16, 16, 17, 20, 15, 16, - 14, 15, 14, 4, 12, 12, 67, 2, 58, 58, 55, 59, - 60, 62, 62, 62, 62, 62, 62, 62, 62, 55, 34, - 62, 62, 62, 62, 62, 62, 48, 41, 39, 31, 20, - 12, 1, 71, 62, 62, 62, 62, 62, 62, 62, 62, 52, - 48, 43, 40, 24, 15, 4, 8, 8, 2, 28, 27, 26, - 23, 19, 21, 13, 10, 9, 2, 77, 67, 79, 89, 16, - 1, 67, 81, 77, 70, 76, 69, 2, 71, 76, 65, 2, - 3, 2, 6, 4, 3, 62, 56, 46, 38, 30, 20, 11, 68, - 86, 67, 39, 28, 23, 13, 12, 4, 1, 64, 77, 79, - 74, 67, 74, 64, 4, 68, 72, 1, 5, 6, 5, 9, 9, - 4, 62, 56, 46, 38, 30, 20, 11, 68, 86 }, - - { - - 62, - 8, 76, 62, 8, 76, 107, 88, 15, 10, 8, 23, 40, - 52, 56, 20, 98, 66, 66, 70, 8, 7, 67, 3, 12, - 28, 36, 22, 64, 86, 96, 90, 73, 66, 70, 8, 73, - 81, 11, 15, 67, 78, 89, 3, 76, 84, 97, 7, 71, - 80, 4, 78, 81, 91, 65, 76, 70, 84, 68, 2, 22, - 0, 0, 0, 76, 88, 97, 67, 14, 64, 40, 8, 81, - 100, 78, 84, 0, 73, 85, 81, 100, 82, 95, 89, - 102, 80, 85, 89, 89, 24, 65, 73, 102, 71, 95, - 84, 105, 6, 3, 4, 66, 13, 68, 69, 81, 94, 82, - 82, 82, 70, 78, 94, 88, 71, 98, 87, 73, 78, - 92, 95, 0, 74, 68, 66, 3, 9, 65, 70, 83, 95, - 72, 21, 21, 96, 9, 6, 5, 4, 5, 2, 66, 64, 2, - 8, 5, 2, 1, 1, 67, 68, 5, 65, 16, 26, 25, 17, - 10, 19, 12, 16, 12, 0, 15, 13, 23, 89, 16, 29, - 26, 52, 62, 36, 44, 61, 62, 40, 55, 53, 62, - 62, 40, 45, 34, 43, 57, 46, 62, 62, 62, 38, - 34, 55, 40, 62, 9, 62, 62, 62, 62, 62, 58, 55, - 54, 49, 44, 39, 33, 26, 21, 3, 75, 73, 82, 19, - 20, 17, 19, 7, 8, 6, 19, 65, 70, 67, 80, 73, - 109, 96, 3, 7, 10, 1, 69, 73, 77, 80, 103, 86, - 27, 14, 7, 67, 66, 79, 89, 93, 102, 68, 26, - 18, 13, 12, 2, 64, 66, 70, 79, 67, 36, 31, 25, - 8, 10, 65, 73, 83, 9, 55, 49, 44, 33, 24, 3, - 69, 69, 75, 62, 111, 108, 96, 108, 106, 93, - 102, 98, 90, 99, 97, 99, 88, 90, 89, 99, 94, - 84, 78, 79, 78, 75, 71, 67, 67, 1, 69, 69, 73, - 64, 1, 66, 1, 1, 1, 2, 5, 1, 0, 1, 6, 65, 69, - 73, 69, 65, 69, 15, 16, 16, 19, 14, 16, 14, - 14, 14, 4, 11, 10, 68, 1, 56, 57, 54, 58, 58, - 62, 62, 62, 62, 62, 62, 62, 62, 52, 32, 62, - 62, 62, 62, 62, 62, 45, 39, 37, 29, 18, 11, 0, - 72, 62, 62, 62, 62, 62, 62, 60, 59, 49, 46, - 40, 37, 22, 14, 2, 7, 7, 1, 26, 26, 24, 21, - 18, 19, 11, 9, 7, 1, 78, 68, 80, 90, 14, 0, - 68, 81, 76, 70, 76, 68, 3, 71, 76, 64, 3, 3, - 3, 7, 4, 3, 62, 54, 44, 35, 27, 16, 7, 72, 89, - 67, 39, 28, 23, 13, 13, 5, 1, 64, 77, 78, 73, - 67, 73, 0, 5, 67, 71, 1, 5, 6, 5, 10, 9, 4, - 62, 54, 44, 35, 27, 16, 7, 72, 89 }, - - { - - 62, - 8, 76, 62, 8, 76, 106, 86, 15, 10, 7, 22, 38, - 51, 56, 19, 96, 66, 66, 69, 8, 7, 67, 2, 10, - 27, 33, 19, 66, 88, 93, 89, 73, 66, 69, 8, 73, - 80, 11, 14, 67, 78, 88, 3, 76, 84, 97, 7, 71, - 80, 4, 78, 80, 91, 65, 76, 70, 84, 68, 2, 22, - 0, 0, 0, 76, 89, 97, 66, 13, 64, 39, 7, 81, - 97, 77, 83, 2, 71, 84, 79, 98, 81, 94, 88, - 100, 80, 85, 88, 89, 24, 65, 72, 100, 71, 95, - 84, 103, 6, 2, 3, 67, 13, 68, 68, 81, 93, 81, - 82, 81, 70, 78, 92, 87, 70, 97, 86, 68, 74, - 89, 92, 0, 74, 68, 66, 3, 9, 64, 70, 83, 93, - 72, 19, 19, 94, 9, 6, 5, 4, 5, 2, 65, 0, 2, 8, - 5, 2, 1, 2, 68, 68, 5, 66, 16, 25, 25, 17, 10, - 19, 12, 16, 11, 0, 14, 12, 23, 89, 15, 28, 25, - 50, 62, 35, 42, 59, 60, 38, 52, 51, 62, 62, - 36, 43, 32, 41, 54, 43, 58, 62, 62, 35, 32, - 51, 38, 62, 7, 62, 62, 62, 62, 62, 56, 53, 52, - 47, 42, 37, 31, 24, 19, 1, 75, 73, 83, 18, 19, - 16, 18, 6, 6, 5, 17, 66, 71, 68, 81, 74, 108, - 94, 4, 8, 10, 1, 68, 73, 77, 79, 101, 85, 27, - 14, 8, 66, 65, 78, 88, 92, 101, 67, 27, 19, - 14, 12, 3, 0, 66, 70, 79, 67, 36, 31, 24, 8, - 10, 65, 73, 83, 9, 54, 48, 43, 32, 24, 3, 69, - 69, 75, 62, 110, 106, 95, 106, 105, 92, 100, - 96, 89, 97, 95, 97, 87, 89, 89, 98, 93, 84, - 78, 79, 78, 75, 71, 67, 67, 1, 69, 69, 74, 0, - 1, 65, 1, 1, 1, 2, 5, 1, 0, 1, 6, 65, 69, 73, - 69, 65, 70, 14, 16, 15, 18, 13, 15, 14, 13, - 13, 4, 11, 9, 68, 0, 55, 56, 53, 56, 56, 62, - 61, 62, 62, 62, 62, 62, 61, 50, 30, 62, 62, - 62, 62, 62, 59, 43, 36, 34, 27, 16, 9, 64, 73, - 62, 62, 62, 62, 62, 62, 57, 56, 47, 43, 38, - 34, 20, 12, 1, 6, 6, 64, 25, 24, 22, 19, 16, - 17, 9, 8, 6, 0, 79, 69, 81, 91, 13, 64, 69, - 81, 76, 69, 75, 67, 4, 71, 75, 64, 3, 3, 3, 8, - 4, 3, 61, 52, 41, 32, 24, 12, 2, 76, 92, 67, - 39, 28, 23, 13, 13, 5, 1, 64, 76, 78, 73, 66, - 73, 0, 6, 67, 71, 1, 5, 6, 5, 10, 9, 4, 61, - 52, 41, 32, 24, 12, 2, 76, 92 }, - - { - - 62, - 8, 76, 62, 8, 76, 104, 85, 15, 10, 7, 21, 36, - 50, 56, 19, 94, 66, 66, 68, 7, 6, 67, 1, 8, - 26, 31, 15, 69, 90, 90, 88, 72, 66, 68, 7, 73, - 79, 11, 14, 67, 77, 87, 3, 76, 84, 97, 7, 71, - 80, 4, 78, 80, 90, 65, 76, 70, 84, 67, 2, 22, - 0, 0, 0, 75, 89, 97, 66, 12, 64, 38, 7, 81, - 95, 76, 82, 4, 69, 82, 78, 97, 79, 92, 87, 97, - 80, 84, 88, 88, 24, 65, 71, 98, 71, 94, 83, - 101, 6, 2, 3, 67, 13, 68, 68, 80, 92, 80, 81, - 80, 69, 77, 91, 85, 69, 95, 85, 0, 70, 86, 89, - 1, 73, 67, 65, 3, 9, 64, 70, 82, 91, 72, 17, - 17, 91, 9, 7, 5, 4, 5, 3, 0, 1, 3, 7, 5, 2, 2, - 2, 69, 67, 5, 66, 15, 24, 24, 16, 9, 19, 12, - 16, 10, 1, 13, 12, 22, 89, 15, 27, 24, 48, 62, - 34, 41, 57, 58, 36, 50, 49, 62, 62, 33, 41, - 30, 38, 51, 41, 55, 62, 62, 33, 30, 48, 36, - 62, 6, 62, 62, 62, 61, 60, 54, 51, 50, 45, 39, - 35, 29, 23, 17, 64, 75, 73, 83, 17, 18, 15, - 16, 5, 5, 4, 16, 67, 71, 69, 81, 75, 107, 93, - 5, 8, 10, 2, 68, 72, 76, 78, 99, 83, 27, 15, - 8, 66, 64, 77, 86, 90, 99, 67, 28, 20, 15, 13, - 4, 0, 65, 69, 78, 67, 37, 31, 24, 7, 10, 65, - 73, 82, 9, 54, 47, 42, 31, 24, 3, 68, 69, 74, - 62, 108, 105, 93, 104, 103, 91, 99, 95, 88, - 95, 94, 95, 86, 88, 88, 97, 91, 84, 78, 78, - 77, 74, 71, 68, 67, 0, 69, 69, 74, 0, 1, 64, - 1, 1, 1, 2, 5, 1, 0, 1, 5, 65, 69, 73, 69, 64, - 71, 13, 16, 14, 18, 13, 14, 14, 13, 12, 4, 11, - 8, 68, 64, 54, 55, 52, 54, 54, 62, 59, 61, 62, - 59, 62, 62, 58, 47, 28, 62, 62, 62, 62, 59, - 56, 40, 34, 32, 25, 15, 8, 64, 73, 62, 62, 62, - 62, 59, 59, 55, 53, 45, 41, 36, 31, 18, 10, - 64, 6, 6, 66, 24, 23, 21, 17, 14, 15, 8, 7, 4, - 64, 79, 71, 82, 91, 11, 66, 71, 80, 76, 68, - 75, 66, 5, 70, 74, 0, 4, 3, 4, 9, 4, 3, 60, - 50, 38, 29, 20, 8, 65, 80, 95, 66, 39, 28, 23, - 13, 14, 5, 2, 0, 76, 78, 73, 66, 73, 1, 7, 67, - 71, 2, 6, 6, 6, 11, 9, 4, 60, 50, 38, 29, 20, - 8, 65, 80, 95 }, - - { - - 61, - 8, 76, 61, 8, 76, 102, 83, 16, 10, 6, 19, 34, - 49, 56, 19, 92, 66, 65, 67, 7, 6, 67, 1, 7, - 25, 28, 12, 71, 91, 87, 87, 72, 65, 67, 7, 74, - 78, 11, 13, 67, 77, 87, 3, 76, 84, 97, 7, 71, - 79, 4, 78, 79, 90, 65, 76, 70, 84, 67, 2, 22, - 0, 0, 0, 75, 89, 97, 65, 11, 64, 37, 6, 81, - 92, 75, 81, 5, 67, 81, 76, 95, 78, 91, 86, 95, - 80, 84, 87, 88, 24, 65, 70, 96, 71, 93, 83, - 99, 6, 1, 2, 68, 13, 68, 67, 80, 91, 79, 81, - 79, 69, 76, 89, 84, 69, 94, 84, 5, 65, 83, 86, - 1, 73, 67, 65, 3, 9, 0, 69, 82, 89, 72, 15, - 15, 88, 9, 7, 5, 4, 5, 3, 1, 2, 3, 7, 5, 2, 2, - 3, 70, 67, 5, 67, 15, 23, 24, 16, 9, 19, 12, - 16, 9, 1, 12, 11, 22, 89, 15, 27, 24, 46, 61, - 33, 39, 55, 55, 34, 47, 47, 62, 62, 29, 39, - 28, 36, 48, 38, 52, 61, 62, 30, 28, 44, 34, - 62, 4, 60, 62, 60, 58, 57, 52, 49, 48, 43, 37, - 33, 27, 21, 16, 66, 75, 73, 84, 16, 17, 14, - 15, 4, 4, 3, 14, 68, 72, 70, 82, 75, 107, 91, - 6, 9, 10, 2, 67, 72, 76, 78, 97, 82, 27, 15, - 9, 65, 0, 76, 85, 89, 97, 66, 28, 20, 15, 13, - 5, 1, 65, 69, 78, 67, 37, 31, 23, 7, 10, 65, - 73, 82, 9, 53, 47, 41, 30, 24, 3, 68, 69, 74, - 62, 107, 103, 92, 103, 102, 90, 97, 93, 87, - 94, 92, 93, 86, 87, 88, 96, 89, 83, 78, 78, - 77, 74, 71, 68, 67, 0, 69, 69, 75, 1, 2, 0, 1, - 1, 2, 2, 5, 1, 0, 1, 5, 65, 69, 73, 69, 64, - 72, 12, 16, 13, 17, 12, 14, 14, 12, 11, 4, 11, - 7, 68, 65, 53, 54, 51, 53, 52, 60, 57, 59, 59, - 57, 62, 60, 55, 45, 26, 62, 62, 62, 62, 55, - 53, 38, 32, 29, 23, 13, 6, 65, 74, 62, 62, 62, - 60, 56, 57, 52, 50, 42, 38, 33, 28, 16, 8, 65, - 5, 5, 67, 22, 21, 19, 15, 13, 13, 6, 6, 3, 65, - 80, 72, 83, 92, 10, 67, 72, 80, 75, 68, 74, - 65, 6, 70, 74, 0, 4, 3, 4, 10, 4, 3, 59, 48, - 36, 26, 17, 4, 69, 84, 98, 66, 39, 28, 23, 13, - 14, 6, 2, 0, 75, 78, 73, 65, 72, 2, 8, 67, 70, - 2, 6, 6, 6, 11, 9, 4, 59, 48, 36, 26, 17, 4, - 69, 84, 98 }, - - { - - 60, - 8, 76, 60, 8, 76, 100, 82, 16, 10, 6, 18, 32, - 48, 56, 19, 90, 66, 65, 66, 7, 5, 67, 0, 5, - 24, 26, 8, 74, 93, 84, 86, 72, 65, 66, 7, 74, - 77, 11, 13, 67, 77, 86, 3, 76, 84, 97, 7, 71, - 79, 4, 78, 79, 90, 65, 76, 70, 84, 67, 2, 22, - 0, 0, 0, 74, 89, 97, 65, 10, 64, 36, 6, 81, - 90, 74, 80, 7, 65, 79, 75, 93, 76, 90, 85, 93, - 80, 84, 87, 88, 24, 65, 69, 94, 71, 92, 82, - 97, 6, 1, 2, 68, 13, 68, 67, 79, 90, 78, 80, - 78, 68, 75, 88, 82, 68, 93, 83, 10, 2, 80, 83, - 1, 73, 67, 64, 3, 9, 0, 69, 81, 87, 72, 13, - 13, 85, 9, 7, 5, 4, 5, 4, 3, 3, 3, 7, 5, 2, 3, - 4, 71, 67, 5, 67, 14, 22, 23, 16, 8, 19, 12, - 16, 8, 1, 11, 10, 21, 89, 15, 26, 23, 44, 58, - 32, 37, 53, 53, 32, 45, 45, 62, 62, 26, 37, - 26, 34, 45, 36, 49, 57, 62, 27, 26, 41, 32, - 62, 2, 58, 62, 58, 56, 55, 50, 47, 46, 41, 35, - 31, 25, 19, 14, 68, 75, 73, 84, 15, 16, 13, - 14, 3, 3, 2, 12, 69, 72, 71, 83, 76, 106, 90, - 7, 9, 10, 2, 66, 71, 75, 77, 95, 81, 27, 15, - 9, 64, 1, 75, 83, 87, 95, 65, 29, 21, 16, 14, - 6, 1, 65, 69, 77, 67, 38, 31, 22, 7, 10, 65, - 73, 81, 9, 53, 46, 40, 29, 24, 3, 68, 69, 74, - 62, 106, 102, 91, 101, 100, 89, 95, 91, 86, - 92, 90, 91, 85, 86, 87, 95, 87, 83, 78, 78, - 76, 73, 71, 68, 67, 64, 69, 69, 75, 1, 2, 1, - 1, 1, 2, 2, 5, 1, 0, 1, 4, 65, 69, 73, 69, 0, - 73, 11, 16, 12, 16, 11, 13, 14, 11, 10, 4, 11, - 6, 68, 66, 52, 53, 50, 51, 50, 58, 55, 57, 57, - 54, 61, 57, 52, 42, 24, 62, 62, 62, 62, 52, - 50, 35, 30, 27, 21, 11, 5, 66, 75, 62, 62, 62, - 58, 53, 54, 50, 47, 40, 36, 31, 25, 14, 6, 67, - 4, 4, 69, 21, 20, 17, 13, 11, 11, 4, 5, 1, 66, - 81, 73, 84, 93, 8, 68, 73, 80, 75, 67, 74, 64, - 7, 70, 73, 1, 5, 3, 5, 11, 4, 3, 58, 46, 33, - 23, 14, 0, 73, 88, 101, 66, 39, 28, 23, 13, - 15, 6, 2, 0, 75, 78, 73, 65, 72, 3, 9, 67, 70, - 2, 6, 6, 6, 12, 9, 4, 58, 46, 33, 23, 14, 0, - 73, 88, 101 }, - - { - - 58, - 7, 77, 58, 7, 77, 99, 81, 16, 10, 5, 16, 29, - 47, 56, 18, 89, 67, 65, 66, 6, 4, 67, 64, 3, - 22, 23, 4, 77, 95, 82, 86, 72, 65, 66, 6, 75, - 77, 11, 12, 67, 77, 86, 2, 77, 84, 97, 6, 71, - 79, 4, 78, 79, 90, 65, 76, 71, 84, 67, 2, 22, - 0, 0, 0, 74, 90, 97, 65, 9, 65, 35, 5, 82, 88, - 73, 79, 8, 0, 78, 74, 92, 75, 89, 84, 91, 80, - 84, 87, 88, 24, 65, 69, 92, 71, 92, 82, 96, 5, - 0, 1, 69, 13, 68, 67, 79, 90, 78, 80, 78, 68, - 75, 87, 81, 68, 92, 82, 14, 6, 77, 81, 1, 73, - 67, 64, 2, 9, 0, 69, 81, 85, 72, 11, 11, 83, - 9, 7, 5, 4, 5, 4, 4, 3, 3, 6, 4, 2, 3, 4, 73, - 67, 5, 68, 13, 20, 22, 15, 7, 19, 12, 15, 6, - 1, 10, 9, 20, 89, 14, 25, 22, 41, 54, 30, 35, - 50, 50, 29, 42, 43, 55, 62, 22, 34, 24, 31, - 41, 33, 45, 52, 59, 24, 24, 37, 30, 62, 0, 55, - 59, 55, 53, 52, 47, 44, 43, 39, 32, 28, 23, - 17, 12, 70, 75, 74, 85, 14, 14, 11, 12, 1, 1, - 0, 10, 70, 73, 72, 84, 77, 106, 89, 7, 9, 10, - 2, 66, 71, 75, 77, 93, 80, 27, 15, 9, 64, 1, - 74, 82, 86, 94, 65, 29, 21, 16, 14, 7, 1, 65, - 69, 77, 68, 38, 30, 21, 6, 10, 65, 73, 81, 8, - 52, 45, 38, 28, 23, 3, 68, 69, 74, 62, 105, - 101, 90, 100, 99, 88, 94, 90, 85, 91, 89, 89, - 85, 86, 87, 94, 86, 83, 78, 78, 76, 73, 71, - 69, 68, 65, 69, 70, 76, 1, 2, 2, 1, 0, 2, 2, - 4, 1, 0, 1, 3, 65, 69, 73, 69, 0, 74, 10, 16, - 10, 15, 10, 12, 13, 10, 9, 4, 10, 4, 69, 68, - 50, 51, 49, 49, 48, 55, 52, 54, 54, 51, 58, - 54, 48, 39, 22, 62, 62, 61, 60, 48, 46, 32, - 27, 24, 19, 9, 3, 67, 76, 59, 60, 60, 55, 50, - 51, 47, 43, 37, 33, 28, 22, 12, 4, 69, 3, 3, - 71, 19, 18, 15, 10, 9, 9, 2, 3, 64, 68, 82, - 75, 85, 94, 6, 70, 75, 80, 75, 67, 74, 0, 8, - 70, 73, 1, 5, 3, 5, 11, 4, 2, 56, 44, 30, 19, - 10, 67, 78, 93, 104, 66, 39, 28, 23, 13, 15, - 6, 2, 0, 75, 78, 73, 65, 72, 3, 9, 67, 70, 2, - 6, 6, 6, 12, 8, 3, 56, 44, 30, 19, 10, 67, 78, - 93, 104 }, - - { - - 57, - 7, 77, 57, 7, 77, 97, 79, 17, 11, 5, 15, 27, - 46, 57, 18, 87, 67, 64, 65, 6, 4, 66, 64, 2, - 21, 21, 1, 79, 96, 79, 85, 71, 64, 65, 6, 75, - 76, 11, 12, 66, 76, 85, 2, 77, 83, 96, 6, 70, - 78, 4, 77, 78, 89, 64, 75, 71, 83, 66, 2, 22, - 0, 0, 0, 73, 90, 97, 64, 9, 65, 35, 5, 82, 85, - 71, 77, 10, 3, 76, 72, 90, 73, 87, 82, 88, 80, - 83, 86, 87, 24, 65, 68, 89, 70, 91, 81, 94, 5, - 0, 1, 69, 14, 68, 66, 78, 89, 77, 79, 77, 67, - 74, 85, 79, 67, 90, 80, 19, 11, 73, 78, 2, 72, - 66, 0, 2, 10, 1, 68, 80, 82, 71, 9, 10, 80, 9, - 8, 5, 5, 6, 5, 6, 4, 4, 6, 4, 2, 4, 5, 74, 66, - 5, 68, 13, 19, 22, 15, 7, 19, 12, 15, 5, 2, - 10, 9, 20, 89, 14, 25, 22, 39, 51, 29, 34, 48, - 48, 27, 40, 41, 49, 62, 19, 32, 23, 29, 38, - 31, 42, 48, 55, 22, 22, 34, 28, 62, 64, 53, - 57, 53, 51, 50, 45, 42, 41, 37, 30, 26, 22, - 16, 11, 71, 75, 74, 85, 14, 13, 10, 11, 0, 0, - 64, 9, 71, 73, 73, 84, 77, 105, 87, 8, 10, 10, - 3, 65, 70, 74, 76, 90, 78, 28, 16, 10, 0, 2, - 72, 80, 84, 92, 64, 30, 22, 17, 15, 8, 2, 64, - 68, 76, 68, 39, 30, 21, 6, 11, 64, 73, 80, 8, - 52, 45, 37, 27, 23, 4, 67, 68, 73, 62, 103, - 99, 88, 98, 97, 86, 92, 88, 83, 89, 87, 86, - 84, 85, 86, 92, 84, 82, 77, 77, 75, 72, 70, - 69, 68, 65, 69, 70, 76, 2, 3, 3, 2, 0, 3, 3, - 4, 2, 1, 1, 3, 64, 68, 72, 68, 1, 74, 9, 16, - 9, 15, 10, 12, 13, 10, 9, 4, 10, 3, 69, 69, - 49, 50, 49, 48, 47, 53, 50, 52, 52, 49, 56, - 52, 45, 37, 20, 61, 60, 57, 56, 45, 43, 30, - 25, 22, 18, 8, 2, 67, 76, 57, 58, 58, 53, 48, - 49, 45, 40, 35, 31, 26, 20, 11, 3, 70, 3, 3, - 72, 18, 17, 14, 8, 8, 8, 1, 2, 65, 69, 82, 76, - 85, 94, 5, 71, 76, 79, 74, 66, 73, 2, 10, 69, - 72, 2, 6, 4, 6, 12, 4, 2, 55, 42, 28, 16, 7, - 71, 82, 97, 106, 65, 39, 29, 24, 14, 16, 7, 3, - 1, 74, 77, 72, 64, 71, 4, 10, 66, 69, 3, 7, 6, - 7, 13, 8, 3, 55, 42, 28, 16, 7, 71, 82, 97, - 106 }, - - { - - 56, - 7, 77, 56, 7, 77, 95, 78, 17, 11, 5, 14, 25, - 45, 57, 18, 85, 67, 64, 64, 6, 3, 66, 65, 0, - 20, 18, 66, 82, 98, 76, 84, 71, 64, 64, 6, 75, - 75, 11, 11, 66, 76, 84, 2, 77, 83, 96, 6, 70, - 78, 4, 77, 78, 89, 64, 75, 71, 83, 66, 2, 22, - 0, 0, 0, 72, 90, 97, 64, 8, 65, 34, 5, 82, 83, - 70, 76, 12, 5, 75, 71, 88, 72, 86, 81, 86, 80, - 83, 86, 87, 24, 65, 67, 87, 70, 90, 80, 92, 5, - 0, 1, 70, 14, 68, 66, 77, 88, 76, 78, 76, 67, - 73, 84, 78, 66, 89, 79, 24, 15, 70, 75, 2, 72, - 66, 0, 2, 10, 1, 68, 80, 80, 71, 7, 8, 77, 9, - 8, 5, 5, 6, 5, 8, 5, 4, 6, 4, 2, 5, 6, 75, 66, - 5, 68, 12, 18, 21, 15, 6, 19, 12, 15, 4, 2, 9, - 8, 19, 89, 14, 24, 21, 37, 48, 28, 32, 46, 46, - 25, 38, 39, 43, 62, 15, 30, 21, 27, 35, 29, - 39, 44, 51, 19, 20, 31, 26, 62, 66, 51, 55, - 51, 49, 48, 43, 40, 39, 35, 28, 24, 20, 14, 9, - 73, 75, 74, 86, 13, 12, 9, 10, 64, 64, 65, 7, - 72, 73, 74, 85, 78, 104, 86, 9, 10, 10, 3, 64, - 69, 73, 75, 88, 77, 28, 16, 10, 1, 3, 71, 78, - 82, 90, 0, 31, 23, 18, 16, 9, 2, 64, 68, 75, - 68, 40, 30, 20, 6, 11, 64, 73, 80, 8, 52, 44, - 36, 26, 23, 4, 67, 68, 73, 62, 102, 98, 87, - 96, 95, 85, 90, 86, 82, 87, 85, 84, 83, 84, - 86, 91, 82, 82, 77, 77, 74, 72, 70, 69, 68, - 66, 69, 70, 76, 2, 3, 4, 2, 0, 3, 3, 4, 2, 1, - 1, 2, 64, 68, 72, 68, 2, 75, 8, 16, 8, 14, 9, - 11, 13, 9, 8, 4, 10, 2, 69, 70, 48, 49, 48, - 46, 45, 51, 48, 50, 50, 46, 53, 49, 42, 34, - 18, 57, 56, 53, 51, 42, 40, 27, 23, 19, 16, 6, - 1, 68, 77, 55, 56, 55, 51, 45, 46, 42, 37, 33, - 28, 24, 17, 9, 1, 72, 2, 2, 74, 17, 16, 12, 6, - 6, 6, 64, 1, 67, 70, 83, 77, 86, 95, 3, 72, - 77, 79, 74, 65, 73, 3, 11, 69, 71, 3, 7, 4, 6, - 13, 4, 2, 54, 40, 25, 13, 4, 75, 86, 101, 109, - 65, 39, 29, 24, 14, 17, 7, 3, 1, 74, 77, 72, - 64, 71, 5, 11, 66, 69, 3, 7, 6, 7, 14, 8, 3, - 54, 40, 25, 13, 4, 75, 86, 101, 109 }, - - { - - 55, - 7, 77, 55, 7, 77, 93, 76, 18, 11, 4, 12, 23, - 44, 57, 18, 83, 67, 0, 0, 6, 3, 66, 65, 64, - 19, 16, 69, 84, 99, 73, 83, 71, 0, 0, 6, 76, - 74, 11, 11, 66, 76, 84, 2, 77, 83, 96, 6, 70, - 77, 4, 77, 77, 89, 64, 75, 71, 83, 66, 2, 22, - 0, 0, 0, 72, 90, 97, 0, 7, 65, 33, 4, 82, 80, - 69, 75, 13, 7, 73, 69, 86, 70, 85, 80, 84, 80, - 83, 85, 87, 24, 65, 66, 85, 70, 89, 80, 90, 5, - 64, 0, 70, 14, 68, 65, 77, 87, 75, 78, 75, 66, - 72, 82, 76, 66, 88, 78, 29, 20, 67, 72, 2, 72, - 66, 1, 2, 10, 2, 67, 79, 78, 71, 5, 6, 74, 9, - 8, 5, 5, 6, 6, 9, 6, 4, 6, 4, 2, 5, 7, 76, 66, - 5, 69, 12, 17, 21, 15, 6, 19, 12, 15, 3, 2, 8, - 7, 19, 89, 14, 24, 21, 35, 45, 27, 30, 44, 43, - 23, 35, 37, 36, 62, 12, 28, 19, 25, 32, 26, - 36, 40, 47, 16, 18, 27, 24, 62, 68, 49, 53, - 49, 46, 45, 41, 38, 37, 33, 26, 22, 18, 12, 8, - 75, 75, 74, 86, 12, 11, 8, 9, 65, 65, 66, 5, - 73, 74, 75, 86, 78, 104, 84, 10, 11, 10, 3, 0, - 69, 73, 75, 86, 76, 28, 16, 11, 2, 4, 70, 77, - 81, 88, 1, 31, 23, 18, 16, 10, 3, 64, 68, 75, - 68, 40, 30, 19, 6, 11, 64, 73, 79, 8, 51, 44, - 35, 25, 23, 4, 67, 68, 73, 62, 101, 96, 86, - 95, 94, 84, 88, 84, 81, 86, 83, 82, 83, 83, - 85, 90, 80, 81, 77, 77, 74, 71, 70, 69, 68, - 66, 69, 70, 77, 3, 4, 5, 2, 0, 4, 3, 4, 2, 1, - 1, 2, 64, 68, 72, 68, 2, 76, 7, 16, 7, 13, 8, - 11, 13, 8, 7, 4, 10, 1, 69, 71, 47, 48, 47, - 45, 43, 49, 46, 48, 47, 44, 50, 46, 39, 32, - 16, 53, 52, 49, 46, 38, 37, 25, 21, 17, 14, 4, - 64, 69, 78, 53, 53, 53, 48, 42, 44, 40, 34, - 30, 26, 21, 14, 7, 64, 73, 1, 1, 75, 15, 14, - 10, 4, 5, 4, 66, 0, 68, 71, 84, 78, 87, 96, 2, - 73, 78, 79, 73, 65, 72, 4, 12, 69, 71, 3, 7, - 4, 7, 14, 4, 2, 53, 38, 23, 10, 1, 79, 90, - 105, 112, 65, 39, 29, 24, 14, 17, 8, 3, 1, 73, - 77, 72, 0, 70, 6, 12, 66, 68, 3, 7, 6, 7, 14, - 8, 3, 53, 38, 23, 10, 1, 79, 90, 105, 112 }, - - { - - 53, - 7, 77, 53, 7, 77, 92, 75, 18, 11, 4, 11, 21, - 43, 57, 17, 81, 67, 0, 1, 5, 2, 66, 66, 66, - 18, 13, 73, 87, 101, 70, 82, 71, 0, 1, 5, 76, - 73, 11, 10, 66, 75, 83, 2, 77, 83, 96, 6, 70, - 77, 4, 77, 77, 88, 64, 75, 71, 83, 65, 2, 22, - 0, 0, 0, 71, 91, 97, 0, 6, 65, 32, 4, 82, 78, - 68, 74, 15, 9, 72, 68, 85, 69, 83, 79, 82, 80, - 82, 85, 87, 24, 65, 65, 83, 70, 89, 79, 88, 5, - 64, 0, 71, 14, 68, 65, 76, 86, 74, 77, 74, 66, - 72, 81, 75, 65, 87, 77, 34, 24, 64, 69, 2, 71, - 66, 1, 2, 10, 2, 67, 79, 76, 71, 3, 4, 72, 9, - 9, 5, 5, 6, 6, 11, 7, 5, 5, 4, 2, 6, 7, 77, - 66, 5, 69, 11, 16, 20, 14, 5, 19, 12, 15, 2, - 2, 7, 6, 18, 89, 13, 23, 20, 33, 41, 26, 28, - 42, 41, 21, 33, 35, 30, 62, 8, 26, 17, 22, 29, - 24, 32, 35, 43, 13, 16, 24, 22, 62, 69, 47, - 51, 46, 44, 43, 39, 36, 35, 31, 23, 20, 16, - 10, 6, 77, 75, 74, 87, 11, 10, 7, 7, 66, 67, - 67, 4, 74, 74, 76, 86, 79, 103, 83, 11, 11, - 10, 4, 0, 68, 72, 74, 84, 74, 28, 17, 11, 2, - 5, 69, 75, 79, 87, 1, 32, 24, 19, 17, 11, 3, - 64, 67, 74, 68, 41, 30, 19, 5, 11, 64, 73, 79, - 8, 51, 43, 34, 24, 23, 4, 66, 68, 73, 62, 99, - 95, 85, 93, 92, 83, 87, 83, 80, 84, 82, 80, - 82, 82, 85, 89, 79, 81, 77, 77, 73, 71, 70, - 70, 68, 67, 69, 70, 77, 3, 4, 6, 2, 0, 4, 3, - 4, 2, 1, 1, 1, 64, 68, 72, 68, 3, 77, 6, 16, - 6, 13, 7, 10, 13, 7, 6, 4, 10, 0, 69, 72, 46, - 47, 46, 43, 41, 47, 44, 45, 45, 41, 47, 43, - 36, 29, 14, 48, 48, 45, 41, 35, 33, 22, 18, - 14, 12, 2, 65, 70, 78, 50, 51, 50, 46, 39, 41, - 37, 31, 28, 23, 19, 11, 5, 66, 75, 0, 1, 77, - 14, 13, 9, 2, 3, 2, 67, 64, 70, 72, 85, 80, - 88, 96, 0, 75, 80, 78, 73, 64, 72, 5, 13, 69, - 70, 4, 8, 4, 7, 15, 4, 2, 52, 36, 20, 7, 66, - 83, 95, 109, 115, 64, 39, 29, 24, 14, 18, 8, - 3, 1, 73, 77, 72, 0, 70, 6, 13, 66, 68, 4, 8, - 6, 7, 15, 8, 3, 52, 36, 20, 7, 66, 83, 95, - 109, 115 }, - - { - - 52, - 7, 77, 52, 7, 77, 90, 73, 18, 11, 3, 10, 19, - 42, 57, 17, 79, 67, 0, 2, 5, 2, 66, 67, 68, - 17, 11, 76, 89, 103, 67, 81, 70, 0, 2, 5, 76, - 72, 11, 10, 66, 75, 82, 2, 77, 83, 96, 6, 70, - 77, 4, 77, 76, 88, 64, 75, 71, 83, 65, 2, 22, - 0, 0, 0, 71, 91, 97, 1, 5, 65, 31, 3, 82, 75, - 67, 73, 17, 11, 70, 66, 83, 67, 82, 78, 79, - 80, 82, 84, 86, 24, 65, 64, 81, 70, 88, 79, - 86, 5, 65, 64, 71, 14, 68, 64, 76, 85, 73, 77, - 73, 65, 71, 79, 73, 64, 85, 76, 39, 28, 2, 66, - 3, 71, 65, 2, 2, 10, 3, 67, 78, 74, 71, 1, 2, - 69, 9, 9, 5, 5, 6, 7, 12, 8, 5, 5, 4, 2, 6, 8, - 78, 65, 5, 70, 11, 15, 20, 14, 5, 19, 12, 15, - 1, 3, 6, 6, 18, 89, 13, 22, 19, 31, 38, 25, - 27, 40, 39, 19, 30, 33, 24, 62, 5, 24, 15, 20, - 26, 21, 29, 31, 39, 11, 14, 20, 20, 62, 71, - 45, 49, 44, 42, 41, 37, 34, 33, 29, 21, 18, - 14, 9, 4, 79, 75, 74, 87, 10, 9, 6, 6, 67, 68, - 68, 2, 75, 75, 77, 87, 80, 102, 81, 12, 12, - 10, 4, 1, 68, 72, 73, 82, 73, 28, 17, 12, 3, - 6, 68, 74, 78, 85, 2, 33, 25, 20, 17, 12, 4, - 0, 67, 74, 68, 41, 30, 18, 5, 11, 64, 73, 78, - 8, 50, 42, 33, 23, 23, 4, 66, 68, 72, 62, 98, - 93, 83, 91, 91, 82, 85, 81, 79, 82, 80, 78, - 81, 81, 84, 88, 77, 81, 77, 76, 73, 70, 70, - 70, 68, 67, 69, 70, 78, 4, 4, 7, 2, 0, 4, 3, - 4, 2, 1, 1, 1, 64, 68, 72, 68, 3, 78, 5, 16, - 5, 12, 7, 9, 13, 7, 5, 4, 10, 64, 69, 73, 45, - 46, 45, 41, 39, 45, 42, 43, 42, 38, 44, 40, - 33, 27, 12, 44, 44, 41, 36, 32, 30, 20, 16, - 12, 10, 1, 67, 70, 79, 48, 48, 48, 44, 36, 38, - 35, 28, 26, 21, 17, 8, 3, 68, 76, 0, 0, 79, - 13, 11, 7, 0, 1, 0, 69, 65, 71, 73, 85, 81, - 89, 97, 64, 76, 81, 78, 73, 0, 71, 6, 14, 68, - 69, 4, 8, 4, 8, 16, 4, 2, 51, 34, 17, 4, 69, - 87, 99, 113, 118, 64, 39, 29, 24, 14, 18, 8, - 4, 2, 72, 77, 72, 1, 70, 7, 14, 66, 68, 4, 8, - 6, 8, 15, 8, 3, 51, 34, 17, 4, 69, 87, 99, - 113, 118 }, - - { - - 51, - 7, 78, 51, 7, 78, 88, 72, 19, 11, 3, 8, 17, - 41, 57, 17, 78, 67, 1, 2, 5, 1, 65, 67, 69, - 15, 8, 80, 92, 104, 65, 80, 70, 1, 2, 5, 77, - 72, 11, 9, 66, 75, 82, 2, 77, 82, 95, 6, 69, - 76, 4, 76, 76, 88, 64, 75, 71, 83, 65, 2, 22, - 0, 0, 0, 70, 91, 97, 1, 5, 66, 31, 3, 82, 73, - 66, 72, 18, 14, 69, 65, 81, 66, 81, 77, 77, - 80, 82, 84, 86, 24, 65, 0, 78, 70, 87, 78, 84, - 4, 65, 64, 72, 15, 68, 64, 75, 85, 73, 76, 72, - 65, 70, 78, 72, 64, 84, 75, 44, 33, 5, 0, 3, - 71, 65, 2, 2, 10, 3, 66, 78, 72, 70, 64, 0, - 66, 9, 9, 5, 5, 7, 7, 14, 9, 5, 5, 4, 2, 7, 9, - 79, 65, 5, 70, 10, 14, 19, 14, 4, 19, 12, 15, - 64, 3, 5, 5, 17, 89, 13, 22, 19, 29, 35, 24, - 25, 37, 36, 17, 28, 31, 17, 62, 1, 22, 14, 18, - 22, 19, 26, 27, 34, 8, 12, 17, 18, 62, 73, 43, - 47, 42, 39, 38, 35, 31, 31, 27, 19, 15, 12, 7, - 3, 80, 75, 74, 88, 9, 8, 5, 5, 68, 69, 69, 0, - 76, 75, 78, 88, 80, 102, 80, 13, 12, 10, 4, 2, - 67, 71, 73, 80, 72, 29, 17, 12, 4, 7, 67, 72, - 76, 83, 3, 33, 25, 20, 18, 13, 4, 0, 67, 73, - 68, 42, 30, 17, 5, 11, 64, 73, 78, 7, 50, 42, - 32, 22, 22, 4, 66, 68, 72, 62, 97, 92, 82, 90, - 89, 81, 83, 79, 78, 81, 78, 76, 81, 80, 84, - 87, 75, 80, 77, 76, 72, 70, 70, 70, 68, 68, - 69, 70, 78, 4, 5, 8, 2, 0, 5, 4, 4, 3, 2, 1, - 0, 64, 68, 72, 68, 4, 79, 4, 16, 4, 11, 6, 9, - 13, 6, 5, 4, 9, 66, 70, 74, 43, 45, 44, 40, - 37, 43, 40, 41, 40, 36, 41, 38, 30, 24, 10, - 40, 40, 37, 32, 28, 27, 17, 14, 9, 8, 64, 68, - 71, 80, 46, 46, 45, 41, 33, 36, 32, 25, 23, - 18, 14, 5, 1, 69, 78, 64, 64, 80, 11, 10, 5, - 65, 0, 65, 71, 66, 73, 74, 86, 82, 90, 98, 66, - 77, 82, 78, 72, 0, 71, 7, 15, 68, 69, 5, 9, 4, - 8, 17, 4, 2, 50, 32, 15, 1, 72, 91, 103, 117, - 121, 64, 39, 29, 24, 14, 19, 9, 4, 2, 72, 76, - 71, 1, 69, 8, 15, 65, 67, 4, 8, 6, 8, 16, 8, - 3, 50, 32, 15, 1, 72, 91, 103, 117, 121 }, - - { - - 50, - 7, 78, 50, 7, 78, 86, 70, 19, 11, 2, 7, 15, - 40, 57, 17, 76, 67, 1, 3, 4, 1, 65, 68, 71, - 14, 6, 83, 94, 106, 1, 79, 70, 1, 3, 4, 77, - 71, 11, 9, 66, 74, 81, 2, 77, 82, 95, 6, 69, - 76, 4, 76, 75, 87, 64, 75, 71, 83, 64, 2, 22, - 0, 0, 0, 70, 91, 97, 2, 4, 66, 30, 2, 82, 70, - 65, 71, 20, 16, 67, 0, 80, 64, 79, 76, 75, 80, - 81, 83, 86, 24, 65, 1, 76, 70, 86, 78, 82, 4, - 66, 65, 72, 15, 68, 0, 75, 84, 72, 76, 71, 64, - 69, 76, 70, 0, 83, 74, 49, 37, 8, 3, 3, 70, - 65, 3, 2, 10, 4, 66, 77, 70, 70, 66, 65, 0, 9, - 10, 5, 5, 7, 8, 15, 10, 6, 4, 4, 2, 7, 9, 80, - 65, 5, 71, 10, 13, 19, 13, 4, 19, 12, 15, 65, - 3, 4, 4, 17, 89, 13, 21, 18, 27, 32, 23, 23, - 35, 34, 15, 25, 29, 11, 62, 65, 20, 12, 15, - 19, 16, 23, 22, 30, 5, 10, 13, 16, 62, 74, 41, - 45, 40, 37, 36, 33, 29, 29, 25, 16, 13, 10, 5, - 1, 82, 75, 74, 88, 8, 7, 4, 3, 69, 70, 70, 64, - 77, 76, 79, 88, 81, 101, 78, 14, 13, 10, 5, 2, - 67, 71, 72, 78, 70, 29, 18, 13, 4, 8, 66, 71, - 75, 81, 3, 34, 26, 21, 18, 14, 5, 0, 66, 73, - 68, 42, 30, 17, 4, 11, 64, 73, 77, 7, 49, 41, - 31, 21, 22, 4, 65, 68, 72, 62, 95, 90, 81, 88, - 88, 80, 82, 78, 77, 79, 77, 74, 80, 79, 83, - 86, 73, 80, 77, 76, 72, 69, 70, 71, 68, 68, - 69, 70, 79, 5, 5, 9, 2, 0, 5, 4, 4, 3, 2, 1, - 0, 64, 68, 72, 68, 4, 80, 3, 16, 3, 11, 5, 8, - 13, 5, 4, 4, 9, 67, 70, 75, 42, 44, 43, 38, - 35, 41, 38, 38, 37, 33, 38, 35, 27, 22, 8, 35, - 36, 33, 27, 25, 24, 15, 12, 7, 6, 66, 70, 72, - 80, 43, 43, 43, 39, 30, 33, 30, 22, 21, 16, - 12, 2, 64, 71, 79, 65, 64, 82, 10, 8, 4, 67, - 65, 67, 72, 67, 74, 75, 87, 84, 91, 98, 67, - 79, 84, 77, 72, 1, 70, 8, 16, 68, 68, 5, 9, 4, - 9, 18, 4, 2, 49, 30, 12, 65, 76, 95, 107, 121, - 124, 0, 39, 29, 24, 14, 19, 9, 4, 2, 71, 76, - 71, 2, 69, 9, 16, 65, 67, 5, 9, 6, 8, 16, 8, - 3, 49, 30, 12, 65, 76, 95, 107, 121, 124 }, - - { - - 48, - 6, 78, 48, 6, 78, 85, 69, 19, 11, 2, 5, 12, - 39, 57, 16, 74, 68, 1, 4, 4, 0, 65, 69, 73, - 13, 3, 87, 97, 108, 4, 78, 70, 1, 4, 4, 78, - 70, 11, 8, 66, 74, 81, 1, 78, 82, 95, 6, 69, - 76, 4, 76, 75, 87, 64, 75, 71, 83, 64, 2, 22, - 0, 0, 0, 69, 92, 97, 2, 3, 66, 29, 2, 83, 68, - 64, 70, 21, 18, 66, 1, 78, 0, 78, 75, 73, 80, - 81, 83, 86, 24, 65, 2, 74, 70, 86, 77, 80, 4, - 66, 65, 73, 15, 68, 0, 74, 83, 71, 75, 71, 64, - 69, 75, 69, 0, 82, 73, 53, 41, 11, 5, 3, 70, - 65, 3, 1, 10, 4, 66, 77, 68, 70, 68, 67, 2, 9, - 10, 5, 5, 7, 8, 17, 10, 6, 4, 3, 2, 8, 10, 82, - 65, 5, 71, 9, 11, 18, 13, 3, 19, 12, 14, 66, - 3, 3, 3, 16, 89, 12, 20, 17, 25, 28, 21, 21, - 33, 31, 12, 23, 27, 4, 62, 69, 18, 10, 13, 16, - 14, 19, 18, 26, 2, 8, 10, 14, 62, 76, 39, 42, - 37, 34, 33, 30, 27, 26, 23, 14, 11, 8, 3, 64, - 84, 75, 75, 89, 7, 5, 3, 2, 70, 72, 72, 66, - 78, 76, 80, 89, 82, 101, 77, 15, 13, 10, 5, 3, - 66, 70, 72, 76, 69, 29, 18, 13, 5, 9, 65, 69, - 73, 80, 4, 34, 26, 21, 19, 15, 5, 0, 66, 72, - 69, 43, 30, 16, 4, 11, 64, 73, 77, 7, 49, 40, - 30, 20, 22, 4, 65, 68, 72, 62, 94, 89, 80, 87, - 86, 79, 80, 76, 76, 78, 75, 72, 80, 79, 83, - 85, 72, 80, 77, 76, 71, 69, 70, 71, 68, 69, - 69, 70, 79, 5, 5, 10, 2, 64, 5, 4, 3, 3, 2, 1, - 64, 64, 68, 72, 68, 5, 81, 2, 16, 1, 10, 4, 7, - 12, 4, 3, 4, 9, 68, 70, 77, 41, 42, 42, 36, - 33, 39, 36, 36, 35, 30, 35, 32, 24, 19, 6, 31, - 32, 28, 22, 21, 20, 12, 9, 4, 4, 68, 71, 73, - 81, 41, 41, 40, 36, 27, 30, 27, 19, 18, 13, 9, - 64, 66, 73, 81, 66, 65, 84, 8, 7, 2, 69, 67, - 69, 74, 69, 76, 77, 88, 85, 92, 99, 69, 80, - 85, 77, 72, 1, 70, 9, 17, 68, 68, 6, 10, 4, 9, - 18, 4, 1, 48, 28, 9, 68, 79, 99, 112, 126, - 126, 0, 39, 29, 24, 14, 20, 9, 4, 2, 71, 76, - 71, 2, 69, 9, 16, 65, 67, 5, 9, 6, 8, 17, 8, - 2, 48, 28, 9, 68, 79, 99, 112, 126, 126 }, - - { - - 47, - 6, 78, 47, 6, 78, 83, 68, 20, 11, 2, 4, 10, - 38, 58, 16, 72, 68, 2, 5, 4, 64, 65, 69, 74, - 12, 1, 91, 100, 109, 7, 77, 69, 2, 5, 4, 78, - 69, 11, 8, 65, 74, 80, 1, 78, 82, 95, 6, 69, - 75, 4, 76, 75, 87, 64, 75, 71, 82, 64, 2, 22, - 0, 0, 0, 68, 92, 97, 2, 2, 66, 28, 2, 83, 66, - 1, 69, 23, 20, 64, 2, 76, 2, 77, 73, 70, 80, - 81, 83, 85, 24, 65, 3, 72, 69, 85, 76, 78, 4, - 66, 65, 73, 15, 68, 0, 73, 82, 70, 74, 70, 0, - 68, 74, 67, 1, 80, 72, 58, 46, 15, 8, 4, 70, - 64, 4, 1, 10, 4, 65, 76, 65, 70, 70, 68, 5, 9, - 10, 5, 5, 7, 9, 19, 11, 6, 4, 3, 2, 9, 11, 83, - 64, 5, 71, 8, 10, 17, 13, 2, 19, 12, 14, 67, - 4, 2, 3, 15, 89, 12, 20, 17, 23, 25, 20, 20, - 31, 29, 10, 21, 25, 65, 62, 72, 16, 8, 11, 13, - 12, 16, 14, 22, 0, 6, 7, 12, 62, 78, 37, 40, - 35, 32, 31, 28, 25, 24, 21, 12, 9, 7, 2, 65, - 86, 75, 75, 89, 7, 4, 2, 1, 71, 73, 73, 68, - 79, 76, 81, 90, 82, 100, 76, 16, 13, 10, 5, 4, - 65, 69, 71, 73, 68, 29, 18, 13, 6, 10, 64, 67, - 71, 78, 5, 35, 27, 22, 20, 16, 5, 1, 66, 71, - 69, 44, 30, 15, 4, 12, 0, 73, 76, 7, 49, 40, - 29, 19, 22, 4, 65, 68, 71, 62, 93, 88, 78, 85, - 84, 78, 78, 74, 75, 76, 73, 70, 79, 78, 82, - 84, 70, 79, 76, 75, 70, 68, 70, 71, 68, 70, - 69, 70, 79, 5, 6, 11, 3, 64, 6, 4, 3, 3, 2, 1, - 65, 64, 67, 71, 68, 6, 81, 1, 16, 0, 9, 4, 7, - 12, 4, 2, 4, 9, 69, 70, 78, 40, 41, 42, 35, - 31, 37, 34, 34, 33, 28, 32, 29, 21, 16, 4, 27, - 28, 24, 17, 18, 17, 9, 7, 2, 3, 69, 72, 73, - 82, 39, 39, 38, 34, 25, 28, 25, 16, 16, 11, 7, - 66, 68, 75, 83, 66, 66, 85, 7, 6, 0, 71, 68, - 70, 76, 70, 78, 78, 88, 86, 92, 100, 71, 81, - 86, 77, 71, 2, 70, 10, 19, 67, 67, 7, 11, 4, - 10, 19, 4, 1, 47, 26, 7, 71, 82, 103, 116, - 126, 126, 0, 39, 29, 25, 15, 21, 10, 5, 3, 71, - 76, 71, 2, 68, 10, 17, 65, 66, 5, 9, 6, 9, 18, - 8, 2, 47, 26, 7, 71, 82, 103, 116, 126, 126 }, - - { - - 46, - 6, 78, 46, 6, 78, 81, 66, 20, 11, 1, 3, 8, 37, - 58, 16, 70, 68, 2, 6, 3, 64, 65, 70, 76, 11, - 65, 94, 102, 111, 10, 76, 69, 2, 6, 3, 78, 68, - 11, 7, 65, 73, 79, 1, 78, 82, 95, 6, 69, 75, - 4, 76, 74, 86, 64, 75, 71, 82, 0, 2, 22, 0, 0, - 0, 68, 92, 97, 3, 1, 66, 27, 1, 83, 0, 2, 68, - 25, 22, 0, 4, 75, 3, 75, 72, 68, 80, 80, 82, - 85, 24, 65, 4, 70, 69, 84, 76, 76, 4, 67, 66, - 74, 15, 68, 1, 73, 81, 69, 74, 69, 0, 67, 72, - 66, 2, 79, 71, 62, 50, 18, 11, 4, 69, 64, 4, - 1, 10, 5, 65, 76, 0, 70, 72, 70, 8, 9, 11, 5, - 5, 7, 9, 20, 12, 7, 3, 3, 2, 9, 11, 84, 64, 5, - 72, 8, 9, 17, 12, 2, 19, 12, 14, 68, 4, 1, 2, - 15, 89, 12, 19, 16, 21, 22, 19, 18, 29, 27, 8, - 18, 23, 71, 62, 76, 14, 6, 8, 10, 9, 13, 9, - 18, 66, 4, 3, 10, 62, 79, 35, 38, 33, 30, 29, - 26, 23, 22, 19, 9, 7, 5, 0, 67, 88, 75, 75, - 90, 6, 3, 1, 64, 72, 74, 74, 69, 80, 77, 82, - 90, 83, 99, 74, 17, 14, 10, 6, 4, 65, 69, 70, - 71, 66, 29, 19, 14, 6, 11, 0, 66, 70, 76, 5, - 36, 28, 23, 20, 17, 6, 1, 65, 71, 69, 44, 30, - 15, 3, 12, 0, 73, 76, 7, 48, 39, 28, 18, 22, - 4, 64, 68, 71, 62, 91, 86, 77, 83, 83, 77, 77, - 73, 74, 74, 72, 68, 78, 77, 82, 83, 68, 79, - 76, 75, 70, 68, 70, 72, 68, 70, 69, 70, 80, 6, - 6, 12, 3, 64, 6, 4, 3, 3, 2, 1, 65, 64, 67, - 71, 68, 6, 82, 0, 16, 64, 9, 3, 6, 12, 3, 1, - 4, 9, 70, 70, 79, 39, 40, 41, 33, 29, 35, 32, - 31, 30, 25, 29, 26, 18, 14, 2, 22, 24, 20, 12, - 15, 14, 7, 5, 64, 1, 71, 74, 74, 82, 36, 36, - 35, 32, 22, 25, 22, 13, 14, 8, 5, 69, 70, 77, - 84, 67, 66, 87, 6, 4, 64, 73, 70, 72, 77, 71, - 79, 79, 89, 88, 93, 100, 72, 83, 88, 76, 71, - 3, 69, 11, 20, 67, 66, 7, 11, 4, 10, 20, 4, 1, - 46, 24, 4, 74, 86, 107, 120, 126, 126, 1, 39, - 29, 25, 15, 21, 10, 5, 3, 70, 76, 71, 3, 68, - 11, 18, 65, 66, 6, 10, 6, 9, 18, 8, 2, 46, 24, - 4, 74, 86, 107, 120, 126, 126 }, - - { - - 45, - 6, 79, 45, 6, 79, 79, 65, 21, 11, 1, 1, 6, 36, - 58, 16, 69, 68, 3, 6, 3, 65, 64, 70, 77, 9, - 67, 98, 105, 112, 12, 75, 69, 3, 6, 3, 79, 68, - 11, 7, 65, 73, 79, 1, 78, 81, 94, 6, 68, 74, - 4, 75, 74, 86, 64, 75, 71, 82, 0, 2, 22, 0, 0, - 0, 67, 92, 97, 3, 1, 67, 27, 1, 83, 2, 3, 67, - 26, 25, 2, 5, 73, 5, 74, 71, 66, 80, 80, 82, - 85, 24, 65, 5, 67, 69, 83, 75, 74, 3, 67, 66, - 74, 16, 68, 1, 72, 81, 69, 73, 68, 1, 66, 71, - 64, 2, 78, 70, 62, 55, 21, 14, 4, 69, 64, 5, - 1, 10, 5, 64, 75, 2, 69, 74, 72, 11, 9, 11, 5, - 5, 8, 10, 22, 13, 7, 3, 3, 2, 10, 12, 85, 64, - 5, 72, 7, 8, 16, 12, 1, 19, 12, 14, 70, 4, 0, - 1, 14, 89, 12, 19, 16, 19, 19, 18, 16, 26, 24, - 6, 16, 21, 78, 62, 79, 12, 5, 6, 6, 7, 10, 5, - 13, 69, 2, 0, 8, 62, 81, 33, 36, 31, 27, 26, - 24, 20, 20, 17, 7, 4, 3, 65, 68, 89, 75, 75, - 90, 5, 2, 0, 65, 73, 75, 75, 71, 81, 77, 83, - 91, 83, 99, 73, 18, 14, 10, 6, 5, 64, 68, 70, - 69, 65, 30, 19, 14, 7, 12, 1, 64, 68, 74, 6, - 36, 28, 23, 21, 18, 6, 1, 65, 70, 69, 45, 30, - 14, 3, 12, 0, 73, 75, 6, 48, 39, 27, 17, 21, - 4, 64, 68, 71, 62, 90, 85, 76, 82, 81, 76, 75, - 71, 73, 73, 70, 66, 78, 76, 81, 82, 66, 78, - 76, 75, 69, 67, 70, 72, 68, 71, 69, 70, 80, 6, - 7, 13, 3, 64, 7, 5, 3, 4, 3, 1, 66, 64, 67, - 71, 68, 7, 83, 64, 16, 65, 8, 2, 6, 12, 2, 1, - 4, 8, 72, 71, 80, 37, 39, 40, 32, 27, 33, 30, - 29, 28, 23, 26, 24, 15, 11, 0, 18, 20, 16, 8, - 11, 11, 4, 3, 66, 64, 73, 75, 75, 83, 34, 34, - 33, 29, 19, 23, 20, 10, 11, 6, 2, 72, 72, 78, - 86, 68, 67, 88, 4, 3, 66, 75, 71, 74, 79, 72, - 81, 80, 90, 89, 94, 101, 74, 84, 89, 76, 70, - 3, 69, 12, 21, 67, 66, 8, 12, 4, 11, 21, 4, 1, - 45, 22, 2, 77, 89, 111, 124, 126, 126, 1, 39, - 29, 25, 15, 22, 11, 5, 3, 70, 75, 70, 3, 67, - 12, 19, 64, 65, 6, 10, 6, 9, 19, 8, 2, 45, 22, - 2, 77, 89, 111, 124, 126, 126 }, - - { - - 43, - 6, 79, 43, 6, 79, 78, 0, 21, 11, 0, 0, 4, 35, - 58, 15, 67, 68, 3, 7, 3, 65, 64, 71, 79, 8, - 70, 101, 107, 114, 15, 74, 69, 3, 7, 3, 79, - 67, 11, 6, 65, 73, 78, 1, 78, 81, 94, 6, 68, - 74, 4, 75, 73, 86, 64, 75, 71, 82, 0, 2, 22, - 0, 0, 0, 67, 93, 97, 4, 0, 67, 26, 0, 83, 5, - 4, 66, 28, 27, 3, 7, 71, 6, 73, 70, 64, 80, - 80, 81, 85, 24, 65, 6, 65, 69, 83, 75, 72, 3, - 68, 67, 75, 16, 68, 2, 72, 80, 68, 73, 67, 1, - 66, 69, 0, 3, 77, 69, 62, 59, 24, 17, 4, 69, - 64, 5, 1, 10, 6, 64, 75, 4, 69, 76, 74, 13, 9, - 11, 5, 5, 8, 10, 23, 14, 7, 3, 3, 2, 10, 13, - 86, 64, 5, 73, 7, 7, 16, 12, 1, 19, 12, 14, - 71, 4, 64, 0, 14, 89, 11, 18, 15, 17, 15, 17, - 14, 24, 22, 4, 13, 19, 84, 62, 83, 10, 3, 4, - 3, 4, 6, 1, 9, 72, 0, 67, 6, 62, 83, 31, 34, - 28, 25, 24, 22, 18, 18, 15, 5, 2, 1, 67, 70, - 91, 75, 75, 91, 4, 1, 64, 66, 74, 77, 76, 73, - 82, 78, 84, 92, 84, 98, 71, 19, 15, 10, 6, 6, - 64, 68, 69, 67, 64, 30, 19, 15, 8, 13, 2, 0, - 67, 73, 7, 37, 29, 24, 21, 19, 7, 1, 65, 70, - 69, 45, 30, 13, 3, 12, 0, 73, 75, 6, 47, 38, - 26, 16, 21, 4, 64, 68, 71, 62, 89, 83, 75, 80, - 80, 75, 73, 69, 72, 71, 68, 64, 77, 75, 81, - 81, 65, 78, 76, 75, 69, 67, 70, 72, 68, 71, - 69, 70, 81, 7, 7, 14, 3, 64, 7, 5, 3, 4, 3, 1, - 66, 64, 67, 71, 68, 7, 84, 65, 16, 66, 7, 1, - 5, 12, 1, 0, 4, 8, 73, 71, 81, 36, 38, 39, 30, - 25, 31, 28, 27, 25, 20, 23, 21, 12, 9, 65, 14, - 16, 12, 3, 8, 7, 2, 0, 69, 66, 75, 77, 76, 84, - 32, 31, 30, 27, 16, 20, 17, 7, 9, 3, 0, 75, - 74, 80, 87, 69, 68, 90, 3, 1, 68, 77, 73, 76, - 81, 73, 82, 81, 91, 90, 95, 102, 75, 85, 90, - 76, 70, 4, 68, 13, 22, 67, 65, 8, 12, 4, 11, - 22, 4, 1, 44, 20, 64, 80, 92, 115, 126, 126, - 126, 1, 39, 29, 25, 15, 22, 11, 5, 3, 69, 75, - 70, 4, 67, 12, 20, 64, 65, 6, 10, 6, 9, 19, 8, - 2, 44, 20, 64, 80, 92, 115, 126, 126, 126 }, - - { - - 42, - 6, 79, 42, 6, 79, 76, 1, 21, 11, 0, 64, 2, 34, - 58, 15, 65, 68, 3, 8, 2, 66, 64, 72, 81, 7, - 72, 105, 110, 116, 18, 73, 68, 3, 8, 2, 79, - 66, 11, 6, 65, 72, 77, 1, 78, 81, 94, 6, 68, - 74, 4, 75, 73, 85, 64, 75, 71, 82, 1, 2, 22, - 0, 0, 0, 66, 93, 97, 4, 64, 67, 25, 0, 83, 7, - 5, 65, 30, 29, 5, 8, 70, 8, 71, 69, 2, 80, 79, - 81, 84, 24, 65, 7, 0, 69, 82, 74, 70, 3, 68, - 67, 75, 16, 68, 2, 71, 79, 67, 72, 66, 2, 65, - 68, 2, 4, 75, 68, 62, 62, 27, 20, 5, 68, 0, 6, - 1, 10, 6, 64, 74, 6, 69, 78, 76, 16, 9, 12, 5, - 5, 8, 11, 25, 15, 8, 2, 3, 2, 11, 13, 87, 0, - 5, 73, 6, 6, 15, 11, 0, 19, 12, 14, 72, 5, 65, - 0, 13, 89, 11, 17, 14, 15, 12, 16, 13, 22, 20, - 2, 11, 17, 90, 62, 86, 8, 1, 1, 0, 2, 3, 67, - 5, 74, 65, 70, 4, 62, 84, 29, 32, 26, 23, 22, - 20, 16, 16, 13, 2, 0, 64, 68, 72, 93, 75, 75, - 91, 3, 0, 65, 68, 75, 78, 77, 74, 83, 78, 85, - 92, 85, 97, 70, 20, 15, 10, 7, 6, 0, 67, 68, - 65, 1, 30, 20, 15, 8, 14, 3, 2, 65, 71, 7, 38, - 30, 25, 22, 20, 7, 2, 64, 69, 69, 46, 30, 13, - 2, 12, 0, 73, 74, 6, 47, 37, 25, 15, 21, 4, 0, - 68, 70, 62, 87, 82, 73, 78, 78, 74, 72, 68, - 71, 69, 67, 1, 76, 74, 80, 80, 0, 78, 76, 74, - 68, 66, 70, 73, 68, 72, 69, 70, 81, 7, 7, 15, - 3, 64, 7, 5, 3, 4, 3, 1, 67, 64, 67, 71, 68, - 8, 85, 66, 16, 67, 7, 1, 4, 12, 1, 64, 4, 8, - 74, 71, 82, 35, 37, 38, 28, 23, 29, 26, 24, - 23, 17, 20, 18, 9, 6, 67, 9, 12, 8, 65, 5, 4, - 64, 65, 71, 68, 76, 78, 76, 84, 29, 29, 28, - 25, 13, 17, 15, 4, 7, 1, 65, 78, 76, 82, 89, - 69, 68, 92, 2, 0, 69, 79, 75, 78, 82, 74, 84, - 82, 91, 92, 96, 102, 77, 87, 92, 75, 70, 5, - 68, 14, 23, 66, 64, 9, 13, 4, 12, 23, 4, 1, - 43, 18, 67, 83, 96, 119, 126, 126, 126, 2, 39, - 29, 25, 15, 23, 11, 6, 4, 69, 75, 70, 4, 67, - 13, 21, 64, 65, 7, 11, 6, 10, 20, 8, 2, 43, - 18, 67, 83, 96, 119, 126, 126, 126 }, - - { - - 41, - 6, 79, 41, 6, 79, 74, 3, 22, 11, 64, 66, 0, - 33, 58, 15, 0, 68, 4, 9, 2, 66, 64, 72, 82, 6, - 75, 108, 112, 117, 21, 72, 68, 4, 9, 2, 80, - 65, 11, 5, 65, 72, 77, 1, 78, 81, 94, 6, 68, - 73, 4, 75, 72, 85, 64, 75, 71, 82, 1, 2, 22, - 0, 0, 0, 66, 93, 97, 5, 65, 67, 24, 64, 83, - 10, 6, 64, 31, 31, 6, 10, 68, 9, 70, 68, 4, - 80, 79, 80, 84, 24, 65, 8, 2, 69, 81, 74, 68, - 3, 69, 68, 76, 16, 68, 3, 71, 78, 66, 72, 65, - 2, 64, 66, 3, 4, 74, 67, 62, 62, 30, 23, 5, - 68, 0, 6, 1, 10, 7, 0, 74, 8, 69, 80, 78, 19, - 9, 12, 5, 5, 8, 11, 26, 16, 8, 2, 3, 2, 11, - 14, 88, 0, 5, 74, 6, 5, 15, 11, 0, 19, 12, 14, - 73, 5, 66, 64, 13, 89, 11, 17, 14, 13, 9, 15, - 11, 20, 17, 0, 8, 15, 97, 62, 90, 6, 64, 64, - 66, 64, 0, 71, 1, 77, 67, 74, 2, 62, 86, 27, - 30, 24, 20, 19, 18, 14, 14, 11, 0, 65, 66, 70, - 73, 95, 75, 75, 92, 2, 64, 66, 69, 76, 79, 78, - 76, 84, 79, 86, 93, 85, 97, 68, 21, 16, 10, 7, - 7, 0, 67, 68, 0, 2, 30, 20, 16, 9, 15, 4, 3, - 64, 69, 8, 38, 30, 25, 22, 21, 8, 2, 64, 69, - 69, 46, 30, 12, 2, 12, 0, 73, 74, 6, 46, 37, - 24, 14, 21, 4, 0, 68, 70, 62, 86, 80, 72, 77, - 77, 73, 70, 66, 70, 68, 65, 3, 76, 73, 80, 79, - 2, 77, 76, 74, 68, 66, 70, 73, 68, 72, 69, 70, - 82, 8, 8, 16, 3, 64, 8, 5, 3, 4, 3, 1, 67, 64, - 67, 71, 68, 8, 86, 67, 16, 68, 6, 0, 4, 12, 0, - 65, 4, 8, 75, 71, 83, 34, 36, 37, 27, 21, 27, - 24, 22, 20, 15, 17, 15, 6, 4, 69, 5, 8, 4, 70, - 1, 1, 66, 67, 74, 70, 78, 80, 77, 85, 27, 26, - 25, 22, 10, 15, 12, 1, 4, 65, 68, 81, 78, 84, - 90, 70, 69, 93, 0, 65, 71, 81, 76, 80, 84, 75, - 85, 83, 92, 93, 97, 103, 78, 88, 93, 75, 69, - 5, 67, 15, 24, 66, 64, 9, 13, 4, 12, 24, 4, 1, - 42, 16, 69, 86, 99, 123, 126, 126, 126, 2, 39, - 29, 25, 15, 23, 12, 6, 4, 68, 75, 70, 5, 66, - 14, 22, 64, 64, 7, 11, 6, 10, 20, 8, 2, 42, - 16, 69, 86, 99, 123, 126, 126, 126 }, - - { - - 40, - 6, 79, 40, 6, 79, 72, 4, 22, 11, 64, 67, 65, - 32, 58, 15, 2, 68, 4, 10, 2, 67, 64, 73, 84, - 5, 77, 112, 115, 119, 24, 71, 68, 4, 10, 2, - 80, 64, 11, 5, 65, 72, 76, 1, 78, 81, 94, 6, - 68, 73, 4, 75, 72, 85, 64, 75, 71, 82, 1, 2, - 22, 0, 0, 0, 65, 93, 97, 5, 66, 67, 23, 64, - 83, 12, 7, 0, 33, 33, 8, 11, 66, 11, 69, 67, - 6, 80, 79, 80, 84, 24, 65, 9, 4, 69, 80, 73, - 66, 3, 69, 68, 76, 16, 68, 3, 70, 77, 65, 71, - 64, 3, 0, 65, 5, 5, 73, 66, 62, 62, 33, 26, 5, - 68, 0, 7, 1, 10, 7, 0, 73, 10, 69, 82, 80, 22, - 9, 12, 5, 5, 8, 12, 28, 17, 8, 2, 3, 2, 12, - 15, 89, 0, 5, 74, 5, 4, 14, 11, 64, 19, 12, - 14, 74, 5, 67, 65, 12, 89, 11, 16, 13, 11, 6, - 14, 9, 18, 15, 65, 6, 13, 103, 62, 93, 4, 66, - 66, 69, 66, 66, 75, 66, 80, 69, 77, 0, 62, 88, - 25, 28, 22, 18, 17, 16, 12, 12, 9, 65, 67, 68, - 72, 75, 97, 75, 75, 92, 1, 65, 67, 70, 77, 80, - 79, 78, 85, 79, 87, 94, 86, 96, 67, 22, 16, - 10, 7, 8, 1, 66, 67, 2, 3, 30, 20, 16, 10, 16, - 5, 5, 1, 67, 9, 39, 31, 26, 23, 22, 8, 2, 64, - 68, 69, 47, 30, 11, 2, 12, 0, 73, 73, 6, 46, - 36, 23, 13, 21, 4, 0, 68, 70, 62, 85, 79, 71, - 75, 75, 72, 68, 64, 69, 66, 0, 5, 75, 72, 79, - 78, 4, 77, 76, 74, 67, 65, 70, 73, 68, 73, 69, - 70, 82, 8, 8, 17, 3, 64, 8, 5, 3, 4, 3, 1, 68, - 64, 67, 71, 68, 9, 87, 68, 16, 69, 5, 64, 3, - 12, 64, 66, 4, 8, 76, 71, 84, 33, 35, 36, 25, - 19, 25, 22, 20, 18, 12, 14, 12, 3, 1, 71, 1, - 4, 0, 75, 65, 65, 69, 69, 76, 72, 80, 81, 78, - 86, 25, 24, 23, 20, 7, 12, 10, 65, 2, 67, 70, - 84, 80, 86, 92, 71, 70, 95, 64, 66, 73, 83, - 78, 82, 86, 76, 87, 84, 93, 94, 98, 104, 80, - 89, 94, 75, 69, 6, 67, 16, 25, 66, 0, 10, 14, - 4, 13, 25, 4, 1, 41, 14, 72, 89, 102, 126, - 126, 126, 126, 2, 39, 29, 25, 15, 24, 12, 6, - 4, 68, 75, 70, 5, 66, 15, 23, 64, 64, 7, 11, - 6, 10, 21, 8, 2, 41, 14, 72, 89, 102, 126, - 126, 126, 126 }, - - { - - 38, - 5, 80, 38, 5, 80, 71, 5, 22, 11, 65, 69, 68, - 31, 58, 14, 3, 69, 4, 10, 1, 68, 64, 74, 86, - 3, 80, 116, 118, 121, 26, 71, 68, 4, 10, 1, - 81, 64, 11, 4, 65, 72, 76, 0, 79, 81, 94, 5, - 68, 73, 4, 75, 72, 85, 64, 75, 72, 82, 1, 2, - 22, 0, 0, 0, 65, 94, 97, 5, 67, 68, 22, 65, - 84, 14, 8, 1, 34, 35, 9, 12, 65, 12, 68, 66, - 8, 80, 79, 80, 84, 24, 65, 9, 6, 69, 80, 73, - 65, 2, 70, 69, 77, 16, 68, 3, 70, 77, 65, 71, - 64, 3, 0, 64, 6, 5, 72, 65, 62, 62, 36, 28, 5, - 68, 0, 7, 0, 10, 7, 0, 73, 12, 69, 84, 82, 24, - 9, 12, 5, 5, 8, 12, 29, 17, 8, 1, 2, 2, 12, - 15, 91, 0, 5, 75, 4, 2, 13, 10, 65, 19, 12, - 13, 76, 5, 68, 66, 11, 89, 10, 15, 12, 8, 2, - 12, 7, 15, 12, 68, 3, 11, 110, 62, 97, 1, 68, - 69, 73, 69, 70, 80, 71, 83, 71, 81, 65, 62, - 90, 22, 25, 19, 15, 14, 13, 9, 9, 7, 68, 70, - 70, 74, 77, 99, 75, 76, 93, 0, 67, 69, 72, 79, - 82, 81, 80, 86, 80, 88, 95, 87, 96, 66, 22, - 16, 10, 7, 8, 1, 66, 67, 4, 4, 30, 20, 16, 10, - 16, 6, 6, 2, 66, 9, 39, 31, 26, 23, 23, 8, 2, - 64, 68, 70, 47, 29, 10, 1, 12, 0, 73, 73, 5, - 45, 35, 21, 12, 20, 4, 0, 68, 70, 62, 84, 78, - 70, 74, 74, 71, 67, 0, 68, 65, 1, 7, 75, 72, - 79, 77, 5, 77, 76, 74, 67, 65, 70, 74, 69, 74, - 69, 71, 83, 8, 8, 18, 3, 65, 8, 5, 2, 4, 3, 1, - 69, 64, 67, 71, 68, 9, 88, 69, 16, 71, 4, 65, - 2, 11, 65, 67, 4, 7, 78, 72, 86, 31, 33, 35, - 23, 17, 22, 19, 17, 15, 9, 11, 9, 64, 65, 73, - 67, 0, 68, 80, 69, 69, 72, 72, 79, 74, 82, 83, - 79, 87, 22, 21, 20, 17, 4, 9, 7, 69, 64, 70, - 73, 87, 82, 88, 94, 72, 71, 97, 66, 68, 75, - 86, 80, 84, 88, 78, 89, 86, 94, 96, 99, 105, - 82, 91, 96, 75, 69, 6, 67, 17, 26, 66, 0, 10, - 14, 4, 13, 25, 4, 0, 39, 12, 75, 93, 106, 126, - 126, 126, 126, 2, 39, 29, 25, 15, 24, 12, 6, - 4, 68, 75, 70, 5, 66, 15, 23, 64, 64, 7, 11, - 6, 10, 21, 7, 1, 39, 12, 75, 93, 106, 126, - 126, 126, 126 }, - - { - - 37, - 5, 80, 37, 5, 80, 69, 7, 23, 12, 65, 70, 70, - 30, 59, 14, 5, 69, 5, 11, 1, 68, 0, 74, 87, 2, - 82, 119, 120, 122, 29, 70, 67, 5, 11, 1, 81, - 0, 11, 4, 64, 71, 75, 0, 79, 80, 93, 5, 67, - 72, 4, 74, 71, 84, 0, 74, 72, 81, 2, 2, 22, 0, - 0, 0, 64, 94, 97, 6, 67, 68, 22, 65, 84, 17, - 10, 3, 36, 38, 11, 14, 0, 14, 66, 64, 11, 80, - 78, 79, 83, 24, 65, 10, 9, 68, 79, 72, 0, 2, - 70, 69, 77, 17, 68, 4, 69, 76, 64, 70, 0, 4, - 1, 1, 8, 6, 70, 0, 62, 62, 40, 31, 6, 67, 1, - 8, 0, 11, 8, 1, 72, 15, 68, 86, 83, 27, 9, 13, - 5, 6, 9, 13, 31, 18, 9, 1, 2, 2, 13, 16, 92, - 1, 5, 75, 4, 1, 13, 10, 65, 19, 12, 13, 77, 6, - 68, 66, 11, 89, 10, 15, 12, 6, 64, 11, 6, 13, - 10, 70, 1, 9, 116, 62, 100, 64, 69, 71, 76, - 71, 73, 84, 75, 85, 73, 84, 67, 62, 91, 20, - 23, 17, 13, 12, 11, 7, 7, 5, 70, 72, 71, 75, - 78, 100, 75, 76, 93, 0, 68, 70, 73, 80, 83, - 82, 81, 87, 80, 89, 95, 87, 95, 64, 23, 17, - 10, 8, 9, 2, 65, 66, 7, 6, 31, 21, 17, 11, 17, - 8, 8, 4, 64, 10, 40, 32, 27, 24, 24, 9, 3, 0, - 67, 70, 48, 29, 10, 1, 13, 1, 73, 72, 5, 45, - 35, 20, 11, 20, 5, 1, 67, 69, 62, 82, 76, 68, - 72, 72, 69, 65, 2, 66, 0, 3, 10, 74, 71, 78, - 75, 7, 76, 75, 73, 66, 64, 69, 74, 69, 74, 69, - 71, 83, 9, 9, 19, 4, 65, 9, 6, 2, 5, 4, 1, 69, - 0, 66, 70, 67, 10, 88, 70, 16, 72, 4, 65, 2, - 11, 65, 67, 4, 7, 79, 72, 87, 30, 32, 35, 22, - 16, 20, 17, 15, 13, 7, 9, 7, 67, 67, 75, 71, - 66, 72, 84, 72, 72, 74, 74, 81, 75, 83, 84, - 79, 87, 20, 19, 18, 15, 2, 7, 5, 72, 66, 72, - 75, 89, 83, 89, 95, 72, 71, 98, 67, 69, 76, - 88, 81, 85, 89, 79, 90, 87, 94, 97, 99, 105, - 83, 92, 97, 74, 68, 7, 66, 19, 28, 65, 1, 11, - 15, 5, 14, 26, 4, 0, 38, 10, 77, 96, 109, 126, - 126, 126, 126, 3, 39, 30, 26, 16, 25, 13, 7, - 5, 67, 74, 69, 6, 65, 16, 24, 0, 0, 8, 12, 6, - 11, 22, 7, 1, 38, 10, 77, 96, 109, 126, 126, - 126, 126 }, - - { - - 36, - 5, 80, 36, 5, 80, 67, 8, 23, 12, 65, 71, 72, - 29, 59, 14, 7, 69, 5, 12, 1, 69, 0, 75, 89, 1, - 85, 123, 123, 124, 32, 69, 67, 5, 12, 1, 81, - 1, 11, 3, 64, 71, 74, 0, 79, 80, 93, 5, 67, - 72, 4, 74, 71, 84, 0, 74, 72, 81, 2, 2, 22, 0, - 0, 0, 0, 94, 97, 6, 68, 68, 21, 65, 84, 19, - 11, 4, 38, 40, 12, 15, 2, 15, 65, 0, 13, 80, - 78, 79, 83, 24, 65, 11, 11, 68, 78, 71, 2, 2, - 70, 69, 78, 17, 68, 4, 68, 75, 0, 69, 1, 4, 2, - 2, 9, 7, 69, 1, 62, 62, 43, 34, 6, 67, 1, 8, - 0, 11, 8, 1, 72, 17, 68, 88, 85, 30, 9, 13, 5, - 6, 9, 13, 33, 19, 9, 1, 2, 2, 14, 17, 93, 1, - 5, 75, 3, 0, 12, 10, 66, 19, 12, 13, 78, 6, - 69, 67, 10, 89, 10, 14, 11, 4, 67, 10, 4, 11, - 8, 72, 64, 7, 122, 62, 104, 66, 71, 73, 79, - 73, 76, 88, 79, 88, 75, 87, 69, 62, 93, 18, - 21, 15, 11, 10, 9, 5, 5, 3, 72, 74, 73, 77, - 80, 102, 75, 76, 94, 64, 69, 71, 74, 81, 84, - 83, 83, 88, 80, 90, 96, 88, 94, 0, 24, 17, 10, - 8, 10, 3, 64, 65, 9, 7, 31, 21, 17, 12, 18, 9, - 10, 6, 1, 11, 41, 33, 28, 25, 25, 9, 3, 0, 66, - 70, 49, 29, 9, 1, 13, 1, 73, 72, 5, 45, 34, - 19, 10, 20, 5, 1, 67, 69, 62, 81, 75, 67, 70, - 70, 68, 0, 4, 65, 2, 5, 12, 73, 70, 78, 74, 9, - 76, 75, 73, 65, 64, 69, 74, 69, 75, 69, 71, - 83, 9, 9, 20, 4, 65, 9, 6, 2, 5, 4, 1, 70, 0, - 66, 70, 67, 11, 89, 71, 16, 73, 3, 66, 1, 11, - 66, 68, 4, 7, 80, 72, 88, 29, 31, 34, 20, 14, - 18, 15, 13, 11, 4, 6, 4, 70, 70, 77, 75, 70, - 76, 89, 75, 75, 77, 76, 84, 77, 85, 85, 80, - 88, 18, 17, 15, 13, 64, 4, 2, 75, 68, 75, 77, - 92, 85, 91, 97, 73, 72, 100, 68, 70, 78, 90, - 83, 87, 91, 80, 92, 88, 95, 98, 100, 106, 85, - 93, 98, 74, 68, 8, 66, 20, 29, 65, 2, 12, 16, - 5, 14, 27, 4, 0, 37, 8, 80, 99, 112, 126, 126, - 126, 126, 3, 39, 30, 26, 16, 26, 13, 7, 5, 67, - 74, 69, 6, 65, 17, 25, 0, 0, 8, 12, 6, 11, 23, - 7, 1, 37, 8, 80, 99, 112, 126, 126, 126, 126 }, - - { - - 35, - 5, 80, 35, 5, 80, 65, 10, 24, 12, 66, 73, 74, - 28, 59, 14, 9, 69, 6, 13, 1, 69, 0, 75, 90, 0, - 87, 126, 125, 125, 35, 68, 67, 6, 13, 1, 82, - 2, 11, 3, 64, 71, 74, 0, 79, 80, 93, 5, 67, - 71, 4, 74, 70, 84, 0, 74, 72, 81, 2, 2, 22, 0, - 0, 0, 0, 94, 97, 7, 69, 68, 20, 66, 84, 22, - 12, 5, 39, 42, 14, 17, 4, 17, 64, 1, 15, 80, - 78, 78, 83, 24, 65, 12, 13, 68, 77, 71, 4, 2, - 71, 70, 78, 17, 68, 5, 68, 74, 1, 69, 2, 5, 3, - 4, 11, 7, 68, 2, 62, 62, 46, 37, 6, 67, 1, 9, - 0, 11, 9, 2, 71, 19, 68, 90, 87, 33, 9, 13, 5, - 6, 9, 14, 34, 20, 9, 1, 2, 2, 14, 18, 94, 1, - 5, 76, 3, 64, 12, 10, 66, 19, 12, 13, 79, 6, - 70, 68, 10, 89, 10, 14, 11, 2, 70, 9, 2, 9, 5, - 74, 67, 5, 126, 62, 107, 68, 73, 75, 82, 76, - 79, 92, 83, 91, 77, 91, 71, 62, 95, 16, 19, - 13, 8, 7, 7, 3, 3, 1, 74, 76, 75, 79, 81, 104, - 75, 76, 94, 65, 70, 72, 75, 82, 85, 84, 85, - 89, 81, 91, 97, 88, 94, 2, 25, 18, 10, 8, 11, - 3, 64, 65, 11, 8, 31, 21, 18, 13, 19, 10, 11, - 7, 3, 12, 41, 33, 28, 25, 26, 10, 3, 0, 66, - 70, 49, 29, 8, 1, 13, 1, 73, 71, 5, 44, 34, - 18, 9, 20, 5, 1, 67, 69, 62, 80, 73, 66, 69, - 69, 67, 2, 6, 64, 3, 7, 14, 73, 69, 77, 73, - 11, 75, 75, 73, 65, 0, 69, 74, 69, 75, 69, 71, - 84, 10, 10, 21, 4, 65, 10, 6, 2, 5, 4, 1, 70, - 0, 66, 70, 67, 11, 90, 72, 16, 74, 2, 67, 1, - 11, 67, 69, 4, 7, 81, 72, 89, 28, 30, 33, 19, - 12, 16, 13, 11, 8, 2, 3, 1, 73, 72, 79, 79, - 74, 80, 94, 79, 78, 79, 78, 86, 79, 87, 87, - 81, 89, 16, 14, 13, 10, 67, 2, 0, 78, 71, 77, - 80, 95, 87, 93, 98, 74, 73, 101, 70, 72, 80, - 92, 84, 89, 93, 81, 93, 89, 96, 99, 101, 107, - 86, 94, 99, 74, 67, 8, 65, 21, 30, 65, 2, 12, - 16, 5, 15, 28, 4, 0, 36, 6, 82, 102, 115, 126, - 126, 126, 126, 3, 39, 30, 26, 16, 26, 14, 7, - 5, 66, 74, 69, 7, 64, 18, 26, 0, 1, 8, 12, 6, - 11, 23, 7, 1, 36, 6, 82, 102, 115, 126, 126, - 126, 126 }, - - { - - 33, - 5, 80, 33, 5, 80, 64, 11, 24, 12, 66, 74, 76, - 27, 59, 13, 11, 69, 6, 14, 0, 70, 0, 76, 92, - 64, 90, 126, 126, 126, 38, 67, 67, 6, 14, 0, - 82, 3, 11, 2, 64, 70, 73, 0, 79, 80, 93, 5, - 67, 71, 4, 74, 70, 83, 0, 74, 72, 81, 3, 2, - 22, 0, 0, 0, 1, 95, 97, 7, 70, 68, 19, 66, 84, - 24, 13, 6, 41, 44, 15, 18, 5, 18, 1, 2, 17, - 80, 77, 78, 83, 24, 65, 13, 15, 68, 77, 70, 6, - 2, 71, 70, 79, 17, 68, 5, 67, 73, 2, 68, 3, 5, - 3, 5, 12, 8, 67, 3, 62, 62, 49, 40, 6, 66, 1, - 9, 0, 11, 9, 2, 71, 21, 68, 92, 89, 35, 9, 14, - 5, 6, 9, 14, 36, 21, 10, 0, 2, 2, 15, 18, 95, - 1, 5, 76, 2, 65, 11, 9, 67, 19, 12, 13, 80, 6, - 71, 69, 9, 89, 9, 13, 10, 0, 74, 8, 0, 7, 3, - 76, 69, 3, 126, 62, 111, 70, 75, 78, 85, 78, - 83, 97, 87, 94, 79, 94, 73, 62, 96, 14, 17, - 10, 6, 5, 5, 1, 1, 64, 77, 78, 77, 81, 83, - 106, 75, 76, 95, 66, 71, 73, 77, 83, 87, 85, - 86, 90, 81, 92, 97, 89, 93, 3, 26, 18, 10, 9, - 11, 4, 0, 64, 13, 10, 31, 22, 18, 13, 20, 11, - 13, 9, 4, 12, 42, 34, 29, 26, 27, 10, 3, 1, - 65, 70, 50, 29, 8, 0, 13, 1, 73, 71, 5, 44, - 33, 17, 8, 20, 5, 2, 67, 69, 62, 78, 72, 65, - 67, 67, 66, 3, 7, 0, 5, 8, 16, 72, 68, 77, 72, - 12, 75, 75, 73, 64, 0, 69, 75, 69, 76, 69, 71, - 84, 10, 10, 22, 4, 65, 10, 6, 2, 5, 4, 1, 71, - 0, 66, 70, 67, 12, 91, 73, 16, 75, 2, 68, 0, - 11, 68, 70, 4, 7, 82, 72, 90, 27, 29, 32, 17, - 10, 14, 11, 8, 6, 64, 0, 65, 76, 75, 81, 84, - 78, 84, 99, 82, 82, 82, 81, 89, 81, 89, 88, - 82, 89, 13, 12, 10, 8, 70, 64, 66, 81, 73, 80, - 82, 98, 89, 95, 100, 75, 73, 103, 71, 73, 81, - 94, 86, 91, 94, 82, 95, 90, 97, 101, 102, 107, - 88, 96, 101, 73, 67, 9, 65, 22, 31, 65, 3, 13, - 17, 5, 15, 29, 4, 0, 35, 4, 85, 105, 119, 126, - 126, 126, 126, 4, 39, 30, 26, 16, 27, 14, 7, - 5, 66, 74, 69, 7, 64, 18, 27, 0, 1, 9, 13, 6, - 11, 24, 7, 1, 35, 4, 85, 105, 119, 126, 126, - 126, 126 }, - - { - - 32, - 5, 80, 32, 5, 80, 1, 13, 24, 12, 67, 75, 78, - 26, 59, 13, 13, 69, 6, 15, 0, 70, 0, 77, 94, - 65, 92, 126, 126, 126, 41, 66, 66, 6, 15, 0, - 82, 4, 11, 2, 64, 70, 72, 0, 79, 80, 93, 5, - 67, 71, 4, 74, 69, 83, 0, 74, 72, 81, 3, 2, - 22, 0, 0, 0, 1, 95, 97, 8, 71, 68, 18, 67, 84, - 27, 14, 7, 43, 46, 17, 20, 7, 20, 2, 3, 20, - 80, 77, 77, 82, 24, 65, 14, 17, 68, 76, 70, 8, - 2, 72, 71, 79, 17, 68, 6, 67, 72, 3, 68, 4, 6, - 4, 7, 14, 9, 65, 4, 62, 62, 52, 43, 7, 66, 2, - 10, 0, 11, 10, 2, 70, 23, 68, 94, 91, 38, 9, - 14, 5, 6, 9, 15, 37, 22, 10, 0, 2, 2, 15, 19, - 96, 2, 5, 77, 2, 66, 11, 9, 67, 19, 12, 13, - 81, 7, 72, 69, 9, 89, 9, 12, 9, 65, 77, 7, 64, - 5, 1, 78, 72, 1, 126, 62, 114, 72, 77, 80, 88, - 81, 86, 101, 91, 96, 81, 98, 75, 62, 98, 12, - 15, 8, 4, 3, 3, 64, 64, 66, 79, 80, 79, 82, - 85, 108, 75, 76, 95, 67, 72, 74, 78, 84, 88, - 86, 88, 91, 82, 93, 98, 90, 92, 5, 27, 19, 10, - 9, 12, 4, 0, 0, 15, 11, 31, 22, 19, 14, 21, - 12, 14, 10, 6, 13, 43, 35, 30, 26, 28, 11, 4, - 1, 65, 70, 50, 29, 7, 0, 13, 1, 73, 70, 5, 43, - 32, 16, 7, 20, 5, 2, 67, 68, 62, 77, 70, 0, - 65, 66, 65, 5, 9, 1, 7, 10, 18, 71, 67, 76, - 71, 14, 75, 75, 72, 64, 1, 69, 75, 69, 76, 69, - 71, 85, 11, 10, 23, 4, 65, 10, 6, 2, 5, 4, 1, - 71, 0, 66, 70, 67, 12, 92, 74, 16, 76, 1, 68, - 64, 11, 68, 71, 4, 7, 83, 72, 91, 26, 28, 31, - 15, 8, 12, 9, 6, 3, 67, 66, 68, 79, 77, 83, - 88, 82, 88, 104, 85, 85, 84, 83, 91, 83, 90, - 90, 82, 90, 11, 9, 8, 6, 73, 67, 68, 84, 75, - 82, 84, 101, 91, 97, 101, 75, 74, 105, 72, 75, - 83, 96, 88, 93, 96, 83, 96, 91, 97, 102, 103, - 108, 89, 97, 102, 73, 67, 10, 64, 23, 32, 64, - 4, 13, 17, 5, 16, 30, 4, 0, 34, 2, 88, 108, - 122, 126, 126, 126, 126, 4, 39, 30, 26, 16, - 27, 14, 8, 6, 65, 74, 69, 8, 64, 19, 28, 0, 1, - 9, 13, 6, 12, 24, 7, 1, 34, 2, 88, 108, 122, - 126, 126, 126, 126 }, - - { - - 31, - 5, 81, 31, 5, 81, 3, 14, 25, 12, 67, 77, 80, - 25, 59, 13, 14, 69, 7, 15, 0, 71, 1, 77, 95, - 67, 95, 126, 126, 126, 43, 65, 66, 7, 15, 0, - 83, 4, 11, 1, 64, 70, 72, 0, 79, 79, 92, 5, - 66, 70, 4, 73, 69, 83, 0, 74, 72, 81, 3, 2, - 22, 0, 0, 0, 2, 95, 97, 8, 71, 69, 18, 67, 84, - 29, 15, 8, 44, 49, 18, 21, 9, 21, 3, 4, 22, - 80, 77, 77, 82, 24, 65, 15, 20, 68, 75, 69, - 10, 1, 72, 71, 80, 18, 68, 6, 66, 72, 3, 67, - 5, 6, 5, 8, 15, 9, 64, 5, 62, 62, 55, 46, 7, - 66, 2, 10, 0, 11, 10, 3, 70, 25, 67, 96, 93, - 41, 9, 14, 5, 6, 10, 15, 39, 23, 10, 0, 2, 2, - 16, 20, 97, 2, 5, 77, 1, 67, 10, 9, 68, 19, - 12, 13, 83, 7, 73, 70, 8, 89, 9, 12, 9, 67, - 80, 6, 66, 2, 65, 80, 74, 64, 126, 62, 118, - 74, 78, 82, 92, 83, 89, 105, 96, 99, 83, 101, - 77, 62, 100, 10, 13, 6, 1, 0, 1, 67, 66, 68, - 81, 83, 81, 84, 86, 109, 75, 76, 96, 68, 73, - 75, 79, 85, 89, 87, 90, 92, 82, 94, 99, 90, - 92, 6, 28, 19, 10, 9, 13, 5, 1, 0, 17, 12, 32, - 22, 19, 15, 22, 13, 16, 12, 8, 14, 43, 35, 30, - 27, 29, 11, 4, 1, 64, 70, 51, 29, 6, 0, 13, 1, - 73, 70, 4, 43, 32, 15, 6, 19, 5, 2, 67, 68, - 62, 76, 69, 1, 64, 64, 64, 7, 11, 2, 8, 12, - 20, 71, 66, 76, 70, 16, 74, 75, 72, 0, 1, 69, - 75, 69, 77, 69, 71, 85, 11, 11, 24, 4, 65, 11, - 7, 2, 6, 5, 1, 72, 0, 66, 70, 67, 13, 93, 75, - 16, 77, 0, 69, 64, 11, 69, 71, 4, 6, 85, 73, - 92, 24, 27, 30, 14, 6, 10, 7, 4, 1, 69, 69, - 70, 82, 80, 85, 92, 86, 92, 108, 89, 88, 87, - 85, 94, 85, 92, 91, 83, 91, 9, 7, 5, 3, 76, - 69, 71, 87, 78, 85, 87, 104, 93, 98, 103, 76, - 75, 106, 74, 76, 85, 98, 89, 95, 98, 84, 98, - 92, 98, 103, 104, 109, 91, 98, 103, 73, 66, - 10, 64, 24, 33, 64, 4, 14, 18, 5, 16, 31, 4, - 0, 33, 0, 90, 111, 125, 126, 126, 126, 126, 4, - 39, 30, 26, 16, 28, 15, 8, 6, 65, 73, 68, 8, - 0, 20, 29, 1, 2, 9, 13, 6, 12, 25, 7, 1, 33, - 0, 90, 111, 125, 126, 126, 126, 126 }, - - { - - 30, - 5, 81, 30, 5, 81, 5, 16, 25, 12, 68, 78, 82, - 24, 59, 13, 16, 69, 7, 16, 64, 71, 1, 78, 97, - 68, 97, 126, 126, 126, 46, 64, 66, 7, 16, 64, - 83, 5, 11, 1, 64, 69, 71, 0, 79, 79, 92, 5, - 66, 70, 4, 73, 68, 82, 0, 74, 72, 81, 4, 2, - 22, 0, 0, 0, 2, 95, 97, 9, 72, 69, 17, 68, 84, - 32, 16, 9, 46, 51, 20, 23, 10, 23, 5, 5, 24, - 80, 76, 76, 82, 24, 65, 16, 22, 68, 74, 69, - 12, 1, 73, 72, 80, 18, 68, 7, 66, 71, 4, 67, - 6, 7, 6, 10, 17, 10, 0, 6, 62, 62, 58, 49, 7, - 65, 2, 11, 0, 11, 11, 3, 69, 27, 67, 98, 95, - 44, 9, 15, 5, 6, 10, 16, 40, 24, 11, 64, 2, 2, - 16, 20, 98, 2, 5, 78, 1, 68, 10, 8, 68, 19, - 12, 13, 84, 7, 74, 71, 8, 89, 9, 11, 8, 69, - 83, 5, 68, 0, 67, 82, 77, 66, 126, 62, 121, - 76, 80, 85, 95, 86, 92, 110, 100, 102, 85, - 105, 79, 62, 101, 8, 11, 4, 64, 65, 64, 69, - 68, 70, 84, 85, 83, 86, 88, 111, 75, 76, 96, - 69, 74, 76, 81, 86, 90, 88, 91, 93, 83, 95, - 99, 91, 91, 8, 29, 20, 10, 10, 13, 5, 1, 1, - 19, 14, 32, 23, 20, 15, 23, 14, 17, 13, 10, - 14, 44, 36, 31, 27, 30, 12, 4, 2, 64, 70, 51, - 29, 6, 64, 13, 1, 73, 69, 4, 42, 31, 14, 5, - 19, 5, 3, 67, 68, 62, 74, 67, 2, 1, 0, 0, 8, - 12, 3, 10, 13, 22, 70, 65, 75, 69, 18, 74, 75, - 72, 0, 2, 69, 76, 69, 77, 69, 71, 86, 12, 11, - 25, 4, 65, 11, 7, 2, 6, 5, 1, 72, 0, 66, 70, - 67, 13, 94, 76, 16, 78, 0, 70, 65, 11, 70, 72, - 4, 6, 86, 73, 93, 23, 26, 29, 12, 4, 8, 5, 1, - 65, 72, 72, 73, 85, 82, 87, 97, 90, 96, 113, - 92, 91, 89, 87, 96, 87, 94, 93, 84, 91, 6, 4, - 3, 1, 79, 72, 73, 90, 80, 87, 89, 107, 95, - 100, 104, 77, 75, 108, 75, 78, 86, 100, 91, - 97, 99, 85, 99, 93, 99, 105, 105, 109, 92, - 100, 105, 72, 66, 11, 0, 25, 34, 64, 5, 14, - 18, 5, 17, 32, 4, 0, 32, 65, 93, 114, 126, - 126, 126, 126, 126, 5, 39, 30, 26, 16, 28, 15, - 8, 6, 64, 73, 68, 9, 0, 21, 30, 1, 2, 10, 14, - 6, 12, 25, 7, 1, 32, 65, 93, 114, 126, 126, - 126, 126, 126 }, - - { - - 28, - 4, 81, 28, 4, 81, 6, 17, 25, 12, 68, 80, 85, - 23, 59, 12, 18, 70, 7, 17, 64, 72, 1, 79, 99, - 69, 100, 126, 126, 126, 49, 0, 66, 7, 17, 64, - 84, 6, 11, 0, 64, 69, 71, 64, 80, 79, 92, 5, - 66, 70, 4, 73, 68, 82, 0, 74, 72, 81, 4, 2, - 22, 0, 0, 0, 3, 96, 97, 9, 73, 69, 16, 68, 85, - 34, 17, 10, 47, 53, 21, 24, 12, 24, 6, 6, 26, - 80, 76, 76, 82, 24, 65, 17, 24, 68, 74, 68, - 14, 1, 73, 72, 81, 18, 68, 7, 65, 70, 5, 66, - 6, 7, 6, 11, 18, 10, 1, 7, 62, 62, 61, 51, 7, - 65, 2, 11, 64, 11, 11, 3, 69, 29, 67, 100, 97, - 46, 9, 15, 5, 6, 10, 16, 42, 24, 11, 64, 1, 2, - 17, 21, 100, 2, 5, 78, 0, 70, 9, 8, 69, 19, - 12, 12, 85, 7, 75, 72, 7, 89, 8, 10, 7, 71, - 87, 3, 70, 65, 70, 85, 79, 68, 126, 62, 125, - 78, 82, 87, 98, 88, 96, 114, 104, 105, 87, - 108, 81, 62, 103, 6, 8, 1, 67, 68, 67, 71, 71, - 72, 86, 87, 85, 88, 90, 113, 75, 77, 97, 70, - 76, 77, 82, 87, 92, 90, 93, 94, 83, 96, 100, - 92, 91, 9, 30, 20, 10, 10, 14, 6, 2, 1, 21, - 15, 32, 23, 20, 16, 24, 15, 19, 15, 11, 15, - 44, 36, 31, 28, 31, 12, 4, 2, 0, 71, 52, 29, - 5, 64, 13, 1, 73, 69, 4, 42, 30, 13, 4, 19, 5, - 3, 67, 68, 62, 73, 66, 3, 2, 2, 1, 10, 14, 4, - 11, 15, 24, 70, 65, 75, 68, 19, 74, 75, 72, 1, - 2, 69, 76, 69, 78, 69, 71, 86, 12, 11, 26, 4, - 66, 11, 7, 1, 6, 5, 1, 73, 0, 66, 70, 67, 14, - 95, 77, 16, 80, 64, 71, 66, 10, 71, 73, 4, 6, - 87, 73, 95, 22, 24, 28, 10, 2, 6, 3, 64, 67, - 75, 75, 76, 88, 85, 89, 101, 94, 101, 118, 96, - 95, 92, 90, 99, 89, 96, 94, 85, 92, 4, 2, 0, - 65, 82, 75, 76, 93, 83, 90, 92, 110, 97, 102, - 106, 78, 76, 110, 77, 79, 88, 102, 93, 99, - 101, 87, 101, 95, 100, 106, 106, 110, 94, 101, - 106, 72, 66, 11, 0, 26, 35, 64, 5, 15, 19, 5, - 17, 32, 4, 64, 31, 67, 96, 117, 126, 126, 126, - 126, 126, 5, 39, 30, 26, 16, 29, 15, 8, 6, 64, - 73, 68, 9, 0, 21, 30, 1, 2, 10, 14, 6, 12, 26, - 7, 0, 31, 67, 96, 117, 126, 126, 126, 126, 126 }, - - { - - 27, - 4, 81, 27, 4, 81, 8, 18, 26, 12, 68, 81, 87, - 22, 60, 12, 20, 70, 8, 18, 64, 73, 1, 79, 100, - 70, 102, 126, 126, 126, 52, 1, 65, 8, 18, 64, - 84, 7, 11, 0, 0, 69, 70, 64, 80, 79, 92, 5, - 66, 69, 4, 73, 68, 82, 0, 74, 72, 80, 4, 2, - 22, 0, 0, 0, 4, 96, 97, 9, 74, 69, 15, 68, 85, - 36, 19, 11, 49, 55, 23, 25, 14, 26, 7, 8, 29, - 80, 76, 76, 81, 24, 65, 18, 26, 67, 73, 67, - 16, 1, 73, 72, 81, 18, 68, 7, 64, 69, 6, 65, - 7, 8, 7, 12, 20, 11, 3, 8, 62, 62, 62, 54, 8, - 65, 3, 12, 64, 11, 11, 4, 68, 32, 67, 102, 98, - 49, 9, 15, 5, 6, 10, 17, 44, 25, 11, 64, 1, 2, - 18, 22, 101, 3, 5, 78, 64, 71, 8, 8, 70, 19, - 12, 12, 86, 8, 76, 72, 6, 89, 8, 10, 7, 73, - 90, 2, 71, 67, 72, 87, 81, 70, 126, 62, 126, - 80, 84, 89, 101, 90, 99, 118, 108, 107, 89, - 111, 83, 62, 105, 4, 6, 64, 69, 70, 69, 73, - 73, 74, 88, 89, 86, 89, 91, 115, 75, 77, 97, - 70, 77, 78, 83, 88, 93, 91, 95, 95, 83, 97, - 101, 92, 90, 10, 31, 20, 10, 10, 15, 7, 3, 2, - 24, 16, 32, 23, 20, 17, 25, 16, 21, 17, 13, - 16, 45, 37, 32, 29, 32, 12, 5, 2, 1, 71, 53, - 29, 4, 64, 14, 2, 73, 68, 4, 42, 30, 12, 3, - 19, 5, 3, 67, 67, 62, 72, 65, 5, 4, 4, 2, 12, - 16, 5, 13, 17, 26, 69, 64, 74, 67, 21, 73, 74, - 71, 2, 3, 69, 76, 69, 79, 69, 71, 86, 12, 12, - 27, 5, 66, 12, 7, 1, 6, 5, 1, 74, 0, 65, 69, - 67, 15, 95, 78, 16, 81, 65, 71, 66, 10, 71, - 74, 4, 6, 88, 73, 96, 21, 23, 28, 9, 0, 4, 1, - 66, 69, 77, 78, 79, 91, 88, 91, 105, 98, 105, - 123, 99, 98, 95, 92, 101, 90, 97, 95, 85, 93, - 2, 0, 65, 67, 84, 77, 78, 96, 85, 92, 94, 112, - 99, 104, 108, 78, 77, 111, 78, 80, 90, 104, - 94, 100, 103, 88, 103, 96, 100, 107, 106, 111, - 96, 102, 107, 72, 65, 12, 0, 27, 37, 0, 6, 16, - 20, 5, 18, 33, 4, 64, 30, 69, 98, 120, 126, - 126, 126, 126, 126, 5, 39, 30, 27, 17, 30, 16, - 9, 7, 64, 73, 68, 9, 1, 22, 31, 1, 3, 10, 14, - 6, 13, 27, 7, 0, 30, 69, 98, 120, 126, 126, - 126, 126, 126 }, - - { - - 26, - 4, 81, 26, 4, 81, 10, 20, 26, 12, 69, 82, 89, - 21, 60, 12, 22, 70, 8, 19, 65, 73, 1, 80, 102, - 71, 105, 126, 126, 126, 55, 2, 65, 8, 19, 65, - 84, 8, 11, 64, 0, 68, 69, 64, 80, 79, 92, 5, - 66, 69, 4, 73, 67, 81, 0, 74, 72, 80, 5, 2, - 22, 0, 0, 0, 4, 96, 97, 10, 75, 69, 14, 69, - 85, 39, 20, 12, 51, 57, 24, 27, 15, 27, 9, 9, - 31, 80, 75, 75, 81, 24, 65, 19, 28, 67, 72, - 67, 18, 1, 74, 73, 82, 18, 68, 8, 64, 68, 7, - 65, 8, 8, 8, 14, 21, 12, 4, 9, 62, 62, 62, 57, - 8, 64, 3, 12, 64, 11, 12, 4, 68, 34, 67, 104, - 100, 52, 9, 16, 5, 6, 10, 17, 45, 26, 12, 65, - 1, 2, 18, 22, 102, 3, 5, 79, 64, 72, 8, 7, 70, - 19, 12, 12, 87, 8, 77, 73, 6, 89, 8, 9, 6, 75, - 93, 1, 73, 69, 74, 89, 84, 72, 126, 62, 126, - 82, 86, 92, 104, 93, 102, 123, 112, 110, 91, - 115, 85, 62, 106, 2, 4, 66, 71, 72, 71, 75, - 75, 76, 91, 91, 88, 91, 93, 117, 75, 77, 98, - 71, 78, 79, 85, 89, 94, 92, 96, 96, 84, 98, - 101, 93, 89, 12, 32, 21, 10, 11, 15, 7, 3, 3, - 26, 18, 32, 24, 21, 17, 26, 17, 22, 18, 15, - 16, 46, 38, 33, 29, 33, 13, 5, 3, 1, 71, 53, - 29, 4, 65, 14, 2, 73, 68, 4, 41, 29, 11, 2, - 19, 5, 4, 67, 67, 62, 70, 0, 6, 6, 5, 3, 13, - 17, 6, 15, 18, 28, 68, 0, 74, 66, 23, 73, 74, - 71, 2, 3, 69, 77, 69, 79, 69, 71, 87, 13, 12, - 28, 5, 66, 12, 7, 1, 6, 5, 1, 74, 0, 65, 69, - 67, 15, 96, 79, 16, 82, 65, 72, 67, 10, 72, - 75, 4, 6, 89, 73, 97, 20, 22, 27, 7, 65, 2, - 64, 69, 72, 80, 81, 82, 94, 90, 93, 110, 102, - 109, 126, 102, 101, 97, 94, 104, 92, 99, 97, - 86, 93, 64, 66, 68, 69, 87, 80, 81, 99, 87, - 95, 96, 115, 101, 106, 109, 79, 77, 113, 79, - 82, 91, 106, 96, 102, 104, 89, 104, 97, 101, - 109, 107, 111, 97, 104, 109, 71, 65, 13, 1, - 28, 38, 0, 7, 16, 20, 5, 18, 34, 4, 64, 29, - 71, 101, 123, 126, 126, 126, 126, 126, 6, 39, - 30, 27, 17, 30, 16, 9, 7, 0, 73, 68, 10, 1, - 23, 32, 1, 3, 11, 15, 6, 13, 27, 7, 0, 29, 71, - 101, 123, 126, 126, 126, 126, 126 }, - - { - - 25, - 4, 82, 25, 4, 82, 12, 21, 27, 12, 69, 84, 91, - 20, 60, 12, 23, 70, 9, 19, 65, 74, 2, 80, 103, - 73, 107, 126, 126, 126, 57, 3, 65, 9, 19, 65, - 85, 8, 11, 64, 0, 68, 69, 64, 80, 78, 91, 5, - 65, 68, 4, 72, 67, 81, 0, 74, 72, 80, 5, 2, - 22, 0, 0, 0, 5, 96, 97, 10, 75, 70, 14, 69, - 85, 41, 21, 13, 52, 60, 26, 28, 17, 29, 10, - 10, 33, 80, 75, 75, 81, 24, 65, 20, 31, 67, - 71, 66, 20, 0, 74, 73, 82, 19, 68, 8, 0, 68, - 7, 64, 9, 9, 9, 15, 23, 12, 5, 10, 62, 62, 62, - 60, 8, 64, 3, 13, 64, 11, 12, 5, 67, 36, 66, - 106, 102, 55, 9, 16, 5, 6, 11, 18, 47, 27, 12, - 65, 1, 2, 19, 23, 103, 3, 5, 79, 65, 73, 7, 7, - 71, 19, 12, 12, 89, 8, 78, 74, 5, 89, 8, 9, 6, - 77, 96, 0, 75, 72, 77, 91, 86, 74, 126, 62, - 126, 84, 87, 94, 108, 95, 105, 126, 117, 113, - 93, 118, 87, 62, 108, 0, 2, 68, 74, 75, 73, - 78, 77, 78, 93, 94, 90, 93, 94, 118, 75, 77, - 98, 72, 79, 80, 86, 90, 95, 93, 98, 97, 84, - 99, 102, 93, 89, 13, 33, 21, 10, 11, 16, 8, 4, - 3, 28, 19, 33, 24, 21, 18, 27, 18, 24, 20, 17, - 17, 46, 38, 33, 30, 34, 13, 5, 3, 2, 71, 54, - 29, 3, 65, 14, 2, 73, 67, 3, 41, 29, 10, 1, - 18, 5, 4, 67, 67, 62, 69, 1, 7, 7, 7, 4, 15, - 19, 7, 16, 20, 30, 68, 1, 73, 65, 25, 72, 74, - 71, 3, 4, 69, 77, 69, 80, 69, 71, 87, 13, 13, - 29, 5, 66, 13, 8, 1, 7, 6, 1, 75, 0, 65, 69, - 67, 16, 97, 80, 16, 83, 66, 73, 67, 10, 73, - 75, 4, 5, 91, 74, 98, 18, 21, 26, 6, 67, 0, - 66, 71, 74, 82, 84, 84, 97, 93, 95, 114, 106, - 113, 126, 106, 104, 100, 96, 106, 94, 101, 98, - 87, 94, 66, 68, 70, 72, 90, 82, 83, 102, 90, - 97, 99, 118, 103, 107, 111, 80, 78, 114, 81, - 83, 93, 108, 97, 104, 106, 90, 106, 98, 102, - 110, 108, 112, 99, 105, 110, 71, 64, 13, 1, - 29, 39, 0, 7, 17, 21, 5, 19, 35, 4, 64, 28, - 73, 103, 126, 126, 126, 126, 126, 126, 6, 39, - 30, 27, 17, 31, 17, 9, 7, 0, 72, 67, 10, 2, - 24, 33, 2, 4, 11, 15, 6, 13, 28, 7, 0, 28, 73, - 103, 126, 126, 126, 126, 126, 126 }, - - { - - 23, - 4, 82, 23, 4, 82, 13, 23, 27, 12, 70, 85, 93, - 19, 60, 11, 25, 70, 9, 20, 65, 74, 2, 81, 105, - 74, 110, 126, 126, 126, 60, 4, 65, 9, 20, 65, - 85, 9, 11, 65, 0, 68, 68, 64, 80, 78, 91, 5, - 65, 68, 4, 72, 66, 81, 0, 74, 72, 80, 5, 2, - 22, 0, 0, 0, 5, 97, 97, 11, 76, 70, 13, 70, - 85, 44, 22, 14, 54, 62, 27, 30, 19, 30, 11, - 11, 35, 80, 75, 74, 81, 24, 65, 21, 33, 67, - 71, 66, 22, 0, 75, 74, 83, 19, 68, 9, 0, 67, - 8, 64, 10, 9, 9, 17, 24, 13, 6, 11, 62, 62, - 62, 62, 8, 64, 3, 13, 64, 11, 13, 5, 67, 38, - 66, 108, 104, 57, 9, 16, 5, 6, 11, 18, 48, 28, - 12, 65, 1, 2, 19, 24, 104, 3, 5, 80, 65, 74, - 7, 7, 71, 19, 12, 12, 90, 8, 79, 75, 5, 89, 7, - 8, 5, 79, 100, 64, 77, 74, 79, 93, 89, 76, - 126, 62, 126, 86, 89, 96, 111, 98, 109, 126, - 121, 116, 95, 122, 89, 62, 110, 65, 0, 71, 76, - 77, 75, 80, 79, 80, 95, 96, 92, 95, 96, 120, - 75, 77, 99, 73, 80, 81, 87, 91, 97, 94, 100, - 98, 85, 100, 103, 94, 88, 15, 34, 22, 10, 11, - 17, 8, 4, 4, 30, 20, 33, 24, 22, 19, 28, 19, - 25, 21, 18, 18, 47, 39, 34, 30, 35, 14, 5, 3, - 2, 71, 54, 29, 2, 65, 14, 2, 73, 67, 3, 40, - 28, 9, 0, 18, 5, 4, 67, 67, 62, 68, 3, 8, 9, - 8, 5, 17, 21, 8, 18, 22, 32, 67, 2, 73, 64, - 26, 72, 74, 71, 3, 4, 69, 77, 69, 80, 69, 71, - 88, 14, 13, 30, 5, 66, 13, 8, 1, 7, 6, 1, 75, - 0, 65, 69, 67, 16, 98, 81, 16, 84, 67, 74, 68, - 10, 74, 76, 4, 5, 92, 74, 99, 17, 20, 25, 4, - 69, 65, 68, 73, 77, 85, 87, 87, 100, 95, 97, - 118, 110, 117, 126, 109, 108, 102, 99, 109, - 96, 103, 100, 88, 95, 68, 71, 73, 74, 93, 85, - 86, 105, 92, 100, 101, 121, 105, 109, 112, 81, - 79, 116, 82, 85, 95, 110, 99, 106, 108, 91, - 107, 99, 103, 111, 109, 113, 100, 106, 111, - 71, 64, 14, 2, 30, 40, 0, 8, 17, 21, 5, 19, - 36, 4, 64, 27, 75, 106, 126, 126, 126, 126, - 126, 126, 6, 39, 30, 27, 17, 31, 17, 9, 7, 1, - 72, 67, 11, 2, 24, 34, 2, 4, 11, 15, 6, 13, - 28, 7, 0, 27, 75, 106, 126, 126, 126, 126, - 126, 126 }, - - { - - 22, - 4, 82, 22, 4, 82, 15, 24, 27, 12, 70, 86, 95, - 18, 60, 11, 27, 70, 9, 21, 66, 75, 2, 82, 107, - 75, 112, 126, 126, 126, 62, 5, 64, 9, 21, 66, - 85, 10, 11, 65, 0, 67, 67, 64, 80, 78, 91, 5, - 65, 68, 4, 72, 66, 80, 0, 74, 72, 80, 6, 2, - 22, 0, 0, 0, 6, 97, 97, 11, 77, 70, 12, 70, - 85, 46, 23, 15, 56, 62, 29, 31, 20, 32, 13, - 12, 38, 80, 74, 74, 80, 24, 65, 22, 35, 67, - 70, 65, 24, 0, 75, 74, 83, 19, 68, 9, 1, 66, - 9, 0, 11, 10, 10, 18, 26, 14, 8, 12, 62, 62, - 62, 62, 9, 0, 4, 14, 64, 11, 13, 5, 66, 40, - 66, 110, 106, 60, 9, 17, 5, 6, 11, 19, 50, 29, - 13, 66, 1, 2, 20, 24, 105, 4, 5, 80, 66, 75, - 6, 6, 72, 19, 12, 12, 91, 9, 80, 75, 4, 89, 7, - 7, 4, 81, 103, 65, 78, 76, 81, 95, 91, 78, - 126, 62, 126, 88, 91, 99, 114, 100, 112, 126, - 125, 118, 97, 125, 91, 62, 111, 67, 65, 73, - 78, 79, 77, 82, 81, 82, 98, 98, 94, 96, 98, - 122, 75, 77, 99, 74, 81, 82, 89, 92, 98, 95, - 101, 99, 85, 101, 103, 95, 87, 16, 35, 22, 10, - 12, 17, 9, 5, 5, 32, 22, 33, 25, 22, 19, 29, - 20, 27, 23, 20, 18, 48, 40, 35, 31, 36, 14, 6, - 4, 3, 71, 55, 29, 2, 66, 14, 2, 73, 66, 3, 40, - 27, 8, 64, 18, 5, 5, 67, 66, 62, 66, 4, 10, - 11, 10, 6, 18, 22, 9, 20, 23, 34, 66, 3, 72, - 0, 28, 72, 74, 70, 4, 5, 69, 78, 69, 81, 69, - 71, 88, 14, 13, 31, 5, 66, 13, 8, 1, 7, 6, 1, - 76, 0, 65, 69, 67, 17, 99, 82, 16, 85, 67, 74, - 69, 10, 74, 77, 4, 5, 93, 74, 100, 16, 19, 24, - 2, 71, 67, 70, 76, 79, 88, 90, 90, 103, 98, - 99, 123, 114, 121, 126, 112, 111, 105, 101, - 111, 98, 104, 101, 88, 95, 71, 73, 75, 76, 96, - 88, 88, 108, 94, 102, 103, 124, 107, 111, 114, - 81, 79, 118, 83, 86, 96, 112, 101, 108, 109, - 92, 109, 100, 103, 113, 110, 113, 102, 108, - 113, 70, 64, 15, 2, 31, 41, 1, 9, 18, 22, 5, - 20, 37, 4, 64, 26, 77, 109, 126, 126, 126, - 126, 126, 126, 7, 39, 30, 27, 17, 32, 17, 10, - 8, 1, 72, 67, 11, 2, 25, 35, 2, 4, 12, 16, 6, - 14, 29, 7, 0, 26, 77, 109, 126, 126, 126, 126, - 126, 126 }, - - { - - 21, - 4, 82, 21, 4, 82, 17, 26, 28, 12, 71, 88, 97, - 17, 60, 11, 29, 70, 10, 22, 66, 75, 2, 82, - 108, 76, 115, 126, 126, 126, 62, 6, 64, 10, - 22, 66, 86, 11, 11, 66, 0, 67, 67, 64, 80, 78, - 91, 5, 65, 67, 4, 72, 65, 80, 0, 74, 72, 80, - 6, 2, 22, 0, 0, 0, 6, 97, 97, 12, 78, 70, 11, - 71, 85, 49, 24, 16, 57, 62, 30, 33, 22, 33, - 14, 13, 40, 80, 74, 73, 80, 24, 65, 23, 37, - 67, 69, 65, 26, 0, 76, 75, 84, 19, 68, 10, 1, - 65, 10, 0, 12, 10, 11, 20, 27, 14, 9, 13, 62, - 62, 62, 62, 9, 0, 4, 14, 64, 11, 14, 6, 66, - 42, 66, 112, 108, 62, 9, 17, 5, 6, 11, 19, 51, - 30, 13, 66, 1, 2, 20, 25, 106, 4, 5, 81, 66, - 76, 6, 6, 72, 19, 12, 12, 92, 9, 81, 76, 4, - 89, 7, 7, 4, 83, 106, 66, 80, 78, 84, 97, 94, - 80, 126, 62, 126, 90, 93, 101, 117, 103, 115, - 126, 126, 121, 99, 126, 93, 62, 113, 69, 67, - 75, 81, 82, 79, 84, 83, 84, 100, 100, 96, 98, - 99, 124, 75, 77, 100, 75, 82, 83, 90, 93, 99, - 96, 103, 100, 86, 102, 104, 95, 87, 18, 36, - 23, 10, 12, 18, 9, 5, 5, 34, 23, 33, 25, 23, - 20, 30, 21, 28, 24, 22, 19, 48, 40, 35, 31, - 37, 15, 6, 4, 3, 71, 55, 29, 1, 66, 14, 2, 73, - 66, 3, 39, 27, 7, 65, 18, 5, 5, 67, 66, 62, - 65, 6, 11, 12, 11, 7, 20, 24, 10, 21, 25, 36, - 66, 4, 72, 1, 30, 71, 74, 70, 4, 5, 69, 78, - 69, 81, 69, 71, 89, 15, 14, 32, 5, 66, 14, 8, - 1, 7, 6, 1, 76, 0, 65, 69, 67, 17, 100, 83, - 16, 86, 68, 75, 69, 10, 75, 78, 4, 5, 94, 74, - 101, 15, 18, 23, 1, 73, 69, 72, 78, 82, 90, - 93, 93, 106, 100, 101, 126, 118, 125, 126, - 116, 114, 107, 103, 114, 100, 106, 103, 89, - 96, 73, 76, 78, 79, 99, 90, 91, 111, 97, 105, - 106, 126, 109, 113, 115, 82, 80, 119, 85, 88, - 98, 114, 102, 110, 111, 93, 110, 101, 104, - 114, 111, 114, 103, 109, 114, 70, 0, 15, 3, - 32, 42, 1, 9, 18, 22, 5, 20, 38, 4, 64, 25, - 79, 111, 126, 126, 126, 126, 126, 126, 7, 39, - 30, 27, 17, 32, 18, 10, 8, 2, 72, 67, 12, 3, - 26, 36, 2, 5, 12, 16, 6, 14, 29, 7, 0, 25, 79, - 111, 126, 126, 126, 126, 126, 126 }, - - { - - 20, - 4, 82, 20, 4, 82, 19, 27, 28, 12, 71, 89, 99, - 16, 60, 11, 31, 70, 10, 23, 66, 76, 2, 83, - 110, 77, 117, 126, 126, 126, 62, 7, 64, 10, - 23, 66, 86, 12, 11, 66, 0, 67, 66, 64, 80, 78, - 91, 5, 65, 67, 4, 72, 65, 80, 0, 74, 72, 80, - 6, 2, 22, 0, 0, 0, 7, 97, 97, 12, 79, 70, 10, - 71, 85, 51, 25, 17, 59, 62, 32, 34, 24, 35, - 15, 14, 42, 80, 74, 73, 80, 24, 65, 24, 39, - 67, 68, 64, 28, 0, 76, 75, 84, 19, 68, 10, 2, - 64, 11, 1, 13, 11, 12, 21, 29, 15, 10, 14, 62, - 62, 62, 62, 9, 0, 4, 15, 64, 11, 14, 6, 65, - 44, 66, 114, 110, 62, 9, 17, 5, 6, 11, 20, 53, - 31, 13, 66, 1, 2, 21, 26, 107, 4, 5, 81, 67, - 77, 5, 6, 73, 19, 12, 12, 93, 9, 82, 77, 3, - 89, 7, 6, 3, 85, 109, 67, 82, 80, 86, 99, 96, - 82, 126, 62, 126, 92, 95, 103, 120, 105, 118, - 126, 126, 124, 101, 126, 95, 62, 115, 71, 69, - 77, 83, 84, 81, 86, 85, 86, 102, 102, 98, 100, - 101, 126, 75, 77, 100, 76, 83, 84, 91, 94, - 100, 97, 105, 101, 86, 103, 105, 96, 86, 19, - 37, 23, 10, 12, 19, 10, 6, 6, 36, 24, 33, 25, - 23, 21, 31, 22, 30, 26, 24, 20, 49, 41, 36, - 32, 38, 15, 6, 4, 4, 71, 56, 29, 0, 66, 14, 2, - 73, 65, 3, 39, 26, 6, 66, 18, 5, 5, 67, 66, - 62, 64, 7, 12, 14, 13, 8, 22, 26, 11, 23, 27, - 38, 65, 5, 71, 2, 32, 71, 74, 70, 5, 6, 69, - 78, 69, 82, 69, 71, 89, 15, 14, 33, 5, 66, 14, - 8, 1, 7, 6, 1, 77, 0, 65, 69, 67, 18, 101, 84, - 16, 87, 69, 76, 70, 10, 76, 79, 4, 5, 95, 74, - 102, 14, 17, 22, 64, 75, 71, 74, 80, 84, 93, - 96, 96, 109, 103, 103, 126, 122, 126, 126, - 119, 117, 110, 105, 116, 102, 108, 104, 90, - 97, 75, 78, 80, 81, 102, 93, 93, 114, 99, 107, - 108, 126, 111, 115, 117, 83, 81, 121, 86, 89, - 100, 116, 104, 112, 113, 94, 112, 102, 105, - 115, 112, 115, 105, 110, 115, 70, 0, 16, 3, - 33, 43, 1, 10, 19, 23, 5, 21, 39, 4, 64, 24, - 81, 114, 126, 126, 126, 126, 126, 126, 7, 39, - 30, 27, 17, 33, 18, 10, 8, 2, 72, 67, 12, 3, - 27, 37, 2, 5, 12, 16, 6, 14, 30, 7, 0, 24, 81, - 114, 126, 126, 126, 126, 126, 126 }, - - { - - 18, - 3, 83, 18, 3, 83, 20, 28, 28, 12, 72, 91, 102, - 15, 60, 10, 32, 71, 10, 23, 67, 77, 2, 84, - 112, 79, 120, 126, 126, 126, 62, 7, 64, 10, - 23, 67, 87, 12, 11, 67, 0, 67, 66, 65, 81, 78, - 91, 4, 65, 67, 4, 72, 65, 80, 0, 74, 73, 80, - 6, 2, 22, 0, 0, 0, 7, 98, 97, 12, 80, 71, 9, - 72, 86, 53, 26, 18, 60, 62, 33, 35, 25, 36, - 16, 15, 44, 80, 74, 73, 80, 24, 65, 24, 41, - 67, 68, 64, 29, 64, 77, 76, 85, 19, 68, 10, 2, - 64, 11, 1, 13, 11, 12, 22, 30, 15, 11, 15, 62, - 62, 62, 62, 9, 0, 4, 15, 65, 11, 14, 6, 65, - 46, 66, 116, 112, 62, 9, 17, 5, 6, 11, 20, 54, - 31, 13, 67, 0, 2, 21, 26, 109, 4, 5, 82, 68, - 79, 4, 5, 74, 19, 12, 11, 95, 9, 83, 78, 2, - 89, 6, 5, 2, 88, 113, 69, 84, 83, 89, 102, 99, - 84, 126, 62, 126, 95, 97, 106, 124, 108, 122, - 126, 126, 126, 103, 126, 97, 62, 117, 74, 72, - 80, 86, 87, 84, 89, 88, 88, 105, 105, 100, - 102, 103, 126, 75, 78, 101, 77, 85, 86, 93, - 96, 102, 99, 107, 102, 87, 104, 106, 97, 86, - 20, 37, 23, 10, 12, 19, 10, 6, 6, 38, 25, 33, - 25, 23, 21, 31, 23, 31, 27, 25, 20, 49, 41, - 36, 32, 39, 15, 6, 4, 4, 72, 56, 28, 64, 67, - 14, 2, 73, 65, 2, 38, 25, 4, 67, 17, 5, 5, 67, - 66, 62, 0, 8, 13, 15, 14, 9, 23, 27, 12, 24, - 28, 40, 65, 5, 71, 3, 33, 71, 74, 70, 5, 6, - 69, 79, 70, 83, 69, 72, 90, 15, 14, 34, 5, 67, - 14, 8, 0, 7, 6, 1, 78, 0, 65, 69, 67, 18, 102, - 85, 16, 89, 70, 77, 71, 9, 77, 80, 4, 4, 97, - 75, 104, 12, 15, 21, 66, 77, 74, 77, 83, 87, - 96, 99, 99, 113, 106, 105, 126, 126, 126, 126, - 123, 121, 113, 108, 119, 104, 110, 106, 91, - 98, 78, 81, 83, 84, 105, 96, 96, 118, 102, - 110, 111, 126, 113, 117, 119, 84, 82, 123, 88, - 91, 102, 119, 106, 114, 115, 96, 114, 104, - 106, 117, 113, 116, 107, 112, 117, 70, 0, 16, - 3, 34, 44, 1, 10, 19, 23, 5, 21, 39, 4, 65, - 22, 83, 117, 126, 126, 126, 126, 126, 126, 7, - 39, 30, 27, 17, 33, 18, 10, 8, 2, 72, 67, 12, - 3, 27, 37, 2, 5, 12, 16, 6, 14, 30, 6, 64, 22, - 83, 117, 126, 126, 126, 126, 126, 126 }, - - { - - 17, - 3, 83, 17, 3, 83, 22, 30, 29, 13, 72, 92, 104, - 14, 61, 10, 34, 71, 11, 24, 67, 77, 3, 84, - 113, 80, 122, 126, 126, 126, 62, 8, 0, 11, 24, - 67, 87, 13, 11, 67, 1, 66, 65, 65, 81, 77, 90, - 4, 64, 66, 4, 71, 64, 79, 1, 73, 73, 79, 7, 2, - 22, 0, 0, 0, 8, 98, 97, 13, 80, 71, 9, 72, 86, - 56, 28, 20, 62, 62, 35, 37, 27, 38, 18, 17, - 47, 80, 73, 72, 79, 24, 65, 25, 44, 66, 67, 0, - 31, 64, 77, 76, 85, 20, 68, 11, 3, 0, 12, 2, - 14, 12, 13, 24, 32, 16, 13, 17, 62, 62, 62, - 62, 10, 1, 5, 16, 65, 12, 15, 7, 64, 49, 65, - 118, 113, 62, 9, 18, 5, 7, 12, 21, 56, 32, 14, - 67, 0, 2, 22, 27, 110, 5, 5, 82, 68, 80, 4, 5, - 74, 19, 12, 11, 96, 10, 83, 78, 2, 89, 6, 5, - 2, 90, 116, 70, 85, 85, 91, 104, 101, 86, 126, - 62, 126, 97, 98, 108, 126, 110, 125, 126, 126, - 126, 105, 126, 99, 62, 118, 76, 74, 82, 88, - 89, 86, 91, 90, 90, 107, 107, 101, 103, 104, - 126, 75, 78, 101, 77, 86, 87, 94, 97, 103, - 100, 108, 103, 87, 105, 106, 97, 85, 22, 38, - 24, 10, 13, 20, 11, 7, 7, 41, 27, 34, 26, 24, - 22, 32, 25, 33, 29, 27, 21, 50, 42, 37, 33, - 40, 16, 7, 5, 5, 72, 57, 28, 64, 67, 15, 3, - 73, 64, 2, 38, 25, 3, 68, 17, 6, 6, 66, 65, - 62, 2, 10, 15, 17, 16, 11, 25, 29, 14, 26, 30, - 43, 64, 6, 70, 5, 35, 70, 73, 69, 6, 7, 68, - 79, 70, 83, 69, 72, 90, 16, 15, 35, 6, 67, 15, - 9, 0, 8, 7, 1, 78, 1, 64, 68, 66, 19, 102, 86, - 16, 90, 70, 77, 71, 9, 77, 80, 4, 4, 98, 75, - 105, 11, 14, 21, 67, 78, 76, 79, 85, 89, 98, - 101, 101, 116, 108, 107, 126, 126, 126, 126, - 126, 124, 115, 110, 121, 105, 111, 107, 91, - 98, 80, 83, 85, 86, 107, 98, 98, 121, 104, - 112, 113, 126, 114, 118, 120, 84, 82, 124, 89, - 92, 103, 121, 107, 115, 116, 97, 115, 105, - 106, 118, 113, 116, 108, 113, 118, 69, 1, 17, - 4, 36, 46, 2, 11, 20, 24, 6, 22, 40, 4, 65, - 21, 85, 119, 126, 126, 126, 126, 126, 126, 8, - 39, 31, 28, 18, 34, 19, 11, 9, 3, 71, 66, 13, - 4, 28, 38, 3, 6, 13, 17, 6, 15, 31, 6, 64, 21, - 85, 119, 126, 126, 126, 126, 126, 126 }, - - { - - 16, - 3, 83, 16, 3, 83, 24, 31, 29, 13, 72, 93, 106, - 13, 61, 10, 36, 71, 11, 25, 67, 78, 3, 85, - 115, 81, 125, 126, 126, 126, 62, 9, 0, 11, 25, - 67, 87, 14, 11, 68, 1, 66, 64, 65, 81, 77, 90, - 4, 64, 66, 4, 71, 64, 79, 1, 73, 73, 79, 7, 2, - 22, 0, 0, 0, 9, 98, 97, 13, 81, 71, 8, 72, 86, - 58, 29, 21, 62, 62, 36, 38, 29, 39, 19, 18, - 49, 80, 73, 72, 79, 24, 65, 26, 46, 66, 66, 1, - 33, 64, 77, 76, 86, 20, 68, 11, 4, 1, 13, 3, - 15, 12, 14, 25, 33, 17, 14, 18, 62, 62, 62, - 62, 10, 1, 5, 16, 65, 12, 15, 7, 64, 51, 65, - 120, 115, 62, 9, 18, 5, 7, 12, 21, 58, 33, 14, - 67, 0, 2, 23, 28, 111, 5, 5, 82, 69, 81, 3, 5, - 75, 19, 12, 11, 97, 10, 84, 79, 1, 89, 6, 4, - 1, 92, 119, 71, 87, 87, 93, 106, 103, 88, 126, - 62, 126, 99, 100, 110, 126, 112, 126, 126, - 126, 126, 107, 126, 101, 62, 120, 78, 76, 84, - 90, 91, 88, 93, 92, 92, 109, 109, 103, 105, - 106, 126, 75, 78, 102, 78, 87, 88, 95, 98, - 104, 101, 110, 104, 87, 106, 107, 98, 84, 23, - 39, 24, 10, 13, 21, 12, 8, 8, 43, 28, 34, 26, - 24, 23, 33, 26, 35, 31, 29, 22, 51, 43, 38, - 34, 41, 16, 7, 5, 6, 72, 58, 28, 65, 67, 15, - 3, 73, 64, 2, 38, 24, 2, 69, 17, 6, 6, 66, 65, - 62, 3, 11, 16, 19, 18, 12, 27, 31, 15, 28, 32, - 45, 0, 7, 70, 6, 37, 70, 73, 69, 7, 7, 68, 79, - 70, 84, 69, 72, 90, 16, 15, 36, 6, 67, 15, 9, - 0, 8, 7, 1, 79, 1, 64, 68, 66, 20, 103, 87, - 16, 91, 71, 78, 72, 9, 78, 81, 4, 4, 99, 75, - 106, 10, 13, 20, 69, 80, 78, 81, 87, 91, 101, - 104, 104, 119, 111, 109, 126, 126, 126, 126, - 126, 126, 118, 112, 124, 107, 113, 108, 92, - 99, 82, 85, 88, 88, 110, 101, 101, 124, 106, - 115, 115, 126, 116, 120, 122, 85, 83, 126, 90, - 93, 105, 123, 109, 117, 118, 98, 117, 106, - 107, 119, 114, 117, 110, 114, 119, 69, 1, 18, - 4, 37, 47, 2, 12, 21, 25, 6, 22, 41, 4, 65, - 20, 87, 122, 126, 126, 126, 126, 126, 126, 8, - 39, 31, 28, 18, 35, 19, 11, 9, 3, 71, 66, 13, - 4, 29, 39, 3, 6, 13, 17, 6, 15, 32, 6, 64, 20, - 87, 122, 126, 126, 126, 126, 126, 126 }, - - { - - 15, - 3, 83, 15, 3, 83, 26, 33, 30, 13, 73, 95, 108, - 12, 61, 10, 38, 71, 12, 26, 67, 78, 3, 85, - 116, 82, 126, 126, 126, 126, 62, 10, 0, 12, - 26, 67, 88, 15, 11, 68, 1, 66, 64, 65, 81, 77, - 90, 4, 64, 65, 4, 71, 0, 79, 1, 73, 73, 79, 7, - 2, 22, 0, 0, 0, 9, 98, 97, 14, 82, 71, 7, 73, - 86, 61, 30, 22, 62, 62, 38, 40, 31, 41, 20, - 19, 51, 80, 73, 71, 79, 24, 65, 27, 48, 66, - 65, 1, 35, 64, 78, 77, 86, 20, 68, 12, 4, 2, - 14, 3, 16, 13, 15, 27, 35, 17, 15, 19, 62, 62, - 62, 62, 10, 1, 5, 17, 65, 12, 16, 8, 0, 53, - 65, 122, 117, 62, 9, 18, 5, 7, 12, 22, 59, 34, - 14, 67, 0, 2, 23, 29, 112, 5, 5, 83, 69, 82, - 3, 5, 75, 19, 12, 11, 98, 10, 85, 80, 1, 89, - 6, 4, 1, 94, 122, 72, 89, 89, 96, 108, 106, - 90, 126, 62, 126, 101, 102, 112, 126, 115, - 126, 126, 126, 126, 109, 126, 103, 62, 122, - 80, 78, 86, 93, 94, 90, 95, 94, 94, 111, 111, - 105, 107, 107, 126, 75, 78, 102, 79, 88, 89, - 96, 99, 105, 102, 112, 105, 88, 107, 108, 98, - 84, 25, 40, 25, 10, 13, 22, 12, 8, 8, 45, 29, - 34, 26, 25, 24, 34, 27, 36, 32, 31, 23, 51, - 43, 38, 34, 42, 17, 7, 5, 6, 72, 58, 28, 66, - 67, 15, 3, 73, 0, 2, 37, 24, 1, 70, 17, 6, 6, - 66, 65, 62, 4, 13, 17, 20, 19, 13, 29, 33, 16, - 29, 34, 47, 0, 8, 69, 7, 39, 69, 73, 69, 7, 8, - 68, 79, 70, 84, 69, 72, 91, 17, 16, 37, 6, 67, - 16, 9, 0, 8, 7, 1, 79, 1, 64, 68, 66, 20, 104, - 88, 16, 92, 72, 79, 72, 9, 79, 82, 4, 4, 100, - 75, 107, 9, 12, 19, 70, 82, 80, 83, 89, 94, - 103, 107, 107, 122, 113, 111, 126, 126, 126, - 126, 126, 126, 120, 114, 126, 109, 115, 110, - 93, 100, 84, 88, 90, 91, 113, 103, 103, 126, - 109, 117, 118, 126, 118, 122, 123, 86, 84, - 126, 92, 95, 107, 125, 110, 119, 120, 99, 118, - 107, 108, 120, 115, 118, 111, 115, 120, 69, 2, - 18, 5, 38, 48, 2, 12, 21, 25, 6, 23, 42, 4, - 65, 19, 89, 124, 126, 126, 126, 126, 126, 126, - 8, 39, 31, 28, 18, 35, 20, 11, 9, 4, 71, 66, - 14, 5, 30, 40, 3, 7, 13, 17, 6, 15, 32, 6, 64, - 19, 89, 124, 126, 126, 126, 126, 126, 126 }, - - }, - - { - - { - - 62, - 9, 74, 62, 9, 74, 126, 104, 10, 9, 12, 47, 62, - 62, 12, 1, 99, 47, 85, 102, 6, 6, 73, 6, 23, 53, - 62, 62, 21, 97, 126, 117, 74, 85, 102, 6, 93, - 88, 19, 8, 89, 103, 116, 6, 5, 84, 96, 0, 85, - 106, 0, 75, 90, 101, 8, 79, 75, 97, 13, 3, 22, - 0, 0, 0, 83, 86, 97, 72, 22, 1, 29, 88, 126, - 126, 91, 95, 84, 86, 89, 91, 126, 76, 103, 90, - 126, 80, 76, 84, 78, 8, 2, 83, 126, 79, 104, 91, - 126, 65, 79, 72, 92, 7, 68, 71, 98, 86, 88, 82, - 72, 67, 72, 89, 69, 4, 66, 6, 71, 71, 5, 74, 19, - 69, 1, 12, 16, 21, 22, 10, 76, 78, 83, 11, 67, - 90, 67, 72, 75, 80, 83, 64, 32, 64, 94, 75, 0, - 74, 28, 36, 91, 65, 69, 77, 66, 1, 68, 81, 33, - 56, 40, 74, 66, 124, 26, 62, 62, 126, 24, 21, - 29, 34, 32, 26, 21, 23, 30, 20, 27, 16, 8, 5, 3, - 19, 19, 21, 15, 7, 11, 26, 14, 5, 15, 18, 69, - 30, 0, 62, 62, 62, 53, 62, 62, 62, 62, 46, 38, - 34, 30, 48, 43, 73, 29, 32, 19, 47, 27, 27, 35, - 42, 43, 51, 47, 21, 93, 7, 6, 25, 126, 115, 82, - 1, 10, 4, 85, 89, 94, 92, 126, 100, 6, 67, 71, - 77, 85, 88, 104, 98, 126, 82, 15, 2, 66, 70, 75, - 79, 83, 92, 108, 79, 69, 75, 5, 5, 78, 83, 81, - 99, 81, 25, 1, 5, 4, 73, 76, 86, 83, 87, 62, - 126, 126, 120, 126, 114, 117, 118, 117, 113, - 118, 120, 124, 94, 102, 99, 106, 126, 92, 6, 86, - 94, 91, 77, 71, 73, 64, 81, 64, 6, 67, 68, 67, - 68, 77, 64, 68, 78, 8, 4, 65, 9, 19, 3, 70, 76, - 86, 70, 64, 70, 8, 7, 69, 65, 74, 9, 9, 76, 82, - 77, 77, 21, 62, 62, 62, 62, 62, 62, 62, 62, 62, - 62, 62, 62, 62, 62, 52, 62, 62, 62, 62, 62, 62, - 48, 62, 62, 46, 25, 18, 9, 79, 62, 62, 62, 62, - 48, 48, 38, 41, 47, 45, 35, 22, 35, 16, 1, 32, - 37, 39, 40, 47, 33, 34, 22, 21, 3, 11, 3, 78, - 123, 10, 7, 2, 30, 13, 2, 78, 74, 72, 72, 75, - 71, 0, 70, 75, 72, 67, 10, 4, 11, 68, 62, 62, - 62, 62, 56, 51, 40, 25, 64, 71, 26, 19, 14, 7, - 4, 0, 67, 68, 79, 78, 74, 72, 72, 75, 71, 0, 70, - 75, 72, 67, 10, 4, 11, 68, 62, 62, 62, 62, 56, - 51, 40, 25, 64 }, - - { - - 62, - 9, 74, 62, 9, 74, 125, 102, 11, 10, 12, 46, - 62, 62, 13, 2, 97, 46, 84, 100, 6, 6, 71, 6, - 22, 52, 62, 60, 19, 97, 125, 115, 73, 84, 100, - 6, 92, 87, 20, 8, 88, 102, 114, 5, 4, 84, 96, - 0, 84, 105, 0, 75, 89, 100, 8, 78, 74, 96, 14, - 3, 22, 0, 0, 0, 82, 86, 97, 71, 22, 1, 29, 87, - 125, 124, 89, 94, 82, 84, 88, 89, 125, 75, - 101, 89, 124, 80, 76, 84, 78, 9, 2, 82, 124, - 78, 103, 90, 125, 65, 78, 72, 91, 8, 68, 70, - 97, 85, 87, 81, 71, 66, 71, 88, 68, 5, 66, 6, - 70, 70, 5, 73, 20, 68, 1, 13, 17, 22, 23, 11, - 76, 77, 82, 11, 67, 89, 67, 71, 74, 79, 81, 1, - 33, 1, 92, 75, 64, 73, 29, 37, 91, 65, 68, 77, - 65, 1, 67, 79, 33, 56, 41, 72, 67, 122, 25, - 62, 62, 125, 24, 21, 29, 34, 32, 26, 21, 23, - 30, 20, 27, 16, 8, 5, 3, 19, 19, 21, 15, 7, - 11, 26, 14, 4, 15, 18, 69, 29, 0, 62, 62, 62, - 52, 62, 62, 62, 62, 45, 37, 32, 29, 46, 42, - 74, 28, 31, 18, 46, 27, 27, 34, 41, 42, 50, - 46, 20, 93, 7, 6, 24, 125, 113, 80, 2, 10, 4, - 84, 88, 93, 91, 125, 98, 7, 66, 70, 76, 83, - 87, 102, 97, 124, 81, 16, 3, 65, 69, 74, 78, - 82, 91, 106, 78, 67, 74, 6, 5, 77, 82, 80, 98, - 80, 26, 2, 6, 5, 72, 75, 85, 82, 86, 62, 125, - 125, 118, 125, 112, 115, 116, 115, 111, 116, - 118, 121, 93, 101, 98, 105, 123, 91, 5, 85, - 93, 90, 76, 71, 72, 64, 80, 64, 6, 67, 68, 66, - 68, 77, 64, 68, 77, 8, 4, 65, 9, 19, 3, 70, - 75, 84, 70, 64, 69, 8, 7, 69, 65, 73, 9, 9, - 75, 81, 76, 76, 20, 62, 62, 62, 62, 62, 62, - 62, 62, 62, 62, 62, 62, 62, 62, 50, 62, 62, - 62, 62, 62, 62, 47, 60, 60, 45, 24, 17, 9, 79, - 62, 62, 62, 60, 46, 47, 37, 39, 46, 43, 34, - 20, 33, 15, 0, 31, 36, 37, 39, 46, 32, 33, 21, - 20, 2, 11, 3, 78, 122, 9, 6, 1, 29, 12, 1, 77, - 73, 71, 71, 73, 70, 1, 69, 73, 71, 66, 11, 5, - 12, 67, 62, 62, 62, 62, 54, 50, 38, 24, 65, - 70, 27, 20, 15, 8, 5, 1, 66, 67, 78, 77, 73, - 71, 71, 73, 70, 1, 69, 73, 71, 66, 11, 5, 12, - 67, 62, 62, 62, 62, 54, 50, 38, 24, 65 }, - - { - - 62, - 9, 74, 62, 9, 74, 123, 101, 11, 10, 12, 44, - 60, 62, 14, 2, 95, 44, 84, 99, 6, 6, 70, 5, - 21, 51, 60, 57, 17, 98, 123, 114, 73, 84, 99, - 6, 92, 86, 20, 8, 87, 101, 113, 4, 3, 84, 96, - 0, 84, 104, 0, 75, 89, 100, 8, 78, 74, 95, 14, - 3, 22, 0, 0, 0, 81, 86, 97, 71, 21, 1, 29, 86, - 124, 122, 88, 93, 80, 82, 87, 88, 123, 74, - 100, 88, 122, 81, 76, 84, 78, 9, 2, 81, 122, - 78, 102, 89, 123, 65, 78, 72, 91, 8, 68, 70, - 96, 85, 86, 81, 71, 66, 71, 87, 67, 5, 66, 6, - 70, 70, 5, 73, 20, 68, 1, 13, 17, 22, 23, 11, - 77, 76, 81, 10, 67, 89, 67, 70, 74, 79, 80, 2, - 34, 3, 90, 76, 65, 73, 29, 37, 92, 65, 68, 78, - 64, 1, 67, 78, 33, 56, 41, 71, 68, 121, 24, - 62, 62, 124, 24, 21, 29, 33, 31, 26, 21, 23, - 29, 19, 26, 16, 8, 5, 3, 18, 18, 20, 15, 7, - 11, 25, 13, 3, 14, 17, 69, 28, 64, 62, 62, 62, - 50, 60, 62, 62, 62, 44, 35, 30, 27, 44, 40, - 75, 27, 30, 16, 45, 26, 26, 33, 39, 40, 48, - 44, 18, 93, 6, 5, 22, 124, 112, 79, 3, 10, 4, - 83, 87, 92, 90, 123, 97, 8, 65, 69, 75, 82, - 86, 101, 96, 122, 80, 16, 3, 65, 69, 73, 77, - 81, 90, 105, 78, 66, 73, 6, 5, 76, 81, 80, 97, - 79, 26, 3, 6, 5, 71, 74, 84, 81, 85, 62, 124, - 123, 116, 123, 111, 114, 114, 113, 110, 114, - 116, 119, 92, 100, 97, 104, 120, 91, 4, 85, - 92, 89, 76, 71, 72, 64, 80, 64, 5, 67, 68, 65, - 68, 77, 64, 68, 77, 8, 4, 65, 8, 18, 3, 70, - 75, 83, 71, 64, 68, 7, 7, 69, 65, 73, 9, 9, - 75, 80, 76, 76, 18, 62, 62, 62, 62, 62, 62, - 62, 62, 62, 62, 62, 62, 62, 62, 48, 62, 62, - 62, 62, 62, 61, 45, 58, 58, 43, 23, 16, 8, 79, - 62, 62, 62, 58, 44, 45, 35, 37, 44, 41, 32, - 18, 31, 13, 64, 30, 35, 35, 37, 44, 30, 31, - 20, 19, 1, 10, 2, 78, 121, 8, 5, 64, 28, 11, - 0, 77, 73, 70, 70, 72, 69, 2, 69, 72, 70, 65, - 11, 6, 13, 66, 62, 62, 62, 60, 52, 48, 36, 22, - 66, 69, 27, 20, 16, 9, 6, 1, 65, 67, 77, 77, - 73, 70, 70, 72, 69, 2, 69, 72, 70, 65, 11, 6, - 13, 66, 62, 62, 62, 60, 52, 48, 36, 22, 66 }, - - { - - 62, - 9, 74, 62, 9, 74, 121, 99, 12, 10, 11, 42, 59, - 61, 14, 2, 93, 43, 84, 97, 6, 5, 69, 4, 20, - 50, 58, 53, 15, 99, 121, 112, 73, 84, 97, 6, - 91, 85, 21, 8, 86, 100, 112, 3, 2, 84, 97, 0, - 84, 103, 0, 76, 89, 100, 8, 78, 74, 94, 15, 3, - 22, 0, 0, 0, 81, 86, 97, 70, 20, 1, 28, 86, - 123, 120, 87, 92, 79, 81, 86, 87, 121, 73, 99, - 87, 120, 82, 76, 84, 78, 10, 2, 80, 120, 78, - 101, 88, 121, 65, 78, 72, 91, 9, 68, 69, 95, - 85, 85, 81, 71, 66, 70, 86, 67, 5, 66, 6, 70, - 70, 5, 73, 20, 68, 1, 14, 17, 23, 23, 12, 77, - 76, 80, 10, 67, 89, 67, 69, 74, 78, 79, 3, 35, - 4, 88, 76, 66, 72, 29, 37, 93, 65, 67, 78, 64, - 1, 67, 77, 33, 56, 41, 70, 69, 119, 23, 62, - 62, 122, 24, 21, 28, 32, 31, 25, 20, 23, 29, - 18, 25, 16, 8, 5, 2, 18, 17, 19, 14, 7, 11, - 24, 13, 2, 14, 16, 69, 27, 64, 62, 62, 61, 49, - 58, 62, 62, 62, 43, 33, 28, 26, 42, 38, 77, - 26, 29, 14, 44, 25, 25, 32, 38, 38, 46, 42, - 17, 93, 5, 4, 21, 122, 110, 77, 3, 10, 4, 82, - 86, 91, 89, 121, 96, 9, 64, 68, 75, 81, 85, - 99, 95, 120, 80, 17, 4, 64, 68, 72, 77, 81, - 89, 104, 78, 64, 72, 6, 5, 75, 81, 80, 96, 78, - 27, 4, 7, 5, 70, 74, 83, 81, 85, 62, 122, 122, - 115, 121, 110, 112, 113, 112, 108, 112, 114, - 117, 92, 99, 97, 103, 117, 91, 3, 85, 91, 88, - 76, 71, 72, 64, 79, 64, 4, 67, 68, 65, 68, 77, - 64, 68, 77, 7, 4, 65, 7, 17, 3, 70, 75, 82, - 72, 64, 67, 6, 7, 69, 65, 72, 9, 8, 74, 79, - 76, 76, 17, 62, 62, 62, 62, 62, 62, 62, 62, - 62, 62, 62, 62, 62, 62, 46, 62, 62, 62, 62, - 62, 59, 43, 56, 55, 41, 22, 15, 7, 79, 62, 62, - 62, 56, 42, 43, 34, 35, 42, 39, 30, 16, 29, - 11, 65, 29, 34, 33, 36, 42, 29, 29, 18, 17, 0, - 9, 1, 78, 120, 7, 3, 65, 27, 10, 64, 77, 72, - 70, 70, 71, 68, 3, 69, 71, 69, 64, 12, 7, 13, - 65, 62, 62, 62, 58, 50, 46, 34, 20, 67, 69, - 28, 21, 17, 9, 7, 2, 65, 66, 77, 77, 72, 70, - 70, 71, 68, 3, 69, 71, 69, 64, 12, 7, 13, 65, - 62, 62, 62, 58, 50, 46, 34, 20, 67 }, - - { - - 62, - 9, 74, 62, 9, 74, 120, 98, 12, 10, 11, 40, 57, - 60, 15, 2, 92, 41, 84, 96, 5, 5, 68, 3, 18, - 48, 56, 50, 12, 100, 119, 111, 73, 84, 96, 5, - 91, 84, 21, 7, 86, 99, 110, 2, 0, 85, 97, 0, - 83, 102, 64, 76, 89, 100, 8, 78, 74, 94, 15, - 3, 22, 0, 0, 0, 80, 87, 97, 70, 19, 1, 28, 85, - 122, 118, 86, 91, 77, 79, 86, 86, 119, 72, 98, - 86, 117, 82, 77, 84, 79, 10, 1, 79, 117, 77, - 101, 88, 119, 65, 78, 72, 91, 9, 68, 69, 94, - 85, 85, 80, 71, 66, 70, 85, 66, 5, 67, 5, 70, - 70, 5, 73, 20, 68, 1, 14, 17, 23, 23, 12, 78, - 75, 80, 9, 67, 88, 67, 68, 73, 78, 77, 5, 36, - 6, 86, 77, 67, 72, 30, 37, 94, 65, 67, 79, 0, - 1, 67, 76, 33, 56, 41, 68, 70, 118, 22, 62, - 62, 121, 23, 21, 28, 32, 30, 25, 20, 23, 28, - 17, 24, 15, 8, 5, 2, 17, 17, 18, 14, 6, 10, - 23, 12, 1, 13, 15, 69, 25, 65, 62, 62, 59, 47, - 57, 62, 62, 62, 42, 31, 25, 24, 40, 36, 78, - 24, 28, 13, 43, 24, 24, 30, 36, 36, 44, 41, - 15, 93, 4, 3, 19, 121, 109, 76, 4, 10, 4, 81, - 85, 90, 89, 119, 94, 10, 64, 68, 74, 79, 84, - 98, 94, 117, 79, 17, 4, 64, 68, 71, 76, 80, - 89, 103, 78, 0, 71, 6, 5, 74, 80, 80, 95, 77, - 27, 5, 7, 5, 69, 73, 82, 80, 84, 62, 121, 120, - 113, 120, 109, 111, 111, 110, 107, 111, 112, - 114, 91, 98, 96, 102, 114, 90, 2, 84, 90, 88, - 76, 71, 72, 65, 79, 65, 3, 67, 68, 64, 68, 77, - 64, 68, 76, 7, 3, 65, 6, 16, 2, 70, 75, 81, - 73, 65, 67, 6, 6, 69, 65, 72, 8, 8, 74, 79, - 76, 76, 15, 62, 62, 62, 62, 62, 62, 62, 62, - 62, 62, 62, 62, 62, 62, 44, 62, 62, 62, 62, - 62, 57, 41, 54, 53, 39, 20, 14, 6, 79, 62, 62, - 62, 54, 40, 41, 32, 33, 40, 37, 28, 14, 26, - 10, 67, 28, 33, 30, 34, 41, 27, 27, 17, 16, - 64, 8, 0, 78, 119, 5, 2, 67, 25, 9, 65, 77, - 72, 69, 69, 70, 68, 3, 68, 70, 68, 0, 12, 8, - 14, 65, 62, 62, 60, 56, 48, 44, 31, 18, 69, - 68, 28, 21, 17, 10, 7, 2, 64, 66, 76, 77, 72, - 69, 69, 70, 68, 3, 68, 70, 68, 0, 12, 8, 14, - 65, 62, 62, 60, 56, 48, 44, 31, 18, 69 }, - - { - - 62, - 9, 74, 62, 9, 74, 118, 96, 12, 10, 10, 38, 56, - 59, 16, 2, 90, 39, 83, 94, 5, 5, 67, 2, 17, - 47, 54, 47, 10, 100, 117, 110, 73, 83, 94, 5, - 91, 83, 21, 7, 85, 98, 109, 1, 64, 85, 97, 0, - 83, 101, 64, 76, 89, 100, 8, 77, 74, 93, 16, - 3, 22, 0, 0, 0, 80, 87, 97, 69, 18, 1, 27, 85, - 120, 115, 85, 90, 76, 78, 85, 85, 117, 71, 97, - 85, 115, 83, 77, 84, 79, 10, 1, 78, 115, 77, - 100, 87, 117, 65, 78, 72, 90, 9, 68, 68, 93, - 84, 84, 80, 71, 65, 69, 84, 66, 5, 67, 5, 69, - 70, 5, 73, 21, 68, 1, 15, 18, 23, 23, 12, 78, - 75, 79, 9, 67, 88, 67, 67, 73, 77, 76, 6, 37, - 7, 84, 77, 68, 71, 30, 37, 95, 65, 66, 79, 1, - 1, 67, 74, 33, 56, 41, 67, 71, 116, 21, 62, - 62, 120, 23, 21, 27, 31, 30, 25, 19, 23, 28, - 16, 23, 15, 8, 5, 2, 17, 16, 17, 13, 6, 10, - 22, 12, 0, 12, 15, 69, 24, 65, 62, 62, 58, 46, - 55, 62, 62, 62, 41, 29, 23, 23, 38, 34, 79, - 23, 27, 11, 42, 23, 23, 29, 35, 34, 42, 39, - 14, 93, 3, 2, 17, 119, 107, 75, 4, 10, 4, 80, - 84, 89, 88, 117, 93, 11, 0, 67, 73, 78, 83, - 96, 93, 115, 78, 18, 5, 0, 67, 70, 75, 80, 88, - 102, 77, 1, 70, 6, 5, 73, 80, 79, 94, 76, 27, - 6, 7, 5, 68, 72, 81, 80, 83, 62, 120, 119, - 112, 118, 108, 109, 110, 108, 105, 109, 110, - 112, 90, 97, 95, 101, 111, 90, 1, 84, 89, 87, - 76, 71, 72, 65, 78, 65, 2, 67, 68, 0, 68, 77, - 64, 68, 76, 6, 3, 65, 5, 15, 2, 70, 75, 80, - 73, 65, 66, 5, 6, 69, 65, 72, 8, 7, 74, 78, - 76, 76, 14, 62, 62, 62, 62, 62, 62, 62, 62, - 62, 62, 62, 62, 62, 62, 42, 62, 62, 62, 62, - 62, 55, 40, 52, 50, 37, 19, 13, 5, 79, 62, 62, - 62, 52, 38, 39, 31, 31, 38, 35, 26, 12, 24, 8, - 68, 27, 32, 28, 33, 39, 26, 25, 16, 15, 65, 7, - 64, 78, 118, 4, 1, 68, 24, 8, 66, 77, 71, 69, - 68, 69, 67, 4, 68, 69, 67, 1, 13, 9, 14, 64, - 62, 62, 58, 54, 46, 42, 29, 16, 70, 68, 29, - 22, 18, 11, 8, 3, 64, 66, 75, 77, 71, 69, 68, - 69, 67, 4, 68, 69, 67, 1, 13, 9, 14, 64, 62, - 62, 58, 54, 46, 42, 29, 16, 70 }, - - { - - 62, - 9, 75, 62, 9, 75, 116, 95, 13, 10, 10, 37, 54, - 58, 16, 3, 88, 38, 83, 93, 5, 4, 66, 1, 16, - 46, 53, 43, 8, 101, 115, 108, 73, 83, 93, 5, - 90, 82, 22, 7, 84, 97, 108, 64, 65, 85, 98, 0, - 83, 101, 64, 77, 88, 100, 7, 77, 74, 92, 16, - 3, 22, 0, 0, 0, 79, 87, 97, 69, 18, 0, 27, 84, - 119, 113, 84, 89, 74, 76, 84, 84, 115, 70, 96, - 85, 113, 84, 77, 84, 79, 11, 1, 77, 113, 77, - 99, 86, 115, 65, 78, 72, 90, 10, 69, 68, 93, - 84, 83, 80, 70, 65, 69, 83, 65, 5, 67, 5, 69, - 70, 5, 73, 21, 68, 1, 15, 18, 24, 24, 13, 79, - 74, 78, 8, 67, 88, 67, 66, 73, 77, 75, 7, 37, - 9, 83, 78, 69, 71, 30, 37, 95, 66, 66, 80, 1, - 0, 66, 73, 33, 56, 42, 66, 72, 115, 20, 62, - 62, 118, 23, 21, 27, 30, 29, 24, 19, 22, 27, - 16, 23, 15, 7, 5, 1, 16, 15, 16, 13, 6, 10, - 22, 11, 65, 12, 14, 69, 23, 66, 62, 62, 56, - 44, 53, 62, 62, 62, 39, 27, 21, 21, 36, 32, - 81, 22, 25, 9, 40, 22, 22, 28, 33, 32, 40, 37, - 12, 93, 2, 1, 16, 118, 106, 73, 5, 10, 4, 79, - 84, 89, 87, 116, 92, 12, 1, 66, 73, 77, 82, - 95, 92, 113, 78, 18, 5, 0, 67, 69, 75, 79, 87, - 101, 77, 3, 69, 6, 5, 73, 79, 79, 94, 76, 28, - 6, 8, 5, 67, 72, 81, 79, 83, 62, 118, 117, - 110, 116, 106, 108, 108, 107, 104, 107, 108, - 110, 90, 96, 95, 101, 108, 90, 0, 84, 89, 86, - 76, 71, 72, 65, 78, 65, 1, 67, 68, 0, 68, 77, - 64, 68, 76, 6, 3, 65, 4, 14, 2, 70, 75, 79, - 74, 65, 65, 4, 6, 69, 65, 71, 8, 7, 73, 77, - 76, 76, 12, 62, 62, 62, 62, 62, 62, 62, 62, - 62, 62, 62, 62, 62, 62, 40, 62, 62, 62, 62, - 62, 52, 38, 50, 48, 35, 18, 12, 4, 79, 62, 62, - 62, 50, 36, 38, 29, 29, 36, 32, 24, 10, 22, 6, - 69, 26, 30, 26, 31, 37, 24, 23, 14, 13, 66, 6, - 65, 79, 117, 3, 64, 70, 23, 6, 67, 76, 71, 68, - 68, 68, 66, 5, 68, 68, 66, 2, 13, 10, 15, 0, - 62, 62, 56, 52, 44, 40, 27, 14, 71, 67, 29, - 22, 19, 11, 9, 3, 0, 65, 75, 76, 71, 68, 68, - 68, 66, 5, 68, 68, 66, 2, 13, 10, 15, 0, 62, - 62, 56, 52, 44, 40, 27, 14, 71 }, - - { - - 62, - 9, 75, 62, 9, 75, 114, 93, 13, 10, 9, 35, 53, - 57, 17, 3, 87, 36, 83, 91, 4, 4, 65, 0, 15, - 45, 51, 40, 5, 102, 113, 107, 73, 83, 91, 4, - 90, 81, 22, 7, 84, 96, 106, 65, 66, 85, 98, 0, - 82, 100, 65, 77, 88, 100, 7, 77, 74, 91, 17, - 3, 22, 0, 0, 0, 79, 87, 97, 68, 17, 0, 26, 84, - 118, 111, 83, 88, 73, 75, 83, 83, 113, 69, 95, - 84, 110, 84, 78, 84, 80, 11, 1, 76, 110, 76, - 99, 86, 113, 65, 78, 72, 90, 10, 69, 67, 92, - 84, 82, 79, 70, 65, 68, 82, 65, 5, 68, 5, 69, - 70, 5, 73, 21, 68, 1, 16, 18, 24, 24, 13, 79, - 74, 78, 8, 67, 87, 67, 65, 72, 76, 73, 9, 38, - 10, 81, 78, 70, 70, 31, 37, 96, 66, 65, 80, 2, - 0, 66, 72, 33, 56, 42, 64, 73, 113, 19, 62, - 62, 117, 23, 21, 26, 30, 29, 24, 18, 22, 27, - 15, 22, 15, 7, 5, 1, 16, 15, 15, 12, 6, 10, - 21, 11, 66, 11, 13, 69, 22, 66, 62, 62, 54, - 43, 52, 62, 62, 62, 38, 25, 19, 20, 34, 30, - 82, 21, 24, 8, 39, 21, 21, 26, 32, 30, 38, 36, - 11, 93, 1, 0, 14, 116, 104, 72, 5, 10, 4, 78, - 83, 88, 87, 114, 90, 13, 2, 66, 72, 75, 81, - 93, 91, 110, 77, 19, 6, 1, 66, 68, 74, 79, 86, - 100, 77, 4, 68, 6, 5, 72, 79, 79, 93, 75, 28, - 7, 8, 5, 66, 71, 80, 79, 82, 62, 117, 116, - 109, 115, 105, 106, 107, 105, 102, 105, 106, - 107, 89, 95, 94, 100, 105, 89, 64, 83, 88, 85, - 76, 71, 72, 65, 77, 66, 0, 67, 68, 1, 68, 77, - 64, 68, 75, 5, 2, 65, 3, 13, 1, 70, 75, 78, - 75, 66, 64, 4, 5, 69, 65, 71, 7, 6, 73, 77, - 76, 76, 11, 62, 62, 62, 62, 62, 62, 62, 62, - 62, 62, 62, 62, 62, 62, 38, 62, 62, 62, 62, - 62, 50, 36, 48, 45, 33, 17, 11, 3, 79, 62, 61, - 62, 48, 34, 36, 28, 27, 34, 30, 22, 8, 20, 5, - 71, 25, 29, 24, 30, 36, 23, 21, 13, 12, 67, 5, - 66, 79, 116, 1, 65, 71, 21, 5, 68, 76, 70, 68, - 67, 67, 65, 5, 67, 67, 65, 3, 14, 11, 15, 0, - 62, 60, 54, 50, 42, 38, 24, 12, 72, 67, 30, - 23, 19, 12, 10, 4, 0, 65, 74, 76, 70, 68, 67, - 67, 65, 5, 67, 67, 65, 3, 14, 11, 15, 0, 62, - 60, 54, 50, 42, 38, 24, 12, 72 }, - - { - - 62, - 8, 75, 62, 8, 75, 113, 92, 13, 10, 9, 33, 51, - 56, 17, 3, 85, 34, 83, 90, 4, 3, 64, 64, 13, - 43, 49, 36, 3, 103, 111, 106, 73, 83, 90, 4, - 90, 81, 22, 6, 83, 95, 105, 66, 68, 86, 99, 0, - 82, 99, 65, 78, 88, 100, 7, 77, 74, 91, 17, 3, - 22, 0, 0, 0, 78, 88, 97, 68, 16, 0, 26, 83, - 117, 109, 82, 88, 71, 73, 83, 82, 111, 69, 94, - 83, 108, 85, 78, 85, 80, 11, 0, 76, 108, 76, - 98, 85, 112, 65, 78, 72, 90, 10, 69, 67, 91, - 84, 82, 79, 70, 65, 68, 81, 64, 5, 68, 4, 69, - 70, 4, 73, 21, 68, 1, 16, 18, 24, 24, 13, 80, - 73, 77, 7, 67, 87, 67, 64, 72, 76, 72, 10, 39, - 12, 79, 79, 71, 70, 31, 37, 97, 66, 65, 81, 2, - 0, 66, 71, 33, 56, 42, 0, 74, 112, 18, 59, 62, - 116, 22, 21, 26, 29, 28, 23, 18, 22, 26, 14, - 21, 14, 7, 4, 0, 15, 14, 14, 12, 5, 9, 20, 10, - 67, 10, 12, 69, 20, 67, 62, 62, 52, 41, 50, - 60, 62, 62, 37, 23, 16, 18, 31, 28, 84, 19, - 23, 6, 38, 20, 20, 25, 30, 28, 36, 34, 9, 93, - 0, 64, 12, 115, 103, 71, 6, 10, 4, 78, 82, 87, - 86, 112, 89, 13, 2, 65, 72, 74, 80, 92, 90, - 108, 77, 19, 6, 1, 66, 68, 74, 78, 86, 99, 77, - 5, 67, 6, 5, 71, 78, 79, 92, 74, 28, 8, 8, 5, - 65, 71, 79, 78, 82, 62, 116, 114, 107, 113, - 104, 105, 105, 104, 101, 104, 104, 105, 89, - 94, 94, 99, 102, 89, 65, 83, 87, 85, 76, 71, - 72, 66, 77, 66, 64, 67, 68, 1, 68, 77, 65, 68, - 75, 5, 2, 66, 2, 12, 1, 71, 75, 77, 76, 66, - 64, 3, 5, 69, 66, 71, 7, 6, 73, 76, 76, 76, 9, - 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, - 62, 62, 61, 36, 62, 62, 62, 62, 61, 48, 34, - 45, 43, 31, 15, 9, 2, 79, 61, 59, 62, 46, 31, - 34, 26, 24, 32, 28, 20, 6, 17, 3, 72, 23, 28, - 21, 28, 34, 21, 19, 11, 10, 68, 4, 67, 79, - 115, 0, 67, 73, 20, 4, 69, 76, 70, 67, 67, 66, - 65, 6, 67, 66, 65, 4, 14, 11, 16, 1, 61, 58, - 52, 48, 40, 36, 22, 10, 74, 66, 30, 23, 20, - 12, 10, 4, 1, 65, 74, 76, 70, 67, 67, 66, 65, - 6, 67, 66, 65, 4, 14, 11, 16, 1, 61, 58, 52, - 48, 40, 36, 22, 10, 74 }, - - { - - 62, - 8, 75, 62, 8, 75, 111, 91, 14, 10, 9, 31, 49, - 56, 18, 3, 83, 33, 82, 88, 4, 3, 0, 64, 12, - 42, 47, 33, 1, 103, 109, 104, 72, 82, 88, 4, - 89, 80, 23, 6, 82, 94, 104, 67, 69, 86, 99, 0, - 82, 98, 65, 78, 88, 100, 7, 76, 73, 90, 17, 3, - 22, 0, 0, 0, 77, 88, 97, 68, 15, 0, 26, 82, - 115, 106, 81, 87, 69, 71, 82, 81, 109, 68, 92, - 82, 106, 86, 78, 85, 80, 12, 0, 75, 106, 76, - 97, 84, 110, 65, 77, 72, 89, 11, 69, 66, 90, - 83, 81, 79, 70, 64, 67, 80, 0, 5, 68, 4, 68, - 69, 4, 73, 22, 68, 1, 16, 19, 25, 24, 14, 80, - 72, 76, 6, 67, 87, 67, 0, 72, 75, 71, 11, 40, - 14, 77, 80, 72, 69, 31, 38, 98, 66, 65, 81, 3, - 0, 66, 69, 33, 56, 42, 1, 75, 111, 17, 57, 62, - 114, 22, 21, 26, 28, 28, 23, 18, 22, 26, 13, - 20, 14, 7, 4, 0, 15, 13, 14, 12, 5, 9, 19, 9, - 68, 10, 12, 69, 19, 67, 62, 62, 51, 40, 48, - 58, 62, 62, 36, 21, 14, 17, 29, 27, 85, 18, - 22, 4, 37, 19, 19, 24, 28, 27, 34, 32, 8, 93, - 0, 65, 11, 113, 101, 69, 7, 10, 4, 77, 81, 86, - 85, 110, 88, 14, 3, 64, 71, 73, 79, 91, 89, - 106, 76, 20, 7, 2, 66, 67, 73, 77, 85, 97, 76, - 7, 66, 7, 5, 70, 77, 78, 91, 73, 29, 9, 9, 6, - 64, 70, 78, 77, 81, 62, 114, 112, 105, 111, - 103, 104, 103, 102, 99, 102, 102, 103, 88, 93, - 93, 98, 98, 89, 66, 83, 86, 84, 75, 71, 72, - 66, 77, 66, 65, 67, 68, 2, 68, 77, 65, 68, 75, - 5, 2, 66, 2, 11, 1, 71, 74, 75, 76, 66, 0, 2, - 5, 69, 66, 70, 7, 6, 72, 75, 75, 75, 7, 62, - 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, - 62, 58, 34, 62, 62, 62, 62, 58, 46, 33, 43, - 41, 30, 14, 8, 1, 79, 59, 57, 60, 44, 29, 32, - 25, 22, 30, 26, 18, 4, 15, 1, 73, 22, 27, 19, - 27, 32, 20, 17, 10, 9, 69, 3, 67, 79, 114, 64, - 68, 75, 19, 3, 70, 76, 69, 66, 66, 64, 64, 7, - 67, 65, 64, 5, 15, 12, 17, 2, 60, 57, 50, 46, - 38, 34, 20, 8, 75, 65, 30, 24, 21, 13, 11, 5, - 2, 64, 73, 76, 69, 66, 66, 64, 64, 7, 67, 65, - 64, 5, 15, 12, 17, 2, 60, 57, 50, 46, 38, 34, - 20, 8, 75 }, - - { - - 62, - 8, 75, 62, 8, 75, 109, 89, 14, 10, 8, 29, 48, - 55, 19, 3, 82, 31, 82, 87, 3, 3, 1, 65, 11, - 41, 45, 30, 65, 104, 107, 103, 72, 82, 87, 3, - 89, 79, 23, 6, 82, 93, 102, 68, 70, 86, 99, 0, - 81, 97, 66, 78, 88, 100, 7, 76, 73, 89, 18, 3, - 22, 0, 0, 0, 77, 88, 97, 67, 14, 0, 25, 82, - 114, 104, 80, 86, 68, 70, 81, 80, 107, 67, 91, - 81, 103, 86, 79, 85, 81, 12, 0, 74, 103, 75, - 97, 84, 108, 65, 77, 72, 89, 11, 69, 66, 89, - 83, 80, 78, 70, 64, 67, 79, 0, 5, 69, 4, 68, - 69, 4, 73, 22, 68, 1, 17, 19, 25, 24, 14, 81, - 72, 76, 6, 67, 86, 67, 1, 71, 75, 69, 13, 41, - 15, 75, 80, 73, 69, 32, 38, 99, 66, 64, 82, 4, - 0, 66, 68, 33, 56, 42, 3, 76, 109, 16, 54, 62, - 113, 22, 21, 25, 28, 27, 23, 17, 22, 25, 12, - 19, 14, 7, 4, 0, 14, 13, 13, 11, 5, 9, 18, 9, - 69, 9, 11, 69, 18, 68, 60, 62, 49, 38, 47, 56, - 62, 62, 35, 19, 12, 15, 27, 25, 86, 17, 21, 3, - 36, 18, 18, 22, 27, 25, 32, 31, 6, 93, 64, 66, - 9, 112, 100, 68, 7, 10, 4, 76, 80, 85, 85, - 108, 86, 15, 4, 64, 70, 71, 78, 89, 88, 103, - 75, 20, 7, 2, 65, 66, 72, 77, 84, 96, 76, 8, - 65, 7, 5, 69, 77, 78, 90, 72, 29, 10, 9, 6, 0, - 69, 77, 77, 80, 62, 113, 111, 104, 110, 102, - 102, 102, 100, 98, 100, 100, 100, 87, 92, 92, - 97, 95, 88, 67, 82, 85, 83, 75, 71, 72, 66, - 76, 67, 66, 67, 68, 3, 68, 77, 65, 68, 74, 4, - 1, 66, 1, 10, 0, 71, 74, 74, 77, 67, 1, 2, 4, - 69, 66, 70, 6, 5, 72, 75, 75, 75, 6, 62, 62, - 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, - 56, 32, 62, 62, 62, 62, 55, 44, 31, 41, 38, - 28, 13, 7, 0, 79, 57, 54, 57, 42, 27, 30, 23, - 20, 28, 24, 16, 2, 13, 0, 75, 21, 26, 17, 25, - 31, 18, 15, 9, 8, 70, 2, 68, 79, 113, 66, 69, - 76, 17, 2, 71, 76, 69, 66, 65, 0, 0, 7, 66, - 64, 0, 6, 15, 13, 17, 2, 60, 55, 48, 44, 36, - 32, 17, 6, 76, 65, 31, 24, 21, 14, 12, 5, 2, - 64, 72, 76, 69, 66, 65, 0, 0, 7, 66, 64, 0, 6, - 15, 13, 17, 2, 60, 55, 48, 44, 36, 32, 17, 6, - 76 }, - - { - - 62, - 8, 76, 62, 8, 76, 107, 88, 15, 10, 8, 28, 46, - 54, 19, 4, 80, 30, 82, 85, 3, 2, 2, 66, 10, - 40, 44, 26, 67, 105, 105, 101, 72, 82, 85, 3, - 88, 78, 24, 6, 81, 92, 101, 70, 71, 86, 100, - 0, 81, 97, 66, 79, 87, 100, 6, 76, 73, 88, 18, - 3, 22, 0, 0, 0, 76, 88, 97, 67, 14, 64, 25, - 81, 113, 102, 79, 85, 66, 68, 80, 79, 105, 66, - 90, 81, 101, 87, 79, 85, 81, 13, 0, 73, 101, - 75, 96, 83, 106, 65, 77, 72, 89, 12, 70, 65, - 89, 83, 79, 78, 69, 64, 66, 78, 1, 5, 69, 4, - 68, 69, 4, 73, 22, 68, 1, 17, 19, 26, 25, 15, - 81, 71, 75, 5, 67, 86, 67, 2, 71, 74, 68, 14, - 41, 17, 74, 81, 74, 68, 32, 38, 99, 67, 64, - 82, 4, 64, 65, 67, 33, 56, 43, 4, 77, 108, 15, - 51, 62, 111, 22, 21, 25, 27, 27, 22, 17, 21, - 25, 12, 19, 14, 6, 4, 64, 14, 12, 12, 11, 5, - 9, 18, 8, 71, 9, 10, 69, 17, 68, 57, 62, 47, - 37, 45, 54, 62, 61, 33, 17, 10, 14, 25, 23, - 88, 16, 19, 1, 34, 17, 17, 21, 25, 23, 30, 29, - 5, 93, 65, 67, 8, 110, 98, 66, 8, 10, 4, 75, - 80, 85, 84, 107, 85, 16, 5, 0, 70, 70, 77, 88, - 87, 101, 75, 21, 8, 3, 65, 65, 72, 76, 83, 95, - 76, 10, 64, 7, 5, 69, 76, 78, 90, 72, 30, 10, - 10, 6, 1, 69, 77, 76, 80, 62, 111, 109, 102, - 108, 100, 101, 100, 99, 96, 98, 98, 98, 87, - 91, 92, 97, 92, 88, 68, 82, 85, 82, 75, 71, - 72, 66, 76, 67, 67, 67, 68, 3, 68, 77, 65, 68, - 74, 4, 1, 66, 0, 9, 0, 71, 74, 73, 78, 67, 2, - 1, 4, 69, 66, 69, 6, 5, 71, 74, 75, 75, 4, 62, - 61, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, - 62, 53, 30, 62, 62, 62, 62, 53, 41, 29, 39, - 36, 26, 12, 6, 64, 79, 55, 52, 55, 40, 25, 29, - 22, 18, 26, 21, 14, 0, 11, 65, 76, 20, 24, 15, - 24, 29, 17, 13, 7, 6, 71, 1, 69, 80, 112, 67, - 71, 78, 16, 0, 72, 75, 68, 65, 65, 1, 1, 8, - 66, 0, 1, 7, 16, 14, 18, 3, 59, 53, 46, 42, - 34, 30, 15, 4, 77, 64, 31, 25, 22, 14, 13, 6, - 3, 0, 72, 75, 68, 65, 65, 1, 1, 8, 66, 0, 1, - 7, 16, 14, 18, 3, 59, 53, 46, 42, 34, 30, 15, - 4, 77 }, - - { - - 62, - 8, 76, 62, 8, 76, 106, 86, 15, 10, 7, 26, 45, - 53, 20, 4, 78, 28, 82, 84, 3, 2, 3, 67, 8, 38, - 42, 23, 69, 106, 103, 100, 72, 82, 84, 3, 88, - 77, 24, 5, 80, 91, 100, 71, 73, 87, 100, 0, - 81, 96, 66, 79, 87, 100, 6, 76, 73, 88, 19, 3, - 22, 0, 0, 0, 76, 89, 97, 66, 13, 64, 24, 81, - 112, 100, 78, 84, 65, 67, 80, 78, 103, 65, 89, - 80, 99, 88, 79, 85, 81, 13, 64, 72, 99, 75, - 95, 82, 104, 65, 77, 72, 89, 12, 70, 65, 88, - 83, 79, 78, 69, 64, 66, 77, 1, 5, 69, 3, 68, - 69, 4, 73, 22, 68, 1, 18, 19, 26, 25, 15, 82, - 71, 74, 5, 67, 86, 67, 3, 71, 74, 67, 15, 42, - 18, 72, 81, 75, 68, 32, 38, 100, 67, 0, 83, 5, - 64, 65, 66, 33, 56, 43, 5, 78, 106, 14, 48, - 60, 110, 21, 21, 24, 26, 26, 22, 16, 21, 24, - 11, 18, 13, 6, 4, 64, 13, 11, 11, 10, 4, 8, - 17, 8, 72, 8, 9, 69, 15, 69, 55, 62, 45, 35, - 43, 52, 62, 58, 32, 15, 7, 12, 23, 21, 89, 14, - 18, 64, 33, 16, 16, 20, 24, 21, 28, 27, 3, 93, - 66, 68, 6, 109, 97, 65, 8, 10, 4, 74, 79, 84, - 83, 105, 84, 17, 5, 1, 69, 69, 76, 86, 86, 99, - 74, 21, 8, 3, 64, 64, 71, 76, 83, 94, 76, 11, - 0, 7, 5, 68, 76, 78, 89, 71, 30, 11, 10, 6, 2, - 68, 76, 76, 79, 62, 110, 108, 101, 106, 99, - 99, 99, 97, 95, 97, 96, 96, 86, 90, 91, 96, - 89, 88, 69, 82, 84, 82, 75, 71, 72, 67, 75, - 67, 68, 67, 68, 4, 68, 77, 65, 68, 74, 3, 1, - 66, 64, 8, 0, 71, 74, 72, 79, 67, 2, 0, 4, 69, - 66, 69, 6, 4, 71, 73, 75, 75, 3, 62, 60, 62, - 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 50, - 28, 62, 62, 62, 62, 50, 39, 27, 37, 33, 24, - 10, 5, 65, 79, 52, 50, 53, 38, 23, 27, 20, 16, - 24, 19, 12, 65, 8, 67, 77, 19, 23, 12, 22, 27, - 15, 11, 6, 5, 72, 0, 70, 80, 111, 68, 72, 79, - 15, 64, 73, 75, 68, 65, 64, 2, 1, 9, 66, 1, 2, - 8, 16, 15, 18, 4, 59, 51, 44, 40, 32, 28, 13, - 2, 79, 64, 32, 25, 23, 15, 13, 6, 3, 0, 71, - 75, 68, 65, 64, 2, 1, 9, 66, 1, 2, 8, 16, 15, - 18, 4, 59, 51, 44, 40, 32, 28, 13, 2, 79 }, - - { - - 62, - 8, 76, 62, 8, 76, 104, 85, 15, 10, 7, 24, 43, - 52, 21, 4, 77, 26, 81, 82, 2, 2, 4, 68, 7, 37, - 40, 20, 72, 106, 101, 99, 72, 81, 82, 2, 88, - 76, 24, 5, 80, 90, 98, 72, 74, 87, 100, 0, 80, - 95, 67, 79, 87, 100, 6, 75, 73, 87, 19, 3, 22, - 0, 0, 0, 75, 89, 97, 66, 12, 64, 24, 80, 110, - 97, 77, 83, 0, 65, 79, 77, 101, 64, 88, 79, - 96, 88, 80, 85, 82, 13, 64, 71, 96, 74, 95, - 82, 102, 65, 77, 72, 88, 12, 70, 64, 87, 82, - 78, 77, 69, 0, 65, 76, 2, 5, 70, 3, 67, 69, 4, - 73, 23, 68, 1, 18, 20, 26, 25, 15, 82, 70, 74, - 4, 67, 85, 67, 4, 70, 73, 65, 17, 43, 20, 70, - 82, 76, 67, 33, 38, 101, 67, 0, 83, 6, 64, 65, - 64, 33, 56, 43, 7, 79, 105, 13, 46, 57, 109, - 21, 21, 24, 26, 26, 22, 16, 21, 24, 10, 17, - 13, 6, 4, 64, 13, 11, 10, 10, 4, 8, 16, 7, 73, - 7, 9, 69, 14, 69, 53, 62, 44, 34, 42, 50, 62, - 56, 31, 13, 5, 11, 21, 19, 90, 13, 17, 65, 32, - 15, 15, 18, 22, 19, 26, 26, 2, 93, 67, 69, 4, - 107, 95, 64, 9, 10, 4, 73, 78, 83, 83, 103, - 82, 18, 6, 1, 68, 67, 75, 85, 85, 96, 73, 22, - 9, 4, 64, 0, 70, 75, 82, 93, 75, 12, 1, 7, 5, - 67, 75, 77, 88, 70, 30, 12, 10, 6, 3, 67, 75, - 75, 78, 62, 109, 106, 99, 105, 98, 98, 97, 95, - 93, 95, 94, 93, 85, 89, 90, 95, 86, 87, 70, - 81, 83, 81, 75, 71, 72, 67, 75, 68, 69, 67, - 68, 5, 68, 77, 65, 68, 73, 3, 0, 66, 65, 7, - 64, 71, 74, 71, 79, 68, 3, 0, 3, 69, 66, 69, - 5, 4, 71, 73, 75, 75, 1, 62, 59, 62, 62, 62, - 62, 62, 62, 62, 62, 62, 62, 60, 48, 26, 62, - 62, 62, 62, 47, 37, 26, 35, 31, 22, 9, 4, 66, - 79, 50, 47, 50, 36, 21, 25, 19, 14, 22, 17, - 10, 67, 6, 68, 79, 18, 22, 10, 21, 26, 14, 9, - 5, 4, 73, 64, 71, 80, 110, 70, 73, 81, 13, 65, - 74, 75, 67, 64, 0, 3, 2, 9, 65, 2, 3, 9, 17, - 16, 19, 4, 58, 49, 42, 38, 30, 26, 10, 0, 80, - 0, 32, 26, 23, 16, 14, 7, 4, 0, 70, 75, 67, - 64, 0, 3, 2, 9, 65, 2, 3, 9, 17, 16, 19, 4, - 58, 49, 42, 38, 30, 26, 10, 0, 80 }, - - { - - 61, - 8, 76, 61, 8, 76, 102, 83, 16, 10, 6, 22, 42, - 51, 21, 4, 75, 25, 81, 81, 2, 1, 5, 69, 6, 36, - 38, 16, 74, 107, 99, 97, 72, 81, 81, 2, 87, - 75, 25, 5, 79, 89, 97, 73, 75, 87, 101, 0, 80, - 94, 67, 80, 87, 100, 6, 75, 73, 86, 20, 3, 22, - 0, 0, 0, 75, 89, 97, 65, 11, 64, 23, 80, 109, - 95, 76, 82, 1, 64, 78, 76, 99, 0, 87, 78, 94, - 89, 80, 85, 82, 14, 64, 70, 94, 74, 94, 81, - 100, 65, 77, 72, 88, 13, 70, 64, 86, 82, 77, - 77, 69, 0, 65, 75, 2, 5, 70, 3, 67, 69, 4, 73, - 23, 68, 1, 19, 20, 27, 25, 16, 83, 70, 73, 4, - 67, 85, 67, 5, 70, 73, 64, 18, 44, 21, 68, 82, - 77, 67, 33, 38, 102, 67, 1, 84, 6, 64, 65, 0, - 33, 56, 43, 8, 80, 103, 12, 43, 54, 107, 21, - 21, 23, 25, 25, 21, 15, 21, 23, 9, 16, 13, 6, - 4, 65, 12, 10, 9, 9, 4, 8, 15, 7, 74, 7, 8, - 69, 13, 70, 51, 60, 42, 32, 40, 48, 62, 53, - 30, 11, 3, 9, 19, 17, 92, 12, 16, 67, 31, 14, - 14, 17, 21, 17, 24, 24, 0, 93, 68, 70, 3, 106, - 94, 1, 9, 10, 4, 72, 77, 82, 82, 101, 81, 19, - 7, 2, 68, 66, 74, 83, 84, 94, 73, 22, 9, 4, 0, - 1, 70, 75, 81, 92, 75, 14, 2, 7, 5, 66, 75, - 77, 87, 69, 31, 13, 11, 6, 4, 67, 74, 75, 78, - 62, 107, 105, 98, 103, 97, 96, 96, 94, 92, 93, - 92, 91, 85, 88, 90, 94, 83, 87, 71, 81, 82, - 80, 75, 71, 72, 67, 74, 68, 70, 67, 68, 5, 68, - 77, 65, 68, 73, 2, 0, 66, 66, 6, 64, 71, 74, - 70, 80, 68, 4, 64, 3, 69, 66, 68, 5, 3, 70, - 72, 75, 75, 0, 62, 58, 61, 61, 61, 62, 62, 62, - 61, 62, 62, 62, 57, 45, 24, 62, 60, 59, 60, - 44, 35, 24, 33, 28, 20, 8, 3, 67, 79, 48, 45, - 48, 34, 19, 23, 17, 12, 20, 15, 8, 69, 4, 70, - 80, 17, 21, 8, 19, 24, 12, 7, 3, 2, 74, 65, - 72, 80, 109, 71, 75, 82, 12, 66, 75, 75, 67, - 64, 0, 4, 3, 10, 65, 3, 4, 10, 17, 17, 19, 5, - 58, 47, 40, 36, 28, 24, 8, 65, 81, 0, 33, 26, - 24, 16, 15, 7, 4, 1, 70, 75, 67, 64, 0, 4, 3, - 10, 65, 3, 4, 10, 17, 17, 19, 5, 58, 47, 40, - 36, 28, 24, 8, 65, 81 }, - - { - - 60, - 8, 76, 60, 8, 76, 100, 82, 16, 10, 6, 20, 40, - 50, 22, 4, 73, 23, 81, 79, 2, 1, 6, 70, 5, 35, - 36, 13, 76, 108, 97, 96, 72, 81, 79, 2, 87, - 74, 25, 5, 78, 88, 96, 74, 76, 87, 101, 0, 80, - 93, 67, 80, 87, 100, 6, 75, 73, 85, 20, 3, 22, - 0, 0, 0, 74, 89, 97, 65, 10, 64, 23, 79, 108, - 93, 75, 81, 3, 1, 77, 75, 97, 1, 86, 77, 92, - 90, 80, 85, 82, 14, 64, 69, 92, 74, 93, 80, - 98, 65, 77, 72, 88, 13, 70, 0, 85, 82, 76, 77, - 69, 0, 64, 74, 3, 5, 70, 3, 67, 69, 4, 73, 23, - 68, 1, 19, 20, 27, 25, 16, 83, 69, 72, 3, 67, - 85, 67, 6, 70, 72, 0, 19, 45, 23, 66, 83, 78, - 66, 33, 38, 103, 67, 1, 84, 7, 64, 65, 1, 33, - 56, 43, 9, 81, 102, 11, 40, 51, 106, 21, 21, - 23, 24, 25, 21, 15, 21, 23, 8, 15, 13, 6, 4, - 65, 12, 9, 8, 9, 4, 8, 14, 6, 75, 6, 7, 69, - 12, 70, 49, 58, 40, 31, 38, 46, 59, 51, 29, 9, - 1, 8, 17, 15, 93, 11, 15, 69, 30, 13, 13, 16, - 19, 15, 22, 22, 64, 93, 69, 71, 1, 104, 92, 2, - 10, 10, 4, 71, 76, 81, 81, 99, 80, 20, 8, 3, - 67, 65, 73, 82, 83, 92, 72, 23, 10, 5, 0, 2, - 69, 74, 80, 91, 75, 15, 3, 7, 5, 65, 74, 77, - 86, 68, 31, 14, 11, 6, 5, 66, 73, 74, 77, 62, - 106, 103, 96, 101, 96, 95, 94, 92, 90, 91, 90, - 89, 84, 87, 89, 93, 80, 87, 72, 81, 81, 79, - 75, 71, 72, 67, 74, 68, 71, 67, 68, 6, 68, 77, - 65, 68, 73, 2, 0, 66, 67, 5, 64, 71, 74, 69, - 81, 68, 5, 65, 3, 69, 66, 68, 5, 3, 70, 71, - 75, 75, 65, 61, 57, 60, 59, 59, 62, 62, 62, - 59, 60, 62, 61, 54, 42, 22, 61, 57, 55, 55, - 41, 33, 22, 31, 26, 18, 7, 2, 68, 79, 46, 43, - 46, 32, 17, 21, 16, 10, 18, 13, 6, 71, 2, 72, - 81, 16, 20, 6, 18, 22, 11, 5, 2, 1, 75, 66, - 73, 80, 108, 72, 76, 84, 11, 67, 76, 75, 66, - 0, 1, 5, 4, 11, 65, 4, 5, 11, 18, 18, 20, 6, - 57, 45, 38, 34, 26, 22, 6, 67, 82, 1, 33, 27, - 25, 17, 16, 8, 5, 1, 69, 75, 66, 0, 1, 5, 4, - 11, 65, 4, 5, 11, 18, 18, 20, 6, 57, 45, 38, - 34, 26, 22, 6, 67, 82 }, - - { - - 58, - 7, 77, 58, 7, 77, 99, 81, 16, 10, 5, 18, 38, - 49, 22, 4, 72, 21, 81, 78, 1, 0, 7, 71, 3, 33, - 34, 9, 79, 109, 95, 95, 72, 81, 78, 1, 87, 74, - 25, 4, 78, 88, 95, 76, 78, 88, 102, 64, 80, - 93, 68, 81, 87, 100, 5, 75, 73, 85, 20, 2, 22, - 0, 0, 0, 74, 90, 97, 65, 9, 65, 22, 79, 107, - 91, 74, 81, 4, 2, 77, 74, 96, 1, 85, 77, 90, - 91, 81, 86, 83, 14, 65, 69, 90, 74, 93, 80, - 97, 65, 77, 72, 88, 13, 71, 0, 85, 82, 76, 77, - 69, 0, 64, 73, 3, 5, 71, 2, 67, 69, 3, 73, 23, - 68, 1, 19, 20, 27, 25, 16, 84, 69, 72, 2, 67, - 85, 68, 6, 70, 72, 1, 20, 45, 24, 65, 84, 80, - 66, 33, 38, 104, 68, 1, 85, 7, 65, 65, 2, 33, - 55, 43, 10, 82, 101, 9, 37, 47, 105, 20, 21, - 22, 23, 24, 20, 14, 20, 22, 7, 14, 12, 5, 3, - 66, 11, 8, 7, 8, 3, 7, 13, 5, 77, 5, 6, 69, - 10, 71, 46, 55, 38, 29, 36, 43, 55, 48, 27, 7, - 65, 6, 14, 13, 95, 9, 13, 71, 28, 12, 12, 14, - 17, 13, 20, 20, 66, 93, 70, 72, 64, 103, 91, - 3, 10, 10, 4, 71, 76, 81, 81, 98, 79, 20, 8, - 3, 67, 64, 72, 81, 83, 90, 72, 23, 10, 5, 0, - 2, 69, 74, 80, 90, 75, 16, 4, 7, 4, 65, 74, - 77, 86, 68, 31, 14, 11, 6, 6, 66, 73, 74, 77, - 62, 105, 102, 95, 100, 95, 94, 93, 91, 89, 90, - 89, 87, 84, 87, 89, 93, 77, 87, 74, 81, 81, - 79, 75, 71, 72, 68, 74, 69, 72, 68, 68, 6, 69, - 77, 66, 68, 73, 1, 64, 67, 68, 4, 65, 72, 74, - 68, 82, 69, 5, 66, 2, 69, 67, 68, 4, 2, 70, - 71, 75, 75, 67, 59, 56, 58, 57, 56, 62, 62, - 62, 56, 57, 62, 58, 50, 39, 20, 57, 53, 51, - 49, 38, 30, 20, 28, 23, 16, 5, 0, 69, 79, 43, - 40, 43, 30, 14, 19, 14, 7, 16, 10, 4, 74, 64, - 74, 83, 14, 18, 3, 16, 20, 9, 3, 0, 64, 76, - 67, 74, 81, 107, 74, 78, 86, 9, 69, 78, 75, - 66, 0, 1, 6, 4, 11, 65, 5, 5, 12, 18, 18, 20, - 6, 56, 43, 36, 31, 23, 20, 3, 69, 84, 1, 33, - 27, 25, 17, 16, 8, 5, 1, 69, 75, 66, 0, 1, 6, - 4, 11, 65, 5, 5, 12, 18, 18, 20, 6, 56, 43, - 36, 31, 23, 20, 3, 69, 84 }, - - { - - 57, - 7, 77, 57, 7, 77, 97, 79, 17, 11, 5, 17, 37, - 49, 23, 5, 70, 20, 80, 76, 1, 0, 9, 71, 2, 32, - 33, 6, 81, 109, 93, 93, 71, 80, 76, 1, 86, 73, - 26, 4, 77, 87, 93, 77, 79, 88, 102, 64, 79, - 92, 68, 81, 86, 99, 5, 74, 72, 84, 21, 2, 22, - 0, 0, 0, 73, 90, 97, 64, 9, 65, 22, 78, 105, - 88, 72, 80, 6, 4, 76, 72, 94, 2, 83, 76, 87, - 91, 81, 86, 83, 15, 65, 68, 87, 73, 92, 79, - 95, 65, 76, 72, 87, 14, 71, 1, 84, 81, 75, 76, - 68, 1, 0, 72, 4, 6, 71, 2, 66, 68, 3, 72, 24, - 67, 1, 20, 21, 28, 26, 17, 84, 68, 71, 2, 67, - 84, 68, 7, 69, 71, 3, 22, 46, 26, 0, 84, 81, - 65, 34, 39, 104, 68, 2, 85, 8, 65, 64, 4, 33, - 55, 44, 12, 83, 99, 8, 35, 44, 103, 20, 21, - 22, 23, 24, 20, 14, 20, 22, 7, 14, 12, 5, 3, - 66, 11, 8, 7, 8, 3, 7, 13, 5, 78, 5, 6, 69, 9, - 71, 44, 53, 37, 28, 35, 41, 52, 46, 26, 6, 67, - 5, 12, 12, 96, 8, 12, 72, 27, 12, 12, 13, 16, - 12, 19, 19, 67, 93, 70, 72, 65, 101, 89, 5, - 11, 10, 4, 70, 75, 80, 80, 96, 77, 21, 9, 4, - 66, 1, 71, 79, 82, 87, 71, 24, 11, 6, 1, 3, - 68, 73, 79, 88, 74, 18, 5, 8, 4, 64, 73, 76, - 85, 67, 32, 15, 12, 7, 7, 65, 72, 73, 76, 62, - 103, 100, 93, 98, 93, 92, 91, 89, 87, 88, 87, - 84, 83, 86, 88, 92, 73, 86, 75, 80, 80, 78, - 74, 71, 71, 68, 73, 69, 72, 68, 68, 7, 69, 77, - 66, 68, 72, 1, 64, 67, 68, 4, 65, 72, 73, 66, - 82, 69, 6, 66, 2, 69, 67, 67, 4, 2, 69, 70, - 74, 74, 68, 58, 55, 57, 56, 54, 60, 60, 59, - 54, 55, 59, 56, 47, 37, 18, 54, 50, 48, 44, - 36, 28, 19, 26, 21, 15, 4, 64, 69, 79, 41, 38, - 41, 28, 12, 18, 13, 5, 15, 8, 3, 76, 66, 75, - 84, 13, 17, 1, 15, 19, 8, 2, 64, 65, 77, 67, - 74, 81, 106, 75, 79, 87, 8, 70, 79, 74, 65, 1, - 2, 8, 5, 12, 64, 7, 6, 13, 19, 19, 21, 7, 56, - 42, 35, 29, 21, 19, 1, 70, 85, 2, 34, 28, 26, - 18, 17, 9, 6, 2, 68, 74, 65, 1, 2, 8, 5, 12, - 64, 7, 6, 13, 19, 19, 21, 7, 56, 42, 35, 29, - 21, 19, 1, 70, 85 }, - - { - - 56, - 7, 77, 56, 7, 77, 95, 78, 17, 11, 5, 15, 35, - 48, 24, 5, 68, 18, 80, 75, 1, 0, 10, 72, 1, - 31, 31, 3, 83, 110, 91, 92, 71, 80, 75, 1, 86, - 72, 26, 4, 76, 86, 92, 78, 80, 88, 102, 64, - 79, 91, 68, 81, 86, 99, 5, 74, 72, 83, 21, 2, - 22, 0, 0, 0, 72, 90, 97, 64, 8, 65, 22, 77, - 104, 86, 71, 79, 8, 6, 75, 71, 92, 3, 82, 75, - 85, 92, 81, 86, 83, 15, 65, 67, 85, 73, 91, - 78, 93, 65, 76, 72, 87, 14, 71, 1, 83, 81, 74, - 76, 68, 1, 0, 71, 5, 6, 71, 2, 66, 68, 3, 72, - 24, 67, 1, 20, 21, 28, 26, 17, 85, 67, 70, 1, - 67, 84, 68, 8, 69, 71, 4, 23, 47, 28, 2, 85, - 82, 65, 34, 39, 105, 68, 2, 86, 9, 65, 64, 5, - 33, 55, 44, 13, 84, 98, 7, 32, 41, 102, 20, - 21, 22, 22, 23, 20, 14, 20, 21, 6, 13, 12, 5, - 3, 66, 10, 7, 6, 8, 3, 7, 12, 4, 79, 4, 5, 69, - 8, 72, 42, 51, 35, 26, 33, 39, 49, 44, 25, 4, - 69, 3, 10, 10, 97, 7, 11, 74, 26, 11, 11, 12, - 14, 10, 17, 17, 69, 93, 71, 73, 67, 100, 88, - 6, 12, 10, 4, 69, 74, 79, 79, 94, 76, 22, 10, - 5, 65, 2, 70, 78, 81, 85, 70, 24, 11, 6, 1, 4, - 67, 72, 78, 87, 74, 19, 6, 8, 4, 0, 72, 76, - 84, 66, 32, 16, 12, 7, 8, 64, 71, 72, 75, 62, - 102, 98, 91, 96, 92, 91, 89, 87, 86, 86, 85, - 82, 82, 85, 87, 91, 70, 86, 76, 80, 79, 77, - 74, 71, 71, 68, 73, 69, 73, 68, 68, 8, 69, 77, - 66, 68, 72, 1, 64, 67, 69, 3, 65, 72, 73, 65, - 83, 69, 7, 67, 2, 69, 67, 67, 4, 2, 69, 69, - 74, 74, 70, 57, 54, 56, 54, 52, 57, 57, 56, - 52, 52, 56, 53, 44, 34, 16, 50, 46, 44, 39, - 33, 26, 17, 24, 19, 13, 3, 65, 70, 79, 39, 36, - 39, 26, 10, 16, 11, 3, 13, 6, 1, 78, 68, 77, - 85, 12, 16, 64, 13, 17, 6, 0, 65, 66, 78, 68, - 75, 81, 105, 76, 80, 89, 7, 71, 80, 74, 65, 2, - 3, 9, 6, 13, 64, 8, 7, 14, 19, 20, 22, 8, 55, - 40, 33, 27, 19, 17, 64, 72, 86, 3, 34, 28, 27, - 19, 18, 9, 7, 2, 67, 74, 65, 2, 3, 9, 6, 13, - 64, 8, 7, 14, 19, 20, 22, 8, 55, 40, 33, 27, - 19, 17, 64, 72, 86 }, - - { - - 55, - 7, 77, 55, 7, 77, 93, 76, 18, 11, 4, 13, 34, - 47, 24, 5, 66, 17, 80, 73, 1, 64, 11, 73, 0, - 30, 29, 64, 85, 111, 89, 90, 71, 80, 73, 1, - 85, 71, 27, 4, 75, 85, 91, 79, 81, 88, 103, - 64, 79, 90, 68, 82, 86, 99, 5, 74, 72, 82, 22, - 2, 22, 0, 0, 0, 72, 90, 97, 0, 7, 65, 21, 77, - 103, 84, 70, 78, 9, 7, 74, 70, 90, 4, 81, 74, - 83, 93, 81, 86, 83, 16, 65, 66, 83, 73, 90, - 77, 91, 65, 76, 72, 87, 15, 71, 2, 82, 81, 73, - 76, 68, 1, 1, 70, 5, 6, 71, 2, 66, 68, 3, 72, - 24, 67, 1, 21, 21, 29, 26, 18, 85, 67, 69, 1, - 67, 84, 68, 9, 69, 70, 5, 24, 48, 29, 4, 85, - 83, 64, 34, 39, 106, 68, 3, 86, 9, 65, 64, 6, - 33, 55, 44, 14, 85, 96, 6, 29, 38, 100, 20, - 21, 21, 21, 23, 19, 13, 20, 21, 5, 12, 12, 5, - 3, 67, 10, 6, 5, 7, 3, 7, 11, 4, 80, 4, 4, 69, - 7, 72, 40, 49, 33, 25, 31, 37, 46, 41, 24, 2, - 71, 2, 8, 8, 99, 6, 10, 76, 25, 10, 10, 11, - 13, 8, 15, 15, 70, 93, 72, 74, 68, 98, 86, 8, - 12, 10, 4, 68, 73, 78, 78, 92, 75, 23, 11, 6, - 65, 3, 69, 76, 80, 83, 70, 25, 12, 7, 2, 5, - 67, 72, 77, 86, 74, 21, 7, 8, 4, 1, 72, 76, - 83, 65, 33, 17, 13, 7, 9, 64, 70, 72, 75, 62, - 100, 97, 90, 94, 91, 89, 88, 86, 84, 84, 83, - 80, 82, 84, 87, 90, 67, 86, 77, 80, 78, 76, - 74, 71, 71, 68, 72, 69, 74, 68, 68, 8, 69, 77, - 66, 68, 72, 0, 64, 67, 70, 2, 65, 72, 73, 64, - 84, 69, 8, 68, 2, 69, 67, 66, 4, 1, 68, 68, - 74, 74, 71, 56, 53, 55, 52, 50, 55, 55, 53, - 49, 49, 53, 50, 41, 31, 14, 46, 43, 40, 34, - 30, 24, 15, 22, 16, 11, 2, 66, 71, 79, 37, 34, - 37, 24, 8, 14, 10, 1, 11, 4, 64, 80, 70, 79, - 86, 11, 15, 66, 12, 15, 5, 65, 67, 68, 79, 69, - 76, 81, 104, 77, 82, 90, 6, 72, 81, 74, 64, 2, - 3, 10, 7, 14, 64, 9, 8, 15, 20, 21, 22, 9, 55, - 38, 31, 25, 17, 15, 66, 74, 87, 3, 35, 29, 28, - 19, 19, 10, 7, 3, 67, 74, 64, 2, 3, 10, 7, 14, - 64, 9, 8, 15, 20, 21, 22, 9, 55, 38, 31, 25, - 17, 15, 66, 74, 87 }, - - { - - 53, - 7, 77, 53, 7, 77, 92, 75, 18, 11, 4, 11, 32, - 46, 25, 5, 65, 15, 80, 72, 0, 64, 12, 74, 65, - 28, 27, 67, 88, 112, 87, 89, 71, 80, 72, 0, - 85, 70, 27, 3, 75, 84, 89, 80, 83, 89, 103, - 64, 78, 89, 69, 82, 86, 99, 5, 74, 72, 82, 22, - 2, 22, 0, 0, 0, 71, 91, 97, 0, 6, 65, 21, 76, - 102, 82, 69, 77, 11, 9, 74, 69, 88, 5, 80, 73, - 80, 93, 82, 86, 84, 16, 66, 65, 80, 72, 90, - 77, 89, 65, 76, 72, 87, 15, 71, 2, 81, 81, 73, - 75, 68, 1, 1, 69, 6, 6, 72, 1, 66, 68, 3, 72, - 24, 67, 1, 21, 21, 29, 26, 18, 86, 66, 69, 0, - 67, 83, 68, 10, 68, 70, 7, 26, 49, 31, 6, 86, - 84, 64, 35, 39, 107, 68, 3, 87, 10, 65, 64, 7, - 33, 55, 44, 16, 86, 95, 5, 26, 35, 99, 19, 21, - 21, 21, 22, 19, 13, 20, 20, 4, 11, 11, 5, 3, - 67, 9, 6, 4, 7, 2, 6, 10, 3, 81, 3, 3, 69, 5, - 73, 38, 47, 31, 23, 30, 35, 42, 39, 23, 0, 74, - 0, 6, 6, 100, 4, 9, 77, 24, 9, 9, 9, 11, 6, - 13, 14, 72, 93, 73, 75, 70, 97, 85, 9, 13, 10, - 4, 67, 72, 77, 78, 90, 73, 24, 11, 6, 64, 5, - 68, 75, 79, 80, 69, 25, 12, 7, 2, 6, 66, 71, - 77, 85, 74, 22, 8, 8, 4, 2, 71, 76, 82, 64, - 33, 18, 13, 7, 10, 0, 69, 71, 74, 62, 99, 95, - 88, 93, 90, 88, 86, 84, 83, 83, 81, 77, 81, - 83, 86, 89, 64, 85, 78, 79, 77, 76, 74, 71, - 71, 69, 72, 70, 75, 68, 68, 9, 69, 77, 66, 68, - 71, 0, 65, 67, 71, 1, 66, 72, 73, 0, 85, 70, - 8, 68, 1, 69, 67, 66, 3, 1, 68, 68, 74, 74, - 73, 55, 52, 54, 51, 47, 52, 52, 50, 47, 46, - 49, 47, 37, 29, 12, 42, 39, 36, 29, 27, 22, - 13, 20, 14, 9, 0, 67, 72, 79, 34, 31, 34, 22, - 6, 12, 8, 64, 9, 2, 66, 82, 73, 80, 88, 10, - 14, 69, 10, 14, 3, 67, 68, 69, 80, 70, 77, 81, - 103, 79, 83, 92, 4, 73, 82, 74, 64, 3, 4, 11, - 7, 14, 0, 10, 9, 16, 20, 22, 23, 9, 54, 36, - 29, 23, 15, 13, 69, 76, 89, 4, 35, 29, 28, 20, - 19, 10, 8, 3, 66, 74, 64, 3, 4, 11, 7, 14, 0, - 10, 9, 16, 20, 22, 23, 9, 54, 36, 29, 23, 15, - 13, 69, 76, 89 }, - - { - - 52, - 7, 77, 52, 7, 77, 90, 73, 18, 11, 3, 9, 31, - 45, 26, 5, 0, 13, 79, 70, 0, 64, 13, 75, 66, - 27, 25, 70, 90, 112, 85, 88, 71, 79, 70, 0, - 85, 69, 27, 3, 74, 83, 88, 81, 84, 89, 103, - 64, 78, 88, 69, 82, 86, 99, 5, 73, 72, 81, 23, - 2, 22, 0, 0, 0, 71, 91, 97, 1, 5, 65, 20, 76, - 100, 79, 68, 76, 12, 10, 73, 68, 86, 6, 79, - 72, 78, 94, 82, 86, 84, 16, 66, 64, 78, 72, - 89, 76, 87, 65, 76, 72, 86, 15, 71, 3, 80, 80, - 72, 75, 68, 2, 2, 68, 6, 6, 72, 1, 65, 68, 3, - 72, 25, 67, 1, 22, 22, 29, 26, 18, 86, 66, 68, - 0, 67, 83, 68, 11, 68, 69, 8, 27, 50, 32, 8, - 86, 85, 0, 35, 39, 108, 68, 4, 87, 11, 65, 64, - 9, 33, 55, 44, 17, 87, 93, 4, 24, 32, 98, 19, - 21, 20, 20, 22, 19, 12, 20, 20, 3, 10, 11, 5, - 3, 67, 9, 5, 3, 6, 2, 6, 9, 3, 82, 2, 3, 69, - 4, 73, 36, 45, 30, 22, 28, 33, 39, 36, 22, 65, - 76, 64, 4, 4, 101, 3, 8, 79, 23, 8, 8, 8, 10, - 4, 11, 12, 73, 93, 74, 76, 72, 95, 83, 10, 13, - 10, 4, 66, 71, 76, 77, 88, 72, 25, 12, 7, 0, - 6, 67, 73, 78, 78, 68, 26, 13, 8, 3, 7, 65, - 71, 76, 84, 73, 23, 9, 8, 4, 3, 71, 75, 81, 0, - 33, 19, 13, 7, 11, 1, 68, 71, 73, 62, 98, 94, - 87, 91, 89, 86, 85, 82, 81, 81, 79, 75, 80, - 82, 85, 88, 2, 85, 79, 79, 76, 75, 74, 71, 71, - 69, 71, 70, 76, 68, 68, 10, 69, 77, 66, 68, - 71, 64, 65, 67, 72, 0, 66, 72, 73, 1, 85, 70, - 9, 69, 1, 69, 67, 66, 3, 0, 68, 67, 74, 74, - 74, 54, 51, 53, 49, 45, 50, 49, 47, 44, 43, - 46, 44, 34, 26, 10, 38, 36, 32, 24, 24, 20, - 12, 18, 11, 7, 64, 68, 73, 79, 32, 29, 32, 20, - 4, 10, 7, 66, 7, 0, 68, 84, 75, 82, 89, 9, 13, - 71, 9, 12, 2, 69, 69, 70, 81, 71, 78, 81, 102, - 80, 84, 93, 3, 74, 83, 74, 0, 3, 5, 12, 8, 15, - 0, 11, 10, 17, 21, 23, 23, 10, 54, 34, 27, 21, - 13, 11, 71, 78, 90, 4, 36, 30, 29, 21, 20, 11, - 8, 3, 65, 74, 0, 3, 5, 12, 8, 15, 0, 11, 10, - 17, 21, 23, 23, 10, 54, 34, 27, 21, 13, 11, - 71, 78, 90 }, - - { - - 51, - 7, 78, 51, 7, 78, 88, 72, 19, 11, 3, 8, 29, - 44, 26, 6, 2, 12, 79, 69, 0, 65, 14, 76, 67, - 26, 24, 74, 92, 113, 83, 86, 71, 79, 69, 0, - 84, 68, 28, 3, 73, 82, 87, 83, 85, 89, 104, - 64, 78, 88, 69, 83, 85, 99, 4, 73, 72, 80, 23, - 2, 22, 0, 0, 0, 70, 91, 97, 1, 5, 66, 20, 75, - 99, 77, 67, 75, 14, 12, 72, 67, 84, 7, 78, 72, - 76, 95, 82, 86, 84, 17, 66, 0, 76, 72, 88, 75, - 85, 65, 76, 72, 86, 16, 72, 3, 80, 80, 71, 75, - 67, 2, 2, 67, 7, 6, 72, 1, 65, 68, 3, 72, 25, - 67, 1, 22, 22, 30, 27, 19, 87, 65, 67, 64, 67, - 83, 68, 12, 68, 69, 9, 28, 50, 34, 9, 87, 86, - 0, 35, 39, 108, 69, 4, 88, 11, 66, 0, 10, 33, - 55, 45, 18, 88, 92, 3, 21, 29, 96, 19, 21, 20, - 19, 21, 18, 12, 19, 19, 3, 10, 11, 4, 3, 68, - 8, 4, 2, 6, 2, 6, 9, 2, 84, 2, 2, 69, 3, 74, - 33, 43, 28, 20, 26, 31, 36, 34, 20, 67, 78, - 66, 2, 2, 103, 2, 6, 81, 21, 7, 7, 7, 8, 2, 9, - 10, 75, 93, 75, 77, 73, 94, 82, 12, 14, 10, 4, - 65, 71, 76, 76, 87, 71, 26, 13, 8, 0, 7, 66, - 72, 77, 76, 68, 26, 13, 8, 3, 8, 65, 70, 75, - 83, 73, 25, 10, 8, 4, 3, 70, 75, 81, 0, 34, - 19, 14, 7, 12, 1, 68, 70, 73, 62, 96, 92, 85, - 89, 87, 85, 83, 81, 80, 79, 77, 73, 80, 81, - 85, 88, 5, 85, 80, 79, 76, 74, 74, 71, 71, 69, - 71, 70, 77, 68, 68, 10, 69, 77, 66, 68, 71, - 64, 65, 67, 73, 64, 66, 72, 73, 2, 86, 70, 10, - 70, 1, 69, 67, 65, 3, 0, 67, 66, 74, 74, 76, - 53, 50, 52, 47, 43, 47, 47, 44, 42, 40, 43, - 41, 31, 23, 8, 35, 32, 28, 19, 22, 17, 10, 16, - 9, 5, 65, 69, 74, 79, 30, 27, 30, 18, 2, 9, 5, - 68, 5, 66, 70, 86, 77, 84, 90, 8, 11, 73, 7, - 10, 0, 71, 71, 72, 82, 72, 79, 82, 101, 81, - 86, 95, 2, 76, 84, 73, 0, 4, 5, 13, 9, 16, 0, - 12, 11, 18, 21, 24, 24, 11, 53, 32, 25, 19, - 11, 9, 73, 80, 91, 5, 36, 30, 30, 21, 21, 11, - 9, 4, 65, 73, 0, 4, 5, 13, 9, 16, 0, 12, 11, - 18, 21, 24, 24, 11, 53, 32, 25, 19, 11, 9, 73, - 80, 91 }, - - { - - 50, - 7, 78, 50, 7, 78, 86, 70, 19, 11, 2, 6, 28, - 43, 27, 6, 3, 10, 79, 67, 64, 65, 15, 77, 68, - 25, 22, 77, 95, 114, 81, 85, 71, 79, 67, 64, - 84, 67, 28, 3, 73, 81, 85, 84, 86, 89, 104, - 64, 77, 87, 70, 83, 85, 99, 4, 73, 72, 79, 24, - 2, 22, 0, 0, 0, 70, 91, 97, 2, 4, 66, 19, 75, - 98, 75, 66, 74, 15, 13, 71, 66, 82, 8, 77, 71, - 73, 95, 83, 86, 85, 17, 66, 1, 73, 71, 88, 75, - 83, 65, 76, 72, 86, 16, 72, 4, 79, 80, 70, 74, - 67, 2, 3, 66, 7, 6, 73, 1, 65, 68, 3, 72, 25, - 67, 1, 23, 22, 30, 27, 19, 87, 65, 67, 64, 67, - 82, 68, 13, 67, 68, 11, 30, 51, 35, 11, 87, - 87, 1, 36, 39, 109, 69, 5, 88, 12, 66, 0, 11, - 33, 55, 45, 20, 89, 90, 2, 18, 26, 95, 19, 21, - 19, 19, 21, 18, 11, 19, 19, 2, 9, 11, 4, 3, - 68, 8, 4, 1, 5, 2, 6, 8, 2, 85, 1, 1, 69, 2, - 74, 31, 41, 26, 19, 25, 29, 33, 31, 19, 69, - 80, 67, 0, 0, 104, 1, 5, 82, 20, 6, 6, 5, 7, - 0, 7, 9, 76, 93, 76, 78, 75, 92, 80, 13, 14, - 10, 4, 64, 70, 75, 76, 85, 69, 27, 14, 8, 1, - 9, 65, 70, 76, 73, 67, 27, 14, 9, 4, 9, 64, - 70, 74, 82, 73, 26, 11, 8, 4, 4, 70, 75, 80, - 1, 34, 20, 14, 7, 13, 2, 67, 70, 72, 62, 95, - 91, 84, 88, 86, 83, 82, 79, 78, 77, 75, 70, - 79, 80, 84, 87, 8, 84, 81, 78, 75, 73, 74, 71, - 71, 69, 70, 71, 78, 68, 68, 11, 69, 77, 66, - 68, 70, 65, 66, 67, 74, 65, 67, 72, 73, 3, 87, - 71, 11, 70, 0, 69, 67, 65, 2, 64, 67, 66, 74, - 74, 77, 52, 49, 51, 46, 40, 45, 44, 41, 39, - 37, 40, 38, 28, 21, 6, 31, 29, 24, 14, 19, 15, - 8, 14, 6, 3, 66, 70, 75, 79, 28, 24, 27, 16, - 0, 7, 4, 70, 3, 68, 72, 88, 79, 85, 92, 7, 10, - 75, 6, 9, 64, 73, 72, 73, 83, 73, 80, 82, 100, - 83, 87, 96, 0, 77, 85, 73, 1, 4, 6, 14, 10, - 16, 1, 13, 12, 19, 22, 25, 24, 11, 53, 30, 23, - 17, 9, 7, 76, 82, 92, 5, 37, 31, 30, 22, 22, - 12, 9, 4, 64, 73, 1, 4, 6, 14, 10, 16, 1, 13, - 12, 19, 22, 25, 24, 11, 53, 30, 23, 17, 9, 7, - 76, 82, 92 }, - - { - - 48, - 6, 78, 48, 6, 78, 85, 69, 19, 11, 2, 4, 26, - 42, 27, 6, 5, 8, 79, 66, 64, 66, 16, 78, 70, - 23, 20, 81, 97, 115, 79, 84, 71, 79, 66, 64, - 84, 67, 28, 2, 72, 80, 84, 85, 88, 90, 105, - 64, 77, 86, 70, 84, 85, 99, 4, 73, 72, 79, 24, - 2, 22, 0, 0, 0, 69, 92, 97, 2, 3, 66, 19, 74, - 97, 73, 65, 74, 17, 15, 71, 65, 80, 8, 76, 70, - 71, 96, 83, 87, 85, 17, 67, 1, 71, 71, 87, 74, - 82, 65, 76, 72, 86, 16, 72, 4, 78, 80, 70, 74, - 67, 2, 3, 65, 8, 6, 73, 0, 65, 68, 2, 72, 25, - 67, 1, 23, 22, 30, 27, 19, 88, 64, 66, 65, 67, - 82, 68, 14, 67, 68, 12, 31, 52, 37, 13, 88, - 88, 1, 36, 39, 110, 69, 5, 89, 12, 66, 0, 12, - 33, 55, 45, 21, 90, 89, 1, 15, 22, 94, 18, 21, - 19, 18, 20, 17, 11, 19, 18, 1, 8, 10, 4, 2, - 69, 7, 3, 0, 5, 1, 5, 7, 1, 86, 0, 0, 69, 0, - 75, 29, 39, 24, 17, 23, 26, 29, 29, 18, 71, - 83, 69, 66, 65, 106, 64, 4, 84, 19, 5, 5, 4, - 5, 65, 5, 7, 78, 93, 77, 79, 77, 91, 79, 14, - 15, 10, 4, 64, 69, 74, 75, 83, 68, 27, 14, 9, - 1, 10, 64, 69, 75, 71, 67, 27, 14, 9, 4, 9, - 64, 69, 74, 81, 73, 27, 12, 8, 4, 5, 69, 75, - 79, 2, 34, 21, 14, 7, 14, 2, 66, 69, 72, 62, - 94, 89, 82, 86, 85, 82, 80, 78, 77, 76, 73, - 68, 79, 79, 84, 86, 11, 84, 82, 78, 74, 73, - 74, 71, 71, 70, 70, 71, 79, 68, 68, 11, 69, - 77, 67, 68, 70, 65, 66, 68, 75, 66, 67, 73, - 73, 4, 88, 71, 11, 71, 0, 69, 68, 65, 2, 64, - 67, 65, 74, 74, 79, 51, 48, 50, 44, 38, 42, - 41, 38, 37, 34, 36, 35, 24, 18, 4, 27, 25, 20, - 9, 16, 13, 6, 11, 4, 1, 68, 72, 76, 79, 25, - 22, 25, 14, 66, 5, 2, 73, 1, 70, 74, 90, 82, - 87, 93, 5, 9, 78, 4, 7, 66, 75, 74, 75, 84, - 74, 81, 82, 99, 84, 89, 98, 64, 78, 86, 73, 1, - 5, 6, 15, 10, 17, 1, 14, 12, 20, 22, 25, 25, - 12, 52, 28, 21, 15, 7, 5, 78, 84, 94, 6, 37, - 31, 31, 22, 22, 12, 10, 4, 64, 73, 1, 5, 6, - 15, 10, 17, 1, 14, 12, 20, 22, 25, 25, 12, 52, - 28, 21, 15, 7, 5, 78, 84, 94 }, - - { - - 47, - 6, 78, 47, 6, 78, 83, 68, 20, 11, 2, 2, 24, - 42, 28, 6, 7, 7, 78, 64, 64, 66, 17, 78, 71, - 22, 18, 84, 99, 115, 77, 82, 70, 78, 64, 64, - 83, 66, 29, 2, 71, 79, 83, 86, 89, 90, 105, - 64, 77, 85, 70, 84, 85, 99, 4, 72, 71, 78, 24, - 2, 22, 0, 0, 0, 68, 92, 97, 2, 2, 66, 19, 73, - 95, 70, 64, 73, 19, 17, 70, 64, 78, 9, 74, 69, - 69, 97, 83, 87, 85, 18, 67, 2, 69, 71, 86, 73, - 80, 65, 75, 72, 85, 17, 72, 5, 77, 79, 69, 74, - 67, 3, 4, 64, 9, 6, 73, 0, 64, 67, 2, 72, 26, - 67, 1, 23, 23, 31, 27, 20, 88, 0, 65, 66, 67, - 82, 68, 15, 67, 67, 13, 32, 53, 39, 15, 89, - 89, 2, 36, 40, 111, 69, 5, 89, 13, 66, 0, 14, - 33, 55, 45, 22, 91, 88, 0, 13, 19, 92, 18, 21, - 19, 17, 20, 17, 11, 19, 18, 0, 7, 10, 4, 2, - 69, 7, 2, 0, 5, 1, 5, 6, 0, 87, 0, 0, 69, 64, - 75, 27, 37, 23, 16, 21, 24, 26, 27, 17, 73, - 85, 70, 68, 66, 107, 65, 3, 86, 18, 4, 4, 3, - 3, 66, 3, 5, 79, 93, 77, 80, 78, 89, 77, 16, - 16, 10, 4, 0, 68, 73, 74, 81, 67, 28, 15, 10, - 2, 11, 0, 68, 74, 69, 66, 28, 15, 10, 4, 10, - 0, 68, 73, 79, 72, 29, 13, 9, 4, 6, 68, 74, - 78, 3, 35, 22, 15, 8, 15, 3, 65, 68, 71, 62, - 92, 87, 80, 84, 84, 81, 78, 76, 75, 74, 71, - 66, 78, 78, 83, 85, 15, 84, 83, 78, 73, 72, - 73, 71, 71, 70, 70, 71, 80, 68, 68, 12, 69, - 77, 67, 68, 70, 65, 66, 68, 75, 67, 67, 73, - 72, 6, 88, 71, 12, 72, 0, 69, 68, 64, 2, 64, - 66, 64, 73, 73, 81, 50, 47, 49, 42, 36, 39, - 39, 35, 35, 32, 33, 33, 21, 15, 2, 23, 22, 17, - 4, 13, 11, 5, 9, 2, 0, 69, 73, 77, 79, 23, 20, - 23, 12, 68, 3, 1, 75, 64, 72, 76, 92, 84, 89, - 94, 4, 8, 80, 3, 5, 67, 77, 75, 76, 85, 75, - 81, 82, 98, 85, 90, 100, 65, 79, 87, 73, 2, 6, - 7, 17, 11, 18, 1, 15, 13, 21, 23, 26, 26, 13, - 51, 27, 19, 13, 5, 3, 80, 86, 95, 7, 37, 32, - 32, 23, 23, 13, 11, 5, 0, 73, 2, 6, 7, 17, 11, - 18, 1, 15, 13, 21, 23, 26, 26, 13, 51, 27, 19, - 13, 5, 3, 80, 86, 95 }, - - { - - 46, - 6, 78, 46, 6, 78, 81, 66, 20, 11, 1, 0, 23, - 41, 29, 6, 8, 5, 78, 0, 65, 66, 18, 79, 72, - 21, 16, 87, 102, 116, 75, 81, 70, 78, 0, 65, - 83, 65, 29, 2, 71, 78, 81, 87, 90, 90, 105, - 64, 76, 84, 71, 84, 85, 99, 4, 72, 71, 77, 25, - 2, 22, 0, 0, 0, 68, 92, 97, 3, 1, 66, 18, 73, - 94, 68, 0, 72, 20, 18, 69, 0, 76, 10, 73, 68, - 66, 97, 84, 87, 86, 18, 67, 3, 66, 70, 86, 73, - 78, 65, 75, 72, 85, 17, 72, 5, 76, 79, 68, 73, - 67, 3, 4, 0, 9, 6, 74, 0, 64, 67, 2, 72, 26, - 67, 1, 24, 23, 31, 27, 20, 89, 0, 65, 66, 67, - 81, 68, 16, 66, 67, 15, 34, 54, 40, 17, 89, - 90, 2, 37, 40, 112, 69, 6, 90, 14, 66, 0, 15, - 33, 55, 45, 24, 92, 86, 64, 10, 16, 91, 18, - 21, 18, 17, 19, 17, 10, 19, 17, 64, 6, 10, 4, - 2, 69, 6, 2, 64, 4, 1, 5, 5, 0, 88, 64, 64, - 69, 65, 76, 25, 35, 21, 14, 20, 22, 23, 24, - 16, 75, 87, 72, 70, 68, 108, 66, 2, 87, 17, 3, - 3, 1, 2, 68, 1, 4, 81, 93, 78, 81, 80, 88, 76, - 17, 16, 10, 4, 1, 67, 72, 74, 79, 65, 29, 16, - 10, 3, 13, 1, 66, 73, 66, 65, 28, 15, 10, 5, - 11, 1, 68, 72, 78, 72, 30, 14, 9, 4, 7, 68, - 74, 77, 4, 35, 23, 15, 8, 16, 4, 64, 68, 70, - 62, 91, 86, 79, 83, 83, 79, 77, 74, 74, 72, - 69, 0, 77, 77, 82, 84, 18, 83, 84, 77, 72, 71, - 73, 71, 71, 70, 69, 72, 81, 68, 68, 13, 69, - 77, 67, 68, 69, 66, 67, 68, 76, 68, 68, 73, - 72, 7, 89, 72, 13, 72, 64, 69, 68, 64, 1, 65, - 66, 64, 73, 73, 82, 49, 46, 48, 41, 33, 37, - 36, 32, 32, 29, 30, 30, 18, 13, 0, 19, 18, 13, - 64, 10, 9, 3, 7, 64, 65, 70, 74, 78, 79, 21, - 17, 20, 10, 70, 1, 64, 77, 66, 74, 78, 94, 86, - 90, 96, 3, 7, 82, 1, 4, 69, 79, 76, 77, 86, - 76, 82, 82, 97, 87, 91, 101, 67, 80, 88, 73, - 2, 6, 8, 18, 12, 18, 2, 16, 14, 22, 23, 27, - 26, 13, 51, 25, 17, 11, 3, 1, 83, 88, 96, 7, - 38, 32, 32, 24, 24, 13, 11, 5, 1, 73, 2, 6, 8, - 18, 12, 18, 2, 16, 14, 22, 23, 27, 26, 13, 51, - 25, 17, 11, 3, 1, 83, 88, 96 }, - - { - - 45, - 6, 79, 45, 6, 79, 79, 65, 21, 11, 1, 64, 21, - 40, 29, 7, 10, 4, 78, 2, 65, 67, 19, 80, 73, - 20, 15, 91, 104, 117, 73, 79, 70, 78, 2, 65, - 82, 64, 30, 2, 70, 77, 80, 89, 91, 90, 106, - 64, 76, 84, 71, 85, 84, 99, 3, 72, 71, 76, 25, - 2, 22, 0, 0, 0, 67, 92, 97, 3, 1, 67, 18, 72, - 93, 66, 1, 71, 22, 20, 68, 1, 74, 11, 72, 68, - 64, 98, 84, 87, 86, 19, 67, 4, 64, 70, 85, 72, - 76, 65, 75, 72, 85, 18, 73, 6, 76, 79, 67, 73, - 66, 3, 5, 1, 10, 6, 74, 0, 64, 67, 2, 72, 26, - 67, 1, 24, 23, 32, 28, 21, 89, 1, 64, 67, 67, - 81, 68, 17, 66, 66, 16, 35, 54, 42, 18, 90, - 91, 3, 37, 40, 112, 70, 6, 90, 14, 67, 1, 16, - 33, 55, 46, 25, 93, 85, 65, 7, 13, 89, 18, 21, - 18, 16, 19, 16, 10, 18, 17, 64, 6, 10, 3, 2, - 70, 6, 1, 65, 4, 1, 5, 5, 64, 90, 64, 65, 69, - 66, 76, 22, 33, 19, 13, 18, 20, 20, 22, 14, - 77, 89, 73, 72, 70, 110, 67, 0, 89, 15, 2, 2, - 0, 0, 70, 64, 2, 82, 93, 79, 82, 81, 86, 74, - 19, 17, 10, 4, 2, 67, 72, 73, 78, 64, 30, 17, - 11, 3, 14, 2, 65, 72, 64, 65, 29, 16, 11, 5, - 12, 1, 67, 71, 77, 72, 32, 15, 9, 4, 7, 67, - 74, 77, 4, 36, 23, 16, 8, 17, 4, 64, 67, 70, - 62, 89, 84, 77, 81, 81, 78, 75, 73, 72, 70, - 67, 2, 77, 76, 82, 84, 21, 83, 85, 77, 72, 70, - 73, 71, 71, 70, 69, 72, 82, 68, 68, 13, 69, - 77, 67, 68, 69, 66, 67, 68, 77, 69, 68, 73, - 72, 8, 90, 72, 14, 73, 64, 69, 68, 0, 1, 65, - 65, 0, 73, 73, 84, 48, 45, 47, 39, 31, 34, 34, - 29, 30, 26, 27, 27, 15, 10, 65, 16, 15, 9, 69, - 8, 6, 1, 5, 66, 67, 71, 75, 79, 79, 19, 15, - 18, 8, 72, 0, 65, 79, 68, 77, 80, 96, 88, 92, - 97, 2, 5, 84, 0, 2, 70, 81, 78, 79, 87, 77, - 83, 83, 96, 88, 93, 103, 68, 82, 89, 72, 3, 7, - 8, 19, 13, 19, 2, 17, 15, 23, 24, 28, 27, 14, - 50, 23, 15, 9, 1, 64, 85, 90, 97, 8, 38, 33, - 33, 24, 25, 14, 12, 6, 1, 72, 3, 7, 8, 19, 13, - 19, 2, 17, 15, 23, 24, 28, 27, 14, 50, 23, 15, - 9, 1, 64, 85, 90, 97 }, - - { - - 43, - 6, 79, 43, 6, 79, 78, 0, 21, 11, 0, 66, 20, - 39, 30, 7, 12, 2, 78, 3, 65, 67, 20, 81, 75, - 18, 13, 94, 106, 118, 71, 78, 70, 78, 3, 65, - 82, 0, 30, 1, 69, 76, 79, 90, 93, 91, 106, 64, - 76, 83, 71, 85, 84, 99, 3, 72, 71, 76, 26, 2, - 22, 0, 0, 0, 67, 93, 97, 4, 0, 67, 17, 72, 92, - 64, 2, 70, 23, 21, 68, 2, 72, 12, 71, 67, 1, - 99, 84, 87, 86, 19, 68, 5, 1, 70, 84, 71, 74, - 65, 75, 72, 85, 18, 73, 6, 75, 79, 67, 73, 66, - 3, 5, 2, 10, 6, 74, 64, 64, 67, 2, 72, 26, 67, - 1, 25, 23, 32, 28, 21, 90, 1, 0, 67, 67, 81, - 68, 18, 66, 66, 17, 36, 55, 43, 20, 90, 92, 3, - 37, 40, 113, 70, 7, 91, 15, 67, 1, 17, 33, 55, - 46, 26, 94, 83, 66, 4, 10, 88, 17, 21, 17, 15, - 18, 16, 9, 18, 16, 65, 5, 9, 3, 2, 70, 5, 0, - 66, 3, 0, 4, 4, 64, 91, 65, 66, 69, 68, 77, - 20, 31, 17, 11, 16, 18, 16, 19, 13, 79, 92, - 75, 74, 72, 111, 69, 64, 91, 14, 1, 1, 64, 64, - 72, 66, 0, 84, 93, 80, 83, 83, 85, 73, 20, 17, - 10, 4, 3, 66, 71, 72, 76, 0, 31, 17, 12, 4, - 15, 3, 0, 71, 1, 64, 29, 16, 11, 6, 13, 2, 67, - 71, 76, 72, 33, 16, 9, 4, 8, 67, 74, 76, 5, - 36, 24, 16, 8, 18, 5, 0, 67, 69, 62, 88, 83, - 76, 79, 80, 76, 74, 71, 71, 69, 65, 4, 76, 75, - 81, 83, 24, 83, 86, 77, 71, 70, 73, 71, 71, - 71, 68, 72, 83, 68, 68, 14, 69, 77, 67, 68, - 69, 67, 67, 68, 78, 70, 68, 73, 72, 9, 91, 72, - 14, 74, 64, 69, 68, 0, 1, 66, 65, 1, 73, 73, - 85, 47, 44, 46, 37, 29, 32, 31, 26, 27, 23, - 23, 24, 11, 7, 67, 12, 11, 5, 74, 5, 4, 64, 3, - 69, 69, 73, 76, 80, 79, 16, 13, 16, 6, 74, 65, - 67, 81, 70, 79, 82, 98, 91, 94, 98, 1, 4, 87, - 65, 0, 72, 83, 79, 80, 88, 78, 84, 83, 95, 89, - 94, 104, 69, 83, 90, 72, 3, 7, 9, 20, 13, 20, - 2, 18, 16, 24, 24, 29, 27, 15, 50, 21, 13, 7, - 64, 66, 87, 92, 99, 8, 39, 33, 34, 25, 25, 14, - 12, 6, 2, 72, 3, 7, 9, 20, 13, 20, 2, 18, 16, - 24, 24, 29, 27, 15, 50, 21, 13, 7, 64, 66, 87, - 92, 99 }, - - { - - 42, - 6, 79, 42, 6, 79, 76, 1, 21, 11, 0, 68, 18, - 38, 31, 7, 13, 0, 77, 5, 66, 67, 21, 82, 76, - 17, 11, 97, 109, 118, 69, 77, 70, 77, 5, 66, - 82, 1, 30, 1, 69, 75, 77, 91, 94, 91, 106, 64, - 75, 82, 72, 85, 84, 99, 3, 71, 71, 75, 26, 2, - 22, 0, 0, 0, 66, 93, 97, 4, 64, 67, 17, 71, - 90, 2, 3, 69, 25, 23, 67, 3, 70, 13, 70, 66, - 4, 99, 85, 87, 87, 19, 68, 6, 4, 69, 84, 71, - 72, 65, 75, 72, 84, 18, 73, 7, 74, 78, 66, 72, - 66, 4, 6, 3, 11, 6, 75, 64, 0, 67, 2, 72, 27, - 67, 1, 25, 24, 32, 28, 21, 90, 2, 0, 68, 67, - 80, 68, 19, 65, 65, 19, 38, 56, 45, 22, 91, - 93, 4, 38, 40, 114, 70, 7, 91, 16, 67, 1, 19, - 33, 55, 46, 28, 95, 82, 67, 2, 7, 87, 17, 21, - 17, 15, 18, 16, 9, 18, 16, 66, 4, 9, 3, 2, 70, - 5, 0, 67, 3, 0, 4, 3, 65, 92, 66, 66, 69, 69, - 77, 18, 29, 16, 10, 15, 16, 13, 17, 12, 81, - 94, 76, 76, 74, 112, 70, 65, 92, 13, 0, 0, 66, - 66, 74, 68, 64, 85, 93, 81, 84, 85, 83, 71, - 21, 18, 10, 4, 4, 65, 70, 72, 74, 2, 32, 18, - 12, 5, 17, 4, 1, 70, 4, 0, 30, 17, 12, 6, 14, - 3, 66, 70, 75, 71, 34, 17, 9, 4, 9, 66, 73, - 75, 6, 36, 25, 16, 8, 19, 6, 1, 66, 68, 62, - 87, 81, 74, 78, 79, 75, 72, 69, 69, 67, 0, 7, - 75, 74, 80, 82, 27, 82, 87, 76, 70, 69, 73, - 71, 71, 71, 68, 73, 84, 68, 68, 15, 69, 77, - 67, 68, 68, 67, 68, 68, 79, 71, 69, 73, 72, - 10, 91, 73, 15, 74, 65, 69, 68, 0, 0, 66, 65, - 1, 73, 73, 87, 46, 43, 45, 36, 26, 29, 28, 23, - 25, 20, 20, 21, 8, 5, 69, 8, 8, 1, 79, 2, 2, - 65, 1, 71, 71, 74, 77, 81, 79, 14, 10, 13, 4, - 76, 67, 68, 83, 72, 81, 84, 100, 93, 95, 100, - 0, 3, 89, 66, 64, 73, 85, 80, 81, 89, 79, 85, - 83, 94, 91, 95, 106, 71, 84, 91, 72, 4, 8, 10, - 21, 14, 20, 3, 19, 17, 25, 25, 30, 28, 15, 49, - 19, 11, 5, 66, 68, 90, 94, 100, 9, 39, 34, 34, - 26, 26, 15, 13, 6, 3, 72, 4, 8, 10, 21, 14, - 20, 3, 19, 17, 25, 25, 30, 28, 15, 49, 19, 11, - 5, 66, 68, 90, 94, 100 }, - - { - - 41, - 6, 79, 41, 6, 79, 74, 3, 22, 11, 64, 70, 17, - 37, 31, 7, 15, 64, 77, 6, 66, 68, 22, 83, 77, - 16, 9, 101, 111, 119, 67, 75, 70, 77, 6, 66, - 81, 2, 31, 1, 68, 74, 76, 92, 95, 91, 107, 64, - 75, 81, 72, 86, 84, 99, 3, 71, 71, 74, 27, 2, - 22, 0, 0, 0, 66, 93, 97, 5, 65, 67, 16, 71, - 89, 4, 4, 68, 26, 24, 66, 4, 68, 14, 69, 65, - 6, 100, 85, 87, 87, 20, 68, 7, 6, 69, 83, 70, - 70, 65, 75, 72, 84, 19, 73, 7, 73, 78, 65, 72, - 66, 4, 6, 4, 11, 6, 75, 64, 0, 67, 2, 72, 27, - 67, 1, 26, 24, 33, 28, 22, 91, 2, 1, 68, 67, - 80, 68, 20, 65, 65, 20, 39, 57, 46, 24, 91, - 94, 4, 38, 40, 115, 70, 8, 92, 16, 67, 1, 20, - 33, 55, 46, 29, 96, 80, 68, 64, 4, 85, 17, 21, - 16, 14, 17, 15, 8, 18, 15, 67, 3, 9, 3, 2, 71, - 4, 64, 68, 2, 0, 4, 2, 65, 93, 66, 67, 69, 70, - 78, 16, 27, 14, 8, 13, 14, 10, 14, 11, 83, 96, - 78, 78, 76, 114, 71, 66, 94, 12, 64, 64, 67, - 67, 76, 70, 66, 87, 93, 82, 85, 86, 82, 70, - 23, 18, 10, 4, 5, 64, 69, 71, 72, 3, 33, 19, - 13, 5, 18, 5, 3, 69, 6, 0, 30, 17, 12, 7, 15, - 3, 66, 69, 74, 71, 36, 18, 9, 4, 10, 66, 73, - 74, 7, 37, 26, 17, 8, 20, 6, 2, 66, 68, 62, - 85, 80, 73, 76, 78, 73, 71, 68, 68, 65, 2, 9, - 75, 73, 80, 81, 30, 82, 88, 76, 69, 68, 73, - 71, 71, 71, 67, 73, 85, 68, 68, 15, 69, 77, - 67, 68, 68, 68, 68, 68, 80, 72, 69, 73, 72, - 11, 92, 73, 16, 75, 65, 69, 68, 1, 0, 67, 64, - 2, 73, 73, 88, 45, 42, 44, 34, 24, 27, 26, 20, - 22, 17, 17, 18, 5, 2, 71, 4, 4, 66, 84, 64, 0, - 67, 64, 74, 73, 75, 78, 82, 79, 12, 8, 11, 2, - 78, 69, 70, 85, 74, 83, 86, 102, 95, 97, 101, - 64, 2, 91, 68, 66, 75, 87, 82, 83, 90, 80, 86, - 83, 93, 92, 97, 107, 72, 85, 92, 72, 4, 8, 10, - 22, 15, 21, 3, 20, 18, 26, 25, 31, 28, 16, 49, - 17, 9, 3, 68, 70, 92, 96, 101, 9, 40, 34, 35, - 26, 27, 15, 13, 7, 3, 72, 4, 8, 10, 22, 15, - 21, 3, 20, 18, 26, 25, 31, 28, 16, 49, 17, 9, - 3, 68, 70, 92, 96, 101 }, - - { - - 40, - 6, 79, 40, 6, 79, 72, 4, 22, 11, 64, 72, 15, - 36, 32, 7, 17, 66, 77, 8, 66, 68, 23, 84, 78, - 15, 7, 104, 113, 120, 65, 74, 70, 77, 8, 66, - 81, 3, 31, 1, 67, 73, 75, 93, 96, 91, 107, 64, - 75, 80, 72, 86, 84, 99, 3, 71, 71, 73, 27, 2, - 22, 0, 0, 0, 65, 93, 97, 5, 66, 67, 16, 70, - 88, 6, 5, 67, 28, 26, 65, 5, 66, 15, 68, 64, - 8, 101, 85, 87, 87, 20, 68, 8, 8, 69, 82, 69, - 68, 65, 75, 72, 84, 19, 73, 8, 72, 78, 64, 72, - 66, 4, 7, 5, 12, 6, 75, 64, 0, 67, 2, 72, 27, - 67, 1, 26, 24, 33, 28, 22, 91, 3, 2, 69, 67, - 80, 68, 21, 65, 64, 21, 40, 58, 48, 26, 92, - 95, 5, 38, 40, 116, 70, 8, 92, 17, 67, 1, 21, - 33, 55, 46, 30, 97, 79, 69, 67, 1, 84, 17, 21, - 16, 13, 17, 15, 8, 18, 15, 68, 2, 9, 3, 2, 71, - 4, 65, 69, 2, 0, 4, 1, 66, 94, 67, 68, 69, 71, - 78, 14, 25, 12, 7, 11, 12, 7, 12, 10, 85, 98, - 79, 80, 78, 115, 72, 67, 96, 11, 65, 65, 68, - 69, 78, 72, 68, 88, 93, 83, 86, 88, 80, 68, - 24, 19, 10, 4, 6, 0, 68, 70, 70, 4, 34, 20, - 14, 6, 19, 6, 4, 68, 8, 1, 31, 18, 13, 7, 16, - 4, 65, 68, 73, 71, 37, 19, 9, 4, 11, 65, 73, - 73, 8, 37, 27, 17, 8, 21, 7, 3, 65, 67, 62, - 84, 78, 71, 74, 77, 72, 69, 66, 66, 0, 4, 11, - 74, 72, 79, 80, 33, 82, 89, 76, 68, 67, 73, - 71, 71, 71, 67, 73, 86, 68, 68, 16, 69, 77, - 67, 68, 68, 68, 68, 68, 81, 73, 69, 73, 72, - 12, 93, 73, 17, 76, 65, 69, 68, 1, 0, 67, 64, - 3, 73, 73, 90, 44, 41, 43, 32, 22, 24, 23, 17, - 20, 14, 14, 15, 2, 64, 73, 0, 1, 70, 89, 67, - 65, 69, 66, 76, 75, 76, 79, 83, 79, 10, 6, 9, - 0, 80, 71, 71, 87, 76, 85, 88, 104, 97, 99, - 102, 65, 1, 93, 69, 68, 76, 89, 83, 84, 91, - 81, 87, 83, 92, 93, 98, 109, 73, 86, 93, 72, - 5, 9, 11, 23, 16, 22, 3, 21, 19, 27, 26, 32, - 29, 17, 48, 15, 7, 1, 70, 72, 94, 98, 102, 10, - 40, 35, 36, 27, 28, 16, 14, 7, 4, 72, 5, 9, - 11, 23, 16, 22, 3, 21, 19, 27, 26, 32, 29, 17, - 48, 15, 7, 1, 70, 72, 94, 98, 102 }, - - { - - 38, - 5, 80, 38, 5, 80, 71, 5, 22, 11, 65, 74, 13, - 35, 32, 7, 18, 68, 77, 9, 67, 69, 24, 85, 80, - 13, 5, 108, 116, 121, 0, 73, 70, 77, 9, 67, - 81, 3, 31, 0, 67, 73, 74, 95, 98, 92, 108, 65, - 75, 80, 73, 87, 84, 99, 2, 71, 71, 73, 27, 1, - 22, 0, 0, 0, 65, 94, 97, 5, 67, 68, 15, 70, - 87, 8, 6, 67, 29, 27, 65, 6, 65, 15, 67, 64, - 10, 102, 86, 88, 88, 20, 69, 8, 10, 69, 82, - 69, 67, 65, 75, 72, 84, 19, 74, 8, 72, 78, 64, - 72, 66, 4, 7, 6, 12, 6, 76, 65, 0, 67, 1, 72, - 27, 67, 1, 26, 24, 33, 28, 22, 92, 3, 2, 70, - 67, 80, 69, 21, 65, 64, 22, 41, 58, 49, 27, - 93, 97, 5, 38, 40, 117, 71, 8, 93, 17, 68, 1, - 22, 33, 54, 46, 31, 98, 78, 71, 70, 66, 83, - 16, 21, 15, 12, 16, 14, 7, 17, 14, 69, 1, 8, - 2, 1, 72, 3, 66, 70, 1, 64, 3, 0, 67, 96, 68, - 69, 69, 73, 79, 11, 22, 10, 5, 9, 9, 3, 9, 8, - 87, 101, 81, 83, 80, 117, 74, 69, 98, 9, 66, - 66, 70, 71, 80, 74, 70, 90, 93, 84, 87, 90, - 79, 67, 25, 19, 10, 4, 6, 0, 68, 70, 69, 5, - 34, 20, 14, 6, 20, 7, 5, 68, 10, 1, 31, 18, - 13, 7, 16, 4, 65, 68, 72, 71, 38, 20, 9, 3, - 11, 65, 73, 73, 8, 37, 27, 17, 8, 22, 7, 3, - 65, 67, 62, 83, 77, 70, 73, 76, 71, 68, 65, - 65, 1, 5, 13, 74, 72, 79, 80, 36, 82, 91, 76, - 68, 67, 73, 71, 71, 72, 67, 74, 87, 69, 68, - 16, 70, 77, 68, 68, 68, 69, 69, 69, 82, 74, - 70, 74, 72, 13, 94, 74, 17, 77, 66, 69, 69, 1, - 64, 68, 64, 3, 73, 73, 92, 42, 40, 41, 30, 19, - 21, 20, 14, 17, 11, 10, 12, 65, 67, 75, 67, - 66, 74, 95, 70, 68, 71, 69, 79, 77, 78, 81, - 84, 79, 7, 3, 6, 65, 83, 73, 73, 90, 78, 88, - 90, 107, 100, 101, 104, 67, 64, 96, 71, 70, - 78, 91, 85, 86, 92, 82, 88, 84, 91, 95, 100, - 111, 75, 88, 95, 72, 5, 9, 11, 24, 16, 22, 3, - 22, 19, 28, 26, 32, 29, 17, 47, 13, 5, 65, 73, - 74, 97, 100, 104, 10, 40, 35, 36, 27, 28, 16, - 14, 7, 4, 72, 5, 9, 11, 24, 16, 22, 3, 22, 19, - 28, 26, 32, 29, 17, 47, 13, 5, 65, 73, 74, 97, - 100, 104 }, - - { - - 37, - 5, 80, 37, 5, 80, 69, 7, 23, 12, 65, 75, 12, - 35, 33, 8, 20, 69, 76, 11, 67, 69, 26, 85, 81, - 12, 4, 111, 118, 121, 2, 71, 69, 76, 11, 67, - 80, 4, 32, 0, 66, 72, 72, 96, 99, 92, 108, 65, - 74, 79, 73, 87, 83, 98, 2, 70, 70, 72, 28, 1, - 22, 0, 0, 0, 64, 94, 97, 6, 67, 68, 15, 69, - 85, 11, 8, 66, 31, 29, 64, 8, 0, 16, 65, 0, - 13, 102, 86, 88, 88, 21, 69, 9, 13, 68, 81, - 68, 65, 65, 74, 72, 83, 20, 74, 9, 71, 77, 0, - 71, 65, 5, 8, 7, 13, 7, 76, 65, 1, 66, 1, 71, - 28, 66, 1, 27, 25, 34, 29, 23, 92, 4, 3, 70, - 67, 79, 69, 22, 64, 0, 24, 43, 59, 51, 29, 93, - 98, 6, 39, 41, 117, 71, 9, 93, 18, 68, 2, 24, - 33, 54, 47, 33, 99, 76, 72, 72, 69, 81, 16, - 21, 15, 12, 16, 14, 7, 17, 14, 69, 1, 8, 2, 1, - 72, 3, 66, 70, 1, 64, 3, 0, 67, 97, 68, 69, - 69, 74, 79, 9, 20, 9, 4, 8, 7, 0, 7, 7, 88, - 103, 82, 85, 81, 118, 75, 70, 99, 8, 66, 66, - 71, 72, 81, 75, 71, 91, 93, 84, 87, 91, 77, - 65, 27, 20, 10, 4, 7, 1, 67, 69, 67, 7, 35, - 21, 15, 7, 22, 8, 7, 67, 13, 2, 32, 19, 14, 8, - 17, 5, 64, 67, 70, 70, 40, 21, 10, 3, 12, 64, - 72, 72, 9, 38, 28, 18, 9, 23, 8, 4, 64, 66, - 62, 81, 75, 68, 71, 74, 69, 66, 0, 0, 3, 7, - 16, 73, 71, 78, 79, 40, 81, 92, 75, 67, 66, - 72, 71, 70, 72, 66, 74, 87, 69, 68, 17, 70, - 77, 68, 68, 67, 69, 69, 69, 82, 74, 70, 74, - 71, 15, 94, 74, 18, 77, 66, 69, 69, 2, 64, 68, - 0, 4, 72, 72, 93, 41, 39, 40, 29, 17, 19, 18, - 11, 15, 9, 7, 10, 68, 69, 77, 70, 69, 77, 100, - 72, 70, 72, 71, 81, 78, 79, 82, 84, 79, 5, 1, - 4, 67, 85, 74, 74, 92, 79, 90, 91, 109, 102, - 102, 105, 68, 65, 98, 72, 71, 79, 92, 86, 87, - 93, 82, 88, 84, 90, 96, 101, 112, 76, 89, 96, - 71, 6, 10, 12, 26, 17, 23, 4, 24, 20, 29, 27, - 33, 30, 18, 47, 12, 4, 67, 75, 75, 99, 101, - 105, 11, 41, 36, 37, 28, 29, 17, 15, 8, 5, 71, - 6, 10, 12, 26, 17, 23, 4, 24, 20, 29, 27, 33, - 30, 18, 47, 12, 4, 67, 75, 75, 99, 101, 105 }, - - { - - 36, - 5, 80, 36, 5, 80, 67, 8, 23, 12, 65, 77, 10, - 34, 34, 8, 22, 71, 76, 12, 67, 69, 27, 86, 82, - 11, 2, 114, 120, 122, 4, 70, 69, 76, 12, 67, - 80, 5, 32, 0, 65, 71, 71, 97, 100, 92, 108, - 65, 74, 78, 73, 87, 83, 98, 2, 70, 70, 71, 28, - 1, 22, 0, 0, 0, 0, 94, 97, 6, 68, 68, 15, 68, - 84, 13, 9, 65, 33, 31, 0, 9, 2, 17, 64, 1, 15, - 103, 86, 88, 88, 21, 69, 10, 15, 68, 80, 67, - 0, 65, 74, 72, 83, 20, 74, 9, 70, 77, 1, 71, - 65, 5, 8, 8, 14, 7, 76, 65, 1, 66, 1, 71, 28, - 66, 1, 27, 25, 34, 29, 23, 93, 5, 4, 71, 67, - 79, 69, 23, 64, 0, 25, 44, 60, 53, 31, 94, 99, - 6, 39, 41, 118, 71, 9, 94, 19, 68, 2, 25, 33, - 54, 47, 34, 100, 75, 73, 75, 72, 80, 16, 21, - 15, 11, 15, 14, 7, 17, 13, 70, 0, 8, 2, 1, 72, - 2, 67, 71, 1, 64, 3, 64, 68, 98, 69, 70, 69, - 75, 80, 7, 18, 7, 2, 6, 5, 66, 5, 6, 90, 105, - 84, 87, 83, 119, 76, 71, 101, 7, 67, 67, 72, - 74, 83, 77, 73, 93, 93, 85, 88, 93, 76, 64, - 28, 21, 10, 4, 8, 2, 66, 68, 65, 8, 36, 22, - 16, 8, 23, 9, 8, 66, 15, 3, 32, 19, 14, 8, 18, - 6, 0, 66, 69, 70, 41, 22, 10, 3, 13, 0, 72, - 71, 10, 38, 29, 18, 9, 24, 9, 5, 0, 65, 62, - 80, 73, 66, 69, 73, 68, 64, 2, 1, 5, 9, 18, - 72, 70, 77, 78, 43, 81, 93, 75, 66, 65, 72, - 71, 70, 72, 66, 74, 88, 69, 68, 18, 70, 77, - 68, 68, 67, 69, 69, 69, 83, 75, 70, 74, 71, - 16, 95, 74, 19, 78, 66, 69, 69, 2, 64, 68, 0, - 5, 72, 72, 95, 40, 38, 39, 27, 15, 16, 15, 8, - 13, 6, 4, 7, 71, 72, 79, 74, 73, 81, 105, 75, - 72, 74, 73, 83, 80, 80, 83, 85, 79, 3, 64, 2, - 69, 87, 76, 76, 94, 81, 92, 93, 111, 104, 104, - 106, 69, 66, 100, 74, 73, 81, 94, 87, 88, 94, - 83, 89, 84, 89, 97, 102, 114, 77, 90, 97, 71, - 6, 11, 13, 27, 18, 24, 4, 25, 21, 30, 27, 34, - 31, 19, 46, 10, 2, 69, 77, 77, 101, 103, 106, - 12, 41, 36, 38, 29, 30, 17, 16, 8, 6, 71, 6, - 11, 13, 27, 18, 24, 4, 25, 21, 30, 27, 34, 31, - 19, 46, 10, 2, 69, 77, 77, 101, 103, 106 }, - - { - - 35, - 5, 80, 35, 5, 80, 65, 10, 24, 12, 66, 79, 9, - 33, 34, 8, 24, 72, 76, 14, 67, 70, 28, 87, 83, - 10, 0, 118, 122, 123, 6, 68, 69, 76, 14, 67, - 79, 6, 33, 0, 64, 70, 70, 98, 101, 92, 109, - 65, 74, 77, 73, 88, 83, 98, 2, 70, 70, 70, 29, - 1, 22, 0, 0, 0, 0, 94, 97, 7, 69, 68, 14, 68, - 83, 15, 10, 64, 34, 32, 1, 10, 4, 18, 0, 2, - 17, 104, 86, 88, 88, 22, 69, 11, 17, 68, 79, - 66, 2, 65, 74, 72, 83, 21, 74, 10, 69, 77, 2, - 71, 65, 5, 9, 9, 14, 7, 76, 65, 1, 66, 1, 71, - 28, 66, 1, 28, 25, 35, 29, 24, 93, 5, 5, 71, - 67, 79, 69, 24, 64, 1, 26, 45, 61, 54, 33, 94, - 100, 7, 39, 41, 119, 71, 10, 94, 19, 68, 2, - 26, 33, 54, 47, 35, 101, 73, 74, 78, 75, 78, - 16, 21, 14, 10, 15, 13, 6, 17, 13, 71, 64, 8, - 2, 1, 73, 2, 68, 72, 0, 64, 3, 65, 68, 99, 69, - 71, 69, 76, 80, 5, 16, 5, 1, 4, 3, 69, 2, 5, - 92, 107, 85, 89, 85, 121, 77, 72, 103, 6, 68, - 68, 73, 75, 85, 79, 75, 94, 93, 86, 89, 94, - 74, 1, 30, 21, 10, 4, 9, 3, 65, 67, 0, 9, 37, - 23, 17, 8, 24, 10, 10, 65, 17, 3, 33, 20, 15, - 9, 19, 6, 0, 65, 68, 70, 43, 23, 10, 3, 14, 0, - 72, 70, 11, 39, 30, 19, 9, 25, 9, 6, 0, 65, - 62, 78, 72, 65, 67, 72, 66, 0, 3, 3, 7, 11, - 20, 72, 69, 77, 77, 46, 81, 94, 75, 65, 64, - 72, 71, 70, 72, 65, 74, 89, 69, 68, 18, 70, - 77, 68, 68, 67, 70, 69, 69, 84, 76, 70, 74, - 71, 17, 96, 74, 20, 79, 66, 69, 69, 3, 64, 69, - 1, 6, 72, 72, 96, 39, 37, 38, 25, 13, 14, 13, - 5, 10, 3, 1, 4, 74, 75, 81, 78, 76, 85, 110, - 78, 74, 76, 75, 86, 82, 81, 84, 86, 79, 1, 66, - 0, 71, 89, 78, 77, 96, 83, 94, 95, 113, 106, - 106, 107, 70, 67, 102, 75, 75, 82, 96, 89, 90, - 95, 84, 90, 84, 88, 98, 104, 115, 78, 91, 98, - 71, 7, 11, 13, 28, 19, 25, 4, 26, 22, 31, 28, - 35, 31, 20, 46, 8, 0, 71, 79, 79, 103, 105, - 107, 12, 42, 37, 39, 29, 31, 18, 16, 9, 6, 71, - 7, 11, 13, 28, 19, 25, 4, 26, 22, 31, 28, 35, - 31, 20, 46, 8, 0, 71, 79, 79, 103, 105, 107 }, - - { - - 33, - 5, 80, 33, 5, 80, 64, 11, 24, 12, 66, 81, 7, - 32, 35, 8, 25, 74, 76, 15, 68, 70, 29, 88, 85, - 8, 65, 121, 125, 124, 8, 67, 69, 76, 15, 68, - 79, 7, 33, 64, 64, 69, 68, 99, 103, 93, 109, - 65, 73, 76, 74, 88, 83, 98, 2, 70, 70, 70, 29, - 1, 22, 0, 0, 0, 1, 95, 97, 7, 70, 68, 14, 67, - 82, 17, 11, 0, 36, 34, 1, 11, 6, 19, 1, 3, 20, - 104, 87, 88, 89, 22, 70, 12, 20, 67, 79, 66, - 4, 65, 74, 72, 83, 21, 74, 10, 68, 77, 2, 70, - 65, 5, 9, 10, 15, 7, 77, 66, 1, 66, 1, 71, 28, - 66, 1, 28, 25, 35, 29, 24, 94, 6, 5, 72, 67, - 78, 69, 25, 0, 1, 28, 47, 62, 56, 35, 95, 101, - 7, 40, 41, 120, 71, 10, 95, 20, 68, 2, 27, 33, - 54, 47, 37, 102, 72, 75, 81, 78, 77, 15, 21, - 14, 10, 14, 13, 6, 17, 12, 72, 65, 7, 2, 1, - 73, 1, 68, 73, 0, 65, 2, 66, 69, 100, 70, 72, - 69, 78, 81, 3, 14, 3, 64, 3, 1, 73, 0, 4, 94, - 110, 87, 91, 87, 122, 79, 73, 104, 5, 69, 69, - 75, 77, 87, 81, 76, 96, 93, 87, 90, 96, 73, 2, - 31, 22, 10, 4, 10, 4, 64, 67, 2, 11, 38, 23, - 17, 9, 26, 11, 11, 64, 20, 4, 33, 20, 15, 9, - 20, 7, 1, 65, 67, 70, 44, 24, 10, 3, 15, 1, - 72, 69, 12, 39, 31, 19, 9, 26, 10, 7, 1, 64, - 62, 77, 70, 0, 66, 71, 65, 2, 5, 4, 8, 13, 23, - 71, 68, 76, 76, 49, 80, 95, 74, 64, 64, 72, - 71, 70, 73, 65, 75, 90, 69, 68, 19, 70, 77, - 68, 68, 66, 70, 70, 69, 85, 77, 71, 74, 71, - 18, 97, 75, 20, 79, 67, 69, 69, 3, 65, 69, 1, - 6, 72, 72, 98, 38, 36, 37, 24, 10, 11, 10, 2, - 8, 0, 66, 1, 78, 77, 83, 82, 80, 89, 115, 81, - 76, 78, 77, 88, 84, 83, 85, 87, 79, 65, 69, - 66, 73, 91, 80, 79, 98, 85, 96, 97, 115, 109, - 107, 109, 71, 68, 105, 77, 76, 84, 98, 90, 91, - 96, 85, 91, 84, 87, 100, 105, 117, 80, 92, 99, - 71, 7, 12, 14, 29, 19, 25, 5, 27, 23, 32, 28, - 36, 32, 20, 45, 6, 65, 73, 81, 81, 106, 107, - 109, 13, 42, 37, 39, 30, 31, 18, 17, 9, 7, 71, - 7, 12, 14, 29, 19, 25, 5, 27, 23, 32, 28, 36, - 32, 20, 45, 6, 65, 73, 81, 81, 106, 107, 109 }, - - { - - 32, - 5, 80, 32, 5, 80, 1, 13, 24, 12, 67, 83, 6, - 31, 36, 8, 27, 76, 75, 17, 68, 70, 30, 89, 86, - 7, 67, 124, 126, 124, 10, 66, 69, 75, 17, 68, - 79, 8, 33, 64, 0, 68, 67, 100, 104, 93, 109, - 65, 73, 75, 74, 88, 83, 98, 2, 69, 70, 69, 30, - 1, 22, 0, 0, 0, 1, 95, 97, 8, 71, 68, 13, 67, - 80, 20, 12, 1, 37, 35, 2, 12, 8, 20, 2, 4, 22, - 105, 87, 88, 89, 22, 70, 13, 22, 67, 78, 65, - 6, 65, 74, 72, 82, 21, 74, 11, 67, 76, 3, 70, - 65, 6, 10, 11, 15, 7, 77, 66, 2, 66, 1, 71, - 29, 66, 1, 29, 26, 35, 29, 24, 94, 6, 6, 72, - 67, 78, 69, 26, 0, 2, 29, 48, 62, 57, 37, 95, - 102, 8, 40, 41, 121, 71, 11, 95, 21, 68, 2, - 29, 33, 54, 47, 38, 103, 70, 76, 83, 81, 76, - 15, 21, 13, 9, 14, 13, 5, 17, 12, 73, 66, 7, - 2, 1, 73, 1, 69, 74, 64, 65, 2, 67, 69, 101, - 71, 72, 69, 79, 81, 1, 12, 2, 65, 1, 64, 76, - 66, 3, 96, 112, 88, 93, 89, 123, 80, 74, 106, - 4, 70, 70, 76, 78, 89, 83, 78, 97, 93, 88, 91, - 98, 71, 4, 32, 22, 10, 4, 11, 5, 0, 66, 4, 12, - 39, 24, 18, 10, 27, 12, 13, 0, 22, 5, 34, 21, - 16, 10, 21, 8, 1, 64, 66, 69, 45, 25, 10, 3, - 16, 1, 71, 68, 13, 39, 32, 19, 9, 27, 11, 8, - 1, 0, 62, 76, 69, 1, 64, 70, 0, 3, 7, 6, 10, - 15, 25, 70, 67, 75, 75, 52, 80, 96, 74, 0, 0, - 72, 71, 70, 73, 64, 75, 91, 69, 68, 20, 70, - 77, 68, 68, 66, 71, 70, 69, 86, 78, 71, 74, - 71, 19, 97, 75, 21, 80, 67, 69, 69, 3, 65, 70, - 1, 7, 72, 72, 99, 37, 35, 36, 22, 8, 9, 7, 64, - 5, 66, 69, 65, 81, 80, 85, 86, 83, 93, 120, - 84, 78, 79, 79, 91, 86, 84, 86, 88, 79, 67, - 71, 68, 75, 93, 82, 80, 100, 87, 98, 99, 117, - 111, 109, 110, 72, 69, 107, 78, 78, 85, 100, - 91, 92, 97, 86, 92, 84, 86, 101, 106, 118, 81, - 93, 100, 71, 8, 12, 15, 30, 20, 26, 5, 28, 24, - 33, 29, 37, 32, 21, 45, 4, 67, 75, 83, 83, - 108, 109, 110, 13, 43, 38, 40, 31, 32, 19, 17, - 9, 8, 71, 8, 12, 15, 30, 20, 26, 5, 28, 24, - 33, 29, 37, 32, 21, 45, 4, 67, 75, 83, 83, - 108, 109, 110 }, - - { - - 31, - 5, 81, 31, 5, 81, 3, 14, 25, 12, 67, 84, 4, - 30, 36, 9, 29, 77, 75, 18, 68, 71, 31, 90, 87, - 6, 68, 126, 126, 125, 12, 64, 69, 75, 18, 68, - 78, 9, 34, 64, 1, 67, 66, 102, 105, 93, 110, - 65, 73, 75, 74, 89, 82, 98, 1, 69, 70, 68, 30, - 1, 22, 0, 0, 0, 2, 95, 97, 8, 71, 69, 13, 66, - 79, 22, 13, 2, 39, 37, 3, 13, 10, 21, 3, 4, - 24, 106, 87, 88, 89, 23, 70, 14, 24, 67, 77, - 64, 8, 65, 74, 72, 82, 22, 75, 11, 67, 76, 4, - 70, 64, 6, 10, 12, 16, 7, 77, 66, 2, 66, 1, - 71, 29, 66, 1, 29, 26, 36, 30, 25, 95, 7, 7, - 73, 67, 78, 69, 27, 0, 2, 30, 49, 62, 59, 38, - 96, 103, 8, 40, 41, 121, 72, 11, 96, 21, 69, - 3, 30, 33, 54, 48, 39, 104, 69, 77, 86, 84, - 74, 15, 21, 13, 8, 13, 12, 5, 16, 11, 73, 66, - 7, 1, 1, 74, 0, 70, 75, 64, 65, 2, 67, 70, - 103, 71, 73, 69, 80, 82, 65, 10, 0, 67, 64, - 66, 79, 68, 1, 98, 114, 90, 95, 91, 125, 81, - 76, 108, 2, 71, 71, 77, 80, 91, 85, 80, 99, - 93, 89, 92, 99, 70, 5, 34, 23, 10, 4, 12, 5, - 0, 65, 5, 13, 40, 25, 19, 10, 28, 13, 14, 1, - 24, 5, 34, 21, 16, 10, 22, 8, 2, 0, 65, 69, - 47, 26, 10, 3, 16, 2, 71, 68, 13, 40, 32, 20, - 9, 28, 11, 8, 2, 0, 62, 74, 67, 3, 1, 68, 1, - 5, 8, 7, 12, 17, 27, 70, 66, 75, 75, 55, 80, - 97, 74, 0, 1, 72, 71, 70, 73, 64, 75, 92, 69, - 68, 20, 70, 77, 68, 68, 66, 71, 70, 69, 87, - 79, 71, 74, 71, 20, 98, 75, 22, 81, 67, 69, - 69, 4, 65, 70, 2, 8, 72, 72, 101, 36, 34, 35, - 20, 6, 6, 5, 67, 3, 69, 72, 68, 84, 83, 87, - 89, 87, 97, 125, 86, 81, 81, 81, 93, 88, 85, - 87, 89, 79, 69, 73, 70, 77, 95, 83, 82, 102, - 89, 101, 101, 119, 113, 111, 111, 73, 71, 109, - 80, 80, 87, 102, 93, 94, 98, 87, 93, 85, 85, - 102, 108, 120, 82, 95, 101, 70, 8, 13, 15, 31, - 21, 27, 5, 29, 25, 34, 29, 38, 33, 22, 44, 2, - 69, 77, 85, 85, 110, 111, 111, 14, 43, 38, 41, - 31, 33, 19, 18, 10, 8, 70, 8, 13, 15, 31, 21, - 27, 5, 29, 25, 34, 29, 38, 33, 22, 44, 2, 69, - 77, 85, 85, 110, 111, 111 }, - - { - - 30, - 5, 81, 30, 5, 81, 5, 16, 25, 12, 68, 86, 3, - 29, 37, 9, 30, 79, 75, 20, 69, 71, 32, 91, 88, - 5, 70, 126, 126, 126, 14, 0, 69, 75, 20, 69, - 78, 10, 34, 64, 1, 66, 64, 103, 106, 93, 110, - 65, 72, 74, 75, 89, 82, 98, 1, 69, 70, 67, 31, - 1, 22, 0, 0, 0, 2, 95, 97, 9, 72, 69, 12, 66, - 78, 24, 14, 3, 40, 38, 4, 14, 12, 22, 4, 5, - 27, 106, 88, 88, 90, 23, 70, 15, 27, 66, 77, - 64, 10, 65, 74, 72, 82, 22, 75, 12, 66, 76, 5, - 69, 64, 6, 11, 13, 16, 7, 78, 66, 2, 66, 1, - 71, 29, 66, 1, 30, 26, 36, 30, 25, 95, 7, 7, - 73, 67, 77, 69, 28, 1, 3, 32, 51, 62, 60, 40, - 96, 104, 9, 41, 41, 122, 72, 12, 96, 22, 69, - 3, 31, 33, 54, 48, 41, 105, 67, 78, 89, 87, - 73, 15, 21, 12, 8, 13, 12, 4, 16, 11, 74, 67, - 7, 1, 1, 74, 0, 70, 76, 65, 65, 2, 68, 70, - 104, 72, 74, 69, 81, 82, 67, 8, 65, 68, 65, - 68, 82, 71, 0, 100, 116, 91, 97, 93, 126, 82, - 77, 109, 1, 72, 72, 79, 81, 93, 87, 81, 100, - 93, 90, 93, 101, 68, 7, 35, 23, 10, 4, 13, 6, - 1, 65, 7, 15, 41, 26, 19, 11, 30, 14, 16, 2, - 27, 6, 35, 22, 17, 11, 23, 9, 2, 1, 64, 69, - 48, 27, 10, 3, 17, 2, 71, 67, 14, 40, 33, 20, - 9, 29, 12, 9, 2, 1, 62, 73, 66, 4, 2, 67, 3, - 6, 10, 9, 14, 19, 30, 69, 65, 74, 74, 58, 79, - 98, 73, 1, 2, 72, 71, 70, 73, 0, 76, 93, 69, - 68, 21, 70, 77, 68, 68, 65, 72, 71, 69, 88, - 80, 72, 74, 71, 21, 99, 76, 23, 81, 68, 69, - 69, 4, 66, 71, 2, 8, 72, 72, 102, 35, 33, 34, - 19, 3, 4, 2, 70, 0, 72, 75, 71, 87, 85, 89, - 93, 90, 101, 126, 89, 83, 83, 83, 96, 90, 86, - 88, 90, 79, 71, 76, 73, 79, 97, 85, 83, 104, - 91, 103, 103, 121, 115, 112, 113, 74, 72, 111, - 81, 81, 88, 104, 94, 95, 99, 88, 94, 85, 84, - 104, 109, 121, 84, 96, 102, 70, 9, 13, 16, 32, - 22, 27, 6, 30, 26, 35, 30, 39, 33, 22, 44, 0, - 71, 79, 87, 87, 113, 113, 112, 14, 44, 39, 41, - 32, 34, 20, 18, 10, 9, 70, 9, 13, 16, 32, 22, - 27, 6, 30, 26, 35, 30, 39, 33, 22, 44, 0, 71, - 79, 87, 87, 113, 113, 112 }, - - { - - 28, - 4, 81, 28, 4, 81, 6, 17, 25, 12, 68, 88, 1, - 28, 37, 9, 32, 81, 75, 21, 69, 72, 33, 92, 90, - 3, 72, 126, 126, 126, 16, 1, 69, 75, 21, 69, - 78, 10, 34, 65, 2, 65, 0, 104, 108, 94, 111, - 65, 72, 73, 75, 90, 82, 98, 1, 69, 70, 67, 31, - 1, 22, 0, 0, 0, 3, 96, 97, 9, 73, 69, 12, 65, - 77, 26, 15, 3, 42, 40, 4, 15, 14, 22, 5, 6, - 29, 107, 88, 89, 90, 23, 71, 15, 29, 66, 76, - 0, 11, 65, 74, 72, 82, 22, 75, 12, 65, 76, 5, - 69, 64, 6, 11, 14, 17, 7, 78, 67, 2, 66, 0, - 71, 29, 66, 1, 30, 26, 36, 30, 25, 96, 8, 8, - 74, 67, 77, 69, 29, 1, 3, 33, 52, 62, 62, 42, - 97, 105, 9, 41, 41, 123, 72, 12, 97, 22, 69, - 3, 32, 33, 54, 48, 42, 106, 66, 79, 92, 91, - 72, 14, 21, 12, 7, 12, 11, 4, 16, 10, 75, 68, - 6, 1, 0, 75, 64, 71, 77, 65, 66, 1, 69, 71, - 105, 73, 75, 69, 83, 83, 69, 6, 67, 70, 67, - 71, 86, 73, 64, 102, 119, 93, 100, 95, 126, - 84, 78, 111, 0, 73, 73, 80, 83, 95, 89, 83, - 102, 93, 91, 94, 103, 67, 8, 36, 24, 10, 4, - 13, 7, 2, 64, 9, 16, 41, 26, 20, 11, 31, 15, - 17, 3, 29, 6, 35, 22, 17, 11, 23, 9, 3, 1, 0, - 69, 49, 28, 10, 3, 18, 3, 71, 66, 15, 40, 34, - 20, 9, 30, 12, 10, 3, 1, 62, 72, 64, 6, 4, 66, - 4, 8, 11, 10, 15, 21, 32, 69, 64, 74, 73, 61, - 79, 99, 73, 2, 2, 72, 71, 70, 74, 0, 76, 94, - 69, 68, 21, 70, 77, 69, 68, 65, 72, 71, 70, - 89, 81, 72, 75, 71, 22, 100, 76, 23, 82, 68, - 69, 70, 4, 66, 71, 2, 9, 72, 72, 104, 34, 32, - 33, 17, 1, 1, 64, 73, 65, 75, 79, 74, 91, 88, - 91, 97, 94, 105, 126, 92, 85, 85, 86, 98, 92, - 88, 90, 91, 79, 74, 78, 75, 81, 100, 87, 85, - 107, 93, 105, 105, 123, 118, 114, 114, 76, 73, - 114, 83, 83, 90, 106, 96, 97, 100, 89, 95, 85, - 83, 105, 111, 123, 85, 97, 103, 70, 9, 14, 16, - 33, 22, 28, 6, 31, 26, 36, 30, 39, 34, 23, 43, - 65, 73, 81, 89, 89, 115, 115, 114, 15, 44, 39, - 42, 32, 34, 20, 19, 10, 9, 70, 9, 14, 16, 33, - 22, 28, 6, 31, 26, 36, 30, 39, 34, 23, 43, 65, - 73, 81, 89, 89, 115, 115, 114 }, - - { - - 27, - 4, 81, 27, 4, 81, 8, 18, 26, 12, 68, 90, 64, - 28, 38, 9, 34, 82, 74, 23, 69, 72, 34, 92, 91, - 2, 74, 126, 126, 126, 18, 3, 68, 74, 23, 69, - 77, 11, 35, 65, 3, 64, 1, 105, 109, 94, 111, - 65, 72, 72, 75, 90, 82, 98, 1, 68, 69, 66, 31, - 1, 22, 0, 0, 0, 4, 96, 97, 9, 74, 69, 12, 64, - 75, 29, 16, 4, 44, 42, 5, 16, 16, 23, 7, 7, - 31, 108, 88, 89, 90, 24, 71, 16, 31, 66, 75, - 1, 13, 65, 73, 72, 81, 23, 75, 13, 64, 75, 6, - 69, 64, 7, 12, 15, 18, 7, 78, 67, 3, 65, 0, - 71, 30, 66, 1, 30, 27, 37, 30, 26, 96, 9, 9, - 75, 67, 77, 69, 30, 1, 4, 34, 53, 62, 62, 44, - 98, 106, 10, 41, 42, 124, 72, 12, 97, 23, 69, - 3, 34, 33, 54, 48, 43, 107, 65, 80, 94, 94, - 70, 14, 21, 12, 6, 12, 11, 4, 16, 10, 76, 69, - 6, 1, 0, 75, 64, 72, 77, 65, 66, 1, 70, 72, - 106, 73, 75, 69, 84, 83, 71, 4, 68, 71, 69, - 73, 89, 75, 65, 104, 121, 94, 102, 96, 126, - 85, 79, 113, 64, 74, 74, 81, 85, 96, 91, 85, - 103, 93, 91, 95, 104, 65, 10, 38, 25, 10, 4, - 14, 8, 3, 0, 11, 17, 42, 27, 21, 12, 32, 16, - 18, 4, 31, 7, 36, 23, 18, 11, 24, 10, 4, 2, 2, - 68, 51, 29, 11, 3, 19, 4, 70, 65, 16, 41, 35, - 21, 10, 31, 13, 11, 4, 2, 62, 70, 1, 8, 6, 65, - 5, 10, 13, 12, 17, 23, 34, 68, 0, 73, 72, 62, - 79, 100, 73, 3, 3, 71, 71, 70, 74, 0, 76, 95, - 69, 68, 22, 70, 77, 69, 68, 65, 72, 71, 70, - 89, 82, 72, 75, 70, 24, 100, 76, 24, 83, 68, - 69, 70, 5, 66, 71, 3, 10, 71, 71, 106, 33, 31, - 32, 15, 64, 65, 66, 76, 67, 77, 82, 76, 94, - 91, 93, 101, 97, 108, 126, 95, 87, 86, 88, - 100, 93, 89, 91, 92, 79, 76, 80, 77, 83, 102, - 89, 86, 109, 95, 107, 107, 125, 120, 116, 115, - 77, 74, 116, 84, 85, 91, 108, 97, 98, 101, 90, - 95, 85, 82, 106, 112, 125, 86, 98, 104, 70, - 10, 15, 17, 35, 23, 29, 6, 32, 27, 37, 31, 40, - 35, 24, 42, 66, 75, 83, 91, 91, 117, 117, 115, - 16, 44, 40, 43, 33, 35, 21, 20, 11, 10, 70, - 10, 15, 17, 35, 23, 29, 6, 32, 27, 37, 31, 40, - 35, 24, 42, 66, 75, 83, 91, 91, 117, 117, 115 }, - - { - - 26, - 4, 81, 26, 4, 81, 10, 20, 26, 12, 69, 92, 65, - 27, 39, 9, 35, 84, 74, 24, 70, 72, 35, 93, 92, - 1, 76, 126, 126, 126, 20, 4, 68, 74, 24, 70, - 77, 12, 35, 65, 3, 0, 3, 106, 110, 94, 111, - 65, 71, 71, 76, 90, 82, 98, 1, 68, 69, 65, 32, - 1, 22, 0, 0, 0, 4, 96, 97, 10, 75, 69, 11, 64, - 74, 31, 17, 5, 45, 43, 6, 17, 18, 24, 8, 8, - 34, 108, 89, 89, 91, 24, 71, 17, 34, 65, 75, - 1, 15, 65, 73, 72, 81, 23, 75, 13, 0, 75, 7, - 68, 64, 7, 12, 16, 18, 7, 79, 67, 3, 65, 0, - 71, 30, 66, 1, 31, 27, 37, 30, 26, 97, 9, 9, - 75, 67, 76, 69, 31, 2, 4, 36, 55, 62, 62, 46, - 98, 107, 10, 42, 42, 125, 72, 13, 98, 24, 69, - 3, 35, 33, 54, 48, 45, 108, 0, 81, 97, 97, 69, - 14, 21, 11, 6, 11, 11, 3, 16, 9, 77, 70, 6, 1, - 0, 75, 65, 72, 78, 66, 66, 1, 71, 72, 107, 74, - 76, 69, 85, 84, 73, 2, 70, 73, 70, 75, 92, 78, - 66, 106, 123, 96, 104, 98, 126, 86, 80, 114, - 65, 75, 75, 83, 86, 98, 93, 86, 105, 93, 92, - 96, 106, 64, 11, 39, 25, 10, 4, 15, 9, 4, 0, - 13, 19, 43, 28, 21, 13, 34, 17, 20, 5, 34, 8, - 36, 23, 18, 12, 25, 11, 4, 3, 3, 68, 52, 30, - 11, 3, 20, 4, 70, 64, 17, 41, 36, 21, 10, 32, - 14, 12, 4, 3, 62, 69, 2, 9, 7, 64, 7, 11, 15, - 13, 19, 25, 37, 67, 1, 72, 71, 62, 78, 101, - 72, 4, 4, 71, 71, 70, 74, 1, 77, 96, 69, 68, - 23, 70, 77, 69, 68, 64, 73, 72, 70, 90, 83, - 73, 75, 70, 25, 101, 77, 25, 83, 69, 69, 70, - 5, 67, 72, 3, 10, 71, 71, 107, 32, 30, 31, 14, - 67, 67, 69, 79, 70, 80, 85, 79, 97, 93, 95, - 105, 101, 112, 126, 98, 89, 88, 90, 103, 95, - 90, 92, 93, 79, 78, 83, 80, 85, 104, 91, 88, - 111, 97, 109, 109, 126, 122, 117, 117, 78, 75, - 118, 86, 86, 93, 110, 98, 99, 102, 91, 96, 85, - 81, 108, 113, 126, 88, 99, 105, 70, 10, 15, - 18, 36, 24, 29, 7, 33, 28, 38, 31, 41, 35, 24, - 42, 68, 77, 85, 93, 93, 120, 119, 116, 16, 45, - 40, 43, 34, 36, 21, 20, 11, 11, 70, 10, 15, - 18, 36, 24, 29, 7, 33, 28, 38, 31, 41, 35, 24, - 42, 68, 77, 85, 93, 93, 120, 119, 116 }, - - { - - 25, - 4, 82, 25, 4, 82, 12, 21, 27, 12, 69, 93, 67, - 26, 39, 10, 37, 85, 74, 26, 70, 73, 36, 94, - 93, 0, 77, 126, 126, 126, 22, 6, 68, 74, 26, - 70, 76, 13, 36, 65, 4, 1, 4, 108, 111, 94, - 112, 65, 71, 71, 76, 91, 81, 98, 0, 68, 69, - 64, 32, 1, 22, 0, 0, 0, 5, 96, 97, 10, 75, 70, - 11, 0, 73, 33, 18, 6, 47, 45, 7, 18, 20, 25, - 9, 8, 36, 109, 89, 89, 91, 25, 71, 18, 36, 65, - 74, 2, 17, 65, 73, 72, 81, 24, 76, 14, 0, 75, - 8, 68, 0, 7, 13, 17, 19, 7, 79, 67, 3, 65, 0, - 71, 30, 66, 1, 31, 27, 38, 31, 27, 97, 10, 10, - 76, 67, 76, 69, 32, 2, 5, 37, 56, 62, 62, 47, - 99, 108, 11, 42, 42, 125, 73, 13, 98, 24, 70, - 4, 36, 33, 54, 49, 46, 109, 1, 82, 100, 100, - 67, 14, 21, 11, 5, 11, 10, 3, 15, 9, 77, 70, - 6, 0, 0, 76, 65, 73, 79, 66, 66, 1, 71, 73, - 109, 74, 77, 69, 86, 84, 76, 0, 72, 74, 72, - 77, 95, 80, 68, 108, 125, 97, 106, 100, 126, - 87, 82, 116, 67, 76, 76, 84, 88, 100, 95, 88, - 106, 93, 93, 97, 107, 1, 13, 41, 26, 10, 4, - 16, 9, 4, 1, 14, 20, 44, 29, 22, 13, 35, 18, - 21, 6, 36, 8, 37, 24, 19, 12, 26, 11, 5, 4, 4, - 68, 54, 31, 11, 3, 20, 5, 70, 64, 17, 42, 36, - 22, 10, 33, 14, 12, 5, 3, 62, 67, 4, 11, 9, 1, - 8, 13, 16, 15, 21, 27, 39, 67, 2, 72, 71, 62, - 78, 102, 72, 4, 5, 71, 71, 70, 74, 1, 77, 97, - 69, 68, 23, 70, 77, 69, 68, 64, 73, 72, 70, - 91, 84, 73, 75, 70, 26, 102, 77, 26, 84, 69, - 69, 70, 6, 67, 72, 4, 11, 71, 71, 109, 31, 29, - 30, 12, 69, 70, 71, 82, 72, 83, 88, 82, 100, - 96, 97, 108, 104, 116, 126, 100, 92, 90, 92, - 105, 97, 91, 93, 94, 79, 80, 85, 82, 87, 106, - 92, 89, 113, 99, 112, 111, 126, 124, 119, 118, - 79, 77, 120, 87, 88, 94, 112, 100, 101, 103, - 92, 97, 86, 80, 109, 115, 126, 89, 101, 106, - 69, 11, 16, 18, 37, 25, 30, 7, 34, 29, 39, 32, - 42, 36, 25, 41, 70, 79, 87, 95, 95, 122, 121, - 117, 17, 45, 41, 44, 34, 37, 22, 21, 12, 11, - 69, 11, 16, 18, 37, 25, 30, 7, 34, 29, 39, 32, - 42, 36, 25, 41, 70, 79, 87, 95, 95, 122, 121, - 117 }, - - { - - 23, - 4, 82, 23, 4, 82, 13, 23, 27, 12, 70, 95, 68, - 25, 40, 10, 39, 87, 74, 27, 70, 73, 37, 95, - 95, 65, 79, 126, 126, 126, 24, 7, 68, 74, 27, - 70, 76, 14, 36, 66, 5, 2, 5, 109, 113, 95, - 112, 65, 71, 70, 76, 91, 81, 98, 0, 68, 69, - 64, 33, 1, 22, 0, 0, 0, 5, 97, 97, 11, 76, 70, - 10, 0, 72, 35, 19, 7, 48, 46, 7, 19, 22, 26, - 10, 9, 38, 110, 89, 89, 91, 25, 72, 19, 38, - 65, 73, 3, 19, 65, 73, 72, 81, 24, 76, 14, 1, - 75, 8, 68, 0, 7, 13, 18, 19, 7, 79, 68, 3, 65, - 0, 71, 30, 66, 1, 32, 27, 38, 31, 27, 98, 10, - 11, 76, 67, 76, 69, 33, 2, 5, 38, 57, 62, 62, - 49, 99, 109, 11, 42, 42, 126, 73, 14, 99, 25, - 70, 4, 37, 33, 54, 49, 47, 110, 3, 83, 103, - 103, 66, 13, 21, 10, 4, 10, 10, 2, 15, 8, 78, - 71, 5, 0, 0, 76, 66, 74, 80, 67, 67, 0, 72, - 73, 110, 75, 78, 69, 88, 85, 78, 65, 74, 76, - 74, 79, 99, 83, 69, 110, 126, 99, 108, 102, - 126, 89, 83, 118, 68, 77, 77, 85, 89, 102, 97, - 90, 108, 93, 94, 98, 109, 2, 14, 42, 26, 10, - 4, 17, 10, 5, 2, 16, 21, 45, 29, 23, 14, 36, - 19, 23, 7, 38, 9, 37, 24, 19, 13, 27, 12, 5, - 4, 5, 68, 55, 32, 11, 3, 21, 5, 70, 0, 18, 42, - 37, 22, 10, 34, 15, 13, 5, 4, 62, 66, 5, 12, - 11, 2, 10, 14, 18, 16, 22, 29, 41, 66, 3, 71, - 70, 62, 78, 103, 72, 5, 5, 71, 71, 70, 75, 2, - 77, 98, 69, 68, 24, 70, 77, 69, 68, 64, 74, - 72, 70, 92, 85, 73, 75, 70, 27, 103, 77, 26, - 85, 69, 69, 70, 6, 67, 73, 4, 12, 71, 71, 110, - 30, 28, 29, 10, 71, 72, 74, 85, 75, 86, 92, - 85, 104, 99, 99, 112, 108, 120, 126, 103, 94, - 92, 94, 108, 99, 93, 94, 95, 79, 83, 87, 84, - 89, 108, 94, 91, 115, 101, 114, 113, 126, 126, - 121, 119, 80, 78, 123, 89, 90, 96, 114, 101, - 102, 104, 93, 98, 86, 79, 110, 116, 126, 90, - 102, 107, 69, 11, 16, 19, 38, 25, 31, 7, 35, - 30, 40, 32, 43, 36, 26, 41, 72, 81, 89, 97, - 97, 124, 123, 119, 17, 46, 41, 45, 35, 37, 22, - 21, 12, 12, 69, 11, 16, 19, 38, 25, 31, 7, 35, - 30, 40, 32, 43, 36, 26, 41, 72, 81, 89, 97, - 97, 124, 123, 119 }, - - { - - 22, - 4, 82, 22, 4, 82, 15, 24, 27, 12, 70, 97, 70, - 24, 41, 10, 40, 89, 73, 29, 71, 73, 38, 96, - 96, 66, 81, 126, 126, 126, 26, 8, 68, 73, 29, - 71, 76, 15, 36, 66, 5, 3, 7, 110, 114, 95, - 112, 65, 70, 69, 77, 91, 81, 98, 0, 67, 69, 0, - 33, 1, 22, 0, 0, 0, 6, 97, 97, 11, 77, 70, 10, - 1, 70, 38, 20, 8, 50, 48, 8, 20, 24, 27, 11, - 10, 41, 110, 90, 89, 92, 25, 72, 20, 41, 64, - 73, 3, 21, 65, 73, 72, 80, 24, 76, 15, 2, 74, - 9, 67, 0, 8, 14, 19, 20, 7, 80, 68, 4, 65, 0, - 71, 31, 66, 1, 32, 28, 38, 31, 27, 98, 11, 11, - 77, 67, 75, 69, 34, 3, 6, 40, 59, 62, 62, 51, - 100, 110, 12, 43, 42, 126, 73, 14, 99, 26, 70, - 4, 39, 33, 54, 49, 49, 111, 4, 84, 105, 106, - 65, 13, 21, 10, 4, 10, 10, 2, 15, 8, 79, 72, - 5, 0, 0, 76, 66, 74, 81, 67, 67, 0, 73, 74, - 111, 76, 78, 69, 89, 85, 80, 67, 75, 77, 75, - 81, 102, 85, 70, 112, 126, 100, 110, 104, 126, - 90, 84, 119, 69, 78, 78, 87, 91, 104, 99, 91, - 109, 93, 95, 99, 111, 4, 16, 43, 27, 10, 4, - 18, 11, 6, 2, 18, 23, 46, 30, 23, 15, 38, 20, - 24, 8, 41, 10, 38, 25, 20, 13, 28, 13, 6, 5, - 6, 67, 56, 33, 11, 3, 22, 6, 69, 1, 19, 42, - 38, 22, 10, 35, 16, 14, 6, 5, 62, 65, 7, 14, - 12, 3, 11, 16, 20, 18, 24, 31, 44, 65, 4, 70, - 69, 62, 77, 104, 71, 6, 6, 71, 71, 70, 75, 2, - 78, 99, 69, 68, 25, 70, 77, 69, 68, 0, 74, 73, - 70, 93, 86, 74, 75, 70, 28, 103, 78, 27, 85, - 70, 69, 70, 6, 68, 73, 4, 12, 71, 71, 112, 29, - 27, 28, 9, 74, 75, 77, 88, 77, 89, 95, 88, - 107, 101, 101, 116, 111, 124, 126, 106, 96, - 93, 96, 110, 101, 94, 95, 96, 79, 85, 90, 87, - 91, 110, 96, 92, 117, 103, 116, 115, 126, 126, - 122, 121, 81, 79, 125, 90, 91, 97, 116, 102, - 103, 105, 94, 99, 86, 78, 112, 117, 126, 92, - 103, 108, 69, 12, 17, 20, 39, 26, 31, 8, 36, - 31, 41, 33, 44, 37, 26, 40, 74, 83, 91, 99, - 99, 126, 125, 120, 18, 46, 42, 45, 36, 38, 23, - 22, 12, 13, 69, 12, 17, 20, 39, 26, 31, 8, 36, - 31, 41, 33, 44, 37, 26, 40, 74, 83, 91, 99, - 99, 126, 125, 120 }, - - { - - 21, - 4, 82, 21, 4, 82, 17, 26, 28, 12, 71, 99, 71, - 23, 41, 10, 42, 90, 73, 30, 71, 74, 39, 97, - 97, 67, 83, 126, 126, 126, 28, 10, 68, 73, 30, - 71, 75, 16, 37, 66, 6, 4, 8, 111, 115, 95, - 113, 65, 70, 68, 77, 92, 81, 98, 0, 67, 69, 1, - 34, 1, 22, 0, 0, 0, 6, 97, 97, 12, 78, 70, 9, - 1, 69, 40, 21, 9, 51, 49, 9, 21, 26, 28, 12, - 11, 43, 111, 90, 89, 92, 26, 72, 21, 43, 64, - 72, 4, 23, 65, 73, 72, 80, 25, 76, 15, 3, 74, - 10, 67, 0, 8, 14, 20, 20, 7, 80, 68, 4, 65, 0, - 71, 31, 66, 1, 33, 28, 39, 31, 28, 99, 11, 12, - 77, 67, 75, 69, 35, 3, 6, 41, 60, 62, 62, 53, - 100, 111, 12, 43, 42, 126, 73, 15, 100, 26, - 70, 4, 40, 33, 54, 49, 50, 112, 6, 85, 108, - 109, 0, 13, 21, 9, 3, 9, 9, 1, 15, 7, 80, 73, - 5, 0, 0, 77, 67, 75, 82, 68, 67, 0, 74, 74, - 112, 76, 79, 69, 90, 86, 82, 69, 77, 79, 77, - 83, 105, 88, 71, 114, 126, 102, 112, 106, 126, - 91, 85, 121, 70, 79, 79, 88, 92, 106, 101, 93, - 111, 93, 96, 100, 112, 5, 17, 45, 27, 10, 4, - 19, 12, 7, 3, 20, 24, 47, 31, 24, 15, 39, 21, - 26, 9, 43, 10, 38, 25, 20, 14, 29, 13, 6, 6, - 7, 67, 58, 34, 11, 3, 23, 6, 69, 2, 20, 43, - 39, 23, 10, 36, 16, 15, 6, 5, 62, 0, 8, 15, - 14, 4, 13, 17, 21, 19, 26, 33, 46, 65, 5, 70, - 68, 62, 77, 105, 71, 7, 7, 71, 71, 70, 75, 3, - 78, 100, 69, 68, 25, 70, 77, 69, 68, 0, 75, - 73, 70, 94, 87, 74, 75, 70, 29, 104, 78, 28, - 86, 70, 69, 70, 7, 68, 74, 5, 13, 71, 71, 113, - 28, 26, 27, 7, 76, 77, 79, 91, 80, 92, 98, 91, - 110, 104, 103, 120, 115, 126, 126, 109, 98, - 95, 98, 113, 103, 95, 96, 97, 79, 87, 92, 89, - 93, 112, 98, 94, 119, 105, 118, 117, 126, 126, - 124, 122, 82, 80, 126, 92, 93, 99, 118, 104, - 105, 106, 95, 100, 86, 77, 113, 119, 126, 93, - 104, 109, 69, 12, 17, 20, 40, 27, 32, 8, 37, - 32, 42, 33, 45, 37, 27, 40, 76, 85, 93, 101, - 101, 126, 126, 121, 18, 47, 42, 46, 36, 39, - 23, 22, 13, 13, 69, 12, 17, 20, 40, 27, 32, 8, - 37, 32, 42, 33, 45, 37, 27, 40, 76, 85, 93, - 101, 101, 126, 126, 121 }, - - { - - 20, - 4, 82, 20, 4, 82, 19, 27, 28, 12, 71, 101, 73, - 22, 42, 10, 44, 92, 73, 32, 71, 74, 40, 98, - 98, 68, 85, 126, 126, 126, 30, 11, 68, 73, 32, - 71, 75, 17, 37, 66, 7, 5, 9, 112, 116, 95, - 113, 65, 70, 67, 77, 92, 81, 98, 0, 67, 69, 2, - 34, 1, 22, 0, 0, 0, 7, 97, 97, 12, 79, 70, 9, - 2, 68, 42, 22, 10, 53, 51, 10, 22, 28, 29, 13, - 12, 45, 112, 90, 89, 92, 26, 72, 22, 45, 64, - 71, 5, 25, 65, 73, 72, 80, 25, 76, 16, 4, 74, - 11, 67, 0, 8, 15, 21, 21, 7, 80, 68, 4, 65, 0, - 71, 31, 66, 1, 33, 28, 39, 31, 28, 99, 12, 13, - 78, 67, 75, 69, 36, 3, 7, 42, 61, 62, 62, 55, - 101, 112, 13, 43, 42, 126, 73, 15, 100, 27, - 70, 4, 41, 33, 54, 49, 51, 113, 7, 86, 111, - 112, 1, 13, 21, 9, 2, 9, 9, 1, 15, 7, 81, 74, - 5, 0, 0, 77, 67, 76, 83, 68, 67, 0, 75, 75, - 113, 77, 80, 69, 91, 86, 84, 71, 79, 80, 79, - 85, 108, 90, 72, 116, 126, 103, 114, 108, 126, - 92, 86, 123, 71, 80, 80, 89, 94, 108, 103, 95, - 112, 93, 97, 101, 114, 7, 19, 46, 28, 10, 4, - 20, 13, 8, 4, 22, 25, 48, 32, 25, 16, 40, 22, - 27, 10, 45, 11, 39, 26, 21, 14, 30, 14, 7, 7, - 8, 67, 59, 35, 11, 3, 24, 7, 69, 3, 21, 43, - 40, 23, 10, 37, 17, 16, 7, 6, 62, 1, 10, 17, - 16, 5, 14, 19, 23, 21, 28, 35, 48, 64, 6, 69, - 67, 62, 77, 106, 71, 8, 8, 71, 71, 70, 75, 3, - 78, 101, 69, 68, 26, 70, 77, 69, 68, 0, 75, - 73, 70, 95, 88, 74, 75, 70, 30, 105, 78, 29, - 87, 70, 69, 70, 7, 68, 74, 5, 14, 71, 71, 115, - 27, 25, 26, 5, 78, 80, 82, 94, 82, 95, 101, - 94, 113, 107, 105, 124, 118, 126, 126, 112, - 100, 97, 100, 115, 105, 96, 97, 98, 79, 89, - 94, 91, 95, 114, 100, 95, 121, 107, 120, 119, - 126, 126, 126, 123, 83, 81, 126, 93, 95, 100, - 120, 105, 106, 107, 96, 101, 86, 76, 114, 120, - 126, 94, 105, 110, 69, 13, 18, 21, 41, 28, 33, - 8, 38, 33, 43, 34, 46, 38, 28, 39, 78, 87, 95, - 103, 103, 126, 126, 122, 19, 47, 43, 47, 37, - 40, 24, 23, 13, 14, 69, 13, 18, 21, 41, 28, - 33, 8, 38, 33, 43, 34, 46, 38, 28, 39, 78, 87, - 95, 103, 103, 126, 126, 122 }, - - { - - 18, - 3, 83, 18, 3, 83, 20, 28, 28, 12, 72, 103, 75, - 21, 42, 10, 45, 94, 73, 33, 72, 75, 41, 99, - 100, 70, 87, 126, 126, 126, 32, 12, 68, 73, - 33, 72, 75, 17, 37, 67, 7, 5, 10, 114, 118, - 96, 114, 66, 70, 67, 78, 93, 81, 98, 64, 67, - 69, 2, 34, 0, 22, 0, 0, 0, 7, 98, 97, 12, 80, - 71, 8, 2, 67, 44, 23, 10, 54, 52, 10, 23, 29, - 29, 14, 12, 47, 113, 91, 90, 93, 26, 73, 22, - 47, 64, 71, 5, 26, 65, 73, 72, 80, 25, 77, 16, - 4, 74, 11, 67, 0, 8, 15, 22, 21, 7, 81, 69, 4, - 65, 64, 71, 31, 66, 1, 33, 28, 39, 31, 28, - 100, 12, 13, 79, 67, 75, 70, 36, 3, 7, 43, 62, - 62, 62, 56, 102, 114, 13, 43, 42, 126, 74, 15, - 101, 27, 71, 4, 42, 33, 53, 49, 52, 114, 8, - 88, 114, 116, 2, 12, 21, 8, 1, 8, 8, 0, 14, 6, - 82, 75, 4, 64, 64, 78, 68, 77, 84, 69, 68, 64, - 76, 76, 115, 78, 81, 69, 93, 87, 87, 74, 81, - 82, 81, 88, 112, 93, 74, 118, 126, 105, 117, - 110, 126, 94, 88, 125, 73, 81, 81, 91, 96, - 110, 105, 97, 114, 93, 98, 102, 116, 8, 20, - 47, 28, 10, 4, 20, 13, 8, 4, 23, 26, 48, 32, - 25, 16, 41, 23, 28, 10, 47, 11, 39, 26, 21, - 14, 30, 14, 7, 7, 9, 67, 60, 36, 11, 2, 24, 7, - 69, 3, 21, 43, 40, 23, 10, 38, 17, 16, 7, 6, - 62, 2, 11, 18, 17, 6, 15, 20, 24, 22, 29, 36, - 50, 64, 6, 69, 67, 62, 77, 108, 71, 8, 8, 71, - 71, 70, 76, 3, 79, 102, 70, 68, 26, 71, 77, - 70, 68, 0, 76, 74, 71, 96, 89, 75, 76, 70, 31, - 106, 79, 29, 88, 71, 69, 71, 7, 69, 75, 5, 14, - 71, 71, 117, 25, 24, 24, 3, 81, 83, 85, 97, - 85, 98, 105, 97, 117, 110, 107, 126, 122, 126, - 126, 115, 103, 99, 103, 118, 107, 98, 99, 99, - 79, 92, 97, 94, 97, 117, 102, 97, 124, 109, - 123, 121, 126, 126, 126, 125, 85, 83, 126, 95, - 97, 102, 122, 107, 108, 108, 97, 102, 87, 75, - 116, 122, 126, 96, 107, 112, 69, 13, 18, 21, - 42, 28, 33, 8, 39, 33, 44, 34, 46, 38, 28, 38, - 80, 89, 98, 106, 105, 126, 126, 124, 19, 47, - 43, 47, 37, 40, 24, 23, 13, 14, 69, 13, 18, - 21, 42, 28, 33, 8, 39, 33, 44, 34, 46, 38, 28, - 38, 80, 89, 98, 106, 105, 126, 126, 124 }, - - { - - 17, - 3, 83, 17, 3, 83, 22, 30, 29, 13, 72, 104, 76, - 21, 43, 11, 47, 95, 72, 35, 72, 75, 43, 99, - 101, 71, 88, 126, 126, 126, 34, 14, 67, 72, - 35, 72, 74, 18, 38, 67, 8, 6, 12, 115, 119, - 96, 114, 66, 69, 66, 78, 93, 80, 97, 64, 66, - 68, 3, 35, 0, 22, 0, 0, 0, 8, 98, 97, 13, 80, - 71, 8, 3, 65, 47, 25, 11, 56, 54, 11, 25, 31, - 30, 16, 13, 50, 113, 91, 90, 93, 27, 73, 23, - 50, 0, 70, 6, 28, 65, 72, 72, 79, 26, 77, 17, - 5, 73, 12, 66, 1, 9, 16, 23, 22, 8, 81, 69, 5, - 64, 64, 70, 32, 65, 1, 34, 29, 40, 32, 29, - 100, 13, 14, 79, 67, 74, 70, 37, 4, 8, 45, 62, - 62, 62, 58, 102, 115, 14, 44, 43, 126, 74, 16, - 101, 28, 71, 5, 44, 33, 53, 50, 54, 115, 10, - 89, 116, 119, 4, 12, 21, 8, 1, 8, 8, 0, 14, 6, - 82, 75, 4, 64, 64, 78, 68, 77, 84, 69, 68, 64, - 76, 76, 116, 78, 81, 69, 94, 87, 89, 76, 82, - 83, 82, 90, 115, 95, 75, 119, 126, 106, 119, - 111, 126, 95, 89, 126, 74, 81, 81, 92, 97, - 111, 106, 98, 115, 93, 98, 102, 117, 10, 22, - 49, 29, 10, 4, 21, 14, 9, 5, 25, 28, 49, 33, - 26, 17, 43, 24, 30, 11, 50, 12, 40, 27, 22, - 15, 31, 15, 8, 8, 11, 66, 62, 37, 12, 2, 25, - 8, 68, 4, 22, 44, 41, 24, 11, 39, 18, 17, 8, - 7, 62, 4, 13, 20, 19, 8, 17, 22, 26, 24, 31, - 38, 53, 0, 7, 68, 66, 62, 76, 109, 70, 9, 9, - 70, 71, 69, 76, 4, 79, 102, 70, 68, 27, 71, - 77, 70, 68, 1, 76, 74, 71, 96, 89, 75, 76, 69, - 33, 106, 79, 30, 88, 71, 69, 71, 8, 69, 75, 6, - 15, 70, 70, 118, 24, 23, 23, 2, 83, 85, 87, - 100, 87, 100, 108, 99, 120, 112, 109, 126, - 125, 126, 126, 117, 105, 100, 105, 120, 108, - 99, 100, 99, 79, 94, 99, 96, 99, 119, 103, 98, - 126, 110, 125, 122, 126, 126, 126, 126, 86, - 84, 126, 96, 98, 103, 123, 108, 109, 109, 97, - 102, 87, 74, 117, 123, 126, 97, 108, 113, 68, - 14, 19, 22, 44, 29, 34, 9, 41, 34, 45, 35, 47, - 39, 29, 38, 81, 90, 100, 108, 106, 126, 126, - 125, 20, 48, 44, 48, 38, 41, 25, 24, 14, 15, - 68, 14, 19, 22, 44, 29, 34, 9, 41, 34, 45, 35, - 47, 39, 29, 38, 81, 90, 100, 108, 106, 126, - 126, 125 }, - - { - - 16, - 3, 83, 16, 3, 83, 24, 31, 29, 13, 72, 106, 78, - 20, 44, 11, 49, 97, 72, 36, 72, 75, 44, 100, - 102, 72, 90, 126, 126, 126, 36, 15, 67, 72, - 36, 72, 74, 19, 38, 67, 9, 7, 13, 116, 120, - 96, 114, 66, 69, 65, 78, 93, 80, 97, 64, 66, - 68, 4, 35, 0, 22, 0, 0, 0, 9, 98, 97, 13, 81, - 71, 8, 4, 64, 49, 26, 12, 58, 56, 12, 26, 33, - 31, 17, 14, 52, 114, 91, 90, 93, 27, 73, 24, - 52, 0, 69, 7, 30, 65, 72, 72, 79, 26, 77, 17, - 6, 73, 13, 66, 1, 9, 16, 24, 23, 8, 81, 69, 5, - 64, 64, 70, 32, 65, 1, 34, 29, 40, 32, 29, - 101, 14, 15, 80, 67, 74, 70, 38, 4, 8, 46, 62, - 62, 62, 60, 103, 116, 14, 44, 43, 126, 74, 16, - 102, 29, 71, 5, 45, 33, 53, 50, 55, 116, 11, - 90, 119, 122, 5, 12, 21, 8, 0, 7, 8, 0, 14, 5, - 83, 76, 4, 64, 64, 78, 69, 78, 85, 69, 68, 64, - 77, 77, 117, 79, 82, 69, 95, 88, 91, 78, 84, - 85, 84, 92, 118, 97, 76, 121, 126, 108, 121, - 113, 126, 96, 90, 126, 75, 82, 82, 93, 99, - 113, 108, 100, 117, 93, 99, 103, 119, 11, 23, - 50, 30, 10, 4, 22, 15, 10, 6, 27, 29, 50, 34, - 27, 18, 44, 25, 31, 12, 52, 13, 40, 27, 22, - 15, 32, 16, 9, 9, 12, 66, 62, 38, 12, 2, 26, - 9, 68, 5, 23, 44, 42, 24, 11, 40, 19, 18, 9, - 8, 62, 5, 15, 22, 21, 9, 18, 24, 28, 25, 33, - 40, 55, 1, 8, 67, 65, 62, 76, 110, 70, 10, 10, - 70, 71, 69, 76, 4, 79, 103, 70, 68, 28, 71, - 77, 70, 68, 1, 76, 74, 71, 97, 90, 75, 76, 69, - 34, 107, 79, 31, 89, 71, 69, 71, 8, 69, 75, 6, - 16, 70, 70, 120, 23, 22, 22, 0, 85, 88, 90, - 103, 89, 103, 111, 102, 123, 115, 111, 126, - 126, 126, 126, 120, 107, 102, 107, 122, 110, - 100, 101, 100, 79, 96, 101, 98, 101, 121, 105, - 100, 126, 112, 126, 124, 126, 126, 126, 126, - 87, 85, 126, 98, 100, 105, 125, 109, 110, 110, - 98, 103, 87, 73, 118, 124, 126, 98, 109, 114, - 68, 14, 20, 23, 45, 30, 35, 9, 42, 35, 46, 35, - 48, 40, 30, 37, 83, 92, 102, 110, 108, 126, - 126, 126, 21, 48, 44, 49, 39, 42, 25, 25, 14, - 16, 68, 14, 20, 23, 45, 30, 35, 9, 42, 35, 46, - 35, 48, 40, 30, 37, 83, 92, 102, 110, 108, - 126, 126, 126 }, - - { - - 15, - 3, 83, 15, 3, 83, 26, 33, 30, 13, 73, 108, 79, - 19, 44, 11, 51, 98, 72, 38, 72, 76, 45, 101, - 103, 73, 92, 126, 126, 126, 38, 17, 67, 72, - 38, 72, 73, 20, 39, 67, 10, 8, 14, 117, 121, - 96, 115, 66, 69, 64, 78, 94, 80, 97, 64, 66, - 68, 5, 36, 0, 22, 0, 0, 0, 9, 98, 97, 14, 82, - 71, 7, 4, 0, 51, 27, 13, 59, 57, 13, 27, 35, - 32, 18, 15, 54, 115, 91, 90, 93, 28, 73, 25, - 54, 0, 68, 8, 32, 65, 72, 72, 79, 27, 77, 18, - 7, 73, 14, 66, 1, 9, 17, 25, 23, 8, 81, 69, 5, - 64, 64, 70, 32, 65, 1, 35, 29, 41, 32, 30, - 101, 14, 16, 80, 67, 74, 70, 39, 4, 9, 47, 62, - 62, 62, 62, 103, 117, 15, 44, 43, 126, 74, 17, - 102, 29, 71, 5, 46, 33, 53, 50, 56, 117, 13, - 91, 122, 125, 7, 12, 21, 7, 64, 7, 7, 64, 14, - 5, 84, 77, 4, 64, 64, 79, 69, 79, 86, 70, 68, - 64, 78, 77, 118, 79, 83, 69, 96, 88, 93, 80, - 86, 86, 86, 94, 121, 100, 77, 123, 126, 109, - 123, 115, 126, 97, 91, 126, 76, 83, 83, 94, - 100, 115, 110, 102, 118, 93, 100, 104, 120, - 13, 25, 52, 30, 10, 4, 23, 16, 11, 7, 29, 30, - 51, 35, 28, 18, 45, 26, 33, 13, 54, 13, 41, - 28, 23, 16, 33, 16, 9, 10, 13, 66, 62, 39, 12, - 2, 27, 9, 68, 6, 24, 45, 43, 25, 11, 41, 19, - 19, 9, 8, 62, 7, 16, 23, 23, 10, 20, 25, 29, - 27, 35, 42, 57, 1, 9, 67, 64, 62, 76, 111, 70, - 11, 11, 70, 71, 69, 76, 5, 79, 104, 70, 68, - 28, 71, 77, 70, 68, 1, 77, 74, 71, 98, 91, 75, - 76, 69, 35, 108, 79, 32, 90, 71, 69, 71, 9, - 69, 76, 7, 17, 70, 70, 121, 22, 21, 21, 65, - 87, 90, 92, 106, 92, 106, 114, 105, 126, 118, - 113, 126, 126, 126, 126, 123, 109, 104, 109, - 125, 112, 101, 102, 101, 79, 98, 103, 100, - 103, 123, 107, 101, 126, 114, 126, 126, 126, - 126, 126, 126, 88, 86, 126, 99, 102, 106, 126, - 111, 112, 111, 99, 104, 87, 72, 119, 126, 126, - 99, 110, 115, 68, 15, 20, 23, 46, 31, 36, 9, - 43, 36, 47, 36, 49, 40, 31, 37, 85, 94, 104, - 112, 110, 126, 126, 126, 21, 49, 45, 50, 39, - 43, 26, 25, 15, 16, 68, 15, 20, 23, 46, 31, - 36, 9, 43, 36, 47, 36, 49, 40, 31, 37, 85, 94, - 104, 112, 110, 126, 126, 126 }, - - }, - - { - - { - - 62, - 9, 74, 62, 9, 74, 126, 104, 10, 9, 12, 30, 61, - 62, 54, 14, 118, 6, 78, 65, 1, 14, 73, 13, 64, - 20, 62, 67, 90, 104, 126, 104, 67, 78, 65, 1, - 86, 95, 2, 18, 69, 81, 96, 8, 67, 86, 88, 5, 76, - 94, 9, 69, 81, 88, 67, 74, 74, 80, 72, 5, 22, 0, - 0, 0, 83, 86, 97, 72, 22, 1, 52, 8, 69, 126, - 102, 82, 74, 107, 126, 126, 126, 95, 126, 114, - 126, 123, 115, 122, 115, 0, 68, 84, 104, 70, 93, - 90, 126, 74, 97, 91, 126, 7, 82, 76, 125, 93, - 87, 77, 71, 0, 68, 84, 1, 65, 2, 7, 66, 64, 2, - 78, 13, 11, 28, 19, 25, 18, 17, 19, 46, 12, 13, - 44, 30, 1, 108, 100, 101, 91, 94, 88, 84, 86, - 83, 87, 94, 70, 72, 74, 4, 102, 100, 95, 75, 72, - 75, 71, 17, 69, 1, 65, 26, 72, 6, 9, 1, 72, 62, - 54, 38, 45, 54, 44, 26, 45, 34, 30, 33, 18, 5, - 1, 2, 25, 18, 24, 21, 19, 18, 22, 14, 29, 21, 8, - 12, 17, 89, 62, 62, 62, 62, 62, 62, 62, 62, 62, - 62, 62, 62, 62, 62, 46, 62, 60, 41, 62, 62, 62, - 62, 60, 58, 62, 47, 41, 15, 26, 3, 68, 97, 71, - 21, 13, 9, 1, 5, 0, 72, 74, 91, 67, 36, 24, 19, - 17, 64, 68, 78, 77, 86, 92, 8, 3, 1, 65, 73, 76, - 80, 88, 110, 97, 84, 79, 73, 74, 86, 96, 97, - 117, 78, 30, 15, 10, 1, 71, 79, 86, 90, 97, 62, - 93, 84, 79, 66, 71, 1, 3, 4, 75, 1, 5, 66, 79, - 71, 68, 19, 1, 27, 23, 36, 34, 19, 27, 31, 21, - 15, 1, 17, 64, 104, 97, 96, 88, 85, 85, 85, 88, - 66, 77, 76, 76, 5, 76, 83, 99, 95, 95, 76, 74, - 70, 75, 68, 65, 73, 1, 1, 68, 75, 8, 64, 70, 57, - 44, 47, 49, 50, 52, 48, 47, 40, 40, 43, 37, 19, - 23, 16, 46, 42, 41, 36, 34, 28, 13, 6, 0, 77, - 82, 94, 69, 109, 62, 62, 62, 62, 62, 62, 62, 62, - 62, 62, 62, 61, 50, 28, 5, 62, 62, 33, 62, 62, - 62, 60, 62, 58, 52, 58, 51, 52, 34, 37, 24, 66, - 42, 32, 13, 120, 112, 114, 85, 92, 89, 71, 81, - 80, 68, 70, 7, 68, 13, 74, 62, 62, 62, 62, 60, - 57, 29, 9, 82, 75, 40, 29, 20, 9, 8, 2, 64, 68, - 92, 106, 97, 90, 90, 88, 73, 79, 86, 73, 70, 69, - 66, 64, 5, 4, 62, 62, 62, 62, 60, 54, 43, 27, 67 }, - - { - - 62, - 9, 74, 62, 9, 74, 125, 102, 11, 10, 12, 29, - 60, 62, 54, 14, 115, 6, 77, 64, 1, 14, 72, 12, - 65, 20, 62, 68, 91, 104, 124, 102, 67, 77, 64, - 1, 85, 93, 3, 18, 68, 80, 95, 8, 67, 85, 88, - 5, 75, 93, 9, 69, 80, 88, 66, 73, 73, 79, 71, - 5, 22, 0, 0, 0, 82, 86, 97, 71, 22, 1, 52, 8, - 69, 125, 101, 82, 73, 105, 125, 125, 125, 93, - 125, 112, 125, 121, 114, 121, 114, 1, 67, 83, - 103, 69, 92, 89, 125, 73, 96, 90, 125, 8, 81, - 75, 123, 92, 86, 76, 70, 1, 67, 83, 2, 64, 2, - 7, 65, 64, 2, 77, 13, 11, 28, 19, 25, 18, 17, - 19, 45, 12, 13, 43, 29, 1, 107, 99, 100, 90, - 93, 87, 83, 85, 82, 86, 92, 70, 72, 73, 3, - 101, 99, 95, 74, 72, 74, 70, 17, 68, 1, 65, - 25, 71, 6, 8, 1, 72, 62, 54, 38, 45, 54, 44, - 26, 45, 34, 29, 33, 18, 5, 1, 2, 25, 18, 24, - 21, 19, 17, 22, 14, 28, 20, 8, 11, 16, 89, 62, - 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, - 62, 60, 44, 62, 59, 40, 62, 62, 62, 62, 58, - 56, 61, 45, 39, 15, 25, 2, 68, 97, 70, 22, 14, - 10, 2, 5, 0, 71, 73, 90, 66, 37, 25, 20, 17, - 0, 67, 77, 76, 85, 91, 9, 4, 2, 64, 72, 75, - 79, 87, 108, 96, 82, 78, 72, 73, 85, 95, 96, - 115, 77, 31, 16, 11, 2, 70, 78, 85, 89, 96, - 62, 92, 83, 78, 66, 70, 1, 4, 5, 74, 2, 6, 65, - 78, 71, 68, 19, 2, 27, 23, 35, 34, 19, 26, 30, - 21, 15, 1, 16, 64, 103, 96, 95, 87, 84, 84, - 84, 87, 66, 76, 75, 75, 5, 75, 82, 98, 94, 95, - 76, 73, 70, 74, 68, 65, 72, 1, 1, 67, 74, 8, - 64, 70, 57, 44, 47, 49, 49, 52, 48, 47, 40, - 40, 43, 37, 19, 22, 15, 45, 41, 40, 35, 33, - 27, 13, 6, 0, 76, 81, 93, 69, 108, 62, 62, 62, - 62, 62, 62, 62, 62, 62, 62, 61, 59, 48, 27, 5, - 62, 62, 32, 62, 62, 62, 58, 62, 56, 50, 56, - 49, 50, 33, 35, 23, 67, 41, 31, 12, 118, 110, - 112, 84, 91, 88, 69, 80, 79, 68, 69, 9, 66, - 15, 73, 62, 62, 62, 62, 58, 55, 27, 7, 83, 74, - 41, 29, 20, 9, 9, 2, 64, 68, 91, 105, 96, 89, - 89, 86, 72, 78, 85, 72, 69, 68, 65, 0, 6, 4, - 62, 62, 62, 62, 59, 53, 41, 26, 67 }, - - { - - 62, - 9, 74, 62, 9, 74, 123, 101, 11, 10, 12, 28, - 59, 61, 54, 14, 113, 6, 76, 0, 1, 13, 72, 11, - 66, 19, 60, 70, 92, 105, 121, 101, 67, 76, 0, - 1, 85, 92, 3, 17, 68, 80, 94, 8, 67, 85, 88, - 5, 75, 92, 9, 69, 80, 88, 66, 73, 73, 79, 71, - 5, 22, 0, 0, 0, 81, 86, 97, 71, 21, 1, 52, 8, - 69, 124, 100, 82, 73, 104, 123, 123, 124, 92, - 123, 111, 123, 120, 113, 120, 113, 2, 67, 82, - 102, 69, 92, 88, 123, 73, 96, 90, 124, 8, 81, - 75, 122, 92, 85, 76, 70, 1, 67, 82, 2, 64, 1, - 7, 65, 64, 2, 77, 13, 11, 27, 19, 24, 18, 17, - 19, 43, 12, 13, 41, 28, 0, 106, 98, 99, 89, - 92, 86, 82, 84, 82, 85, 91, 70, 72, 73, 2, - 101, 98, 95, 74, 72, 73, 70, 16, 67, 1, 65, - 24, 70, 5, 7, 1, 73, 60, 53, 37, 44, 53, 43, - 25, 44, 34, 28, 32, 18, 5, 1, 2, 24, 17, 23, - 20, 18, 16, 21, 13, 26, 19, 7, 10, 15, 89, 62, - 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, - 62, 58, 41, 62, 57, 38, 62, 62, 62, 62, 56, - 54, 58, 43, 37, 14, 23, 1, 69, 97, 70, 22, 14, - 10, 2, 5, 0, 71, 73, 89, 66, 37, 25, 20, 17, - 1, 67, 76, 76, 84, 90, 10, 5, 2, 64, 71, 75, - 79, 86, 107, 95, 81, 77, 72, 73, 84, 94, 95, - 114, 77, 31, 16, 11, 2, 69, 77, 84, 88, 95, - 62, 92, 83, 78, 66, 70, 1, 4, 5, 74, 2, 6, 64, - 78, 71, 68, 18, 2, 26, 22, 34, 33, 19, 25, 29, - 21, 15, 0, 15, 65, 102, 95, 94, 87, 84, 84, - 83, 86, 66, 76, 75, 75, 4, 75, 82, 98, 93, 95, - 76, 73, 70, 73, 68, 65, 71, 1, 1, 67, 73, 7, - 64, 71, 56, 44, 47, 48, 48, 51, 47, 46, 39, - 39, 42, 36, 18, 21, 14, 43, 40, 38, 33, 32, - 26, 12, 5, 0, 76, 81, 93, 70, 107, 62, 62, 62, - 62, 62, 62, 62, 62, 62, 62, 59, 57, 46, 26, 4, - 62, 60, 31, 62, 62, 62, 56, 60, 54, 48, 54, - 47, 48, 31, 33, 21, 68, 39, 29, 10, 117, 109, - 111, 83, 90, 87, 67, 79, 78, 68, 68, 10, 65, - 16, 72, 62, 62, 62, 62, 55, 52, 24, 5, 84, 74, - 41, 29, 20, 9, 9, 2, 64, 68, 90, 104, 95, 88, - 88, 85, 71, 77, 84, 71, 68, 67, 65, 1, 6, 4, - 62, 62, 62, 61, 57, 51, 39, 24, 68 }, - - { - - 62, - 9, 74, 62, 9, 74, 121, 99, 12, 10, 11, 26, 57, - 60, 54, 14, 111, 6, 75, 1, 1, 12, 72, 10, 67, - 19, 58, 71, 93, 105, 118, 100, 67, 75, 1, 1, - 84, 91, 4, 17, 68, 79, 93, 7, 68, 85, 88, 5, - 75, 92, 9, 69, 80, 88, 65, 73, 73, 79, 70, 5, - 22, 0, 0, 0, 81, 86, 97, 70, 20, 1, 52, 8, 69, - 123, 99, 82, 72, 103, 121, 121, 122, 91, 121, - 110, 121, 119, 112, 119, 112, 3, 67, 81, 101, - 69, 91, 88, 121, 73, 95, 89, 123, 8, 81, 74, - 120, 91, 84, 76, 70, 1, 67, 81, 3, 0, 1, 7, - 65, 64, 2, 77, 13, 10, 27, 19, 23, 18, 17, 19, - 41, 12, 12, 39, 27, 64, 105, 97, 98, 88, 91, - 86, 81, 84, 81, 84, 90, 70, 72, 73, 1, 100, - 97, 95, 74, 72, 72, 70, 15, 66, 1, 65, 23, 69, - 5, 6, 1, 74, 59, 52, 37, 43, 52, 42, 25, 43, - 33, 27, 31, 18, 5, 1, 1, 23, 16, 22, 19, 17, - 15, 20, 13, 24, 18, 7, 9, 14, 89, 62, 62, 62, - 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 55, - 39, 62, 55, 37, 62, 61, 62, 59, 54, 51, 56, - 41, 34, 13, 21, 0, 70, 97, 70, 23, 14, 10, 2, - 5, 0, 71, 73, 89, 66, 37, 25, 20, 17, 2, 66, - 76, 75, 84, 89, 11, 5, 3, 64, 70, 74, 78, 86, - 106, 94, 80, 76, 71, 73, 83, 93, 94, 113, 76, - 31, 16, 11, 2, 68, 77, 83, 87, 94, 62, 91, 82, - 77, 66, 70, 1, 4, 5, 74, 2, 6, 64, 78, 71, 68, - 18, 3, 25, 21, 33, 32, 19, 24, 28, 21, 15, 0, - 14, 65, 101, 94, 93, 86, 83, 83, 83, 85, 66, - 76, 75, 74, 4, 75, 82, 97, 92, 95, 76, 73, 70, - 72, 68, 65, 70, 1, 1, 67, 72, 6, 64, 72, 55, - 43, 46, 47, 47, 50, 46, 45, 38, 38, 41, 35, - 17, 20, 13, 42, 39, 37, 31, 30, 25, 11, 5, 64, - 76, 81, 93, 70, 106, 62, 62, 62, 62, 62, 62, - 62, 62, 62, 62, 57, 54, 44, 24, 3, 61, 59, 29, - 62, 62, 60, 54, 58, 52, 46, 52, 45, 45, 29, - 31, 19, 69, 37, 27, 9, 116, 108, 110, 82, 89, - 86, 66, 78, 77, 68, 67, 12, 0, 18, 71, 62, 62, - 62, 62, 52, 49, 21, 3, 85, 74, 41, 29, 20, 9, - 9, 2, 64, 68, 90, 103, 94, 87, 87, 84, 71, 77, - 83, 71, 68, 67, 65, 1, 6, 4, 62, 62, 62, 59, - 55, 49, 37, 22, 69 }, - - { - - 62, - 9, 74, 62, 9, 74, 120, 98, 12, 10, 11, 25, 56, - 58, 54, 14, 108, 5, 74, 1, 1, 11, 72, 9, 68, - 18, 56, 73, 94, 106, 115, 99, 67, 74, 1, 1, - 84, 90, 4, 16, 68, 79, 93, 7, 68, 84, 88, 5, - 75, 91, 8, 70, 80, 88, 65, 72, 73, 78, 70, 5, - 22, 0, 0, 0, 80, 87, 97, 70, 19, 1, 52, 8, 69, - 122, 98, 82, 72, 101, 120, 119, 121, 90, 120, - 108, 119, 118, 112, 118, 112, 3, 67, 80, 100, - 69, 91, 87, 119, 73, 95, 89, 122, 8, 80, 74, - 119, 91, 84, 76, 69, 1, 67, 81, 3, 0, 0, 6, - 65, 64, 2, 77, 13, 10, 26, 19, 23, 18, 17, 18, - 39, 12, 12, 37, 26, 65, 104, 96, 97, 87, 91, - 85, 80, 83, 81, 83, 89, 70, 72, 72, 0, 100, - 96, 95, 74, 72, 72, 70, 14, 65, 1, 65, 21, 68, - 4, 5, 1, 75, 57, 51, 36, 42, 51, 41, 24, 42, - 33, 25, 30, 17, 5, 1, 1, 22, 16, 21, 19, 16, - 14, 19, 12, 22, 17, 6, 8, 13, 89, 62, 62, 62, - 62, 62, 62, 62, 62, 62, 62, 62, 62, 59, 53, - 36, 62, 54, 35, 62, 59, 62, 57, 51, 49, 53, - 39, 32, 12, 20, 65, 71, 97, 70, 23, 15, 10, 2, - 5, 0, 71, 73, 88, 65, 38, 25, 20, 17, 3, 66, - 75, 75, 83, 89, 12, 6, 3, 64, 70, 74, 78, 85, - 105, 94, 79, 76, 71, 73, 82, 92, 94, 112, 76, - 32, 16, 11, 2, 67, 76, 83, 86, 93, 62, 91, 82, - 77, 66, 70, 1, 4, 5, 73, 2, 6, 0, 78, 71, 68, - 17, 3, 24, 20, 32, 31, 19, 22, 27, 20, 15, 64, - 13, 66, 101, 94, 92, 86, 83, 83, 82, 84, 67, - 76, 75, 74, 3, 75, 82, 97, 91, 95, 76, 72, 70, - 72, 68, 65, 69, 1, 0, 67, 71, 6, 65, 73, 54, - 43, 46, 46, 46, 49, 45, 44, 37, 37, 40, 34, - 16, 19, 12, 40, 37, 35, 29, 29, 24, 10, 4, 64, - 76, 81, 93, 71, 106, 62, 62, 62, 62, 62, 62, - 62, 62, 62, 60, 55, 52, 42, 23, 2, 59, 57, 28, - 62, 62, 58, 52, 55, 50, 44, 50, 43, 43, 27, - 29, 17, 70, 35, 25, 7, 115, 107, 109, 82, 88, - 85, 64, 77, 76, 68, 66, 13, 1, 19, 71, 62, 62, - 62, 62, 49, 46, 18, 1, 86, 74, 41, 29, 20, 9, - 9, 2, 64, 68, 89, 102, 93, 86, 87, 83, 70, 76, - 82, 70, 67, 66, 64, 2, 7, 4, 62, 62, 62, 57, - 53, 47, 35, 20, 70 }, - - { - - 62, - 9, 74, 62, 9, 74, 118, 96, 12, 10, 10, 23, 54, - 57, 54, 14, 106, 5, 73, 2, 1, 11, 71, 8, 69, - 18, 54, 75, 95, 106, 112, 97, 67, 73, 2, 1, - 84, 89, 4, 16, 68, 79, 92, 7, 69, 84, 88, 5, - 75, 90, 8, 70, 80, 88, 64, 72, 72, 78, 69, 5, - 22, 0, 0, 0, 80, 87, 97, 69, 18, 1, 52, 8, 69, - 121, 97, 82, 71, 100, 118, 117, 119, 89, 118, - 107, 117, 117, 111, 117, 111, 4, 67, 79, 99, - 69, 90, 86, 117, 73, 95, 88, 120, 9, 80, 73, - 118, 90, 83, 76, 69, 2, 66, 80, 4, 1, 0, 6, - 65, 64, 2, 77, 13, 9, 25, 19, 22, 18, 17, 18, - 37, 12, 11, 36, 25, 66, 103, 95, 96, 86, 90, - 84, 79, 82, 80, 82, 88, 70, 72, 72, 64, 99, - 95, 95, 73, 72, 71, 70, 13, 64, 1, 65, 20, 67, - 4, 4, 1, 75, 56, 50, 36, 41, 50, 40, 23, 42, - 33, 24, 29, 17, 5, 1, 0, 22, 15, 20, 18, 15, - 13, 19, 11, 20, 16, 5, 7, 12, 89, 62, 62, 62, - 62, 62, 62, 62, 62, 62, 62, 62, 62, 57, 51, - 34, 60, 52, 33, 62, 57, 60, 55, 49, 47, 50, - 37, 29, 11, 18, 66, 71, 97, 70, 23, 15, 10, 2, - 5, 0, 71, 73, 88, 65, 38, 25, 20, 17, 4, 65, - 74, 75, 82, 88, 13, 7, 3, 0, 69, 73, 77, 85, - 104, 93, 77, 75, 71, 72, 81, 91, 93, 111, 75, - 32, 17, 11, 2, 66, 75, 82, 85, 92, 62, 91, 82, - 76, 66, 70, 1, 4, 5, 73, 2, 7, 0, 78, 71, 68, - 16, 4, 23, 19, 31, 31, 19, 21, 26, 20, 15, 65, - 12, 66, 100, 93, 91, 85, 82, 82, 82, 83, 67, - 76, 75, 74, 2, 75, 82, 96, 90, 95, 76, 72, 70, - 71, 68, 65, 68, 1, 0, 67, 70, 5, 65, 73, 53, - 43, 45, 46, 45, 48, 44, 43, 37, 36, 39, 33, - 15, 18, 11, 39, 36, 34, 27, 28, 23, 9, 3, 65, - 76, 80, 93, 71, 105, 62, 62, 62, 62, 62, 62, - 62, 62, 60, 58, 53, 50, 40, 21, 1, 57, 55, 27, - 61, 62, 56, 50, 53, 48, 42, 48, 41, 40, 25, - 27, 15, 71, 33, 23, 6, 114, 105, 108, 81, 87, - 84, 1, 76, 75, 68, 65, 15, 3, 21, 70, 62, 62, - 62, 62, 47, 43, 16, 64, 87, 74, 41, 29, 20, 9, - 9, 2, 64, 68, 89, 101, 92, 85, 86, 82, 69, 76, - 81, 69, 66, 65, 64, 2, 7, 4, 62, 62, 62, 56, - 51, 45, 33, 18, 71 }, - - { - - 62, - 9, 75, 62, 9, 75, 116, 95, 13, 10, 10, 22, 53, - 56, 54, 14, 104, 5, 73, 3, 1, 10, 71, 7, 70, - 17, 53, 76, 96, 107, 109, 96, 67, 73, 3, 1, - 83, 88, 5, 15, 67, 78, 91, 6, 69, 84, 88, 5, - 74, 90, 8, 70, 79, 88, 64, 72, 72, 78, 69, 5, - 22, 0, 0, 0, 79, 87, 97, 69, 18, 0, 52, 8, 69, - 120, 97, 82, 71, 99, 116, 115, 118, 88, 116, - 106, 115, 116, 110, 116, 110, 5, 67, 78, 99, - 68, 90, 86, 115, 73, 94, 88, 119, 9, 80, 73, - 116, 90, 82, 75, 69, 2, 66, 79, 4, 1, 64, 6, - 65, 64, 2, 77, 13, 9, 25, 19, 21, 18, 17, 18, - 35, 12, 11, 34, 24, 67, 103, 94, 96, 86, 89, - 84, 78, 82, 80, 82, 86, 70, 72, 72, 65, 99, - 94, 95, 73, 72, 70, 69, 12, 64, 1, 65, 19, 66, - 3, 3, 1, 76, 54, 49, 35, 41, 49, 40, 23, 41, - 32, 23, 28, 17, 5, 1, 0, 21, 14, 19, 17, 15, - 12, 18, 11, 18, 15, 5, 6, 11, 89, 62, 62, 62, - 62, 62, 62, 62, 62, 62, 62, 62, 62, 54, 48, - 31, 58, 50, 32, 62, 54, 57, 52, 47, 44, 48, - 34, 27, 10, 16, 67, 72, 97, 69, 24, 15, 11, 2, - 5, 0, 71, 73, 87, 65, 38, 26, 20, 17, 5, 65, - 74, 74, 82, 87, 14, 7, 4, 0, 68, 73, 77, 84, - 103, 92, 76, 74, 70, 72, 81, 91, 92, 109, 75, - 32, 17, 11, 3, 66, 75, 81, 85, 91, 62, 90, 81, - 76, 66, 70, 1, 4, 5, 73, 3, 7, 1, 78, 71, 69, - 16, 4, 22, 18, 30, 30, 19, 20, 25, 20, 15, 65, - 11, 67, 99, 92, 90, 85, 82, 82, 81, 83, 67, - 75, 74, 73, 2, 75, 82, 96, 89, 95, 76, 72, 70, - 70, 68, 65, 67, 0, 0, 67, 70, 4, 65, 74, 52, - 42, 45, 45, 44, 48, 44, 42, 36, 36, 38, 32, - 14, 17, 10, 37, 35, 32, 25, 26, 21, 8, 3, 65, - 76, 80, 92, 72, 104, 62, 62, 62, 62, 62, 62, - 62, 62, 58, 55, 51, 47, 38, 20, 1, 56, 54, 25, - 59, 62, 54, 48, 51, 46, 40, 45, 39, 38, 23, - 25, 14, 73, 31, 21, 4, 113, 104, 107, 80, 86, - 83, 2, 75, 74, 68, 64, 16, 4, 22, 69, 62, 62, - 62, 59, 44, 41, 13, 66, 89, 73, 41, 29, 20, 9, - 9, 2, 64, 68, 88, 100, 92, 84, 85, 81, 69, 75, - 80, 69, 66, 65, 64, 3, 7, 4, 62, 62, 61, 54, - 50, 44, 30, 17, 72 }, - - { - - 62, - 9, 75, 62, 9, 75, 114, 93, 13, 10, 9, 20, 51, - 54, 54, 14, 101, 4, 72, 3, 1, 9, 71, 6, 71, - 17, 51, 78, 97, 107, 106, 95, 67, 72, 3, 1, - 83, 87, 5, 15, 67, 78, 91, 6, 70, 83, 88, 5, - 74, 89, 7, 70, 79, 88, 0, 71, 72, 77, 68, 5, - 22, 0, 0, 0, 79, 87, 97, 68, 17, 0, 52, 8, 69, - 119, 96, 82, 70, 97, 115, 113, 116, 87, 115, - 104, 113, 115, 109, 115, 110, 6, 67, 77, 98, - 68, 89, 85, 113, 73, 94, 87, 118, 9, 79, 72, - 115, 89, 82, 75, 68, 2, 66, 78, 5, 2, 64, 5, - 65, 64, 2, 77, 13, 8, 24, 19, 21, 18, 17, 17, - 33, 12, 10, 32, 23, 68, 102, 93, 95, 85, 88, - 83, 77, 81, 79, 81, 85, 70, 72, 71, 66, 98, - 93, 95, 73, 72, 70, 69, 11, 0, 1, 65, 17, 65, - 3, 2, 1, 77, 53, 48, 35, 40, 48, 39, 22, 40, - 32, 22, 27, 17, 5, 1, 64, 20, 14, 18, 17, 14, - 11, 17, 10, 16, 14, 4, 5, 10, 89, 62, 62, 62, - 62, 62, 62, 62, 62, 62, 62, 60, 61, 52, 46, - 29, 56, 49, 30, 62, 52, 55, 50, 44, 42, 45, - 32, 24, 9, 15, 69, 73, 97, 69, 24, 16, 11, 2, - 5, 0, 71, 73, 87, 64, 39, 26, 20, 17, 6, 64, - 73, 74, 81, 86, 15, 8, 4, 0, 67, 72, 76, 84, - 102, 92, 75, 74, 70, 72, 80, 90, 92, 108, 74, - 33, 17, 11, 3, 65, 74, 80, 84, 90, 62, 90, 81, - 75, 66, 70, 1, 4, 5, 72, 3, 7, 1, 78, 71, 69, - 15, 5, 21, 17, 29, 29, 19, 19, 24, 19, 15, 66, - 10, 67, 98, 92, 89, 84, 81, 81, 81, 82, 67, - 75, 74, 73, 1, 75, 82, 95, 88, 95, 76, 71, 70, - 70, 68, 65, 66, 0, 0, 67, 69, 4, 66, 75, 51, - 42, 44, 44, 43, 47, 43, 41, 35, 35, 37, 31, - 13, 16, 9, 36, 33, 31, 23, 25, 20, 7, 2, 66, - 76, 80, 92, 72, 103, 62, 62, 62, 62, 62, 62, - 62, 61, 56, 53, 49, 45, 36, 18, 0, 54, 52, 24, - 57, 62, 52, 46, 49, 44, 38, 43, 37, 35, 21, - 23, 12, 74, 29, 19, 3, 112, 103, 106, 80, 85, - 82, 4, 74, 73, 68, 0, 18, 6, 24, 69, 62, 62, - 61, 56, 41, 38, 10, 68, 90, 73, 41, 29, 20, 9, - 9, 2, 64, 68, 88, 99, 91, 83, 84, 80, 68, 75, - 79, 68, 65, 64, 0, 3, 8, 4, 62, 62, 59, 52, - 48, 42, 28, 15, 73 }, - - { - - 62, - 8, 75, 62, 8, 75, 113, 92, 13, 10, 9, 19, 50, - 53, 54, 14, 99, 4, 71, 4, 1, 8, 71, 5, 73, 16, - 49, 80, 98, 108, 104, 94, 67, 71, 4, 1, 83, - 86, 5, 14, 67, 78, 90, 5, 70, 83, 89, 5, 74, - 89, 7, 71, 79, 88, 0, 71, 72, 77, 68, 5, 22, - 0, 0, 0, 78, 88, 97, 68, 16, 0, 52, 8, 69, - 118, 95, 82, 70, 96, 113, 111, 115, 86, 113, - 103, 112, 114, 109, 114, 109, 6, 67, 76, 97, - 68, 89, 85, 112, 73, 94, 87, 117, 9, 79, 72, - 114, 89, 81, 75, 68, 2, 66, 78, 5, 2, 65, 5, - 65, 64, 2, 77, 13, 8, 23, 19, 20, 18, 17, 17, - 31, 12, 10, 30, 22, 69, 101, 92, 94, 84, 88, - 83, 76, 81, 79, 80, 84, 70, 72, 71, 68, 98, - 92, 95, 73, 73, 69, 69, 10, 1, 1, 65, 16, 64, - 2, 1, 1, 78, 51, 47, 34, 39, 47, 38, 21, 39, - 31, 20, 26, 16, 5, 1, 64, 19, 13, 17, 16, 13, - 10, 16, 9, 14, 12, 3, 4, 9, 89, 62, 62, 62, - 62, 62, 62, 62, 62, 62, 61, 58, 58, 49, 43, - 26, 54, 47, 28, 61, 50, 52, 47, 42, 39, 42, - 30, 22, 8, 13, 70, 74, 98, 69, 24, 16, 11, 2, - 5, 0, 71, 73, 86, 64, 39, 26, 20, 17, 7, 64, - 73, 74, 81, 86, 16, 8, 4, 0, 67, 72, 76, 83, - 101, 91, 74, 73, 70, 72, 79, 89, 91, 107, 74, - 33, 17, 11, 3, 64, 74, 80, 83, 90, 62, 90, 81, - 75, 66, 70, 1, 4, 5, 72, 3, 7, 2, 78, 71, 69, - 14, 5, 20, 16, 28, 28, 19, 17, 22, 19, 15, 67, - 9, 68, 98, 91, 88, 84, 81, 81, 80, 81, 68, 75, - 74, 73, 0, 75, 82, 95, 88, 96, 76, 71, 70, 69, - 68, 65, 66, 0, 64, 67, 68, 3, 66, 76, 50, 41, - 44, 43, 41, 46, 42, 40, 34, 34, 36, 30, 12, - 15, 8, 34, 32, 29, 21, 23, 19, 6, 1, 66, 76, - 80, 92, 73, 103, 62, 62, 62, 62, 62, 62, 61, - 58, 54, 51, 47, 42, 34, 17, 64, 52, 50, 22, - 55, 61, 49, 43, 46, 41, 36, 41, 34, 33, 19, - 20, 10, 75, 27, 17, 1, 111, 102, 105, 79, 84, - 82, 5, 73, 73, 68, 0, 19, 7, 25, 68, 62, 62, - 58, 53, 38, 35, 7, 70, 91, 73, 41, 29, 20, 9, - 9, 2, 64, 68, 87, 99, 90, 82, 84, 79, 68, 74, - 79, 68, 65, 64, 0, 4, 8, 3, 62, 62, 57, 50, - 46, 40, 26, 13, 74 }, - - { - - 62, - 8, 75, 62, 8, 75, 111, 91, 14, 10, 9, 18, 49, - 52, 54, 14, 97, 4, 70, 5, 1, 8, 70, 4, 74, 15, - 47, 81, 99, 109, 101, 92, 67, 70, 5, 1, 82, - 85, 6, 13, 67, 77, 89, 5, 70, 83, 89, 5, 74, - 88, 7, 71, 79, 88, 0, 71, 71, 77, 68, 5, 22, - 0, 0, 0, 77, 88, 97, 68, 15, 0, 52, 8, 69, - 117, 94, 82, 70, 95, 111, 109, 113, 84, 111, - 102, 110, 113, 108, 113, 108, 7, 66, 75, 96, - 68, 88, 84, 110, 73, 93, 87, 115, 10, 79, 72, - 112, 89, 80, 75, 68, 3, 65, 77, 5, 2, 65, 5, - 64, 64, 2, 76, 13, 8, 23, 19, 19, 18, 17, 17, - 29, 12, 10, 29, 21, 69, 100, 91, 93, 83, 87, - 82, 75, 80, 79, 79, 83, 70, 72, 71, 69, 97, - 91, 95, 72, 73, 68, 69, 9, 2, 1, 65, 15, 0, 1, - 0, 1, 78, 50, 46, 34, 38, 46, 37, 21, 39, 31, - 19, 25, 16, 5, 1, 64, 19, 12, 16, 15, 12, 9, - 16, 9, 13, 11, 3, 3, 8, 89, 62, 62, 62, 62, - 62, 62, 62, 62, 62, 59, 56, 56, 46, 41, 23, - 53, 45, 27, 59, 48, 50, 45, 40, 37, 40, 28, - 20, 8, 11, 71, 74, 98, 69, 25, 16, 11, 3, 5, - 0, 70, 73, 85, 64, 39, 26, 21, 17, 8, 0, 72, - 73, 80, 85, 17, 9, 5, 1, 66, 71, 76, 82, 100, - 90, 72, 72, 69, 71, 78, 88, 90, 106, 73, 33, - 18, 12, 3, 0, 73, 79, 82, 89, 62, 89, 80, 74, - 66, 70, 1, 5, 6, 72, 3, 8, 3, 78, 71, 69, 14, - 5, 19, 16, 27, 28, 19, 16, 21, 19, 15, 67, 8, - 69, 97, 90, 87, 84, 80, 81, 79, 80, 68, 75, - 74, 72, 0, 75, 82, 95, 87, 96, 76, 71, 70, 68, - 68, 65, 65, 0, 64, 67, 67, 2, 66, 76, 49, 41, - 44, 43, 40, 45, 41, 39, 34, 33, 35, 30, 12, - 14, 7, 33, 31, 27, 19, 22, 18, 6, 1, 66, 75, - 79, 92, 74, 102, 62, 62, 62, 62, 62, 62, 59, - 56, 52, 49, 45, 40, 32, 16, 65, 50, 49, 21, - 53, 59, 47, 41, 44, 39, 34, 39, 32, 31, 18, - 18, 8, 76, 25, 15, 64, 110, 100, 103, 78, 83, - 81, 7, 72, 72, 68, 1, 21, 8, 27, 67, 62, 62, - 56, 50, 36, 32, 5, 72, 92, 73, 41, 29, 20, 9, - 10, 2, 64, 68, 86, 98, 89, 81, 83, 77, 67, 73, - 78, 67, 64, 0, 0, 5, 8, 3, 62, 61, 56, 49, 44, - 38, 24, 11, 74 }, - - { - - 62, - 8, 75, 62, 8, 75, 109, 89, 14, 10, 8, 16, 47, - 50, 54, 14, 94, 3, 69, 5, 1, 7, 70, 3, 75, 15, - 45, 83, 100, 109, 98, 91, 67, 69, 5, 1, 82, - 84, 6, 13, 67, 77, 89, 5, 71, 82, 89, 5, 74, - 87, 6, 71, 79, 88, 1, 70, 71, 76, 67, 5, 22, - 0, 0, 0, 77, 88, 97, 67, 14, 0, 52, 8, 69, - 116, 93, 82, 69, 93, 110, 107, 112, 83, 110, - 100, 108, 112, 107, 112, 108, 8, 66, 74, 95, - 68, 88, 83, 108, 73, 93, 86, 114, 10, 78, 71, - 111, 88, 80, 75, 67, 3, 65, 76, 6, 3, 66, 4, - 64, 64, 2, 76, 13, 7, 22, 19, 19, 18, 17, 16, - 27, 12, 9, 27, 20, 70, 99, 90, 92, 82, 86, 81, - 74, 79, 78, 78, 82, 70, 72, 70, 70, 97, 90, - 95, 72, 73, 68, 69, 8, 3, 1, 65, 13, 1, 1, 64, - 1, 79, 48, 45, 33, 37, 45, 36, 20, 38, 31, 18, - 24, 16, 5, 1, 65, 18, 12, 15, 15, 11, 8, 15, - 8, 11, 10, 2, 2, 7, 89, 62, 62, 62, 62, 62, - 62, 62, 62, 62, 57, 54, 53, 44, 39, 21, 51, - 44, 25, 56, 46, 48, 43, 37, 35, 37, 26, 17, 7, - 10, 73, 75, 98, 69, 25, 17, 11, 3, 5, 0, 70, - 73, 85, 0, 40, 26, 21, 17, 9, 0, 71, 73, 79, - 84, 18, 10, 5, 1, 65, 71, 75, 82, 99, 90, 71, - 72, 69, 71, 77, 87, 90, 105, 73, 34, 18, 12, - 3, 1, 72, 78, 81, 88, 62, 89, 80, 74, 66, 70, - 1, 5, 6, 71, 3, 8, 3, 78, 71, 69, 13, 6, 18, - 15, 26, 27, 19, 15, 20, 18, 15, 68, 7, 69, 96, - 90, 86, 83, 80, 80, 79, 79, 68, 75, 74, 72, - 64, 75, 82, 94, 86, 96, 76, 70, 70, 68, 68, - 65, 64, 0, 64, 67, 66, 2, 67, 77, 48, 41, 43, - 42, 39, 44, 40, 38, 33, 32, 34, 29, 11, 13, 6, - 31, 29, 26, 17, 21, 17, 5, 0, 67, 75, 79, 92, - 74, 101, 62, 62, 62, 62, 62, 60, 57, 53, 50, - 47, 43, 38, 30, 14, 66, 48, 47, 20, 51, 57, - 45, 39, 42, 37, 32, 37, 30, 28, 16, 16, 6, 77, - 23, 13, 65, 109, 99, 102, 78, 82, 80, 9, 71, - 71, 68, 2, 22, 10, 28, 67, 62, 60, 53, 47, 33, - 29, 2, 74, 93, 73, 41, 29, 20, 9, 10, 2, 64, - 68, 86, 97, 88, 80, 82, 76, 66, 73, 77, 66, 0, - 1, 1, 5, 9, 3, 60, 59, 54, 47, 42, 36, 22, 9, - 75 }, - - { - - 62, - 8, 76, 62, 8, 76, 107, 88, 15, 10, 8, 15, 46, - 49, 54, 14, 92, 3, 69, 6, 1, 6, 70, 2, 76, 14, - 44, 84, 101, 110, 95, 90, 67, 69, 6, 1, 81, - 83, 7, 12, 66, 76, 88, 4, 71, 82, 89, 5, 73, - 87, 6, 71, 78, 88, 1, 70, 71, 76, 67, 5, 22, - 0, 0, 0, 76, 88, 97, 67, 14, 64, 52, 8, 69, - 115, 93, 82, 69, 92, 108, 105, 110, 82, 108, - 99, 106, 111, 106, 111, 107, 9, 66, 73, 95, - 67, 87, 83, 106, 73, 92, 86, 113, 10, 78, 71, - 109, 88, 79, 74, 67, 3, 65, 75, 6, 3, 66, 4, - 64, 64, 2, 76, 13, 7, 22, 19, 18, 18, 17, 16, - 25, 12, 9, 25, 19, 71, 99, 89, 92, 82, 85, 81, - 73, 79, 78, 78, 80, 70, 72, 70, 71, 96, 89, - 95, 72, 73, 67, 68, 7, 3, 1, 65, 12, 2, 0, 65, - 1, 80, 47, 44, 33, 37, 44, 36, 20, 37, 30, 17, - 23, 16, 5, 1, 65, 17, 11, 14, 14, 11, 7, 14, - 8, 9, 9, 2, 1, 6, 89, 62, 62, 62, 62, 62, 62, - 62, 62, 62, 54, 52, 51, 41, 36, 18, 49, 42, - 24, 54, 43, 45, 40, 35, 32, 35, 23, 15, 6, 8, - 74, 76, 98, 68, 26, 17, 12, 3, 5, 0, 70, 73, - 84, 0, 40, 27, 21, 17, 10, 1, 71, 72, 79, 83, - 19, 10, 6, 1, 64, 70, 75, 81, 98, 89, 70, 71, - 68, 71, 77, 87, 89, 103, 72, 34, 18, 12, 4, 1, - 72, 77, 81, 87, 62, 88, 79, 73, 66, 70, 1, 5, - 6, 71, 4, 8, 4, 78, 71, 70, 13, 6, 17, 14, 25, - 26, 19, 14, 19, 18, 15, 68, 6, 70, 95, 89, 85, - 83, 79, 80, 78, 79, 68, 74, 73, 71, 64, 75, - 82, 94, 85, 96, 76, 70, 70, 67, 68, 65, 0, 64, - 64, 67, 66, 1, 67, 78, 47, 40, 43, 41, 38, 44, - 40, 37, 32, 32, 33, 28, 10, 12, 5, 30, 28, 24, - 15, 19, 15, 4, 0, 67, 75, 79, 91, 75, 100, 62, - 62, 62, 62, 62, 58, 55, 51, 48, 44, 41, 35, - 28, 13, 66, 47, 46, 18, 49, 54, 43, 37, 40, - 35, 30, 34, 28, 26, 14, 14, 5, 79, 21, 11, 67, - 108, 98, 101, 77, 81, 79, 10, 70, 70, 68, 3, - 24, 11, 30, 66, 61, 59, 51, 44, 30, 27, 64, - 76, 95, 72, 41, 29, 20, 9, 10, 2, 64, 68, 85, - 96, 88, 79, 81, 75, 66, 72, 76, 66, 0, 1, 1, - 6, 9, 3, 59, 58, 52, 45, 41, 35, 19, 8, 76 }, - - { - - 62, - 8, 76, 62, 8, 76, 106, 86, 15, 10, 7, 13, 44, - 48, 54, 14, 90, 3, 68, 7, 1, 5, 70, 1, 77, 14, - 42, 86, 102, 110, 92, 89, 67, 68, 7, 1, 81, - 82, 7, 12, 66, 76, 87, 4, 72, 82, 89, 5, 73, - 86, 6, 72, 78, 88, 2, 70, 71, 76, 66, 5, 22, - 0, 0, 0, 76, 89, 97, 66, 13, 64, 52, 8, 69, - 114, 92, 82, 68, 91, 106, 103, 109, 81, 106, - 98, 104, 110, 106, 110, 106, 9, 66, 72, 94, - 67, 87, 82, 104, 73, 92, 85, 112, 10, 78, 70, - 108, 87, 78, 74, 67, 3, 65, 75, 7, 4, 67, 4, - 64, 64, 2, 76, 13, 6, 21, 19, 17, 18, 17, 16, - 23, 12, 8, 23, 18, 72, 98, 88, 91, 81, 85, 80, - 72, 78, 77, 77, 79, 70, 72, 70, 72, 96, 88, - 95, 72, 73, 66, 68, 6, 4, 1, 65, 11, 3, 0, 66, - 1, 81, 45, 43, 32, 36, 43, 35, 19, 36, 30, 15, - 22, 15, 5, 1, 66, 16, 10, 13, 13, 10, 6, 13, - 7, 7, 8, 1, 0, 5, 89, 62, 62, 61, 62, 62, 62, - 62, 62, 61, 52, 50, 48, 39, 34, 16, 47, 40, - 22, 52, 41, 43, 38, 33, 30, 32, 21, 12, 5, 6, - 75, 77, 98, 68, 26, 17, 12, 3, 5, 0, 70, 73, - 84, 0, 40, 27, 21, 17, 11, 1, 70, 72, 78, 83, - 20, 11, 6, 1, 64, 70, 74, 81, 97, 88, 69, 70, - 68, 71, 76, 86, 88, 102, 72, 34, 18, 12, 4, 2, - 71, 77, 80, 86, 62, 88, 79, 73, 66, 70, 1, 5, - 6, 71, 4, 8, 4, 78, 71, 70, 12, 7, 16, 13, 24, - 25, 19, 12, 18, 18, 15, 69, 5, 70, 95, 88, 84, - 82, 79, 79, 78, 78, 69, 74, 73, 71, 65, 75, - 82, 93, 84, 96, 76, 70, 70, 66, 68, 65, 1, 64, - 65, 67, 65, 0, 67, 79, 46, 40, 42, 40, 37, 43, - 39, 36, 31, 31, 32, 27, 9, 11, 4, 28, 27, 23, - 13, 18, 14, 3, 64, 68, 75, 79, 91, 75, 100, - 62, 62, 62, 62, 62, 56, 53, 48, 46, 42, 39, - 33, 26, 11, 67, 45, 44, 17, 47, 52, 41, 35, - 37, 33, 28, 32, 26, 23, 12, 12, 3, 80, 19, 9, - 68, 107, 97, 100, 76, 80, 78, 12, 69, 69, 68, - 4, 25, 13, 31, 65, 59, 57, 48, 41, 27, 24, 67, - 78, 96, 72, 41, 29, 20, 9, 10, 2, 64, 68, 85, - 95, 87, 78, 81, 74, 65, 72, 75, 65, 1, 2, 1, - 6, 9, 3, 58, 56, 50, 43, 39, 33, 17, 6, 77 }, - - { - - 62, - 8, 76, 62, 8, 76, 104, 85, 15, 10, 7, 12, 43, - 46, 54, 14, 87, 2, 67, 7, 1, 5, 69, 0, 78, 13, - 40, 88, 103, 111, 89, 87, 67, 67, 7, 1, 81, - 81, 7, 11, 66, 76, 87, 4, 72, 81, 89, 5, 73, - 85, 5, 72, 78, 88, 2, 69, 70, 75, 66, 5, 22, - 0, 0, 0, 75, 89, 97, 66, 12, 64, 52, 8, 69, - 113, 91, 82, 68, 89, 105, 101, 107, 80, 105, - 96, 102, 109, 105, 109, 106, 10, 66, 71, 93, - 67, 86, 81, 102, 73, 92, 85, 110, 11, 77, 70, - 107, 87, 78, 74, 66, 4, 64, 74, 7, 4, 67, 3, - 64, 64, 2, 76, 13, 6, 20, 19, 17, 18, 17, 15, - 21, 12, 8, 22, 17, 73, 97, 87, 90, 80, 84, 79, - 71, 77, 77, 76, 78, 70, 72, 69, 73, 95, 87, - 95, 71, 73, 66, 68, 5, 5, 1, 65, 9, 4, 64, 67, - 1, 81, 44, 42, 32, 35, 42, 34, 18, 36, 30, 14, - 21, 15, 5, 1, 66, 16, 10, 12, 13, 9, 5, 13, 6, - 5, 7, 0, 64, 4, 89, 61, 62, 59, 62, 61, 60, - 60, 60, 59, 50, 48, 46, 36, 32, 13, 45, 39, - 20, 49, 39, 41, 36, 30, 28, 29, 19, 10, 4, 5, - 77, 77, 98, 68, 26, 18, 12, 3, 5, 0, 70, 73, - 83, 1, 41, 27, 21, 17, 12, 2, 69, 72, 77, 82, - 21, 12, 6, 2, 0, 69, 74, 80, 96, 88, 67, 70, - 68, 70, 75, 85, 88, 101, 71, 35, 19, 12, 4, 3, - 70, 76, 79, 85, 62, 88, 79, 72, 66, 70, 1, 5, - 6, 70, 4, 9, 5, 78, 71, 70, 11, 7, 15, 12, 23, - 25, 19, 11, 17, 17, 15, 70, 4, 71, 94, 88, 83, - 82, 78, 79, 77, 77, 69, 74, 73, 71, 66, 75, - 82, 93, 83, 96, 76, 69, 70, 66, 68, 65, 2, 64, - 65, 67, 64, 0, 68, 79, 45, 40, 42, 40, 36, 42, - 38, 35, 31, 30, 31, 26, 8, 10, 3, 27, 25, 21, - 11, 17, 13, 2, 65, 68, 75, 78, 91, 76, 99, 62, - 62, 62, 62, 60, 54, 51, 46, 44, 40, 37, 31, - 24, 10, 68, 43, 42, 16, 45, 50, 39, 33, 35, - 31, 26, 30, 24, 21, 10, 10, 1, 81, 17, 7, 70, - 106, 95, 99, 76, 79, 77, 14, 68, 68, 68, 5, - 27, 14, 33, 65, 58, 55, 46, 38, 25, 21, 69, - 80, 97, 72, 41, 29, 20, 9, 10, 2, 64, 68, 84, - 94, 86, 77, 80, 73, 64, 71, 74, 64, 2, 3, 2, - 7, 10, 3, 56, 55, 49, 42, 37, 31, 15, 4, 78 }, - - { - - 61, - 8, 76, 61, 8, 76, 102, 83, 16, 10, 6, 10, 41, - 45, 54, 14, 85, 2, 66, 8, 1, 4, 69, 64, 79, - 13, 38, 89, 104, 111, 86, 86, 67, 66, 8, 1, - 80, 80, 8, 11, 66, 75, 86, 3, 73, 81, 89, 5, - 73, 85, 5, 72, 78, 88, 3, 69, 70, 75, 65, 5, - 22, 0, 0, 0, 75, 89, 97, 65, 11, 64, 52, 8, - 69, 112, 90, 82, 67, 88, 103, 99, 106, 79, - 103, 95, 100, 108, 104, 108, 105, 11, 66, 70, - 92, 67, 86, 81, 100, 73, 91, 84, 109, 11, 77, - 69, 105, 86, 77, 74, 66, 4, 64, 73, 8, 5, 68, - 3, 64, 64, 2, 76, 13, 5, 20, 19, 16, 18, 17, - 15, 19, 12, 7, 20, 16, 74, 96, 86, 89, 79, 83, - 79, 70, 77, 76, 75, 77, 70, 72, 69, 74, 95, - 86, 95, 71, 73, 65, 68, 4, 6, 1, 65, 8, 5, 64, - 68, 1, 82, 42, 41, 31, 34, 41, 33, 18, 35, 29, - 13, 20, 15, 5, 1, 67, 15, 9, 11, 12, 8, 4, 12, - 6, 3, 6, 0, 65, 3, 89, 60, 61, 58, 62, 59, 58, - 58, 58, 56, 47, 46, 43, 34, 29, 11, 43, 37, - 19, 47, 37, 38, 33, 28, 25, 27, 17, 7, 3, 3, - 78, 78, 98, 68, 27, 18, 12, 3, 5, 0, 70, 73, - 83, 1, 41, 27, 21, 17, 13, 2, 69, 71, 77, 81, - 22, 12, 7, 2, 1, 69, 73, 80, 95, 87, 66, 69, - 67, 70, 74, 84, 87, 100, 71, 35, 19, 12, 4, 4, - 70, 75, 78, 84, 62, 87, 78, 72, 66, 70, 1, 5, - 6, 70, 4, 9, 5, 78, 71, 70, 11, 8, 14, 11, 22, - 24, 19, 10, 16, 17, 15, 70, 3, 71, 93, 87, 82, - 81, 78, 78, 77, 76, 69, 74, 73, 70, 66, 75, - 82, 92, 82, 96, 76, 69, 70, 65, 68, 65, 3, 64, - 65, 67, 0, 64, 68, 80, 44, 39, 41, 39, 35, 41, - 37, 34, 30, 29, 30, 25, 7, 9, 2, 25, 24, 20, - 9, 15, 12, 1, 65, 69, 75, 78, 91, 76, 98, 62, - 62, 61, 61, 57, 52, 49, 43, 42, 38, 35, 28, - 22, 8, 69, 41, 41, 14, 43, 48, 37, 31, 33, 29, - 24, 28, 22, 18, 8, 8, 64, 82, 15, 5, 71, 105, - 94, 98, 75, 78, 76, 15, 67, 67, 68, 6, 28, 16, - 34, 64, 56, 54, 43, 35, 22, 18, 72, 82, 98, - 72, 41, 29, 20, 9, 10, 2, 64, 68, 84, 93, 85, - 76, 79, 72, 64, 71, 73, 64, 2, 3, 2, 7, 10, 3, - 55, 53, 47, 40, 35, 29, 13, 2, 79 }, - - { - - 60, - 8, 76, 60, 8, 76, 100, 82, 16, 10, 6, 9, 40, - 44, 54, 14, 83, 2, 65, 9, 1, 3, 69, 65, 80, - 12, 36, 91, 105, 112, 83, 85, 67, 65, 9, 1, - 80, 79, 8, 10, 66, 75, 85, 3, 73, 81, 89, 5, - 73, 84, 5, 72, 78, 88, 3, 69, 70, 75, 65, 5, - 22, 0, 0, 0, 74, 89, 97, 65, 10, 64, 52, 8, - 69, 111, 89, 82, 67, 87, 101, 97, 104, 78, - 101, 94, 98, 107, 103, 107, 104, 12, 66, 69, - 91, 67, 85, 80, 98, 73, 91, 84, 108, 11, 77, - 69, 104, 86, 76, 74, 66, 4, 64, 72, 8, 5, 68, - 3, 64, 64, 2, 76, 13, 5, 19, 19, 15, 18, 17, - 15, 17, 12, 7, 18, 15, 75, 95, 85, 88, 78, 82, - 78, 69, 76, 76, 74, 76, 70, 72, 69, 75, 94, - 85, 95, 71, 73, 64, 68, 3, 7, 1, 65, 7, 6, 65, - 69, 1, 83, 41, 40, 31, 33, 40, 32, 17, 34, 29, - 12, 19, 15, 5, 1, 67, 14, 8, 10, 11, 7, 3, 11, - 5, 1, 5, 64, 66, 2, 89, 58, 60, 56, 60, 57, - 56, 56, 56, 54, 45, 44, 41, 31, 27, 8, 41, 35, - 17, 45, 35, 36, 31, 26, 23, 24, 15, 5, 2, 1, - 79, 79, 98, 68, 27, 18, 12, 3, 5, 0, 70, 73, - 82, 1, 41, 27, 21, 17, 14, 3, 68, 71, 76, 80, - 23, 13, 7, 2, 2, 68, 73, 79, 94, 86, 65, 68, - 67, 70, 73, 83, 86, 99, 70, 35, 19, 12, 4, 5, - 69, 74, 77, 83, 62, 87, 78, 71, 66, 70, 1, 5, - 6, 70, 4, 9, 6, 78, 71, 70, 10, 8, 13, 10, 21, - 23, 19, 9, 15, 17, 15, 71, 2, 72, 92, 86, 81, - 81, 77, 78, 76, 75, 69, 74, 73, 70, 67, 75, - 82, 92, 81, 96, 76, 69, 70, 64, 68, 65, 4, 64, - 65, 67, 1, 65, 68, 81, 43, 39, 41, 38, 34, 40, - 36, 33, 29, 28, 29, 24, 6, 8, 1, 24, 23, 18, - 7, 14, 11, 0, 66, 69, 75, 78, 91, 77, 97, 62, - 62, 59, 59, 54, 50, 47, 41, 40, 36, 33, 26, - 20, 7, 70, 39, 39, 13, 41, 46, 35, 29, 31, 27, - 22, 26, 20, 16, 6, 6, 66, 83, 13, 3, 73, 104, - 93, 97, 74, 77, 75, 17, 66, 66, 68, 7, 30, 17, - 36, 0, 55, 52, 41, 32, 19, 15, 75, 84, 99, 72, - 41, 29, 20, 9, 10, 2, 64, 68, 83, 92, 84, 75, - 78, 71, 0, 70, 72, 0, 3, 4, 2, 8, 10, 3, 54, - 52, 45, 38, 33, 27, 11, 0, 80 }, - - { - - 58, - 7, 77, 58, 7, 77, 99, 81, 16, 10, 5, 7, 38, - 42, 53, 14, 81, 1, 65, 9, 0, 2, 69, 67, 82, - 11, 34, 93, 106, 113, 81, 84, 68, 65, 9, 0, - 80, 78, 8, 9, 66, 75, 85, 2, 74, 81, 90, 5, - 73, 84, 4, 73, 78, 88, 3, 69, 70, 75, 65, 4, - 22, 0, 0, 0, 74, 90, 97, 65, 9, 65, 52, 7, 69, - 110, 89, 82, 67, 86, 100, 96, 103, 77, 100, - 93, 97, 106, 103, 106, 104, 12, 66, 69, 91, - 67, 85, 80, 97, 73, 91, 84, 107, 11, 77, 69, - 103, 86, 76, 74, 66, 4, 64, 72, 8, 5, 69, 2, - 64, 65, 2, 76, 12, 4, 18, 19, 14, 17, 17, 14, - 15, 11, 6, 16, 14, 76, 95, 85, 88, 78, 82, 78, - 68, 76, 76, 74, 75, 71, 72, 69, 77, 94, 85, - 95, 71, 74, 64, 68, 2, 7, 1, 65, 5, 6, 66, 70, - 1, 84, 39, 39, 30, 32, 39, 31, 16, 33, 28, 10, - 18, 14, 4, 1, 68, 13, 7, 9, 10, 6, 2, 10, 4, - 64, 3, 65, 68, 0, 89, 56, 58, 54, 58, 55, 53, - 53, 53, 51, 42, 41, 38, 28, 24, 5, 39, 33, 15, - 42, 32, 33, 28, 23, 20, 21, 12, 2, 1, 64, 81, - 80, 99, 68, 27, 18, 12, 3, 5, 64, 70, 73, 82, - 1, 41, 27, 21, 17, 15, 3, 68, 71, 76, 80, 23, - 13, 7, 2, 2, 68, 73, 79, 93, 86, 64, 68, 67, - 70, 73, 83, 86, 98, 70, 35, 19, 12, 4, 5, 69, - 74, 77, 83, 62, 87, 78, 71, 66, 70, 1, 5, 6, - 70, 4, 9, 6, 78, 71, 71, 9, 8, 12, 9, 20, 22, - 18, 7, 13, 16, 14, 72, 0, 73, 92, 86, 80, 81, - 77, 78, 76, 75, 70, 74, 73, 70, 68, 75, 82, - 92, 81, 97, 76, 69, 70, 64, 69, 65, 4, 65, 66, - 67, 1, 66, 69, 82, 42, 38, 40, 37, 32, 39, 35, - 32, 28, 27, 28, 23, 5, 6, 64, 22, 21, 16, 5, - 12, 9, 64, 67, 70, 75, 78, 91, 78, 97, 62, 61, - 57, 56, 51, 47, 44, 38, 37, 33, 30, 23, 17, 5, - 71, 37, 37, 11, 39, 43, 32, 26, 28, 24, 20, - 23, 17, 13, 4, 3, 68, 85, 11, 1, 75, 103, 92, - 96, 74, 77, 75, 18, 66, 66, 68, 7, 31, 18, 37, - 0, 53, 50, 38, 28, 16, 12, 78, 87, 101, 72, - 41, 28, 19, 9, 10, 2, 65, 68, 83, 92, 84, 75, - 78, 70, 0, 70, 72, 0, 3, 4, 2, 8, 10, 2, 52, - 50, 43, 36, 31, 25, 8, 65, 81 }, - - { - - 57, - 7, 77, 57, 7, 77, 97, 79, 17, 11, 5, 6, 37, - 41, 53, 14, 78, 1, 64, 10, 0, 2, 68, 68, 83, - 11, 33, 94, 107, 113, 78, 82, 68, 64, 10, 0, - 79, 76, 9, 9, 65, 74, 84, 2, 74, 80, 90, 5, - 72, 83, 4, 73, 77, 88, 4, 68, 69, 74, 64, 4, - 22, 0, 0, 0, 73, 90, 97, 64, 9, 65, 52, 7, 69, - 108, 88, 82, 66, 84, 98, 94, 101, 75, 98, 91, - 95, 104, 102, 105, 103, 13, 65, 68, 90, 66, - 84, 79, 95, 72, 90, 83, 105, 12, 76, 68, 101, - 85, 75, 73, 65, 5, 0, 71, 9, 6, 69, 2, 0, 65, - 2, 75, 12, 4, 18, 19, 14, 17, 17, 14, 14, 11, - 6, 15, 13, 76, 94, 84, 87, 77, 81, 77, 67, 75, - 75, 73, 73, 71, 72, 68, 78, 93, 84, 95, 70, - 74, 0, 67, 2, 8, 1, 65, 4, 7, 66, 71, 1, 84, - 38, 39, 30, 32, 39, 31, 16, 33, 28, 9, 18, 14, - 4, 1, 68, 13, 7, 9, 10, 6, 1, 10, 4, 65, 2, - 65, 69, 64, 89, 55, 57, 53, 57, 54, 51, 51, - 51, 49, 40, 39, 36, 26, 22, 3, 38, 32, 14, 40, - 30, 31, 26, 21, 18, 19, 10, 0, 1, 65, 82, 80, - 99, 67, 28, 19, 13, 4, 5, 64, 69, 72, 81, 2, - 42, 28, 22, 17, 16, 4, 67, 70, 75, 79, 24, 14, - 8, 3, 3, 67, 72, 78, 91, 85, 1, 67, 66, 69, - 72, 82, 85, 96, 69, 36, 20, 13, 5, 6, 68, 73, - 76, 82, 62, 86, 77, 70, 66, 69, 1, 6, 7, 69, - 5, 10, 7, 77, 71, 71, 9, 9, 12, 9, 19, 22, 18, - 6, 12, 16, 14, 72, 64, 73, 91, 85, 79, 80, 76, - 77, 75, 74, 70, 73, 72, 69, 68, 74, 81, 91, - 80, 97, 76, 68, 70, 0, 69, 65, 5, 65, 66, 66, - 2, 66, 69, 82, 42, 38, 40, 37, 31, 39, 35, 32, - 28, 27, 28, 23, 5, 5, 65, 21, 20, 15, 4, 11, - 8, 64, 67, 70, 74, 77, 90, 78, 96, 60, 59, 55, - 54, 49, 45, 42, 36, 35, 31, 28, 21, 15, 4, 71, - 36, 36, 10, 38, 41, 30, 24, 26, 22, 18, 21, - 15, 11, 3, 1, 69, 86, 10, 0, 76, 101, 90, 94, - 73, 76, 74, 20, 65, 65, 68, 8, 33, 20, 39, 1, - 52, 49, 36, 25, 14, 10, 80, 89, 102, 71, 42, - 28, 19, 9, 11, 2, 65, 68, 82, 91, 83, 74, 77, - 68, 1, 69, 71, 1, 4, 5, 3, 9, 11, 2, 51, 49, - 42, 35, 30, 24, 6, 66, 81 }, - - { - - 56, - 7, 77, 56, 7, 77, 95, 78, 17, 11, 5, 5, 36, - 40, 53, 14, 76, 1, 0, 11, 0, 1, 68, 69, 84, - 10, 31, 96, 108, 114, 75, 81, 68, 0, 11, 0, - 79, 75, 9, 8, 65, 74, 83, 2, 74, 80, 90, 5, - 72, 82, 4, 73, 77, 88, 4, 68, 69, 74, 64, 4, - 22, 0, 0, 0, 72, 90, 97, 64, 8, 65, 52, 7, 69, - 107, 87, 82, 66, 83, 96, 92, 100, 74, 96, 90, - 93, 103, 101, 104, 102, 14, 65, 67, 89, 66, - 84, 78, 93, 72, 90, 83, 104, 12, 76, 68, 100, - 85, 74, 73, 65, 5, 0, 70, 9, 6, 70, 2, 0, 65, - 2, 75, 12, 4, 17, 19, 13, 17, 17, 14, 12, 11, - 6, 13, 12, 77, 93, 83, 86, 76, 80, 76, 66, 74, - 75, 72, 72, 71, 72, 68, 79, 93, 83, 95, 70, - 74, 1, 67, 1, 9, 1, 65, 3, 8, 67, 72, 1, 85, - 36, 38, 29, 31, 38, 30, 15, 32, 28, 8, 17, 14, - 4, 1, 68, 12, 6, 8, 9, 5, 0, 9, 3, 67, 1, 66, - 70, 65, 89, 53, 56, 51, 55, 52, 49, 49, 49, - 46, 38, 37, 33, 23, 20, 0, 36, 30, 12, 38, 28, - 29, 24, 19, 16, 16, 8, 65, 0, 67, 83, 81, 99, - 67, 28, 19, 13, 4, 5, 64, 69, 72, 80, 2, 42, - 28, 22, 17, 17, 4, 66, 70, 74, 78, 25, 15, 8, - 3, 4, 67, 72, 77, 90, 84, 2, 66, 66, 69, 71, - 81, 84, 95, 69, 36, 20, 13, 5, 7, 67, 72, 75, - 81, 62, 86, 77, 70, 66, 69, 1, 6, 7, 69, 5, - 10, 8, 77, 71, 71, 8, 9, 11, 8, 18, 21, 18, 5, - 11, 16, 14, 73, 65, 74, 90, 84, 78, 80, 76, - 77, 74, 73, 70, 73, 72, 69, 69, 74, 81, 91, - 79, 97, 76, 68, 70, 1, 69, 65, 6, 65, 66, 66, - 3, 67, 69, 83, 41, 38, 40, 36, 30, 38, 34, 31, - 27, 26, 27, 22, 4, 4, 66, 19, 19, 13, 2, 10, - 7, 65, 68, 70, 74, 77, 90, 79, 95, 58, 57, 53, - 52, 46, 43, 40, 33, 33, 29, 26, 19, 13, 3, 72, - 34, 34, 9, 36, 39, 28, 22, 24, 20, 16, 19, 13, - 9, 1, 64, 71, 87, 8, 65, 78, 100, 89, 93, 72, - 75, 73, 22, 64, 64, 68, 9, 34, 21, 40, 2, 51, - 47, 33, 22, 11, 7, 83, 91, 103, 71, 42, 28, - 19, 9, 11, 2, 65, 68, 81, 90, 82, 73, 76, 67, - 2, 68, 70, 2, 5, 6, 3, 10, 11, 2, 50, 47, 40, - 33, 28, 22, 4, 68, 82 }, - - { - - 55, - 7, 77, 55, 7, 77, 93, 76, 18, 11, 4, 3, 34, - 39, 53, 14, 74, 1, 1, 12, 0, 0, 68, 70, 85, - 10, 29, 97, 109, 114, 72, 80, 68, 1, 12, 0, - 78, 74, 10, 8, 65, 73, 82, 1, 75, 80, 90, 5, - 72, 82, 4, 73, 77, 88, 5, 68, 69, 74, 0, 4, - 22, 0, 0, 0, 72, 90, 97, 0, 7, 65, 52, 7, 69, - 106, 86, 82, 65, 82, 94, 90, 98, 73, 94, 89, - 91, 102, 100, 103, 101, 15, 65, 66, 88, 66, - 83, 78, 91, 72, 89, 82, 103, 12, 76, 67, 98, - 84, 73, 73, 65, 5, 0, 69, 10, 7, 70, 2, 0, 65, - 2, 75, 12, 3, 17, 19, 12, 17, 17, 14, 10, 11, - 5, 11, 11, 78, 92, 82, 85, 75, 79, 76, 65, 74, - 74, 71, 71, 71, 72, 68, 80, 92, 82, 95, 70, - 74, 2, 67, 0, 10, 1, 65, 2, 9, 67, 73, 1, 86, - 35, 37, 29, 30, 37, 29, 15, 31, 27, 7, 16, 14, - 4, 1, 69, 11, 5, 7, 8, 4, 64, 8, 3, 69, 0, 66, - 71, 66, 89, 52, 54, 50, 53, 50, 47, 47, 47, - 44, 35, 35, 31, 21, 17, 65, 34, 28, 11, 36, - 26, 26, 21, 17, 13, 14, 6, 68, 64, 69, 84, 82, - 99, 67, 29, 19, 13, 4, 5, 64, 69, 72, 80, 2, - 42, 28, 22, 17, 18, 5, 66, 69, 74, 77, 26, 15, - 9, 3, 5, 66, 71, 77, 89, 83, 3, 65, 65, 69, - 70, 80, 83, 94, 68, 36, 20, 13, 5, 8, 67, 71, - 74, 80, 62, 85, 76, 69, 66, 69, 1, 6, 7, 69, - 5, 10, 8, 77, 71, 71, 8, 10, 10, 7, 17, 20, - 18, 4, 10, 16, 14, 73, 66, 74, 89, 83, 77, 79, - 75, 76, 74, 72, 70, 73, 72, 68, 69, 74, 81, - 90, 78, 97, 76, 68, 70, 2, 69, 65, 7, 65, 66, - 66, 4, 68, 69, 84, 40, 37, 39, 35, 29, 37, 33, - 30, 26, 25, 26, 21, 3, 3, 67, 18, 18, 12, 0, - 8, 6, 66, 68, 71, 74, 77, 90, 79, 94, 56, 55, - 51, 50, 43, 41, 38, 31, 31, 27, 24, 16, 11, 1, - 73, 32, 33, 7, 34, 37, 26, 20, 22, 18, 14, 17, - 11, 6, 64, 66, 73, 88, 6, 67, 79, 99, 88, 92, - 71, 74, 72, 23, 0, 0, 68, 10, 36, 23, 42, 3, - 49, 46, 31, 19, 8, 4, 86, 93, 104, 71, 42, 28, - 19, 9, 11, 2, 65, 68, 81, 89, 81, 72, 75, 66, - 2, 68, 69, 2, 5, 6, 3, 10, 11, 2, 49, 46, 38, - 31, 26, 20, 2, 70, 83 }, - - { - - 53, - 7, 77, 53, 7, 77, 92, 75, 18, 11, 4, 2, 33, - 37, 53, 14, 71, 0, 2, 12, 0, 64, 68, 71, 86, - 9, 27, 99, 110, 115, 69, 79, 68, 2, 12, 0, 78, - 73, 10, 7, 65, 73, 82, 1, 75, 79, 90, 5, 72, - 81, 3, 74, 77, 88, 5, 67, 69, 73, 0, 4, 22, 0, - 0, 0, 71, 91, 97, 0, 6, 65, 52, 7, 69, 105, - 85, 82, 65, 80, 93, 88, 97, 72, 93, 87, 89, - 101, 100, 102, 101, 15, 65, 65, 87, 66, 83, - 77, 89, 72, 89, 82, 102, 12, 75, 67, 97, 84, - 73, 73, 64, 5, 0, 69, 10, 7, 71, 1, 0, 65, 2, - 75, 12, 3, 16, 19, 12, 17, 17, 13, 8, 11, 5, - 9, 10, 79, 91, 81, 84, 74, 79, 75, 64, 73, 74, - 70, 70, 71, 72, 67, 81, 92, 81, 95, 70, 74, 2, - 67, 64, 11, 1, 65, 0, 10, 68, 74, 1, 87, 33, - 36, 28, 29, 36, 28, 14, 30, 27, 5, 15, 13, 4, - 1, 69, 10, 5, 6, 8, 3, 65, 7, 2, 71, 64, 67, - 72, 67, 89, 50, 53, 48, 51, 48, 45, 44, 45, - 41, 33, 33, 28, 18, 15, 68, 32, 27, 9, 33, 24, - 24, 19, 14, 11, 11, 4, 70, 65, 70, 86, 83, 99, - 67, 29, 20, 13, 4, 5, 64, 69, 72, 79, 3, 43, - 28, 22, 17, 19, 5, 65, 69, 73, 77, 27, 16, 9, - 3, 5, 66, 71, 76, 88, 83, 4, 65, 65, 69, 69, - 79, 83, 93, 68, 37, 20, 13, 5, 9, 66, 71, 73, - 79, 62, 85, 76, 69, 66, 69, 1, 6, 7, 68, 5, - 10, 9, 77, 71, 71, 7, 10, 9, 6, 16, 19, 18, 2, - 9, 15, 14, 74, 67, 75, 89, 83, 76, 79, 75, 76, - 73, 71, 71, 73, 72, 68, 70, 74, 81, 90, 77, - 97, 76, 67, 70, 2, 69, 65, 8, 65, 67, 66, 5, - 68, 70, 85, 39, 37, 39, 34, 28, 36, 32, 29, - 25, 24, 25, 20, 2, 2, 68, 16, 16, 10, 65, 7, - 5, 67, 69, 71, 74, 77, 90, 80, 94, 53, 52, 49, - 47, 40, 39, 36, 28, 29, 25, 22, 14, 9, 0, 74, - 30, 31, 6, 32, 35, 24, 18, 19, 16, 12, 15, 9, - 4, 66, 68, 75, 89, 4, 69, 81, 98, 87, 91, 71, - 73, 71, 25, 1, 1, 68, 11, 37, 24, 43, 3, 48, - 44, 28, 16, 5, 1, 89, 95, 105, 71, 42, 28, 19, - 9, 11, 2, 65, 68, 80, 88, 80, 71, 75, 65, 3, - 67, 68, 3, 6, 7, 4, 11, 12, 2, 47, 44, 36, 29, - 24, 18, 0, 72, 84 }, - - { - - 52, - 7, 77, 52, 7, 77, 90, 73, 18, 11, 3, 0, 31, - 36, 53, 14, 69, 0, 3, 13, 0, 64, 67, 72, 87, - 9, 25, 101, 111, 115, 66, 77, 68, 3, 13, 0, - 78, 72, 10, 7, 65, 73, 81, 1, 76, 79, 90, 5, - 72, 80, 3, 74, 77, 88, 6, 67, 68, 73, 1, 4, - 22, 0, 0, 0, 71, 91, 97, 1, 5, 65, 52, 7, 69, - 104, 84, 82, 64, 79, 91, 86, 95, 71, 91, 86, - 87, 100, 99, 101, 100, 16, 65, 64, 86, 66, 82, - 76, 87, 72, 89, 81, 100, 13, 75, 66, 96, 83, - 72, 73, 64, 6, 1, 68, 11, 8, 71, 1, 0, 65, 2, - 75, 12, 2, 15, 19, 11, 17, 17, 13, 6, 11, 4, - 8, 9, 80, 90, 80, 83, 73, 78, 74, 0, 72, 73, - 69, 69, 71, 72, 67, 82, 91, 80, 95, 69, 74, 3, - 67, 65, 12, 1, 65, 64, 11, 68, 75, 1, 87, 32, - 35, 28, 28, 35, 27, 13, 30, 27, 4, 14, 13, 4, - 1, 70, 10, 4, 5, 7, 2, 66, 7, 1, 73, 65, 68, - 73, 68, 89, 48, 52, 46, 49, 47, 43, 42, 43, - 39, 31, 31, 26, 16, 13, 70, 30, 25, 7, 31, 22, - 22, 17, 12, 9, 8, 2, 73, 66, 72, 87, 83, 99, - 67, 29, 20, 13, 4, 5, 64, 69, 72, 79, 3, 43, - 28, 22, 17, 20, 6, 64, 69, 72, 76, 28, 17, 9, - 4, 6, 65, 70, 76, 87, 82, 6, 64, 65, 68, 68, - 78, 82, 92, 67, 37, 21, 13, 5, 10, 65, 70, 72, - 78, 62, 85, 76, 68, 66, 69, 1, 6, 7, 68, 5, - 11, 9, 77, 71, 71, 6, 11, 8, 5, 15, 19, 18, 1, - 8, 15, 14, 75, 68, 75, 88, 82, 75, 78, 74, 75, - 73, 70, 71, 73, 72, 68, 71, 74, 81, 89, 76, - 97, 76, 67, 70, 3, 69, 65, 9, 65, 67, 66, 6, - 69, 70, 85, 38, 37, 38, 34, 27, 35, 31, 28, - 25, 23, 24, 19, 1, 1, 69, 15, 15, 9, 67, 6, 4, - 68, 70, 72, 74, 76, 90, 80, 93, 51, 50, 47, - 45, 38, 37, 34, 26, 27, 23, 20, 12, 7, 65, 75, - 28, 29, 5, 30, 33, 22, 16, 17, 14, 10, 13, 7, - 1, 68, 70, 77, 90, 2, 71, 82, 97, 85, 90, 70, - 72, 70, 27, 2, 2, 68, 12, 39, 26, 45, 4, 46, - 42, 26, 13, 3, 65, 91, 97, 106, 71, 42, 28, - 19, 9, 11, 2, 65, 68, 80, 87, 79, 70, 74, 64, - 4, 67, 67, 4, 7, 8, 4, 11, 12, 2, 46, 43, 35, - 28, 22, 16, 65, 74, 85 }, - - { - - 51, - 7, 78, 51, 7, 78, 88, 72, 19, 11, 3, 64, 30, - 35, 53, 14, 67, 0, 3, 14, 0, 65, 67, 73, 88, - 8, 24, 102, 112, 116, 0, 76, 68, 3, 14, 0, 77, - 71, 11, 6, 64, 72, 80, 0, 76, 79, 90, 5, 71, - 80, 3, 74, 76, 88, 6, 67, 68, 73, 1, 4, 22, 0, - 0, 0, 70, 91, 97, 1, 5, 66, 52, 7, 69, 103, - 84, 82, 64, 78, 89, 84, 94, 70, 89, 85, 85, - 99, 98, 100, 99, 17, 65, 0, 86, 65, 82, 76, - 85, 72, 88, 81, 99, 13, 75, 66, 94, 83, 71, - 72, 64, 6, 1, 67, 11, 8, 72, 1, 0, 65, 2, 75, - 12, 2, 15, 19, 10, 17, 17, 13, 4, 11, 4, 6, 8, - 81, 90, 79, 83, 73, 77, 74, 1, 72, 73, 69, 67, - 71, 72, 67, 83, 91, 79, 95, 69, 74, 4, 66, 66, - 12, 1, 65, 65, 12, 69, 76, 1, 88, 30, 34, 27, - 28, 34, 27, 13, 29, 26, 3, 13, 13, 4, 1, 70, - 9, 3, 4, 6, 2, 67, 6, 1, 75, 66, 68, 74, 69, - 89, 47, 50, 45, 47, 45, 41, 40, 41, 36, 28, - 29, 23, 13, 10, 73, 28, 23, 6, 29, 19, 19, 14, - 10, 6, 6, 64, 75, 67, 74, 88, 84, 99, 66, 30, - 20, 14, 4, 5, 64, 69, 72, 78, 3, 43, 29, 22, - 17, 21, 6, 64, 68, 72, 75, 29, 17, 10, 4, 7, - 65, 70, 75, 86, 81, 7, 0, 64, 68, 68, 78, 81, - 90, 67, 37, 21, 13, 6, 10, 65, 69, 72, 77, 62, - 84, 75, 68, 66, 69, 1, 6, 7, 68, 6, 11, 10, - 77, 71, 72, 6, 11, 7, 4, 14, 18, 18, 0, 7, 15, - 14, 75, 69, 76, 87, 81, 74, 78, 74, 75, 72, - 70, 71, 72, 71, 67, 71, 74, 81, 89, 75, 97, - 76, 67, 70, 4, 69, 65, 10, 66, 67, 66, 6, 70, - 70, 86, 37, 36, 38, 33, 26, 35, 31, 27, 24, - 23, 23, 18, 0, 0, 70, 13, 14, 7, 69, 4, 2, 69, - 70, 72, 74, 76, 89, 81, 92, 49, 48, 45, 43, - 35, 35, 32, 23, 25, 20, 18, 9, 5, 66, 75, 27, - 28, 3, 28, 30, 20, 14, 15, 12, 8, 10, 5, 64, - 70, 72, 78, 92, 0, 73, 84, 96, 84, 89, 69, 71, - 69, 28, 3, 3, 68, 13, 40, 27, 46, 5, 45, 41, - 23, 10, 0, 67, 94, 99, 108, 70, 42, 28, 19, 9, - 11, 2, 65, 68, 79, 86, 79, 69, 73, 0, 4, 66, - 66, 4, 7, 8, 4, 12, 12, 2, 45, 41, 33, 26, 21, - 15, 68, 75, 86 }, - - { - - 50, - 7, 78, 50, 7, 78, 86, 70, 19, 11, 2, 66, 28, - 33, 53, 14, 64, 64, 4, 14, 0, 66, 67, 74, 89, - 8, 22, 104, 113, 116, 3, 75, 68, 4, 14, 0, 77, - 70, 11, 6, 64, 72, 80, 0, 77, 78, 90, 5, 71, - 79, 2, 74, 76, 88, 7, 66, 68, 72, 2, 4, 22, 0, - 0, 0, 70, 91, 97, 2, 4, 66, 52, 7, 69, 102, - 83, 82, 0, 76, 88, 82, 92, 69, 88, 83, 83, 98, - 97, 99, 99, 18, 65, 1, 85, 65, 81, 75, 83, 72, - 88, 80, 98, 13, 74, 65, 93, 82, 71, 72, 0, 6, - 1, 66, 12, 9, 72, 0, 0, 65, 2, 75, 12, 1, 14, - 19, 10, 17, 17, 12, 2, 11, 3, 4, 7, 82, 89, - 78, 82, 72, 76, 73, 2, 71, 72, 68, 66, 71, 72, - 66, 84, 90, 78, 95, 69, 74, 4, 66, 67, 13, 1, - 65, 67, 13, 69, 77, 1, 89, 29, 33, 27, 27, 33, - 26, 12, 28, 26, 2, 12, 13, 4, 1, 71, 8, 3, 3, - 6, 1, 68, 5, 0, 77, 67, 69, 75, 70, 89, 45, - 49, 43, 45, 43, 39, 37, 39, 34, 26, 27, 21, - 11, 8, 75, 26, 22, 4, 26, 17, 17, 12, 7, 4, 3, - 66, 78, 68, 75, 90, 85, 99, 66, 30, 21, 14, 4, - 5, 64, 69, 72, 78, 4, 44, 29, 22, 17, 22, 7, - 0, 68, 71, 74, 30, 18, 10, 4, 8, 64, 69, 75, - 85, 81, 8, 0, 64, 68, 67, 77, 81, 89, 66, 38, - 21, 13, 6, 11, 64, 68, 71, 76, 62, 84, 75, 67, - 66, 69, 1, 6, 7, 67, 6, 11, 10, 77, 71, 72, 5, - 12, 6, 3, 13, 17, 18, 64, 6, 14, 14, 76, 70, - 76, 86, 81, 73, 77, 73, 74, 72, 69, 71, 72, - 71, 67, 72, 74, 81, 88, 74, 97, 76, 66, 70, 4, - 69, 65, 11, 66, 67, 66, 7, 70, 71, 87, 36, 36, - 37, 32, 25, 34, 30, 26, 23, 22, 22, 17, 64, - 64, 71, 12, 12, 6, 71, 3, 1, 70, 71, 73, 74, - 76, 89, 81, 91, 47, 46, 43, 40, 32, 33, 30, - 21, 23, 18, 16, 7, 3, 68, 76, 25, 26, 2, 26, - 28, 18, 12, 13, 10, 6, 8, 3, 67, 72, 74, 80, - 93, 65, 75, 85, 95, 83, 88, 69, 70, 68, 30, 4, - 4, 68, 14, 42, 29, 48, 5, 43, 39, 21, 7, 66, - 70, 97, 101, 109, 70, 42, 28, 19, 9, 11, 2, - 65, 68, 79, 85, 78, 68, 72, 1, 5, 66, 65, 5, - 8, 9, 5, 12, 13, 2, 43, 40, 31, 24, 19, 13, - 70, 77, 87 }, - - { - - 48, - 6, 78, 48, 6, 78, 85, 69, 19, 11, 2, 67, 27, - 32, 53, 14, 1, 64, 5, 15, 0, 67, 67, 75, 91, - 7, 20, 106, 114, 117, 5, 74, 68, 5, 15, 0, 77, - 69, 11, 5, 64, 72, 79, 64, 77, 78, 91, 5, 71, - 79, 2, 75, 76, 88, 7, 66, 68, 72, 2, 4, 22, 0, - 0, 0, 69, 92, 97, 2, 3, 66, 52, 7, 69, 101, - 82, 82, 0, 75, 86, 80, 91, 68, 86, 82, 82, 97, - 97, 98, 98, 18, 65, 2, 84, 65, 81, 75, 82, 72, - 88, 80, 97, 13, 74, 65, 92, 82, 70, 72, 0, 6, - 1, 66, 12, 9, 73, 0, 0, 65, 2, 75, 12, 1, 13, - 19, 9, 17, 17, 12, 0, 11, 3, 2, 6, 83, 88, 77, - 81, 71, 76, 73, 3, 71, 72, 67, 65, 71, 72, 66, - 86, 90, 77, 95, 69, 75, 5, 66, 68, 14, 1, 65, - 68, 14, 70, 78, 1, 90, 27, 32, 26, 26, 32, 25, - 11, 27, 25, 0, 11, 12, 4, 1, 71, 7, 2, 2, 5, - 0, 69, 4, 64, 79, 69, 70, 76, 71, 89, 43, 47, - 41, 43, 41, 37, 35, 37, 31, 23, 25, 18, 8, 5, - 78, 24, 20, 2, 24, 15, 14, 9, 5, 1, 0, 68, 80, - 69, 77, 91, 86, 100, 66, 30, 21, 14, 4, 5, 64, - 69, 72, 77, 4, 44, 29, 22, 17, 23, 7, 0, 68, - 71, 74, 31, 18, 10, 4, 8, 64, 69, 74, 84, 80, - 9, 1, 64, 68, 66, 76, 80, 88, 66, 38, 21, 13, - 6, 12, 64, 68, 70, 76, 62, 84, 75, 67, 66, 69, - 1, 6, 7, 67, 6, 11, 11, 77, 71, 72, 4, 12, 5, - 2, 12, 16, 18, 66, 4, 14, 14, 77, 71, 77, 86, - 80, 72, 77, 73, 74, 71, 68, 72, 72, 71, 67, - 73, 74, 81, 88, 74, 98, 76, 66, 70, 5, 69, 65, - 11, 66, 68, 66, 8, 71, 71, 88, 35, 35, 37, 31, - 23, 33, 29, 25, 22, 21, 21, 16, 65, 65, 72, - 10, 11, 4, 73, 1, 0, 71, 72, 73, 74, 76, 89, - 82, 91, 44, 43, 41, 38, 29, 30, 27, 18, 21, - 16, 14, 4, 1, 69, 77, 23, 24, 0, 24, 26, 15, - 9, 10, 7, 4, 6, 0, 69, 74, 77, 82, 94, 67, 77, - 87, 94, 82, 87, 68, 69, 68, 31, 5, 4, 68, 14, - 43, 30, 49, 6, 42, 37, 18, 4, 69, 73, 100, - 103, 110, 70, 42, 28, 19, 9, 11, 2, 65, 68, - 78, 85, 77, 67, 72, 2, 5, 65, 65, 5, 8, 9, 5, - 13, 13, 1, 42, 38, 29, 22, 17, 11, 72, 79, 88 }, - - { - - 47, - 6, 78, 47, 6, 78, 83, 68, 20, 11, 2, 68, 26, - 31, 53, 14, 3, 64, 6, 16, 0, 67, 66, 76, 92, - 6, 18, 107, 115, 118, 8, 72, 68, 6, 16, 0, 76, - 68, 12, 4, 64, 71, 78, 64, 77, 78, 91, 5, 71, - 78, 2, 75, 76, 88, 7, 66, 67, 72, 2, 4, 22, 0, - 0, 0, 68, 92, 97, 2, 2, 66, 52, 7, 69, 100, - 81, 82, 0, 74, 84, 78, 89, 66, 84, 81, 80, 96, - 96, 97, 97, 19, 64, 3, 83, 65, 80, 74, 80, 72, - 87, 80, 95, 14, 74, 65, 90, 82, 69, 72, 0, 7, - 2, 65, 12, 9, 73, 0, 1, 65, 2, 74, 12, 1, 13, - 19, 8, 17, 17, 12, 65, 11, 3, 1, 5, 83, 87, - 76, 80, 70, 75, 72, 4, 70, 72, 66, 64, 71, 72, - 66, 87, 89, 76, 95, 68, 75, 6, 66, 69, 15, 1, - 65, 69, 15, 71, 79, 1, 90, 26, 31, 26, 25, 31, - 24, 11, 27, 25, 64, 10, 12, 4, 1, 71, 7, 1, 1, - 4, 64, 70, 4, 64, 80, 70, 70, 77, 72, 89, 42, - 46, 40, 42, 40, 35, 33, 35, 29, 21, 23, 16, 5, - 3, 81, 23, 18, 1, 22, 13, 12, 7, 3, 64, 65, - 70, 82, 69, 79, 92, 86, 100, 66, 31, 21, 14, - 5, 5, 64, 68, 72, 76, 4, 44, 29, 23, 17, 24, - 8, 1, 67, 70, 73, 32, 19, 11, 5, 9, 0, 69, 73, - 83, 79, 11, 2, 0, 67, 65, 75, 79, 87, 65, 38, - 22, 14, 6, 13, 0, 67, 69, 75, 62, 83, 74, 66, - 66, 69, 1, 7, 8, 67, 6, 12, 12, 77, 71, 72, 4, - 12, 4, 2, 11, 16, 18, 67, 3, 14, 14, 77, 72, - 78, 85, 79, 71, 77, 72, 74, 70, 67, 72, 72, - 71, 66, 73, 74, 81, 88, 73, 98, 76, 66, 70, 6, - 69, 65, 12, 66, 68, 66, 9, 72, 71, 88, 34, 35, - 37, 31, 22, 32, 28, 24, 22, 20, 20, 16, 65, - 66, 73, 9, 10, 2, 75, 0, 64, 71, 72, 73, 73, - 75, 89, 83, 90, 42, 41, 39, 36, 27, 28, 25, - 16, 19, 14, 12, 2, 64, 70, 78, 21, 23, 64, 22, - 24, 13, 7, 8, 5, 2, 4, 65, 71, 75, 79, 84, 95, - 69, 79, 89, 93, 80, 85, 67, 68, 67, 33, 6, 5, - 68, 15, 45, 31, 51, 7, 41, 36, 16, 1, 71, 76, - 102, 105, 111, 70, 42, 28, 19, 9, 12, 2, 65, - 68, 77, 84, 76, 66, 71, 4, 6, 64, 64, 6, 9, - 10, 5, 14, 13, 1, 41, 37, 28, 21, 15, 9, 74, - 81, 88 }, - - { - - 46, - 6, 78, 46, 6, 78, 81, 66, 20, 11, 1, 70, 24, - 29, 53, 14, 6, 65, 7, 16, 0, 68, 66, 77, 93, - 6, 16, 109, 116, 118, 11, 71, 68, 7, 16, 0, - 76, 67, 12, 4, 64, 71, 78, 64, 78, 77, 91, 5, - 71, 77, 1, 75, 76, 88, 8, 65, 67, 71, 3, 4, - 22, 0, 0, 0, 68, 92, 97, 3, 1, 66, 52, 7, 69, - 99, 80, 82, 1, 72, 83, 76, 88, 65, 83, 79, 78, - 95, 95, 96, 97, 20, 64, 4, 82, 65, 80, 73, 78, - 72, 87, 79, 94, 14, 73, 64, 89, 81, 69, 72, 1, - 7, 2, 64, 13, 10, 74, 64, 1, 65, 2, 74, 12, 0, - 12, 19, 8, 17, 17, 11, 67, 11, 2, 64, 4, 84, - 86, 75, 79, 69, 74, 71, 5, 69, 71, 65, 0, 71, - 72, 65, 88, 89, 75, 95, 68, 75, 6, 66, 70, 16, - 1, 65, 71, 16, 71, 80, 1, 91, 24, 30, 25, 24, - 30, 23, 10, 26, 25, 65, 9, 12, 4, 1, 72, 6, 1, - 0, 4, 65, 71, 3, 65, 82, 71, 71, 78, 73, 89, - 40, 45, 38, 40, 38, 33, 30, 33, 26, 19, 21, - 13, 3, 1, 83, 21, 17, 64, 19, 11, 10, 5, 0, - 66, 68, 72, 85, 70, 80, 94, 87, 100, 66, 31, - 22, 14, 5, 5, 64, 68, 72, 76, 5, 45, 29, 23, - 17, 25, 8, 2, 67, 69, 72, 33, 20, 11, 5, 10, - 0, 68, 73, 82, 79, 12, 2, 0, 67, 64, 74, 79, - 86, 65, 39, 22, 14, 6, 14, 1, 66, 68, 74, 62, - 83, 74, 66, 66, 69, 1, 7, 8, 66, 6, 12, 12, - 77, 71, 72, 3, 13, 3, 1, 10, 15, 18, 68, 2, - 13, 14, 78, 73, 78, 84, 79, 70, 76, 72, 73, - 70, 66, 72, 72, 71, 66, 74, 74, 81, 87, 72, - 98, 76, 65, 70, 6, 69, 65, 13, 66, 68, 66, 10, - 72, 72, 89, 33, 35, 36, 30, 21, 31, 27, 23, - 21, 19, 19, 15, 66, 67, 74, 7, 8, 1, 77, 64, - 65, 72, 73, 74, 73, 75, 89, 83, 89, 40, 39, - 37, 33, 24, 26, 23, 13, 17, 12, 10, 0, 66, 72, - 79, 19, 21, 65, 20, 22, 11, 5, 6, 3, 0, 2, 67, - 74, 77, 81, 86, 96, 71, 81, 90, 92, 79, 84, - 67, 67, 66, 35, 7, 6, 68, 16, 46, 33, 52, 7, - 39, 34, 13, 65, 74, 79, 105, 107, 112, 70, 42, - 28, 19, 9, 12, 2, 65, 68, 77, 83, 75, 65, 70, - 5, 7, 64, 0, 7, 10, 11, 6, 14, 14, 1, 39, 35, - 26, 19, 13, 7, 76, 83, 89 }, - - { - - 45, - 6, 79, 45, 6, 79, 79, 65, 21, 11, 1, 71, 23, - 28, 53, 14, 8, 65, 7, 17, 0, 69, 66, 78, 94, - 5, 15, 110, 117, 119, 14, 70, 68, 7, 17, 0, - 75, 66, 13, 3, 0, 70, 77, 65, 78, 77, 91, 5, - 70, 77, 1, 75, 75, 88, 8, 65, 67, 71, 3, 4, - 22, 0, 0, 0, 67, 92, 97, 3, 1, 67, 52, 7, 69, - 98, 80, 82, 1, 71, 81, 74, 86, 64, 81, 78, 76, - 94, 94, 95, 96, 21, 64, 5, 82, 64, 79, 73, 76, - 72, 86, 79, 93, 14, 73, 64, 87, 81, 68, 71, 1, - 7, 2, 0, 13, 10, 74, 64, 1, 65, 2, 74, 12, 0, - 12, 19, 7, 17, 17, 11, 69, 11, 2, 66, 3, 85, - 86, 74, 79, 69, 73, 71, 6, 69, 71, 65, 2, 71, - 72, 65, 89, 88, 74, 95, 68, 75, 7, 65, 71, 16, - 1, 65, 72, 17, 72, 81, 1, 92, 23, 29, 25, 24, - 29, 23, 10, 25, 24, 66, 8, 12, 4, 1, 72, 5, 0, - 64, 3, 65, 72, 2, 65, 84, 72, 71, 79, 74, 89, - 39, 43, 37, 38, 36, 31, 28, 31, 24, 16, 19, - 11, 0, 65, 86, 19, 15, 65, 17, 8, 7, 2, 65, - 69, 70, 75, 87, 71, 82, 95, 88, 100, 65, 32, - 22, 15, 5, 5, 64, 68, 72, 75, 5, 45, 30, 23, - 17, 26, 9, 2, 66, 69, 71, 34, 20, 12, 5, 11, - 1, 68, 72, 81, 78, 13, 3, 1, 67, 64, 74, 78, - 84, 64, 39, 22, 14, 7, 14, 1, 65, 68, 73, 62, - 82, 73, 65, 66, 69, 1, 7, 8, 66, 7, 12, 13, - 77, 71, 73, 3, 13, 2, 0, 9, 14, 18, 69, 1, 13, - 14, 78, 74, 79, 83, 78, 69, 76, 71, 73, 69, - 66, 72, 71, 70, 65, 74, 74, 81, 87, 71, 98, - 76, 65, 70, 7, 69, 65, 14, 67, 68, 66, 10, 73, - 72, 90, 32, 34, 36, 29, 20, 31, 27, 22, 20, - 19, 18, 14, 67, 68, 75, 6, 7, 64, 79, 66, 67, - 73, 73, 74, 73, 75, 88, 84, 88, 38, 37, 35, - 31, 21, 24, 21, 11, 15, 9, 8, 66, 68, 73, 79, - 18, 20, 67, 18, 19, 9, 3, 4, 1, 65, 64, 69, - 76, 79, 83, 87, 98, 73, 83, 92, 91, 78, 83, - 66, 66, 65, 36, 8, 7, 68, 17, 48, 34, 54, 8, - 38, 33, 11, 68, 77, 81, 108, 109, 114, 69, 42, - 28, 19, 9, 12, 2, 65, 68, 76, 82, 75, 64, 69, - 6, 7, 0, 1, 7, 10, 11, 6, 15, 14, 1, 38, 34, - 24, 17, 12, 6, 79, 84, 90 }, - - { - - 43, - 6, 79, 43, 6, 79, 78, 0, 21, 11, 0, 73, 21, - 27, 53, 14, 10, 65, 8, 18, 0, 70, 66, 79, 95, - 5, 13, 112, 118, 119, 17, 69, 68, 8, 18, 0, - 75, 65, 13, 3, 0, 70, 76, 65, 79, 77, 91, 5, - 70, 76, 1, 76, 75, 88, 9, 65, 67, 71, 4, 4, - 22, 0, 0, 0, 67, 93, 97, 4, 0, 67, 52, 7, 69, - 97, 79, 82, 2, 70, 79, 72, 85, 0, 79, 77, 74, - 93, 94, 94, 95, 21, 64, 6, 81, 64, 79, 72, 74, - 72, 86, 78, 92, 14, 73, 0, 86, 80, 67, 71, 1, - 7, 2, 0, 14, 11, 75, 64, 1, 65, 2, 74, 12, 64, - 11, 19, 6, 17, 17, 11, 71, 11, 1, 68, 2, 86, - 85, 73, 78, 68, 73, 70, 7, 68, 70, 64, 3, 71, - 72, 65, 90, 88, 73, 95, 68, 75, 8, 65, 72, 17, - 1, 65, 73, 18, 72, 82, 1, 93, 21, 28, 24, 23, - 28, 22, 9, 24, 24, 68, 7, 11, 4, 1, 73, 4, 64, - 65, 2, 66, 73, 1, 66, 86, 73, 72, 80, 75, 89, - 37, 42, 35, 36, 34, 29, 26, 29, 21, 14, 17, 8, - 65, 67, 88, 17, 13, 67, 15, 6, 5, 0, 67, 71, - 73, 77, 90, 72, 84, 96, 89, 100, 65, 32, 22, - 15, 5, 5, 64, 68, 72, 75, 5, 45, 30, 23, 17, - 27, 9, 3, 66, 68, 71, 35, 21, 12, 5, 11, 1, - 67, 72, 80, 77, 14, 4, 1, 67, 0, 73, 77, 83, - 64, 39, 22, 14, 7, 15, 2, 65, 67, 72, 62, 82, - 73, 65, 66, 69, 1, 7, 8, 66, 7, 12, 13, 77, - 71, 73, 2, 14, 1, 64, 8, 13, 18, 71, 0, 13, - 14, 79, 75, 79, 83, 77, 68, 75, 71, 72, 69, - 65, 73, 71, 70, 65, 75, 74, 81, 86, 70, 98, - 76, 65, 70, 8, 69, 65, 15, 67, 69, 66, 11, 74, - 72, 91, 31, 34, 35, 28, 19, 30, 26, 21, 19, - 18, 17, 13, 68, 69, 76, 4, 6, 65, 81, 67, 68, - 74, 74, 75, 73, 75, 88, 84, 88, 35, 34, 33, - 29, 18, 22, 19, 8, 13, 7, 6, 68, 70, 75, 80, - 16, 18, 68, 16, 17, 7, 1, 1, 64, 67, 66, 71, - 79, 81, 85, 89, 99, 75, 85, 93, 90, 77, 82, - 65, 65, 64, 38, 9, 8, 68, 18, 49, 36, 55, 9, - 36, 31, 8, 71, 80, 84, 111, 111, 115, 69, 42, - 28, 19, 9, 12, 2, 65, 68, 76, 81, 74, 0, 69, - 7, 8, 0, 2, 8, 11, 12, 6, 15, 14, 1, 37, 32, - 22, 15, 10, 4, 81, 86, 91 }, - - { - - 42, - 6, 79, 42, 6, 79, 76, 1, 21, 11, 0, 74, 20, - 25, 53, 14, 13, 66, 9, 18, 0, 70, 65, 80, 96, - 4, 11, 114, 119, 120, 20, 67, 68, 9, 18, 0, - 75, 64, 13, 2, 0, 70, 76, 65, 79, 76, 91, 5, - 70, 75, 0, 76, 75, 88, 9, 64, 66, 70, 4, 4, - 22, 0, 0, 0, 66, 93, 97, 4, 64, 67, 52, 7, 69, - 96, 78, 82, 2, 68, 78, 70, 83, 1, 78, 75, 72, - 92, 93, 93, 95, 22, 64, 7, 80, 64, 78, 71, 72, - 72, 86, 78, 90, 15, 72, 0, 85, 80, 67, 71, 2, - 8, 3, 1, 14, 11, 75, 65, 1, 65, 2, 74, 12, 64, - 10, 19, 6, 17, 17, 10, 73, 11, 1, 69, 1, 87, - 84, 72, 77, 67, 72, 69, 8, 67, 70, 0, 4, 71, - 72, 64, 91, 87, 72, 95, 67, 75, 8, 65, 73, 18, - 1, 65, 75, 19, 73, 83, 1, 93, 20, 27, 24, 22, - 27, 21, 8, 24, 24, 69, 6, 11, 4, 1, 73, 4, 64, - 66, 2, 67, 74, 1, 67, 88, 74, 73, 81, 76, 89, - 35, 41, 33, 34, 33, 27, 23, 27, 19, 12, 15, 6, - 68, 69, 91, 15, 12, 69, 12, 4, 3, 65, 70, 73, - 76, 79, 92, 73, 85, 98, 89, 100, 65, 32, 23, - 15, 5, 5, 64, 68, 72, 74, 6, 46, 30, 23, 17, - 28, 10, 4, 66, 67, 70, 36, 22, 12, 6, 12, 2, - 67, 71, 79, 77, 16, 4, 1, 66, 1, 72, 77, 82, - 0, 40, 23, 14, 7, 16, 3, 64, 66, 71, 62, 82, - 73, 64, 66, 69, 1, 7, 8, 65, 7, 13, 14, 77, - 71, 73, 1, 14, 0, 65, 7, 13, 18, 72, 64, 12, - 14, 80, 76, 80, 82, 77, 67, 75, 70, 72, 68, - 64, 73, 71, 70, 65, 76, 74, 81, 86, 69, 98, - 76, 64, 70, 8, 69, 65, 16, 67, 69, 66, 12, 74, - 73, 91, 30, 34, 35, 28, 18, 29, 25, 20, 19, - 17, 16, 12, 69, 70, 77, 3, 4, 67, 83, 68, 69, - 75, 75, 75, 73, 74, 88, 85, 87, 33, 32, 31, - 26, 16, 20, 17, 6, 11, 5, 4, 70, 72, 76, 81, - 14, 16, 69, 14, 15, 5, 64, 64, 66, 69, 68, 73, - 81, 83, 87, 91, 100, 77, 87, 95, 89, 75, 81, - 65, 64, 0, 40, 10, 9, 68, 19, 51, 37, 57, 9, - 35, 29, 6, 74, 82, 87, 113, 113, 116, 69, 42, - 28, 19, 9, 12, 2, 65, 68, 75, 80, 73, 1, 68, - 8, 9, 1, 3, 9, 12, 13, 7, 16, 15, 1, 35, 31, - 21, 14, 8, 2, 83, 88, 92 }, - - { - - 41, - 6, 79, 41, 6, 79, 74, 3, 22, 11, 64, 76, 18, - 24, 53, 14, 15, 66, 10, 19, 0, 71, 65, 81, 97, - 4, 9, 115, 120, 120, 23, 66, 68, 10, 19, 0, - 74, 0, 14, 2, 0, 69, 75, 66, 80, 76, 91, 5, - 70, 75, 0, 76, 75, 88, 10, 64, 66, 70, 5, 4, - 22, 0, 0, 0, 66, 93, 97, 5, 65, 67, 52, 7, 69, - 95, 77, 82, 3, 67, 76, 68, 82, 2, 76, 74, 70, - 91, 92, 92, 94, 23, 64, 8, 79, 64, 78, 71, 70, - 72, 85, 77, 89, 15, 72, 1, 83, 79, 66, 71, 2, - 8, 3, 2, 15, 12, 76, 65, 1, 65, 2, 74, 12, 65, - 10, 19, 5, 17, 17, 10, 75, 11, 0, 71, 0, 88, - 83, 71, 76, 66, 71, 69, 9, 67, 69, 1, 5, 71, - 72, 64, 92, 87, 71, 95, 67, 75, 9, 65, 74, 19, - 1, 65, 76, 20, 73, 84, 1, 94, 18, 26, 23, 21, - 26, 20, 8, 23, 23, 70, 5, 11, 4, 1, 74, 3, 65, - 67, 1, 68, 75, 0, 67, 90, 75, 73, 82, 77, 89, - 34, 39, 32, 32, 31, 25, 21, 25, 16, 9, 13, 3, - 70, 72, 93, 13, 10, 70, 10, 2, 0, 68, 72, 76, - 78, 81, 95, 74, 87, 99, 90, 100, 65, 33, 23, - 15, 5, 5, 64, 68, 72, 74, 6, 46, 30, 23, 17, - 29, 10, 4, 65, 67, 69, 37, 22, 13, 6, 13, 2, - 66, 71, 78, 76, 17, 5, 2, 66, 2, 71, 76, 81, - 0, 40, 23, 14, 7, 17, 3, 0, 65, 70, 62, 81, - 72, 64, 66, 69, 1, 7, 8, 65, 7, 13, 14, 77, - 71, 73, 1, 15, 64, 66, 6, 12, 18, 73, 65, 12, - 14, 80, 77, 80, 81, 76, 66, 74, 70, 71, 68, 0, - 73, 71, 70, 64, 76, 74, 81, 85, 68, 98, 76, - 64, 70, 9, 69, 65, 17, 67, 69, 66, 13, 75, 73, - 92, 29, 33, 34, 27, 17, 28, 24, 19, 18, 16, - 15, 11, 70, 71, 78, 1, 3, 68, 85, 70, 70, 76, - 75, 76, 73, 74, 88, 85, 86, 31, 30, 29, 24, - 13, 18, 15, 3, 9, 3, 2, 73, 74, 78, 82, 12, - 15, 71, 12, 13, 3, 66, 66, 68, 71, 70, 75, 84, - 85, 89, 93, 101, 79, 89, 96, 88, 74, 80, 64, - 0, 1, 41, 11, 10, 68, 20, 52, 39, 58, 10, 33, - 28, 3, 77, 85, 90, 116, 115, 117, 69, 42, 28, - 19, 9, 12, 2, 65, 68, 75, 79, 72, 2, 67, 9, 9, - 1, 4, 9, 12, 13, 7, 16, 15, 1, 34, 29, 19, 12, - 6, 0, 85, 90, 93 }, - - { - - 40, - 6, 79, 40, 6, 79, 72, 4, 22, 11, 64, 77, 17, - 23, 53, 14, 17, 66, 11, 20, 0, 72, 65, 82, 98, - 3, 7, 117, 121, 121, 26, 65, 68, 11, 20, 0, - 74, 1, 14, 1, 0, 69, 74, 66, 80, 76, 91, 5, - 70, 74, 0, 76, 75, 88, 10, 64, 66, 70, 5, 4, - 22, 0, 0, 0, 65, 93, 97, 5, 66, 67, 52, 7, 69, - 94, 76, 82, 3, 66, 74, 66, 80, 3, 74, 73, 68, - 90, 91, 91, 93, 24, 64, 9, 78, 64, 77, 70, 68, - 72, 85, 77, 88, 15, 72, 1, 82, 79, 65, 71, 2, - 8, 3, 3, 15, 12, 76, 65, 1, 65, 2, 74, 12, 65, - 9, 19, 4, 17, 17, 10, 77, 11, 0, 73, 64, 89, - 82, 70, 75, 65, 70, 68, 10, 66, 69, 2, 6, 71, - 72, 64, 93, 86, 70, 95, 67, 75, 10, 65, 75, - 20, 1, 65, 77, 21, 74, 85, 1, 95, 17, 25, 23, - 20, 25, 19, 7, 22, 23, 71, 4, 11, 4, 1, 74, 2, - 66, 68, 0, 69, 76, 64, 68, 92, 76, 74, 83, 78, - 89, 32, 38, 30, 30, 29, 23, 19, 23, 14, 7, 11, - 1, 73, 74, 96, 11, 8, 72, 8, 0, 65, 70, 74, - 78, 81, 83, 97, 75, 89, 100, 91, 100, 65, 33, - 23, 15, 5, 5, 64, 68, 72, 73, 6, 46, 30, 23, - 17, 30, 11, 5, 65, 66, 68, 38, 23, 13, 6, 14, - 3, 66, 70, 77, 75, 18, 6, 2, 66, 3, 70, 75, - 80, 1, 40, 23, 14, 7, 18, 4, 1, 64, 69, 62, - 81, 72, 0, 66, 69, 1, 7, 8, 65, 7, 13, 15, 77, - 71, 73, 0, 15, 65, 67, 5, 11, 18, 74, 66, 12, - 14, 81, 78, 81, 80, 75, 65, 74, 69, 71, 67, 1, - 73, 71, 70, 64, 77, 74, 81, 85, 67, 98, 76, - 64, 70, 10, 69, 65, 18, 67, 69, 66, 14, 76, - 73, 93, 28, 33, 34, 26, 16, 27, 23, 18, 17, - 15, 14, 10, 71, 72, 79, 0, 2, 70, 87, 71, 71, - 77, 76, 76, 73, 74, 88, 86, 85, 29, 28, 27, - 22, 10, 16, 13, 1, 7, 1, 0, 75, 76, 79, 83, - 10, 13, 72, 10, 11, 1, 68, 68, 70, 73, 72, 77, - 86, 87, 91, 95, 102, 81, 91, 98, 87, 73, 79, - 0, 1, 2, 43, 12, 11, 68, 21, 54, 40, 60, 11, - 32, 26, 1, 80, 88, 93, 119, 117, 118, 69, 42, - 28, 19, 9, 12, 2, 65, 68, 74, 78, 71, 3, 66, - 10, 10, 2, 5, 10, 13, 14, 7, 17, 15, 1, 33, - 28, 17, 10, 4, 65, 87, 92, 94 }, - - { - - 38, - 5, 80, 38, 5, 80, 71, 5, 22, 11, 65, 79, 15, - 21, 52, 14, 19, 67, 11, 20, 64, 73, 65, 84, - 100, 2, 5, 119, 122, 122, 28, 64, 69, 11, 20, - 64, 74, 2, 14, 0, 0, 69, 74, 67, 81, 76, 92, - 5, 70, 74, 64, 77, 75, 88, 10, 64, 66, 70, 5, - 3, 22, 0, 0, 0, 65, 94, 97, 5, 67, 68, 52, 6, - 69, 93, 76, 82, 3, 65, 73, 65, 79, 4, 73, 72, - 67, 89, 91, 90, 93, 24, 64, 9, 78, 64, 77, 70, - 67, 72, 85, 77, 87, 15, 72, 1, 81, 79, 65, 71, - 2, 8, 3, 3, 15, 12, 77, 66, 1, 66, 2, 74, 11, - 66, 8, 19, 3, 16, 17, 9, 79, 10, 64, 75, 65, - 90, 82, 70, 75, 65, 70, 68, 11, 66, 69, 2, 7, - 72, 72, 64, 95, 86, 70, 95, 67, 76, 10, 65, - 76, 20, 1, 65, 79, 21, 75, 86, 1, 96, 15, 24, - 22, 19, 24, 18, 6, 21, 22, 73, 3, 10, 3, 1, - 75, 1, 67, 69, 64, 70, 77, 65, 69, 94, 78, 75, - 85, 80, 89, 30, 36, 28, 28, 27, 20, 16, 20, - 11, 4, 8, 65, 76, 77, 99, 9, 6, 74, 5, 66, 68, - 73, 77, 81, 84, 86, 100, 76, 91, 102, 92, 101, - 65, 33, 23, 15, 5, 5, 65, 68, 72, 73, 6, 46, - 30, 23, 17, 31, 11, 5, 65, 66, 68, 38, 23, 13, - 6, 14, 3, 66, 70, 76, 75, 19, 6, 2, 66, 3, 70, - 75, 79, 1, 40, 23, 14, 7, 18, 4, 1, 64, 69, - 62, 81, 72, 0, 66, 69, 1, 7, 8, 65, 7, 13, 15, - 77, 71, 74, 64, 15, 66, 68, 4, 10, 17, 76, 68, - 11, 13, 82, 80, 82, 80, 75, 64, 74, 69, 71, - 67, 1, 74, 71, 70, 64, 78, 74, 81, 85, 67, 99, - 76, 64, 70, 10, 70, 65, 18, 68, 70, 66, 14, - 77, 74, 94, 27, 32, 33, 25, 14, 26, 22, 17, - 16, 14, 13, 9, 72, 74, 81, 65, 0, 72, 89, 73, - 73, 78, 77, 77, 73, 74, 88, 87, 85, 26, 25, - 25, 19, 7, 13, 10, 65, 4, 65, 66, 78, 79, 81, - 84, 8, 11, 74, 8, 8, 65, 71, 71, 73, 75, 75, - 80, 89, 89, 94, 97, 104, 83, 93, 100, 86, 72, - 78, 0, 1, 2, 44, 12, 11, 68, 21, 55, 41, 61, - 11, 30, 24, 65, 84, 91, 96, 122, 120, 120, 69, - 42, 27, 18, 9, 12, 2, 66, 68, 74, 78, 71, 3, - 66, 11, 10, 2, 5, 10, 13, 14, 7, 17, 15, 0, - 31, 26, 15, 8, 2, 67, 90, 94, 95 }, - - { - - 37, - 5, 80, 37, 5, 80, 69, 7, 23, 12, 65, 80, 14, - 20, 52, 14, 22, 67, 12, 21, 64, 73, 64, 85, - 101, 2, 4, 120, 123, 122, 31, 1, 69, 12, 21, - 64, 73, 4, 15, 0, 1, 68, 73, 67, 81, 75, 92, - 5, 69, 73, 64, 77, 74, 88, 11, 0, 65, 69, 6, - 3, 22, 0, 0, 0, 64, 94, 97, 6, 67, 68, 52, 6, - 69, 91, 75, 82, 4, 0, 71, 0, 77, 6, 71, 70, - 65, 87, 90, 89, 92, 25, 0, 10, 77, 0, 76, 69, - 65, 71, 84, 76, 85, 16, 71, 2, 79, 78, 64, 70, - 3, 9, 4, 4, 16, 13, 77, 66, 2, 66, 2, 73, 11, - 66, 8, 19, 3, 16, 17, 9, 80, 10, 64, 76, 66, - 90, 81, 69, 74, 64, 69, 67, 12, 65, 68, 3, 9, - 72, 72, 0, 96, 85, 69, 95, 66, 76, 11, 64, 76, - 21, 1, 65, 80, 22, 75, 87, 1, 96, 14, 24, 22, - 19, 24, 18, 6, 21, 22, 74, 3, 10, 3, 1, 75, 1, - 67, 69, 64, 70, 78, 65, 69, 95, 79, 75, 86, - 81, 89, 29, 35, 27, 27, 26, 18, 14, 18, 9, 2, - 6, 67, 78, 79, 101, 8, 5, 75, 3, 68, 70, 75, - 79, 83, 86, 88, 102, 76, 92, 103, 92, 101, 64, - 34, 24, 16, 6, 5, 65, 67, 71, 72, 7, 47, 31, - 24, 17, 32, 12, 6, 64, 65, 67, 39, 24, 14, 7, - 15, 4, 65, 69, 74, 74, 21, 7, 3, 65, 4, 69, - 74, 77, 2, 41, 24, 15, 8, 19, 5, 2, 0, 68, 62, - 80, 71, 1, 66, 68, 1, 8, 9, 64, 8, 14, 16, 76, - 71, 74, 64, 16, 66, 68, 3, 10, 17, 77, 69, 11, - 13, 82, 81, 82, 79, 74, 0, 73, 68, 70, 66, 2, - 74, 70, 69, 0, 78, 73, 80, 84, 66, 99, 76, 0, - 70, 11, 70, 65, 19, 68, 70, 65, 15, 77, 74, - 94, 27, 32, 33, 25, 13, 26, 22, 17, 16, 14, - 13, 9, 72, 75, 82, 66, 64, 73, 90, 74, 74, 78, - 77, 77, 72, 73, 87, 87, 84, 24, 23, 23, 17, 5, - 11, 8, 67, 2, 67, 68, 80, 81, 82, 84, 7, 10, - 75, 7, 6, 67, 73, 73, 75, 77, 77, 82, 91, 90, - 96, 98, 105, 84, 94, 101, 84, 70, 76, 1, 2, 3, - 46, 13, 12, 68, 22, 57, 43, 62, 12, 29, 23, - 67, 87, 93, 98, 124, 122, 121, 68, 43, 27, 18, - 9, 13, 2, 66, 68, 73, 77, 70, 4, 65, 13, 11, - 3, 6, 11, 14, 15, 8, 18, 16, 0, 30, 25, 14, 7, - 1, 68, 92, 95, 95 }, - - { - - 36, - 5, 80, 36, 5, 80, 67, 8, 23, 12, 65, 81, 13, - 19, 52, 14, 24, 67, 13, 22, 64, 74, 64, 86, - 102, 1, 2, 122, 124, 123, 34, 2, 69, 13, 22, - 64, 73, 5, 15, 64, 1, 68, 72, 67, 81, 75, 92, - 5, 69, 72, 64, 77, 74, 88, 11, 0, 65, 69, 6, - 3, 22, 0, 0, 0, 0, 94, 97, 6, 68, 68, 52, 6, - 69, 90, 74, 82, 4, 1, 69, 2, 76, 7, 69, 69, 0, - 86, 89, 88, 91, 26, 0, 11, 76, 0, 76, 68, 0, - 71, 84, 76, 84, 16, 71, 2, 78, 78, 0, 70, 3, - 9, 4, 5, 16, 13, 78, 66, 2, 66, 2, 73, 11, 66, - 7, 19, 2, 16, 17, 9, 82, 10, 64, 78, 67, 91, - 80, 68, 73, 0, 68, 66, 13, 64, 68, 4, 10, 72, - 72, 0, 97, 85, 68, 95, 66, 76, 12, 64, 77, 22, - 1, 65, 81, 23, 76, 88, 1, 97, 12, 23, 21, 18, - 23, 17, 5, 20, 22, 75, 2, 10, 3, 1, 75, 0, 68, - 70, 65, 71, 79, 66, 70, 97, 80, 76, 87, 82, - 89, 27, 34, 25, 25, 24, 16, 12, 16, 6, 0, 4, - 70, 81, 81, 104, 6, 3, 77, 1, 70, 72, 77, 81, - 85, 89, 90, 104, 77, 94, 104, 93, 101, 64, 34, - 24, 16, 6, 5, 65, 67, 71, 71, 7, 47, 31, 24, - 17, 33, 12, 7, 64, 64, 66, 40, 25, 14, 7, 16, - 4, 65, 68, 73, 73, 22, 8, 3, 65, 5, 68, 73, - 76, 2, 41, 24, 15, 8, 20, 6, 3, 1, 67, 62, 80, - 71, 1, 66, 68, 1, 8, 9, 64, 8, 14, 17, 76, 71, - 74, 65, 16, 67, 69, 2, 9, 17, 78, 70, 11, 13, - 83, 82, 83, 78, 73, 1, 73, 68, 70, 65, 3, 74, - 70, 69, 0, 79, 73, 80, 84, 65, 99, 76, 0, 70, - 12, 70, 65, 20, 68, 70, 65, 16, 78, 74, 95, - 26, 32, 33, 24, 12, 25, 21, 16, 15, 13, 12, 8, - 73, 76, 83, 68, 65, 75, 92, 75, 75, 79, 78, - 77, 72, 73, 87, 88, 83, 22, 21, 21, 15, 2, 9, - 6, 70, 0, 69, 70, 82, 83, 83, 85, 5, 8, 76, 5, - 4, 69, 75, 75, 77, 79, 79, 84, 93, 92, 98, - 100, 106, 86, 96, 103, 83, 69, 75, 2, 3, 4, - 48, 14, 13, 68, 23, 58, 44, 62, 13, 28, 21, - 70, 90, 96, 101, 126, 124, 122, 68, 43, 27, - 18, 9, 13, 2, 66, 68, 72, 76, 69, 5, 64, 14, - 12, 4, 7, 12, 15, 16, 8, 19, 16, 0, 29, 23, - 12, 5, 64, 70, 94, 97, 96 }, - - { - - 35, - 5, 80, 35, 5, 80, 65, 10, 24, 12, 66, 83, 11, - 18, 52, 14, 26, 67, 14, 23, 64, 75, 64, 87, - 103, 1, 0, 123, 125, 123, 37, 3, 69, 14, 23, - 64, 72, 6, 16, 64, 1, 67, 71, 68, 82, 75, 92, - 5, 69, 72, 64, 77, 74, 88, 12, 0, 65, 69, 7, - 3, 22, 0, 0, 0, 0, 94, 97, 7, 69, 68, 52, 6, - 69, 89, 73, 82, 5, 2, 67, 4, 74, 8, 67, 68, 2, - 85, 88, 87, 90, 27, 0, 12, 75, 0, 75, 68, 2, - 71, 83, 75, 83, 16, 71, 3, 76, 77, 1, 70, 3, - 9, 4, 6, 17, 14, 78, 66, 2, 66, 2, 73, 11, 67, - 7, 19, 1, 16, 17, 9, 84, 10, 65, 80, 68, 92, - 79, 67, 72, 1, 67, 66, 14, 64, 67, 5, 11, 72, - 72, 0, 98, 84, 67, 95, 66, 76, 13, 64, 78, 23, - 1, 65, 82, 24, 76, 89, 1, 98, 11, 22, 21, 17, - 22, 16, 5, 19, 21, 76, 1, 10, 3, 1, 76, 64, - 69, 71, 66, 72, 80, 67, 70, 99, 81, 76, 88, - 83, 89, 26, 32, 24, 23, 22, 14, 10, 14, 4, 66, - 2, 72, 83, 84, 106, 4, 1, 78, 64, 72, 75, 80, - 83, 88, 91, 92, 107, 78, 96, 105, 94, 101, 64, - 35, 24, 16, 6, 5, 65, 67, 71, 71, 7, 47, 31, - 24, 17, 34, 13, 7, 0, 64, 65, 41, 25, 15, 7, - 17, 5, 64, 68, 72, 72, 23, 9, 4, 65, 6, 67, - 72, 75, 3, 41, 24, 15, 8, 21, 6, 4, 2, 66, 62, - 79, 70, 2, 66, 68, 1, 8, 9, 64, 8, 14, 17, 76, - 71, 74, 65, 17, 68, 70, 1, 8, 17, 79, 71, 11, - 13, 83, 83, 83, 77, 72, 2, 72, 67, 69, 65, 4, - 74, 70, 69, 1, 79, 73, 80, 83, 64, 99, 76, 0, - 70, 13, 70, 65, 21, 68, 70, 65, 17, 79, 74, - 96, 25, 31, 32, 23, 11, 24, 20, 15, 14, 12, - 11, 7, 74, 77, 84, 69, 66, 76, 94, 77, 76, 80, - 78, 78, 72, 73, 87, 88, 82, 20, 19, 19, 13, - 64, 7, 4, 72, 65, 71, 72, 85, 85, 85, 86, 3, - 7, 78, 3, 2, 71, 77, 77, 79, 81, 81, 86, 96, - 94, 100, 102, 107, 88, 98, 104, 82, 68, 74, 3, - 4, 5, 49, 15, 14, 68, 24, 60, 46, 62, 14, 26, - 20, 72, 93, 99, 104, 126, 126, 123, 68, 43, - 27, 18, 9, 13, 2, 66, 68, 72, 75, 68, 6, 0, - 15, 12, 4, 8, 12, 15, 16, 8, 19, 16, 0, 28, - 22, 10, 3, 66, 72, 96, 99, 97 }, - - { - - 33, - 5, 80, 33, 5, 80, 64, 11, 24, 12, 66, 84, 10, - 16, 52, 14, 29, 68, 15, 23, 64, 76, 64, 88, - 104, 0, 65, 125, 126, 124, 40, 4, 69, 15, 23, - 64, 72, 7, 16, 65, 1, 67, 71, 68, 82, 74, 92, - 5, 69, 71, 65, 78, 74, 88, 12, 1, 65, 68, 7, - 3, 22, 0, 0, 0, 1, 95, 97, 7, 70, 68, 52, 6, - 69, 88, 72, 82, 5, 4, 66, 6, 73, 9, 66, 66, 4, - 84, 88, 86, 90, 27, 0, 13, 74, 0, 75, 67, 4, - 71, 83, 75, 82, 16, 70, 3, 75, 77, 1, 70, 4, - 9, 4, 6, 17, 14, 79, 67, 2, 66, 2, 73, 11, 67, - 6, 19, 1, 16, 17, 8, 86, 10, 65, 82, 69, 93, - 78, 66, 71, 2, 67, 65, 15, 0, 67, 6, 12, 72, - 72, 1, 99, 84, 66, 95, 66, 76, 13, 64, 79, 24, - 1, 65, 84, 25, 77, 90, 1, 99, 9, 21, 20, 16, - 21, 15, 4, 18, 21, 78, 0, 9, 3, 1, 76, 65, 69, - 72, 66, 73, 81, 68, 71, 101, 82, 77, 89, 84, - 89, 24, 31, 22, 21, 20, 12, 7, 12, 1, 68, 0, - 75, 86, 86, 109, 2, 0, 80, 67, 74, 77, 82, 86, - 90, 94, 94, 109, 79, 97, 107, 95, 101, 64, 35, - 25, 16, 6, 5, 65, 67, 71, 70, 8, 48, 31, 24, - 17, 35, 13, 8, 0, 0, 65, 42, 26, 15, 7, 17, 5, - 64, 67, 71, 72, 24, 9, 4, 65, 7, 66, 72, 74, - 3, 42, 24, 15, 8, 22, 7, 4, 3, 65, 62, 79, 70, - 2, 66, 68, 1, 8, 9, 0, 8, 14, 18, 76, 71, 74, - 66, 17, 69, 71, 0, 7, 17, 81, 72, 10, 13, 84, - 84, 84, 77, 72, 3, 72, 67, 69, 64, 5, 75, 70, - 69, 1, 80, 73, 80, 83, 0, 99, 76, 1, 70, 13, - 70, 65, 22, 68, 71, 65, 18, 79, 75, 97, 24, - 31, 32, 22, 10, 23, 19, 14, 13, 11, 10, 6, 75, - 78, 85, 71, 68, 78, 96, 78, 77, 81, 79, 78, - 72, 73, 87, 89, 82, 17, 16, 17, 10, 67, 5, 2, - 75, 67, 73, 74, 87, 87, 86, 87, 1, 5, 79, 1, - 0, 73, 79, 80, 81, 83, 83, 88, 98, 96, 102, - 104, 108, 90, 100, 106, 81, 67, 73, 3, 5, 6, - 51, 16, 15, 68, 25, 61, 47, 62, 14, 25, 18, - 75, 96, 102, 107, 126, 126, 124, 68, 43, 27, - 18, 9, 13, 2, 66, 68, 71, 74, 67, 7, 0, 16, - 13, 5, 9, 13, 16, 17, 9, 20, 17, 0, 26, 20, 8, - 1, 68, 74, 98, 101, 98 }, - - { - - 32, - 5, 80, 32, 5, 80, 1, 13, 24, 12, 67, 86, 8, - 15, 52, 14, 31, 68, 16, 24, 64, 76, 0, 89, - 105, 0, 67, 126, 126, 124, 43, 6, 69, 16, 24, - 64, 72, 8, 16, 65, 1, 67, 70, 68, 83, 74, 92, - 5, 69, 70, 65, 78, 74, 88, 13, 1, 64, 68, 8, - 3, 22, 0, 0, 0, 1, 95, 97, 8, 71, 68, 52, 6, - 69, 87, 71, 82, 6, 5, 64, 8, 71, 10, 64, 65, - 6, 83, 87, 85, 89, 28, 0, 14, 73, 0, 74, 66, - 6, 71, 83, 74, 80, 17, 70, 4, 74, 76, 2, 70, - 4, 10, 5, 7, 18, 15, 79, 67, 2, 66, 2, 73, 11, - 68, 5, 19, 0, 16, 17, 8, 88, 10, 66, 83, 70, - 94, 77, 65, 70, 3, 66, 64, 16, 1, 66, 7, 13, - 72, 72, 1, 100, 83, 65, 95, 65, 76, 14, 64, - 80, 25, 1, 65, 85, 26, 77, 91, 1, 99, 8, 20, - 20, 15, 20, 14, 3, 18, 21, 79, 64, 9, 3, 1, - 77, 65, 70, 73, 67, 74, 82, 68, 72, 103, 83, - 78, 90, 85, 89, 22, 30, 20, 19, 19, 10, 5, 10, - 64, 70, 65, 77, 88, 88, 111, 0, 65, 82, 69, - 76, 79, 84, 88, 92, 97, 96, 112, 80, 99, 108, - 95, 101, 64, 35, 25, 16, 6, 5, 65, 67, 71, 70, - 8, 48, 31, 24, 17, 36, 14, 9, 0, 1, 64, 43, - 27, 15, 8, 18, 6, 0, 67, 70, 71, 26, 10, 4, - 64, 8, 65, 71, 73, 4, 42, 25, 15, 8, 23, 8, 5, - 4, 64, 62, 79, 70, 3, 66, 68, 1, 8, 9, 0, 8, - 15, 18, 76, 71, 74, 67, 18, 70, 72, 64, 7, 17, - 82, 73, 10, 13, 85, 85, 84, 76, 71, 4, 71, 66, - 68, 64, 6, 75, 70, 69, 1, 81, 73, 80, 82, 1, - 99, 76, 1, 70, 14, 70, 65, 23, 68, 71, 65, 19, - 80, 75, 97, 23, 31, 31, 22, 9, 22, 18, 13, 13, - 10, 9, 5, 76, 79, 86, 72, 69, 79, 98, 79, 78, - 82, 80, 79, 72, 72, 87, 89, 81, 15, 14, 15, 8, - 69, 3, 0, 77, 69, 75, 76, 89, 89, 88, 88, 64, - 3, 80, 64, 65, 75, 81, 82, 83, 85, 85, 90, - 101, 98, 104, 106, 109, 92, 102, 107, 80, 65, - 72, 4, 6, 7, 53, 17, 16, 68, 26, 62, 49, 62, - 15, 23, 16, 77, 99, 104, 110, 126, 126, 125, - 68, 43, 27, 18, 9, 13, 2, 66, 68, 71, 73, 66, - 8, 1, 17, 14, 5, 10, 14, 17, 18, 9, 20, 17, 0, - 25, 19, 7, 0, 70, 76, 100, 103, 99 }, - - { - - 31, - 5, 81, 31, 5, 81, 3, 14, 25, 12, 67, 87, 7, - 14, 52, 14, 33, 68, 16, 25, 64, 77, 0, 90, - 106, 64, 68, 126, 126, 125, 46, 7, 69, 16, 25, - 64, 71, 9, 17, 66, 2, 66, 69, 69, 83, 74, 92, - 5, 68, 70, 65, 78, 73, 88, 13, 1, 64, 68, 8, - 3, 22, 0, 0, 0, 2, 95, 97, 8, 71, 69, 52, 6, - 69, 86, 71, 82, 6, 6, 1, 10, 70, 11, 1, 64, 8, - 82, 86, 84, 88, 29, 0, 15, 73, 1, 74, 66, 8, - 71, 82, 74, 79, 17, 70, 4, 72, 76, 3, 69, 4, - 10, 5, 8, 18, 15, 80, 67, 2, 66, 2, 73, 11, - 68, 5, 19, 64, 16, 17, 8, 90, 10, 66, 85, 71, - 95, 77, 64, 70, 3, 65, 64, 17, 1, 66, 7, 15, - 72, 72, 1, 101, 83, 64, 95, 65, 76, 15, 0, 81, - 25, 1, 65, 86, 27, 78, 92, 1, 100, 6, 19, 19, - 15, 19, 14, 3, 17, 20, 80, 65, 9, 3, 1, 77, - 66, 71, 74, 68, 74, 83, 69, 72, 105, 84, 78, - 91, 86, 89, 21, 28, 19, 17, 17, 8, 3, 8, 67, - 73, 67, 80, 91, 91, 114, 65, 67, 83, 71, 79, - 82, 87, 90, 95, 99, 99, 114, 81, 101, 109, 96, - 101, 0, 36, 25, 17, 6, 5, 65, 67, 71, 69, 8, - 48, 32, 24, 17, 37, 14, 9, 1, 1, 0, 44, 27, - 16, 8, 19, 6, 0, 66, 69, 70, 27, 11, 5, 64, 8, - 65, 70, 71, 4, 42, 25, 15, 9, 23, 8, 6, 4, 0, - 62, 78, 69, 3, 66, 68, 1, 8, 9, 0, 9, 15, 19, - 76, 71, 75, 67, 18, 71, 73, 65, 6, 17, 83, 74, - 10, 13, 85, 86, 85, 75, 70, 5, 71, 66, 68, 0, - 6, 75, 69, 68, 2, 81, 73, 80, 82, 2, 99, 76, - 1, 70, 15, 70, 65, 24, 69, 71, 65, 19, 81, 75, - 98, 22, 30, 31, 21, 8, 22, 18, 12, 12, 10, 8, - 4, 77, 80, 87, 74, 70, 81, 100, 81, 80, 83, - 80, 79, 72, 72, 86, 90, 80, 13, 12, 13, 6, 72, - 1, 65, 80, 71, 78, 78, 92, 91, 89, 88, 65, 2, - 82, 66, 68, 77, 83, 84, 85, 87, 88, 92, 103, - 100, 106, 107, 111, 94, 104, 109, 79, 64, 71, - 5, 7, 8, 54, 18, 17, 68, 27, 62, 50, 62, 16, - 22, 15, 80, 102, 107, 112, 126, 126, 126, 67, - 43, 27, 18, 9, 13, 2, 66, 68, 70, 72, 66, 9, - 2, 18, 14, 6, 11, 14, 17, 18, 9, 21, 17, 0, - 24, 17, 5, 65, 71, 77, 103, 104, 100 }, - - { - - 30, - 5, 81, 30, 5, 81, 5, 16, 25, 12, 68, 89, 5, - 12, 52, 14, 36, 69, 17, 25, 64, 78, 0, 91, - 107, 64, 70, 126, 126, 125, 49, 8, 69, 17, 25, - 64, 71, 10, 17, 66, 2, 66, 69, 69, 84, 73, 92, - 5, 68, 69, 66, 78, 73, 88, 14, 2, 64, 67, 9, - 3, 22, 0, 0, 0, 2, 95, 97, 9, 72, 69, 52, 6, - 69, 85, 70, 82, 7, 8, 2, 12, 68, 12, 2, 1, 10, - 81, 85, 83, 88, 30, 0, 16, 72, 1, 73, 65, 10, - 71, 82, 73, 78, 17, 69, 5, 71, 75, 3, 69, 5, - 10, 5, 9, 19, 16, 80, 68, 2, 66, 2, 73, 11, - 69, 4, 19, 64, 16, 17, 7, 92, 10, 67, 87, 72, - 96, 76, 0, 69, 4, 64, 0, 18, 2, 65, 8, 16, 72, - 72, 2, 102, 82, 0, 95, 65, 76, 15, 0, 82, 26, - 1, 65, 88, 28, 78, 93, 1, 101, 5, 18, 19, 14, - 18, 13, 2, 16, 20, 81, 66, 9, 3, 1, 78, 67, - 71, 75, 68, 75, 84, 70, 73, 107, 85, 79, 92, - 87, 89, 19, 27, 17, 15, 15, 6, 0, 6, 69, 75, - 69, 82, 93, 93, 116, 67, 68, 85, 74, 81, 84, - 89, 93, 97, 102, 101, 117, 82, 102, 111, 97, - 101, 0, 36, 26, 17, 6, 5, 65, 67, 71, 69, 9, - 49, 32, 24, 17, 38, 15, 10, 1, 2, 1, 45, 28, - 16, 8, 20, 7, 1, 66, 68, 70, 28, 11, 5, 64, 9, - 64, 70, 70, 5, 43, 25, 15, 9, 24, 9, 7, 5, 1, - 62, 78, 69, 4, 66, 68, 1, 8, 9, 1, 9, 15, 19, - 76, 71, 75, 68, 19, 72, 74, 66, 5, 17, 84, 75, - 9, 13, 86, 87, 85, 74, 70, 6, 70, 65, 67, 0, - 7, 75, 69, 68, 2, 82, 73, 80, 81, 3, 99, 76, - 2, 70, 15, 70, 65, 25, 69, 71, 65, 20, 81, 76, - 99, 21, 30, 30, 20, 7, 21, 17, 11, 11, 9, 7, - 3, 78, 81, 88, 75, 72, 82, 102, 82, 81, 84, - 81, 80, 72, 72, 86, 90, 79, 11, 10, 11, 3, 75, - 64, 67, 82, 73, 80, 80, 94, 93, 91, 89, 67, 0, - 83, 68, 70, 79, 85, 86, 87, 89, 90, 94, 106, - 102, 108, 109, 112, 96, 106, 110, 78, 0, 70, - 5, 8, 9, 56, 19, 18, 68, 28, 62, 52, 62, 16, - 20, 13, 82, 105, 110, 115, 126, 126, 126, 67, - 43, 27, 18, 9, 13, 2, 66, 68, 70, 71, 65, 10, - 3, 19, 15, 6, 12, 15, 18, 19, 10, 21, 18, 0, - 22, 16, 3, 67, 73, 79, 105, 106, 101 }, - - { - - 28, - 4, 81, 28, 4, 81, 6, 17, 25, 12, 68, 90, 4, - 11, 52, 14, 38, 69, 18, 26, 64, 79, 0, 92, - 109, 65, 72, 126, 126, 126, 51, 9, 69, 18, 26, - 64, 71, 11, 17, 67, 2, 66, 68, 70, 84, 73, 93, - 5, 68, 69, 66, 79, 73, 88, 14, 2, 64, 67, 9, - 3, 22, 0, 0, 0, 3, 96, 97, 9, 73, 69, 52, 6, - 69, 84, 69, 82, 7, 9, 4, 14, 67, 13, 4, 2, 11, - 80, 85, 82, 87, 30, 0, 17, 71, 1, 73, 65, 11, - 71, 82, 73, 77, 17, 69, 5, 70, 75, 4, 69, 5, - 10, 5, 9, 19, 16, 81, 68, 2, 66, 2, 73, 11, - 69, 3, 19, 65, 16, 17, 7, 94, 10, 67, 89, 73, - 97, 75, 1, 68, 5, 64, 0, 19, 2, 65, 9, 17, 72, - 72, 2, 104, 82, 1, 95, 65, 77, 16, 0, 83, 27, - 1, 65, 89, 29, 79, 94, 1, 102, 3, 17, 18, 13, - 17, 12, 1, 15, 19, 83, 67, 8, 3, 1, 78, 68, - 72, 76, 69, 76, 85, 71, 74, 109, 87, 80, 93, - 88, 89, 17, 25, 15, 13, 13, 4, 65, 4, 72, 78, - 71, 85, 96, 96, 119, 69, 70, 87, 76, 83, 87, - 92, 95, 100, 105, 103, 119, 83, 104, 112, 98, - 102, 0, 36, 26, 17, 6, 5, 65, 67, 71, 68, 9, - 49, 32, 24, 17, 39, 15, 10, 1, 2, 1, 46, 28, - 16, 8, 20, 7, 1, 65, 67, 69, 29, 12, 5, 64, - 10, 0, 69, 69, 5, 43, 25, 15, 9, 25, 9, 7, 6, - 1, 62, 78, 69, 4, 66, 68, 1, 8, 9, 1, 9, 15, - 20, 76, 71, 75, 69, 19, 73, 75, 67, 4, 17, 86, - 77, 9, 13, 87, 88, 86, 74, 69, 7, 70, 65, 67, - 1, 8, 76, 69, 68, 2, 83, 73, 80, 81, 3, 100, - 76, 2, 70, 16, 70, 65, 25, 69, 72, 65, 21, 82, - 76, 100, 20, 29, 30, 19, 5, 20, 16, 10, 10, 8, - 6, 2, 79, 82, 89, 77, 73, 84, 104, 84, 82, 85, - 82, 80, 72, 72, 86, 91, 79, 8, 7, 9, 1, 78, - 67, 70, 85, 75, 82, 82, 97, 95, 92, 90, 69, - 65, 85, 70, 72, 82, 88, 89, 90, 91, 92, 97, - 108, 104, 111, 111, 113, 98, 108, 112, 77, 1, - 69, 6, 9, 9, 57, 20, 18, 68, 28, 62, 53, 62, - 17, 19, 11, 85, 108, 113, 118, 126, 126, 126, - 67, 43, 27, 18, 9, 13, 2, 66, 68, 69, 71, 64, - 11, 3, 20, 15, 7, 12, 15, 18, 19, 10, 22, 18, - 64, 21, 14, 1, 69, 75, 81, 107, 108, 102 }, - - { - - 27, - 4, 81, 27, 4, 81, 8, 18, 26, 12, 68, 91, 3, - 10, 52, 14, 40, 69, 19, 27, 64, 79, 1, 93, - 110, 66, 74, 126, 126, 126, 54, 11, 69, 19, - 27, 64, 70, 12, 18, 68, 2, 65, 67, 70, 84, 73, - 93, 5, 68, 68, 66, 79, 73, 88, 14, 2, 0, 67, - 9, 3, 22, 0, 0, 0, 4, 96, 97, 9, 74, 69, 52, - 6, 69, 83, 68, 82, 7, 10, 6, 16, 65, 15, 6, 3, - 13, 79, 84, 81, 86, 31, 1, 18, 70, 1, 72, 64, - 13, 71, 81, 73, 75, 18, 69, 5, 68, 75, 5, 69, - 5, 11, 6, 10, 19, 16, 81, 68, 3, 66, 2, 72, - 11, 69, 3, 19, 66, 16, 17, 7, 96, 10, 67, 90, - 74, 97, 74, 2, 67, 6, 0, 1, 20, 3, 65, 10, 18, - 72, 72, 2, 105, 81, 2, 95, 64, 77, 17, 0, 84, - 28, 1, 65, 90, 30, 80, 95, 1, 102, 2, 16, 18, - 12, 16, 11, 1, 15, 19, 84, 68, 8, 3, 1, 78, - 68, 73, 77, 70, 77, 86, 71, 74, 110, 88, 80, - 94, 89, 89, 16, 24, 14, 12, 12, 2, 67, 2, 74, - 80, 73, 87, 99, 98, 122, 70, 72, 88, 78, 85, - 89, 94, 97, 102, 107, 105, 121, 83, 106, 113, - 98, 102, 0, 37, 26, 17, 7, 5, 65, 66, 71, 67, - 9, 49, 32, 25, 17, 40, 16, 11, 2, 3, 2, 47, - 29, 17, 9, 21, 8, 1, 64, 66, 68, 31, 13, 6, 0, - 11, 1, 68, 68, 6, 43, 26, 16, 9, 26, 10, 8, 7, - 2, 62, 77, 68, 5, 66, 68, 1, 9, 10, 1, 9, 16, - 21, 76, 71, 75, 69, 19, 74, 75, 68, 4, 17, 87, - 78, 9, 13, 87, 89, 87, 73, 68, 8, 70, 64, 67, - 2, 9, 76, 69, 68, 3, 83, 73, 80, 81, 4, 100, - 76, 2, 70, 17, 70, 65, 26, 69, 72, 65, 22, 83, - 76, 100, 19, 29, 30, 19, 4, 19, 15, 9, 10, 7, - 5, 2, 79, 83, 90, 78, 74, 86, 106, 85, 83, 85, - 82, 80, 71, 71, 86, 92, 78, 6, 5, 7, 64, 80, - 69, 72, 87, 77, 84, 84, 99, 97, 93, 91, 71, - 66, 86, 72, 74, 84, 90, 91, 92, 93, 94, 99, - 110, 105, 113, 113, 114, 100, 110, 114, 76, 3, - 67, 7, 10, 10, 59, 21, 19, 68, 29, 62, 54, 62, - 18, 18, 10, 87, 111, 115, 121, 126, 126, 126, - 67, 43, 27, 18, 9, 14, 2, 66, 68, 68, 70, 0, - 12, 4, 22, 16, 8, 13, 16, 19, 20, 10, 23, 18, - 64, 20, 13, 0, 70, 77, 83, 109, 110, 102 }, - - { - - 26, - 4, 81, 26, 4, 81, 10, 20, 26, 12, 69, 93, 1, - 8, 52, 14, 43, 70, 20, 27, 64, 80, 1, 94, 111, - 66, 76, 126, 126, 126, 57, 12, 69, 20, 27, 64, - 70, 13, 18, 68, 2, 65, 67, 70, 85, 72, 93, 5, - 68, 67, 67, 79, 73, 88, 15, 3, 0, 66, 10, 3, - 22, 0, 0, 0, 4, 96, 97, 10, 75, 69, 52, 6, 69, - 82, 67, 82, 8, 12, 7, 18, 64, 16, 7, 5, 15, - 78, 83, 80, 86, 32, 1, 19, 69, 1, 72, 0, 15, - 71, 81, 72, 74, 18, 68, 6, 67, 74, 5, 69, 6, - 11, 6, 11, 20, 17, 82, 69, 3, 66, 2, 72, 11, - 70, 2, 19, 66, 16, 17, 6, 98, 10, 68, 92, 75, - 98, 73, 3, 66, 7, 1, 2, 21, 4, 64, 11, 19, 72, - 72, 3, 106, 81, 3, 95, 64, 77, 17, 0, 85, 29, - 1, 65, 92, 31, 80, 96, 1, 103, 0, 15, 17, 11, - 15, 10, 0, 14, 19, 85, 69, 8, 3, 1, 79, 69, - 73, 78, 70, 78, 87, 72, 75, 112, 89, 81, 95, - 90, 89, 14, 23, 12, 10, 10, 0, 70, 0, 77, 82, - 75, 90, 101, 100, 124, 72, 73, 90, 81, 87, 91, - 96, 100, 104, 110, 107, 124, 84, 107, 115, 99, - 102, 0, 37, 27, 17, 7, 5, 65, 66, 71, 67, 10, - 50, 32, 25, 17, 41, 16, 12, 2, 4, 3, 48, 30, - 17, 9, 22, 8, 2, 64, 65, 68, 32, 13, 6, 0, 12, - 2, 68, 67, 6, 44, 26, 16, 9, 27, 11, 9, 8, 3, - 62, 77, 68, 5, 66, 68, 1, 9, 10, 2, 9, 16, 21, - 76, 71, 75, 70, 20, 75, 76, 69, 3, 17, 88, 79, - 8, 13, 88, 90, 87, 72, 68, 9, 69, 64, 66, 2, - 10, 76, 69, 68, 3, 84, 73, 80, 80, 5, 100, 76, - 3, 70, 17, 70, 65, 27, 69, 72, 65, 23, 83, 77, - 101, 18, 29, 29, 18, 3, 18, 14, 8, 9, 6, 4, 1, - 80, 84, 91, 80, 76, 87, 108, 86, 84, 86, 83, - 81, 71, 71, 86, 92, 77, 4, 3, 5, 67, 83, 71, - 74, 90, 79, 86, 86, 101, 99, 95, 92, 73, 68, - 87, 74, 76, 86, 92, 93, 94, 95, 96, 101, 113, - 107, 115, 115, 115, 102, 112, 115, 75, 4, 66, - 7, 11, 11, 61, 22, 20, 68, 30, 62, 56, 62, 18, - 16, 8, 90, 114, 118, 124, 126, 126, 126, 67, - 43, 27, 18, 9, 14, 2, 66, 68, 68, 69, 1, 13, - 5, 23, 17, 8, 14, 17, 20, 21, 11, 23, 19, 64, - 18, 11, 65, 72, 79, 85, 111, 112, 103 }, - - { - - 25, - 4, 82, 25, 4, 82, 12, 21, 27, 12, 69, 94, 0, - 7, 52, 14, 45, 70, 20, 28, 64, 81, 1, 95, 112, - 67, 77, 126, 126, 126, 60, 13, 69, 20, 28, 64, - 69, 14, 19, 69, 3, 64, 66, 71, 85, 72, 93, 5, - 67, 67, 67, 79, 72, 88, 15, 3, 0, 66, 10, 3, - 22, 0, 0, 0, 5, 96, 97, 10, 75, 70, 52, 6, 69, - 81, 67, 82, 8, 13, 9, 20, 1, 17, 9, 6, 17, 77, - 82, 79, 85, 33, 1, 20, 69, 2, 71, 0, 17, 71, - 80, 72, 73, 18, 68, 6, 65, 74, 6, 68, 6, 11, - 6, 12, 20, 17, 82, 69, 3, 66, 2, 72, 11, 70, - 2, 19, 67, 16, 17, 6, 100, 10, 68, 94, 76, 99, - 73, 4, 66, 7, 2, 2, 22, 4, 64, 11, 21, 72, 72, - 3, 107, 80, 4, 95, 64, 77, 18, 1, 86, 29, 1, - 65, 93, 32, 81, 97, 1, 104, 64, 14, 17, 11, - 14, 10, 0, 13, 18, 86, 70, 8, 3, 1, 79, 70, - 74, 79, 71, 78, 88, 73, 75, 114, 90, 81, 96, - 91, 89, 13, 21, 11, 8, 8, 65, 72, 65, 79, 85, - 77, 92, 104, 103, 126, 74, 75, 91, 83, 90, 94, - 99, 102, 107, 112, 110, 126, 85, 109, 116, - 100, 102, 1, 38, 27, 18, 7, 5, 65, 66, 71, 66, - 10, 50, 33, 25, 17, 42, 17, 12, 3, 4, 4, 49, - 30, 18, 9, 23, 9, 2, 0, 64, 67, 33, 14, 7, 0, - 12, 2, 67, 65, 7, 44, 26, 16, 10, 27, 11, 10, - 8, 4, 62, 76, 67, 6, 66, 68, 1, 9, 10, 2, 10, - 16, 22, 76, 71, 76, 70, 20, 76, 77, 70, 2, 17, - 89, 80, 8, 13, 88, 91, 88, 71, 67, 10, 69, 0, - 66, 3, 10, 76, 68, 67, 4, 84, 73, 80, 80, 6, - 100, 76, 3, 70, 18, 70, 65, 28, 70, 72, 65, - 23, 84, 77, 102, 17, 28, 29, 17, 2, 18, 14, 7, - 8, 6, 3, 0, 81, 85, 92, 81, 77, 89, 110, 88, - 86, 87, 83, 81, 71, 71, 85, 93, 76, 2, 1, 3, - 69, 86, 73, 76, 92, 81, 89, 88, 104, 101, 96, - 92, 74, 69, 89, 76, 79, 88, 94, 95, 96, 97, - 99, 103, 115, 109, 117, 116, 117, 104, 114, - 117, 74, 5, 65, 8, 12, 12, 62, 23, 21, 68, 31, - 62, 57, 62, 19, 15, 7, 92, 117, 121, 126, 126, - 126, 126, 66, 43, 27, 18, 9, 14, 2, 66, 68, - 67, 68, 1, 14, 6, 24, 17, 9, 15, 17, 20, 21, - 11, 24, 19, 64, 17, 10, 67, 74, 80, 86, 114, - 113, 104 }, - - { - - 23, - 4, 82, 23, 4, 82, 13, 23, 27, 12, 70, 96, 65, - 6, 52, 14, 47, 70, 21, 29, 64, 82, 1, 96, 113, - 67, 79, 126, 126, 126, 62, 14, 69, 21, 29, 64, - 69, 15, 19, 69, 3, 64, 65, 71, 86, 72, 93, 5, - 67, 66, 67, 80, 72, 88, 16, 3, 0, 66, 11, 3, - 22, 0, 0, 0, 5, 97, 97, 11, 76, 70, 52, 6, 69, - 80, 66, 82, 9, 14, 11, 22, 2, 18, 11, 7, 19, - 76, 82, 78, 84, 33, 1, 21, 68, 2, 71, 1, 19, - 71, 80, 71, 72, 18, 68, 7, 64, 73, 7, 68, 6, - 11, 6, 12, 21, 18, 83, 69, 3, 66, 2, 72, 11, - 71, 1, 19, 68, 16, 17, 6, 102, 10, 69, 96, 77, - 100, 72, 5, 65, 8, 2, 3, 23, 5, 0, 12, 22, 72, - 72, 3, 108, 80, 5, 95, 64, 77, 19, 1, 87, 30, - 1, 65, 94, 33, 81, 98, 1, 105, 66, 13, 16, 10, - 13, 9, 64, 12, 18, 88, 71, 7, 3, 1, 80, 71, - 75, 80, 72, 79, 89, 74, 76, 116, 91, 82, 97, - 92, 89, 11, 20, 9, 6, 6, 67, 74, 67, 82, 87, - 79, 95, 106, 105, 126, 76, 77, 93, 85, 92, 96, - 101, 104, 109, 115, 112, 126, 86, 111, 117, - 101, 102, 1, 38, 27, 18, 7, 5, 65, 66, 71, 66, - 10, 50, 33, 25, 17, 43, 17, 13, 3, 5, 4, 50, - 31, 18, 9, 23, 9, 3, 0, 0, 66, 34, 15, 7, 0, - 13, 3, 66, 64, 7, 44, 26, 16, 10, 28, 12, 10, - 9, 5, 62, 76, 67, 6, 66, 68, 1, 9, 10, 2, 10, - 16, 22, 76, 71, 76, 71, 21, 77, 78, 71, 1, 17, - 91, 81, 8, 13, 89, 92, 88, 71, 66, 11, 68, 0, - 65, 3, 11, 77, 68, 67, 4, 85, 73, 80, 79, 7, - 100, 76, 3, 70, 19, 70, 65, 29, 70, 73, 65, - 24, 85, 77, 103, 16, 28, 28, 16, 1, 17, 13, 6, - 7, 5, 2, 64, 82, 86, 93, 83, 78, 90, 112, 89, - 87, 88, 84, 82, 71, 71, 85, 93, 76, 64, 65, 1, - 71, 89, 75, 78, 95, 83, 91, 90, 106, 103, 98, - 93, 76, 71, 90, 78, 81, 90, 96, 98, 98, 99, - 101, 105, 118, 111, 119, 118, 118, 106, 116, - 118, 73, 6, 64, 9, 13, 13, 62, 24, 22, 68, 32, - 62, 59, 62, 20, 13, 5, 95, 120, 124, 126, 126, - 126, 126, 66, 43, 27, 18, 9, 14, 2, 66, 68, - 67, 67, 2, 15, 6, 25, 18, 9, 16, 18, 21, 22, - 11, 24, 19, 64, 16, 8, 69, 76, 82, 88, 116, - 115, 105 }, - - { - - 22, - 4, 82, 22, 4, 82, 15, 24, 27, 12, 70, 97, 66, - 4, 52, 14, 50, 71, 22, 29, 64, 82, 2, 97, 114, - 68, 81, 126, 126, 126, 62, 16, 69, 22, 29, 64, - 69, 16, 19, 70, 3, 64, 65, 71, 86, 71, 93, 5, - 67, 65, 68, 80, 72, 88, 16, 4, 1, 65, 11, 3, - 22, 0, 0, 0, 6, 97, 97, 11, 77, 70, 52, 6, 69, - 79, 65, 82, 9, 16, 12, 24, 4, 19, 12, 9, 21, - 75, 81, 77, 84, 34, 1, 22, 67, 2, 70, 2, 21, - 71, 80, 71, 70, 19, 67, 7, 0, 73, 7, 68, 7, - 12, 7, 13, 21, 18, 83, 70, 3, 66, 2, 72, 11, - 71, 0, 19, 68, 16, 17, 5, 104, 10, 69, 97, 78, - 101, 71, 6, 64, 9, 3, 4, 24, 6, 0, 13, 23, 72, - 72, 4, 109, 79, 6, 95, 0, 77, 19, 1, 88, 31, - 1, 65, 96, 34, 82, 99, 1, 105, 67, 12, 16, 9, - 12, 8, 65, 12, 18, 89, 72, 7, 3, 1, 80, 71, - 75, 81, 72, 80, 90, 74, 77, 118, 92, 83, 98, - 93, 89, 9, 19, 7, 4, 5, 69, 77, 69, 84, 89, - 81, 97, 109, 107, 126, 78, 78, 95, 88, 94, 98, - 103, 107, 111, 118, 114, 126, 87, 112, 119, - 101, 102, 1, 38, 28, 18, 7, 5, 65, 66, 71, 65, - 11, 51, 33, 25, 17, 44, 18, 14, 3, 6, 5, 51, - 32, 18, 10, 24, 10, 3, 1, 1, 66, 36, 15, 7, 1, - 14, 4, 66, 0, 8, 45, 27, 16, 10, 29, 13, 11, - 10, 6, 62, 76, 67, 7, 66, 68, 1, 9, 10, 3, 10, - 17, 23, 76, 71, 76, 72, 21, 78, 79, 72, 1, 17, - 92, 82, 7, 13, 90, 93, 89, 70, 66, 12, 68, 1, - 65, 4, 12, 77, 68, 67, 4, 86, 73, 80, 79, 8, - 100, 76, 4, 70, 19, 70, 65, 30, 70, 73, 65, - 25, 85, 78, 103, 15, 28, 28, 16, 0, 16, 12, 5, - 7, 4, 1, 65, 83, 87, 94, 84, 80, 92, 114, 90, - 88, 89, 85, 82, 71, 70, 85, 94, 75, 66, 67, - 64, 74, 91, 77, 80, 97, 85, 93, 92, 108, 105, - 99, 94, 78, 73, 91, 80, 83, 92, 98, 100, 100, - 101, 103, 107, 120, 113, 121, 120, 119, 108, - 118, 120, 72, 8, 0, 9, 14, 14, 62, 25, 23, 68, - 33, 62, 60, 62, 20, 12, 3, 97, 123, 126, 126, - 126, 126, 126, 66, 43, 27, 18, 9, 14, 2, 66, - 68, 66, 66, 3, 16, 7, 26, 19, 10, 17, 19, 22, - 23, 12, 25, 20, 64, 14, 7, 70, 77, 84, 90, - 118, 117, 106 }, - - { - - 21, - 4, 82, 21, 4, 82, 17, 26, 28, 12, 71, 99, 68, - 3, 52, 14, 52, 71, 23, 30, 64, 83, 2, 98, 115, - 68, 83, 126, 126, 126, 62, 17, 69, 23, 30, 64, - 68, 17, 20, 70, 3, 0, 64, 72, 87, 71, 93, 5, - 67, 65, 68, 80, 72, 88, 17, 4, 1, 65, 12, 3, - 22, 0, 0, 0, 6, 97, 97, 12, 78, 70, 52, 6, 69, - 78, 64, 82, 10, 17, 14, 26, 5, 20, 14, 10, 23, - 74, 80, 76, 83, 35, 1, 23, 66, 2, 70, 2, 23, - 71, 79, 70, 69, 19, 67, 8, 2, 72, 8, 68, 7, - 12, 7, 14, 22, 19, 84, 70, 3, 66, 2, 72, 11, - 72, 0, 19, 69, 16, 17, 5, 106, 10, 70, 99, 79, - 102, 70, 7, 0, 10, 4, 4, 25, 6, 1, 14, 24, 72, - 72, 4, 110, 79, 7, 95, 0, 77, 20, 1, 89, 32, - 1, 65, 97, 35, 82, 100, 1, 106, 69, 11, 15, 8, - 11, 7, 65, 11, 17, 90, 73, 7, 3, 1, 81, 72, - 76, 82, 73, 81, 91, 75, 77, 120, 93, 83, 99, - 94, 89, 8, 17, 6, 2, 3, 71, 79, 71, 87, 92, - 83, 100, 111, 110, 126, 80, 80, 96, 90, 96, - 101, 106, 109, 114, 120, 116, 126, 88, 114, - 120, 102, 102, 1, 39, 28, 18, 7, 5, 65, 66, - 71, 65, 11, 51, 33, 25, 17, 45, 18, 14, 4, 6, - 6, 52, 32, 19, 10, 25, 10, 4, 1, 2, 65, 37, - 16, 8, 1, 15, 5, 65, 1, 8, 45, 27, 16, 10, 30, - 13, 12, 11, 7, 62, 75, 66, 7, 66, 68, 1, 9, - 10, 3, 10, 17, 23, 76, 71, 76, 72, 22, 79, 80, - 73, 0, 17, 93, 83, 7, 13, 90, 94, 89, 69, 65, - 13, 67, 1, 64, 4, 13, 77, 68, 67, 5, 86, 73, - 80, 78, 9, 100, 76, 4, 70, 20, 70, 65, 31, 70, - 73, 65, 26, 86, 78, 104, 14, 27, 27, 15, 64, - 15, 11, 4, 6, 3, 0, 66, 84, 88, 95, 86, 81, - 93, 116, 92, 89, 90, 85, 83, 71, 70, 85, 94, - 74, 68, 69, 66, 76, 94, 79, 82, 100, 87, 95, - 94, 111, 107, 101, 95, 80, 74, 93, 82, 85, 94, - 100, 102, 102, 103, 105, 109, 123, 115, 123, - 122, 120, 110, 120, 121, 71, 9, 1, 10, 15, 15, - 62, 26, 24, 68, 34, 62, 62, 62, 21, 10, 2, - 100, 126, 126, 126, 126, 126, 126, 66, 43, 27, - 18, 9, 14, 2, 66, 68, 66, 65, 4, 17, 8, 27, - 19, 10, 18, 19, 22, 23, 12, 25, 20, 64, 13, 5, - 72, 79, 86, 92, 120, 119, 107 }, - - { - - 20, - 4, 82, 20, 4, 82, 19, 27, 28, 12, 71, 100, 69, - 2, 52, 14, 54, 71, 24, 31, 64, 84, 2, 99, 116, - 69, 85, 126, 126, 126, 62, 18, 69, 24, 31, 64, - 68, 18, 20, 71, 3, 0, 0, 72, 87, 71, 93, 5, - 67, 64, 68, 80, 72, 88, 17, 4, 1, 65, 12, 3, - 22, 0, 0, 0, 7, 97, 97, 12, 79, 70, 52, 6, 69, - 77, 0, 82, 10, 18, 16, 28, 7, 21, 16, 11, 25, - 73, 79, 75, 82, 36, 1, 24, 65, 2, 69, 3, 25, - 71, 79, 70, 68, 19, 67, 8, 3, 72, 9, 68, 7, - 12, 7, 15, 22, 19, 84, 70, 3, 66, 2, 72, 11, - 72, 64, 19, 70, 16, 17, 5, 108, 10, 70, 101, - 80, 103, 69, 8, 1, 11, 5, 5, 26, 7, 1, 15, 25, - 72, 72, 4, 111, 78, 8, 95, 0, 77, 21, 1, 90, - 33, 1, 65, 98, 36, 83, 101, 1, 107, 70, 10, - 15, 7, 10, 6, 66, 10, 17, 91, 74, 7, 3, 1, 81, - 73, 77, 83, 74, 82, 92, 76, 78, 122, 94, 84, - 100, 95, 89, 6, 16, 4, 0, 1, 73, 81, 73, 89, - 94, 85, 102, 114, 112, 126, 82, 82, 98, 92, - 98, 103, 108, 111, 116, 123, 118, 126, 89, - 116, 121, 103, 102, 1, 39, 28, 18, 7, 5, 65, - 66, 71, 64, 11, 51, 33, 25, 17, 46, 19, 15, 4, - 7, 7, 53, 33, 19, 10, 26, 11, 4, 2, 3, 64, 38, - 17, 8, 1, 16, 6, 64, 2, 9, 45, 27, 16, 10, 31, - 14, 13, 12, 8, 62, 75, 66, 8, 66, 68, 1, 9, - 10, 3, 10, 17, 24, 76, 71, 76, 73, 22, 80, 81, - 74, 64, 17, 94, 84, 7, 13, 91, 95, 90, 68, 64, - 14, 67, 2, 64, 5, 14, 77, 68, 67, 5, 87, 73, - 80, 78, 10, 100, 76, 4, 70, 21, 70, 65, 32, - 70, 73, 65, 27, 87, 78, 105, 13, 27, 27, 14, - 65, 14, 10, 3, 5, 2, 64, 67, 85, 89, 96, 87, - 82, 95, 118, 93, 90, 91, 86, 83, 71, 70, 85, - 95, 73, 70, 71, 68, 78, 97, 81, 84, 102, 89, - 97, 96, 113, 109, 102, 96, 82, 76, 94, 84, 87, - 96, 102, 104, 104, 105, 107, 111, 125, 117, - 125, 124, 121, 112, 122, 123, 70, 10, 2, 11, - 16, 16, 62, 27, 25, 68, 35, 62, 62, 62, 22, 9, - 0, 102, 126, 126, 126, 126, 126, 126, 66, 43, - 27, 18, 9, 14, 2, 66, 68, 65, 64, 5, 18, 9, - 28, 20, 11, 19, 20, 23, 24, 12, 26, 20, 64, - 12, 4, 74, 81, 88, 94, 122, 121, 108 }, - - { - - 18, - 3, 83, 18, 3, 83, 20, 28, 28, 12, 72, 102, 71, - 0, 51, 14, 56, 72, 24, 31, 65, 85, 2, 101, - 118, 70, 87, 126, 126, 126, 62, 19, 70, 24, - 31, 65, 68, 19, 20, 72, 3, 0, 0, 73, 88, 71, - 94, 5, 67, 64, 69, 81, 72, 88, 17, 4, 1, 65, - 12, 2, 22, 0, 0, 0, 7, 98, 97, 12, 80, 71, 52, - 5, 69, 76, 0, 82, 10, 19, 17, 29, 8, 22, 17, - 12, 26, 72, 79, 74, 82, 36, 1, 24, 65, 2, 69, - 3, 26, 71, 79, 70, 67, 19, 67, 8, 4, 72, 9, - 68, 7, 12, 7, 15, 22, 19, 85, 71, 3, 67, 2, - 72, 10, 73, 65, 19, 71, 15, 17, 4, 110, 9, 71, - 103, 81, 104, 69, 8, 1, 11, 5, 5, 27, 7, 1, - 15, 26, 73, 72, 4, 113, 78, 8, 95, 0, 78, 21, - 1, 91, 33, 1, 65, 100, 36, 84, 102, 1, 108, - 72, 9, 14, 6, 9, 5, 67, 9, 16, 93, 75, 6, 2, - 1, 82, 74, 78, 84, 75, 83, 93, 77, 79, 124, - 96, 85, 102, 97, 89, 4, 14, 2, 65, 64, 76, 84, - 76, 92, 97, 88, 105, 117, 115, 126, 84, 84, - 100, 95, 101, 106, 111, 114, 119, 126, 121, - 126, 90, 118, 123, 104, 103, 1, 39, 28, 18, 7, - 5, 66, 66, 71, 64, 11, 51, 33, 25, 17, 47, 19, - 15, 4, 7, 7, 53, 33, 19, 10, 26, 11, 4, 2, 4, - 64, 39, 17, 8, 1, 16, 6, 64, 3, 9, 45, 27, 16, - 10, 31, 14, 13, 12, 8, 62, 75, 66, 8, 66, 68, - 1, 9, 10, 3, 10, 17, 24, 76, 71, 77, 74, 22, - 81, 82, 75, 65, 16, 96, 86, 6, 12, 92, 97, 91, - 68, 64, 15, 67, 2, 64, 5, 14, 78, 68, 67, 5, - 88, 73, 80, 78, 10, 101, 76, 4, 70, 21, 71, - 65, 32, 71, 74, 65, 27, 88, 79, 106, 12, 26, - 26, 13, 67, 13, 9, 2, 4, 1, 65, 68, 86, 91, - 98, 89, 84, 97, 120, 95, 92, 92, 87, 84, 71, - 70, 85, 96, 73, 73, 74, 70, 81, 100, 84, 87, - 105, 92, 100, 99, 116, 112, 104, 97, 84, 78, - 96, 86, 90, 99, 105, 107, 107, 107, 110, 114, - 126, 119, 126, 126, 123, 114, 124, 125, 69, - 11, 3, 11, 16, 16, 62, 27, 25, 68, 35, 62, 62, - 62, 22, 7, 65, 105, 126, 126, 126, 126, 126, - 126, 66, 43, 26, 17, 9, 14, 2, 67, 68, 65, 64, - 5, 18, 9, 29, 20, 11, 19, 20, 23, 24, 12, 26, - 20, 65, 10, 2, 76, 83, 90, 96, 125, 123, 109 }, - - { - - 17, - 3, 83, 17, 3, 83, 22, 30, 29, 13, 72, 103, 72, - 64, 51, 14, 59, 72, 25, 32, 65, 85, 3, 102, - 119, 70, 88, 126, 126, 126, 62, 21, 70, 25, - 32, 65, 67, 21, 21, 72, 4, 1, 1, 73, 88, 70, - 94, 5, 66, 0, 69, 81, 71, 88, 18, 5, 2, 64, - 13, 2, 22, 0, 0, 0, 8, 98, 97, 13, 80, 71, 52, - 5, 69, 74, 1, 82, 11, 21, 19, 31, 10, 24, 19, - 14, 28, 70, 78, 73, 81, 37, 2, 25, 64, 3, 68, - 4, 28, 70, 78, 69, 65, 20, 66, 9, 6, 71, 10, - 67, 8, 13, 8, 16, 23, 20, 85, 71, 4, 67, 2, - 71, 10, 73, 65, 19, 71, 15, 17, 4, 111, 9, 71, - 104, 82, 104, 68, 9, 2, 12, 6, 6, 28, 8, 2, - 16, 28, 73, 72, 5, 114, 77, 9, 95, 1, 78, 22, - 2, 91, 34, 1, 65, 101, 37, 84, 103, 1, 108, - 73, 9, 14, 6, 9, 5, 67, 9, 16, 94, 75, 6, 2, - 1, 82, 74, 78, 84, 75, 83, 94, 77, 79, 125, - 97, 85, 103, 98, 89, 3, 13, 1, 66, 65, 78, 86, - 78, 94, 99, 90, 107, 119, 117, 126, 85, 85, - 101, 97, 103, 108, 113, 116, 121, 126, 123, - 126, 90, 119, 124, 104, 103, 2, 40, 29, 19, 8, - 5, 66, 65, 70, 0, 12, 52, 34, 26, 17, 48, 20, - 16, 5, 8, 8, 54, 34, 20, 11, 27, 12, 5, 3, 6, - 0, 41, 18, 9, 2, 17, 7, 0, 5, 10, 46, 28, 17, - 11, 32, 15, 14, 13, 9, 62, 74, 65, 9, 66, 67, - 1, 10, 11, 4, 11, 18, 25, 75, 71, 77, 74, 23, - 81, 82, 76, 65, 16, 97, 87, 6, 12, 92, 98, 91, - 67, 0, 16, 66, 3, 0, 6, 15, 78, 67, 66, 6, 88, - 72, 79, 77, 11, 101, 76, 5, 70, 22, 71, 65, - 33, 71, 74, 64, 28, 88, 79, 106, 12, 26, 26, - 13, 68, 13, 9, 2, 4, 1, 65, 68, 86, 92, 99, - 90, 85, 98, 121, 96, 93, 92, 87, 84, 70, 69, - 84, 96, 72, 75, 76, 72, 83, 102, 86, 89, 107, - 94, 102, 101, 118, 114, 105, 97, 85, 79, 97, - 87, 92, 101, 107, 109, 109, 109, 112, 116, - 126, 120, 126, 126, 124, 115, 125, 126, 67, - 13, 5, 12, 17, 17, 62, 28, 26, 68, 36, 62, 62, - 62, 23, 6, 66, 107, 126, 126, 126, 126, 126, - 126, 65, 44, 26, 17, 9, 15, 2, 67, 68, 64, 0, - 6, 19, 10, 31, 21, 12, 20, 21, 24, 25, 13, 27, - 21, 65, 9, 1, 77, 84, 91, 97, 126, 124, 109 }, - - { - - 16, - 3, 83, 16, 3, 83, 24, 31, 29, 13, 72, 104, 73, - 65, 51, 14, 61, 72, 26, 33, 65, 86, 3, 103, - 120, 71, 90, 126, 126, 126, 62, 22, 70, 26, - 33, 65, 67, 22, 21, 73, 4, 1, 2, 73, 88, 70, - 94, 5, 66, 1, 69, 81, 71, 88, 18, 5, 2, 64, - 13, 2, 22, 0, 0, 0, 9, 98, 97, 13, 81, 71, 52, - 5, 69, 73, 2, 82, 11, 22, 21, 33, 11, 25, 21, - 15, 30, 69, 77, 72, 80, 38, 2, 26, 0, 3, 68, - 5, 30, 70, 78, 69, 64, 20, 66, 9, 7, 71, 11, - 67, 8, 13, 8, 17, 23, 20, 86, 71, 4, 67, 2, - 71, 10, 73, 66, 19, 72, 15, 17, 4, 113, 9, 71, - 106, 83, 105, 67, 10, 3, 13, 7, 7, 29, 9, 2, - 17, 29, 73, 72, 5, 115, 77, 10, 95, 1, 78, 23, - 2, 92, 35, 1, 65, 102, 38, 85, 104, 1, 109, - 75, 8, 13, 5, 8, 4, 68, 8, 16, 95, 76, 6, 2, - 1, 82, 75, 79, 85, 76, 84, 95, 78, 80, 126, - 98, 86, 104, 99, 89, 1, 12, 64, 68, 67, 80, - 88, 80, 97, 101, 92, 110, 122, 119, 126, 87, - 87, 103, 99, 105, 110, 115, 118, 123, 126, - 125, 126, 91, 121, 125, 105, 103, 2, 40, 29, - 19, 8, 5, 66, 65, 70, 1, 12, 52, 34, 26, 17, - 49, 20, 17, 5, 9, 9, 55, 35, 20, 11, 28, 12, - 5, 4, 7, 1, 42, 19, 9, 2, 18, 8, 1, 6, 10, 46, - 28, 17, 11, 33, 16, 15, 14, 10, 62, 74, 65, 9, - 66, 67, 1, 10, 11, 4, 11, 18, 26, 75, 71, 77, - 75, 23, 82, 83, 77, 66, 16, 98, 88, 6, 12, 93, - 99, 92, 66, 1, 17, 66, 3, 0, 7, 16, 78, 67, - 66, 6, 89, 72, 79, 77, 12, 101, 76, 5, 70, 23, - 71, 65, 34, 71, 74, 64, 29, 89, 79, 107, 11, - 26, 26, 12, 69, 12, 8, 1, 3, 0, 66, 69, 87, - 93, 100, 92, 86, 100, 123, 97, 94, 93, 88, 84, - 70, 69, 84, 97, 71, 77, 78, 74, 85, 105, 88, - 91, 110, 96, 104, 103, 120, 116, 106, 98, 87, - 81, 98, 89, 94, 103, 109, 111, 111, 111, 114, - 118, 126, 122, 126, 126, 125, 117, 126, 126, - 66, 14, 6, 13, 18, 18, 62, 29, 27, 68, 37, 62, - 62, 62, 24, 5, 68, 110, 126, 126, 126, 126, - 126, 126, 65, 44, 26, 17, 9, 15, 2, 67, 68, 0, - 1, 7, 20, 11, 32, 22, 13, 21, 22, 25, 26, 13, - 28, 21, 65, 8, 64, 79, 86, 93, 99, 126, 126, - 110 }, - - { - - 15, - 3, 83, 15, 3, 83, 26, 33, 30, 13, 73, 106, 75, - 66, 51, 14, 62, 72, 27, 34, 65, 87, 3, 104, - 121, 71, 92, 126, 126, 126, 62, 23, 70, 27, - 34, 65, 66, 23, 22, 73, 4, 2, 3, 74, 89, 70, - 94, 5, 66, 1, 69, 81, 71, 88, 19, 5, 2, 64, - 14, 2, 22, 0, 0, 0, 9, 98, 97, 14, 82, 71, 52, - 5, 69, 72, 3, 82, 12, 23, 23, 35, 13, 26, 23, - 16, 32, 68, 76, 71, 79, 39, 2, 27, 1, 3, 67, - 5, 32, 70, 77, 68, 0, 20, 66, 10, 9, 70, 12, - 67, 8, 13, 8, 18, 24, 21, 86, 71, 4, 67, 2, - 71, 10, 74, 66, 19, 73, 15, 17, 4, 115, 9, 72, - 108, 84, 106, 66, 11, 4, 14, 8, 7, 30, 9, 3, - 18, 30, 73, 72, 5, 116, 76, 11, 95, 1, 78, 24, - 2, 93, 36, 1, 65, 103, 39, 85, 105, 1, 110, - 76, 7, 13, 4, 7, 3, 68, 7, 15, 96, 77, 6, 2, - 1, 83, 76, 80, 86, 77, 85, 96, 79, 80, 126, - 99, 86, 105, 100, 89, 0, 10, 65, 70, 69, 82, - 90, 82, 99, 104, 94, 112, 124, 122, 126, 89, - 89, 104, 101, 107, 113, 118, 120, 126, 126, - 126, 126, 92, 123, 126, 106, 103, 2, 41, 29, - 19, 8, 5, 66, 65, 70, 1, 12, 52, 34, 26, 17, - 50, 21, 17, 6, 9, 10, 56, 35, 21, 11, 29, 13, - 6, 4, 8, 2, 43, 20, 10, 2, 19, 9, 2, 7, 11, - 46, 28, 17, 11, 34, 16, 16, 15, 11, 62, 73, - 64, 10, 66, 67, 1, 10, 11, 4, 11, 18, 26, 75, - 71, 77, 75, 24, 83, 84, 78, 67, 16, 99, 89, 6, - 12, 93, 100, 92, 65, 2, 18, 65, 4, 1, 7, 17, - 78, 67, 66, 7, 89, 72, 79, 76, 13, 101, 76, 5, - 70, 24, 71, 65, 35, 71, 74, 64, 30, 90, 79, - 108, 10, 25, 25, 11, 70, 11, 7, 0, 2, 64, 67, - 70, 88, 94, 101, 93, 87, 101, 125, 99, 95, 94, - 88, 85, 70, 69, 84, 97, 70, 79, 80, 76, 87, - 108, 90, 93, 112, 98, 106, 105, 123, 118, 108, - 99, 89, 82, 100, 91, 96, 105, 111, 113, 113, - 113, 116, 120, 126, 124, 126, 126, 126, 119, - 126, 126, 65, 15, 7, 14, 19, 19, 62, 30, 28, - 68, 38, 62, 62, 62, 25, 3, 69, 112, 126, 126, - 126, 126, 126, 126, 65, 44, 26, 17, 9, 15, 2, - 67, 68, 0, 2, 8, 21, 12, 33, 22, 13, 22, 22, - 25, 26, 13, 28, 21, 65, 7, 65, 81, 88, 95, - 101, 126, 126, 111 }, - - }, - - }; + { + + 62, + 9, 74, 62, 9, 74, 126, 104, 10, 9, 12, 30, 61, 62, + 54, 14, 118, 6, 78, 65, 1, 14, 73, 13, 64, 20, 62, + 67, 90, 104, 126, 104, 67, 78, 65, 1, 86, 95, 2, + 18, 69, 81, 96, 8, 67, 86, 88, 5, 76, 94, 9, 69, + 81, 88, 67, 74, 74, 80, 72, 5, 22, 0, 0, 0, 83, + 86, 97, 72, 22, 1, 18, 78, 96, 126, 98, 101, 67, + 82, 94, 83, 110, 91, 102, 93, 126, 92, 89, 96, + 108, 17, 65, 6, 93, 74, 92, 87, 126, 9, 3, 4, 69, + 15, 68, 69, 88, 85, 78, 75, 77, 9, 13, 68, 13, 21, + 81, 0, 70, 67, 6, 76, 28, 64, 2, 28, 38, 39, 34, + 27, 93, 73, 73, 17, 14, 100, 10, 10, 10, 2, 7, 7, + 0, 3, 1, 6, 69, 6, 24, 12, 68, 64, 2, 0, 13, 24, + 19, 11, 15, 3, 4, 4, 30, 19, 20, 78, 3, 69, 35, + 23, 19, 14, 17, 19, 12, 16, 24, 1, 17, 9, 9, 5, 0, + 12, 6, 10, 11, 8, 18, 27, 10, 82, 8, 78, 17, 32, + 84, 56, 62, 60, 59, 62, 62, 57, 57, 54, 44, 36, + 33, 43, 29, 70, 67, 4, 67, 33, 31, 28, 34, 32, 25, + 20, 22, 0, 4, 64, 94, 89, 108, 76, 19, 18, 11, 64, + 4, 70, 75, 82, 102, 77, 39, 21, 15, 8, 4, 71, 83, + 87, 119, 5, 34, 27, 25, 20, 8, 5, 64, 74, 90, 70, + 34, 32, 21, 4, 5, 72, 81, 97, 5, 58, 49, 45, 36, + 23, 5, 70, 79, 85, 62, 106, 106, 87, 114, 110, 98, + 110, 106, 103, 107, 108, 112, 96, 95, 91, 93, 94, + 86, 67, 80, 85, 70, 3, 5, 2, 13, 13, 14, 9, 22, + 17, 12, 14, 11, 22, 16, 8, 22, 19, 13, 10, 14, 0, + 64, 69, 4, 70, 19, 32, 20, 10, 29, 25, 11, 23, 31, + 19, 25, 13, 6, 20, 52, 49, 52, 52, 54, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 34, 62, 62, 62, 62, 62, + 62, 54, 37, 36, 6, 82, 75, 97, 125, 62, 62, 62, + 57, 55, 53, 41, 44, 31, 32, 22, 19, 16, 65, 71, 3, + 0, 65, 39, 43, 40, 31, 40, 39, 23, 31, 34, 21, 6, + 10, 2, 86, 23, 12, 4, 79, 71, 69, 70, 66, 68, 73, + 69, 70, 67, 1, 70, 66, 65, 0, 62, 62, 62, 62, 62, + 60, 54, 36, 4, 66, 28, 21, 18, 15, 7, 3, 1, 66, + 76, 85, 81, 77, 81, 80, 73, 74, 83, 71, 67, 2, 66, + 66, 4, 4, 62, 62, 62, 62, 61, 57, 46, 29, 1 }, + + { + + 62, + 9, 74, 62, 9, 74, 125, 102, 11, 10, 12, 29, 60, + 62, 54, 14, 115, 6, 77, 64, 1, 14, 72, 12, 65, + 20, 62, 68, 91, 104, 124, 102, 67, 77, 64, 1, + 85, 93, 3, 18, 68, 80, 95, 8, 67, 85, 88, 5, 75, + 93, 9, 69, 80, 88, 66, 73, 73, 79, 71, 5, 22, 0, + 0, 0, 82, 86, 97, 71, 22, 1, 18, 77, 95, 124, + 96, 99, 65, 80, 92, 82, 108, 89, 100, 92, 125, + 91, 88, 95, 107, 18, 64, 7, 92, 73, 91, 86, 124, + 9, 3, 4, 69, 16, 68, 68, 87, 84, 77, 74, 76, 9, + 13, 67, 13, 21, 80, 0, 69, 67, 6, 75, 28, 64, 2, + 28, 37, 39, 34, 27, 92, 72, 72, 17, 14, 99, 10, + 10, 10, 3, 7, 7, 1, 4, 2, 6, 68, 6, 24, 12, 68, + 64, 2, 0, 13, 23, 19, 11, 15, 4, 5, 4, 29, 19, + 20, 77, 3, 69, 35, 23, 19, 14, 17, 19, 12, 16, + 24, 1, 17, 9, 9, 5, 0, 12, 6, 10, 11, 8, 18, 27, + 10, 81, 8, 77, 17, 31, 83, 55, 62, 59, 58, 61, + 62, 56, 56, 52, 43, 35, 32, 41, 28, 71, 67, 4, + 67, 32, 30, 27, 33, 31, 24, 19, 21, 0, 4, 64, + 93, 88, 107, 75, 20, 18, 11, 0, 5, 69, 74, 81, + 100, 76, 39, 21, 15, 8, 5, 70, 82, 86, 117, 5, + 35, 28, 25, 20, 9, 5, 64, 73, 89, 70, 35, 32, + 21, 4, 6, 71, 80, 96, 5, 58, 49, 45, 36, 23, 5, + 69, 78, 84, 62, 105, 105, 86, 112, 108, 97, 108, + 104, 101, 105, 106, 110, 95, 94, 90, 92, 92, 85, + 67, 79, 84, 69, 3, 5, 2, 13, 13, 13, 8, 22, 17, + 13, 14, 11, 22, 16, 8, 22, 19, 13, 10, 14, 0, + 64, 68, 5, 70, 19, 32, 20, 10, 29, 25, 12, 23, + 30, 19, 25, 13, 6, 19, 52, 49, 52, 51, 53, 62, + 62, 62, 62, 62, 62, 62, 62, 62, 33, 62, 62, 62, + 62, 62, 62, 53, 36, 35, 6, 81, 74, 95, 122, 62, + 62, 62, 56, 53, 52, 40, 42, 30, 31, 21, 18, 15, + 66, 71, 3, 0, 66, 38, 42, 39, 30, 39, 38, 22, + 30, 33, 20, 5, 9, 1, 86, 23, 12, 4, 78, 70, 68, + 69, 65, 67, 71, 68, 69, 66, 3, 68, 65, 0, 2, 62, + 62, 62, 62, 62, 58, 51, 34, 2, 65, 29, 22, 19, + 16, 8, 4, 2, 65, 75, 84, 80, 76, 80, 78, 71, 73, + 82, 70, 66, 3, 65, 65, 4, 4, 62, 62, 62, 62, 58, + 54, 43, 26, 64 }, + + { + + 62, + 9, 74, 62, 9, 74, 123, 101, 11, 10, 12, 28, 59, + 61, 54, 14, 113, 6, 76, 0, 1, 13, 72, 11, 66, + 19, 60, 70, 92, 105, 121, 101, 67, 76, 0, 1, 85, + 92, 3, 17, 68, 80, 94, 8, 67, 85, 88, 5, 75, 92, + 9, 69, 80, 88, 66, 73, 73, 79, 71, 5, 22, 0, 0, + 0, 81, 86, 97, 71, 21, 1, 18, 77, 95, 122, 94, + 97, 64, 78, 91, 81, 107, 88, 99, 91, 123, 91, + 88, 95, 106, 18, 64, 7, 91, 73, 90, 86, 123, 9, + 3, 4, 69, 16, 68, 68, 87, 84, 77, 74, 76, 9, 13, + 67, 13, 21, 80, 0, 69, 67, 6, 75, 27, 64, 2, 27, + 36, 38, 33, 26, 91, 72, 72, 16, 13, 99, 9, 10, + 10, 3, 7, 7, 2, 4, 2, 6, 68, 6, 23, 12, 69, 64, + 2, 64, 13, 22, 19, 11, 14, 4, 5, 4, 28, 19, 19, + 77, 3, 70, 34, 23, 19, 14, 17, 19, 12, 16, 24, + 1, 17, 9, 9, 5, 0, 12, 6, 10, 11, 8, 17, 26, 9, + 81, 8, 77, 16, 30, 83, 53, 62, 57, 56, 59, 60, + 54, 54, 50, 41, 33, 30, 39, 26, 72, 67, 4, 68, + 31, 29, 26, 32, 29, 23, 18, 20, 64, 3, 65, 93, + 88, 106, 75, 20, 18, 11, 0, 5, 69, 74, 81, 99, + 75, 39, 21, 15, 8, 5, 70, 81, 85, 115, 5, 35, + 28, 25, 20, 9, 5, 64, 73, 88, 70, 35, 32, 21, 4, + 6, 71, 80, 95, 5, 57, 48, 44, 35, 23, 5, 69, 78, + 84, 62, 104, 104, 85, 111, 107, 96, 107, 103, + 100, 104, 105, 108, 94, 93, 90, 91, 91, 85, 68, + 79, 83, 69, 3, 4, 2, 12, 12, 12, 7, 21, 17, 13, + 14, 10, 21, 16, 8, 21, 18, 13, 10, 13, 0, 64, + 68, 5, 70, 18, 31, 19, 10, 28, 24, 12, 22, 29, + 19, 25, 12, 5, 17, 51, 48, 51, 50, 52, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 32, 62, 62, 62, 62, + 62, 62, 51, 35, 34, 6, 80, 74, 94, 120, 60, 60, + 62, 54, 51, 50, 38, 40, 29, 29, 20, 16, 14, 67, + 72, 2, 0, 67, 37, 41, 37, 28, 37, 36, 21, 28, + 31, 19, 4, 8, 0, 87, 22, 11, 3, 78, 70, 68, 68, + 65, 66, 70, 67, 68, 65, 4, 67, 64, 1, 3, 62, 62, + 62, 62, 60, 55, 48, 31, 0, 65, 29, 22, 19, 16, + 9, 4, 2, 65, 75, 84, 80, 75, 80, 77, 70, 73, 81, + 69, 65, 3, 65, 64, 4, 4, 62, 62, 62, 60, 55, 50, + 39, 23, 67 }, + + { + + 62, + 9, 74, 62, 9, 74, 121, 99, 12, 10, 11, 26, 57, + 60, 54, 14, 111, 6, 75, 1, 1, 12, 72, 10, 67, + 19, 58, 71, 93, 105, 118, 100, 67, 75, 1, 1, 84, + 91, 4, 17, 68, 79, 93, 7, 68, 85, 88, 5, 75, 92, + 9, 69, 80, 88, 65, 73, 73, 79, 70, 5, 22, 0, 0, + 0, 81, 86, 97, 70, 20, 1, 18, 77, 95, 120, 92, + 96, 1, 76, 90, 80, 105, 87, 98, 90, 121, 90, 88, + 94, 105, 18, 64, 7, 91, 73, 90, 85, 121, 9, 2, + 3, 70, 16, 68, 68, 86, 84, 76, 74, 75, 9, 13, + 67, 13, 20, 80, 0, 69, 67, 6, 75, 26, 64, 2, 26, + 35, 37, 32, 25, 91, 71, 72, 15, 13, 98, 9, 10, + 10, 3, 7, 7, 3, 4, 2, 6, 67, 6, 22, 12, 70, 64, + 2, 64, 12, 21, 19, 11, 13, 4, 5, 4, 26, 19, 18, + 77, 3, 70, 33, 23, 19, 14, 17, 19, 12, 16, 24, + 1, 16, 9, 9, 5, 0, 11, 5, 9, 10, 7, 16, 25, 9, + 81, 7, 77, 15, 28, 83, 52, 62, 55, 54, 57, 58, + 52, 52, 48, 39, 32, 29, 37, 24, 73, 67, 4, 68, + 30, 28, 25, 30, 28, 21, 17, 19, 65, 3, 65, 93, + 88, 106, 74, 20, 18, 11, 0, 5, 69, 74, 80, 98, + 75, 39, 21, 15, 8, 6, 69, 80, 84, 113, 5, 35, + 28, 25, 20, 10, 5, 64, 73, 88, 70, 35, 32, 20, + 4, 6, 71, 80, 94, 5, 57, 48, 43, 34, 23, 5, 69, + 77, 83, 62, 103, 103, 85, 110, 106, 95, 105, + 102, 99, 103, 103, 107, 94, 92, 90, 91, 89, 85, + 68, 79, 83, 69, 2, 4, 2, 11, 11, 11, 6, 21, 16, + 13, 13, 10, 21, 15, 8, 20, 18, 12, 10, 12, 0, + 65, 68, 5, 71, 18, 31, 18, 10, 27, 24, 12, 21, + 28, 18, 24, 11, 5, 16, 50, 47, 51, 49, 51, 61, + 62, 62, 62, 62, 62, 62, 62, 62, 31, 62, 62, 62, + 62, 62, 62, 49, 34, 33, 6, 79, 74, 93, 118, 58, + 58, 62, 52, 49, 48, 37, 38, 27, 28, 19, 15, 12, + 68, 73, 2, 64, 68, 36, 39, 36, 26, 35, 34, 19, + 27, 29, 17, 3, 6, 65, 88, 21, 10, 2, 78, 69, 68, + 68, 64, 66, 69, 66, 67, 64, 5, 66, 0, 3, 4, 62, + 62, 62, 62, 58, 52, 45, 28, 65, 64, 30, 23, 20, + 16, 10, 5, 2, 64, 74, 84, 79, 75, 79, 76, 69, + 73, 81, 69, 65, 3, 64, 0, 4, 4, 62, 62, 62, 57, + 52, 46, 35, 19, 69 }, + + { + + 62, + 9, 74, 62, 9, 74, 120, 98, 12, 10, 11, 25, 56, + 58, 54, 14, 108, 5, 74, 1, 1, 11, 72, 9, 68, 18, + 56, 73, 94, 106, 115, 99, 67, 74, 1, 1, 84, 90, + 4, 16, 68, 79, 93, 7, 68, 84, 88, 5, 75, 91, 8, + 70, 80, 88, 65, 72, 73, 78, 70, 5, 22, 0, 0, 0, + 80, 87, 97, 70, 19, 1, 18, 77, 95, 119, 91, 94, + 2, 75, 89, 79, 104, 85, 97, 89, 119, 90, 87, 94, + 104, 18, 64, 7, 90, 73, 89, 85, 120, 8, 2, 3, + 70, 16, 68, 68, 86, 84, 76, 74, 75, 9, 12, 67, + 13, 20, 80, 0, 69, 67, 6, 75, 26, 65, 2, 26, 34, + 36, 31, 24, 90, 71, 72, 14, 12, 98, 8, 10, 9, 3, + 7, 7, 4, 5, 2, 5, 67, 5, 21, 11, 71, 64, 2, 65, + 12, 20, 18, 10, 13, 5, 5, 4, 25, 18, 17, 77, 3, + 71, 33, 23, 19, 14, 17, 19, 12, 16, 23, 1, 16, + 9, 9, 5, 64, 11, 5, 9, 10, 7, 16, 24, 8, 81, 7, + 77, 14, 27, 83, 50, 62, 53, 52, 55, 56, 50, 50, + 46, 37, 30, 27, 34, 22, 74, 67, 3, 69, 29, 27, + 24, 29, 26, 20, 16, 17, 65, 2, 66, 93, 88, 105, + 74, 20, 18, 11, 0, 5, 69, 74, 80, 97, 74, 39, + 21, 15, 8, 6, 69, 80, 84, 111, 5, 35, 28, 25, + 20, 10, 5, 64, 73, 87, 70, 35, 31, 20, 4, 6, 71, + 80, 94, 5, 56, 47, 42, 33, 23, 5, 69, 77, 83, + 62, 102, 102, 84, 108, 105, 94, 104, 100, 98, + 101, 102, 105, 93, 92, 89, 90, 88, 84, 69, 79, + 82, 69, 2, 3, 1, 10, 10, 10, 5, 20, 16, 13, 13, + 9, 20, 15, 8, 19, 17, 12, 9, 11, 64, 65, 68, 5, + 71, 17, 30, 17, 10, 26, 23, 12, 20, 27, 18, 24, + 10, 4, 14, 49, 47, 50, 48, 49, 60, 62, 62, 62, + 62, 62, 62, 62, 62, 29, 62, 62, 62, 62, 62, 62, + 47, 33, 31, 6, 78, 73, 92, 116, 57, 56, 60, 51, + 47, 46, 35, 36, 26, 26, 17, 13, 11, 69, 74, 1, + 64, 69, 34, 38, 34, 25, 33, 32, 18, 25, 27, 16, + 2, 5, 66, 88, 20, 10, 1, 78, 69, 67, 67, 64, 65, + 68, 66, 66, 0, 6, 65, 1, 4, 5, 62, 62, 62, 61, + 55, 49, 42, 25, 68, 64, 30, 23, 20, 17, 10, 5, + 3, 64, 74, 83, 79, 74, 79, 75, 68, 73, 80, 68, + 64, 3, 64, 1, 4, 4, 62, 62, 61, 54, 49, 42, 31, + 16, 72 }, + + { + + 62, + 9, 74, 62, 9, 74, 118, 96, 12, 10, 10, 23, 54, + 57, 54, 14, 106, 5, 73, 2, 1, 11, 71, 8, 69, 18, + 54, 75, 95, 106, 112, 97, 67, 73, 2, 1, 84, 89, + 4, 16, 68, 79, 92, 7, 69, 84, 88, 5, 75, 90, 8, + 70, 80, 88, 64, 72, 72, 78, 69, 5, 22, 0, 0, 0, + 80, 87, 97, 69, 18, 1, 18, 76, 95, 117, 89, 93, + 4, 73, 87, 78, 103, 84, 96, 88, 117, 89, 87, 93, + 103, 18, 64, 7, 90, 73, 89, 84, 118, 8, 2, 3, + 70, 16, 68, 67, 85, 84, 76, 74, 74, 9, 12, 67, + 13, 20, 79, 0, 68, 67, 6, 75, 25, 65, 2, 25, 33, + 36, 30, 23, 89, 70, 72, 13, 12, 97, 8, 10, 9, 3, + 7, 7, 5, 5, 2, 5, 67, 5, 20, 11, 72, 64, 2, 65, + 11, 19, 18, 10, 12, 5, 5, 4, 24, 18, 16, 77, 3, + 71, 32, 23, 19, 14, 17, 19, 12, 16, 23, 1, 16, + 9, 9, 5, 64, 11, 5, 8, 10, 7, 15, 23, 8, 81, 6, + 77, 13, 26, 83, 49, 61, 52, 51, 53, 54, 48, 48, + 44, 35, 28, 25, 32, 21, 75, 67, 3, 69, 28, 26, + 23, 28, 25, 18, 15, 16, 66, 2, 66, 93, 88, 105, + 74, 20, 18, 11, 0, 5, 68, 73, 79, 96, 74, 39, + 21, 15, 8, 6, 68, 79, 83, 109, 5, 35, 28, 25, + 20, 10, 5, 64, 73, 86, 70, 36, 31, 19, 4, 6, 71, + 80, 93, 5, 56, 46, 41, 32, 23, 5, 69, 77, 82, + 62, 101, 101, 83, 107, 104, 93, 103, 99, 97, + 100, 100, 103, 92, 91, 89, 90, 87, 84, 69, 78, + 81, 69, 1, 3, 1, 10, 9, 9, 4, 19, 15, 13, 12, 9, + 20, 15, 8, 18, 16, 12, 9, 10, 64, 65, 68, 5, 71, + 16, 30, 17, 10, 25, 22, 12, 19, 26, 17, 23, 9, + 3, 12, 48, 46, 50, 47, 48, 58, 62, 62, 62, 62, + 62, 62, 62, 62, 28, 62, 62, 62, 62, 62, 61, 45, + 32, 30, 6, 77, 73, 91, 114, 55, 55, 58, 49, 45, + 44, 34, 34, 25, 24, 16, 11, 9, 70, 75, 1, 64, + 70, 33, 36, 32, 23, 32, 31, 16, 24, 26, 14, 1, + 4, 67, 89, 20, 9, 0, 77, 68, 67, 67, 0, 64, 67, + 65, 65, 1, 8, 64, 2, 5, 7, 62, 62, 62, 58, 53, + 46, 39, 22, 70, 64, 31, 24, 21, 17, 11, 5, 3, 0, + 73, 83, 79, 73, 78, 74, 67, 72, 79, 68, 64, 3, + 0, 2, 4, 4, 62, 62, 58, 51, 46, 39, 27, 12, 75 }, + + { + + 62, + 9, 75, 62, 9, 75, 116, 95, 13, 10, 10, 22, 53, + 56, 54, 14, 104, 5, 73, 3, 1, 10, 71, 7, 70, 17, + 53, 76, 96, 107, 109, 96, 67, 73, 3, 1, 83, 88, + 5, 15, 67, 78, 91, 6, 69, 84, 88, 5, 74, 90, 8, + 70, 79, 88, 64, 72, 72, 78, 69, 5, 22, 0, 0, 0, + 79, 87, 97, 69, 18, 0, 18, 76, 94, 115, 87, 91, + 5, 71, 86, 77, 101, 83, 95, 88, 116, 89, 87, 93, + 103, 19, 64, 7, 89, 72, 88, 84, 117, 8, 1, 2, + 71, 16, 68, 67, 85, 84, 75, 74, 74, 9, 12, 66, + 13, 19, 79, 0, 68, 67, 6, 75, 24, 65, 2, 24, 32, + 35, 30, 23, 89, 70, 72, 13, 11, 97, 7, 10, 9, 3, + 7, 7, 5, 5, 2, 5, 66, 5, 19, 11, 72, 65, 2, 66, + 11, 18, 18, 10, 11, 5, 5, 4, 22, 18, 15, 77, 3, + 72, 31, 23, 18, 14, 17, 19, 12, 16, 23, 1, 15, + 9, 8, 5, 64, 10, 4, 8, 9, 6, 14, 22, 7, 81, 6, + 76, 12, 24, 83, 47, 59, 50, 49, 51, 52, 46, 46, + 42, 33, 27, 24, 30, 19, 76, 67, 3, 70, 27, 25, + 22, 26, 23, 17, 14, 15, 67, 1, 67, 93, 88, 104, + 73, 20, 18, 11, 1, 5, 68, 73, 79, 95, 73, 38, + 21, 15, 8, 7, 68, 78, 82, 107, 5, 36, 28, 25, + 20, 11, 5, 64, 72, 86, 70, 36, 31, 19, 4, 6, 70, + 79, 92, 5, 55, 46, 40, 32, 23, 5, 68, 76, 82, + 62, 101, 100, 83, 106, 103, 92, 101, 98, 96, 99, + 99, 102, 92, 90, 89, 89, 85, 84, 70, 78, 81, 69, + 1, 2, 1, 9, 8, 8, 3, 19, 15, 13, 12, 8, 19, 14, + 8, 18, 16, 11, 9, 10, 64, 66, 68, 5, 72, 16, 29, + 16, 9, 24, 22, 13, 19, 25, 17, 23, 9, 3, 11, 47, + 45, 49, 46, 47, 57, 62, 62, 62, 62, 62, 62, 62, + 61, 27, 62, 62, 62, 62, 62, 59, 43, 31, 29, 6, + 76, 73, 89, 111, 53, 53, 56, 47, 43, 42, 32, 32, + 23, 23, 15, 10, 8, 71, 76, 0, 65, 71, 32, 35, + 31, 21, 30, 29, 15, 22, 24, 13, 64, 2, 69, 90, + 19, 8, 64, 77, 68, 67, 66, 0, 64, 65, 64, 64, 2, + 9, 1, 3, 7, 8, 62, 62, 60, 56, 50, 44, 36, 20, + 72, 0, 31, 24, 21, 17, 12, 6, 3, 0, 73, 83, 78, + 73, 78, 73, 66, 72, 79, 67, 0, 3, 0, 3, 4, 4, + 62, 62, 56, 48, 42, 35, 24, 9, 77 }, + + { + + 62, + 9, 75, 62, 9, 75, 114, 93, 13, 10, 9, 20, 51, + 54, 54, 14, 101, 4, 72, 3, 1, 9, 71, 6, 71, 17, + 51, 78, 97, 107, 106, 95, 67, 72, 3, 1, 83, 87, + 5, 15, 67, 78, 91, 6, 70, 83, 88, 5, 74, 89, 7, + 70, 79, 88, 0, 71, 72, 77, 68, 5, 22, 0, 0, 0, + 79, 87, 97, 68, 17, 0, 18, 76, 94, 114, 85, 90, + 7, 69, 85, 76, 100, 81, 94, 87, 114, 88, 86, 92, + 102, 19, 64, 7, 89, 72, 88, 83, 115, 7, 1, 2, + 71, 16, 68, 67, 84, 84, 75, 74, 73, 9, 11, 66, + 13, 19, 79, 0, 68, 67, 6, 75, 24, 65, 2, 24, 31, + 34, 29, 22, 88, 69, 72, 12, 11, 96, 7, 10, 8, 3, + 7, 7, 6, 6, 2, 5, 66, 5, 18, 11, 73, 65, 2, 66, + 10, 17, 17, 10, 11, 6, 5, 4, 21, 17, 14, 77, 3, + 72, 31, 23, 18, 14, 17, 19, 12, 16, 23, 1, 15, + 9, 8, 5, 64, 10, 4, 7, 9, 6, 14, 21, 7, 81, 5, + 76, 11, 23, 83, 46, 57, 48, 47, 49, 50, 44, 44, + 40, 31, 25, 22, 27, 17, 77, 67, 2, 70, 26, 24, + 21, 25, 22, 15, 13, 14, 67, 1, 67, 93, 88, 104, + 73, 20, 18, 11, 1, 5, 68, 73, 78, 94, 73, 38, + 21, 15, 8, 7, 67, 77, 82, 105, 5, 36, 28, 25, + 20, 11, 5, 64, 72, 85, 70, 36, 30, 18, 4, 6, 70, + 79, 92, 5, 55, 45, 39, 31, 23, 5, 68, 76, 81, + 62, 100, 99, 82, 104, 102, 91, 100, 96, 95, 97, + 97, 100, 91, 89, 88, 89, 84, 83, 70, 78, 80, 69, + 0, 2, 0, 8, 7, 7, 2, 18, 14, 13, 11, 8, 19, 14, + 8, 17, 15, 11, 8, 9, 64, 66, 68, 5, 72, 15, 29, + 15, 9, 23, 21, 13, 18, 24, 16, 22, 8, 2, 9, 46, + 45, 49, 45, 45, 55, 62, 62, 62, 62, 62, 62, 62, + 59, 25, 62, 62, 62, 62, 62, 56, 41, 30, 28, 6, + 75, 72, 88, 109, 52, 51, 54, 46, 41, 40, 31, 30, + 22, 21, 13, 8, 6, 72, 77, 0, 65, 72, 30, 33, 29, + 20, 28, 27, 13, 21, 22, 11, 65, 1, 70, 90, 18, + 8, 65, 77, 67, 66, 66, 1, 0, 64, 0, 0, 3, 10, 2, + 4, 8, 9, 62, 61, 58, 53, 48, 41, 33, 17, 74, 0, + 32, 25, 22, 18, 13, 6, 4, 1, 72, 82, 78, 72, 77, + 72, 65, 72, 78, 67, 0, 3, 1, 4, 4, 4, 62, 62, + 53, 45, 39, 31, 20, 5, 80 }, + + { + + 62, + 8, 75, 62, 8, 75, 113, 92, 13, 10, 9, 19, 50, + 53, 54, 14, 99, 4, 71, 4, 1, 8, 71, 5, 73, 16, + 49, 80, 98, 108, 104, 94, 67, 71, 4, 1, 83, 86, + 5, 14, 67, 78, 90, 5, 70, 83, 89, 5, 74, 89, 7, + 71, 79, 88, 0, 71, 72, 77, 68, 5, 22, 0, 0, 0, + 78, 88, 97, 68, 16, 0, 18, 76, 94, 112, 84, 88, + 8, 68, 84, 75, 99, 80, 93, 86, 112, 88, 86, 92, + 101, 19, 64, 7, 88, 72, 87, 83, 114, 7, 0, 1, + 72, 16, 68, 67, 84, 84, 75, 74, 73, 8, 11, 66, + 13, 18, 79, 0, 68, 67, 5, 75, 23, 66, 2, 23, 29, + 33, 28, 21, 88, 69, 72, 11, 10, 96, 6, 9, 8, 3, + 7, 7, 7, 6, 2, 4, 66, 4, 17, 10, 74, 65, 2, 67, + 10, 16, 17, 9, 10, 6, 5, 4, 19, 17, 13, 77, 3, + 73, 30, 22, 18, 14, 17, 18, 11, 16, 22, 0, 14, + 9, 8, 4, 65, 9, 3, 7, 8, 5, 13, 20, 6, 81, 5, + 76, 10, 21, 83, 44, 55, 46, 45, 47, 47, 42, 42, + 38, 29, 23, 20, 25, 15, 78, 67, 2, 71, 25, 22, + 19, 23, 20, 14, 11, 12, 68, 0, 68, 93, 88, 103, + 73, 20, 18, 11, 1, 5, 68, 73, 78, 93, 72, 38, + 21, 15, 8, 7, 67, 77, 81, 104, 5, 36, 28, 25, + 19, 11, 5, 64, 72, 85, 70, 36, 30, 18, 4, 6, 70, + 79, 91, 5, 54, 44, 38, 30, 22, 5, 68, 76, 81, + 62, 99, 98, 82, 103, 101, 91, 99, 95, 94, 96, + 96, 99, 91, 89, 88, 88, 83, 83, 71, 78, 80, 69, + 0, 1, 0, 7, 6, 5, 1, 17, 14, 13, 11, 7, 18, 13, + 7, 16, 14, 10, 8, 8, 65, 67, 68, 5, 73, 14, 28, + 14, 9, 22, 20, 13, 17, 23, 16, 22, 7, 1, 7, 45, + 44, 48, 43, 44, 54, 62, 62, 62, 62, 62, 62, 62, + 56, 24, 62, 62, 62, 62, 61, 54, 39, 28, 26, 6, + 75, 72, 87, 107, 50, 49, 52, 44, 38, 38, 29, 28, + 20, 19, 12, 6, 5, 73, 78, 64, 66, 73, 29, 32, + 27, 18, 26, 25, 12, 19, 20, 10, 66, 64, 72, 91, + 17, 7, 66, 77, 67, 66, 65, 1, 0, 0, 0, 1, 4, 11, + 3, 5, 9, 10, 61, 59, 56, 51, 45, 38, 30, 14, 77, + 0, 32, 25, 22, 18, 13, 6, 4, 1, 72, 82, 78, 72, + 77, 71, 64, 72, 78, 66, 1, 3, 1, 4, 4, 3, 62, + 61, 51, 42, 36, 27, 16, 2, 83 }, + + { + + 62, + 8, 75, 62, 8, 75, 111, 91, 14, 10, 9, 18, 49, + 52, 54, 14, 97, 4, 70, 5, 1, 8, 70, 4, 74, 15, + 47, 81, 99, 109, 101, 92, 67, 70, 5, 1, 82, 85, + 6, 13, 67, 77, 89, 5, 70, 83, 89, 5, 74, 88, 7, + 71, 79, 88, 0, 71, 71, 77, 68, 5, 22, 0, 0, 0, + 77, 88, 97, 68, 15, 0, 18, 75, 94, 110, 82, 86, + 9, 66, 82, 74, 97, 79, 91, 85, 110, 88, 86, 92, + 100, 19, 64, 7, 87, 72, 86, 82, 113, 7, 0, 1, + 72, 16, 68, 66, 83, 83, 74, 74, 73, 8, 11, 66, + 13, 18, 78, 0, 67, 67, 5, 74, 22, 66, 2, 22, 28, + 33, 27, 20, 87, 69, 71, 10, 9, 96, 5, 9, 8, 4, + 7, 7, 8, 6, 2, 4, 65, 4, 17, 10, 75, 65, 2, 68, + 10, 15, 17, 9, 9, 6, 5, 4, 18, 17, 13, 77, 3, + 74, 29, 22, 18, 14, 17, 18, 11, 16, 22, 0, 14, + 9, 8, 4, 65, 9, 3, 7, 8, 5, 12, 20, 6, 81, 5, + 76, 9, 20, 83, 42, 54, 45, 44, 45, 45, 41, 41, + 36, 27, 22, 19, 23, 14, 79, 67, 2, 72, 24, 21, + 18, 22, 19, 13, 10, 11, 69, 64, 69, 93, 87, 102, + 72, 21, 18, 11, 1, 6, 67, 72, 77, 92, 71, 38, + 21, 15, 8, 8, 67, 76, 80, 102, 5, 36, 28, 25, + 19, 12, 5, 64, 72, 84, 70, 37, 30, 18, 4, 7, 70, + 79, 90, 5, 54, 44, 38, 29, 22, 5, 68, 75, 80, + 62, 98, 97, 81, 102, 99, 90, 97, 94, 92, 95, 95, + 97, 90, 88, 88, 87, 81, 83, 72, 77, 79, 69, 0, + 0, 0, 7, 5, 4, 0, 17, 14, 13, 11, 7, 17, 13, 7, + 15, 14, 10, 8, 7, 65, 67, 67, 6, 73, 14, 27, 14, + 9, 22, 20, 13, 16, 22, 16, 22, 6, 1, 6, 45, 43, + 47, 42, 43, 53, 60, 60, 62, 62, 62, 62, 62, 54, + 23, 62, 62, 62, 62, 58, 52, 38, 27, 25, 6, 74, + 72, 86, 105, 48, 48, 50, 42, 36, 37, 28, 26, 19, + 18, 11, 5, 4, 74, 78, 64, 66, 74, 28, 31, 26, + 16, 25, 24, 11, 18, 19, 9, 67, 65, 73, 92, 17, + 6, 66, 76, 67, 66, 64, 2, 1, 1, 1, 2, 5, 13, 4, + 6, 11, 12, 60, 58, 54, 49, 42, 35, 27, 11, 79, + 1, 32, 25, 23, 18, 14, 7, 4, 2, 71, 82, 77, 71, + 77, 70, 1, 71, 77, 65, 2, 3, 2, 5, 4, 3, 62, 59, + 49, 40, 33, 24, 12, 64, 85 }, + + { + + 62, + 8, 75, 62, 8, 75, 109, 89, 14, 10, 8, 16, 47, + 50, 54, 14, 94, 3, 69, 5, 1, 7, 70, 3, 75, 15, + 45, 83, 100, 109, 98, 91, 67, 69, 5, 1, 82, 84, + 6, 13, 67, 77, 89, 5, 71, 82, 89, 5, 74, 87, 6, + 71, 79, 88, 1, 70, 71, 76, 67, 5, 22, 0, 0, 0, + 77, 88, 97, 67, 14, 0, 18, 75, 94, 109, 80, 85, + 11, 64, 81, 73, 96, 77, 90, 84, 108, 87, 85, 91, + 99, 19, 64, 7, 87, 72, 86, 82, 111, 6, 0, 1, 72, + 16, 68, 66, 83, 83, 74, 74, 72, 8, 10, 66, 13, + 18, 78, 0, 67, 67, 5, 74, 22, 66, 2, 22, 27, 32, + 26, 19, 86, 68, 71, 9, 9, 95, 5, 9, 7, 4, 7, 7, + 9, 7, 2, 4, 65, 4, 16, 10, 76, 65, 2, 68, 9, 14, + 16, 9, 9, 7, 5, 4, 17, 16, 12, 77, 3, 74, 29, + 22, 18, 14, 17, 18, 11, 16, 22, 0, 14, 9, 8, 4, + 65, 9, 3, 6, 8, 5, 12, 19, 5, 81, 4, 76, 8, 19, + 83, 41, 52, 43, 42, 43, 43, 39, 39, 34, 25, 20, + 17, 20, 12, 80, 67, 1, 72, 23, 20, 17, 21, 17, + 11, 9, 10, 69, 64, 69, 93, 87, 102, 72, 21, 18, + 11, 1, 6, 67, 72, 77, 91, 71, 38, 21, 15, 8, 8, + 66, 75, 80, 100, 5, 36, 28, 25, 19, 12, 5, 64, + 72, 83, 70, 37, 29, 17, 4, 7, 70, 79, 90, 5, 53, + 43, 37, 28, 22, 5, 68, 75, 80, 62, 97, 96, 80, + 100, 98, 89, 96, 92, 91, 93, 93, 95, 89, 87, 87, + 87, 80, 82, 72, 77, 78, 69, 64, 0, 64, 6, 4, 3, + 64, 16, 13, 13, 10, 6, 17, 13, 7, 14, 13, 10, 7, + 6, 65, 67, 67, 6, 73, 13, 27, 13, 9, 21, 19, 13, + 15, 21, 15, 21, 5, 0, 4, 44, 43, 47, 41, 41, 51, + 58, 58, 62, 62, 62, 62, 62, 52, 21, 59, 62, 59, + 62, 56, 49, 36, 26, 24, 6, 73, 71, 85, 103, 47, + 46, 48, 41, 34, 35, 26, 24, 18, 16, 9, 3, 2, 75, + 79, 65, 66, 75, 26, 29, 24, 15, 23, 22, 9, 16, + 17, 7, 68, 66, 74, 92, 16, 6, 67, 76, 66, 65, + 64, 2, 2, 2, 2, 3, 6, 14, 5, 7, 12, 13, 60, 56, + 52, 46, 40, 32, 24, 8, 81, 1, 33, 26, 23, 19, + 15, 7, 5, 2, 71, 81, 77, 70, 76, 69, 2, 71, 76, + 65, 2, 3, 2, 6, 4, 3, 62, 57, 46, 37, 30, 20, 8, + 68, 88 }, + + { + + 62, + 8, 76, 62, 8, 76, 107, 88, 15, 10, 8, 15, 46, + 49, 54, 14, 92, 3, 69, 6, 1, 6, 70, 2, 76, 14, + 44, 84, 101, 110, 95, 90, 67, 69, 6, 1, 81, 83, + 7, 12, 66, 76, 88, 4, 71, 82, 89, 5, 73, 87, 6, + 71, 78, 88, 1, 70, 71, 76, 67, 5, 22, 0, 0, 0, + 76, 88, 97, 67, 14, 64, 18, 75, 93, 107, 78, 83, + 12, 1, 80, 72, 94, 76, 89, 84, 107, 87, 85, 91, + 99, 20, 64, 7, 86, 71, 85, 81, 110, 6, 64, 0, + 73, 16, 68, 66, 82, 83, 73, 74, 72, 8, 10, 65, + 13, 17, 78, 0, 67, 67, 5, 74, 21, 66, 2, 21, 26, + 31, 26, 19, 86, 68, 71, 9, 8, 95, 4, 9, 7, 4, 7, + 7, 9, 7, 2, 4, 64, 4, 15, 10, 76, 66, 2, 69, 9, + 13, 16, 9, 8, 7, 5, 4, 15, 16, 11, 77, 3, 75, + 28, 22, 17, 14, 17, 18, 11, 16, 22, 0, 13, 9, 7, + 4, 65, 8, 2, 6, 7, 4, 11, 18, 5, 81, 4, 75, 7, + 17, 83, 39, 50, 41, 40, 41, 41, 37, 37, 32, 23, + 19, 16, 18, 10, 81, 67, 1, 73, 22, 19, 16, 19, + 16, 10, 8, 9, 70, 65, 70, 93, 87, 101, 71, 21, + 18, 11, 2, 6, 67, 72, 76, 90, 70, 37, 21, 15, 8, + 9, 66, 74, 79, 98, 5, 37, 28, 25, 19, 13, 5, 64, + 71, 83, 70, 37, 29, 17, 4, 7, 69, 78, 89, 5, 53, + 43, 36, 28, 22, 5, 67, 74, 79, 62, 97, 95, 80, + 99, 97, 88, 94, 91, 90, 92, 92, 94, 89, 86, 87, + 86, 78, 82, 73, 77, 78, 69, 64, 64, 64, 5, 3, 2, + 65, 16, 13, 13, 10, 6, 16, 12, 7, 14, 13, 9, 7, + 6, 65, 68, 67, 6, 74, 13, 26, 12, 8, 20, 19, 14, + 15, 20, 15, 21, 5, 0, 3, 43, 42, 46, 40, 40, 50, + 56, 56, 61, 60, 62, 62, 60, 49, 20, 57, 62, 56, + 62, 53, 47, 34, 25, 23, 6, 72, 71, 83, 100, 45, + 44, 46, 39, 32, 33, 25, 22, 16, 15, 8, 2, 1, 76, + 80, 65, 67, 76, 25, 28, 23, 13, 21, 20, 8, 15, + 15, 6, 70, 68, 76, 93, 15, 5, 68, 76, 66, 65, 0, + 3, 2, 4, 3, 4, 7, 15, 7, 8, 14, 14, 59, 55, 50, + 44, 37, 30, 21, 6, 83, 2, 33, 26, 24, 19, 16, 8, + 5, 3, 70, 81, 76, 70, 76, 68, 3, 71, 76, 64, 3, + 3, 3, 7, 4, 3, 62, 55, 44, 34, 26, 16, 5, 71, 90 }, + + { + + 62, + 8, 76, 62, 8, 76, 106, 86, 15, 10, 7, 13, 44, + 48, 54, 14, 90, 3, 68, 7, 1, 5, 70, 1, 77, 14, + 42, 86, 102, 110, 92, 89, 67, 68, 7, 1, 81, 82, + 7, 12, 66, 76, 87, 4, 72, 82, 89, 5, 73, 86, 6, + 72, 78, 88, 2, 70, 71, 76, 66, 5, 22, 0, 0, 0, + 76, 89, 97, 66, 13, 64, 18, 75, 93, 105, 77, 82, + 14, 2, 79, 71, 93, 75, 88, 83, 105, 86, 85, 90, + 98, 20, 64, 7, 86, 71, 85, 81, 108, 6, 64, 0, + 73, 16, 68, 66, 82, 83, 73, 74, 71, 8, 10, 65, + 13, 17, 78, 0, 67, 67, 5, 74, 20, 67, 2, 20, 25, + 30, 25, 18, 85, 67, 71, 8, 8, 94, 4, 9, 7, 4, 7, + 7, 10, 7, 2, 3, 64, 3, 14, 9, 77, 66, 2, 69, 8, + 12, 16, 8, 7, 7, 5, 4, 14, 16, 10, 77, 3, 75, + 27, 22, 17, 14, 17, 18, 11, 16, 21, 0, 13, 9, 7, + 4, 66, 8, 2, 5, 7, 4, 10, 17, 4, 81, 3, 75, 6, + 16, 83, 38, 48, 39, 38, 39, 39, 35, 35, 30, 21, + 17, 14, 16, 8, 82, 67, 1, 73, 21, 18, 15, 18, + 14, 8, 7, 7, 71, 65, 70, 93, 87, 101, 71, 21, + 18, 11, 2, 6, 67, 72, 76, 89, 70, 37, 21, 15, 8, + 9, 65, 74, 78, 96, 5, 37, 28, 25, 19, 13, 5, 64, + 71, 82, 70, 37, 29, 16, 4, 7, 69, 78, 88, 5, 52, + 42, 35, 27, 22, 5, 67, 74, 79, 62, 96, 94, 79, + 98, 96, 87, 93, 90, 89, 91, 90, 92, 88, 86, 87, + 86, 77, 82, 73, 77, 77, 69, 65, 64, 64, 4, 2, 1, + 66, 15, 12, 13, 9, 5, 16, 12, 7, 13, 12, 9, 7, + 5, 66, 68, 67, 6, 74, 12, 26, 11, 8, 19, 18, 14, + 14, 19, 14, 20, 4, 64, 1, 42, 41, 46, 39, 39, + 48, 54, 54, 59, 57, 62, 62, 57, 47, 19, 54, 62, + 53, 58, 50, 44, 32, 24, 21, 6, 71, 71, 82, 98, + 43, 42, 44, 37, 30, 31, 23, 20, 15, 13, 7, 0, + 64, 77, 81, 66, 67, 77, 24, 26, 21, 11, 19, 18, + 6, 13, 13, 4, 71, 69, 77, 94, 14, 4, 69, 76, 65, + 65, 0, 3, 3, 5, 3, 5, 8, 16, 8, 9, 15, 15, 59, + 53, 48, 41, 35, 27, 18, 3, 86, 2, 34, 27, 24, + 19, 16, 8, 5, 3, 70, 81, 76, 69, 75, 67, 4, 71, + 75, 64, 3, 3, 3, 8, 4, 3, 61, 53, 41, 31, 23, + 12, 1, 75, 93 }, + + { + + 62, + 8, 76, 62, 8, 76, 104, 85, 15, 10, 7, 12, 43, + 46, 54, 14, 87, 2, 67, 7, 1, 5, 69, 0, 78, 13, + 40, 88, 103, 111, 89, 87, 67, 67, 7, 1, 81, 81, + 7, 11, 66, 76, 87, 4, 72, 81, 89, 5, 73, 85, 5, + 72, 78, 88, 2, 69, 70, 75, 66, 5, 22, 0, 0, 0, + 75, 89, 97, 66, 12, 64, 18, 74, 93, 104, 75, 80, + 15, 4, 77, 70, 92, 73, 87, 82, 103, 86, 84, 90, + 97, 20, 64, 7, 85, 71, 84, 80, 107, 5, 64, 0, + 73, 16, 68, 65, 81, 83, 73, 74, 71, 8, 9, 65, + 13, 17, 77, 0, 66, 67, 5, 74, 20, 67, 2, 20, 24, + 30, 24, 17, 84, 67, 71, 7, 7, 94, 3, 9, 6, 4, 7, + 7, 11, 8, 2, 3, 64, 3, 13, 9, 78, 66, 2, 70, 8, + 11, 15, 8, 7, 8, 5, 4, 13, 15, 9, 77, 3, 76, 27, + 22, 17, 14, 17, 18, 11, 16, 21, 0, 13, 9, 7, 4, + 66, 8, 2, 5, 7, 4, 10, 16, 4, 81, 3, 75, 5, 15, + 83, 36, 46, 38, 37, 37, 37, 33, 33, 28, 19, 15, + 12, 13, 7, 83, 67, 0, 74, 20, 17, 14, 17, 13, 7, + 6, 6, 71, 66, 71, 93, 87, 100, 71, 21, 18, 11, + 2, 6, 66, 71, 75, 88, 69, 37, 21, 15, 8, 9, 65, + 73, 78, 94, 5, 37, 28, 25, 19, 13, 5, 64, 71, + 81, 70, 38, 28, 16, 4, 7, 69, 78, 88, 5, 52, 41, + 34, 26, 22, 5, 67, 74, 78, 62, 95, 93, 78, 96, + 95, 86, 92, 88, 88, 89, 89, 90, 87, 85, 86, 85, + 76, 81, 74, 76, 76, 69, 65, 65, 65, 4, 1, 0, 67, + 14, 12, 13, 9, 5, 15, 12, 7, 12, 11, 9, 6, 4, + 66, 68, 67, 6, 74, 11, 25, 11, 8, 18, 17, 14, + 13, 18, 14, 20, 3, 65, 64, 41, 41, 45, 38, 37, + 47, 52, 52, 57, 55, 62, 61, 54, 45, 17, 51, 62, + 50, 54, 48, 42, 30, 23, 20, 6, 70, 70, 81, 96, + 42, 41, 42, 36, 28, 29, 22, 18, 14, 11, 5, 65, + 65, 78, 82, 66, 67, 78, 22, 25, 19, 10, 18, 17, + 5, 12, 12, 3, 72, 70, 78, 94, 14, 4, 70, 75, 65, + 64, 1, 4, 4, 6, 4, 6, 9, 18, 9, 10, 16, 17, 58, + 51, 46, 39, 32, 24, 15, 0, 88, 2, 34, 27, 25, + 20, 17, 8, 6, 4, 69, 80, 76, 68, 75, 66, 5, 70, + 74, 0, 4, 3, 4, 9, 4, 3, 59, 51, 39, 28, 20, 9, + 66, 78, 96 }, + + { + + 61, + 8, 76, 61, 8, 76, 102, 83, 16, 10, 6, 10, 41, + 45, 54, 14, 85, 2, 66, 8, 1, 4, 69, 64, 79, 13, + 38, 89, 104, 111, 86, 86, 67, 66, 8, 1, 80, 80, + 8, 11, 66, 75, 86, 3, 73, 81, 89, 5, 73, 85, 5, + 72, 78, 88, 3, 69, 70, 75, 65, 5, 22, 0, 0, 0, + 75, 89, 97, 65, 11, 64, 18, 74, 93, 102, 73, 79, + 17, 6, 76, 69, 90, 72, 86, 81, 101, 85, 84, 89, + 96, 20, 64, 7, 85, 71, 84, 80, 105, 5, 65, 64, + 74, 16, 68, 65, 81, 83, 72, 74, 70, 8, 9, 65, + 13, 16, 77, 0, 66, 67, 5, 74, 19, 67, 2, 19, 23, + 29, 23, 16, 84, 66, 71, 6, 7, 93, 3, 9, 6, 4, 7, + 7, 12, 8, 2, 3, 0, 3, 12, 9, 79, 66, 2, 70, 7, + 10, 15, 8, 6, 8, 5, 4, 11, 15, 8, 77, 3, 76, 26, + 22, 17, 14, 17, 18, 11, 16, 21, 0, 12, 9, 7, 4, + 66, 7, 1, 4, 6, 3, 9, 15, 3, 81, 2, 75, 4, 13, + 83, 35, 44, 36, 35, 35, 35, 31, 31, 26, 17, 14, + 11, 11, 5, 84, 67, 0, 74, 19, 16, 13, 15, 11, 5, + 5, 5, 72, 66, 71, 93, 87, 100, 70, 21, 18, 11, + 2, 6, 66, 71, 75, 87, 69, 37, 21, 15, 8, 10, 64, + 72, 77, 92, 5, 37, 28, 25, 19, 14, 5, 64, 71, + 81, 70, 38, 28, 15, 4, 7, 69, 78, 87, 5, 51, 41, + 33, 25, 22, 5, 67, 73, 78, 62, 94, 92, 78, 95, + 94, 85, 90, 87, 87, 88, 87, 89, 87, 84, 86, 85, + 74, 81, 74, 76, 76, 69, 66, 65, 65, 3, 0, 64, + 68, 14, 11, 13, 8, 4, 15, 11, 7, 11, 11, 8, 6, + 3, 66, 69, 67, 6, 75, 11, 25, 10, 8, 17, 17, 14, + 12, 17, 13, 19, 2, 65, 65, 40, 40, 45, 37, 36, + 45, 50, 50, 55, 52, 60, 59, 51, 42, 16, 48, 62, + 47, 50, 45, 39, 28, 22, 19, 6, 69, 70, 80, 94, + 40, 39, 40, 34, 26, 27, 20, 16, 12, 10, 4, 66, + 67, 79, 83, 67, 68, 79, 21, 23, 18, 8, 16, 15, + 3, 10, 10, 1, 73, 72, 80, 95, 13, 3, 71, 75, 64, + 64, 1, 4, 4, 7, 5, 7, 10, 19, 10, 11, 18, 18, + 58, 50, 44, 36, 30, 21, 12, 66, 90, 3, 35, 28, + 25, 20, 18, 9, 6, 4, 69, 80, 75, 68, 74, 65, 6, + 70, 74, 0, 4, 3, 4, 10, 4, 3, 58, 49, 36, 25, + 17, 5, 70, 82, 98 }, + + { + + 60, + 8, 76, 60, 8, 76, 100, 82, 16, 10, 6, 9, 40, 44, + 54, 14, 83, 2, 65, 9, 1, 3, 69, 65, 80, 12, 36, + 91, 105, 112, 83, 85, 67, 65, 9, 1, 80, 79, 8, + 10, 66, 75, 85, 3, 73, 81, 89, 5, 73, 84, 5, 72, + 78, 88, 3, 69, 70, 75, 65, 5, 22, 0, 0, 0, 74, + 89, 97, 65, 10, 64, 18, 74, 93, 100, 71, 77, 18, + 8, 75, 68, 89, 71, 85, 80, 99, 85, 84, 89, 95, + 20, 64, 7, 84, 71, 83, 79, 104, 5, 65, 64, 74, + 16, 68, 65, 80, 83, 72, 74, 70, 8, 9, 65, 13, + 16, 77, 0, 66, 67, 5, 74, 18, 67, 2, 18, 22, 28, + 22, 15, 83, 66, 71, 5, 6, 93, 2, 9, 6, 4, 7, 7, + 13, 8, 2, 3, 0, 3, 11, 9, 80, 66, 2, 71, 7, 9, + 15, 8, 5, 8, 5, 4, 10, 15, 7, 77, 3, 77, 25, 22, + 17, 14, 17, 18, 11, 16, 21, 0, 12, 9, 7, 4, 66, + 7, 1, 4, 6, 3, 8, 14, 3, 81, 2, 75, 3, 12, 83, + 33, 42, 34, 33, 33, 33, 29, 29, 24, 15, 12, 9, + 9, 3, 85, 67, 0, 75, 18, 15, 12, 14, 10, 4, 4, + 4, 73, 67, 72, 93, 87, 99, 70, 21, 18, 11, 2, 6, + 66, 71, 74, 86, 68, 37, 21, 15, 8, 10, 64, 71, + 76, 90, 5, 37, 28, 25, 19, 14, 5, 64, 71, 80, + 70, 38, 28, 15, 4, 7, 69, 78, 86, 5, 51, 40, 32, + 24, 22, 5, 67, 73, 77, 62, 93, 91, 77, 94, 93, + 84, 89, 86, 86, 87, 86, 87, 86, 83, 86, 84, 73, + 81, 75, 76, 75, 69, 66, 66, 65, 2, 64, 65, 69, + 13, 11, 13, 8, 4, 14, 11, 7, 10, 10, 8, 6, 2, + 66, 69, 67, 6, 75, 10, 24, 9, 8, 16, 16, 14, 11, + 16, 13, 19, 1, 66, 67, 39, 39, 44, 36, 35, 44, + 48, 48, 53, 50, 57, 56, 48, 40, 15, 45, 59, 44, + 46, 42, 37, 26, 21, 18, 6, 68, 70, 79, 92, 38, + 37, 38, 32, 24, 25, 19, 14, 11, 8, 3, 68, 68, + 80, 84, 67, 68, 80, 20, 22, 16, 6, 14, 13, 2, 9, + 8, 0, 74, 73, 81, 96, 12, 2, 72, 75, 64, 64, 2, + 5, 5, 8, 6, 8, 11, 20, 11, 12, 19, 19, 57, 48, + 42, 34, 27, 18, 9, 69, 92, 3, 35, 28, 26, 20, + 19, 9, 6, 5, 68, 80, 75, 67, 74, 64, 7, 70, 73, + 1, 5, 3, 5, 11, 4, 3, 57, 47, 34, 22, 14, 1, 74, + 85, 101 }, + + { + + 58, + 7, 77, 58, 7, 77, 99, 81, 16, 10, 5, 7, 38, 42, + 53, 14, 81, 1, 65, 9, 0, 2, 69, 67, 82, 11, 34, + 93, 106, 113, 81, 84, 68, 65, 9, 0, 80, 78, 8, + 9, 66, 75, 85, 2, 74, 81, 90, 5, 73, 84, 4, 73, + 78, 88, 3, 69, 70, 75, 65, 4, 22, 0, 0, 0, 74, + 90, 97, 65, 9, 65, 18, 74, 93, 99, 70, 76, 19, + 9, 74, 67, 88, 70, 84, 80, 98, 85, 84, 89, 95, + 20, 64, 7, 84, 71, 83, 79, 103, 4, 66, 65, 75, + 16, 68, 65, 80, 83, 72, 74, 70, 7, 8, 65, 12, + 15, 77, 64, 66, 67, 4, 74, 17, 68, 1, 17, 20, + 27, 21, 14, 83, 66, 71, 4, 5, 93, 1, 8, 5, 4, 7, + 7, 13, 8, 2, 2, 0, 2, 10, 8, 81, 67, 1, 72, 6, + 8, 14, 7, 4, 8, 5, 4, 8, 14, 6, 77, 3, 78, 24, + 21, 16, 14, 17, 17, 10, 16, 20, 64, 11, 9, 6, 3, + 67, 6, 0, 3, 5, 2, 7, 13, 2, 81, 1, 75, 2, 10, + 83, 31, 40, 32, 31, 31, 30, 27, 27, 22, 13, 10, + 7, 6, 1, 87, 68, 64, 76, 17, 13, 10, 12, 8, 2, + 2, 2, 74, 68, 73, 93, 87, 99, 70, 21, 18, 11, 2, + 6, 66, 71, 74, 85, 68, 36, 21, 15, 8, 10, 64, + 71, 76, 89, 4, 37, 28, 24, 18, 14, 5, 64, 71, + 80, 70, 38, 27, 14, 3, 7, 69, 78, 86, 5, 50, 39, + 31, 23, 21, 5, 67, 73, 77, 62, 93, 90, 77, 93, + 92, 84, 88, 85, 85, 86, 85, 86, 86, 83, 86, 84, + 72, 81, 76, 76, 75, 69, 67, 67, 66, 1, 65, 67, + 71, 12, 10, 13, 7, 3, 13, 10, 6, 9, 9, 7, 5, 1, + 67, 70, 67, 6, 76, 9, 23, 8, 7, 15, 15, 14, 10, + 14, 12, 18, 0, 67, 69, 38, 38, 43, 34, 33, 42, + 46, 46, 50, 47, 54, 53, 45, 37, 13, 42, 55, 41, + 41, 39, 34, 24, 19, 16, 6, 68, 70, 78, 90, 36, + 35, 36, 30, 21, 23, 17, 11, 9, 6, 1, 70, 70, 81, + 85, 68, 69, 82, 18, 20, 14, 4, 12, 11, 0, 7, 6, + 65, 76, 75, 83, 97, 11, 1, 73, 75, 64, 64, 2, 5, + 5, 9, 6, 9, 11, 21, 12, 13, 20, 20, 56, 46, 39, + 31, 24, 15, 5, 72, 95, 3, 35, 28, 26, 20, 19, 9, + 6, 5, 68, 80, 75, 67, 74, 0, 8, 70, 73, 1, 5, 3, + 5, 11, 4, 2, 55, 44, 31, 19, 10, 66, 78, 89, 104 }, + + { + + 57, + 7, 77, 57, 7, 77, 97, 79, 17, 11, 5, 6, 37, 41, + 53, 14, 78, 1, 64, 10, 0, 2, 68, 68, 83, 11, 33, + 94, 107, 113, 78, 82, 68, 64, 10, 0, 79, 76, 9, + 9, 65, 74, 84, 2, 74, 80, 90, 5, 72, 83, 4, 73, + 77, 88, 4, 68, 69, 74, 64, 4, 22, 0, 0, 0, 73, + 90, 97, 64, 9, 65, 18, 73, 92, 97, 68, 74, 21, + 11, 72, 66, 86, 68, 82, 79, 96, 84, 83, 88, 94, + 21, 0, 8, 83, 70, 82, 78, 101, 4, 66, 65, 75, + 17, 68, 64, 79, 82, 71, 73, 69, 7, 8, 64, 12, + 15, 76, 64, 65, 67, 4, 73, 17, 68, 1, 17, 19, + 27, 21, 14, 82, 65, 70, 4, 5, 92, 1, 8, 5, 5, 7, + 7, 14, 9, 3, 2, 1, 2, 10, 8, 81, 67, 1, 72, 6, + 7, 14, 7, 4, 9, 6, 4, 7, 14, 6, 76, 3, 78, 24, + 21, 16, 14, 17, 17, 10, 16, 20, 64, 11, 9, 6, 3, + 67, 6, 0, 3, 5, 2, 7, 13, 2, 80, 1, 74, 2, 9, + 82, 30, 39, 31, 30, 29, 28, 26, 26, 20, 12, 9, + 6, 4, 0, 88, 68, 64, 76, 16, 12, 9, 11, 7, 1, 1, + 1, 74, 68, 73, 92, 86, 98, 69, 22, 18, 11, 3, 7, + 65, 70, 73, 83, 67, 36, 21, 15, 8, 11, 0, 70, + 75, 87, 4, 38, 29, 24, 18, 15, 5, 64, 70, 79, + 70, 39, 27, 14, 3, 8, 68, 77, 85, 5, 50, 39, 31, + 23, 21, 5, 66, 72, 76, 62, 92, 89, 76, 91, 90, + 83, 86, 83, 83, 84, 83, 84, 85, 82, 85, 83, 70, + 80, 76, 75, 74, 68, 67, 67, 66, 1, 65, 68, 72, + 12, 10, 14, 7, 3, 13, 10, 6, 9, 9, 7, 5, 1, 67, + 70, 66, 7, 76, 9, 23, 8, 7, 15, 15, 15, 10, 13, + 12, 18, 0, 67, 70, 38, 38, 43, 33, 32, 41, 44, + 44, 48, 45, 52, 51, 43, 35, 12, 40, 52, 38, 37, + 37, 32, 23, 18, 15, 6, 67, 69, 76, 87, 35, 34, + 35, 29, 19, 22, 16, 9, 8, 5, 0, 71, 71, 82, 85, + 68, 69, 83, 17, 19, 13, 3, 11, 10, 64, 6, 5, 66, + 77, 76, 84, 97, 11, 1, 73, 74, 0, 0, 3, 6, 6, + 11, 7, 10, 12, 23, 14, 14, 22, 22, 56, 45, 37, + 29, 22, 13, 2, 74, 97, 4, 36, 29, 27, 21, 20, + 10, 7, 6, 67, 79, 74, 66, 73, 2, 10, 69, 72, 2, + 6, 4, 6, 12, 4, 2, 54, 42, 29, 17, 7, 69, 81, + 92, 106 }, + + { + + 56, + 7, 77, 56, 7, 77, 95, 78, 17, 11, 5, 5, 36, 40, + 53, 14, 76, 1, 0, 11, 0, 1, 68, 69, 84, 10, 31, + 96, 108, 114, 75, 81, 68, 0, 11, 0, 79, 75, 9, + 8, 65, 74, 83, 2, 74, 80, 90, 5, 72, 82, 4, 73, + 77, 88, 4, 68, 69, 74, 64, 4, 22, 0, 0, 0, 72, + 90, 97, 64, 8, 65, 18, 73, 92, 95, 66, 72, 22, + 13, 71, 65, 85, 67, 81, 78, 94, 84, 83, 88, 93, + 21, 0, 8, 82, 70, 81, 78, 100, 4, 66, 65, 75, + 17, 68, 64, 79, 82, 71, 73, 69, 7, 8, 64, 12, + 15, 76, 64, 65, 67, 4, 73, 16, 68, 1, 16, 18, + 26, 20, 13, 81, 65, 70, 3, 4, 92, 0, 8, 5, 5, 7, + 7, 15, 9, 3, 2, 1, 2, 9, 8, 82, 67, 1, 73, 6, 6, + 14, 7, 3, 9, 6, 4, 6, 14, 5, 76, 3, 79, 23, 21, + 16, 14, 17, 17, 10, 16, 20, 64, 11, 9, 6, 3, 67, + 6, 0, 3, 5, 2, 6, 12, 1, 80, 1, 74, 1, 8, 82, + 28, 37, 29, 28, 27, 26, 24, 24, 18, 10, 7, 4, 2, + 65, 89, 68, 64, 77, 15, 11, 8, 10, 5, 0, 0, 0, + 75, 69, 74, 92, 86, 97, 69, 22, 18, 11, 3, 7, + 65, 70, 73, 82, 66, 36, 21, 15, 8, 11, 0, 69, + 74, 85, 4, 38, 29, 24, 18, 15, 5, 64, 70, 78, + 70, 39, 27, 14, 3, 8, 68, 77, 84, 5, 49, 38, 30, + 22, 21, 5, 66, 72, 76, 62, 91, 88, 75, 90, 89, + 82, 85, 82, 82, 83, 82, 82, 84, 81, 85, 82, 69, + 80, 77, 75, 73, 68, 67, 68, 66, 0, 66, 69, 73, + 11, 10, 14, 7, 2, 12, 10, 6, 8, 8, 7, 5, 0, 67, + 70, 66, 7, 76, 8, 22, 7, 7, 14, 14, 15, 9, 12, + 12, 18, 64, 68, 72, 37, 37, 42, 32, 31, 40, 42, + 42, 46, 43, 49, 48, 40, 33, 11, 37, 49, 35, 33, + 34, 30, 21, 17, 14, 6, 66, 69, 75, 85, 33, 32, + 33, 27, 17, 20, 14, 7, 7, 3, 64, 73, 72, 83, 86, + 69, 69, 84, 16, 18, 11, 1, 9, 8, 65, 4, 3, 67, + 78, 77, 85, 98, 10, 0, 74, 74, 0, 0, 4, 6, 7, + 12, 8, 11, 13, 24, 15, 15, 23, 23, 55, 43, 35, + 27, 19, 10, 64, 77, 99, 4, 36, 29, 27, 21, 21, + 10, 7, 6, 67, 79, 74, 65, 73, 3, 11, 69, 71, 3, + 7, 4, 6, 13, 4, 2, 53, 40, 27, 14, 4, 73, 85, + 95, 109 }, + + { + + 55, + 7, 77, 55, 7, 77, 93, 76, 18, 11, 4, 3, 34, 39, + 53, 14, 74, 1, 1, 12, 0, 0, 68, 70, 85, 10, 29, + 97, 109, 114, 72, 80, 68, 1, 12, 0, 78, 74, 10, + 8, 65, 73, 82, 1, 75, 80, 90, 5, 72, 82, 4, 73, + 77, 88, 5, 68, 69, 74, 0, 4, 22, 0, 0, 0, 72, + 90, 97, 0, 7, 65, 18, 73, 92, 93, 64, 71, 24, + 15, 70, 64, 83, 66, 80, 77, 92, 83, 83, 87, 92, + 21, 0, 8, 82, 70, 81, 77, 98, 4, 67, 66, 76, 17, + 68, 64, 78, 82, 70, 73, 68, 7, 8, 64, 12, 14, + 76, 64, 65, 67, 4, 73, 15, 68, 1, 15, 17, 25, + 19, 12, 81, 64, 70, 2, 4, 91, 0, 8, 5, 5, 7, 7, + 16, 9, 3, 2, 2, 2, 8, 8, 83, 67, 1, 73, 5, 5, + 14, 7, 2, 9, 6, 4, 4, 14, 4, 76, 3, 79, 22, 21, + 16, 14, 17, 17, 10, 16, 20, 64, 10, 9, 6, 3, 67, + 5, 64, 2, 4, 1, 5, 11, 1, 80, 0, 74, 0, 6, 82, + 27, 35, 27, 26, 25, 24, 22, 22, 16, 8, 6, 3, 0, + 67, 90, 68, 64, 77, 14, 10, 7, 8, 4, 65, 64, 64, + 76, 69, 74, 92, 86, 97, 68, 22, 18, 11, 3, 7, + 65, 70, 72, 81, 66, 36, 21, 15, 8, 12, 1, 68, + 73, 83, 4, 38, 29, 24, 18, 16, 5, 64, 70, 78, + 70, 39, 27, 13, 3, 8, 68, 77, 83, 5, 49, 38, 29, + 21, 21, 5, 66, 71, 75, 62, 90, 87, 75, 89, 88, + 81, 83, 81, 81, 82, 80, 81, 84, 80, 85, 82, 67, + 80, 77, 75, 73, 68, 68, 68, 66, 64, 67, 70, 74, + 11, 9, 14, 6, 2, 12, 9, 6, 7, 8, 6, 5, 64, 67, + 71, 66, 7, 77, 8, 22, 6, 7, 13, 14, 15, 8, 11, + 11, 17, 65, 68, 73, 36, 36, 42, 31, 30, 38, 40, + 40, 44, 40, 47, 46, 37, 30, 10, 34, 46, 32, 29, + 31, 27, 19, 16, 13, 6, 65, 69, 74, 83, 31, 30, + 31, 25, 15, 18, 13, 5, 5, 2, 65, 74, 74, 84, 87, + 69, 70, 85, 15, 16, 10, 64, 7, 6, 67, 3, 1, 69, + 79, 79, 87, 99, 9, 64, 75, 74, 1, 0, 4, 7, 7, + 13, 9, 12, 14, 25, 16, 16, 25, 24, 55, 42, 33, + 24, 17, 7, 67, 80, 101, 5, 37, 30, 28, 21, 22, + 11, 7, 7, 66, 79, 73, 65, 72, 4, 12, 69, 71, 3, + 7, 4, 7, 14, 4, 2, 52, 38, 24, 11, 1, 77, 89, + 99, 111 }, + + { + + 53, + 7, 77, 53, 7, 77, 92, 75, 18, 11, 4, 2, 33, 37, + 53, 14, 71, 0, 2, 12, 0, 64, 68, 71, 86, 9, 27, + 99, 110, 115, 69, 79, 68, 2, 12, 0, 78, 73, 10, + 7, 65, 73, 82, 1, 75, 79, 90, 5, 72, 81, 3, 74, + 77, 88, 5, 67, 69, 73, 0, 4, 22, 0, 0, 0, 71, + 91, 97, 0, 6, 65, 18, 73, 92, 92, 0, 69, 25, 16, + 69, 0, 82, 64, 79, 76, 90, 83, 82, 87, 91, 21, + 0, 8, 81, 70, 80, 77, 97, 3, 67, 66, 76, 17, 68, + 64, 78, 82, 70, 73, 68, 7, 7, 64, 12, 14, 76, + 64, 65, 67, 4, 73, 15, 69, 1, 15, 16, 24, 18, + 11, 80, 64, 70, 1, 3, 91, 64, 8, 4, 5, 7, 7, 17, + 10, 3, 1, 2, 1, 7, 7, 84, 67, 1, 74, 5, 4, 13, + 6, 2, 10, 6, 4, 3, 13, 3, 76, 3, 80, 22, 21, 16, + 14, 17, 17, 10, 16, 19, 64, 10, 9, 6, 3, 68, 5, + 64, 2, 4, 1, 5, 10, 0, 80, 0, 74, 64, 5, 82, 25, + 33, 25, 24, 23, 22, 20, 20, 14, 6, 4, 1, 66, 69, + 91, 68, 65, 78, 13, 9, 6, 7, 2, 66, 65, 66, 76, + 70, 75, 92, 86, 96, 68, 22, 18, 11, 3, 7, 65, + 70, 72, 80, 65, 36, 21, 15, 8, 12, 1, 68, 73, + 81, 4, 38, 29, 24, 18, 16, 5, 64, 70, 77, 70, + 39, 26, 13, 3, 8, 68, 77, 83, 5, 48, 37, 28, 20, + 21, 5, 66, 71, 75, 62, 89, 86, 74, 87, 87, 80, + 82, 79, 80, 80, 79, 79, 83, 80, 84, 81, 66, 79, + 78, 75, 72, 68, 68, 69, 67, 65, 68, 71, 75, 10, + 9, 14, 6, 1, 11, 9, 6, 6, 7, 6, 4, 65, 68, 71, + 66, 7, 77, 7, 21, 5, 7, 12, 13, 15, 7, 10, 11, + 17, 66, 69, 75, 35, 36, 41, 30, 28, 37, 38, 38, + 42, 38, 44, 43, 34, 28, 8, 31, 42, 29, 25, 29, + 25, 17, 15, 11, 6, 64, 68, 73, 81, 30, 28, 29, + 24, 13, 16, 11, 3, 4, 0, 67, 76, 75, 85, 88, 70, + 70, 86, 13, 15, 8, 65, 5, 4, 68, 1, 64, 70, 80, + 80, 88, 99, 8, 64, 76, 74, 1, 1, 5, 7, 8, 14, 9, + 13, 15, 26, 17, 17, 26, 25, 54, 40, 31, 22, 14, + 4, 70, 83, 104, 5, 37, 30, 28, 22, 22, 11, 8, 7, + 66, 78, 73, 64, 72, 5, 13, 69, 70, 4, 8, 4, 7, + 15, 4, 2, 50, 36, 22, 8, 65, 81, 93, 102, 114 }, + + { + + 52, + 7, 77, 52, 7, 77, 90, 73, 18, 11, 3, 0, 31, 36, + 53, 14, 69, 0, 3, 13, 0, 64, 67, 72, 87, 9, 25, + 101, 111, 115, 66, 77, 68, 3, 13, 0, 78, 72, 10, + 7, 65, 73, 81, 1, 76, 79, 90, 5, 72, 80, 3, 74, + 77, 88, 6, 67, 68, 73, 1, 4, 22, 0, 0, 0, 71, + 91, 97, 1, 5, 65, 18, 72, 92, 90, 2, 68, 27, 18, + 67, 1, 81, 0, 78, 75, 88, 82, 82, 86, 90, 21, 0, + 8, 81, 70, 80, 76, 95, 3, 67, 66, 76, 17, 68, 0, + 77, 82, 70, 73, 67, 7, 7, 64, 12, 14, 75, 64, + 64, 67, 4, 73, 14, 69, 1, 14, 15, 24, 17, 10, + 79, 0, 70, 0, 3, 90, 64, 8, 4, 5, 7, 7, 18, 10, + 3, 1, 2, 1, 6, 7, 85, 67, 1, 74, 4, 3, 13, 6, 1, + 10, 6, 4, 2, 13, 2, 76, 3, 80, 21, 21, 16, 14, + 17, 17, 10, 16, 19, 64, 10, 9, 6, 3, 68, 5, 64, + 1, 4, 1, 4, 9, 0, 80, 64, 74, 65, 4, 82, 24, 31, + 24, 23, 21, 20, 18, 18, 12, 4, 2, 64, 68, 70, + 92, 68, 65, 78, 12, 8, 5, 6, 1, 68, 66, 67, 77, + 70, 75, 92, 86, 96, 68, 22, 18, 11, 3, 7, 64, + 69, 71, 79, 65, 36, 21, 15, 8, 12, 2, 67, 72, + 79, 4, 38, 29, 24, 18, 16, 5, 64, 70, 76, 70, + 40, 26, 12, 3, 8, 68, 77, 82, 5, 48, 36, 27, 19, + 21, 5, 66, 71, 74, 62, 88, 85, 73, 86, 86, 79, + 81, 78, 79, 79, 77, 77, 82, 79, 84, 81, 65, 79, + 78, 74, 71, 68, 69, 69, 67, 65, 69, 72, 76, 9, + 8, 14, 5, 1, 11, 9, 6, 5, 6, 6, 4, 66, 68, 71, + 66, 7, 77, 6, 21, 5, 7, 11, 12, 15, 6, 9, 10, + 16, 67, 70, 77, 34, 35, 41, 29, 27, 35, 36, 36, + 40, 35, 41, 41, 31, 26, 7, 28, 39, 26, 21, 26, + 22, 15, 14, 10, 6, 0, 68, 72, 79, 28, 27, 27, + 22, 11, 14, 10, 1, 3, 65, 68, 78, 77, 86, 89, + 70, 70, 87, 12, 13, 6, 67, 4, 3, 70, 0, 65, 72, + 81, 81, 89, 100, 8, 65, 77, 73, 2, 1, 5, 8, 9, + 15, 10, 14, 16, 28, 18, 18, 27, 27, 54, 38, 29, + 19, 12, 1, 73, 86, 106, 5, 38, 31, 29, 22, 23, + 11, 8, 8, 65, 78, 73, 0, 71, 6, 14, 68, 69, 4, + 8, 4, 8, 16, 4, 2, 49, 34, 19, 5, 68, 84, 97, + 106, 117 }, + + { + + 51, + 7, 78, 51, 7, 78, 88, 72, 19, 11, 3, 64, 30, 35, + 53, 14, 67, 0, 3, 14, 0, 65, 67, 73, 88, 8, 24, + 102, 112, 116, 0, 76, 68, 3, 14, 0, 77, 71, 11, + 6, 64, 72, 80, 0, 76, 79, 90, 5, 71, 80, 3, 74, + 76, 88, 6, 67, 68, 73, 1, 4, 22, 0, 0, 0, 70, + 91, 97, 1, 5, 66, 18, 72, 91, 88, 4, 66, 28, 20, + 66, 2, 79, 1, 77, 75, 87, 82, 82, 86, 90, 22, 0, + 8, 80, 69, 79, 76, 94, 3, 68, 67, 77, 17, 68, 0, + 77, 82, 69, 73, 67, 7, 7, 0, 12, 13, 75, 64, 64, + 67, 4, 73, 13, 69, 1, 13, 14, 23, 17, 10, 79, 0, + 70, 0, 2, 90, 65, 8, 4, 5, 7, 7, 18, 10, 3, 1, + 3, 1, 5, 7, 85, 68, 1, 75, 4, 2, 13, 6, 0, 10, + 6, 4, 0, 13, 1, 76, 3, 81, 20, 21, 15, 14, 17, + 17, 10, 16, 19, 64, 9, 9, 5, 3, 68, 4, 65, 1, 3, + 0, 3, 8, 64, 80, 64, 73, 66, 2, 82, 22, 29, 22, + 21, 19, 18, 16, 16, 10, 2, 1, 65, 70, 72, 93, + 68, 65, 79, 11, 7, 4, 4, 64, 69, 67, 68, 78, 71, + 76, 92, 86, 95, 67, 22, 18, 11, 4, 7, 64, 69, + 71, 78, 64, 35, 21, 15, 8, 13, 2, 66, 71, 77, 4, + 39, 29, 24, 18, 17, 5, 64, 69, 76, 70, 40, 26, + 12, 3, 8, 67, 76, 81, 5, 47, 36, 26, 19, 21, 5, + 65, 70, 74, 62, 88, 84, 73, 85, 85, 78, 79, 77, + 78, 78, 76, 76, 82, 78, 84, 80, 0, 79, 79, 74, + 71, 68, 69, 70, 67, 66, 70, 73, 77, 9, 8, 14, 5, + 0, 10, 8, 6, 5, 6, 5, 4, 66, 68, 72, 66, 7, 78, + 6, 20, 4, 6, 10, 12, 16, 6, 8, 10, 16, 67, 70, + 78, 33, 34, 40, 28, 26, 34, 34, 34, 38, 33, 39, + 38, 28, 23, 6, 26, 36, 23, 17, 23, 20, 13, 13, + 9, 6, 1, 68, 70, 76, 26, 25, 25, 20, 9, 12, 8, + 64, 1, 66, 69, 79, 78, 87, 90, 71, 71, 88, 11, + 12, 5, 69, 2, 1, 71, 65, 67, 73, 83, 83, 91, + 101, 7, 66, 78, 73, 2, 1, 6, 8, 9, 17, 11, 15, + 17, 29, 20, 19, 29, 28, 53, 37, 27, 17, 9, 64, + 76, 88, 108, 6, 38, 31, 29, 22, 24, 12, 8, 8, + 65, 78, 72, 0, 71, 7, 15, 68, 69, 5, 9, 4, 8, + 17, 4, 2, 48, 32, 17, 2, 72, 88, 100, 109, 119 }, + + { + + 50, + 7, 78, 50, 7, 78, 86, 70, 19, 11, 2, 66, 28, 33, + 53, 14, 64, 64, 4, 14, 0, 66, 67, 74, 89, 8, 22, + 104, 113, 116, 3, 75, 68, 4, 14, 0, 77, 70, 11, + 6, 64, 72, 80, 0, 77, 78, 90, 5, 71, 79, 2, 74, + 76, 88, 7, 66, 68, 72, 2, 4, 22, 0, 0, 0, 70, + 91, 97, 2, 4, 66, 18, 72, 91, 87, 6, 65, 30, 22, + 65, 3, 78, 3, 76, 74, 85, 81, 81, 85, 89, 22, 0, + 8, 80, 69, 79, 75, 92, 2, 68, 67, 77, 17, 68, 0, + 76, 82, 69, 73, 66, 7, 6, 0, 12, 13, 75, 64, 64, + 67, 4, 73, 13, 69, 1, 13, 13, 22, 16, 9, 78, 1, + 70, 64, 2, 89, 65, 8, 3, 5, 7, 7, 19, 11, 3, 1, + 3, 1, 4, 7, 86, 68, 1, 75, 3, 1, 12, 6, 0, 11, + 6, 4, 64, 12, 0, 76, 3, 81, 20, 21, 15, 14, 17, + 17, 10, 16, 19, 64, 9, 9, 5, 3, 68, 4, 65, 0, 3, + 0, 3, 7, 64, 80, 65, 73, 67, 1, 82, 21, 27, 20, + 19, 17, 16, 14, 14, 8, 0, 64, 67, 73, 74, 94, + 68, 66, 79, 10, 6, 3, 3, 65, 71, 68, 69, 78, 71, + 76, 92, 86, 95, 67, 22, 18, 11, 4, 7, 64, 69, + 70, 77, 64, 35, 21, 15, 8, 13, 3, 65, 71, 75, 4, + 39, 29, 24, 18, 17, 5, 64, 69, 75, 70, 40, 25, + 11, 3, 8, 67, 76, 81, 5, 47, 35, 25, 18, 21, 5, + 65, 70, 73, 62, 87, 83, 72, 83, 84, 77, 78, 75, + 77, 76, 74, 74, 81, 77, 83, 80, 1, 78, 79, 74, + 70, 68, 70, 70, 68, 67, 71, 74, 78, 8, 7, 14, 4, + 0, 10, 8, 6, 4, 5, 5, 3, 67, 68, 72, 66, 7, 78, + 5, 20, 3, 6, 9, 11, 16, 5, 7, 9, 15, 68, 71, 80, + 32, 34, 40, 27, 24, 32, 32, 32, 36, 30, 36, 36, + 25, 21, 4, 23, 32, 20, 13, 21, 17, 11, 12, 8, 6, + 2, 67, 69, 74, 25, 23, 23, 19, 7, 10, 7, 66, 0, + 68, 71, 81, 80, 88, 91, 71, 71, 89, 9, 10, 3, + 70, 0, 64, 73, 66, 69, 75, 84, 84, 92, 101, 6, + 66, 79, 73, 3, 2, 6, 9, 10, 18, 12, 16, 18, 30, + 21, 20, 30, 29, 53, 35, 25, 14, 7, 67, 79, 91, + 110, 6, 39, 32, 30, 23, 25, 12, 9, 9, 64, 77, + 72, 1, 70, 8, 16, 68, 68, 5, 9, 4, 9, 18, 4, 2, + 46, 30, 14, 64, 75, 92, 104, 113, 122 }, + + { + + 48, + 6, 78, 48, 6, 78, 85, 69, 19, 11, 2, 67, 27, 32, + 53, 14, 1, 64, 5, 15, 0, 67, 67, 75, 91, 7, 20, + 106, 114, 117, 5, 74, 68, 5, 15, 0, 77, 69, 11, + 5, 64, 72, 79, 64, 77, 78, 91, 5, 71, 79, 2, 75, + 76, 88, 7, 66, 68, 72, 2, 4, 22, 0, 0, 0, 69, + 92, 97, 2, 3, 66, 18, 72, 91, 85, 7, 0, 31, 23, + 64, 4, 77, 4, 75, 73, 83, 81, 81, 85, 88, 22, 0, + 8, 79, 69, 78, 75, 91, 2, 69, 68, 78, 17, 68, 0, + 76, 82, 69, 73, 66, 6, 6, 0, 12, 12, 75, 64, 64, + 67, 3, 73, 12, 70, 1, 12, 11, 21, 15, 8, 78, 1, + 70, 65, 1, 89, 66, 7, 3, 5, 7, 7, 20, 11, 3, 0, + 3, 0, 3, 6, 87, 68, 1, 76, 3, 0, 12, 5, 64, 11, + 6, 4, 66, 12, 64, 76, 3, 82, 19, 20, 15, 14, 17, + 16, 9, 16, 18, 65, 8, 9, 5, 2, 69, 3, 66, 0, 2, + 64, 2, 6, 65, 80, 65, 73, 68, 64, 82, 19, 25, + 18, 17, 15, 13, 12, 12, 6, 65, 66, 69, 75, 76, + 95, 68, 66, 80, 9, 4, 1, 1, 67, 72, 70, 71, 79, + 72, 77, 92, 86, 94, 67, 22, 18, 11, 4, 7, 64, + 69, 70, 76, 0, 35, 21, 15, 8, 13, 3, 65, 70, 74, + 4, 39, 29, 24, 17, 17, 5, 64, 69, 75, 70, 40, + 25, 11, 3, 8, 67, 76, 80, 5, 46, 34, 24, 17, 20, + 5, 65, 70, 73, 62, 86, 82, 72, 82, 83, 77, 77, + 74, 76, 75, 73, 73, 81, 77, 83, 79, 2, 78, 80, + 74, 70, 68, 70, 71, 68, 68, 72, 76, 79, 7, 7, + 14, 4, 64, 9, 7, 5, 3, 4, 4, 3, 68, 69, 73, 66, + 7, 79, 4, 19, 2, 6, 8, 10, 16, 4, 6, 9, 15, 69, + 72, 82, 31, 33, 39, 25, 23, 31, 30, 30, 33, 28, + 33, 33, 22, 18, 3, 20, 29, 17, 9, 18, 15, 9, 10, + 6, 6, 2, 67, 68, 72, 23, 21, 21, 17, 4, 8, 5, + 68, 65, 70, 72, 83, 81, 89, 92, 72, 72, 90, 8, + 9, 1, 72, 65, 66, 74, 68, 71, 76, 85, 86, 94, + 102, 5, 67, 80, 73, 3, 2, 7, 9, 10, 19, 12, 17, + 19, 31, 22, 21, 31, 30, 52, 33, 23, 12, 4, 70, + 82, 94, 113, 6, 39, 32, 30, 23, 25, 12, 9, 9, + 64, 77, 72, 1, 70, 9, 17, 68, 68, 6, 10, 4, 9, + 18, 4, 1, 45, 28, 12, 67, 78, 96, 108, 116, 125 }, + + { + + 47, + 6, 78, 47, 6, 78, 83, 68, 20, 11, 2, 68, 26, 31, + 53, 14, 3, 64, 6, 16, 0, 67, 66, 76, 92, 6, 18, + 107, 115, 118, 8, 72, 68, 6, 16, 0, 76, 68, 12, + 4, 64, 71, 78, 64, 77, 78, 91, 5, 71, 78, 2, 75, + 76, 88, 7, 66, 67, 72, 2, 4, 22, 0, 0, 0, 68, + 92, 97, 2, 2, 66, 18, 71, 91, 83, 9, 2, 32, 25, + 1, 5, 75, 5, 73, 72, 81, 81, 81, 85, 87, 22, 0, + 8, 78, 69, 77, 74, 90, 2, 69, 68, 78, 17, 68, 1, + 75, 81, 68, 73, 66, 6, 6, 0, 12, 12, 74, 64, 0, + 67, 3, 72, 11, 70, 1, 11, 10, 21, 14, 7, 77, 1, + 69, 66, 0, 89, 67, 7, 3, 6, 7, 7, 21, 11, 3, 0, + 4, 0, 3, 6, 88, 68, 1, 77, 3, 64, 12, 5, 65, 11, + 6, 4, 67, 12, 64, 76, 3, 83, 18, 20, 15, 14, 17, + 16, 9, 16, 18, 65, 8, 9, 5, 2, 69, 3, 66, 0, 2, + 64, 1, 6, 65, 80, 65, 73, 69, 65, 82, 17, 24, + 17, 16, 13, 11, 11, 11, 4, 67, 67, 70, 77, 77, + 96, 68, 66, 81, 8, 3, 0, 0, 68, 73, 71, 72, 80, + 73, 78, 92, 85, 93, 66, 23, 18, 11, 4, 8, 0, 68, + 69, 75, 1, 35, 21, 15, 8, 14, 3, 64, 69, 72, 4, + 39, 29, 24, 17, 18, 5, 64, 69, 74, 70, 41, 25, + 11, 3, 9, 67, 76, 79, 5, 46, 34, 24, 16, 20, 5, + 65, 69, 72, 62, 85, 81, 71, 81, 81, 76, 75, 73, + 74, 74, 72, 71, 80, 76, 83, 78, 4, 78, 81, 73, + 69, 68, 70, 72, 68, 68, 73, 77, 80, 7, 7, 14, 4, + 64, 8, 7, 5, 2, 4, 4, 3, 69, 69, 73, 65, 8, 79, + 4, 18, 2, 6, 8, 10, 16, 3, 5, 9, 15, 70, 72, 83, + 31, 32, 38, 24, 22, 30, 28, 28, 31, 26, 31, 30, + 20, 16, 2, 17, 26, 14, 5, 15, 13, 8, 9, 5, 6, 3, + 67, 67, 70, 21, 20, 19, 15, 2, 7, 4, 70, 66, 71, + 73, 84, 82, 90, 92, 72, 72, 91, 7, 8, 0, 74, 66, + 67, 75, 69, 72, 77, 86, 87, 95, 103, 5, 68, 80, + 72, 3, 2, 8, 10, 11, 20, 13, 18, 20, 33, 23, 22, + 33, 32, 51, 32, 21, 10, 1, 73, 85, 97, 115, 7, + 39, 32, 31, 23, 26, 13, 9, 10, 0, 77, 71, 2, 70, + 10, 19, 67, 67, 7, 11, 4, 10, 19, 4, 1, 44, 26, + 10, 69, 81, 99, 112, 119, 126 }, + + { + + 46, + 6, 78, 46, 6, 78, 81, 66, 20, 11, 1, 70, 24, 29, + 53, 14, 6, 65, 7, 16, 0, 68, 66, 77, 93, 6, 16, + 109, 116, 118, 11, 71, 68, 7, 16, 0, 76, 67, 12, + 4, 64, 71, 78, 64, 78, 77, 91, 5, 71, 77, 1, 75, + 76, 88, 8, 65, 67, 71, 3, 4, 22, 0, 0, 0, 68, + 92, 97, 3, 1, 66, 18, 71, 91, 82, 11, 3, 34, 27, + 2, 6, 74, 7, 72, 71, 79, 80, 80, 84, 86, 22, 0, + 8, 78, 69, 77, 74, 88, 1, 69, 68, 78, 17, 68, 1, + 75, 81, 68, 73, 65, 6, 5, 0, 12, 12, 74, 64, 0, + 67, 3, 72, 11, 70, 1, 11, 9, 20, 13, 6, 76, 2, + 69, 67, 0, 88, 67, 7, 2, 6, 7, 7, 22, 12, 3, 0, + 4, 0, 2, 6, 89, 68, 1, 77, 2, 65, 11, 5, 65, 12, + 6, 4, 68, 11, 65, 76, 3, 83, 18, 20, 15, 14, 17, + 16, 9, 16, 18, 65, 8, 9, 5, 2, 69, 3, 66, 64, 2, + 64, 1, 5, 66, 80, 66, 73, 70, 66, 82, 16, 22, + 15, 14, 11, 9, 9, 9, 2, 69, 69, 72, 80, 79, 97, + 68, 67, 81, 7, 2, 64, 64, 70, 75, 72, 73, 80, + 73, 78, 92, 85, 93, 66, 23, 18, 11, 4, 8, 0, 68, + 69, 74, 1, 35, 21, 15, 8, 14, 4, 0, 69, 70, 4, + 39, 29, 24, 17, 18, 5, 64, 69, 73, 70, 41, 24, + 10, 3, 9, 67, 76, 79, 5, 45, 33, 23, 15, 20, 5, + 65, 69, 72, 62, 84, 80, 70, 79, 80, 75, 74, 71, + 73, 72, 70, 69, 79, 75, 82, 78, 5, 77, 81, 73, + 68, 68, 71, 72, 69, 69, 74, 78, 81, 6, 6, 14, 3, + 65, 8, 7, 5, 1, 3, 4, 2, 70, 69, 73, 65, 8, 79, + 3, 18, 1, 6, 7, 9, 16, 2, 4, 8, 14, 71, 73, 85, + 30, 32, 38, 23, 20, 28, 26, 26, 29, 23, 28, 28, + 17, 14, 0, 14, 22, 11, 1, 13, 10, 6, 8, 4, 6, 4, + 66, 66, 68, 20, 18, 17, 14, 0, 5, 2, 72, 67, 73, + 75, 86, 84, 91, 93, 73, 72, 92, 5, 6, 65, 75, + 68, 69, 77, 71, 74, 79, 87, 88, 96, 103, 4, 68, + 81, 72, 4, 3, 8, 10, 12, 21, 14, 19, 21, 34, 24, + 23, 34, 33, 51, 30, 19, 7, 64, 76, 88, 100, 117, + 7, 40, 33, 31, 24, 27, 13, 10, 10, 0, 76, 71, 3, + 69, 11, 20, 67, 66, 7, 11, 4, 10, 20, 4, 1, 42, + 24, 7, 72, 84, 103, 116, 123, 126 }, + + { + + 45, + 6, 79, 45, 6, 79, 79, 65, 21, 11, 1, 71, 23, 28, + 53, 14, 8, 65, 7, 17, 0, 69, 66, 78, 94, 5, 15, + 110, 117, 119, 14, 70, 68, 7, 17, 0, 75, 66, 13, + 3, 0, 70, 77, 65, 78, 77, 91, 5, 70, 77, 1, 75, + 75, 88, 8, 65, 67, 71, 3, 4, 22, 0, 0, 0, 67, + 92, 97, 3, 1, 67, 18, 71, 90, 80, 13, 5, 35, 29, + 3, 7, 72, 8, 71, 71, 78, 80, 80, 84, 86, 23, 0, + 8, 77, 68, 76, 73, 87, 1, 70, 69, 79, 17, 68, 1, + 74, 81, 67, 73, 65, 6, 5, 1, 12, 11, 74, 64, 0, + 67, 3, 72, 10, 70, 1, 10, 8, 19, 13, 6, 76, 2, + 69, 67, 64, 88, 68, 7, 2, 6, 7, 7, 22, 12, 3, 0, + 5, 0, 1, 6, 89, 69, 1, 78, 2, 66, 11, 5, 66, 12, + 6, 4, 70, 11, 66, 76, 3, 84, 17, 20, 14, 14, 17, + 16, 9, 16, 18, 65, 7, 9, 4, 2, 69, 2, 67, 64, 1, + 65, 0, 4, 66, 80, 66, 72, 71, 68, 82, 14, 20, + 13, 12, 9, 7, 7, 7, 0, 71, 70, 73, 82, 81, 98, + 68, 67, 82, 6, 1, 65, 66, 71, 76, 73, 74, 81, + 74, 79, 92, 85, 92, 65, 23, 18, 11, 5, 8, 0, 68, + 68, 73, 2, 34, 21, 15, 8, 15, 4, 1, 68, 68, 4, + 40, 29, 24, 17, 19, 5, 64, 68, 73, 70, 41, 24, + 10, 3, 9, 66, 75, 78, 5, 45, 33, 22, 15, 20, 5, + 64, 68, 71, 62, 84, 79, 70, 78, 79, 74, 72, 70, + 72, 71, 69, 68, 79, 74, 82, 77, 7, 77, 82, 73, + 68, 68, 71, 73, 69, 70, 75, 79, 82, 6, 6, 14, 3, + 65, 7, 6, 5, 1, 3, 3, 2, 70, 69, 74, 65, 8, 80, + 3, 17, 0, 5, 6, 9, 17, 2, 3, 8, 14, 71, 73, 86, + 29, 31, 37, 22, 19, 27, 24, 24, 27, 21, 26, 25, + 14, 11, 64, 12, 19, 8, 66, 10, 8, 4, 7, 3, 6, 5, + 66, 64, 65, 18, 16, 15, 12, 65, 3, 1, 74, 69, + 74, 76, 87, 85, 92, 94, 73, 73, 93, 4, 5, 66, + 77, 70, 71, 78, 72, 76, 80, 89, 90, 98, 104, 3, + 69, 82, 72, 4, 3, 9, 11, 12, 23, 15, 20, 22, 35, + 26, 24, 36, 34, 50, 29, 17, 5, 67, 78, 91, 102, + 119, 8, 40, 33, 32, 24, 28, 14, 10, 11, 1, 76, + 70, 3, 69, 12, 21, 67, 66, 8, 12, 4, 11, 21, 4, + 1, 41, 22, 5, 75, 88, 107, 119, 126, 126 }, + + { + + 43, + 6, 79, 43, 6, 79, 78, 0, 21, 11, 0, 73, 21, 27, + 53, 14, 10, 65, 8, 18, 0, 70, 66, 79, 95, 5, 13, + 112, 118, 119, 17, 69, 68, 8, 18, 0, 75, 65, 13, + 3, 0, 70, 76, 65, 79, 77, 91, 5, 70, 76, 1, 76, + 75, 88, 9, 65, 67, 71, 4, 4, 22, 0, 0, 0, 67, + 93, 97, 4, 0, 67, 18, 71, 90, 78, 14, 6, 37, 30, + 4, 8, 71, 9, 70, 70, 76, 79, 80, 83, 85, 23, 0, + 8, 77, 68, 76, 73, 85, 1, 70, 69, 79, 17, 68, 1, + 74, 81, 67, 73, 64, 6, 5, 1, 12, 11, 74, 64, 0, + 67, 3, 72, 9, 71, 1, 9, 7, 18, 12, 5, 75, 3, 69, + 68, 64, 87, 68, 7, 2, 6, 7, 7, 23, 12, 3, 64, 5, + 64, 0, 5, 90, 69, 1, 78, 1, 67, 11, 4, 67, 12, + 6, 4, 71, 11, 67, 76, 3, 84, 16, 20, 14, 14, 17, + 16, 9, 16, 17, 65, 7, 9, 4, 2, 70, 2, 67, 65, 1, + 65, 64, 3, 67, 80, 67, 72, 72, 69, 82, 13, 18, + 11, 10, 7, 5, 5, 5, 65, 73, 72, 75, 84, 83, 99, + 68, 67, 82, 5, 0, 66, 67, 73, 78, 74, 76, 82, + 74, 79, 92, 85, 92, 65, 23, 18, 11, 5, 8, 0, 68, + 68, 72, 2, 34, 21, 15, 8, 15, 5, 1, 67, 66, 4, + 40, 29, 24, 17, 19, 5, 64, 68, 72, 70, 41, 24, + 9, 3, 9, 66, 75, 77, 5, 44, 32, 21, 14, 20, 5, + 64, 68, 71, 62, 83, 78, 69, 77, 78, 73, 71, 69, + 71, 70, 67, 66, 78, 74, 82, 77, 8, 77, 82, 73, + 67, 68, 72, 73, 69, 71, 76, 80, 83, 5, 5, 14, 2, + 66, 7, 6, 5, 0, 2, 3, 2, 71, 70, 74, 65, 8, 80, + 2, 17, 64, 5, 5, 8, 17, 1, 2, 7, 13, 72, 74, 88, + 28, 30, 37, 21, 18, 25, 22, 22, 25, 18, 23, 23, + 11, 9, 65, 9, 16, 5, 70, 7, 5, 2, 6, 1, 6, 6, + 66, 0, 0, 16, 14, 13, 10, 67, 1, 64, 76, 70, 76, + 77, 89, 87, 93, 95, 74, 73, 94, 3, 3, 68, 79, + 72, 73, 80, 74, 78, 82, 90, 91, 99, 105, 2, 70, + 83, 72, 5, 3, 9, 11, 13, 24, 15, 21, 23, 36, 27, + 25, 37, 35, 50, 27, 15, 2, 69, 81, 94, 105, 122, + 8, 41, 34, 32, 24, 28, 14, 10, 11, 1, 76, 70, 4, + 68, 13, 22, 67, 65, 8, 12, 4, 11, 22, 4, 1, 40, + 20, 2, 78, 91, 111, 123, 126, 126 }, + + { + + 42, + 6, 79, 42, 6, 79, 76, 1, 21, 11, 0, 74, 20, 25, + 53, 14, 13, 66, 9, 18, 0, 70, 65, 80, 96, 4, 11, + 114, 119, 120, 20, 67, 68, 9, 18, 0, 75, 64, 13, + 2, 0, 70, 76, 65, 79, 76, 91, 5, 70, 75, 0, 76, + 75, 88, 9, 64, 66, 70, 4, 4, 22, 0, 0, 0, 66, + 93, 97, 4, 64, 67, 18, 70, 90, 77, 16, 8, 38, + 32, 6, 9, 70, 11, 69, 69, 74, 79, 79, 83, 84, + 23, 0, 8, 76, 68, 75, 72, 84, 0, 70, 69, 79, 17, + 68, 2, 73, 81, 67, 73, 64, 6, 4, 1, 12, 11, 73, + 64, 1, 67, 3, 72, 9, 71, 1, 9, 6, 18, 11, 4, 74, + 3, 69, 69, 65, 87, 69, 7, 1, 6, 7, 7, 24, 13, 3, + 64, 5, 64, 64, 5, 91, 69, 1, 79, 1, 68, 10, 4, + 67, 13, 6, 4, 72, 10, 68, 76, 3, 85, 16, 20, 14, + 14, 17, 16, 9, 16, 17, 65, 7, 9, 4, 2, 70, 2, + 67, 65, 1, 65, 64, 2, 67, 80, 67, 72, 73, 70, + 82, 11, 16, 10, 9, 5, 3, 3, 3, 67, 75, 74, 77, + 87, 84, 100, 68, 68, 83, 4, 64, 67, 68, 74, 79, + 75, 77, 82, 75, 80, 92, 85, 91, 65, 23, 18, 11, + 5, 8, 1, 67, 67, 71, 3, 34, 21, 15, 8, 15, 5, 2, + 67, 64, 4, 40, 29, 24, 17, 19, 5, 64, 68, 71, + 70, 42, 23, 9, 3, 9, 66, 75, 77, 5, 44, 31, 20, + 13, 20, 5, 64, 68, 70, 62, 82, 77, 68, 75, 77, + 72, 70, 67, 70, 68, 66, 64, 77, 73, 81, 76, 9, + 76, 83, 72, 66, 68, 72, 74, 70, 71, 77, 81, 84, + 4, 5, 14, 2, 66, 6, 6, 5, 64, 1, 3, 1, 72, 70, + 74, 65, 8, 80, 1, 16, 64, 5, 4, 7, 17, 0, 1, 7, + 13, 73, 75, 90, 27, 30, 36, 20, 16, 24, 20, 20, + 23, 16, 20, 20, 8, 7, 67, 6, 12, 2, 74, 5, 3, 0, + 5, 0, 6, 7, 65, 1, 2, 15, 13, 11, 9, 69, 64, 65, + 78, 71, 78, 79, 91, 88, 94, 96, 74, 73, 95, 1, + 2, 70, 80, 73, 74, 81, 75, 79, 83, 91, 92, 100, + 105, 2, 70, 84, 71, 5, 4, 10, 12, 14, 25, 16, + 22, 24, 38, 28, 26, 38, 37, 49, 25, 13, 0, 72, + 84, 97, 108, 124, 8, 41, 34, 33, 25, 29, 14, 11, + 12, 2, 75, 70, 5, 68, 14, 23, 66, 64, 9, 13, 4, + 12, 23, 4, 1, 38, 18, 0, 81, 94, 114, 126, 126, + 126 }, + + { + + 41, + 6, 79, 41, 6, 79, 74, 3, 22, 11, 64, 76, 18, 24, + 53, 14, 15, 66, 10, 19, 0, 71, 65, 81, 97, 4, 9, + 115, 120, 120, 23, 66, 68, 10, 19, 0, 74, 0, 14, + 2, 0, 69, 75, 66, 80, 76, 91, 5, 70, 75, 0, 76, + 75, 88, 10, 64, 66, 70, 5, 4, 22, 0, 0, 0, 66, + 93, 97, 5, 65, 67, 18, 70, 90, 75, 18, 9, 40, + 34, 7, 10, 68, 12, 68, 68, 72, 78, 79, 82, 83, + 23, 0, 8, 76, 68, 75, 72, 82, 0, 71, 70, 80, 17, + 68, 2, 73, 81, 66, 73, 0, 6, 4, 1, 12, 10, 73, + 64, 1, 67, 3, 72, 8, 71, 1, 8, 5, 17, 10, 3, 74, + 4, 69, 70, 65, 86, 69, 7, 1, 6, 7, 7, 25, 13, 3, + 64, 6, 64, 65, 5, 92, 69, 1, 79, 0, 69, 10, 4, + 68, 13, 6, 4, 74, 10, 69, 76, 3, 85, 15, 20, 14, + 14, 17, 16, 9, 16, 17, 65, 6, 9, 4, 2, 70, 1, + 68, 66, 0, 66, 65, 1, 68, 80, 68, 72, 74, 72, + 82, 10, 14, 8, 7, 3, 1, 1, 1, 69, 77, 75, 78, + 89, 86, 101, 68, 68, 83, 3, 65, 68, 70, 76, 81, + 76, 78, 83, 75, 80, 92, 85, 91, 64, 23, 18, 11, + 5, 8, 1, 67, 67, 70, 3, 34, 21, 15, 8, 16, 6, 3, + 66, 1, 4, 40, 29, 24, 17, 20, 5, 64, 68, 71, 70, + 42, 23, 8, 3, 9, 66, 75, 76, 5, 43, 31, 19, 12, + 20, 5, 64, 67, 70, 62, 81, 76, 68, 74, 76, 71, + 68, 66, 69, 67, 64, 0, 77, 72, 81, 76, 11, 76, + 83, 72, 66, 68, 73, 74, 70, 72, 78, 82, 85, 4, + 4, 14, 1, 67, 6, 5, 5, 65, 1, 2, 1, 73, 70, 75, + 65, 8, 81, 1, 16, 65, 5, 3, 7, 17, 64, 0, 6, 12, + 74, 75, 91, 26, 29, 36, 19, 15, 22, 18, 18, 21, + 13, 18, 18, 5, 4, 68, 3, 9, 64, 78, 2, 0, 65, 4, + 64, 6, 8, 65, 2, 4, 13, 11, 9, 7, 71, 66, 67, + 80, 73, 79, 80, 92, 90, 95, 97, 75, 74, 96, 0, + 0, 71, 82, 75, 76, 83, 77, 81, 85, 92, 94, 102, + 106, 1, 71, 85, 71, 6, 4, 10, 12, 14, 26, 17, + 23, 25, 39, 29, 27, 40, 38, 49, 24, 11, 66, 74, + 87, 100, 111, 126, 9, 42, 35, 33, 25, 30, 15, + 11, 12, 2, 75, 69, 5, 67, 15, 24, 66, 64, 9, 13, + 4, 12, 24, 4, 1, 37, 16, 66, 84, 97, 118, 126, + 126, 126 }, + + { + + 40, + 6, 79, 40, 6, 79, 72, 4, 22, 11, 64, 77, 17, 23, + 53, 14, 17, 66, 11, 20, 0, 72, 65, 82, 98, 3, 7, + 117, 121, 121, 26, 65, 68, 11, 20, 0, 74, 1, 14, + 1, 0, 69, 74, 66, 80, 76, 91, 5, 70, 74, 0, 76, + 75, 88, 10, 64, 66, 70, 5, 4, 22, 0, 0, 0, 65, + 93, 97, 5, 66, 67, 18, 70, 90, 73, 20, 11, 41, + 36, 8, 11, 67, 13, 67, 67, 70, 78, 79, 82, 82, + 23, 0, 8, 75, 68, 74, 71, 81, 0, 71, 70, 80, 17, + 68, 2, 72, 81, 66, 73, 0, 6, 4, 1, 12, 10, 73, + 64, 1, 67, 3, 72, 7, 71, 1, 7, 4, 16, 9, 2, 73, + 4, 69, 71, 66, 86, 70, 7, 1, 6, 7, 7, 26, 13, 3, + 64, 6, 64, 66, 5, 93, 69, 1, 80, 0, 70, 10, 4, + 69, 13, 6, 4, 75, 10, 70, 76, 3, 86, 14, 20, 14, + 14, 17, 16, 9, 16, 17, 65, 6, 9, 4, 2, 70, 1, + 68, 66, 0, 66, 66, 0, 68, 80, 68, 72, 75, 73, + 82, 8, 12, 6, 5, 1, 64, 64, 64, 71, 79, 77, 80, + 91, 88, 102, 68, 68, 84, 2, 66, 69, 71, 77, 82, + 77, 79, 84, 76, 81, 92, 85, 90, 64, 23, 18, 11, + 5, 8, 1, 67, 66, 69, 4, 34, 21, 15, 8, 16, 6, 4, + 65, 3, 4, 40, 29, 24, 17, 20, 5, 64, 68, 70, 70, + 42, 23, 8, 3, 9, 66, 75, 75, 5, 43, 30, 18, 11, + 20, 5, 64, 67, 69, 62, 80, 75, 67, 73, 75, 70, + 67, 65, 68, 66, 0, 2, 76, 71, 81, 75, 12, 76, + 84, 72, 65, 68, 73, 75, 70, 73, 79, 83, 86, 3, + 4, 14, 1, 67, 5, 5, 5, 66, 0, 2, 1, 74, 70, 75, + 65, 8, 81, 0, 15, 66, 5, 2, 6, 17, 65, 64, 6, + 12, 75, 76, 93, 25, 28, 35, 18, 14, 21, 16, 16, + 19, 11, 15, 15, 2, 2, 69, 0, 6, 67, 82, 64, 65, + 67, 3, 65, 6, 9, 65, 3, 6, 11, 9, 7, 5, 73, 68, + 68, 82, 74, 81, 81, 94, 91, 96, 98, 75, 74, 97, + 64, 64, 73, 84, 77, 78, 84, 78, 83, 86, 93, 95, + 103, 107, 0, 72, 86, 71, 6, 4, 11, 13, 15, 27, + 18, 24, 26, 40, 30, 28, 41, 39, 48, 22, 9, 68, + 77, 90, 103, 114, 126, 9, 42, 35, 34, 25, 31, + 15, 11, 13, 3, 75, 69, 6, 67, 16, 25, 66, 0, 10, + 14, 4, 13, 25, 4, 1, 36, 14, 68, 87, 100, 122, + 126, 126, 126 }, + + { + + 38, + 5, 80, 38, 5, 80, 71, 5, 22, 11, 65, 79, 15, 21, + 52, 14, 19, 67, 11, 20, 64, 73, 65, 84, 100, 2, + 5, 119, 122, 122, 28, 64, 69, 11, 20, 64, 74, 2, + 14, 0, 0, 69, 74, 67, 81, 76, 92, 5, 70, 74, 64, + 77, 75, 88, 10, 64, 66, 70, 5, 3, 22, 0, 0, 0, + 65, 94, 97, 5, 67, 68, 18, 70, 90, 72, 21, 12, + 42, 37, 9, 12, 66, 14, 66, 67, 69, 78, 79, 82, + 82, 23, 0, 8, 75, 68, 74, 71, 80, 64, 72, 71, + 81, 17, 68, 2, 72, 81, 66, 73, 0, 5, 3, 1, 11, + 9, 73, 65, 1, 67, 2, 72, 6, 72, 0, 6, 2, 15, 8, + 1, 73, 4, 69, 72, 67, 86, 71, 6, 0, 6, 7, 7, 26, + 13, 3, 65, 6, 65, 67, 4, 94, 70, 0, 81, 64, 71, + 9, 3, 70, 13, 6, 4, 77, 9, 71, 76, 3, 87, 13, + 19, 13, 14, 17, 15, 8, 16, 16, 66, 5, 9, 3, 1, + 71, 0, 69, 67, 64, 67, 67, 64, 69, 80, 69, 72, + 76, 75, 82, 6, 10, 4, 3, 64, 67, 66, 66, 73, 81, + 79, 82, 94, 90, 104, 69, 69, 85, 1, 68, 71, 73, + 79, 84, 79, 81, 85, 77, 82, 92, 85, 90, 64, 23, + 18, 11, 5, 8, 1, 67, 66, 68, 4, 33, 21, 15, 8, + 16, 6, 4, 65, 4, 3, 40, 29, 23, 16, 20, 5, 64, + 68, 70, 70, 42, 22, 7, 2, 9, 66, 75, 75, 5, 42, + 29, 17, 10, 19, 5, 64, 67, 69, 62, 80, 74, 67, + 72, 74, 70, 66, 64, 67, 65, 1, 3, 76, 71, 81, + 75, 13, 76, 85, 72, 65, 68, 74, 76, 71, 74, 80, + 85, 88, 2, 3, 14, 0, 68, 4, 4, 4, 67, 64, 1, 0, + 75, 71, 76, 65, 8, 82, 64, 14, 67, 4, 1, 5, 17, + 66, 66, 5, 11, 76, 77, 95, 24, 27, 34, 16, 12, + 19, 14, 14, 16, 8, 12, 12, 64, 64, 71, 66, 2, + 70, 87, 67, 68, 69, 1, 67, 6, 9, 65, 4, 8, 9, 7, + 5, 3, 76, 70, 70, 85, 76, 83, 83, 96, 93, 97, + 99, 76, 75, 99, 66, 66, 75, 86, 79, 80, 86, 80, + 85, 88, 95, 97, 105, 108, 64, 73, 87, 71, 6, 4, + 11, 13, 15, 28, 18, 25, 26, 41, 31, 29, 42, 40, + 47, 20, 6, 71, 80, 93, 107, 117, 126, 9, 42, 35, + 34, 25, 31, 15, 11, 13, 3, 75, 69, 6, 67, 17, + 26, 66, 0, 10, 14, 4, 13, 25, 4, 0, 34, 11, 71, + 90, 104, 126, 126, 126, 126 }, + + { + + 37, + 5, 80, 37, 5, 80, 69, 7, 23, 12, 65, 80, 14, 20, + 52, 14, 22, 67, 12, 21, 64, 73, 64, 85, 101, 2, + 4, 120, 123, 122, 31, 1, 69, 12, 21, 64, 73, 4, + 15, 0, 1, 68, 73, 67, 81, 75, 92, 5, 69, 73, 64, + 77, 74, 88, 11, 0, 65, 69, 6, 3, 22, 0, 0, 0, + 64, 94, 97, 6, 67, 68, 18, 69, 89, 70, 23, 14, + 44, 39, 11, 13, 64, 16, 64, 66, 67, 77, 78, 81, + 81, 24, 1, 9, 74, 67, 73, 70, 78, 64, 72, 71, + 81, 18, 68, 3, 71, 80, 65, 72, 1, 5, 3, 2, 11, + 9, 72, 65, 2, 67, 2, 71, 6, 72, 0, 6, 1, 15, 8, + 1, 72, 5, 68, 72, 67, 85, 71, 6, 0, 7, 7, 7, 27, + 14, 4, 65, 7, 65, 67, 4, 94, 70, 0, 81, 64, 72, + 9, 3, 70, 14, 7, 4, 78, 9, 71, 75, 3, 87, 13, + 19, 13, 14, 17, 15, 8, 16, 16, 66, 5, 9, 3, 1, + 71, 0, 69, 67, 64, 67, 67, 64, 69, 79, 69, 71, + 76, 76, 81, 5, 9, 3, 2, 66, 69, 67, 67, 75, 82, + 80, 83, 96, 91, 105, 69, 69, 85, 0, 69, 72, 74, + 80, 85, 80, 82, 85, 77, 82, 91, 84, 89, 0, 24, + 18, 11, 6, 9, 2, 66, 65, 66, 5, 33, 21, 15, 8, + 17, 7, 5, 64, 6, 3, 41, 30, 23, 16, 21, 5, 64, + 67, 69, 70, 43, 22, 7, 2, 10, 65, 74, 74, 5, 42, + 29, 17, 10, 19, 5, 0, 66, 68, 62, 79, 73, 66, + 70, 72, 69, 64, 1, 65, 0, 3, 5, 75, 70, 80, 74, + 15, 75, 85, 71, 64, 67, 74, 76, 71, 74, 80, 86, + 89, 2, 3, 15, 0, 68, 4, 4, 4, 67, 64, 1, 0, 75, + 71, 76, 64, 9, 82, 64, 14, 67, 4, 1, 5, 18, 66, + 67, 5, 11, 76, 77, 96, 24, 27, 34, 15, 11, 18, + 12, 12, 14, 6, 10, 10, 66, 66, 72, 68, 64, 73, + 91, 69, 70, 70, 0, 68, 6, 10, 64, 6, 11, 8, 6, + 4, 2, 78, 71, 71, 87, 77, 84, 84, 97, 94, 98, + 99, 76, 75, 100, 67, 67, 76, 87, 80, 81, 87, 81, + 86, 89, 96, 98, 106, 108, 64, 73, 87, 70, 7, 5, + 12, 14, 16, 30, 19, 26, 27, 43, 33, 30, 44, 42, + 47, 19, 4, 73, 82, 95, 110, 119, 126, 10, 43, + 36, 35, 26, 32, 16, 12, 14, 4, 74, 68, 7, 66, + 19, 28, 65, 1, 11, 15, 5, 14, 26, 4, 0, 33, 9, + 73, 92, 107, 126, 126, 126, 126 }, + + { + + 36, + 5, 80, 36, 5, 80, 67, 8, 23, 12, 65, 81, 13, 19, + 52, 14, 24, 67, 13, 22, 64, 74, 64, 86, 102, 1, + 2, 122, 124, 123, 34, 2, 69, 13, 22, 64, 73, 5, + 15, 64, 1, 68, 72, 67, 81, 75, 92, 5, 69, 72, + 64, 77, 74, 88, 11, 0, 65, 69, 6, 3, 22, 0, 0, + 0, 0, 94, 97, 6, 68, 68, 18, 69, 89, 68, 25, 16, + 45, 41, 12, 14, 0, 17, 0, 65, 65, 77, 78, 81, + 80, 24, 1, 9, 73, 67, 72, 70, 77, 64, 72, 71, + 81, 18, 68, 3, 71, 80, 65, 72, 1, 5, 3, 2, 11, + 9, 72, 65, 2, 67, 2, 71, 5, 72, 0, 5, 0, 14, 7, + 0, 71, 5, 68, 73, 68, 85, 72, 6, 0, 7, 7, 7, 28, + 14, 4, 65, 7, 65, 68, 4, 95, 70, 0, 82, 64, 73, + 9, 3, 71, 14, 7, 4, 79, 9, 72, 75, 3, 88, 12, + 19, 13, 14, 17, 15, 8, 16, 16, 66, 5, 9, 3, 1, + 71, 0, 69, 67, 64, 67, 68, 65, 70, 79, 69, 71, + 77, 77, 81, 3, 7, 1, 0, 68, 71, 69, 69, 77, 84, + 82, 85, 98, 93, 106, 69, 69, 86, 64, 70, 73, 75, + 82, 86, 81, 83, 86, 78, 83, 91, 84, 88, 0, 24, + 18, 11, 6, 9, 2, 66, 65, 65, 6, 33, 21, 15, 8, + 17, 7, 6, 0, 8, 3, 41, 30, 23, 16, 21, 5, 64, + 67, 68, 70, 43, 22, 7, 2, 10, 65, 74, 73, 5, 41, + 28, 16, 9, 19, 5, 0, 66, 68, 62, 78, 72, 65, 69, + 71, 68, 0, 2, 64, 1, 4, 7, 74, 69, 80, 73, 16, + 75, 86, 71, 0, 67, 74, 77, 71, 75, 81, 87, 90, + 1, 3, 15, 0, 69, 3, 4, 4, 68, 65, 1, 0, 76, 71, + 76, 64, 9, 82, 65, 13, 68, 4, 0, 4, 18, 67, 68, + 5, 11, 77, 78, 98, 23, 26, 33, 14, 10, 17, 10, + 10, 12, 4, 7, 7, 69, 68, 73, 71, 67, 76, 95, 72, + 72, 72, 64, 69, 6, 11, 64, 7, 13, 6, 4, 2, 0, + 80, 73, 73, 89, 78, 86, 85, 99, 95, 99, 100, 77, + 75, 101, 68, 68, 78, 89, 82, 83, 88, 83, 88, 90, + 97, 99, 107, 109, 65, 74, 88, 70, 7, 5, 13, 14, + 17, 31, 20, 27, 28, 44, 34, 31, 45, 43, 46, 17, + 2, 75, 85, 98, 113, 122, 126, 10, 43, 36, 35, + 26, 33, 16, 12, 14, 4, 74, 68, 8, 66, 20, 29, + 65, 2, 12, 16, 5, 14, 27, 4, 0, 32, 7, 75, 95, + 110, 126, 126, 126, 126 }, + + { + + 35, + 5, 80, 35, 5, 80, 65, 10, 24, 12, 66, 83, 11, + 18, 52, 14, 26, 67, 14, 23, 64, 75, 64, 87, 103, + 1, 0, 123, 125, 123, 37, 3, 69, 14, 23, 64, 72, + 6, 16, 64, 1, 67, 71, 68, 82, 75, 92, 5, 69, 72, + 64, 77, 74, 88, 12, 0, 65, 69, 7, 3, 22, 0, 0, + 0, 0, 94, 97, 7, 69, 68, 18, 69, 89, 66, 27, 17, + 47, 43, 13, 15, 2, 18, 1, 64, 0, 76, 78, 80, 79, + 24, 1, 9, 73, 67, 72, 69, 75, 64, 73, 72, 82, + 18, 68, 3, 70, 80, 64, 72, 2, 5, 3, 2, 11, 8, + 72, 65, 2, 67, 2, 71, 4, 72, 0, 4, 64, 13, 6, + 64, 71, 6, 68, 74, 68, 84, 72, 6, 0, 7, 7, 7, + 29, 14, 4, 65, 8, 65, 69, 4, 96, 70, 0, 82, 65, + 74, 9, 3, 72, 14, 7, 4, 81, 9, 73, 75, 3, 88, + 11, 19, 13, 14, 17, 15, 8, 16, 16, 66, 4, 9, 3, + 1, 71, 64, 70, 68, 65, 68, 69, 66, 70, 79, 70, + 71, 78, 79, 81, 2, 5, 64, 65, 70, 73, 71, 71, + 79, 86, 83, 86, 100, 95, 107, 69, 69, 86, 65, + 71, 74, 77, 83, 88, 82, 84, 87, 78, 83, 91, 84, + 88, 1, 24, 18, 11, 6, 9, 2, 66, 64, 64, 6, 33, + 21, 15, 8, 18, 8, 7, 1, 10, 3, 41, 30, 23, 16, + 22, 5, 64, 67, 68, 70, 43, 22, 6, 2, 10, 65, 74, + 72, 5, 41, 28, 15, 8, 19, 5, 0, 65, 67, 62, 77, + 71, 65, 68, 70, 67, 2, 3, 0, 2, 6, 8, 74, 68, + 80, 73, 18, 75, 86, 71, 0, 67, 75, 77, 71, 76, + 82, 88, 91, 1, 2, 15, 64, 69, 3, 3, 4, 69, 65, + 0, 0, 77, 71, 77, 64, 9, 83, 65, 13, 69, 4, 64, + 4, 18, 68, 69, 4, 10, 78, 78, 99, 22, 25, 33, + 13, 9, 15, 8, 8, 10, 1, 5, 5, 72, 71, 74, 74, + 70, 79, 99, 75, 75, 74, 65, 70, 6, 12, 64, 8, + 15, 4, 2, 0, 65, 82, 75, 74, 91, 80, 87, 86, + 100, 97, 100, 101, 77, 76, 102, 69, 70, 79, 91, + 84, 85, 90, 84, 90, 92, 98, 101, 109, 110, 66, + 75, 89, 70, 8, 5, 13, 15, 17, 32, 21, 28, 29, + 45, 35, 32, 47, 44, 46, 16, 0, 78, 87, 101, 116, + 125, 126, 11, 44, 37, 36, 26, 34, 17, 12, 15, 5, + 74, 67, 8, 65, 21, 30, 65, 2, 12, 16, 5, 15, 28, + 4, 0, 31, 5, 78, 98, 113, 126, 126, 126, 126 }, + + { + + 33, + 5, 80, 33, 5, 80, 64, 11, 24, 12, 66, 84, 10, + 16, 52, 14, 29, 68, 15, 23, 64, 76, 64, 88, 104, + 0, 65, 125, 126, 124, 40, 4, 69, 15, 23, 64, 72, + 7, 16, 65, 1, 67, 71, 68, 82, 74, 92, 5, 69, 71, + 65, 78, 74, 88, 12, 1, 65, 68, 7, 3, 22, 0, 0, + 0, 1, 95, 97, 7, 70, 68, 18, 69, 89, 65, 28, 19, + 48, 44, 14, 16, 3, 20, 2, 0, 2, 76, 77, 80, 78, + 24, 1, 9, 72, 67, 71, 69, 74, 65, 73, 72, 82, + 18, 68, 3, 70, 80, 64, 72, 2, 5, 2, 2, 11, 8, + 72, 65, 2, 67, 2, 71, 4, 73, 0, 4, 65, 12, 5, + 65, 70, 6, 68, 75, 69, 84, 73, 6, 64, 7, 7, 7, + 30, 15, 4, 66, 8, 66, 70, 3, 97, 70, 0, 83, 65, + 75, 8, 2, 72, 15, 7, 4, 82, 8, 74, 75, 3, 89, + 11, 19, 13, 14, 17, 15, 8, 16, 15, 66, 4, 9, 3, + 1, 72, 64, 70, 68, 65, 68, 69, 67, 71, 79, 70, + 71, 79, 80, 81, 0, 3, 66, 67, 72, 75, 73, 73, + 81, 88, 85, 88, 103, 97, 108, 69, 70, 87, 66, + 72, 75, 78, 85, 89, 83, 86, 87, 79, 84, 91, 84, + 87, 1, 24, 18, 11, 6, 9, 2, 66, 64, 0, 7, 33, + 21, 15, 8, 18, 8, 7, 1, 12, 3, 41, 30, 23, 16, + 22, 5, 64, 67, 67, 70, 43, 21, 6, 2, 10, 65, 74, + 72, 5, 40, 27, 14, 7, 19, 5, 0, 65, 67, 62, 76, + 70, 64, 66, 69, 66, 3, 5, 1, 4, 7, 10, 73, 68, + 79, 72, 19, 74, 87, 71, 1, 67, 75, 78, 72, 77, + 83, 89, 92, 0, 2, 15, 64, 70, 2, 3, 4, 70, 66, + 0, 64, 78, 72, 77, 64, 9, 83, 66, 12, 70, 4, 65, + 3, 18, 69, 70, 4, 10, 79, 79, 101, 21, 25, 32, + 12, 7, 14, 6, 6, 8, 64, 2, 2, 75, 73, 76, 77, + 74, 82, 103, 77, 77, 76, 66, 72, 6, 13, 0, 9, + 17, 3, 0, 65, 66, 84, 77, 76, 93, 81, 89, 88, + 102, 98, 101, 102, 78, 76, 103, 71, 71, 81, 92, + 86, 87, 91, 86, 92, 93, 99, 102, 110, 110, 67, + 75, 90, 70, 8, 6, 14, 15, 18, 33, 21, 29, 30, + 46, 36, 33, 48, 45, 45, 14, 65, 80, 90, 104, + 119, 126, 126, 11, 44, 37, 36, 27, 34, 17, 13, + 15, 5, 73, 67, 9, 65, 22, 31, 65, 3, 13, 17, 5, + 15, 29, 4, 0, 29, 3, 80, 101, 116, 126, 126, + 126, 126 }, + + { + + 32, + 5, 80, 32, 5, 80, 1, 13, 24, 12, 67, 86, 8, 15, + 52, 14, 31, 68, 16, 24, 64, 76, 0, 89, 105, 0, + 67, 126, 126, 124, 43, 6, 69, 16, 24, 64, 72, 8, + 16, 65, 1, 67, 70, 68, 83, 74, 92, 5, 69, 70, + 65, 78, 74, 88, 13, 1, 64, 68, 8, 3, 22, 0, 0, + 0, 1, 95, 97, 8, 71, 68, 18, 68, 89, 0, 30, 20, + 50, 46, 16, 17, 4, 21, 3, 1, 4, 75, 77, 79, 77, + 24, 1, 9, 72, 67, 71, 68, 72, 65, 73, 72, 82, + 18, 68, 4, 69, 80, 64, 72, 3, 5, 2, 2, 11, 8, + 71, 65, 3, 67, 2, 71, 3, 73, 0, 3, 66, 12, 4, + 66, 69, 7, 68, 76, 69, 83, 73, 6, 64, 7, 7, 7, + 31, 15, 4, 66, 8, 66, 71, 3, 98, 70, 0, 83, 66, + 76, 8, 2, 73, 15, 7, 4, 83, 8, 75, 75, 3, 89, + 10, 19, 13, 14, 17, 15, 8, 16, 15, 66, 4, 9, 3, + 1, 72, 64, 70, 69, 65, 68, 70, 68, 71, 79, 71, + 71, 80, 81, 81, 64, 1, 67, 68, 74, 77, 75, 75, + 83, 90, 87, 90, 105, 98, 109, 69, 70, 87, 67, + 73, 76, 79, 86, 91, 84, 87, 88, 79, 84, 91, 84, + 87, 1, 24, 18, 11, 6, 9, 3, 65, 0, 1, 7, 33, 21, + 15, 8, 18, 9, 8, 2, 14, 3, 41, 30, 23, 16, 22, + 5, 64, 67, 66, 70, 44, 21, 5, 2, 10, 65, 74, 71, + 5, 40, 26, 13, 6, 19, 5, 0, 65, 66, 62, 75, 69, + 0, 65, 68, 65, 4, 6, 2, 5, 9, 12, 72, 67, 79, + 72, 20, 74, 87, 70, 2, 67, 76, 78, 72, 77, 84, + 90, 93, 64, 1, 15, 65, 70, 2, 3, 4, 71, 67, 0, + 64, 79, 72, 77, 64, 9, 83, 67, 12, 70, 4, 66, 2, + 18, 70, 71, 3, 9, 80, 80, 103, 20, 24, 32, 11, + 6, 12, 4, 4, 6, 67, 64, 0, 78, 75, 77, 80, 77, + 85, 107, 80, 80, 78, 67, 73, 6, 14, 0, 10, 19, + 1, 64, 67, 68, 86, 79, 77, 95, 82, 91, 89, 104, + 100, 102, 103, 78, 76, 104, 72, 73, 83, 94, 87, + 88, 93, 87, 93, 95, 100, 103, 111, 111, 67, 76, + 91, 69, 9, 6, 14, 16, 19, 34, 22, 30, 31, 48, + 37, 34, 49, 47, 45, 12, 67, 83, 92, 107, 122, + 126, 126, 11, 45, 38, 37, 27, 35, 17, 13, 16, 6, + 73, 67, 10, 64, 23, 32, 64, 4, 13, 17, 5, 16, + 30, 4, 0, 28, 1, 83, 104, 119, 126, 126, 126, + 126 }, + + { + + 31, + 5, 81, 31, 5, 81, 3, 14, 25, 12, 67, 87, 7, 14, + 52, 14, 33, 68, 16, 25, 64, 77, 0, 90, 106, 64, + 68, 126, 126, 125, 46, 7, 69, 16, 25, 64, 71, 9, + 17, 66, 2, 66, 69, 69, 83, 74, 92, 5, 68, 70, + 65, 78, 73, 88, 13, 1, 64, 68, 8, 3, 22, 0, 0, + 0, 2, 95, 97, 8, 71, 69, 18, 68, 88, 2, 32, 22, + 51, 48, 17, 18, 6, 22, 4, 1, 5, 75, 77, 79, 77, + 25, 1, 9, 71, 66, 70, 68, 71, 65, 74, 73, 83, + 18, 68, 4, 69, 80, 0, 72, 3, 5, 2, 3, 11, 7, 71, + 65, 3, 67, 2, 71, 2, 73, 0, 2, 67, 11, 4, 66, + 69, 7, 68, 76, 70, 83, 74, 6, 64, 7, 7, 7, 31, + 15, 4, 66, 9, 66, 72, 3, 98, 71, 0, 84, 66, 77, + 8, 2, 74, 15, 7, 4, 85, 8, 76, 75, 3, 90, 9, 19, + 12, 14, 17, 15, 8, 16, 15, 66, 3, 9, 2, 1, 72, + 65, 71, 69, 66, 69, 71, 69, 72, 79, 71, 70, 81, + 83, 81, 66, 64, 69, 70, 76, 79, 77, 77, 85, 92, + 88, 91, 107, 100, 110, 69, 70, 88, 68, 74, 77, + 81, 88, 92, 85, 88, 89, 80, 85, 91, 84, 86, 2, + 24, 18, 11, 7, 9, 3, 65, 0, 2, 8, 32, 21, 15, 8, + 19, 9, 9, 3, 16, 3, 42, 30, 23, 16, 23, 5, 64, + 66, 66, 70, 44, 21, 5, 2, 10, 64, 73, 70, 5, 39, + 26, 12, 6, 19, 5, 1, 64, 66, 62, 75, 68, 0, 64, + 67, 64, 6, 7, 3, 6, 10, 13, 72, 66, 79, 71, 22, + 74, 88, 70, 2, 67, 76, 79, 72, 78, 85, 91, 94, + 64, 1, 15, 65, 71, 1, 2, 4, 71, 67, 64, 64, 79, + 72, 78, 64, 9, 84, 67, 11, 71, 3, 67, 2, 19, 70, + 72, 3, 9, 80, 80, 104, 19, 23, 31, 10, 5, 11, 2, + 2, 4, 69, 66, 66, 81, 78, 78, 82, 80, 88, 111, + 83, 82, 80, 68, 74, 6, 15, 0, 12, 22, 64, 66, + 69, 70, 88, 81, 79, 97, 84, 92, 90, 105, 101, + 103, 104, 79, 77, 105, 73, 74, 84, 96, 89, 90, + 94, 89, 95, 96, 102, 105, 113, 112, 68, 77, 92, + 69, 9, 6, 15, 16, 19, 36, 23, 31, 32, 49, 39, + 35, 51, 48, 44, 11, 69, 85, 95, 109, 125, 126, + 126, 12, 45, 38, 37, 27, 36, 18, 13, 16, 6, 73, + 66, 10, 64, 24, 33, 64, 4, 14, 18, 5, 16, 31, 4, + 0, 27, 64, 85, 107, 123, 126, 126, 126, 126 }, + + { + + 30, + 5, 81, 30, 5, 81, 5, 16, 25, 12, 68, 89, 5, 12, + 52, 14, 36, 69, 17, 25, 64, 78, 0, 91, 107, 64, + 70, 126, 126, 125, 49, 8, 69, 17, 25, 64, 71, + 10, 17, 66, 2, 66, 69, 69, 84, 73, 92, 5, 68, + 69, 66, 78, 73, 88, 14, 2, 64, 67, 9, 3, 22, 0, + 0, 0, 2, 95, 97, 9, 72, 69, 18, 68, 88, 3, 34, + 23, 53, 50, 18, 19, 7, 24, 5, 2, 7, 74, 76, 78, + 76, 25, 1, 9, 71, 66, 70, 67, 69, 66, 74, 73, + 83, 18, 68, 4, 68, 80, 0, 72, 4, 5, 1, 3, 11, 7, + 71, 65, 3, 67, 2, 71, 2, 73, 0, 2, 68, 10, 3, + 67, 68, 8, 68, 77, 70, 82, 74, 6, 65, 7, 7, 7, + 32, 16, 4, 66, 9, 66, 73, 3, 99, 71, 0, 84, 67, + 78, 7, 2, 74, 16, 7, 4, 86, 7, 77, 75, 3, 90, 9, + 19, 12, 14, 17, 15, 8, 16, 15, 66, 3, 9, 2, 1, + 72, 65, 71, 70, 66, 69, 71, 70, 72, 79, 72, 70, + 82, 84, 81, 67, 66, 71, 72, 78, 81, 79, 79, 87, + 94, 90, 93, 110, 102, 111, 69, 71, 88, 69, 75, + 78, 82, 89, 94, 86, 89, 89, 80, 85, 91, 84, 86, + 2, 24, 18, 11, 7, 9, 3, 65, 1, 3, 8, 32, 21, 15, + 8, 19, 10, 10, 3, 18, 3, 42, 30, 23, 16, 23, 5, + 64, 66, 65, 70, 44, 20, 4, 2, 10, 64, 73, 70, 5, + 39, 25, 11, 5, 19, 5, 1, 64, 65, 62, 74, 67, 1, + 1, 66, 0, 7, 9, 4, 8, 12, 15, 71, 65, 78, 71, + 23, 73, 88, 70, 3, 67, 77, 79, 73, 79, 86, 92, + 95, 65, 0, 15, 66, 71, 1, 2, 4, 72, 68, 64, 65, + 80, 72, 78, 64, 9, 84, 68, 11, 72, 3, 68, 1, 19, + 71, 73, 2, 8, 81, 81, 106, 18, 23, 31, 9, 3, 9, + 0, 0, 2, 72, 69, 68, 84, 80, 80, 85, 84, 91, + 115, 85, 85, 82, 69, 75, 6, 16, 1, 13, 24, 65, + 68, 71, 71, 90, 83, 80, 99, 85, 94, 92, 107, + 103, 104, 105, 79, 77, 106, 75, 76, 86, 97, 91, + 92, 96, 90, 97, 98, 103, 106, 114, 112, 69, 77, + 93, 69, 10, 7, 15, 17, 20, 37, 24, 32, 33, 50, + 40, 36, 52, 49, 44, 9, 71, 88, 97, 112, 126, + 126, 126, 12, 46, 39, 38, 28, 37, 18, 14, 17, 7, + 72, 66, 11, 0, 25, 34, 64, 5, 14, 18, 5, 17, 32, + 4, 0, 25, 66, 88, 110, 126, 126, 126, 126, 126 }, + + { + + 28, + 4, 81, 28, 4, 81, 6, 17, 25, 12, 68, 90, 4, 11, + 52, 14, 38, 69, 18, 26, 64, 79, 0, 92, 109, 65, + 72, 126, 126, 126, 51, 9, 69, 18, 26, 64, 71, + 11, 17, 67, 2, 66, 68, 70, 84, 73, 93, 5, 68, + 69, 66, 79, 73, 88, 14, 2, 64, 67, 9, 3, 22, 0, + 0, 0, 3, 96, 97, 9, 73, 69, 18, 68, 88, 5, 35, + 25, 54, 51, 19, 20, 8, 25, 6, 3, 9, 74, 76, 78, + 75, 25, 1, 9, 70, 66, 69, 67, 68, 66, 75, 74, + 84, 18, 68, 4, 68, 80, 0, 72, 4, 4, 1, 3, 11, 6, + 71, 65, 3, 67, 1, 71, 1, 74, 0, 1, 70, 9, 2, 68, + 68, 8, 68, 78, 71, 82, 75, 5, 65, 7, 7, 7, 33, + 16, 4, 67, 9, 67, 74, 2, 100, 71, 0, 85, 67, 79, + 7, 1, 75, 16, 7, 4, 88, 7, 78, 75, 3, 91, 8, 18, + 12, 14, 17, 14, 7, 16, 14, 67, 2, 9, 2, 0, 73, + 66, 72, 70, 67, 70, 72, 71, 73, 79, 72, 70, 83, + 86, 81, 69, 68, 73, 74, 80, 84, 81, 81, 89, 96, + 92, 95, 112, 104, 112, 69, 71, 89, 70, 77, 80, + 84, 91, 95, 88, 91, 90, 81, 86, 91, 84, 85, 2, + 24, 18, 11, 7, 9, 3, 65, 1, 4, 9, 32, 21, 15, 8, + 19, 10, 10, 4, 19, 3, 42, 30, 23, 15, 23, 5, 64, + 66, 65, 70, 44, 20, 4, 2, 10, 64, 73, 69, 5, 38, + 24, 10, 4, 18, 5, 1, 64, 65, 62, 73, 66, 1, 2, + 65, 0, 8, 10, 5, 9, 13, 16, 71, 65, 78, 70, 24, + 73, 89, 70, 3, 67, 77, 80, 73, 80, 87, 94, 96, + 66, 0, 15, 66, 72, 0, 1, 3, 73, 69, 65, 65, 81, + 73, 79, 64, 9, 85, 69, 10, 73, 3, 69, 0, 19, 72, + 74, 2, 8, 82, 82, 108, 17, 22, 30, 7, 2, 8, 65, + 65, 64, 74, 72, 71, 87, 83, 81, 88, 87, 94, 119, + 88, 87, 84, 71, 77, 6, 16, 1, 14, 26, 67, 70, + 73, 73, 93, 85, 82, 101, 87, 96, 93, 109, 104, + 105, 106, 80, 78, 107, 76, 77, 88, 99, 93, 94, + 97, 92, 99, 99, 104, 108, 116, 113, 70, 78, 94, + 69, 10, 7, 16, 17, 20, 38, 24, 33, 34, 51, 41, + 37, 53, 50, 43, 7, 73, 90, 100, 115, 126, 126, + 126, 12, 46, 39, 38, 28, 37, 18, 14, 17, 7, 72, + 66, 11, 0, 26, 35, 64, 5, 15, 19, 5, 17, 32, 4, + 64, 24, 68, 90, 113, 126, 126, 126, 126, 126 }, + + { + + 27, + 4, 81, 27, 4, 81, 8, 18, 26, 12, 68, 91, 3, 10, + 52, 14, 40, 69, 19, 27, 64, 79, 1, 93, 110, 66, + 74, 126, 126, 126, 54, 11, 69, 19, 27, 64, 70, + 12, 18, 68, 2, 65, 67, 70, 84, 73, 93, 5, 68, + 68, 66, 79, 73, 88, 14, 2, 0, 67, 9, 3, 22, 0, + 0, 0, 4, 96, 97, 9, 74, 69, 18, 67, 88, 7, 37, + 27, 55, 53, 21, 21, 10, 26, 8, 4, 11, 74, 76, + 78, 74, 25, 1, 9, 69, 66, 68, 66, 67, 66, 75, + 74, 84, 18, 68, 5, 67, 79, 1, 72, 4, 4, 1, 3, + 11, 6, 70, 65, 4, 67, 1, 70, 0, 74, 0, 0, 71, 9, + 1, 69, 67, 8, 67, 79, 72, 82, 76, 5, 65, 8, 7, + 7, 34, 16, 4, 67, 10, 67, 74, 2, 101, 71, 0, 86, + 67, 80, 7, 1, 76, 16, 7, 4, 89, 7, 78, 75, 3, + 92, 7, 18, 12, 14, 17, 14, 7, 16, 14, 67, 2, 9, + 2, 0, 73, 66, 72, 70, 67, 70, 73, 71, 73, 79, + 72, 70, 84, 87, 81, 71, 69, 74, 75, 82, 86, 82, + 82, 91, 98, 93, 96, 114, 105, 113, 69, 71, 90, + 71, 78, 81, 85, 92, 96, 89, 92, 91, 82, 87, 91, + 83, 84, 3, 25, 18, 11, 7, 10, 4, 64, 2, 5, 10, + 32, 21, 15, 8, 20, 10, 11, 5, 21, 3, 42, 30, 23, + 15, 24, 5, 64, 66, 64, 70, 45, 20, 4, 2, 11, 64, + 73, 68, 5, 38, 24, 10, 3, 18, 5, 1, 0, 64, 62, + 72, 65, 2, 3, 0, 1, 10, 11, 7, 10, 14, 18, 70, + 64, 78, 69, 26, 73, 90, 69, 4, 67, 77, 81, 73, + 80, 88, 95, 97, 66, 0, 15, 66, 72, 64, 1, 3, 74, + 69, 65, 65, 82, 73, 79, 0, 10, 85, 69, 9, 73, 3, + 69, 0, 19, 73, 75, 2, 8, 83, 82, 109, 17, 21, + 29, 6, 1, 7, 67, 67, 66, 76, 74, 74, 89, 85, 82, + 91, 90, 97, 123, 91, 89, 85, 72, 78, 6, 17, 1, + 15, 28, 69, 71, 75, 75, 95, 86, 83, 103, 88, 97, + 94, 110, 105, 106, 106, 80, 78, 108, 77, 78, 89, + 101, 94, 95, 98, 93, 100, 100, 105, 109, 117, + 114, 70, 79, 94, 68, 10, 7, 17, 18, 21, 39, 25, + 34, 35, 53, 42, 38, 55, 52, 42, 6, 75, 92, 103, + 118, 126, 126, 126, 13, 46, 39, 39, 28, 38, 19, + 14, 18, 8, 72, 65, 12, 0, 27, 37, 0, 6, 16, 20, + 5, 18, 33, 4, 64, 23, 70, 92, 115, 126, 126, + 126, 126, 126 }, + + { + + 26, + 4, 81, 26, 4, 81, 10, 20, 26, 12, 69, 93, 1, 8, + 52, 14, 43, 70, 20, 27, 64, 80, 1, 94, 111, 66, + 76, 126, 126, 126, 57, 12, 69, 20, 27, 64, 70, + 13, 18, 68, 2, 65, 67, 70, 85, 72, 93, 5, 68, + 67, 67, 79, 73, 88, 15, 3, 0, 66, 10, 3, 22, 0, + 0, 0, 4, 96, 97, 10, 75, 69, 18, 67, 88, 8, 39, + 28, 57, 55, 22, 22, 11, 28, 9, 5, 13, 73, 75, + 77, 73, 25, 1, 9, 69, 66, 68, 66, 65, 67, 75, + 74, 84, 18, 68, 5, 67, 79, 1, 72, 5, 4, 0, 3, + 11, 6, 70, 65, 4, 67, 1, 70, 0, 74, 0, 0, 72, 8, + 0, 70, 66, 9, 67, 80, 72, 81, 76, 5, 66, 8, 7, + 7, 35, 17, 4, 67, 10, 67, 75, 2, 102, 71, 0, 86, + 68, 81, 6, 1, 76, 17, 7, 4, 90, 6, 79, 75, 3, + 92, 7, 18, 12, 14, 17, 14, 7, 16, 14, 67, 2, 9, + 2, 0, 73, 66, 72, 71, 67, 70, 73, 72, 74, 79, + 73, 70, 85, 88, 81, 72, 71, 76, 77, 84, 88, 84, + 84, 93, 100, 95, 98, 117, 107, 114, 69, 72, 90, + 72, 79, 82, 86, 94, 98, 90, 93, 91, 82, 87, 91, + 83, 84, 3, 25, 18, 11, 7, 10, 4, 64, 2, 6, 10, + 32, 21, 15, 8, 20, 11, 12, 5, 23, 3, 42, 30, 23, + 15, 24, 5, 64, 66, 0, 70, 45, 19, 3, 2, 11, 64, + 73, 68, 5, 37, 23, 9, 2, 18, 5, 1, 0, 64, 62, + 71, 64, 3, 5, 1, 2, 11, 13, 8, 12, 16, 20, 69, + 0, 77, 69, 27, 72, 90, 69, 5, 67, 78, 81, 74, + 81, 89, 96, 98, 67, 64, 15, 67, 73, 64, 1, 3, + 75, 70, 65, 66, 83, 73, 79, 0, 10, 85, 70, 9, + 74, 3, 70, 64, 19, 74, 76, 1, 7, 84, 83, 111, + 16, 21, 29, 5, 64, 5, 69, 69, 68, 79, 77, 76, + 92, 87, 84, 94, 94, 100, 126, 93, 92, 87, 73, + 79, 6, 18, 2, 16, 30, 70, 73, 77, 76, 97, 88, + 85, 105, 89, 99, 96, 112, 107, 107, 107, 81, 78, + 109, 79, 80, 91, 102, 96, 97, 100, 95, 102, 102, + 106, 110, 118, 114, 71, 79, 95, 68, 11, 8, 17, + 18, 22, 40, 26, 35, 36, 54, 43, 39, 56, 53, 42, + 4, 77, 95, 105, 121, 126, 126, 126, 13, 47, 40, + 39, 29, 39, 19, 15, 18, 8, 71, 65, 13, 1, 28, + 38, 0, 7, 16, 20, 5, 18, 34, 4, 64, 21, 72, 95, + 118, 126, 126, 126, 126, 126 }, + + { + + 25, + 4, 82, 25, 4, 82, 12, 21, 27, 12, 69, 94, 0, 7, + 52, 14, 45, 70, 20, 28, 64, 81, 1, 95, 112, 67, + 77, 126, 126, 126, 60, 13, 69, 20, 28, 64, 69, + 14, 19, 69, 3, 64, 66, 71, 85, 72, 93, 5, 67, + 67, 67, 79, 72, 88, 15, 3, 0, 66, 10, 3, 22, 0, + 0, 0, 5, 96, 97, 10, 75, 70, 18, 67, 87, 10, 41, + 30, 58, 57, 23, 23, 13, 29, 10, 5, 14, 73, 75, + 77, 73, 26, 1, 9, 68, 65, 67, 65, 64, 67, 76, + 75, 85, 18, 68, 5, 66, 79, 2, 72, 5, 4, 0, 4, + 11, 5, 70, 65, 4, 67, 1, 70, 64, 74, 0, 64, 73, + 7, 0, 70, 66, 9, 67, 80, 73, 81, 77, 5, 66, 8, + 7, 7, 35, 17, 4, 67, 11, 67, 76, 2, 102, 72, 0, + 87, 68, 82, 6, 1, 77, 17, 7, 4, 92, 6, 80, 75, + 3, 93, 6, 18, 11, 14, 17, 14, 7, 16, 14, 67, 1, + 9, 1, 0, 73, 67, 73, 71, 68, 71, 74, 73, 74, 79, + 73, 69, 86, 90, 81, 74, 73, 78, 79, 86, 90, 86, + 86, 95, 102, 96, 99, 119, 109, 115, 69, 72, 91, + 73, 80, 83, 88, 95, 99, 91, 94, 92, 83, 88, 91, + 83, 83, 4, 25, 18, 11, 8, 10, 4, 64, 3, 7, 11, + 31, 21, 15, 8, 21, 11, 13, 6, 25, 3, 43, 30, 23, + 15, 25, 5, 64, 65, 0, 70, 45, 19, 3, 2, 11, 0, + 72, 67, 5, 37, 23, 8, 2, 18, 5, 2, 1, 0, 62, 71, + 0, 3, 6, 2, 3, 13, 14, 9, 13, 17, 21, 69, 1, 77, + 68, 29, 72, 91, 69, 5, 67, 78, 82, 74, 82, 90, + 97, 99, 67, 64, 15, 67, 73, 65, 0, 3, 75, 70, + 66, 66, 83, 73, 80, 0, 10, 86, 70, 8, 75, 2, 71, + 64, 20, 74, 77, 1, 7, 84, 83, 112, 15, 20, 28, + 4, 65, 4, 71, 71, 70, 81, 79, 79, 95, 90, 85, + 96, 97, 103, 126, 96, 94, 89, 74, 80, 6, 19, 2, + 18, 33, 72, 75, 79, 78, 99, 90, 86, 107, 91, + 100, 97, 113, 108, 108, 108, 81, 79, 110, 80, + 81, 92, 104, 98, 99, 101, 96, 104, 103, 108, + 112, 120, 115, 72, 80, 96, 68, 11, 8, 18, 19, + 22, 42, 27, 36, 37, 55, 45, 40, 58, 54, 41, 3, + 79, 97, 108, 123, 126, 126, 126, 14, 47, 40, 40, + 29, 40, 20, 15, 19, 9, 71, 64, 13, 1, 29, 39, 0, + 7, 17, 21, 5, 19, 35, 4, 64, 20, 74, 97, 121, + 126, 126, 126, 126, 126 }, + + { + + 23, + 4, 82, 23, 4, 82, 13, 23, 27, 12, 70, 96, 65, 6, + 52, 14, 47, 70, 21, 29, 64, 82, 1, 96, 113, 67, + 79, 126, 126, 126, 62, 14, 69, 21, 29, 64, 69, + 15, 19, 69, 3, 64, 65, 71, 86, 72, 93, 5, 67, + 66, 67, 80, 72, 88, 16, 3, 0, 66, 11, 3, 22, 0, + 0, 0, 5, 97, 97, 11, 76, 70, 18, 67, 87, 12, 42, + 31, 60, 58, 24, 24, 14, 30, 11, 6, 16, 72, 75, + 76, 72, 26, 1, 9, 68, 65, 67, 65, 1, 67, 76, 75, + 85, 18, 68, 5, 66, 79, 2, 72, 6, 4, 0, 4, 11, 5, + 70, 65, 4, 67, 1, 70, 65, 75, 0, 65, 74, 6, 64, + 71, 65, 10, 67, 81, 73, 80, 77, 5, 66, 8, 7, 7, + 36, 17, 4, 68, 11, 68, 77, 1, 103, 72, 0, 87, + 69, 83, 6, 0, 78, 17, 7, 4, 93, 6, 81, 75, 3, + 93, 5, 18, 11, 14, 17, 14, 7, 16, 13, 67, 1, 9, + 1, 0, 74, 67, 73, 72, 68, 71, 75, 74, 75, 79, + 74, 69, 87, 91, 81, 75, 75, 80, 81, 88, 92, 88, + 88, 97, 104, 98, 101, 121, 111, 116, 69, 72, 91, + 74, 81, 84, 89, 97, 101, 92, 96, 93, 83, 88, 91, + 83, 83, 4, 25, 18, 11, 8, 10, 4, 64, 3, 8, 11, + 31, 21, 15, 8, 21, 12, 13, 7, 27, 3, 43, 30, 23, + 15, 25, 5, 64, 65, 1, 70, 45, 19, 2, 2, 11, 0, + 72, 66, 5, 36, 22, 7, 1, 18, 5, 2, 1, 0, 62, 70, + 1, 4, 7, 3, 4, 14, 15, 10, 14, 19, 23, 68, 1, + 77, 68, 30, 72, 91, 69, 6, 67, 79, 82, 74, 83, + 91, 98, 100, 68, 65, 15, 68, 74, 65, 0, 3, 76, + 71, 66, 66, 84, 74, 80, 0, 10, 86, 71, 8, 76, 2, + 72, 65, 20, 75, 78, 0, 6, 85, 84, 114, 14, 19, + 28, 3, 66, 2, 73, 73, 72, 84, 82, 81, 98, 92, + 86, 99, 100, 106, 126, 99, 97, 91, 75, 82, 6, + 20, 2, 19, 35, 74, 77, 81, 80, 101, 92, 88, 109, + 92, 102, 98, 115, 110, 109, 109, 82, 79, 111, + 81, 83, 94, 106, 100, 101, 103, 98, 106, 105, + 109, 113, 121, 116, 73, 81, 97, 68, 12, 8, 18, + 19, 23, 43, 27, 37, 38, 56, 46, 41, 59, 55, 41, + 1, 81, 100, 110, 126, 126, 126, 126, 14, 48, 41, + 40, 29, 40, 20, 15, 19, 9, 71, 64, 14, 2, 30, + 40, 0, 8, 17, 21, 5, 19, 36, 4, 64, 19, 76, 100, + 124, 126, 126, 126, 126, 126 }, + + { + + 22, + 4, 82, 22, 4, 82, 15, 24, 27, 12, 70, 97, 66, 4, + 52, 14, 50, 71, 22, 29, 64, 82, 2, 97, 114, 68, + 81, 126, 126, 126, 62, 16, 69, 22, 29, 64, 69, + 16, 19, 70, 3, 64, 65, 71, 86, 71, 93, 5, 67, + 65, 68, 80, 72, 88, 16, 4, 1, 65, 11, 3, 22, 0, + 0, 0, 6, 97, 97, 11, 77, 70, 18, 66, 87, 13, 44, + 33, 61, 60, 26, 25, 15, 32, 12, 7, 18, 72, 74, + 76, 71, 26, 1, 9, 67, 65, 66, 64, 2, 68, 76, 75, + 85, 18, 68, 6, 65, 79, 2, 72, 6, 4, 64, 4, 11, + 5, 69, 65, 5, 67, 1, 70, 65, 75, 0, 65, 75, 6, + 65, 72, 64, 10, 67, 82, 74, 80, 78, 5, 67, 8, 7, + 7, 37, 18, 4, 68, 11, 68, 78, 1, 104, 72, 0, 88, + 69, 84, 5, 0, 78, 18, 7, 4, 94, 5, 82, 75, 3, + 94, 5, 18, 11, 14, 17, 14, 7, 16, 13, 67, 1, 9, + 1, 0, 74, 67, 73, 72, 68, 71, 75, 75, 75, 79, + 74, 69, 88, 92, 81, 77, 77, 81, 82, 90, 94, 90, + 90, 99, 106, 100, 103, 124, 112, 117, 69, 73, + 92, 75, 82, 85, 90, 98, 102, 93, 97, 93, 84, 89, + 91, 83, 82, 4, 25, 18, 11, 8, 10, 5, 0, 4, 9, + 12, 31, 21, 15, 8, 21, 12, 14, 7, 29, 3, 43, 30, + 23, 15, 25, 5, 64, 65, 2, 70, 46, 18, 2, 2, 11, + 0, 72, 66, 5, 36, 21, 6, 0, 18, 5, 2, 1, 1, 62, + 69, 2, 5, 9, 4, 5, 15, 17, 11, 16, 20, 25, 67, + 2, 76, 67, 31, 71, 92, 68, 7, 67, 79, 83, 75, + 83, 92, 99, 101, 69, 65, 15, 68, 74, 66, 0, 3, + 77, 72, 66, 67, 85, 74, 80, 0, 10, 86, 72, 7, + 76, 2, 73, 66, 20, 76, 79, 0, 6, 86, 85, 116, + 13, 19, 27, 2, 68, 1, 75, 75, 74, 86, 85, 84, + 101, 94, 88, 102, 104, 109, 126, 101, 99, 93, + 76, 83, 6, 21, 3, 20, 37, 75, 78, 83, 81, 103, + 94, 89, 111, 93, 104, 100, 117, 111, 110, 110, + 82, 79, 112, 83, 84, 96, 107, 101, 102, 104, 99, + 107, 106, 110, 114, 122, 116, 73, 81, 98, 67, + 12, 9, 19, 20, 24, 44, 28, 38, 39, 58, 47, 42, + 60, 57, 40, 64, 83, 102, 113, 126, 126, 126, + 126, 14, 48, 41, 41, 30, 41, 20, 16, 20, 10, 70, + 64, 15, 2, 31, 41, 1, 9, 18, 22, 5, 20, 37, 4, + 64, 17, 78, 102, 126, 126, 126, 126, 126, 126 }, + + { + + 21, + 4, 82, 21, 4, 82, 17, 26, 28, 12, 71, 99, 68, 3, + 52, 14, 52, 71, 23, 30, 64, 83, 2, 98, 115, 68, + 83, 126, 126, 126, 62, 17, 69, 23, 30, 64, 68, + 17, 20, 70, 3, 0, 64, 72, 87, 71, 93, 5, 67, 65, + 68, 80, 72, 88, 17, 4, 1, 65, 12, 3, 22, 0, 0, + 0, 6, 97, 97, 12, 78, 70, 18, 66, 87, 15, 46, + 34, 62, 62, 27, 26, 17, 33, 13, 8, 20, 71, 74, + 75, 70, 26, 1, 9, 67, 65, 66, 64, 4, 68, 77, 76, + 86, 18, 68, 6, 65, 79, 3, 72, 7, 4, 64, 4, 11, + 4, 69, 65, 5, 67, 1, 70, 66, 75, 0, 66, 76, 5, + 66, 73, 64, 11, 67, 83, 74, 79, 78, 5, 67, 8, 7, + 7, 38, 18, 4, 68, 12, 68, 79, 1, 105, 72, 0, 88, + 70, 85, 5, 0, 79, 18, 7, 4, 96, 5, 83, 75, 3, + 94, 4, 18, 11, 14, 17, 14, 7, 16, 13, 67, 0, 9, + 1, 0, 74, 68, 74, 73, 69, 72, 76, 76, 76, 79, + 75, 69, 89, 94, 81, 78, 79, 83, 84, 92, 96, 92, + 92, 101, 108, 101, 104, 126, 114, 118, 69, 73, + 92, 76, 83, 86, 92, 100, 104, 94, 98, 94, 84, + 89, 91, 83, 82, 5, 25, 18, 11, 8, 10, 5, 0, 4, + 10, 12, 31, 21, 15, 8, 22, 13, 15, 8, 31, 3, 43, + 30, 23, 15, 26, 5, 64, 65, 2, 70, 46, 18, 1, 2, + 11, 0, 72, 65, 5, 35, 21, 5, 64, 18, 5, 2, 2, 1, + 62, 68, 3, 5, 10, 5, 6, 17, 18, 12, 17, 22, 26, + 67, 3, 76, 67, 33, 71, 92, 68, 7, 67, 80, 83, + 75, 84, 93, 100, 102, 69, 66, 15, 69, 75, 66, + 64, 3, 78, 72, 67, 67, 86, 74, 81, 0, 10, 87, + 72, 7, 77, 2, 74, 66, 20, 77, 80, 64, 5, 87, 85, + 117, 12, 18, 27, 1, 69, 64, 77, 77, 76, 89, 87, + 86, 104, 97, 89, 105, 107, 112, 126, 104, 102, + 95, 77, 84, 6, 22, 3, 21, 39, 77, 80, 85, 83, + 105, 96, 91, 113, 95, 105, 101, 118, 113, 111, + 111, 83, 80, 113, 84, 86, 97, 109, 103, 104, + 106, 101, 109, 108, 111, 116, 124, 117, 74, 82, + 99, 67, 13, 9, 19, 20, 24, 45, 29, 39, 40, 59, + 48, 43, 62, 58, 40, 65, 85, 105, 115, 126, 126, + 126, 126, 15, 49, 42, 41, 30, 42, 21, 16, 20, + 10, 70, 0, 15, 3, 32, 42, 1, 9, 18, 22, 5, 20, + 38, 4, 64, 16, 80, 105, 126, 126, 126, 126, 126, + 126 }, + + { + + 20, + 4, 82, 20, 4, 82, 19, 27, 28, 12, 71, 100, 69, + 2, 52, 14, 54, 71, 24, 31, 64, 84, 2, 99, 116, + 69, 85, 126, 126, 126, 62, 18, 69, 24, 31, 64, + 68, 18, 20, 71, 3, 0, 0, 72, 87, 71, 93, 5, 67, + 64, 68, 80, 72, 88, 17, 4, 1, 65, 12, 3, 22, 0, + 0, 0, 7, 97, 97, 12, 79, 70, 18, 66, 87, 17, 48, + 36, 62, 62, 28, 27, 18, 34, 14, 9, 22, 71, 74, + 75, 69, 26, 1, 9, 66, 65, 65, 0, 5, 68, 77, 76, + 86, 18, 68, 6, 64, 79, 3, 72, 7, 4, 64, 4, 11, + 4, 69, 65, 5, 67, 1, 70, 67, 75, 0, 67, 77, 4, + 67, 74, 0, 11, 67, 84, 75, 79, 79, 5, 67, 8, 7, + 7, 39, 18, 4, 68, 12, 68, 80, 1, 106, 72, 0, 89, + 70, 86, 5, 0, 80, 18, 7, 4, 97, 5, 84, 75, 3, + 95, 3, 18, 11, 14, 17, 14, 7, 16, 13, 67, 0, 9, + 1, 0, 74, 68, 74, 73, 69, 72, 77, 77, 76, 79, + 75, 69, 90, 95, 81, 80, 81, 85, 86, 94, 98, 94, + 94, 103, 110, 103, 106, 126, 116, 119, 69, 73, + 93, 77, 84, 87, 93, 101, 105, 95, 99, 95, 85, + 90, 91, 83, 81, 5, 25, 18, 11, 8, 10, 5, 0, 5, + 11, 13, 31, 21, 15, 8, 22, 13, 16, 9, 33, 3, 43, + 30, 23, 15, 26, 5, 64, 65, 3, 70, 46, 18, 1, 2, + 11, 0, 72, 64, 5, 35, 20, 4, 65, 18, 5, 2, 2, 2, + 62, 67, 4, 6, 11, 6, 7, 18, 19, 13, 18, 23, 28, + 66, 4, 76, 66, 34, 71, 93, 68, 8, 67, 80, 84, + 75, 85, 94, 101, 103, 70, 66, 15, 69, 75, 67, + 64, 3, 79, 73, 67, 67, 87, 74, 81, 0, 10, 87, + 73, 6, 78, 2, 75, 67, 20, 78, 81, 64, 5, 88, 86, + 119, 11, 17, 26, 0, 70, 65, 79, 79, 78, 91, 90, + 89, 107, 99, 90, 108, 110, 115, 126, 107, 104, + 97, 78, 85, 6, 23, 3, 22, 41, 79, 82, 87, 85, + 107, 98, 92, 115, 96, 107, 102, 120, 114, 112, + 112, 83, 80, 114, 85, 87, 99, 111, 105, 106, + 107, 102, 111, 109, 112, 117, 125, 118, 75, 83, + 100, 67, 13, 9, 20, 21, 25, 46, 30, 40, 41, 60, + 49, 44, 62, 59, 39, 67, 87, 107, 118, 126, 126, + 126, 126, 15, 49, 42, 42, 30, 43, 21, 16, 21, + 11, 70, 0, 16, 3, 33, 43, 1, 10, 19, 23, 5, 21, + 39, 4, 64, 15, 82, 107, 126, 126, 126, 126, 126, + 126 }, + + { + + 18, + 3, 83, 18, 3, 83, 20, 28, 28, 12, 72, 102, 71, + 0, 51, 14, 56, 72, 24, 31, 65, 85, 2, 101, 118, + 70, 87, 126, 126, 126, 62, 19, 70, 24, 31, 65, + 68, 19, 20, 72, 3, 0, 0, 73, 88, 71, 94, 5, 67, + 64, 69, 81, 72, 88, 17, 4, 1, 65, 12, 2, 22, 0, + 0, 0, 7, 98, 97, 12, 80, 71, 18, 66, 87, 18, 49, + 37, 62, 62, 29, 28, 19, 35, 15, 9, 23, 71, 74, + 75, 69, 26, 1, 9, 66, 65, 65, 0, 6, 69, 78, 77, + 87, 18, 68, 6, 64, 79, 3, 72, 7, 3, 65, 4, 10, + 3, 69, 66, 5, 67, 0, 70, 68, 76, 64, 68, 79, 3, + 68, 75, 0, 11, 67, 85, 76, 79, 80, 4, 68, 8, 7, + 7, 39, 18, 4, 69, 12, 69, 81, 0, 107, 73, 64, + 90, 71, 87, 4, 64, 81, 18, 7, 4, 99, 4, 85, 75, + 3, 96, 2, 17, 10, 14, 17, 13, 6, 16, 12, 68, 64, + 9, 0, 64, 75, 69, 75, 74, 70, 73, 78, 78, 77, + 79, 76, 69, 91, 97, 81, 82, 83, 87, 88, 96, 101, + 96, 96, 105, 112, 105, 108, 126, 118, 121, 70, + 74, 94, 78, 86, 89, 95, 103, 107, 97, 101, 96, + 86, 91, 91, 83, 81, 5, 25, 18, 11, 8, 10, 5, 0, + 5, 12, 13, 30, 21, 15, 8, 22, 13, 16, 9, 34, 2, + 43, 30, 22, 14, 26, 5, 64, 65, 3, 70, 46, 17, 0, + 1, 11, 0, 72, 64, 5, 34, 19, 3, 66, 17, 5, 2, 2, + 2, 62, 67, 5, 6, 12, 7, 7, 19, 20, 14, 19, 24, + 29, 66, 4, 76, 66, 35, 71, 94, 68, 8, 67, 81, + 85, 76, 86, 95, 103, 105, 71, 67, 15, 70, 76, + 68, 65, 2, 80, 74, 68, 68, 88, 75, 82, 0, 10, + 88, 74, 5, 79, 1, 76, 68, 20, 79, 83, 65, 4, 89, + 87, 121, 10, 16, 25, 65, 72, 67, 81, 81, 81, 94, + 93, 92, 110, 102, 92, 111, 114, 118, 126, 110, + 107, 99, 80, 87, 6, 23, 3, 23, 43, 81, 84, 89, + 87, 110, 100, 94, 118, 98, 109, 104, 122, 116, + 113, 113, 84, 81, 116, 87, 89, 101, 113, 107, + 108, 109, 104, 113, 111, 114, 119, 126, 119, 76, + 84, 101, 67, 13, 9, 20, 21, 25, 47, 30, 41, 41, + 61, 50, 45, 62, 60, 38, 69, 90, 110, 121, 126, + 126, 126, 126, 15, 49, 42, 42, 30, 43, 21, 16, + 21, 11, 70, 0, 16, 3, 34, 44, 1, 10, 19, 23, 5, + 21, 39, 4, 65, 13, 85, 110, 126, 126, 126, 126, + 126, 126 }, + + { + + 17, + 3, 83, 17, 3, 83, 22, 30, 29, 13, 72, 103, 72, + 64, 51, 14, 59, 72, 25, 32, 65, 85, 3, 102, 119, + 70, 88, 126, 126, 126, 62, 21, 70, 25, 32, 65, + 67, 21, 21, 72, 4, 1, 1, 73, 88, 70, 94, 5, 66, + 0, 69, 81, 71, 88, 18, 5, 2, 64, 13, 2, 22, 0, + 0, 0, 8, 98, 97, 13, 80, 71, 18, 65, 86, 20, 51, + 39, 62, 62, 31, 29, 21, 37, 17, 10, 25, 70, 73, + 74, 68, 27, 2, 10, 65, 64, 64, 1, 8, 69, 78, 77, + 87, 19, 68, 7, 0, 78, 4, 71, 8, 3, 65, 5, 10, 3, + 68, 66, 6, 67, 0, 69, 68, 76, 64, 68, 80, 3, 68, + 75, 1, 12, 66, 85, 76, 78, 80, 4, 68, 9, 7, 7, + 40, 19, 5, 69, 13, 69, 81, 0, 107, 73, 64, 90, + 71, 88, 4, 64, 81, 19, 8, 4, 100, 4, 85, 74, 3, + 96, 2, 17, 10, 14, 17, 13, 6, 16, 12, 68, 64, 9, + 0, 64, 75, 69, 75, 74, 70, 73, 78, 78, 77, 78, + 76, 68, 91, 98, 80, 83, 84, 88, 89, 98, 103, 97, + 97, 107, 113, 106, 109, 126, 119, 122, 70, 74, + 94, 79, 87, 90, 96, 104, 108, 98, 102, 96, 86, + 91, 90, 82, 80, 6, 26, 18, 11, 9, 11, 6, 1, 6, + 14, 14, 30, 21, 15, 8, 23, 14, 17, 10, 36, 2, + 44, 31, 22, 14, 27, 5, 64, 64, 4, 70, 47, 17, 0, + 1, 12, 1, 71, 0, 5, 34, 19, 3, 66, 17, 5, 3, 3, + 3, 62, 66, 6, 7, 14, 9, 8, 21, 22, 16, 21, 26, + 31, 65, 5, 75, 65, 37, 70, 94, 67, 9, 66, 81, + 85, 76, 86, 95, 104, 106, 71, 67, 16, 70, 76, + 68, 65, 2, 80, 74, 68, 68, 88, 75, 82, 1, 11, + 88, 74, 5, 79, 1, 76, 68, 21, 79, 84, 65, 4, 89, + 87, 122, 10, 16, 25, 66, 73, 68, 83, 83, 83, 96, + 95, 94, 112, 104, 93, 113, 117, 121, 126, 112, + 109, 100, 81, 88, 6, 24, 4, 25, 46, 82, 85, 90, + 88, 112, 101, 95, 120, 99, 110, 105, 123, 117, + 114, 113, 84, 81, 117, 88, 90, 102, 114, 108, + 109, 110, 105, 114, 112, 115, 120, 126, 119, 76, + 84, 101, 66, 14, 10, 21, 22, 26, 49, 31, 42, 42, + 62, 52, 46, 62, 62, 38, 70, 92, 112, 123, 126, + 126, 126, 126, 16, 50, 43, 43, 31, 44, 22, 17, + 22, 12, 69, 1, 17, 4, 36, 46, 2, 11, 20, 24, 6, + 22, 40, 4, 65, 12, 87, 112, 126, 126, 126, 126, + 126, 126 }, + + { + + 16, + 3, 83, 16, 3, 83, 24, 31, 29, 13, 72, 104, 73, + 65, 51, 14, 61, 72, 26, 33, 65, 86, 3, 103, 120, + 71, 90, 126, 126, 126, 62, 22, 70, 26, 33, 65, + 67, 22, 21, 73, 4, 1, 2, 73, 88, 70, 94, 5, 66, + 1, 69, 81, 71, 88, 18, 5, 2, 64, 13, 2, 22, 0, + 0, 0, 9, 98, 97, 13, 81, 71, 18, 65, 86, 22, 53, + 41, 62, 62, 32, 30, 22, 38, 18, 11, 27, 70, 73, + 74, 67, 27, 2, 10, 64, 64, 0, 1, 9, 69, 78, 77, + 87, 19, 68, 7, 0, 78, 4, 71, 8, 3, 65, 5, 10, 3, + 68, 66, 6, 67, 0, 69, 69, 76, 64, 69, 81, 2, 69, + 76, 2, 12, 66, 86, 77, 78, 81, 4, 68, 9, 7, 7, + 41, 19, 5, 69, 13, 69, 82, 0, 108, 73, 64, 91, + 71, 89, 4, 64, 82, 19, 8, 4, 101, 4, 86, 74, 3, + 97, 1, 17, 10, 14, 17, 13, 6, 16, 12, 68, 64, 9, + 0, 64, 75, 69, 75, 74, 70, 73, 79, 79, 78, 78, + 76, 68, 92, 99, 80, 85, 86, 90, 91, 100, 105, + 99, 99, 109, 115, 108, 111, 126, 121, 123, 70, + 74, 95, 80, 88, 91, 97, 106, 109, 99, 103, 97, + 87, 92, 90, 82, 79, 6, 26, 18, 11, 9, 11, 6, 1, + 6, 15, 15, 30, 21, 15, 8, 23, 14, 18, 11, 38, 2, + 44, 31, 22, 14, 27, 5, 64, 64, 5, 70, 47, 17, 0, + 1, 12, 1, 71, 1, 5, 33, 18, 2, 67, 17, 5, 3, 3, + 3, 62, 65, 7, 8, 15, 10, 9, 22, 23, 17, 22, 27, + 33, 64, 6, 75, 64, 38, 70, 95, 67, 10, 66, 81, + 86, 76, 87, 96, 105, 107, 72, 67, 16, 70, 77, + 69, 65, 2, 81, 75, 68, 68, 89, 75, 82, 1, 11, + 88, 75, 4, 80, 1, 77, 69, 21, 80, 85, 65, 4, 90, + 88, 124, 9, 15, 24, 67, 74, 69, 85, 85, 85, 98, + 98, 97, 115, 106, 94, 116, 120, 124, 126, 115, + 111, 102, 82, 89, 6, 25, 4, 26, 48, 84, 87, 92, + 90, 114, 103, 97, 122, 100, 112, 106, 125, 118, + 115, 114, 85, 81, 118, 89, 91, 104, 116, 110, + 111, 111, 107, 116, 113, 116, 121, 126, 120, 77, + 85, 102, 66, 14, 10, 22, 22, 27, 50, 32, 43, 43, + 62, 53, 47, 62, 62, 37, 72, 94, 114, 126, 126, + 126, 126, 126, 16, 50, 43, 43, 31, 45, 22, 17, + 22, 12, 69, 1, 18, 4, 37, 47, 2, 12, 21, 25, 6, + 22, 41, 4, 65, 11, 89, 114, 126, 126, 126, 126, + 126, 126 }, + + { + + 15, + 3, 83, 15, 3, 83, 26, 33, 30, 13, 73, 106, 75, + 66, 51, 14, 62, 72, 27, 34, 65, 87, 3, 104, 121, + 71, 92, 126, 126, 126, 62, 23, 70, 27, 34, 65, + 66, 23, 22, 73, 4, 2, 3, 74, 89, 70, 94, 5, 66, + 1, 69, 81, 71, 88, 19, 5, 2, 64, 14, 2, 22, 0, + 0, 0, 9, 98, 97, 14, 82, 71, 18, 65, 86, 24, 55, + 42, 62, 62, 33, 31, 24, 39, 19, 12, 29, 69, 73, + 73, 66, 27, 2, 10, 64, 64, 0, 2, 11, 69, 79, 78, + 88, 19, 68, 7, 1, 78, 5, 71, 9, 3, 65, 5, 10, 2, + 68, 66, 6, 67, 0, 69, 70, 76, 64, 70, 82, 1, 70, + 77, 2, 13, 66, 87, 77, 77, 81, 4, 68, 9, 7, 7, + 42, 19, 5, 69, 14, 69, 83, 0, 109, 73, 64, 91, + 72, 90, 4, 64, 83, 19, 8, 4, 103, 4, 87, 74, 3, + 97, 0, 17, 10, 14, 17, 13, 6, 16, 12, 68, 65, 9, + 0, 64, 75, 70, 76, 75, 71, 74, 80, 80, 78, 78, + 77, 68, 93, 101, 80, 86, 88, 92, 93, 102, 107, + 101, 101, 111, 117, 109, 112, 126, 123, 124, 70, + 74, 95, 81, 89, 92, 99, 107, 111, 100, 104, 98, + 87, 92, 90, 82, 79, 7, 26, 18, 11, 9, 11, 6, 1, + 7, 16, 15, 30, 21, 15, 8, 24, 15, 19, 12, 40, 2, + 44, 31, 22, 14, 28, 5, 64, 64, 5, 70, 47, 17, + 64, 1, 12, 1, 71, 2, 5, 33, 18, 1, 68, 17, 5, 3, + 4, 4, 62, 64, 8, 8, 16, 11, 10, 24, 24, 18, 23, + 29, 34, 64, 7, 75, 64, 40, 70, 95, 67, 10, 66, + 82, 86, 76, 88, 97, 106, 108, 72, 68, 16, 71, + 77, 69, 66, 2, 82, 75, 69, 68, 90, 75, 83, 1, + 11, 89, 75, 4, 81, 1, 78, 69, 21, 81, 86, 66, 3, + 91, 88, 125, 8, 14, 24, 68, 75, 71, 87, 87, 87, + 101, 100, 99, 118, 109, 95, 119, 123, 126, 126, + 118, 114, 104, 83, 90, 6, 26, 4, 27, 50, 86, 89, + 94, 92, 116, 105, 98, 124, 102, 113, 107, 126, + 120, 116, 115, 85, 82, 119, 90, 93, 105, 118, + 112, 113, 113, 108, 118, 115, 117, 123, 126, + 121, 78, 86, 103, 66, 15, 10, 22, 23, 27, 51, + 33, 44, 44, 62, 54, 48, 62, 62, 37, 73, 96, 117, + 126, 126, 126, 126, 126, 17, 51, 44, 44, 31, 46, + 23, 17, 23, 13, 69, 2, 18, 5, 38, 48, 2, 12, 21, + 25, 6, 23, 42, 4, 65, 10, 91, 117, 126, 126, + 126, 126, 126, 126 }, + + }, + + { + + { + + 62, + 9, 74, 62, 9, 74, 126, 104, 10, 9, 12, 38, 62, + 62, 54, 22, 118, 65, 71, 79, 11, 13, 70, 9, 29, + 41, 62, 61, 27, 69, 126, 101, 76, 71, 79, 11, + 69, 90, 11, 20, 69, 82, 96, 4, 75, 87, 100, 7, + 74, 85, 4, 81, 86, 95, 66, 77, 70, 86, 72, 2, + 22, 0, 0, 0, 83, 86, 97, 72, 22, 1, 48, 12, 80, + 126, 91, 96, 81, 98, 102, 97, 119, 99, 110, 102, + 126, 80, 89, 94, 92, 24, 65, 84, 126, 73, 104, + 91, 126, 8, 7, 8, 2, 10, 68, 74, 88, 103, 91, + 89, 92, 76, 87, 110, 105, 78, 112, 99, 126, 126, + 126, 126, 66, 78, 71, 72, 4, 8, 70, 75, 89, 119, + 75, 43, 41, 126, 9, 2, 5, 3, 2, 67, 84, 74, 65, + 11, 6, 2, 69, 70, 8, 71, 5, 2, 22, 38, 31, 20, + 16, 19, 12, 17, 25, 66, 25, 21, 29, 89, 18, 35, + 32, 62, 62, 48, 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 53, 62, 62, 62, 62, 62, 62, 62, 56, 62, + 62, 62, 27, 62, 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 53, 45, 38, 22, 75, 72, 77, 28, 32, 28, + 33, 18, 21, 18, 37, 9, 66, 7, 73, 67, 116, 112, + 71, 2, 10, 66, 77, 80, 84, 87, 126, 101, 24, 10, + 2, 75, 77, 91, 107, 111, 122, 76, 19, 11, 6, 5, + 72, 69, 69, 74, 86, 66, 29, 31, 32, 11, 8, 67, + 73, 89, 11, 59, 55, 55, 44, 26, 2, 73, 70, 78, + 62, 126, 124, 110, 126, 124, 105, 121, 117, 102, + 117, 116, 122, 95, 100, 95, 111, 114, 89, 80, + 82, 85, 81, 72, 64, 67, 7, 69, 69, 69, 69, 67, + 77, 64, 2, 67, 64, 6, 65, 66, 1, 12, 66, 71, 75, + 70, 72, 3, 26, 16, 28, 26, 22, 22, 15, 22, 22, + 4, 13, 23, 66, 13, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 54, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 49, 37, 26, 8, 65, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 43, 33, + 19, 15, 14, 18, 41, 41, 42, 43, 35, 39, 29, 21, + 24, 13, 70, 9, 71, 83, 31, 14, 9, 85, 81, 77, + 81, 80, 73, 74, 83, 71, 67, 2, 66, 66, 4, 4, 62, + 62, 62, 62, 62, 60, 53, 36, 6, 71, 39, 27, 21, + 11, 6, 0, 65, 67, 82, 81, 76, 72, 78, 72, 68, + 70, 76, 66, 1, 6, 2, 3, 9, 5, 62, 62, 62, 62, + 62, 60, 53, 36, 6 }, + + { + + 62, + 9, 74, 62, 9, 74, 125, 102, 11, 10, 12, 37, + 61, 62, 55, 22, 116, 65, 70, 78, 11, 13, 69, + 9, 28, 40, 61, 58, 25, 70, 124, 100, 75, 70, + 78, 11, 69, 89, 11, 20, 68, 81, 95, 4, 75, 86, + 99, 7, 73, 84, 4, 80, 85, 94, 65, 76, 70, 85, + 71, 2, 22, 0, 0, 0, 82, 86, 97, 71, 22, 1, 48, + 12, 80, 124, 89, 94, 79, 95, 100, 95, 117, 97, + 108, 100, 124, 80, 88, 93, 91, 24, 65, 83, + 124, 72, 103, 90, 125, 8, 7, 8, 2, 11, 68, 73, + 87, 102, 90, 88, 91, 75, 86, 108, 103, 77, + 110, 97, 122, 122, 123, 124, 65, 77, 70, 71, + 4, 9, 69, 74, 88, 116, 74, 41, 40, 124, 9, 3, + 5, 4, 3, 66, 82, 73, 64, 11, 6, 2, 68, 69, 7, + 70, 5, 2, 22, 37, 31, 20, 16, 19, 12, 17, 24, + 65, 25, 21, 29, 89, 18, 35, 32, 62, 62, 47, + 62, 62, 62, 61, 62, 62, 62, 62, 62, 62, 52, + 62, 62, 62, 62, 62, 62, 62, 54, 62, 60, 62, + 26, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, + 61, 52, 44, 37, 21, 75, 72, 77, 28, 31, 27, + 32, 17, 20, 17, 36, 8, 66, 6, 73, 67, 115, + 110, 70, 3, 10, 65, 76, 79, 83, 86, 124, 99, + 25, 11, 3, 74, 76, 89, 105, 109, 120, 75, 20, + 12, 7, 6, 71, 68, 68, 73, 85, 66, 30, 31, 32, + 11, 9, 66, 73, 88, 11, 59, 55, 54, 43, 26, 3, + 72, 69, 77, 62, 124, 122, 108, 124, 122, 103, + 119, 115, 100, 115, 114, 119, 94, 99, 94, 109, + 112, 88, 79, 81, 84, 80, 71, 64, 67, 7, 69, + 69, 69, 68, 66, 76, 0, 2, 66, 0, 6, 64, 65, 1, + 12, 65, 70, 74, 69, 71, 3, 25, 16, 27, 26, 22, + 22, 15, 22, 22, 4, 13, 22, 66, 12, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, + 52, 62, 62, 62, 62, 62, 62, 62, 61, 62, 48, + 36, 25, 8, 65, 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 42, 32, 18, 15, 14, 17, 40, + 40, 41, 41, 34, 38, 28, 20, 23, 12, 70, 8, 71, + 83, 30, 13, 8, 84, 80, 76, 80, 78, 71, 73, 82, + 70, 66, 3, 65, 65, 4, 4, 62, 62, 62, 62, 60, + 56, 49, 32, 4, 70, 39, 28, 22, 12, 7, 1, 64, + 66, 81, 80, 75, 71, 77, 71, 67, 69, 75, 65, 2, + 6, 3, 4, 9, 5, 62, 62, 62, 62, 60, 56, 49, 32, + 4 }, + + { + + 62, + 9, 74, 62, 9, 74, 123, 101, 11, 10, 12, 36, + 59, 61, 55, 22, 114, 65, 70, 77, 11, 12, 69, + 8, 26, 39, 58, 54, 22, 72, 121, 99, 75, 70, + 77, 11, 69, 88, 11, 19, 68, 81, 94, 4, 75, 86, + 99, 7, 73, 84, 4, 80, 85, 94, 65, 76, 70, 85, + 71, 2, 22, 0, 0, 0, 81, 86, 97, 71, 21, 1, 47, + 12, 80, 122, 88, 93, 77, 93, 99, 94, 115, 96, + 107, 99, 122, 80, 88, 93, 91, 24, 65, 82, 122, + 72, 102, 89, 123, 8, 7, 8, 1, 11, 68, 73, 86, + 101, 89, 87, 90, 75, 85, 107, 102, 76, 109, + 96, 117, 118, 120, 121, 65, 77, 70, 71, 4, 9, + 69, 74, 88, 114, 74, 39, 38, 121, 9, 3, 5, 4, + 3, 66, 80, 72, 64, 11, 6, 2, 67, 68, 6, 70, 5, + 2, 21, 36, 30, 20, 15, 19, 12, 17, 23, 65, 24, + 20, 28, 89, 18, 34, 31, 62, 62, 46, 60, 62, + 62, 59, 62, 62, 62, 62, 62, 62, 50, 62, 62, + 62, 62, 62, 62, 62, 52, 62, 58, 62, 24, 62, + 62, 62, 62, 62, 62, 62, 62, 62, 62, 59, 50, + 42, 35, 19, 75, 72, 78, 27, 30, 26, 31, 16, + 19, 16, 34, 7, 66, 5, 74, 68, 114, 109, 69, 3, + 10, 65, 75, 78, 82, 85, 122, 98, 25, 11, 3, + 73, 75, 88, 103, 107, 118, 74, 21, 13, 8, 7, + 70, 68, 68, 73, 84, 66, 31, 31, 31, 11, 9, 66, + 73, 88, 11, 59, 54, 53, 42, 26, 3, 72, 69, 77, + 62, 123, 121, 107, 122, 120, 102, 117, 113, + 99, 113, 112, 117, 93, 98, 94, 108, 110, 88, + 79, 81, 83, 80, 71, 64, 67, 6, 69, 69, 69, 68, + 66, 75, 0, 2, 66, 0, 6, 64, 65, 1, 11, 65, 70, + 74, 69, 70, 2, 24, 16, 26, 25, 21, 21, 15, 21, + 21, 4, 13, 21, 66, 11, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, 50, 62, 62, + 62, 62, 62, 62, 62, 59, 59, 46, 34, 24, 7, 66, + 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, + 62, 40, 30, 16, 14, 13, 15, 39, 39, 39, 39, + 32, 36, 26, 19, 21, 11, 71, 7, 72, 84, 28, 12, + 7, 84, 80, 75, 80, 77, 70, 73, 81, 69, 65, 3, + 65, 64, 4, 4, 62, 62, 62, 62, 57, 52, 45, 28, + 1, 70, 39, 28, 22, 12, 8, 1, 64, 66, 81, 80, + 75, 71, 77, 70, 66, 69, 75, 65, 2, 6, 3, 5, 9, + 5, 62, 62, 62, 62, 57, 52, 45, 28, 1 }, + + { + + 62, + 9, 74, 62, 9, 74, 121, 99, 12, 10, 11, 34, 57, + 60, 55, 22, 112, 65, 69, 76, 11, 12, 69, 8, + 25, 38, 56, 51, 20, 73, 118, 98, 75, 69, 76, + 11, 70, 87, 11, 19, 68, 81, 94, 4, 75, 86, 99, + 7, 73, 83, 4, 80, 84, 94, 65, 76, 70, 85, 71, + 2, 22, 0, 0, 0, 81, 86, 97, 70, 20, 1, 46, 11, + 80, 119, 87, 92, 76, 91, 97, 92, 113, 94, 106, + 98, 120, 80, 88, 92, 91, 24, 65, 81, 120, 72, + 101, 89, 121, 8, 6, 7, 1, 11, 68, 72, 86, 100, + 88, 87, 89, 74, 84, 105, 100, 76, 108, 95, + 112, 113, 117, 118, 65, 77, 70, 70, 4, 9, 68, + 73, 87, 112, 74, 37, 36, 118, 9, 3, 5, 4, 3, + 65, 79, 71, 64, 11, 6, 2, 67, 67, 5, 70, 5, 1, + 21, 35, 30, 20, 15, 19, 12, 17, 22, 65, 23, + 19, 28, 89, 18, 34, 31, 62, 62, 45, 58, 62, + 62, 57, 62, 62, 62, 62, 62, 61, 48, 62, 62, + 62, 62, 62, 62, 60, 50, 62, 56, 62, 22, 62, + 62, 62, 62, 62, 62, 62, 62, 62, 62, 57, 48, + 40, 34, 17, 75, 72, 78, 26, 29, 25, 30, 15, + 18, 15, 32, 6, 67, 4, 75, 68, 114, 107, 68, 4, + 10, 65, 74, 78, 82, 85, 120, 97, 25, 11, 4, + 72, 74, 87, 102, 106, 116, 73, 21, 13, 8, 7, + 69, 67, 68, 73, 84, 66, 31, 31, 30, 11, 9, 66, + 73, 87, 11, 58, 54, 52, 41, 26, 3, 72, 69, 77, + 62, 122, 119, 106, 121, 119, 101, 115, 111, + 98, 112, 110, 115, 93, 97, 93, 107, 108, 87, + 79, 81, 83, 79, 71, 64, 67, 6, 69, 69, 70, 67, + 65, 74, 0, 2, 65, 0, 6, 64, 65, 1, 11, 65, 70, + 74, 69, 70, 1, 23, 16, 25, 24, 20, 21, 15, 20, + 20, 4, 13, 20, 66, 10, 62, 62, 61, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, 48, 62, 62, + 62, 62, 62, 62, 62, 57, 57, 44, 32, 22, 6, 67, + 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 59, + 60, 38, 28, 15, 13, 12, 14, 37, 37, 37, 37, + 31, 34, 24, 18, 20, 10, 72, 6, 73, 85, 27, 11, + 6, 84, 79, 75, 79, 76, 69, 73, 81, 69, 65, 3, + 64, 0, 4, 4, 62, 62, 62, 59, 54, 48, 41, 24, + 65, 70, 39, 28, 22, 12, 8, 2, 64, 66, 80, 80, + 75, 70, 76, 69, 65, 69, 74, 65, 2, 6, 3, 5, 9, + 5, 62, 62, 62, 59, 54, 48, 41, 24, 65 }, + + { + + 62, + 9, 74, 62, 9, 74, 120, 98, 12, 10, 11, 33, 55, + 59, 55, 21, 110, 65, 69, 75, 10, 11, 69, 7, + 23, 37, 53, 47, 17, 75, 115, 97, 75, 69, 75, + 10, 70, 86, 11, 18, 68, 80, 93, 4, 75, 86, 99, + 7, 73, 83, 4, 80, 84, 93, 65, 76, 70, 85, 70, + 2, 22, 0, 0, 0, 80, 87, 97, 70, 19, 1, 45, 11, + 80, 117, 86, 91, 74, 89, 96, 91, 112, 93, 104, + 97, 118, 80, 87, 92, 91, 24, 65, 80, 118, 72, + 101, 88, 119, 8, 6, 7, 0, 11, 68, 72, 85, 99, + 87, 86, 88, 74, 84, 104, 99, 75, 107, 94, 107, + 109, 114, 115, 65, 76, 70, 70, 4, 9, 68, 73, + 87, 110, 74, 35, 34, 116, 9, 4, 5, 4, 3, 65, + 77, 70, 0, 10, 6, 2, 66, 67, 4, 70, 5, 1, 20, + 34, 29, 19, 14, 19, 12, 17, 21, 65, 22, 18, + 27, 89, 17, 33, 30, 62, 62, 44, 56, 62, 62, + 55, 62, 62, 62, 62, 62, 59, 46, 59, 62, 62, + 62, 62, 62, 57, 48, 62, 54, 62, 21, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 60, 55, 46, 38, + 32, 15, 75, 72, 79, 25, 28, 24, 28, 14, 16, + 14, 31, 5, 67, 3, 75, 69, 113, 106, 67, 4, 10, + 64, 74, 77, 81, 84, 118, 95, 25, 12, 4, 72, + 73, 86, 100, 104, 115, 73, 22, 14, 9, 8, 68, + 67, 68, 72, 83, 66, 32, 31, 30, 10, 9, 66, 73, + 87, 11, 58, 53, 51, 40, 26, 3, 71, 69, 77, 62, + 120, 118, 105, 119, 117, 100, 114, 110, 97, + 110, 109, 113, 92, 96, 93, 106, 107, 87, 79, + 81, 82, 79, 71, 65, 67, 5, 69, 69, 70, 67, 65, + 73, 0, 2, 65, 0, 6, 64, 65, 1, 10, 65, 70, 74, + 69, 69, 0, 22, 16, 24, 24, 19, 20, 15, 19, 19, + 4, 13, 19, 66, 9, 62, 62, 60, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 46, 62, 62, 62, + 62, 62, 62, 62, 54, 54, 42, 30, 21, 5, 67, 62, + 62, 62, 62, 62, 62, 62, 62, 62, 62, 57, 57, + 36, 26, 13, 12, 12, 12, 36, 36, 36, 35, 29, + 32, 23, 17, 18, 9, 73, 4, 74, 85, 25, 9, 4, + 83, 79, 74, 79, 75, 68, 73, 80, 68, 64, 3, 64, + 1, 4, 4, 62, 62, 62, 56, 50, 44, 36, 20, 68, + 69, 39, 28, 22, 12, 9, 2, 64, 66, 80, 80, 75, + 70, 76, 69, 64, 69, 74, 64, 3, 6, 3, 6, 9, 5, + 62, 62, 62, 56, 50, 44, 36, 20, 68 }, + + { + + 62, + 9, 74, 62, 9, 74, 118, 96, 12, 10, 10, 32, 53, + 58, 55, 21, 108, 65, 69, 74, 10, 11, 69, 6, + 21, 36, 51, 44, 15, 77, 112, 96, 74, 69, 74, + 10, 70, 85, 11, 18, 68, 80, 92, 4, 75, 86, 99, + 7, 73, 83, 4, 80, 83, 93, 65, 76, 70, 85, 70, + 2, 22, 0, 0, 0, 80, 87, 97, 69, 18, 1, 44, 10, + 80, 114, 85, 90, 72, 87, 94, 89, 110, 91, 103, + 96, 115, 80, 87, 91, 90, 24, 65, 79, 116, 72, + 100, 88, 117, 8, 5, 6, 0, 11, 68, 71, 85, 98, + 86, 86, 87, 73, 83, 102, 97, 74, 105, 93, 102, + 105, 111, 112, 64, 76, 69, 69, 4, 9, 67, 73, + 86, 108, 74, 33, 32, 113, 9, 4, 5, 4, 3, 64, + 76, 69, 0, 10, 6, 2, 66, 66, 3, 69, 5, 0, 20, + 33, 29, 19, 14, 19, 12, 17, 20, 64, 21, 18, + 27, 89, 17, 32, 29, 62, 62, 43, 55, 62, 62, + 53, 62, 62, 62, 62, 61, 57, 44, 57, 62, 60, + 62, 62, 62, 55, 46, 62, 52, 62, 19, 62, 62, + 62, 62, 62, 62, 62, 62, 61, 58, 53, 44, 37, + 30, 13, 75, 72, 79, 24, 27, 23, 27, 13, 15, + 13, 29, 4, 68, 2, 76, 70, 112, 104, 66, 5, 10, + 64, 73, 77, 81, 83, 116, 94, 25, 12, 5, 71, + 72, 85, 99, 103, 113, 72, 23, 15, 10, 8, 67, + 66, 67, 72, 83, 66, 32, 31, 29, 10, 9, 66, 73, + 86, 11, 57, 52, 50, 39, 26, 3, 71, 69, 76, 62, + 119, 116, 103, 117, 116, 99, 112, 108, 96, + 108, 107, 111, 91, 95, 92, 105, 105, 87, 79, + 80, 82, 78, 71, 65, 67, 5, 69, 69, 71, 66, 65, + 72, 0, 2, 65, 0, 6, 64, 65, 1, 10, 65, 70, 74, + 69, 69, 64, 21, 16, 23, 23, 19, 19, 15, 19, + 18, 4, 13, 18, 66, 8, 62, 62, 59, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, 44, 62, 62, + 62, 62, 62, 62, 61, 52, 52, 40, 29, 19, 5, 68, + 62, 62, 62, 62, 62, 62, 62, 62, 62, 61, 55, + 54, 34, 24, 12, 12, 11, 10, 35, 34, 34, 33, + 27, 30, 21, 16, 17, 8, 73, 3, 75, 86, 24, 8, + 3, 83, 79, 73, 78, 74, 67, 72, 79, 68, 64, 3, + 0, 2, 4, 4, 62, 62, 59, 53, 47, 40, 32, 16, + 71, 69, 39, 28, 22, 12, 9, 2, 0, 65, 79, 80, + 75, 69, 76, 68, 0, 69, 74, 64, 3, 6, 4, 6, 9, + 5, 62, 62, 59, 53, 47, 40, 32, 16, 71 }, + + { + + 62, + 9, 75, 62, 9, 75, 116, 95, 13, 10, 10, 30, 51, + 57, 55, 21, 107, 65, 68, 74, 10, 10, 68, 6, + 20, 34, 48, 40, 12, 78, 110, 95, 74, 68, 74, + 10, 71, 85, 11, 17, 68, 80, 92, 4, 75, 85, 98, + 7, 72, 82, 4, 79, 83, 93, 65, 76, 70, 85, 70, + 2, 22, 0, 0, 0, 79, 87, 97, 69, 18, 0, 44, 10, + 80, 112, 84, 89, 71, 84, 93, 88, 108, 90, 102, + 95, 113, 80, 87, 91, 90, 24, 65, 78, 113, 72, + 99, 87, 115, 7, 5, 6, 64, 12, 68, 71, 84, 98, + 86, 85, 86, 73, 82, 101, 96, 74, 104, 92, 97, + 100, 108, 109, 64, 76, 69, 69, 4, 9, 67, 72, + 86, 106, 73, 31, 30, 110, 9, 4, 5, 4, 4, 64, + 74, 68, 0, 10, 6, 2, 65, 65, 2, 69, 5, 0, 19, + 32, 28, 19, 13, 19, 12, 17, 18, 64, 20, 17, + 26, 89, 17, 32, 29, 62, 62, 42, 53, 62, 62, + 51, 62, 62, 62, 62, 57, 55, 43, 55, 62, 58, + 62, 62, 62, 52, 44, 62, 50, 62, 17, 62, 62, + 62, 62, 62, 62, 62, 62, 59, 56, 50, 42, 35, + 29, 12, 75, 72, 80, 23, 26, 22, 26, 12, 14, + 12, 27, 3, 68, 1, 77, 70, 112, 103, 65, 5, 10, + 64, 72, 76, 80, 83, 114, 93, 26, 12, 5, 70, + 71, 84, 97, 101, 111, 71, 23, 15, 10, 9, 66, + 66, 67, 72, 82, 66, 33, 31, 28, 10, 9, 66, 73, + 86, 10, 57, 52, 49, 38, 25, 3, 71, 69, 76, 62, + 118, 115, 102, 116, 114, 98, 110, 106, 95, + 107, 105, 109, 91, 94, 92, 104, 103, 86, 79, + 80, 81, 78, 71, 65, 67, 4, 69, 69, 71, 66, 64, + 71, 0, 2, 64, 1, 6, 0, 64, 1, 9, 65, 70, 74, + 69, 68, 65, 20, 16, 22, 22, 18, 19, 15, 18, + 18, 4, 12, 16, 67, 7, 62, 62, 58, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, 42, 62, 62, + 62, 62, 62, 62, 58, 50, 49, 38, 27, 18, 4, 69, + 62, 62, 62, 62, 62, 62, 62, 62, 61, 58, 52, + 51, 32, 23, 10, 11, 10, 9, 33, 33, 32, 31, 26, + 28, 19, 15, 15, 7, 74, 2, 76, 87, 22, 7, 2, + 83, 78, 73, 78, 73, 66, 72, 79, 67, 0, 3, 0, + 3, 4, 4, 62, 62, 57, 50, 44, 36, 28, 12, 74, + 69, 39, 28, 22, 12, 10, 3, 0, 65, 79, 79, 74, + 69, 75, 67, 1, 68, 73, 64, 3, 6, 4, 7, 9, 5, + 62, 62, 57, 50, 44, 36, 28, 12, 74 }, + + { + + 62, + 9, 75, 62, 9, 75, 114, 93, 13, 10, 9, 29, 49, + 56, 55, 21, 105, 65, 68, 73, 9, 10, 68, 5, 18, + 33, 46, 37, 10, 80, 107, 94, 74, 68, 73, 9, + 71, 84, 11, 17, 68, 79, 91, 4, 75, 85, 98, 7, + 72, 82, 4, 79, 82, 92, 65, 76, 70, 85, 69, 2, + 22, 0, 0, 0, 79, 87, 97, 68, 17, 0, 43, 9, 80, + 109, 83, 88, 69, 82, 91, 86, 107, 88, 100, 94, + 111, 80, 86, 90, 90, 24, 65, 77, 111, 72, 98, + 87, 113, 7, 4, 5, 64, 12, 68, 70, 84, 97, 85, + 85, 85, 72, 81, 99, 94, 73, 103, 91, 92, 96, + 105, 106, 64, 75, 69, 68, 4, 9, 66, 72, 85, + 104, 73, 29, 28, 107, 9, 5, 5, 4, 4, 0, 73, + 67, 1, 9, 6, 2, 65, 65, 1, 69, 5, 64, 19, 31, + 28, 18, 13, 19, 12, 17, 17, 64, 19, 16, 26, + 89, 17, 31, 28, 60, 62, 41, 51, 62, 62, 49, + 62, 61, 62, 62, 54, 53, 41, 52, 62, 55, 62, + 62, 62, 49, 42, 62, 48, 62, 16, 62, 62, 62, + 62, 62, 62, 62, 62, 57, 53, 48, 40, 33, 27, + 10, 75, 72, 80, 22, 25, 21, 24, 11, 13, 11, + 26, 2, 69, 0, 77, 71, 111, 101, 64, 6, 10, 0, + 72, 76, 80, 82, 112, 91, 26, 13, 6, 70, 70, + 83, 96, 100, 109, 71, 24, 16, 11, 9, 65, 65, + 67, 71, 82, 66, 33, 31, 28, 9, 9, 66, 73, 85, + 10, 56, 51, 48, 37, 25, 3, 70, 69, 76, 62, + 116, 113, 101, 114, 113, 97, 109, 105, 94, + 105, 104, 107, 90, 93, 91, 103, 101, 86, 79, + 80, 81, 77, 71, 66, 67, 4, 69, 69, 72, 65, 64, + 70, 0, 2, 64, 1, 6, 0, 64, 1, 9, 65, 70, 74, + 69, 68, 66, 19, 16, 21, 22, 17, 18, 15, 17, + 17, 4, 12, 15, 67, 6, 61, 62, 57, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, 40, 62, 62, + 62, 62, 62, 62, 56, 48, 47, 36, 25, 16, 3, 69, + 62, 62, 62, 62, 62, 62, 62, 62, 59, 56, 50, + 48, 30, 21, 9, 10, 10, 7, 32, 31, 31, 29, 24, + 26, 18, 14, 14, 6, 75, 0, 77, 87, 21, 5, 0, + 82, 78, 72, 77, 72, 65, 72, 78, 67, 0, 3, 1, + 4, 4, 4, 62, 62, 54, 47, 40, 32, 24, 8, 77, + 68, 39, 28, 22, 12, 10, 3, 0, 65, 78, 79, 74, + 68, 75, 66, 2, 68, 73, 0, 4, 6, 4, 7, 9, 5, + 62, 62, 54, 47, 40, 32, 24, 8, 77 }, + + { + + 62, + 8, 75, 62, 8, 75, 113, 92, 13, 10, 9, 27, 46, + 55, 55, 20, 103, 66, 68, 72, 9, 9, 68, 4, 16, + 32, 43, 33, 7, 82, 104, 93, 74, 68, 72, 9, 72, + 83, 11, 16, 68, 79, 91, 3, 76, 85, 98, 7, 72, + 82, 4, 79, 82, 92, 65, 76, 70, 85, 69, 2, 22, + 0, 0, 0, 78, 88, 97, 68, 16, 0, 42, 9, 81, + 107, 82, 87, 68, 80, 90, 85, 105, 87, 99, 93, + 109, 80, 86, 90, 90, 24, 65, 76, 109, 72, 98, + 86, 111, 7, 4, 5, 65, 12, 68, 70, 83, 96, 84, + 84, 85, 72, 81, 98, 93, 73, 102, 90, 88, 92, + 102, 104, 64, 75, 69, 68, 3, 9, 66, 72, 85, + 102, 73, 27, 26, 105, 9, 5, 5, 4, 4, 0, 71, + 67, 1, 9, 5, 2, 64, 64, 64, 69, 5, 64, 18, 29, + 27, 18, 12, 19, 12, 16, 16, 64, 18, 15, 25, + 89, 16, 30, 27, 58, 62, 39, 49, 62, 62, 46, + 62, 59, 62, 62, 50, 51, 39, 50, 62, 53, 62, + 62, 62, 46, 40, 62, 46, 62, 14, 62, 62, 62, + 62, 62, 62, 62, 60, 55, 51, 46, 38, 31, 25, 8, + 75, 73, 81, 21, 23, 20, 23, 10, 11, 9, 24, 1, + 69, 64, 78, 72, 111, 100, 0, 6, 10, 0, 71, 75, + 79, 82, 110, 90, 26, 13, 6, 69, 69, 82, 94, + 98, 108, 70, 24, 16, 11, 10, 64, 65, 67, 71, + 81, 67, 34, 31, 27, 9, 9, 66, 73, 85, 10, 56, + 50, 47, 36, 25, 3, 70, 69, 76, 62, 115, 112, + 100, 113, 111, 96, 107, 103, 93, 104, 102, + 105, 90, 93, 91, 102, 100, 86, 79, 80, 80, 77, + 71, 66, 67, 3, 69, 69, 72, 65, 64, 69, 0, 1, + 64, 1, 5, 0, 64, 1, 8, 65, 70, 74, 69, 67, 67, + 18, 16, 19, 21, 16, 17, 14, 16, 16, 4, 12, 14, + 67, 4, 60, 60, 56, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 60, 38, 62, 62, 62, 62, 62, 62, + 53, 45, 44, 34, 23, 15, 2, 70, 62, 62, 62, 62, + 62, 62, 62, 62, 56, 53, 47, 45, 28, 19, 7, 9, + 9, 5, 30, 30, 29, 27, 22, 24, 16, 12, 12, 4, + 76, 64, 78, 88, 19, 4, 64, 82, 78, 72, 77, 71, + 64, 72, 78, 66, 1, 3, 1, 4, 4, 3, 62, 60, 51, + 44, 37, 28, 19, 3, 80, 68, 39, 28, 22, 12, 11, + 3, 0, 65, 78, 79, 74, 68, 75, 66, 2, 68, 73, + 0, 4, 6, 4, 8, 9, 4, 62, 60, 51, 44, 37, 28, + 19, 3, 80 }, + + { + + 62, + 8, 75, 62, 8, 75, 111, 91, 14, 10, 9, 26, 44, + 54, 56, 20, 101, 66, 67, 71, 9, 8, 68, 4, 15, + 31, 41, 29, 4, 83, 101, 92, 73, 67, 71, 9, 72, + 82, 11, 16, 67, 79, 90, 3, 76, 85, 98, 7, 72, + 81, 4, 79, 82, 92, 65, 76, 70, 84, 69, 2, 22, + 0, 0, 0, 77, 88, 97, 68, 15, 0, 41, 9, 81, + 105, 80, 86, 66, 78, 88, 84, 103, 85, 98, 91, + 106, 80, 86, 90, 89, 24, 65, 75, 107, 71, 97, + 85, 109, 7, 4, 5, 65, 12, 68, 70, 82, 95, 83, + 83, 84, 71, 80, 97, 91, 72, 100, 89, 83, 87, + 98, 101, 0, 75, 68, 67, 3, 9, 66, 71, 84, 99, + 73, 25, 25, 102, 9, 5, 5, 4, 4, 1, 69, 66, 1, + 9, 5, 2, 0, 0, 65, 68, 5, 64, 17, 28, 26, 18, + 11, 19, 12, 16, 15, 0, 17, 15, 24, 89, 16, 30, + 27, 56, 62, 38, 48, 62, 62, 44, 60, 57, 62, + 62, 47, 49, 37, 48, 62, 51, 62, 62, 62, 44, + 38, 62, 44, 62, 12, 62, 62, 62, 62, 62, 62, + 60, 58, 53, 49, 44, 37, 30, 24, 6, 75, 73, 81, + 21, 22, 19, 22, 9, 10, 8, 22, 0, 69, 65, 79, + 72, 110, 99, 1, 6, 10, 0, 70, 74, 78, 81, 107, + 89, 26, 13, 6, 68, 68, 81, 92, 96, 106, 69, + 25, 17, 12, 11, 0, 65, 66, 71, 80, 67, 35, 31, + 26, 9, 10, 65, 73, 84, 10, 56, 50, 46, 35, 25, + 3, 70, 69, 75, 62, 114, 111, 98, 111, 109, 95, + 105, 101, 92, 102, 100, 103, 89, 92, 90, 101, + 98, 85, 78, 79, 79, 76, 71, 66, 67, 2, 69, 69, + 72, 65, 0, 68, 1, 1, 0, 1, 5, 0, 64, 1, 7, 65, + 69, 73, 69, 66, 67, 17, 16, 18, 20, 16, 17, + 14, 16, 15, 4, 12, 13, 67, 3, 59, 59, 56, 61, + 62, 62, 62, 62, 62, 62, 62, 62, 62, 57, 36, + 62, 62, 62, 62, 62, 62, 50, 43, 42, 33, 22, + 14, 2, 71, 62, 62, 62, 62, 62, 62, 62, 62, 54, + 51, 45, 43, 26, 17, 5, 9, 8, 4, 29, 29, 27, + 25, 21, 23, 14, 11, 10, 3, 76, 65, 78, 89, 17, + 3, 65, 82, 77, 71, 77, 70, 1, 71, 77, 65, 2, + 3, 2, 5, 4, 3, 62, 58, 49, 41, 34, 24, 15, 64, + 83, 68, 39, 28, 23, 13, 12, 4, 1, 64, 78, 79, + 74, 68, 74, 65, 3, 68, 72, 0, 4, 6, 5, 9, 9, + 4, 62, 58, 49, 41, 34, 24, 15, 64, 83 }, + + { + + 62, + 8, 75, 62, 8, 75, 109, 89, 14, 10, 8, 25, 42, + 53, 56, 20, 99, 66, 67, 70, 8, 8, 68, 3, 13, + 30, 38, 26, 2, 85, 98, 91, 73, 67, 70, 8, 72, + 81, 11, 15, 67, 78, 89, 3, 76, 85, 98, 7, 72, + 81, 4, 79, 81, 91, 65, 76, 70, 84, 68, 2, 22, + 0, 0, 0, 77, 88, 97, 67, 14, 0, 40, 8, 81, + 102, 79, 85, 64, 76, 87, 82, 102, 84, 96, 90, + 104, 80, 85, 89, 89, 24, 65, 74, 105, 71, 96, + 85, 107, 7, 3, 4, 66, 12, 68, 69, 82, 94, 82, + 83, 83, 71, 79, 95, 90, 71, 99, 88, 78, 83, + 95, 98, 0, 74, 68, 67, 3, 9, 65, 71, 84, 97, + 73, 23, 23, 99, 9, 6, 5, 4, 4, 1, 68, 65, 2, + 8, 5, 2, 0, 0, 66, 68, 5, 65, 17, 27, 26, 17, + 11, 19, 12, 16, 14, 0, 16, 14, 24, 89, 16, 29, + 26, 54, 62, 37, 46, 62, 62, 42, 57, 55, 62, + 62, 43, 47, 35, 45, 61, 48, 62, 62, 62, 41, + 36, 58, 42, 62, 11, 62, 62, 62, 62, 62, 60, + 58, 56, 51, 46, 42, 35, 28, 22, 4, 75, 73, 82, + 20, 21, 18, 20, 8, 9, 7, 21, 64, 70, 66, 79, + 73, 109, 97, 2, 7, 10, 1, 70, 74, 78, 80, 105, + 87, 26, 14, 7, 68, 67, 80, 91, 95, 104, 69, + 26, 18, 13, 11, 1, 64, 66, 70, 80, 67, 35, 31, + 26, 8, 10, 65, 73, 84, 10, 55, 49, 45, 34, 25, + 3, 69, 69, 75, 62, 112, 109, 97, 109, 108, 94, + 104, 100, 91, 100, 99, 101, 88, 91, 90, 100, + 96, 85, 78, 79, 79, 76, 71, 67, 67, 2, 69, 69, + 73, 64, 0, 67, 1, 1, 0, 1, 5, 0, 64, 1, 7, 65, + 69, 73, 69, 66, 68, 16, 16, 17, 20, 15, 16, + 14, 15, 14, 4, 12, 12, 67, 2, 58, 58, 55, 59, + 60, 62, 62, 62, 62, 62, 62, 62, 62, 55, 34, + 62, 62, 62, 62, 62, 62, 48, 41, 39, 31, 20, + 12, 1, 71, 62, 62, 62, 62, 62, 62, 62, 62, 52, + 48, 43, 40, 24, 15, 4, 8, 8, 2, 28, 27, 26, + 23, 19, 21, 13, 10, 9, 2, 77, 67, 79, 89, 16, + 1, 67, 81, 77, 70, 76, 69, 2, 71, 76, 65, 2, + 3, 2, 6, 4, 3, 62, 56, 46, 38, 30, 20, 11, 68, + 86, 67, 39, 28, 23, 13, 12, 4, 1, 64, 77, 79, + 74, 67, 74, 64, 4, 68, 72, 1, 5, 6, 5, 9, 9, + 4, 62, 56, 46, 38, 30, 20, 11, 68, 86 }, + + { + + 62, + 8, 76, 62, 8, 76, 107, 88, 15, 10, 8, 23, 40, + 52, 56, 20, 98, 66, 66, 70, 8, 7, 67, 3, 12, + 28, 36, 22, 64, 86, 96, 90, 73, 66, 70, 8, 73, + 81, 11, 15, 67, 78, 89, 3, 76, 84, 97, 7, 71, + 80, 4, 78, 81, 91, 65, 76, 70, 84, 68, 2, 22, + 0, 0, 0, 76, 88, 97, 67, 14, 64, 40, 8, 81, + 100, 78, 84, 0, 73, 85, 81, 100, 82, 95, 89, + 102, 80, 85, 89, 89, 24, 65, 73, 102, 71, 95, + 84, 105, 6, 3, 4, 66, 13, 68, 69, 81, 94, 82, + 82, 82, 70, 78, 94, 88, 71, 98, 87, 73, 78, + 92, 95, 0, 74, 68, 66, 3, 9, 65, 70, 83, 95, + 72, 21, 21, 96, 9, 6, 5, 4, 5, 2, 66, 64, 2, + 8, 5, 2, 1, 1, 67, 68, 5, 65, 16, 26, 25, 17, + 10, 19, 12, 16, 12, 0, 15, 13, 23, 89, 16, 29, + 26, 52, 62, 36, 44, 61, 62, 40, 55, 53, 62, + 62, 40, 45, 34, 43, 57, 46, 62, 62, 62, 38, + 34, 55, 40, 62, 9, 62, 62, 62, 62, 62, 58, 55, + 54, 49, 44, 39, 33, 26, 21, 3, 75, 73, 82, 19, + 20, 17, 19, 7, 8, 6, 19, 65, 70, 67, 80, 73, + 109, 96, 3, 7, 10, 1, 69, 73, 77, 80, 103, 86, + 27, 14, 7, 67, 66, 79, 89, 93, 102, 68, 26, + 18, 13, 12, 2, 64, 66, 70, 79, 67, 36, 31, 25, + 8, 10, 65, 73, 83, 9, 55, 49, 44, 33, 24, 3, + 69, 69, 75, 62, 111, 108, 96, 108, 106, 93, + 102, 98, 90, 99, 97, 99, 88, 90, 89, 99, 94, + 84, 78, 79, 78, 75, 71, 67, 67, 1, 69, 69, 73, + 64, 1, 66, 1, 1, 1, 2, 5, 1, 0, 1, 6, 65, 69, + 73, 69, 65, 69, 15, 16, 16, 19, 14, 16, 14, + 14, 14, 4, 11, 10, 68, 1, 56, 57, 54, 58, 58, + 62, 62, 62, 62, 62, 62, 62, 62, 52, 32, 62, + 62, 62, 62, 62, 62, 45, 39, 37, 29, 18, 11, 0, + 72, 62, 62, 62, 62, 62, 62, 60, 59, 49, 46, + 40, 37, 22, 14, 2, 7, 7, 1, 26, 26, 24, 21, + 18, 19, 11, 9, 7, 1, 78, 68, 80, 90, 14, 0, + 68, 81, 76, 70, 76, 68, 3, 71, 76, 64, 3, 3, + 3, 7, 4, 3, 62, 54, 44, 35, 27, 16, 7, 72, 89, + 67, 39, 28, 23, 13, 13, 5, 1, 64, 77, 78, 73, + 67, 73, 0, 5, 67, 71, 1, 5, 6, 5, 10, 9, 4, + 62, 54, 44, 35, 27, 16, 7, 72, 89 }, + + { + + 62, + 8, 76, 62, 8, 76, 106, 86, 15, 10, 7, 22, 38, + 51, 56, 19, 96, 66, 66, 69, 8, 7, 67, 2, 10, + 27, 33, 19, 66, 88, 93, 89, 73, 66, 69, 8, 73, + 80, 11, 14, 67, 78, 88, 3, 76, 84, 97, 7, 71, + 80, 4, 78, 80, 91, 65, 76, 70, 84, 68, 2, 22, + 0, 0, 0, 76, 89, 97, 66, 13, 64, 39, 7, 81, + 97, 77, 83, 2, 71, 84, 79, 98, 81, 94, 88, + 100, 80, 85, 88, 89, 24, 65, 72, 100, 71, 95, + 84, 103, 6, 2, 3, 67, 13, 68, 68, 81, 93, 81, + 82, 81, 70, 78, 92, 87, 70, 97, 86, 68, 74, + 89, 92, 0, 74, 68, 66, 3, 9, 64, 70, 83, 93, + 72, 19, 19, 94, 9, 6, 5, 4, 5, 2, 65, 0, 2, 8, + 5, 2, 1, 2, 68, 68, 5, 66, 16, 25, 25, 17, 10, + 19, 12, 16, 11, 0, 14, 12, 23, 89, 15, 28, 25, + 50, 62, 35, 42, 59, 60, 38, 52, 51, 62, 62, + 36, 43, 32, 41, 54, 43, 58, 62, 62, 35, 32, + 51, 38, 62, 7, 62, 62, 62, 62, 62, 56, 53, 52, + 47, 42, 37, 31, 24, 19, 1, 75, 73, 83, 18, 19, + 16, 18, 6, 6, 5, 17, 66, 71, 68, 81, 74, 108, + 94, 4, 8, 10, 1, 68, 73, 77, 79, 101, 85, 27, + 14, 8, 66, 65, 78, 88, 92, 101, 67, 27, 19, + 14, 12, 3, 0, 66, 70, 79, 67, 36, 31, 24, 8, + 10, 65, 73, 83, 9, 54, 48, 43, 32, 24, 3, 69, + 69, 75, 62, 110, 106, 95, 106, 105, 92, 100, + 96, 89, 97, 95, 97, 87, 89, 89, 98, 93, 84, + 78, 79, 78, 75, 71, 67, 67, 1, 69, 69, 74, 0, + 1, 65, 1, 1, 1, 2, 5, 1, 0, 1, 6, 65, 69, 73, + 69, 65, 70, 14, 16, 15, 18, 13, 15, 14, 13, + 13, 4, 11, 9, 68, 0, 55, 56, 53, 56, 56, 62, + 61, 62, 62, 62, 62, 62, 61, 50, 30, 62, 62, + 62, 62, 62, 59, 43, 36, 34, 27, 16, 9, 64, 73, + 62, 62, 62, 62, 62, 62, 57, 56, 47, 43, 38, + 34, 20, 12, 1, 6, 6, 64, 25, 24, 22, 19, 16, + 17, 9, 8, 6, 0, 79, 69, 81, 91, 13, 64, 69, + 81, 76, 69, 75, 67, 4, 71, 75, 64, 3, 3, 3, 8, + 4, 3, 61, 52, 41, 32, 24, 12, 2, 76, 92, 67, + 39, 28, 23, 13, 13, 5, 1, 64, 76, 78, 73, 66, + 73, 0, 6, 67, 71, 1, 5, 6, 5, 10, 9, 4, 61, + 52, 41, 32, 24, 12, 2, 76, 92 }, + + { + + 62, + 8, 76, 62, 8, 76, 104, 85, 15, 10, 7, 21, 36, + 50, 56, 19, 94, 66, 66, 68, 7, 6, 67, 1, 8, + 26, 31, 15, 69, 90, 90, 88, 72, 66, 68, 7, 73, + 79, 11, 14, 67, 77, 87, 3, 76, 84, 97, 7, 71, + 80, 4, 78, 80, 90, 65, 76, 70, 84, 67, 2, 22, + 0, 0, 0, 75, 89, 97, 66, 12, 64, 38, 7, 81, + 95, 76, 82, 4, 69, 82, 78, 97, 79, 92, 87, 97, + 80, 84, 88, 88, 24, 65, 71, 98, 71, 94, 83, + 101, 6, 2, 3, 67, 13, 68, 68, 80, 92, 80, 81, + 80, 69, 77, 91, 85, 69, 95, 85, 0, 70, 86, 89, + 1, 73, 67, 65, 3, 9, 64, 70, 82, 91, 72, 17, + 17, 91, 9, 7, 5, 4, 5, 3, 0, 1, 3, 7, 5, 2, 2, + 2, 69, 67, 5, 66, 15, 24, 24, 16, 9, 19, 12, + 16, 10, 1, 13, 12, 22, 89, 15, 27, 24, 48, 62, + 34, 41, 57, 58, 36, 50, 49, 62, 62, 33, 41, + 30, 38, 51, 41, 55, 62, 62, 33, 30, 48, 36, + 62, 6, 62, 62, 62, 61, 60, 54, 51, 50, 45, 39, + 35, 29, 23, 17, 64, 75, 73, 83, 17, 18, 15, + 16, 5, 5, 4, 16, 67, 71, 69, 81, 75, 107, 93, + 5, 8, 10, 2, 68, 72, 76, 78, 99, 83, 27, 15, + 8, 66, 64, 77, 86, 90, 99, 67, 28, 20, 15, 13, + 4, 0, 65, 69, 78, 67, 37, 31, 24, 7, 10, 65, + 73, 82, 9, 54, 47, 42, 31, 24, 3, 68, 69, 74, + 62, 108, 105, 93, 104, 103, 91, 99, 95, 88, + 95, 94, 95, 86, 88, 88, 97, 91, 84, 78, 78, + 77, 74, 71, 68, 67, 0, 69, 69, 74, 0, 1, 64, + 1, 1, 1, 2, 5, 1, 0, 1, 5, 65, 69, 73, 69, 64, + 71, 13, 16, 14, 18, 13, 14, 14, 13, 12, 4, 11, + 8, 68, 64, 54, 55, 52, 54, 54, 62, 59, 61, 62, + 59, 62, 62, 58, 47, 28, 62, 62, 62, 62, 59, + 56, 40, 34, 32, 25, 15, 8, 64, 73, 62, 62, 62, + 62, 59, 59, 55, 53, 45, 41, 36, 31, 18, 10, + 64, 6, 6, 66, 24, 23, 21, 17, 14, 15, 8, 7, 4, + 64, 79, 71, 82, 91, 11, 66, 71, 80, 76, 68, + 75, 66, 5, 70, 74, 0, 4, 3, 4, 9, 4, 3, 60, + 50, 38, 29, 20, 8, 65, 80, 95, 66, 39, 28, 23, + 13, 14, 5, 2, 0, 76, 78, 73, 66, 73, 1, 7, 67, + 71, 2, 6, 6, 6, 11, 9, 4, 60, 50, 38, 29, 20, + 8, 65, 80, 95 }, + + { + + 61, + 8, 76, 61, 8, 76, 102, 83, 16, 10, 6, 19, 34, + 49, 56, 19, 92, 66, 65, 67, 7, 6, 67, 1, 7, + 25, 28, 12, 71, 91, 87, 87, 72, 65, 67, 7, 74, + 78, 11, 13, 67, 77, 87, 3, 76, 84, 97, 7, 71, + 79, 4, 78, 79, 90, 65, 76, 70, 84, 67, 2, 22, + 0, 0, 0, 75, 89, 97, 65, 11, 64, 37, 6, 81, + 92, 75, 81, 5, 67, 81, 76, 95, 78, 91, 86, 95, + 80, 84, 87, 88, 24, 65, 70, 96, 71, 93, 83, + 99, 6, 1, 2, 68, 13, 68, 67, 80, 91, 79, 81, + 79, 69, 76, 89, 84, 69, 94, 84, 5, 65, 83, 86, + 1, 73, 67, 65, 3, 9, 0, 69, 82, 89, 72, 15, + 15, 88, 9, 7, 5, 4, 5, 3, 1, 2, 3, 7, 5, 2, 2, + 3, 70, 67, 5, 67, 15, 23, 24, 16, 9, 19, 12, + 16, 9, 1, 12, 11, 22, 89, 15, 27, 24, 46, 61, + 33, 39, 55, 55, 34, 47, 47, 62, 62, 29, 39, + 28, 36, 48, 38, 52, 61, 62, 30, 28, 44, 34, + 62, 4, 60, 62, 60, 58, 57, 52, 49, 48, 43, 37, + 33, 27, 21, 16, 66, 75, 73, 84, 16, 17, 14, + 15, 4, 4, 3, 14, 68, 72, 70, 82, 75, 107, 91, + 6, 9, 10, 2, 67, 72, 76, 78, 97, 82, 27, 15, + 9, 65, 0, 76, 85, 89, 97, 66, 28, 20, 15, 13, + 5, 1, 65, 69, 78, 67, 37, 31, 23, 7, 10, 65, + 73, 82, 9, 53, 47, 41, 30, 24, 3, 68, 69, 74, + 62, 107, 103, 92, 103, 102, 90, 97, 93, 87, + 94, 92, 93, 86, 87, 88, 96, 89, 83, 78, 78, + 77, 74, 71, 68, 67, 0, 69, 69, 75, 1, 2, 0, 1, + 1, 2, 2, 5, 1, 0, 1, 5, 65, 69, 73, 69, 64, + 72, 12, 16, 13, 17, 12, 14, 14, 12, 11, 4, 11, + 7, 68, 65, 53, 54, 51, 53, 52, 60, 57, 59, 59, + 57, 62, 60, 55, 45, 26, 62, 62, 62, 62, 55, + 53, 38, 32, 29, 23, 13, 6, 65, 74, 62, 62, 62, + 60, 56, 57, 52, 50, 42, 38, 33, 28, 16, 8, 65, + 5, 5, 67, 22, 21, 19, 15, 13, 13, 6, 6, 3, 65, + 80, 72, 83, 92, 10, 67, 72, 80, 75, 68, 74, + 65, 6, 70, 74, 0, 4, 3, 4, 10, 4, 3, 59, 48, + 36, 26, 17, 4, 69, 84, 98, 66, 39, 28, 23, 13, + 14, 6, 2, 0, 75, 78, 73, 65, 72, 2, 8, 67, 70, + 2, 6, 6, 6, 11, 9, 4, 59, 48, 36, 26, 17, 4, + 69, 84, 98 }, + + { + + 60, + 8, 76, 60, 8, 76, 100, 82, 16, 10, 6, 18, 32, + 48, 56, 19, 90, 66, 65, 66, 7, 5, 67, 0, 5, + 24, 26, 8, 74, 93, 84, 86, 72, 65, 66, 7, 74, + 77, 11, 13, 67, 77, 86, 3, 76, 84, 97, 7, 71, + 79, 4, 78, 79, 90, 65, 76, 70, 84, 67, 2, 22, + 0, 0, 0, 74, 89, 97, 65, 10, 64, 36, 6, 81, + 90, 74, 80, 7, 65, 79, 75, 93, 76, 90, 85, 93, + 80, 84, 87, 88, 24, 65, 69, 94, 71, 92, 82, + 97, 6, 1, 2, 68, 13, 68, 67, 79, 90, 78, 80, + 78, 68, 75, 88, 82, 68, 93, 83, 10, 2, 80, 83, + 1, 73, 67, 64, 3, 9, 0, 69, 81, 87, 72, 13, + 13, 85, 9, 7, 5, 4, 5, 4, 3, 3, 3, 7, 5, 2, 3, + 4, 71, 67, 5, 67, 14, 22, 23, 16, 8, 19, 12, + 16, 8, 1, 11, 10, 21, 89, 15, 26, 23, 44, 58, + 32, 37, 53, 53, 32, 45, 45, 62, 62, 26, 37, + 26, 34, 45, 36, 49, 57, 62, 27, 26, 41, 32, + 62, 2, 58, 62, 58, 56, 55, 50, 47, 46, 41, 35, + 31, 25, 19, 14, 68, 75, 73, 84, 15, 16, 13, + 14, 3, 3, 2, 12, 69, 72, 71, 83, 76, 106, 90, + 7, 9, 10, 2, 66, 71, 75, 77, 95, 81, 27, 15, + 9, 64, 1, 75, 83, 87, 95, 65, 29, 21, 16, 14, + 6, 1, 65, 69, 77, 67, 38, 31, 22, 7, 10, 65, + 73, 81, 9, 53, 46, 40, 29, 24, 3, 68, 69, 74, + 62, 106, 102, 91, 101, 100, 89, 95, 91, 86, + 92, 90, 91, 85, 86, 87, 95, 87, 83, 78, 78, + 76, 73, 71, 68, 67, 64, 69, 69, 75, 1, 2, 1, + 1, 1, 2, 2, 5, 1, 0, 1, 4, 65, 69, 73, 69, 0, + 73, 11, 16, 12, 16, 11, 13, 14, 11, 10, 4, 11, + 6, 68, 66, 52, 53, 50, 51, 50, 58, 55, 57, 57, + 54, 61, 57, 52, 42, 24, 62, 62, 62, 62, 52, + 50, 35, 30, 27, 21, 11, 5, 66, 75, 62, 62, 62, + 58, 53, 54, 50, 47, 40, 36, 31, 25, 14, 6, 67, + 4, 4, 69, 21, 20, 17, 13, 11, 11, 4, 5, 1, 66, + 81, 73, 84, 93, 8, 68, 73, 80, 75, 67, 74, 64, + 7, 70, 73, 1, 5, 3, 5, 11, 4, 3, 58, 46, 33, + 23, 14, 0, 73, 88, 101, 66, 39, 28, 23, 13, + 15, 6, 2, 0, 75, 78, 73, 65, 72, 3, 9, 67, 70, + 2, 6, 6, 6, 12, 9, 4, 58, 46, 33, 23, 14, 0, + 73, 88, 101 }, + + { + + 58, + 7, 77, 58, 7, 77, 99, 81, 16, 10, 5, 16, 29, + 47, 56, 18, 89, 67, 65, 66, 6, 4, 67, 64, 3, + 22, 23, 4, 77, 95, 82, 86, 72, 65, 66, 6, 75, + 77, 11, 12, 67, 77, 86, 2, 77, 84, 97, 6, 71, + 79, 4, 78, 79, 90, 65, 76, 71, 84, 67, 2, 22, + 0, 0, 0, 74, 90, 97, 65, 9, 65, 35, 5, 82, 88, + 73, 79, 8, 0, 78, 74, 92, 75, 89, 84, 91, 80, + 84, 87, 88, 24, 65, 69, 92, 71, 92, 82, 96, 5, + 0, 1, 69, 13, 68, 67, 79, 90, 78, 80, 78, 68, + 75, 87, 81, 68, 92, 82, 14, 6, 77, 81, 1, 73, + 67, 64, 2, 9, 0, 69, 81, 85, 72, 11, 11, 83, + 9, 7, 5, 4, 5, 4, 4, 3, 3, 6, 4, 2, 3, 4, 73, + 67, 5, 68, 13, 20, 22, 15, 7, 19, 12, 15, 6, + 1, 10, 9, 20, 89, 14, 25, 22, 41, 54, 30, 35, + 50, 50, 29, 42, 43, 55, 62, 22, 34, 24, 31, + 41, 33, 45, 52, 59, 24, 24, 37, 30, 62, 0, 55, + 59, 55, 53, 52, 47, 44, 43, 39, 32, 28, 23, + 17, 12, 70, 75, 74, 85, 14, 14, 11, 12, 1, 1, + 0, 10, 70, 73, 72, 84, 77, 106, 89, 7, 9, 10, + 2, 66, 71, 75, 77, 93, 80, 27, 15, 9, 64, 1, + 74, 82, 86, 94, 65, 29, 21, 16, 14, 7, 1, 65, + 69, 77, 68, 38, 30, 21, 6, 10, 65, 73, 81, 8, + 52, 45, 38, 28, 23, 3, 68, 69, 74, 62, 105, + 101, 90, 100, 99, 88, 94, 90, 85, 91, 89, 89, + 85, 86, 87, 94, 86, 83, 78, 78, 76, 73, 71, + 69, 68, 65, 69, 70, 76, 1, 2, 2, 1, 0, 2, 2, + 4, 1, 0, 1, 3, 65, 69, 73, 69, 0, 74, 10, 16, + 10, 15, 10, 12, 13, 10, 9, 4, 10, 4, 69, 68, + 50, 51, 49, 49, 48, 55, 52, 54, 54, 51, 58, + 54, 48, 39, 22, 62, 62, 61, 60, 48, 46, 32, + 27, 24, 19, 9, 3, 67, 76, 59, 60, 60, 55, 50, + 51, 47, 43, 37, 33, 28, 22, 12, 4, 69, 3, 3, + 71, 19, 18, 15, 10, 9, 9, 2, 3, 64, 68, 82, + 75, 85, 94, 6, 70, 75, 80, 75, 67, 74, 0, 8, + 70, 73, 1, 5, 3, 5, 11, 4, 2, 56, 44, 30, 19, + 10, 67, 78, 93, 104, 66, 39, 28, 23, 13, 15, + 6, 2, 0, 75, 78, 73, 65, 72, 3, 9, 67, 70, 2, + 6, 6, 6, 12, 8, 3, 56, 44, 30, 19, 10, 67, 78, + 93, 104 }, + + { + + 57, + 7, 77, 57, 7, 77, 97, 79, 17, 11, 5, 15, 27, + 46, 57, 18, 87, 67, 64, 65, 6, 4, 66, 64, 2, + 21, 21, 1, 79, 96, 79, 85, 71, 64, 65, 6, 75, + 76, 11, 12, 66, 76, 85, 2, 77, 83, 96, 6, 70, + 78, 4, 77, 78, 89, 64, 75, 71, 83, 66, 2, 22, + 0, 0, 0, 73, 90, 97, 64, 9, 65, 35, 5, 82, 85, + 71, 77, 10, 3, 76, 72, 90, 73, 87, 82, 88, 80, + 83, 86, 87, 24, 65, 68, 89, 70, 91, 81, 94, 5, + 0, 1, 69, 14, 68, 66, 78, 89, 77, 79, 77, 67, + 74, 85, 79, 67, 90, 80, 19, 11, 73, 78, 2, 72, + 66, 0, 2, 10, 1, 68, 80, 82, 71, 9, 10, 80, 9, + 8, 5, 5, 6, 5, 6, 4, 4, 6, 4, 2, 4, 5, 74, 66, + 5, 68, 13, 19, 22, 15, 7, 19, 12, 15, 5, 2, + 10, 9, 20, 89, 14, 25, 22, 39, 51, 29, 34, 48, + 48, 27, 40, 41, 49, 62, 19, 32, 23, 29, 38, + 31, 42, 48, 55, 22, 22, 34, 28, 62, 64, 53, + 57, 53, 51, 50, 45, 42, 41, 37, 30, 26, 22, + 16, 11, 71, 75, 74, 85, 14, 13, 10, 11, 0, 0, + 64, 9, 71, 73, 73, 84, 77, 105, 87, 8, 10, 10, + 3, 65, 70, 74, 76, 90, 78, 28, 16, 10, 0, 2, + 72, 80, 84, 92, 64, 30, 22, 17, 15, 8, 2, 64, + 68, 76, 68, 39, 30, 21, 6, 11, 64, 73, 80, 8, + 52, 45, 37, 27, 23, 4, 67, 68, 73, 62, 103, + 99, 88, 98, 97, 86, 92, 88, 83, 89, 87, 86, + 84, 85, 86, 92, 84, 82, 77, 77, 75, 72, 70, + 69, 68, 65, 69, 70, 76, 2, 3, 3, 2, 0, 3, 3, + 4, 2, 1, 1, 3, 64, 68, 72, 68, 1, 74, 9, 16, + 9, 15, 10, 12, 13, 10, 9, 4, 10, 3, 69, 69, + 49, 50, 49, 48, 47, 53, 50, 52, 52, 49, 56, + 52, 45, 37, 20, 61, 60, 57, 56, 45, 43, 30, + 25, 22, 18, 8, 2, 67, 76, 57, 58, 58, 53, 48, + 49, 45, 40, 35, 31, 26, 20, 11, 3, 70, 3, 3, + 72, 18, 17, 14, 8, 8, 8, 1, 2, 65, 69, 82, 76, + 85, 94, 5, 71, 76, 79, 74, 66, 73, 2, 10, 69, + 72, 2, 6, 4, 6, 12, 4, 2, 55, 42, 28, 16, 7, + 71, 82, 97, 106, 65, 39, 29, 24, 14, 16, 7, 3, + 1, 74, 77, 72, 64, 71, 4, 10, 66, 69, 3, 7, 6, + 7, 13, 8, 3, 55, 42, 28, 16, 7, 71, 82, 97, + 106 }, + + { + + 56, + 7, 77, 56, 7, 77, 95, 78, 17, 11, 5, 14, 25, + 45, 57, 18, 85, 67, 64, 64, 6, 3, 66, 65, 0, + 20, 18, 66, 82, 98, 76, 84, 71, 64, 64, 6, 75, + 75, 11, 11, 66, 76, 84, 2, 77, 83, 96, 6, 70, + 78, 4, 77, 78, 89, 64, 75, 71, 83, 66, 2, 22, + 0, 0, 0, 72, 90, 97, 64, 8, 65, 34, 5, 82, 83, + 70, 76, 12, 5, 75, 71, 88, 72, 86, 81, 86, 80, + 83, 86, 87, 24, 65, 67, 87, 70, 90, 80, 92, 5, + 0, 1, 70, 14, 68, 66, 77, 88, 76, 78, 76, 67, + 73, 84, 78, 66, 89, 79, 24, 15, 70, 75, 2, 72, + 66, 0, 2, 10, 1, 68, 80, 80, 71, 7, 8, 77, 9, + 8, 5, 5, 6, 5, 8, 5, 4, 6, 4, 2, 5, 6, 75, 66, + 5, 68, 12, 18, 21, 15, 6, 19, 12, 15, 4, 2, 9, + 8, 19, 89, 14, 24, 21, 37, 48, 28, 32, 46, 46, + 25, 38, 39, 43, 62, 15, 30, 21, 27, 35, 29, + 39, 44, 51, 19, 20, 31, 26, 62, 66, 51, 55, + 51, 49, 48, 43, 40, 39, 35, 28, 24, 20, 14, 9, + 73, 75, 74, 86, 13, 12, 9, 10, 64, 64, 65, 7, + 72, 73, 74, 85, 78, 104, 86, 9, 10, 10, 3, 64, + 69, 73, 75, 88, 77, 28, 16, 10, 1, 3, 71, 78, + 82, 90, 0, 31, 23, 18, 16, 9, 2, 64, 68, 75, + 68, 40, 30, 20, 6, 11, 64, 73, 80, 8, 52, 44, + 36, 26, 23, 4, 67, 68, 73, 62, 102, 98, 87, + 96, 95, 85, 90, 86, 82, 87, 85, 84, 83, 84, + 86, 91, 82, 82, 77, 77, 74, 72, 70, 69, 68, + 66, 69, 70, 76, 2, 3, 4, 2, 0, 3, 3, 4, 2, 1, + 1, 2, 64, 68, 72, 68, 2, 75, 8, 16, 8, 14, 9, + 11, 13, 9, 8, 4, 10, 2, 69, 70, 48, 49, 48, + 46, 45, 51, 48, 50, 50, 46, 53, 49, 42, 34, + 18, 57, 56, 53, 51, 42, 40, 27, 23, 19, 16, 6, + 1, 68, 77, 55, 56, 55, 51, 45, 46, 42, 37, 33, + 28, 24, 17, 9, 1, 72, 2, 2, 74, 17, 16, 12, 6, + 6, 6, 64, 1, 67, 70, 83, 77, 86, 95, 3, 72, + 77, 79, 74, 65, 73, 3, 11, 69, 71, 3, 7, 4, 6, + 13, 4, 2, 54, 40, 25, 13, 4, 75, 86, 101, 109, + 65, 39, 29, 24, 14, 17, 7, 3, 1, 74, 77, 72, + 64, 71, 5, 11, 66, 69, 3, 7, 6, 7, 14, 8, 3, + 54, 40, 25, 13, 4, 75, 86, 101, 109 }, + + { + + 55, + 7, 77, 55, 7, 77, 93, 76, 18, 11, 4, 12, 23, + 44, 57, 18, 83, 67, 0, 0, 6, 3, 66, 65, 64, + 19, 16, 69, 84, 99, 73, 83, 71, 0, 0, 6, 76, + 74, 11, 11, 66, 76, 84, 2, 77, 83, 96, 6, 70, + 77, 4, 77, 77, 89, 64, 75, 71, 83, 66, 2, 22, + 0, 0, 0, 72, 90, 97, 0, 7, 65, 33, 4, 82, 80, + 69, 75, 13, 7, 73, 69, 86, 70, 85, 80, 84, 80, + 83, 85, 87, 24, 65, 66, 85, 70, 89, 80, 90, 5, + 64, 0, 70, 14, 68, 65, 77, 87, 75, 78, 75, 66, + 72, 82, 76, 66, 88, 78, 29, 20, 67, 72, 2, 72, + 66, 1, 2, 10, 2, 67, 79, 78, 71, 5, 6, 74, 9, + 8, 5, 5, 6, 6, 9, 6, 4, 6, 4, 2, 5, 7, 76, 66, + 5, 69, 12, 17, 21, 15, 6, 19, 12, 15, 3, 2, 8, + 7, 19, 89, 14, 24, 21, 35, 45, 27, 30, 44, 43, + 23, 35, 37, 36, 62, 12, 28, 19, 25, 32, 26, + 36, 40, 47, 16, 18, 27, 24, 62, 68, 49, 53, + 49, 46, 45, 41, 38, 37, 33, 26, 22, 18, 12, 8, + 75, 75, 74, 86, 12, 11, 8, 9, 65, 65, 66, 5, + 73, 74, 75, 86, 78, 104, 84, 10, 11, 10, 3, 0, + 69, 73, 75, 86, 76, 28, 16, 11, 2, 4, 70, 77, + 81, 88, 1, 31, 23, 18, 16, 10, 3, 64, 68, 75, + 68, 40, 30, 19, 6, 11, 64, 73, 79, 8, 51, 44, + 35, 25, 23, 4, 67, 68, 73, 62, 101, 96, 86, + 95, 94, 84, 88, 84, 81, 86, 83, 82, 83, 83, + 85, 90, 80, 81, 77, 77, 74, 71, 70, 69, 68, + 66, 69, 70, 77, 3, 4, 5, 2, 0, 4, 3, 4, 2, 1, + 1, 2, 64, 68, 72, 68, 2, 76, 7, 16, 7, 13, 8, + 11, 13, 8, 7, 4, 10, 1, 69, 71, 47, 48, 47, + 45, 43, 49, 46, 48, 47, 44, 50, 46, 39, 32, + 16, 53, 52, 49, 46, 38, 37, 25, 21, 17, 14, 4, + 64, 69, 78, 53, 53, 53, 48, 42, 44, 40, 34, + 30, 26, 21, 14, 7, 64, 73, 1, 1, 75, 15, 14, + 10, 4, 5, 4, 66, 0, 68, 71, 84, 78, 87, 96, 2, + 73, 78, 79, 73, 65, 72, 4, 12, 69, 71, 3, 7, + 4, 7, 14, 4, 2, 53, 38, 23, 10, 1, 79, 90, + 105, 112, 65, 39, 29, 24, 14, 17, 8, 3, 1, 73, + 77, 72, 0, 70, 6, 12, 66, 68, 3, 7, 6, 7, 14, + 8, 3, 53, 38, 23, 10, 1, 79, 90, 105, 112 }, + + { + + 53, + 7, 77, 53, 7, 77, 92, 75, 18, 11, 4, 11, 21, + 43, 57, 17, 81, 67, 0, 1, 5, 2, 66, 66, 66, + 18, 13, 73, 87, 101, 70, 82, 71, 0, 1, 5, 76, + 73, 11, 10, 66, 75, 83, 2, 77, 83, 96, 6, 70, + 77, 4, 77, 77, 88, 64, 75, 71, 83, 65, 2, 22, + 0, 0, 0, 71, 91, 97, 0, 6, 65, 32, 4, 82, 78, + 68, 74, 15, 9, 72, 68, 85, 69, 83, 79, 82, 80, + 82, 85, 87, 24, 65, 65, 83, 70, 89, 79, 88, 5, + 64, 0, 71, 14, 68, 65, 76, 86, 74, 77, 74, 66, + 72, 81, 75, 65, 87, 77, 34, 24, 64, 69, 2, 71, + 66, 1, 2, 10, 2, 67, 79, 76, 71, 3, 4, 72, 9, + 9, 5, 5, 6, 6, 11, 7, 5, 5, 4, 2, 6, 7, 77, + 66, 5, 69, 11, 16, 20, 14, 5, 19, 12, 15, 2, + 2, 7, 6, 18, 89, 13, 23, 20, 33, 41, 26, 28, + 42, 41, 21, 33, 35, 30, 62, 8, 26, 17, 22, 29, + 24, 32, 35, 43, 13, 16, 24, 22, 62, 69, 47, + 51, 46, 44, 43, 39, 36, 35, 31, 23, 20, 16, + 10, 6, 77, 75, 74, 87, 11, 10, 7, 7, 66, 67, + 67, 4, 74, 74, 76, 86, 79, 103, 83, 11, 11, + 10, 4, 0, 68, 72, 74, 84, 74, 28, 17, 11, 2, + 5, 69, 75, 79, 87, 1, 32, 24, 19, 17, 11, 3, + 64, 67, 74, 68, 41, 30, 19, 5, 11, 64, 73, 79, + 8, 51, 43, 34, 24, 23, 4, 66, 68, 73, 62, 99, + 95, 85, 93, 92, 83, 87, 83, 80, 84, 82, 80, + 82, 82, 85, 89, 79, 81, 77, 77, 73, 71, 70, + 70, 68, 67, 69, 70, 77, 3, 4, 6, 2, 0, 4, 3, + 4, 2, 1, 1, 1, 64, 68, 72, 68, 3, 77, 6, 16, + 6, 13, 7, 10, 13, 7, 6, 4, 10, 0, 69, 72, 46, + 47, 46, 43, 41, 47, 44, 45, 45, 41, 47, 43, + 36, 29, 14, 48, 48, 45, 41, 35, 33, 22, 18, + 14, 12, 2, 65, 70, 78, 50, 51, 50, 46, 39, 41, + 37, 31, 28, 23, 19, 11, 5, 66, 75, 0, 1, 77, + 14, 13, 9, 2, 3, 2, 67, 64, 70, 72, 85, 80, + 88, 96, 0, 75, 80, 78, 73, 64, 72, 5, 13, 69, + 70, 4, 8, 4, 7, 15, 4, 2, 52, 36, 20, 7, 66, + 83, 95, 109, 115, 64, 39, 29, 24, 14, 18, 8, + 3, 1, 73, 77, 72, 0, 70, 6, 13, 66, 68, 4, 8, + 6, 7, 15, 8, 3, 52, 36, 20, 7, 66, 83, 95, + 109, 115 }, + + { + + 52, + 7, 77, 52, 7, 77, 90, 73, 18, 11, 3, 10, 19, + 42, 57, 17, 79, 67, 0, 2, 5, 2, 66, 67, 68, + 17, 11, 76, 89, 103, 67, 81, 70, 0, 2, 5, 76, + 72, 11, 10, 66, 75, 82, 2, 77, 83, 96, 6, 70, + 77, 4, 77, 76, 88, 64, 75, 71, 83, 65, 2, 22, + 0, 0, 0, 71, 91, 97, 1, 5, 65, 31, 3, 82, 75, + 67, 73, 17, 11, 70, 66, 83, 67, 82, 78, 79, + 80, 82, 84, 86, 24, 65, 64, 81, 70, 88, 79, + 86, 5, 65, 64, 71, 14, 68, 64, 76, 85, 73, 77, + 73, 65, 71, 79, 73, 64, 85, 76, 39, 28, 2, 66, + 3, 71, 65, 2, 2, 10, 3, 67, 78, 74, 71, 1, 2, + 69, 9, 9, 5, 5, 6, 7, 12, 8, 5, 5, 4, 2, 6, 8, + 78, 65, 5, 70, 11, 15, 20, 14, 5, 19, 12, 15, + 1, 3, 6, 6, 18, 89, 13, 22, 19, 31, 38, 25, + 27, 40, 39, 19, 30, 33, 24, 62, 5, 24, 15, 20, + 26, 21, 29, 31, 39, 11, 14, 20, 20, 62, 71, + 45, 49, 44, 42, 41, 37, 34, 33, 29, 21, 18, + 14, 9, 4, 79, 75, 74, 87, 10, 9, 6, 6, 67, 68, + 68, 2, 75, 75, 77, 87, 80, 102, 81, 12, 12, + 10, 4, 1, 68, 72, 73, 82, 73, 28, 17, 12, 3, + 6, 68, 74, 78, 85, 2, 33, 25, 20, 17, 12, 4, + 0, 67, 74, 68, 41, 30, 18, 5, 11, 64, 73, 78, + 8, 50, 42, 33, 23, 23, 4, 66, 68, 72, 62, 98, + 93, 83, 91, 91, 82, 85, 81, 79, 82, 80, 78, + 81, 81, 84, 88, 77, 81, 77, 76, 73, 70, 70, + 70, 68, 67, 69, 70, 78, 4, 4, 7, 2, 0, 4, 3, + 4, 2, 1, 1, 1, 64, 68, 72, 68, 3, 78, 5, 16, + 5, 12, 7, 9, 13, 7, 5, 4, 10, 64, 69, 73, 45, + 46, 45, 41, 39, 45, 42, 43, 42, 38, 44, 40, + 33, 27, 12, 44, 44, 41, 36, 32, 30, 20, 16, + 12, 10, 1, 67, 70, 79, 48, 48, 48, 44, 36, 38, + 35, 28, 26, 21, 17, 8, 3, 68, 76, 0, 0, 79, + 13, 11, 7, 0, 1, 0, 69, 65, 71, 73, 85, 81, + 89, 97, 64, 76, 81, 78, 73, 0, 71, 6, 14, 68, + 69, 4, 8, 4, 8, 16, 4, 2, 51, 34, 17, 4, 69, + 87, 99, 113, 118, 64, 39, 29, 24, 14, 18, 8, + 4, 2, 72, 77, 72, 1, 70, 7, 14, 66, 68, 4, 8, + 6, 8, 15, 8, 3, 51, 34, 17, 4, 69, 87, 99, + 113, 118 }, + + { + + 51, + 7, 78, 51, 7, 78, 88, 72, 19, 11, 3, 8, 17, + 41, 57, 17, 78, 67, 1, 2, 5, 1, 65, 67, 69, + 15, 8, 80, 92, 104, 65, 80, 70, 1, 2, 5, 77, + 72, 11, 9, 66, 75, 82, 2, 77, 82, 95, 6, 69, + 76, 4, 76, 76, 88, 64, 75, 71, 83, 65, 2, 22, + 0, 0, 0, 70, 91, 97, 1, 5, 66, 31, 3, 82, 73, + 66, 72, 18, 14, 69, 65, 81, 66, 81, 77, 77, + 80, 82, 84, 86, 24, 65, 0, 78, 70, 87, 78, 84, + 4, 65, 64, 72, 15, 68, 64, 75, 85, 73, 76, 72, + 65, 70, 78, 72, 64, 84, 75, 44, 33, 5, 0, 3, + 71, 65, 2, 2, 10, 3, 66, 78, 72, 70, 64, 0, + 66, 9, 9, 5, 5, 7, 7, 14, 9, 5, 5, 4, 2, 7, 9, + 79, 65, 5, 70, 10, 14, 19, 14, 4, 19, 12, 15, + 64, 3, 5, 5, 17, 89, 13, 22, 19, 29, 35, 24, + 25, 37, 36, 17, 28, 31, 17, 62, 1, 22, 14, 18, + 22, 19, 26, 27, 34, 8, 12, 17, 18, 62, 73, 43, + 47, 42, 39, 38, 35, 31, 31, 27, 19, 15, 12, 7, + 3, 80, 75, 74, 88, 9, 8, 5, 5, 68, 69, 69, 0, + 76, 75, 78, 88, 80, 102, 80, 13, 12, 10, 4, 2, + 67, 71, 73, 80, 72, 29, 17, 12, 4, 7, 67, 72, + 76, 83, 3, 33, 25, 20, 18, 13, 4, 0, 67, 73, + 68, 42, 30, 17, 5, 11, 64, 73, 78, 7, 50, 42, + 32, 22, 22, 4, 66, 68, 72, 62, 97, 92, 82, 90, + 89, 81, 83, 79, 78, 81, 78, 76, 81, 80, 84, + 87, 75, 80, 77, 76, 72, 70, 70, 70, 68, 68, + 69, 70, 78, 4, 5, 8, 2, 0, 5, 4, 4, 3, 2, 1, + 0, 64, 68, 72, 68, 4, 79, 4, 16, 4, 11, 6, 9, + 13, 6, 5, 4, 9, 66, 70, 74, 43, 45, 44, 40, + 37, 43, 40, 41, 40, 36, 41, 38, 30, 24, 10, + 40, 40, 37, 32, 28, 27, 17, 14, 9, 8, 64, 68, + 71, 80, 46, 46, 45, 41, 33, 36, 32, 25, 23, + 18, 14, 5, 1, 69, 78, 64, 64, 80, 11, 10, 5, + 65, 0, 65, 71, 66, 73, 74, 86, 82, 90, 98, 66, + 77, 82, 78, 72, 0, 71, 7, 15, 68, 69, 5, 9, 4, + 8, 17, 4, 2, 50, 32, 15, 1, 72, 91, 103, 117, + 121, 64, 39, 29, 24, 14, 19, 9, 4, 2, 72, 76, + 71, 1, 69, 8, 15, 65, 67, 4, 8, 6, 8, 16, 8, + 3, 50, 32, 15, 1, 72, 91, 103, 117, 121 }, + + { + + 50, + 7, 78, 50, 7, 78, 86, 70, 19, 11, 2, 7, 15, + 40, 57, 17, 76, 67, 1, 3, 4, 1, 65, 68, 71, + 14, 6, 83, 94, 106, 1, 79, 70, 1, 3, 4, 77, + 71, 11, 9, 66, 74, 81, 2, 77, 82, 95, 6, 69, + 76, 4, 76, 75, 87, 64, 75, 71, 83, 64, 2, 22, + 0, 0, 0, 70, 91, 97, 2, 4, 66, 30, 2, 82, 70, + 65, 71, 20, 16, 67, 0, 80, 64, 79, 76, 75, 80, + 81, 83, 86, 24, 65, 1, 76, 70, 86, 78, 82, 4, + 66, 65, 72, 15, 68, 0, 75, 84, 72, 76, 71, 64, + 69, 76, 70, 0, 83, 74, 49, 37, 8, 3, 3, 70, + 65, 3, 2, 10, 4, 66, 77, 70, 70, 66, 65, 0, 9, + 10, 5, 5, 7, 8, 15, 10, 6, 4, 4, 2, 7, 9, 80, + 65, 5, 71, 10, 13, 19, 13, 4, 19, 12, 15, 65, + 3, 4, 4, 17, 89, 13, 21, 18, 27, 32, 23, 23, + 35, 34, 15, 25, 29, 11, 62, 65, 20, 12, 15, + 19, 16, 23, 22, 30, 5, 10, 13, 16, 62, 74, 41, + 45, 40, 37, 36, 33, 29, 29, 25, 16, 13, 10, 5, + 1, 82, 75, 74, 88, 8, 7, 4, 3, 69, 70, 70, 64, + 77, 76, 79, 88, 81, 101, 78, 14, 13, 10, 5, 2, + 67, 71, 72, 78, 70, 29, 18, 13, 4, 8, 66, 71, + 75, 81, 3, 34, 26, 21, 18, 14, 5, 0, 66, 73, + 68, 42, 30, 17, 4, 11, 64, 73, 77, 7, 49, 41, + 31, 21, 22, 4, 65, 68, 72, 62, 95, 90, 81, 88, + 88, 80, 82, 78, 77, 79, 77, 74, 80, 79, 83, + 86, 73, 80, 77, 76, 72, 69, 70, 71, 68, 68, + 69, 70, 79, 5, 5, 9, 2, 0, 5, 4, 4, 3, 2, 1, + 0, 64, 68, 72, 68, 4, 80, 3, 16, 3, 11, 5, 8, + 13, 5, 4, 4, 9, 67, 70, 75, 42, 44, 43, 38, + 35, 41, 38, 38, 37, 33, 38, 35, 27, 22, 8, 35, + 36, 33, 27, 25, 24, 15, 12, 7, 6, 66, 70, 72, + 80, 43, 43, 43, 39, 30, 33, 30, 22, 21, 16, + 12, 2, 64, 71, 79, 65, 64, 82, 10, 8, 4, 67, + 65, 67, 72, 67, 74, 75, 87, 84, 91, 98, 67, + 79, 84, 77, 72, 1, 70, 8, 16, 68, 68, 5, 9, 4, + 9, 18, 4, 2, 49, 30, 12, 65, 76, 95, 107, 121, + 124, 0, 39, 29, 24, 14, 19, 9, 4, 2, 71, 76, + 71, 2, 69, 9, 16, 65, 67, 5, 9, 6, 8, 16, 8, + 3, 49, 30, 12, 65, 76, 95, 107, 121, 124 }, + + { + + 48, + 6, 78, 48, 6, 78, 85, 69, 19, 11, 2, 5, 12, + 39, 57, 16, 74, 68, 1, 4, 4, 0, 65, 69, 73, + 13, 3, 87, 97, 108, 4, 78, 70, 1, 4, 4, 78, + 70, 11, 8, 66, 74, 81, 1, 78, 82, 95, 6, 69, + 76, 4, 76, 75, 87, 64, 75, 71, 83, 64, 2, 22, + 0, 0, 0, 69, 92, 97, 2, 3, 66, 29, 2, 83, 68, + 64, 70, 21, 18, 66, 1, 78, 0, 78, 75, 73, 80, + 81, 83, 86, 24, 65, 2, 74, 70, 86, 77, 80, 4, + 66, 65, 73, 15, 68, 0, 74, 83, 71, 75, 71, 64, + 69, 75, 69, 0, 82, 73, 53, 41, 11, 5, 3, 70, + 65, 3, 1, 10, 4, 66, 77, 68, 70, 68, 67, 2, 9, + 10, 5, 5, 7, 8, 17, 10, 6, 4, 3, 2, 8, 10, 82, + 65, 5, 71, 9, 11, 18, 13, 3, 19, 12, 14, 66, + 3, 3, 3, 16, 89, 12, 20, 17, 25, 28, 21, 21, + 33, 31, 12, 23, 27, 4, 62, 69, 18, 10, 13, 16, + 14, 19, 18, 26, 2, 8, 10, 14, 62, 76, 39, 42, + 37, 34, 33, 30, 27, 26, 23, 14, 11, 8, 3, 64, + 84, 75, 75, 89, 7, 5, 3, 2, 70, 72, 72, 66, + 78, 76, 80, 89, 82, 101, 77, 15, 13, 10, 5, 3, + 66, 70, 72, 76, 69, 29, 18, 13, 5, 9, 65, 69, + 73, 80, 4, 34, 26, 21, 19, 15, 5, 0, 66, 72, + 69, 43, 30, 16, 4, 11, 64, 73, 77, 7, 49, 40, + 30, 20, 22, 4, 65, 68, 72, 62, 94, 89, 80, 87, + 86, 79, 80, 76, 76, 78, 75, 72, 80, 79, 83, + 85, 72, 80, 77, 76, 71, 69, 70, 71, 68, 69, + 69, 70, 79, 5, 5, 10, 2, 64, 5, 4, 3, 3, 2, 1, + 64, 64, 68, 72, 68, 5, 81, 2, 16, 1, 10, 4, 7, + 12, 4, 3, 4, 9, 68, 70, 77, 41, 42, 42, 36, + 33, 39, 36, 36, 35, 30, 35, 32, 24, 19, 6, 31, + 32, 28, 22, 21, 20, 12, 9, 4, 4, 68, 71, 73, + 81, 41, 41, 40, 36, 27, 30, 27, 19, 18, 13, 9, + 64, 66, 73, 81, 66, 65, 84, 8, 7, 2, 69, 67, + 69, 74, 69, 76, 77, 88, 85, 92, 99, 69, 80, + 85, 77, 72, 1, 70, 9, 17, 68, 68, 6, 10, 4, 9, + 18, 4, 1, 48, 28, 9, 68, 79, 99, 112, 126, + 126, 0, 39, 29, 24, 14, 20, 9, 4, 2, 71, 76, + 71, 2, 69, 9, 16, 65, 67, 5, 9, 6, 8, 17, 8, + 2, 48, 28, 9, 68, 79, 99, 112, 126, 126 }, + + { + + 47, + 6, 78, 47, 6, 78, 83, 68, 20, 11, 2, 4, 10, + 38, 58, 16, 72, 68, 2, 5, 4, 64, 65, 69, 74, + 12, 1, 91, 100, 109, 7, 77, 69, 2, 5, 4, 78, + 69, 11, 8, 65, 74, 80, 1, 78, 82, 95, 6, 69, + 75, 4, 76, 75, 87, 64, 75, 71, 82, 64, 2, 22, + 0, 0, 0, 68, 92, 97, 2, 2, 66, 28, 2, 83, 66, + 1, 69, 23, 20, 64, 2, 76, 2, 77, 73, 70, 80, + 81, 83, 85, 24, 65, 3, 72, 69, 85, 76, 78, 4, + 66, 65, 73, 15, 68, 0, 73, 82, 70, 74, 70, 0, + 68, 74, 67, 1, 80, 72, 58, 46, 15, 8, 4, 70, + 64, 4, 1, 10, 4, 65, 76, 65, 70, 70, 68, 5, 9, + 10, 5, 5, 7, 9, 19, 11, 6, 4, 3, 2, 9, 11, 83, + 64, 5, 71, 8, 10, 17, 13, 2, 19, 12, 14, 67, + 4, 2, 3, 15, 89, 12, 20, 17, 23, 25, 20, 20, + 31, 29, 10, 21, 25, 65, 62, 72, 16, 8, 11, 13, + 12, 16, 14, 22, 0, 6, 7, 12, 62, 78, 37, 40, + 35, 32, 31, 28, 25, 24, 21, 12, 9, 7, 2, 65, + 86, 75, 75, 89, 7, 4, 2, 1, 71, 73, 73, 68, + 79, 76, 81, 90, 82, 100, 76, 16, 13, 10, 5, 4, + 65, 69, 71, 73, 68, 29, 18, 13, 6, 10, 64, 67, + 71, 78, 5, 35, 27, 22, 20, 16, 5, 1, 66, 71, + 69, 44, 30, 15, 4, 12, 0, 73, 76, 7, 49, 40, + 29, 19, 22, 4, 65, 68, 71, 62, 93, 88, 78, 85, + 84, 78, 78, 74, 75, 76, 73, 70, 79, 78, 82, + 84, 70, 79, 76, 75, 70, 68, 70, 71, 68, 70, + 69, 70, 79, 5, 6, 11, 3, 64, 6, 4, 3, 3, 2, 1, + 65, 64, 67, 71, 68, 6, 81, 1, 16, 0, 9, 4, 7, + 12, 4, 2, 4, 9, 69, 70, 78, 40, 41, 42, 35, + 31, 37, 34, 34, 33, 28, 32, 29, 21, 16, 4, 27, + 28, 24, 17, 18, 17, 9, 7, 2, 3, 69, 72, 73, + 82, 39, 39, 38, 34, 25, 28, 25, 16, 16, 11, 7, + 66, 68, 75, 83, 66, 66, 85, 7, 6, 0, 71, 68, + 70, 76, 70, 78, 78, 88, 86, 92, 100, 71, 81, + 86, 77, 71, 2, 70, 10, 19, 67, 67, 7, 11, 4, + 10, 19, 4, 1, 47, 26, 7, 71, 82, 103, 116, + 126, 126, 0, 39, 29, 25, 15, 21, 10, 5, 3, 71, + 76, 71, 2, 68, 10, 17, 65, 66, 5, 9, 6, 9, 18, + 8, 2, 47, 26, 7, 71, 82, 103, 116, 126, 126 }, + + { + + 46, + 6, 78, 46, 6, 78, 81, 66, 20, 11, 1, 3, 8, 37, + 58, 16, 70, 68, 2, 6, 3, 64, 65, 70, 76, 11, + 65, 94, 102, 111, 10, 76, 69, 2, 6, 3, 78, 68, + 11, 7, 65, 73, 79, 1, 78, 82, 95, 6, 69, 75, + 4, 76, 74, 86, 64, 75, 71, 82, 0, 2, 22, 0, 0, + 0, 68, 92, 97, 3, 1, 66, 27, 1, 83, 0, 2, 68, + 25, 22, 0, 4, 75, 3, 75, 72, 68, 80, 80, 82, + 85, 24, 65, 4, 70, 69, 84, 76, 76, 4, 67, 66, + 74, 15, 68, 1, 73, 81, 69, 74, 69, 0, 67, 72, + 66, 2, 79, 71, 62, 50, 18, 11, 4, 69, 64, 4, + 1, 10, 5, 65, 76, 0, 70, 72, 70, 8, 9, 11, 5, + 5, 7, 9, 20, 12, 7, 3, 3, 2, 9, 11, 84, 64, 5, + 72, 8, 9, 17, 12, 2, 19, 12, 14, 68, 4, 1, 2, + 15, 89, 12, 19, 16, 21, 22, 19, 18, 29, 27, 8, + 18, 23, 71, 62, 76, 14, 6, 8, 10, 9, 13, 9, + 18, 66, 4, 3, 10, 62, 79, 35, 38, 33, 30, 29, + 26, 23, 22, 19, 9, 7, 5, 0, 67, 88, 75, 75, + 90, 6, 3, 1, 64, 72, 74, 74, 69, 80, 77, 82, + 90, 83, 99, 74, 17, 14, 10, 6, 4, 65, 69, 70, + 71, 66, 29, 19, 14, 6, 11, 0, 66, 70, 76, 5, + 36, 28, 23, 20, 17, 6, 1, 65, 71, 69, 44, 30, + 15, 3, 12, 0, 73, 76, 7, 48, 39, 28, 18, 22, + 4, 64, 68, 71, 62, 91, 86, 77, 83, 83, 77, 77, + 73, 74, 74, 72, 68, 78, 77, 82, 83, 68, 79, + 76, 75, 70, 68, 70, 72, 68, 70, 69, 70, 80, 6, + 6, 12, 3, 64, 6, 4, 3, 3, 2, 1, 65, 64, 67, + 71, 68, 6, 82, 0, 16, 64, 9, 3, 6, 12, 3, 1, + 4, 9, 70, 70, 79, 39, 40, 41, 33, 29, 35, 32, + 31, 30, 25, 29, 26, 18, 14, 2, 22, 24, 20, 12, + 15, 14, 7, 5, 64, 1, 71, 74, 74, 82, 36, 36, + 35, 32, 22, 25, 22, 13, 14, 8, 5, 69, 70, 77, + 84, 67, 66, 87, 6, 4, 64, 73, 70, 72, 77, 71, + 79, 79, 89, 88, 93, 100, 72, 83, 88, 76, 71, + 3, 69, 11, 20, 67, 66, 7, 11, 4, 10, 20, 4, 1, + 46, 24, 4, 74, 86, 107, 120, 126, 126, 1, 39, + 29, 25, 15, 21, 10, 5, 3, 70, 76, 71, 3, 68, + 11, 18, 65, 66, 6, 10, 6, 9, 18, 8, 2, 46, 24, + 4, 74, 86, 107, 120, 126, 126 }, + + { + + 45, + 6, 79, 45, 6, 79, 79, 65, 21, 11, 1, 1, 6, 36, + 58, 16, 69, 68, 3, 6, 3, 65, 64, 70, 77, 9, + 67, 98, 105, 112, 12, 75, 69, 3, 6, 3, 79, 68, + 11, 7, 65, 73, 79, 1, 78, 81, 94, 6, 68, 74, + 4, 75, 74, 86, 64, 75, 71, 82, 0, 2, 22, 0, 0, + 0, 67, 92, 97, 3, 1, 67, 27, 1, 83, 2, 3, 67, + 26, 25, 2, 5, 73, 5, 74, 71, 66, 80, 80, 82, + 85, 24, 65, 5, 67, 69, 83, 75, 74, 3, 67, 66, + 74, 16, 68, 1, 72, 81, 69, 73, 68, 1, 66, 71, + 64, 2, 78, 70, 62, 55, 21, 14, 4, 69, 64, 5, + 1, 10, 5, 64, 75, 2, 69, 74, 72, 11, 9, 11, 5, + 5, 8, 10, 22, 13, 7, 3, 3, 2, 10, 12, 85, 64, + 5, 72, 7, 8, 16, 12, 1, 19, 12, 14, 70, 4, 0, + 1, 14, 89, 12, 19, 16, 19, 19, 18, 16, 26, 24, + 6, 16, 21, 78, 62, 79, 12, 5, 6, 6, 7, 10, 5, + 13, 69, 2, 0, 8, 62, 81, 33, 36, 31, 27, 26, + 24, 20, 20, 17, 7, 4, 3, 65, 68, 89, 75, 75, + 90, 5, 2, 0, 65, 73, 75, 75, 71, 81, 77, 83, + 91, 83, 99, 73, 18, 14, 10, 6, 5, 64, 68, 70, + 69, 65, 30, 19, 14, 7, 12, 1, 64, 68, 74, 6, + 36, 28, 23, 21, 18, 6, 1, 65, 70, 69, 45, 30, + 14, 3, 12, 0, 73, 75, 6, 48, 39, 27, 17, 21, + 4, 64, 68, 71, 62, 90, 85, 76, 82, 81, 76, 75, + 71, 73, 73, 70, 66, 78, 76, 81, 82, 66, 78, + 76, 75, 69, 67, 70, 72, 68, 71, 69, 70, 80, 6, + 7, 13, 3, 64, 7, 5, 3, 4, 3, 1, 66, 64, 67, + 71, 68, 7, 83, 64, 16, 65, 8, 2, 6, 12, 2, 1, + 4, 8, 72, 71, 80, 37, 39, 40, 32, 27, 33, 30, + 29, 28, 23, 26, 24, 15, 11, 0, 18, 20, 16, 8, + 11, 11, 4, 3, 66, 64, 73, 75, 75, 83, 34, 34, + 33, 29, 19, 23, 20, 10, 11, 6, 2, 72, 72, 78, + 86, 68, 67, 88, 4, 3, 66, 75, 71, 74, 79, 72, + 81, 80, 90, 89, 94, 101, 74, 84, 89, 76, 70, + 3, 69, 12, 21, 67, 66, 8, 12, 4, 11, 21, 4, 1, + 45, 22, 2, 77, 89, 111, 124, 126, 126, 1, 39, + 29, 25, 15, 22, 11, 5, 3, 70, 75, 70, 3, 67, + 12, 19, 64, 65, 6, 10, 6, 9, 19, 8, 2, 45, 22, + 2, 77, 89, 111, 124, 126, 126 }, + + { + + 43, + 6, 79, 43, 6, 79, 78, 0, 21, 11, 0, 0, 4, 35, + 58, 15, 67, 68, 3, 7, 3, 65, 64, 71, 79, 8, + 70, 101, 107, 114, 15, 74, 69, 3, 7, 3, 79, + 67, 11, 6, 65, 73, 78, 1, 78, 81, 94, 6, 68, + 74, 4, 75, 73, 86, 64, 75, 71, 82, 0, 2, 22, + 0, 0, 0, 67, 93, 97, 4, 0, 67, 26, 0, 83, 5, + 4, 66, 28, 27, 3, 7, 71, 6, 73, 70, 64, 80, + 80, 81, 85, 24, 65, 6, 65, 69, 83, 75, 72, 3, + 68, 67, 75, 16, 68, 2, 72, 80, 68, 73, 67, 1, + 66, 69, 0, 3, 77, 69, 62, 59, 24, 17, 4, 69, + 64, 5, 1, 10, 6, 64, 75, 4, 69, 76, 74, 13, 9, + 11, 5, 5, 8, 10, 23, 14, 7, 3, 3, 2, 10, 13, + 86, 64, 5, 73, 7, 7, 16, 12, 1, 19, 12, 14, + 71, 4, 64, 0, 14, 89, 11, 18, 15, 17, 15, 17, + 14, 24, 22, 4, 13, 19, 84, 62, 83, 10, 3, 4, + 3, 4, 6, 1, 9, 72, 0, 67, 6, 62, 83, 31, 34, + 28, 25, 24, 22, 18, 18, 15, 5, 2, 1, 67, 70, + 91, 75, 75, 91, 4, 1, 64, 66, 74, 77, 76, 73, + 82, 78, 84, 92, 84, 98, 71, 19, 15, 10, 6, 6, + 64, 68, 69, 67, 64, 30, 19, 15, 8, 13, 2, 0, + 67, 73, 7, 37, 29, 24, 21, 19, 7, 1, 65, 70, + 69, 45, 30, 13, 3, 12, 0, 73, 75, 6, 47, 38, + 26, 16, 21, 4, 64, 68, 71, 62, 89, 83, 75, 80, + 80, 75, 73, 69, 72, 71, 68, 64, 77, 75, 81, + 81, 65, 78, 76, 75, 69, 67, 70, 72, 68, 71, + 69, 70, 81, 7, 7, 14, 3, 64, 7, 5, 3, 4, 3, 1, + 66, 64, 67, 71, 68, 7, 84, 65, 16, 66, 7, 1, + 5, 12, 1, 0, 4, 8, 73, 71, 81, 36, 38, 39, 30, + 25, 31, 28, 27, 25, 20, 23, 21, 12, 9, 65, 14, + 16, 12, 3, 8, 7, 2, 0, 69, 66, 75, 77, 76, 84, + 32, 31, 30, 27, 16, 20, 17, 7, 9, 3, 0, 75, + 74, 80, 87, 69, 68, 90, 3, 1, 68, 77, 73, 76, + 81, 73, 82, 81, 91, 90, 95, 102, 75, 85, 90, + 76, 70, 4, 68, 13, 22, 67, 65, 8, 12, 4, 11, + 22, 4, 1, 44, 20, 64, 80, 92, 115, 126, 126, + 126, 1, 39, 29, 25, 15, 22, 11, 5, 3, 69, 75, + 70, 4, 67, 12, 20, 64, 65, 6, 10, 6, 9, 19, 8, + 2, 44, 20, 64, 80, 92, 115, 126, 126, 126 }, + + { + + 42, + 6, 79, 42, 6, 79, 76, 1, 21, 11, 0, 64, 2, 34, + 58, 15, 65, 68, 3, 8, 2, 66, 64, 72, 81, 7, + 72, 105, 110, 116, 18, 73, 68, 3, 8, 2, 79, + 66, 11, 6, 65, 72, 77, 1, 78, 81, 94, 6, 68, + 74, 4, 75, 73, 85, 64, 75, 71, 82, 1, 2, 22, + 0, 0, 0, 66, 93, 97, 4, 64, 67, 25, 0, 83, 7, + 5, 65, 30, 29, 5, 8, 70, 8, 71, 69, 2, 80, 79, + 81, 84, 24, 65, 7, 0, 69, 82, 74, 70, 3, 68, + 67, 75, 16, 68, 2, 71, 79, 67, 72, 66, 2, 65, + 68, 2, 4, 75, 68, 62, 62, 27, 20, 5, 68, 0, 6, + 1, 10, 6, 64, 74, 6, 69, 78, 76, 16, 9, 12, 5, + 5, 8, 11, 25, 15, 8, 2, 3, 2, 11, 13, 87, 0, + 5, 73, 6, 6, 15, 11, 0, 19, 12, 14, 72, 5, 65, + 0, 13, 89, 11, 17, 14, 15, 12, 16, 13, 22, 20, + 2, 11, 17, 90, 62, 86, 8, 1, 1, 0, 2, 3, 67, + 5, 74, 65, 70, 4, 62, 84, 29, 32, 26, 23, 22, + 20, 16, 16, 13, 2, 0, 64, 68, 72, 93, 75, 75, + 91, 3, 0, 65, 68, 75, 78, 77, 74, 83, 78, 85, + 92, 85, 97, 70, 20, 15, 10, 7, 6, 0, 67, 68, + 65, 1, 30, 20, 15, 8, 14, 3, 2, 65, 71, 7, 38, + 30, 25, 22, 20, 7, 2, 64, 69, 69, 46, 30, 13, + 2, 12, 0, 73, 74, 6, 47, 37, 25, 15, 21, 4, 0, + 68, 70, 62, 87, 82, 73, 78, 78, 74, 72, 68, + 71, 69, 67, 1, 76, 74, 80, 80, 0, 78, 76, 74, + 68, 66, 70, 73, 68, 72, 69, 70, 81, 7, 7, 15, + 3, 64, 7, 5, 3, 4, 3, 1, 67, 64, 67, 71, 68, + 8, 85, 66, 16, 67, 7, 1, 4, 12, 1, 64, 4, 8, + 74, 71, 82, 35, 37, 38, 28, 23, 29, 26, 24, + 23, 17, 20, 18, 9, 6, 67, 9, 12, 8, 65, 5, 4, + 64, 65, 71, 68, 76, 78, 76, 84, 29, 29, 28, + 25, 13, 17, 15, 4, 7, 1, 65, 78, 76, 82, 89, + 69, 68, 92, 2, 0, 69, 79, 75, 78, 82, 74, 84, + 82, 91, 92, 96, 102, 77, 87, 92, 75, 70, 5, + 68, 14, 23, 66, 64, 9, 13, 4, 12, 23, 4, 1, + 43, 18, 67, 83, 96, 119, 126, 126, 126, 2, 39, + 29, 25, 15, 23, 11, 6, 4, 69, 75, 70, 4, 67, + 13, 21, 64, 65, 7, 11, 6, 10, 20, 8, 2, 43, + 18, 67, 83, 96, 119, 126, 126, 126 }, + + { + + 41, + 6, 79, 41, 6, 79, 74, 3, 22, 11, 64, 66, 0, + 33, 58, 15, 0, 68, 4, 9, 2, 66, 64, 72, 82, 6, + 75, 108, 112, 117, 21, 72, 68, 4, 9, 2, 80, + 65, 11, 5, 65, 72, 77, 1, 78, 81, 94, 6, 68, + 73, 4, 75, 72, 85, 64, 75, 71, 82, 1, 2, 22, + 0, 0, 0, 66, 93, 97, 5, 65, 67, 24, 64, 83, + 10, 6, 64, 31, 31, 6, 10, 68, 9, 70, 68, 4, + 80, 79, 80, 84, 24, 65, 8, 2, 69, 81, 74, 68, + 3, 69, 68, 76, 16, 68, 3, 71, 78, 66, 72, 65, + 2, 64, 66, 3, 4, 74, 67, 62, 62, 30, 23, 5, + 68, 0, 6, 1, 10, 7, 0, 74, 8, 69, 80, 78, 19, + 9, 12, 5, 5, 8, 11, 26, 16, 8, 2, 3, 2, 11, + 14, 88, 0, 5, 74, 6, 5, 15, 11, 0, 19, 12, 14, + 73, 5, 66, 64, 13, 89, 11, 17, 14, 13, 9, 15, + 11, 20, 17, 0, 8, 15, 97, 62, 90, 6, 64, 64, + 66, 64, 0, 71, 1, 77, 67, 74, 2, 62, 86, 27, + 30, 24, 20, 19, 18, 14, 14, 11, 0, 65, 66, 70, + 73, 95, 75, 75, 92, 2, 64, 66, 69, 76, 79, 78, + 76, 84, 79, 86, 93, 85, 97, 68, 21, 16, 10, 7, + 7, 0, 67, 68, 0, 2, 30, 20, 16, 9, 15, 4, 3, + 64, 69, 8, 38, 30, 25, 22, 21, 8, 2, 64, 69, + 69, 46, 30, 12, 2, 12, 0, 73, 74, 6, 46, 37, + 24, 14, 21, 4, 0, 68, 70, 62, 86, 80, 72, 77, + 77, 73, 70, 66, 70, 68, 65, 3, 76, 73, 80, 79, + 2, 77, 76, 74, 68, 66, 70, 73, 68, 72, 69, 70, + 82, 8, 8, 16, 3, 64, 8, 5, 3, 4, 3, 1, 67, 64, + 67, 71, 68, 8, 86, 67, 16, 68, 6, 0, 4, 12, 0, + 65, 4, 8, 75, 71, 83, 34, 36, 37, 27, 21, 27, + 24, 22, 20, 15, 17, 15, 6, 4, 69, 5, 8, 4, 70, + 1, 1, 66, 67, 74, 70, 78, 80, 77, 85, 27, 26, + 25, 22, 10, 15, 12, 1, 4, 65, 68, 81, 78, 84, + 90, 70, 69, 93, 0, 65, 71, 81, 76, 80, 84, 75, + 85, 83, 92, 93, 97, 103, 78, 88, 93, 75, 69, + 5, 67, 15, 24, 66, 64, 9, 13, 4, 12, 24, 4, 1, + 42, 16, 69, 86, 99, 123, 126, 126, 126, 2, 39, + 29, 25, 15, 23, 12, 6, 4, 68, 75, 70, 5, 66, + 14, 22, 64, 64, 7, 11, 6, 10, 20, 8, 2, 42, + 16, 69, 86, 99, 123, 126, 126, 126 }, + + { + + 40, + 6, 79, 40, 6, 79, 72, 4, 22, 11, 64, 67, 65, + 32, 58, 15, 2, 68, 4, 10, 2, 67, 64, 73, 84, + 5, 77, 112, 115, 119, 24, 71, 68, 4, 10, 2, + 80, 64, 11, 5, 65, 72, 76, 1, 78, 81, 94, 6, + 68, 73, 4, 75, 72, 85, 64, 75, 71, 82, 1, 2, + 22, 0, 0, 0, 65, 93, 97, 5, 66, 67, 23, 64, + 83, 12, 7, 0, 33, 33, 8, 11, 66, 11, 69, 67, + 6, 80, 79, 80, 84, 24, 65, 9, 4, 69, 80, 73, + 66, 3, 69, 68, 76, 16, 68, 3, 70, 77, 65, 71, + 64, 3, 0, 65, 5, 5, 73, 66, 62, 62, 33, 26, 5, + 68, 0, 7, 1, 10, 7, 0, 73, 10, 69, 82, 80, 22, + 9, 12, 5, 5, 8, 12, 28, 17, 8, 2, 3, 2, 12, + 15, 89, 0, 5, 74, 5, 4, 14, 11, 64, 19, 12, + 14, 74, 5, 67, 65, 12, 89, 11, 16, 13, 11, 6, + 14, 9, 18, 15, 65, 6, 13, 103, 62, 93, 4, 66, + 66, 69, 66, 66, 75, 66, 80, 69, 77, 0, 62, 88, + 25, 28, 22, 18, 17, 16, 12, 12, 9, 65, 67, 68, + 72, 75, 97, 75, 75, 92, 1, 65, 67, 70, 77, 80, + 79, 78, 85, 79, 87, 94, 86, 96, 67, 22, 16, + 10, 7, 8, 1, 66, 67, 2, 3, 30, 20, 16, 10, 16, + 5, 5, 1, 67, 9, 39, 31, 26, 23, 22, 8, 2, 64, + 68, 69, 47, 30, 11, 2, 12, 0, 73, 73, 6, 46, + 36, 23, 13, 21, 4, 0, 68, 70, 62, 85, 79, 71, + 75, 75, 72, 68, 64, 69, 66, 0, 5, 75, 72, 79, + 78, 4, 77, 76, 74, 67, 65, 70, 73, 68, 73, 69, + 70, 82, 8, 8, 17, 3, 64, 8, 5, 3, 4, 3, 1, 68, + 64, 67, 71, 68, 9, 87, 68, 16, 69, 5, 64, 3, + 12, 64, 66, 4, 8, 76, 71, 84, 33, 35, 36, 25, + 19, 25, 22, 20, 18, 12, 14, 12, 3, 1, 71, 1, + 4, 0, 75, 65, 65, 69, 69, 76, 72, 80, 81, 78, + 86, 25, 24, 23, 20, 7, 12, 10, 65, 2, 67, 70, + 84, 80, 86, 92, 71, 70, 95, 64, 66, 73, 83, + 78, 82, 86, 76, 87, 84, 93, 94, 98, 104, 80, + 89, 94, 75, 69, 6, 67, 16, 25, 66, 0, 10, 14, + 4, 13, 25, 4, 1, 41, 14, 72, 89, 102, 126, + 126, 126, 126, 2, 39, 29, 25, 15, 24, 12, 6, + 4, 68, 75, 70, 5, 66, 15, 23, 64, 64, 7, 11, + 6, 10, 21, 8, 2, 41, 14, 72, 89, 102, 126, + 126, 126, 126 }, + + { + + 38, + 5, 80, 38, 5, 80, 71, 5, 22, 11, 65, 69, 68, + 31, 58, 14, 3, 69, 4, 10, 1, 68, 64, 74, 86, + 3, 80, 116, 118, 121, 26, 71, 68, 4, 10, 1, + 81, 64, 11, 4, 65, 72, 76, 0, 79, 81, 94, 5, + 68, 73, 4, 75, 72, 85, 64, 75, 72, 82, 1, 2, + 22, 0, 0, 0, 65, 94, 97, 5, 67, 68, 22, 65, + 84, 14, 8, 1, 34, 35, 9, 12, 65, 12, 68, 66, + 8, 80, 79, 80, 84, 24, 65, 9, 6, 69, 80, 73, + 65, 2, 70, 69, 77, 16, 68, 3, 70, 77, 65, 71, + 64, 3, 0, 64, 6, 5, 72, 65, 62, 62, 36, 28, 5, + 68, 0, 7, 0, 10, 7, 0, 73, 12, 69, 84, 82, 24, + 9, 12, 5, 5, 8, 12, 29, 17, 8, 1, 2, 2, 12, + 15, 91, 0, 5, 75, 4, 2, 13, 10, 65, 19, 12, + 13, 76, 5, 68, 66, 11, 89, 10, 15, 12, 8, 2, + 12, 7, 15, 12, 68, 3, 11, 110, 62, 97, 1, 68, + 69, 73, 69, 70, 80, 71, 83, 71, 81, 65, 62, + 90, 22, 25, 19, 15, 14, 13, 9, 9, 7, 68, 70, + 70, 74, 77, 99, 75, 76, 93, 0, 67, 69, 72, 79, + 82, 81, 80, 86, 80, 88, 95, 87, 96, 66, 22, + 16, 10, 7, 8, 1, 66, 67, 4, 4, 30, 20, 16, 10, + 16, 6, 6, 2, 66, 9, 39, 31, 26, 23, 23, 8, 2, + 64, 68, 70, 47, 29, 10, 1, 12, 0, 73, 73, 5, + 45, 35, 21, 12, 20, 4, 0, 68, 70, 62, 84, 78, + 70, 74, 74, 71, 67, 0, 68, 65, 1, 7, 75, 72, + 79, 77, 5, 77, 76, 74, 67, 65, 70, 74, 69, 74, + 69, 71, 83, 8, 8, 18, 3, 65, 8, 5, 2, 4, 3, 1, + 69, 64, 67, 71, 68, 9, 88, 69, 16, 71, 4, 65, + 2, 11, 65, 67, 4, 7, 78, 72, 86, 31, 33, 35, + 23, 17, 22, 19, 17, 15, 9, 11, 9, 64, 65, 73, + 67, 0, 68, 80, 69, 69, 72, 72, 79, 74, 82, 83, + 79, 87, 22, 21, 20, 17, 4, 9, 7, 69, 64, 70, + 73, 87, 82, 88, 94, 72, 71, 97, 66, 68, 75, + 86, 80, 84, 88, 78, 89, 86, 94, 96, 99, 105, + 82, 91, 96, 75, 69, 6, 67, 17, 26, 66, 0, 10, + 14, 4, 13, 25, 4, 0, 39, 12, 75, 93, 106, 126, + 126, 126, 126, 2, 39, 29, 25, 15, 24, 12, 6, + 4, 68, 75, 70, 5, 66, 15, 23, 64, 64, 7, 11, + 6, 10, 21, 7, 1, 39, 12, 75, 93, 106, 126, + 126, 126, 126 }, + + { + + 37, + 5, 80, 37, 5, 80, 69, 7, 23, 12, 65, 70, 70, + 30, 59, 14, 5, 69, 5, 11, 1, 68, 0, 74, 87, 2, + 82, 119, 120, 122, 29, 70, 67, 5, 11, 1, 81, + 0, 11, 4, 64, 71, 75, 0, 79, 80, 93, 5, 67, + 72, 4, 74, 71, 84, 0, 74, 72, 81, 2, 2, 22, 0, + 0, 0, 64, 94, 97, 6, 67, 68, 22, 65, 84, 17, + 10, 3, 36, 38, 11, 14, 0, 14, 66, 64, 11, 80, + 78, 79, 83, 24, 65, 10, 9, 68, 79, 72, 0, 2, + 70, 69, 77, 17, 68, 4, 69, 76, 64, 70, 0, 4, + 1, 1, 8, 6, 70, 0, 62, 62, 40, 31, 6, 67, 1, + 8, 0, 11, 8, 1, 72, 15, 68, 86, 83, 27, 9, 13, + 5, 6, 9, 13, 31, 18, 9, 1, 2, 2, 13, 16, 92, + 1, 5, 75, 4, 1, 13, 10, 65, 19, 12, 13, 77, 6, + 68, 66, 11, 89, 10, 15, 12, 6, 64, 11, 6, 13, + 10, 70, 1, 9, 116, 62, 100, 64, 69, 71, 76, + 71, 73, 84, 75, 85, 73, 84, 67, 62, 91, 20, + 23, 17, 13, 12, 11, 7, 7, 5, 70, 72, 71, 75, + 78, 100, 75, 76, 93, 0, 68, 70, 73, 80, 83, + 82, 81, 87, 80, 89, 95, 87, 95, 64, 23, 17, + 10, 8, 9, 2, 65, 66, 7, 6, 31, 21, 17, 11, 17, + 8, 8, 4, 64, 10, 40, 32, 27, 24, 24, 9, 3, 0, + 67, 70, 48, 29, 10, 1, 13, 1, 73, 72, 5, 45, + 35, 20, 11, 20, 5, 1, 67, 69, 62, 82, 76, 68, + 72, 72, 69, 65, 2, 66, 0, 3, 10, 74, 71, 78, + 75, 7, 76, 75, 73, 66, 64, 69, 74, 69, 74, 69, + 71, 83, 9, 9, 19, 4, 65, 9, 6, 2, 5, 4, 1, 69, + 0, 66, 70, 67, 10, 88, 70, 16, 72, 4, 65, 2, + 11, 65, 67, 4, 7, 79, 72, 87, 30, 32, 35, 22, + 16, 20, 17, 15, 13, 7, 9, 7, 67, 67, 75, 71, + 66, 72, 84, 72, 72, 74, 74, 81, 75, 83, 84, + 79, 87, 20, 19, 18, 15, 2, 7, 5, 72, 66, 72, + 75, 89, 83, 89, 95, 72, 71, 98, 67, 69, 76, + 88, 81, 85, 89, 79, 90, 87, 94, 97, 99, 105, + 83, 92, 97, 74, 68, 7, 66, 19, 28, 65, 1, 11, + 15, 5, 14, 26, 4, 0, 38, 10, 77, 96, 109, 126, + 126, 126, 126, 3, 39, 30, 26, 16, 25, 13, 7, + 5, 67, 74, 69, 6, 65, 16, 24, 0, 0, 8, 12, 6, + 11, 22, 7, 1, 38, 10, 77, 96, 109, 126, 126, + 126, 126 }, + + { + + 36, + 5, 80, 36, 5, 80, 67, 8, 23, 12, 65, 71, 72, + 29, 59, 14, 7, 69, 5, 12, 1, 69, 0, 75, 89, 1, + 85, 123, 123, 124, 32, 69, 67, 5, 12, 1, 81, + 1, 11, 3, 64, 71, 74, 0, 79, 80, 93, 5, 67, + 72, 4, 74, 71, 84, 0, 74, 72, 81, 2, 2, 22, 0, + 0, 0, 0, 94, 97, 6, 68, 68, 21, 65, 84, 19, + 11, 4, 38, 40, 12, 15, 2, 15, 65, 0, 13, 80, + 78, 79, 83, 24, 65, 11, 11, 68, 78, 71, 2, 2, + 70, 69, 78, 17, 68, 4, 68, 75, 0, 69, 1, 4, 2, + 2, 9, 7, 69, 1, 62, 62, 43, 34, 6, 67, 1, 8, + 0, 11, 8, 1, 72, 17, 68, 88, 85, 30, 9, 13, 5, + 6, 9, 13, 33, 19, 9, 1, 2, 2, 14, 17, 93, 1, + 5, 75, 3, 0, 12, 10, 66, 19, 12, 13, 78, 6, + 69, 67, 10, 89, 10, 14, 11, 4, 67, 10, 4, 11, + 8, 72, 64, 7, 122, 62, 104, 66, 71, 73, 79, + 73, 76, 88, 79, 88, 75, 87, 69, 62, 93, 18, + 21, 15, 11, 10, 9, 5, 5, 3, 72, 74, 73, 77, + 80, 102, 75, 76, 94, 64, 69, 71, 74, 81, 84, + 83, 83, 88, 80, 90, 96, 88, 94, 0, 24, 17, 10, + 8, 10, 3, 64, 65, 9, 7, 31, 21, 17, 12, 18, 9, + 10, 6, 1, 11, 41, 33, 28, 25, 25, 9, 3, 0, 66, + 70, 49, 29, 9, 1, 13, 1, 73, 72, 5, 45, 34, + 19, 10, 20, 5, 1, 67, 69, 62, 81, 75, 67, 70, + 70, 68, 0, 4, 65, 2, 5, 12, 73, 70, 78, 74, 9, + 76, 75, 73, 65, 64, 69, 74, 69, 75, 69, 71, + 83, 9, 9, 20, 4, 65, 9, 6, 2, 5, 4, 1, 70, 0, + 66, 70, 67, 11, 89, 71, 16, 73, 3, 66, 1, 11, + 66, 68, 4, 7, 80, 72, 88, 29, 31, 34, 20, 14, + 18, 15, 13, 11, 4, 6, 4, 70, 70, 77, 75, 70, + 76, 89, 75, 75, 77, 76, 84, 77, 85, 85, 80, + 88, 18, 17, 15, 13, 64, 4, 2, 75, 68, 75, 77, + 92, 85, 91, 97, 73, 72, 100, 68, 70, 78, 90, + 83, 87, 91, 80, 92, 88, 95, 98, 100, 106, 85, + 93, 98, 74, 68, 8, 66, 20, 29, 65, 2, 12, 16, + 5, 14, 27, 4, 0, 37, 8, 80, 99, 112, 126, 126, + 126, 126, 3, 39, 30, 26, 16, 26, 13, 7, 5, 67, + 74, 69, 6, 65, 17, 25, 0, 0, 8, 12, 6, 11, 23, + 7, 1, 37, 8, 80, 99, 112, 126, 126, 126, 126 }, + + { + + 35, + 5, 80, 35, 5, 80, 65, 10, 24, 12, 66, 73, 74, + 28, 59, 14, 9, 69, 6, 13, 1, 69, 0, 75, 90, 0, + 87, 126, 125, 125, 35, 68, 67, 6, 13, 1, 82, + 2, 11, 3, 64, 71, 74, 0, 79, 80, 93, 5, 67, + 71, 4, 74, 70, 84, 0, 74, 72, 81, 2, 2, 22, 0, + 0, 0, 0, 94, 97, 7, 69, 68, 20, 66, 84, 22, + 12, 5, 39, 42, 14, 17, 4, 17, 64, 1, 15, 80, + 78, 78, 83, 24, 65, 12, 13, 68, 77, 71, 4, 2, + 71, 70, 78, 17, 68, 5, 68, 74, 1, 69, 2, 5, 3, + 4, 11, 7, 68, 2, 62, 62, 46, 37, 6, 67, 1, 9, + 0, 11, 9, 2, 71, 19, 68, 90, 87, 33, 9, 13, 5, + 6, 9, 14, 34, 20, 9, 1, 2, 2, 14, 18, 94, 1, + 5, 76, 3, 64, 12, 10, 66, 19, 12, 13, 79, 6, + 70, 68, 10, 89, 10, 14, 11, 2, 70, 9, 2, 9, 5, + 74, 67, 5, 126, 62, 107, 68, 73, 75, 82, 76, + 79, 92, 83, 91, 77, 91, 71, 62, 95, 16, 19, + 13, 8, 7, 7, 3, 3, 1, 74, 76, 75, 79, 81, 104, + 75, 76, 94, 65, 70, 72, 75, 82, 85, 84, 85, + 89, 81, 91, 97, 88, 94, 2, 25, 18, 10, 8, 11, + 3, 64, 65, 11, 8, 31, 21, 18, 13, 19, 10, 11, + 7, 3, 12, 41, 33, 28, 25, 26, 10, 3, 0, 66, + 70, 49, 29, 8, 1, 13, 1, 73, 71, 5, 44, 34, + 18, 9, 20, 5, 1, 67, 69, 62, 80, 73, 66, 69, + 69, 67, 2, 6, 64, 3, 7, 14, 73, 69, 77, 73, + 11, 75, 75, 73, 65, 0, 69, 74, 69, 75, 69, 71, + 84, 10, 10, 21, 4, 65, 10, 6, 2, 5, 4, 1, 70, + 0, 66, 70, 67, 11, 90, 72, 16, 74, 2, 67, 1, + 11, 67, 69, 4, 7, 81, 72, 89, 28, 30, 33, 19, + 12, 16, 13, 11, 8, 2, 3, 1, 73, 72, 79, 79, + 74, 80, 94, 79, 78, 79, 78, 86, 79, 87, 87, + 81, 89, 16, 14, 13, 10, 67, 2, 0, 78, 71, 77, + 80, 95, 87, 93, 98, 74, 73, 101, 70, 72, 80, + 92, 84, 89, 93, 81, 93, 89, 96, 99, 101, 107, + 86, 94, 99, 74, 67, 8, 65, 21, 30, 65, 2, 12, + 16, 5, 15, 28, 4, 0, 36, 6, 82, 102, 115, 126, + 126, 126, 126, 3, 39, 30, 26, 16, 26, 14, 7, + 5, 66, 74, 69, 7, 64, 18, 26, 0, 1, 8, 12, 6, + 11, 23, 7, 1, 36, 6, 82, 102, 115, 126, 126, + 126, 126 }, + + { + + 33, + 5, 80, 33, 5, 80, 64, 11, 24, 12, 66, 74, 76, + 27, 59, 13, 11, 69, 6, 14, 0, 70, 0, 76, 92, + 64, 90, 126, 126, 126, 38, 67, 67, 6, 14, 0, + 82, 3, 11, 2, 64, 70, 73, 0, 79, 80, 93, 5, + 67, 71, 4, 74, 70, 83, 0, 74, 72, 81, 3, 2, + 22, 0, 0, 0, 1, 95, 97, 7, 70, 68, 19, 66, 84, + 24, 13, 6, 41, 44, 15, 18, 5, 18, 1, 2, 17, + 80, 77, 78, 83, 24, 65, 13, 15, 68, 77, 70, 6, + 2, 71, 70, 79, 17, 68, 5, 67, 73, 2, 68, 3, 5, + 3, 5, 12, 8, 67, 3, 62, 62, 49, 40, 6, 66, 1, + 9, 0, 11, 9, 2, 71, 21, 68, 92, 89, 35, 9, 14, + 5, 6, 9, 14, 36, 21, 10, 0, 2, 2, 15, 18, 95, + 1, 5, 76, 2, 65, 11, 9, 67, 19, 12, 13, 80, 6, + 71, 69, 9, 89, 9, 13, 10, 0, 74, 8, 0, 7, 3, + 76, 69, 3, 126, 62, 111, 70, 75, 78, 85, 78, + 83, 97, 87, 94, 79, 94, 73, 62, 96, 14, 17, + 10, 6, 5, 5, 1, 1, 64, 77, 78, 77, 81, 83, + 106, 75, 76, 95, 66, 71, 73, 77, 83, 87, 85, + 86, 90, 81, 92, 97, 89, 93, 3, 26, 18, 10, 9, + 11, 4, 0, 64, 13, 10, 31, 22, 18, 13, 20, 11, + 13, 9, 4, 12, 42, 34, 29, 26, 27, 10, 3, 1, + 65, 70, 50, 29, 8, 0, 13, 1, 73, 71, 5, 44, + 33, 17, 8, 20, 5, 2, 67, 69, 62, 78, 72, 65, + 67, 67, 66, 3, 7, 0, 5, 8, 16, 72, 68, 77, 72, + 12, 75, 75, 73, 64, 0, 69, 75, 69, 76, 69, 71, + 84, 10, 10, 22, 4, 65, 10, 6, 2, 5, 4, 1, 71, + 0, 66, 70, 67, 12, 91, 73, 16, 75, 2, 68, 0, + 11, 68, 70, 4, 7, 82, 72, 90, 27, 29, 32, 17, + 10, 14, 11, 8, 6, 64, 0, 65, 76, 75, 81, 84, + 78, 84, 99, 82, 82, 82, 81, 89, 81, 89, 88, + 82, 89, 13, 12, 10, 8, 70, 64, 66, 81, 73, 80, + 82, 98, 89, 95, 100, 75, 73, 103, 71, 73, 81, + 94, 86, 91, 94, 82, 95, 90, 97, 101, 102, 107, + 88, 96, 101, 73, 67, 9, 65, 22, 31, 65, 3, 13, + 17, 5, 15, 29, 4, 0, 35, 4, 85, 105, 119, 126, + 126, 126, 126, 4, 39, 30, 26, 16, 27, 14, 7, + 5, 66, 74, 69, 7, 64, 18, 27, 0, 1, 9, 13, 6, + 11, 24, 7, 1, 35, 4, 85, 105, 119, 126, 126, + 126, 126 }, + + { + + 32, + 5, 80, 32, 5, 80, 1, 13, 24, 12, 67, 75, 78, + 26, 59, 13, 13, 69, 6, 15, 0, 70, 0, 77, 94, + 65, 92, 126, 126, 126, 41, 66, 66, 6, 15, 0, + 82, 4, 11, 2, 64, 70, 72, 0, 79, 80, 93, 5, + 67, 71, 4, 74, 69, 83, 0, 74, 72, 81, 3, 2, + 22, 0, 0, 0, 1, 95, 97, 8, 71, 68, 18, 67, 84, + 27, 14, 7, 43, 46, 17, 20, 7, 20, 2, 3, 20, + 80, 77, 77, 82, 24, 65, 14, 17, 68, 76, 70, 8, + 2, 72, 71, 79, 17, 68, 6, 67, 72, 3, 68, 4, 6, + 4, 7, 14, 9, 65, 4, 62, 62, 52, 43, 7, 66, 2, + 10, 0, 11, 10, 2, 70, 23, 68, 94, 91, 38, 9, + 14, 5, 6, 9, 15, 37, 22, 10, 0, 2, 2, 15, 19, + 96, 2, 5, 77, 2, 66, 11, 9, 67, 19, 12, 13, + 81, 7, 72, 69, 9, 89, 9, 12, 9, 65, 77, 7, 64, + 5, 1, 78, 72, 1, 126, 62, 114, 72, 77, 80, 88, + 81, 86, 101, 91, 96, 81, 98, 75, 62, 98, 12, + 15, 8, 4, 3, 3, 64, 64, 66, 79, 80, 79, 82, + 85, 108, 75, 76, 95, 67, 72, 74, 78, 84, 88, + 86, 88, 91, 82, 93, 98, 90, 92, 5, 27, 19, 10, + 9, 12, 4, 0, 0, 15, 11, 31, 22, 19, 14, 21, + 12, 14, 10, 6, 13, 43, 35, 30, 26, 28, 11, 4, + 1, 65, 70, 50, 29, 7, 0, 13, 1, 73, 70, 5, 43, + 32, 16, 7, 20, 5, 2, 67, 68, 62, 77, 70, 0, + 65, 66, 65, 5, 9, 1, 7, 10, 18, 71, 67, 76, + 71, 14, 75, 75, 72, 64, 1, 69, 75, 69, 76, 69, + 71, 85, 11, 10, 23, 4, 65, 10, 6, 2, 5, 4, 1, + 71, 0, 66, 70, 67, 12, 92, 74, 16, 76, 1, 68, + 64, 11, 68, 71, 4, 7, 83, 72, 91, 26, 28, 31, + 15, 8, 12, 9, 6, 3, 67, 66, 68, 79, 77, 83, + 88, 82, 88, 104, 85, 85, 84, 83, 91, 83, 90, + 90, 82, 90, 11, 9, 8, 6, 73, 67, 68, 84, 75, + 82, 84, 101, 91, 97, 101, 75, 74, 105, 72, 75, + 83, 96, 88, 93, 96, 83, 96, 91, 97, 102, 103, + 108, 89, 97, 102, 73, 67, 10, 64, 23, 32, 64, + 4, 13, 17, 5, 16, 30, 4, 0, 34, 2, 88, 108, + 122, 126, 126, 126, 126, 4, 39, 30, 26, 16, + 27, 14, 8, 6, 65, 74, 69, 8, 64, 19, 28, 0, 1, + 9, 13, 6, 12, 24, 7, 1, 34, 2, 88, 108, 122, + 126, 126, 126, 126 }, + + { + + 31, + 5, 81, 31, 5, 81, 3, 14, 25, 12, 67, 77, 80, + 25, 59, 13, 14, 69, 7, 15, 0, 71, 1, 77, 95, + 67, 95, 126, 126, 126, 43, 65, 66, 7, 15, 0, + 83, 4, 11, 1, 64, 70, 72, 0, 79, 79, 92, 5, + 66, 70, 4, 73, 69, 83, 0, 74, 72, 81, 3, 2, + 22, 0, 0, 0, 2, 95, 97, 8, 71, 69, 18, 67, 84, + 29, 15, 8, 44, 49, 18, 21, 9, 21, 3, 4, 22, + 80, 77, 77, 82, 24, 65, 15, 20, 68, 75, 69, + 10, 1, 72, 71, 80, 18, 68, 6, 66, 72, 3, 67, + 5, 6, 5, 8, 15, 9, 64, 5, 62, 62, 55, 46, 7, + 66, 2, 10, 0, 11, 10, 3, 70, 25, 67, 96, 93, + 41, 9, 14, 5, 6, 10, 15, 39, 23, 10, 0, 2, 2, + 16, 20, 97, 2, 5, 77, 1, 67, 10, 9, 68, 19, + 12, 13, 83, 7, 73, 70, 8, 89, 9, 12, 9, 67, + 80, 6, 66, 2, 65, 80, 74, 64, 126, 62, 118, + 74, 78, 82, 92, 83, 89, 105, 96, 99, 83, 101, + 77, 62, 100, 10, 13, 6, 1, 0, 1, 67, 66, 68, + 81, 83, 81, 84, 86, 109, 75, 76, 96, 68, 73, + 75, 79, 85, 89, 87, 90, 92, 82, 94, 99, 90, + 92, 6, 28, 19, 10, 9, 13, 5, 1, 0, 17, 12, 32, + 22, 19, 15, 22, 13, 16, 12, 8, 14, 43, 35, 30, + 27, 29, 11, 4, 1, 64, 70, 51, 29, 6, 0, 13, 1, + 73, 70, 4, 43, 32, 15, 6, 19, 5, 2, 67, 68, + 62, 76, 69, 1, 64, 64, 64, 7, 11, 2, 8, 12, + 20, 71, 66, 76, 70, 16, 74, 75, 72, 0, 1, 69, + 75, 69, 77, 69, 71, 85, 11, 11, 24, 4, 65, 11, + 7, 2, 6, 5, 1, 72, 0, 66, 70, 67, 13, 93, 75, + 16, 77, 0, 69, 64, 11, 69, 71, 4, 6, 85, 73, + 92, 24, 27, 30, 14, 6, 10, 7, 4, 1, 69, 69, + 70, 82, 80, 85, 92, 86, 92, 108, 89, 88, 87, + 85, 94, 85, 92, 91, 83, 91, 9, 7, 5, 3, 76, + 69, 71, 87, 78, 85, 87, 104, 93, 98, 103, 76, + 75, 106, 74, 76, 85, 98, 89, 95, 98, 84, 98, + 92, 98, 103, 104, 109, 91, 98, 103, 73, 66, + 10, 64, 24, 33, 64, 4, 14, 18, 5, 16, 31, 4, + 0, 33, 0, 90, 111, 125, 126, 126, 126, 126, 4, + 39, 30, 26, 16, 28, 15, 8, 6, 65, 73, 68, 8, + 0, 20, 29, 1, 2, 9, 13, 6, 12, 25, 7, 1, 33, + 0, 90, 111, 125, 126, 126, 126, 126 }, + + { + + 30, + 5, 81, 30, 5, 81, 5, 16, 25, 12, 68, 78, 82, + 24, 59, 13, 16, 69, 7, 16, 64, 71, 1, 78, 97, + 68, 97, 126, 126, 126, 46, 64, 66, 7, 16, 64, + 83, 5, 11, 1, 64, 69, 71, 0, 79, 79, 92, 5, + 66, 70, 4, 73, 68, 82, 0, 74, 72, 81, 4, 2, + 22, 0, 0, 0, 2, 95, 97, 9, 72, 69, 17, 68, 84, + 32, 16, 9, 46, 51, 20, 23, 10, 23, 5, 5, 24, + 80, 76, 76, 82, 24, 65, 16, 22, 68, 74, 69, + 12, 1, 73, 72, 80, 18, 68, 7, 66, 71, 4, 67, + 6, 7, 6, 10, 17, 10, 0, 6, 62, 62, 58, 49, 7, + 65, 2, 11, 0, 11, 11, 3, 69, 27, 67, 98, 95, + 44, 9, 15, 5, 6, 10, 16, 40, 24, 11, 64, 2, 2, + 16, 20, 98, 2, 5, 78, 1, 68, 10, 8, 68, 19, + 12, 13, 84, 7, 74, 71, 8, 89, 9, 11, 8, 69, + 83, 5, 68, 0, 67, 82, 77, 66, 126, 62, 121, + 76, 80, 85, 95, 86, 92, 110, 100, 102, 85, + 105, 79, 62, 101, 8, 11, 4, 64, 65, 64, 69, + 68, 70, 84, 85, 83, 86, 88, 111, 75, 76, 96, + 69, 74, 76, 81, 86, 90, 88, 91, 93, 83, 95, + 99, 91, 91, 8, 29, 20, 10, 10, 13, 5, 1, 1, + 19, 14, 32, 23, 20, 15, 23, 14, 17, 13, 10, + 14, 44, 36, 31, 27, 30, 12, 4, 2, 64, 70, 51, + 29, 6, 64, 13, 1, 73, 69, 4, 42, 31, 14, 5, + 19, 5, 3, 67, 68, 62, 74, 67, 2, 1, 0, 0, 8, + 12, 3, 10, 13, 22, 70, 65, 75, 69, 18, 74, 75, + 72, 0, 2, 69, 76, 69, 77, 69, 71, 86, 12, 11, + 25, 4, 65, 11, 7, 2, 6, 5, 1, 72, 0, 66, 70, + 67, 13, 94, 76, 16, 78, 0, 70, 65, 11, 70, 72, + 4, 6, 86, 73, 93, 23, 26, 29, 12, 4, 8, 5, 1, + 65, 72, 72, 73, 85, 82, 87, 97, 90, 96, 113, + 92, 91, 89, 87, 96, 87, 94, 93, 84, 91, 6, 4, + 3, 1, 79, 72, 73, 90, 80, 87, 89, 107, 95, + 100, 104, 77, 75, 108, 75, 78, 86, 100, 91, + 97, 99, 85, 99, 93, 99, 105, 105, 109, 92, + 100, 105, 72, 66, 11, 0, 25, 34, 64, 5, 14, + 18, 5, 17, 32, 4, 0, 32, 65, 93, 114, 126, + 126, 126, 126, 126, 5, 39, 30, 26, 16, 28, 15, + 8, 6, 64, 73, 68, 9, 0, 21, 30, 1, 2, 10, 14, + 6, 12, 25, 7, 1, 32, 65, 93, 114, 126, 126, + 126, 126, 126 }, + + { + + 28, + 4, 81, 28, 4, 81, 6, 17, 25, 12, 68, 80, 85, + 23, 59, 12, 18, 70, 7, 17, 64, 72, 1, 79, 99, + 69, 100, 126, 126, 126, 49, 0, 66, 7, 17, 64, + 84, 6, 11, 0, 64, 69, 71, 64, 80, 79, 92, 5, + 66, 70, 4, 73, 68, 82, 0, 74, 72, 81, 4, 2, + 22, 0, 0, 0, 3, 96, 97, 9, 73, 69, 16, 68, 85, + 34, 17, 10, 47, 53, 21, 24, 12, 24, 6, 6, 26, + 80, 76, 76, 82, 24, 65, 17, 24, 68, 74, 68, + 14, 1, 73, 72, 81, 18, 68, 7, 65, 70, 5, 66, + 6, 7, 6, 11, 18, 10, 1, 7, 62, 62, 61, 51, 7, + 65, 2, 11, 64, 11, 11, 3, 69, 29, 67, 100, 97, + 46, 9, 15, 5, 6, 10, 16, 42, 24, 11, 64, 1, 2, + 17, 21, 100, 2, 5, 78, 0, 70, 9, 8, 69, 19, + 12, 12, 85, 7, 75, 72, 7, 89, 8, 10, 7, 71, + 87, 3, 70, 65, 70, 85, 79, 68, 126, 62, 125, + 78, 82, 87, 98, 88, 96, 114, 104, 105, 87, + 108, 81, 62, 103, 6, 8, 1, 67, 68, 67, 71, 71, + 72, 86, 87, 85, 88, 90, 113, 75, 77, 97, 70, + 76, 77, 82, 87, 92, 90, 93, 94, 83, 96, 100, + 92, 91, 9, 30, 20, 10, 10, 14, 6, 2, 1, 21, + 15, 32, 23, 20, 16, 24, 15, 19, 15, 11, 15, + 44, 36, 31, 28, 31, 12, 4, 2, 0, 71, 52, 29, + 5, 64, 13, 1, 73, 69, 4, 42, 30, 13, 4, 19, 5, + 3, 67, 68, 62, 73, 66, 3, 2, 2, 1, 10, 14, 4, + 11, 15, 24, 70, 65, 75, 68, 19, 74, 75, 72, 1, + 2, 69, 76, 69, 78, 69, 71, 86, 12, 11, 26, 4, + 66, 11, 7, 1, 6, 5, 1, 73, 0, 66, 70, 67, 14, + 95, 77, 16, 80, 64, 71, 66, 10, 71, 73, 4, 6, + 87, 73, 95, 22, 24, 28, 10, 2, 6, 3, 64, 67, + 75, 75, 76, 88, 85, 89, 101, 94, 101, 118, 96, + 95, 92, 90, 99, 89, 96, 94, 85, 92, 4, 2, 0, + 65, 82, 75, 76, 93, 83, 90, 92, 110, 97, 102, + 106, 78, 76, 110, 77, 79, 88, 102, 93, 99, + 101, 87, 101, 95, 100, 106, 106, 110, 94, 101, + 106, 72, 66, 11, 0, 26, 35, 64, 5, 15, 19, 5, + 17, 32, 4, 64, 31, 67, 96, 117, 126, 126, 126, + 126, 126, 5, 39, 30, 26, 16, 29, 15, 8, 6, 64, + 73, 68, 9, 0, 21, 30, 1, 2, 10, 14, 6, 12, 26, + 7, 0, 31, 67, 96, 117, 126, 126, 126, 126, 126 }, + + { + + 27, + 4, 81, 27, 4, 81, 8, 18, 26, 12, 68, 81, 87, + 22, 60, 12, 20, 70, 8, 18, 64, 73, 1, 79, 100, + 70, 102, 126, 126, 126, 52, 1, 65, 8, 18, 64, + 84, 7, 11, 0, 0, 69, 70, 64, 80, 79, 92, 5, + 66, 69, 4, 73, 68, 82, 0, 74, 72, 80, 4, 2, + 22, 0, 0, 0, 4, 96, 97, 9, 74, 69, 15, 68, 85, + 36, 19, 11, 49, 55, 23, 25, 14, 26, 7, 8, 29, + 80, 76, 76, 81, 24, 65, 18, 26, 67, 73, 67, + 16, 1, 73, 72, 81, 18, 68, 7, 64, 69, 6, 65, + 7, 8, 7, 12, 20, 11, 3, 8, 62, 62, 62, 54, 8, + 65, 3, 12, 64, 11, 11, 4, 68, 32, 67, 102, 98, + 49, 9, 15, 5, 6, 10, 17, 44, 25, 11, 64, 1, 2, + 18, 22, 101, 3, 5, 78, 64, 71, 8, 8, 70, 19, + 12, 12, 86, 8, 76, 72, 6, 89, 8, 10, 7, 73, + 90, 2, 71, 67, 72, 87, 81, 70, 126, 62, 126, + 80, 84, 89, 101, 90, 99, 118, 108, 107, 89, + 111, 83, 62, 105, 4, 6, 64, 69, 70, 69, 73, + 73, 74, 88, 89, 86, 89, 91, 115, 75, 77, 97, + 70, 77, 78, 83, 88, 93, 91, 95, 95, 83, 97, + 101, 92, 90, 10, 31, 20, 10, 10, 15, 7, 3, 2, + 24, 16, 32, 23, 20, 17, 25, 16, 21, 17, 13, + 16, 45, 37, 32, 29, 32, 12, 5, 2, 1, 71, 53, + 29, 4, 64, 14, 2, 73, 68, 4, 42, 30, 12, 3, + 19, 5, 3, 67, 67, 62, 72, 65, 5, 4, 4, 2, 12, + 16, 5, 13, 17, 26, 69, 64, 74, 67, 21, 73, 74, + 71, 2, 3, 69, 76, 69, 79, 69, 71, 86, 12, 12, + 27, 5, 66, 12, 7, 1, 6, 5, 1, 74, 0, 65, 69, + 67, 15, 95, 78, 16, 81, 65, 71, 66, 10, 71, + 74, 4, 6, 88, 73, 96, 21, 23, 28, 9, 0, 4, 1, + 66, 69, 77, 78, 79, 91, 88, 91, 105, 98, 105, + 123, 99, 98, 95, 92, 101, 90, 97, 95, 85, 93, + 2, 0, 65, 67, 84, 77, 78, 96, 85, 92, 94, 112, + 99, 104, 108, 78, 77, 111, 78, 80, 90, 104, + 94, 100, 103, 88, 103, 96, 100, 107, 106, 111, + 96, 102, 107, 72, 65, 12, 0, 27, 37, 0, 6, 16, + 20, 5, 18, 33, 4, 64, 30, 69, 98, 120, 126, + 126, 126, 126, 126, 5, 39, 30, 27, 17, 30, 16, + 9, 7, 64, 73, 68, 9, 1, 22, 31, 1, 3, 10, 14, + 6, 13, 27, 7, 0, 30, 69, 98, 120, 126, 126, + 126, 126, 126 }, + + { + + 26, + 4, 81, 26, 4, 81, 10, 20, 26, 12, 69, 82, 89, + 21, 60, 12, 22, 70, 8, 19, 65, 73, 1, 80, 102, + 71, 105, 126, 126, 126, 55, 2, 65, 8, 19, 65, + 84, 8, 11, 64, 0, 68, 69, 64, 80, 79, 92, 5, + 66, 69, 4, 73, 67, 81, 0, 74, 72, 80, 5, 2, + 22, 0, 0, 0, 4, 96, 97, 10, 75, 69, 14, 69, + 85, 39, 20, 12, 51, 57, 24, 27, 15, 27, 9, 9, + 31, 80, 75, 75, 81, 24, 65, 19, 28, 67, 72, + 67, 18, 1, 74, 73, 82, 18, 68, 8, 64, 68, 7, + 65, 8, 8, 8, 14, 21, 12, 4, 9, 62, 62, 62, 57, + 8, 64, 3, 12, 64, 11, 12, 4, 68, 34, 67, 104, + 100, 52, 9, 16, 5, 6, 10, 17, 45, 26, 12, 65, + 1, 2, 18, 22, 102, 3, 5, 79, 64, 72, 8, 7, 70, + 19, 12, 12, 87, 8, 77, 73, 6, 89, 8, 9, 6, 75, + 93, 1, 73, 69, 74, 89, 84, 72, 126, 62, 126, + 82, 86, 92, 104, 93, 102, 123, 112, 110, 91, + 115, 85, 62, 106, 2, 4, 66, 71, 72, 71, 75, + 75, 76, 91, 91, 88, 91, 93, 117, 75, 77, 98, + 71, 78, 79, 85, 89, 94, 92, 96, 96, 84, 98, + 101, 93, 89, 12, 32, 21, 10, 11, 15, 7, 3, 3, + 26, 18, 32, 24, 21, 17, 26, 17, 22, 18, 15, + 16, 46, 38, 33, 29, 33, 13, 5, 3, 1, 71, 53, + 29, 4, 65, 14, 2, 73, 68, 4, 41, 29, 11, 2, + 19, 5, 4, 67, 67, 62, 70, 0, 6, 6, 5, 3, 13, + 17, 6, 15, 18, 28, 68, 0, 74, 66, 23, 73, 74, + 71, 2, 3, 69, 77, 69, 79, 69, 71, 87, 13, 12, + 28, 5, 66, 12, 7, 1, 6, 5, 1, 74, 0, 65, 69, + 67, 15, 96, 79, 16, 82, 65, 72, 67, 10, 72, + 75, 4, 6, 89, 73, 97, 20, 22, 27, 7, 65, 2, + 64, 69, 72, 80, 81, 82, 94, 90, 93, 110, 102, + 109, 126, 102, 101, 97, 94, 104, 92, 99, 97, + 86, 93, 64, 66, 68, 69, 87, 80, 81, 99, 87, + 95, 96, 115, 101, 106, 109, 79, 77, 113, 79, + 82, 91, 106, 96, 102, 104, 89, 104, 97, 101, + 109, 107, 111, 97, 104, 109, 71, 65, 13, 1, + 28, 38, 0, 7, 16, 20, 5, 18, 34, 4, 64, 29, + 71, 101, 123, 126, 126, 126, 126, 126, 6, 39, + 30, 27, 17, 30, 16, 9, 7, 0, 73, 68, 10, 1, + 23, 32, 1, 3, 11, 15, 6, 13, 27, 7, 0, 29, 71, + 101, 123, 126, 126, 126, 126, 126 }, + + { + + 25, + 4, 82, 25, 4, 82, 12, 21, 27, 12, 69, 84, 91, + 20, 60, 12, 23, 70, 9, 19, 65, 74, 2, 80, 103, + 73, 107, 126, 126, 126, 57, 3, 65, 9, 19, 65, + 85, 8, 11, 64, 0, 68, 69, 64, 80, 78, 91, 5, + 65, 68, 4, 72, 67, 81, 0, 74, 72, 80, 5, 2, + 22, 0, 0, 0, 5, 96, 97, 10, 75, 70, 14, 69, + 85, 41, 21, 13, 52, 60, 26, 28, 17, 29, 10, + 10, 33, 80, 75, 75, 81, 24, 65, 20, 31, 67, + 71, 66, 20, 0, 74, 73, 82, 19, 68, 8, 0, 68, + 7, 64, 9, 9, 9, 15, 23, 12, 5, 10, 62, 62, 62, + 60, 8, 64, 3, 13, 64, 11, 12, 5, 67, 36, 66, + 106, 102, 55, 9, 16, 5, 6, 11, 18, 47, 27, 12, + 65, 1, 2, 19, 23, 103, 3, 5, 79, 65, 73, 7, 7, + 71, 19, 12, 12, 89, 8, 78, 74, 5, 89, 8, 9, 6, + 77, 96, 0, 75, 72, 77, 91, 86, 74, 126, 62, + 126, 84, 87, 94, 108, 95, 105, 126, 117, 113, + 93, 118, 87, 62, 108, 0, 2, 68, 74, 75, 73, + 78, 77, 78, 93, 94, 90, 93, 94, 118, 75, 77, + 98, 72, 79, 80, 86, 90, 95, 93, 98, 97, 84, + 99, 102, 93, 89, 13, 33, 21, 10, 11, 16, 8, 4, + 3, 28, 19, 33, 24, 21, 18, 27, 18, 24, 20, 17, + 17, 46, 38, 33, 30, 34, 13, 5, 3, 2, 71, 54, + 29, 3, 65, 14, 2, 73, 67, 3, 41, 29, 10, 1, + 18, 5, 4, 67, 67, 62, 69, 1, 7, 7, 7, 4, 15, + 19, 7, 16, 20, 30, 68, 1, 73, 65, 25, 72, 74, + 71, 3, 4, 69, 77, 69, 80, 69, 71, 87, 13, 13, + 29, 5, 66, 13, 8, 1, 7, 6, 1, 75, 0, 65, 69, + 67, 16, 97, 80, 16, 83, 66, 73, 67, 10, 73, + 75, 4, 5, 91, 74, 98, 18, 21, 26, 6, 67, 0, + 66, 71, 74, 82, 84, 84, 97, 93, 95, 114, 106, + 113, 126, 106, 104, 100, 96, 106, 94, 101, 98, + 87, 94, 66, 68, 70, 72, 90, 82, 83, 102, 90, + 97, 99, 118, 103, 107, 111, 80, 78, 114, 81, + 83, 93, 108, 97, 104, 106, 90, 106, 98, 102, + 110, 108, 112, 99, 105, 110, 71, 64, 13, 1, + 29, 39, 0, 7, 17, 21, 5, 19, 35, 4, 64, 28, + 73, 103, 126, 126, 126, 126, 126, 126, 6, 39, + 30, 27, 17, 31, 17, 9, 7, 0, 72, 67, 10, 2, + 24, 33, 2, 4, 11, 15, 6, 13, 28, 7, 0, 28, 73, + 103, 126, 126, 126, 126, 126, 126 }, + + { + + 23, + 4, 82, 23, 4, 82, 13, 23, 27, 12, 70, 85, 93, + 19, 60, 11, 25, 70, 9, 20, 65, 74, 2, 81, 105, + 74, 110, 126, 126, 126, 60, 4, 65, 9, 20, 65, + 85, 9, 11, 65, 0, 68, 68, 64, 80, 78, 91, 5, + 65, 68, 4, 72, 66, 81, 0, 74, 72, 80, 5, 2, + 22, 0, 0, 0, 5, 97, 97, 11, 76, 70, 13, 70, + 85, 44, 22, 14, 54, 62, 27, 30, 19, 30, 11, + 11, 35, 80, 75, 74, 81, 24, 65, 21, 33, 67, + 71, 66, 22, 0, 75, 74, 83, 19, 68, 9, 0, 67, + 8, 64, 10, 9, 9, 17, 24, 13, 6, 11, 62, 62, + 62, 62, 8, 64, 3, 13, 64, 11, 13, 5, 67, 38, + 66, 108, 104, 57, 9, 16, 5, 6, 11, 18, 48, 28, + 12, 65, 1, 2, 19, 24, 104, 3, 5, 80, 65, 74, + 7, 7, 71, 19, 12, 12, 90, 8, 79, 75, 5, 89, 7, + 8, 5, 79, 100, 64, 77, 74, 79, 93, 89, 76, + 126, 62, 126, 86, 89, 96, 111, 98, 109, 126, + 121, 116, 95, 122, 89, 62, 110, 65, 0, 71, 76, + 77, 75, 80, 79, 80, 95, 96, 92, 95, 96, 120, + 75, 77, 99, 73, 80, 81, 87, 91, 97, 94, 100, + 98, 85, 100, 103, 94, 88, 15, 34, 22, 10, 11, + 17, 8, 4, 4, 30, 20, 33, 24, 22, 19, 28, 19, + 25, 21, 18, 18, 47, 39, 34, 30, 35, 14, 5, 3, + 2, 71, 54, 29, 2, 65, 14, 2, 73, 67, 3, 40, + 28, 9, 0, 18, 5, 4, 67, 67, 62, 68, 3, 8, 9, + 8, 5, 17, 21, 8, 18, 22, 32, 67, 2, 73, 64, + 26, 72, 74, 71, 3, 4, 69, 77, 69, 80, 69, 71, + 88, 14, 13, 30, 5, 66, 13, 8, 1, 7, 6, 1, 75, + 0, 65, 69, 67, 16, 98, 81, 16, 84, 67, 74, 68, + 10, 74, 76, 4, 5, 92, 74, 99, 17, 20, 25, 4, + 69, 65, 68, 73, 77, 85, 87, 87, 100, 95, 97, + 118, 110, 117, 126, 109, 108, 102, 99, 109, + 96, 103, 100, 88, 95, 68, 71, 73, 74, 93, 85, + 86, 105, 92, 100, 101, 121, 105, 109, 112, 81, + 79, 116, 82, 85, 95, 110, 99, 106, 108, 91, + 107, 99, 103, 111, 109, 113, 100, 106, 111, + 71, 64, 14, 2, 30, 40, 0, 8, 17, 21, 5, 19, + 36, 4, 64, 27, 75, 106, 126, 126, 126, 126, + 126, 126, 6, 39, 30, 27, 17, 31, 17, 9, 7, 1, + 72, 67, 11, 2, 24, 34, 2, 4, 11, 15, 6, 13, + 28, 7, 0, 27, 75, 106, 126, 126, 126, 126, + 126, 126 }, + + { + + 22, + 4, 82, 22, 4, 82, 15, 24, 27, 12, 70, 86, 95, + 18, 60, 11, 27, 70, 9, 21, 66, 75, 2, 82, 107, + 75, 112, 126, 126, 126, 62, 5, 64, 9, 21, 66, + 85, 10, 11, 65, 0, 67, 67, 64, 80, 78, 91, 5, + 65, 68, 4, 72, 66, 80, 0, 74, 72, 80, 6, 2, + 22, 0, 0, 0, 6, 97, 97, 11, 77, 70, 12, 70, + 85, 46, 23, 15, 56, 62, 29, 31, 20, 32, 13, + 12, 38, 80, 74, 74, 80, 24, 65, 22, 35, 67, + 70, 65, 24, 0, 75, 74, 83, 19, 68, 9, 1, 66, + 9, 0, 11, 10, 10, 18, 26, 14, 8, 12, 62, 62, + 62, 62, 9, 0, 4, 14, 64, 11, 13, 5, 66, 40, + 66, 110, 106, 60, 9, 17, 5, 6, 11, 19, 50, 29, + 13, 66, 1, 2, 20, 24, 105, 4, 5, 80, 66, 75, + 6, 6, 72, 19, 12, 12, 91, 9, 80, 75, 4, 89, 7, + 7, 4, 81, 103, 65, 78, 76, 81, 95, 91, 78, + 126, 62, 126, 88, 91, 99, 114, 100, 112, 126, + 125, 118, 97, 125, 91, 62, 111, 67, 65, 73, + 78, 79, 77, 82, 81, 82, 98, 98, 94, 96, 98, + 122, 75, 77, 99, 74, 81, 82, 89, 92, 98, 95, + 101, 99, 85, 101, 103, 95, 87, 16, 35, 22, 10, + 12, 17, 9, 5, 5, 32, 22, 33, 25, 22, 19, 29, + 20, 27, 23, 20, 18, 48, 40, 35, 31, 36, 14, 6, + 4, 3, 71, 55, 29, 2, 66, 14, 2, 73, 66, 3, 40, + 27, 8, 64, 18, 5, 5, 67, 66, 62, 66, 4, 10, + 11, 10, 6, 18, 22, 9, 20, 23, 34, 66, 3, 72, + 0, 28, 72, 74, 70, 4, 5, 69, 78, 69, 81, 69, + 71, 88, 14, 13, 31, 5, 66, 13, 8, 1, 7, 6, 1, + 76, 0, 65, 69, 67, 17, 99, 82, 16, 85, 67, 74, + 69, 10, 74, 77, 4, 5, 93, 74, 100, 16, 19, 24, + 2, 71, 67, 70, 76, 79, 88, 90, 90, 103, 98, + 99, 123, 114, 121, 126, 112, 111, 105, 101, + 111, 98, 104, 101, 88, 95, 71, 73, 75, 76, 96, + 88, 88, 108, 94, 102, 103, 124, 107, 111, 114, + 81, 79, 118, 83, 86, 96, 112, 101, 108, 109, + 92, 109, 100, 103, 113, 110, 113, 102, 108, + 113, 70, 64, 15, 2, 31, 41, 1, 9, 18, 22, 5, + 20, 37, 4, 64, 26, 77, 109, 126, 126, 126, + 126, 126, 126, 7, 39, 30, 27, 17, 32, 17, 10, + 8, 1, 72, 67, 11, 2, 25, 35, 2, 4, 12, 16, 6, + 14, 29, 7, 0, 26, 77, 109, 126, 126, 126, 126, + 126, 126 }, + + { + + 21, + 4, 82, 21, 4, 82, 17, 26, 28, 12, 71, 88, 97, + 17, 60, 11, 29, 70, 10, 22, 66, 75, 2, 82, + 108, 76, 115, 126, 126, 126, 62, 6, 64, 10, + 22, 66, 86, 11, 11, 66, 0, 67, 67, 64, 80, 78, + 91, 5, 65, 67, 4, 72, 65, 80, 0, 74, 72, 80, + 6, 2, 22, 0, 0, 0, 6, 97, 97, 12, 78, 70, 11, + 71, 85, 49, 24, 16, 57, 62, 30, 33, 22, 33, + 14, 13, 40, 80, 74, 73, 80, 24, 65, 23, 37, + 67, 69, 65, 26, 0, 76, 75, 84, 19, 68, 10, 1, + 65, 10, 0, 12, 10, 11, 20, 27, 14, 9, 13, 62, + 62, 62, 62, 9, 0, 4, 14, 64, 11, 14, 6, 66, + 42, 66, 112, 108, 62, 9, 17, 5, 6, 11, 19, 51, + 30, 13, 66, 1, 2, 20, 25, 106, 4, 5, 81, 66, + 76, 6, 6, 72, 19, 12, 12, 92, 9, 81, 76, 4, + 89, 7, 7, 4, 83, 106, 66, 80, 78, 84, 97, 94, + 80, 126, 62, 126, 90, 93, 101, 117, 103, 115, + 126, 126, 121, 99, 126, 93, 62, 113, 69, 67, + 75, 81, 82, 79, 84, 83, 84, 100, 100, 96, 98, + 99, 124, 75, 77, 100, 75, 82, 83, 90, 93, 99, + 96, 103, 100, 86, 102, 104, 95, 87, 18, 36, + 23, 10, 12, 18, 9, 5, 5, 34, 23, 33, 25, 23, + 20, 30, 21, 28, 24, 22, 19, 48, 40, 35, 31, + 37, 15, 6, 4, 3, 71, 55, 29, 1, 66, 14, 2, 73, + 66, 3, 39, 27, 7, 65, 18, 5, 5, 67, 66, 62, + 65, 6, 11, 12, 11, 7, 20, 24, 10, 21, 25, 36, + 66, 4, 72, 1, 30, 71, 74, 70, 4, 5, 69, 78, + 69, 81, 69, 71, 89, 15, 14, 32, 5, 66, 14, 8, + 1, 7, 6, 1, 76, 0, 65, 69, 67, 17, 100, 83, + 16, 86, 68, 75, 69, 10, 75, 78, 4, 5, 94, 74, + 101, 15, 18, 23, 1, 73, 69, 72, 78, 82, 90, + 93, 93, 106, 100, 101, 126, 118, 125, 126, + 116, 114, 107, 103, 114, 100, 106, 103, 89, + 96, 73, 76, 78, 79, 99, 90, 91, 111, 97, 105, + 106, 126, 109, 113, 115, 82, 80, 119, 85, 88, + 98, 114, 102, 110, 111, 93, 110, 101, 104, + 114, 111, 114, 103, 109, 114, 70, 0, 15, 3, + 32, 42, 1, 9, 18, 22, 5, 20, 38, 4, 64, 25, + 79, 111, 126, 126, 126, 126, 126, 126, 7, 39, + 30, 27, 17, 32, 18, 10, 8, 2, 72, 67, 12, 3, + 26, 36, 2, 5, 12, 16, 6, 14, 29, 7, 0, 25, 79, + 111, 126, 126, 126, 126, 126, 126 }, + + { + + 20, + 4, 82, 20, 4, 82, 19, 27, 28, 12, 71, 89, 99, + 16, 60, 11, 31, 70, 10, 23, 66, 76, 2, 83, + 110, 77, 117, 126, 126, 126, 62, 7, 64, 10, + 23, 66, 86, 12, 11, 66, 0, 67, 66, 64, 80, 78, + 91, 5, 65, 67, 4, 72, 65, 80, 0, 74, 72, 80, + 6, 2, 22, 0, 0, 0, 7, 97, 97, 12, 79, 70, 10, + 71, 85, 51, 25, 17, 59, 62, 32, 34, 24, 35, + 15, 14, 42, 80, 74, 73, 80, 24, 65, 24, 39, + 67, 68, 64, 28, 0, 76, 75, 84, 19, 68, 10, 2, + 64, 11, 1, 13, 11, 12, 21, 29, 15, 10, 14, 62, + 62, 62, 62, 9, 0, 4, 15, 64, 11, 14, 6, 65, + 44, 66, 114, 110, 62, 9, 17, 5, 6, 11, 20, 53, + 31, 13, 66, 1, 2, 21, 26, 107, 4, 5, 81, 67, + 77, 5, 6, 73, 19, 12, 12, 93, 9, 82, 77, 3, + 89, 7, 6, 3, 85, 109, 67, 82, 80, 86, 99, 96, + 82, 126, 62, 126, 92, 95, 103, 120, 105, 118, + 126, 126, 124, 101, 126, 95, 62, 115, 71, 69, + 77, 83, 84, 81, 86, 85, 86, 102, 102, 98, 100, + 101, 126, 75, 77, 100, 76, 83, 84, 91, 94, + 100, 97, 105, 101, 86, 103, 105, 96, 86, 19, + 37, 23, 10, 12, 19, 10, 6, 6, 36, 24, 33, 25, + 23, 21, 31, 22, 30, 26, 24, 20, 49, 41, 36, + 32, 38, 15, 6, 4, 4, 71, 56, 29, 0, 66, 14, 2, + 73, 65, 3, 39, 26, 6, 66, 18, 5, 5, 67, 66, + 62, 64, 7, 12, 14, 13, 8, 22, 26, 11, 23, 27, + 38, 65, 5, 71, 2, 32, 71, 74, 70, 5, 6, 69, + 78, 69, 82, 69, 71, 89, 15, 14, 33, 5, 66, 14, + 8, 1, 7, 6, 1, 77, 0, 65, 69, 67, 18, 101, 84, + 16, 87, 69, 76, 70, 10, 76, 79, 4, 5, 95, 74, + 102, 14, 17, 22, 64, 75, 71, 74, 80, 84, 93, + 96, 96, 109, 103, 103, 126, 122, 126, 126, + 119, 117, 110, 105, 116, 102, 108, 104, 90, + 97, 75, 78, 80, 81, 102, 93, 93, 114, 99, 107, + 108, 126, 111, 115, 117, 83, 81, 121, 86, 89, + 100, 116, 104, 112, 113, 94, 112, 102, 105, + 115, 112, 115, 105, 110, 115, 70, 0, 16, 3, + 33, 43, 1, 10, 19, 23, 5, 21, 39, 4, 64, 24, + 81, 114, 126, 126, 126, 126, 126, 126, 7, 39, + 30, 27, 17, 33, 18, 10, 8, 2, 72, 67, 12, 3, + 27, 37, 2, 5, 12, 16, 6, 14, 30, 7, 0, 24, 81, + 114, 126, 126, 126, 126, 126, 126 }, + + { + + 18, + 3, 83, 18, 3, 83, 20, 28, 28, 12, 72, 91, 102, + 15, 60, 10, 32, 71, 10, 23, 67, 77, 2, 84, + 112, 79, 120, 126, 126, 126, 62, 7, 64, 10, + 23, 67, 87, 12, 11, 67, 0, 67, 66, 65, 81, 78, + 91, 4, 65, 67, 4, 72, 65, 80, 0, 74, 73, 80, + 6, 2, 22, 0, 0, 0, 7, 98, 97, 12, 80, 71, 9, + 72, 86, 53, 26, 18, 60, 62, 33, 35, 25, 36, + 16, 15, 44, 80, 74, 73, 80, 24, 65, 24, 41, + 67, 68, 64, 29, 64, 77, 76, 85, 19, 68, 10, 2, + 64, 11, 1, 13, 11, 12, 22, 30, 15, 11, 15, 62, + 62, 62, 62, 9, 0, 4, 15, 65, 11, 14, 6, 65, + 46, 66, 116, 112, 62, 9, 17, 5, 6, 11, 20, 54, + 31, 13, 67, 0, 2, 21, 26, 109, 4, 5, 82, 68, + 79, 4, 5, 74, 19, 12, 11, 95, 9, 83, 78, 2, + 89, 6, 5, 2, 88, 113, 69, 84, 83, 89, 102, 99, + 84, 126, 62, 126, 95, 97, 106, 124, 108, 122, + 126, 126, 126, 103, 126, 97, 62, 117, 74, 72, + 80, 86, 87, 84, 89, 88, 88, 105, 105, 100, + 102, 103, 126, 75, 78, 101, 77, 85, 86, 93, + 96, 102, 99, 107, 102, 87, 104, 106, 97, 86, + 20, 37, 23, 10, 12, 19, 10, 6, 6, 38, 25, 33, + 25, 23, 21, 31, 23, 31, 27, 25, 20, 49, 41, + 36, 32, 39, 15, 6, 4, 4, 72, 56, 28, 64, 67, + 14, 2, 73, 65, 2, 38, 25, 4, 67, 17, 5, 5, 67, + 66, 62, 0, 8, 13, 15, 14, 9, 23, 27, 12, 24, + 28, 40, 65, 5, 71, 3, 33, 71, 74, 70, 5, 6, + 69, 79, 70, 83, 69, 72, 90, 15, 14, 34, 5, 67, + 14, 8, 0, 7, 6, 1, 78, 0, 65, 69, 67, 18, 102, + 85, 16, 89, 70, 77, 71, 9, 77, 80, 4, 4, 97, + 75, 104, 12, 15, 21, 66, 77, 74, 77, 83, 87, + 96, 99, 99, 113, 106, 105, 126, 126, 126, 126, + 123, 121, 113, 108, 119, 104, 110, 106, 91, + 98, 78, 81, 83, 84, 105, 96, 96, 118, 102, + 110, 111, 126, 113, 117, 119, 84, 82, 123, 88, + 91, 102, 119, 106, 114, 115, 96, 114, 104, + 106, 117, 113, 116, 107, 112, 117, 70, 0, 16, + 3, 34, 44, 1, 10, 19, 23, 5, 21, 39, 4, 65, + 22, 83, 117, 126, 126, 126, 126, 126, 126, 7, + 39, 30, 27, 17, 33, 18, 10, 8, 2, 72, 67, 12, + 3, 27, 37, 2, 5, 12, 16, 6, 14, 30, 6, 64, 22, + 83, 117, 126, 126, 126, 126, 126, 126 }, + + { + + 17, + 3, 83, 17, 3, 83, 22, 30, 29, 13, 72, 92, 104, + 14, 61, 10, 34, 71, 11, 24, 67, 77, 3, 84, + 113, 80, 122, 126, 126, 126, 62, 8, 0, 11, 24, + 67, 87, 13, 11, 67, 1, 66, 65, 65, 81, 77, 90, + 4, 64, 66, 4, 71, 64, 79, 1, 73, 73, 79, 7, 2, + 22, 0, 0, 0, 8, 98, 97, 13, 80, 71, 9, 72, 86, + 56, 28, 20, 62, 62, 35, 37, 27, 38, 18, 17, + 47, 80, 73, 72, 79, 24, 65, 25, 44, 66, 67, 0, + 31, 64, 77, 76, 85, 20, 68, 11, 3, 0, 12, 2, + 14, 12, 13, 24, 32, 16, 13, 17, 62, 62, 62, + 62, 10, 1, 5, 16, 65, 12, 15, 7, 64, 49, 65, + 118, 113, 62, 9, 18, 5, 7, 12, 21, 56, 32, 14, + 67, 0, 2, 22, 27, 110, 5, 5, 82, 68, 80, 4, 5, + 74, 19, 12, 11, 96, 10, 83, 78, 2, 89, 6, 5, + 2, 90, 116, 70, 85, 85, 91, 104, 101, 86, 126, + 62, 126, 97, 98, 108, 126, 110, 125, 126, 126, + 126, 105, 126, 99, 62, 118, 76, 74, 82, 88, + 89, 86, 91, 90, 90, 107, 107, 101, 103, 104, + 126, 75, 78, 101, 77, 86, 87, 94, 97, 103, + 100, 108, 103, 87, 105, 106, 97, 85, 22, 38, + 24, 10, 13, 20, 11, 7, 7, 41, 27, 34, 26, 24, + 22, 32, 25, 33, 29, 27, 21, 50, 42, 37, 33, + 40, 16, 7, 5, 5, 72, 57, 28, 64, 67, 15, 3, + 73, 64, 2, 38, 25, 3, 68, 17, 6, 6, 66, 65, + 62, 2, 10, 15, 17, 16, 11, 25, 29, 14, 26, 30, + 43, 64, 6, 70, 5, 35, 70, 73, 69, 6, 7, 68, + 79, 70, 83, 69, 72, 90, 16, 15, 35, 6, 67, 15, + 9, 0, 8, 7, 1, 78, 1, 64, 68, 66, 19, 102, 86, + 16, 90, 70, 77, 71, 9, 77, 80, 4, 4, 98, 75, + 105, 11, 14, 21, 67, 78, 76, 79, 85, 89, 98, + 101, 101, 116, 108, 107, 126, 126, 126, 126, + 126, 124, 115, 110, 121, 105, 111, 107, 91, + 98, 80, 83, 85, 86, 107, 98, 98, 121, 104, + 112, 113, 126, 114, 118, 120, 84, 82, 124, 89, + 92, 103, 121, 107, 115, 116, 97, 115, 105, + 106, 118, 113, 116, 108, 113, 118, 69, 1, 17, + 4, 36, 46, 2, 11, 20, 24, 6, 22, 40, 4, 65, + 21, 85, 119, 126, 126, 126, 126, 126, 126, 8, + 39, 31, 28, 18, 34, 19, 11, 9, 3, 71, 66, 13, + 4, 28, 38, 3, 6, 13, 17, 6, 15, 31, 6, 64, 21, + 85, 119, 126, 126, 126, 126, 126, 126 }, + + { + + 16, + 3, 83, 16, 3, 83, 24, 31, 29, 13, 72, 93, 106, + 13, 61, 10, 36, 71, 11, 25, 67, 78, 3, 85, + 115, 81, 125, 126, 126, 126, 62, 9, 0, 11, 25, + 67, 87, 14, 11, 68, 1, 66, 64, 65, 81, 77, 90, + 4, 64, 66, 4, 71, 64, 79, 1, 73, 73, 79, 7, 2, + 22, 0, 0, 0, 9, 98, 97, 13, 81, 71, 8, 72, 86, + 58, 29, 21, 62, 62, 36, 38, 29, 39, 19, 18, + 49, 80, 73, 72, 79, 24, 65, 26, 46, 66, 66, 1, + 33, 64, 77, 76, 86, 20, 68, 11, 4, 1, 13, 3, + 15, 12, 14, 25, 33, 17, 14, 18, 62, 62, 62, + 62, 10, 1, 5, 16, 65, 12, 15, 7, 64, 51, 65, + 120, 115, 62, 9, 18, 5, 7, 12, 21, 58, 33, 14, + 67, 0, 2, 23, 28, 111, 5, 5, 82, 69, 81, 3, 5, + 75, 19, 12, 11, 97, 10, 84, 79, 1, 89, 6, 4, + 1, 92, 119, 71, 87, 87, 93, 106, 103, 88, 126, + 62, 126, 99, 100, 110, 126, 112, 126, 126, + 126, 126, 107, 126, 101, 62, 120, 78, 76, 84, + 90, 91, 88, 93, 92, 92, 109, 109, 103, 105, + 106, 126, 75, 78, 102, 78, 87, 88, 95, 98, + 104, 101, 110, 104, 87, 106, 107, 98, 84, 23, + 39, 24, 10, 13, 21, 12, 8, 8, 43, 28, 34, 26, + 24, 23, 33, 26, 35, 31, 29, 22, 51, 43, 38, + 34, 41, 16, 7, 5, 6, 72, 58, 28, 65, 67, 15, + 3, 73, 64, 2, 38, 24, 2, 69, 17, 6, 6, 66, 65, + 62, 3, 11, 16, 19, 18, 12, 27, 31, 15, 28, 32, + 45, 0, 7, 70, 6, 37, 70, 73, 69, 7, 7, 68, 79, + 70, 84, 69, 72, 90, 16, 15, 36, 6, 67, 15, 9, + 0, 8, 7, 1, 79, 1, 64, 68, 66, 20, 103, 87, + 16, 91, 71, 78, 72, 9, 78, 81, 4, 4, 99, 75, + 106, 10, 13, 20, 69, 80, 78, 81, 87, 91, 101, + 104, 104, 119, 111, 109, 126, 126, 126, 126, + 126, 126, 118, 112, 124, 107, 113, 108, 92, + 99, 82, 85, 88, 88, 110, 101, 101, 124, 106, + 115, 115, 126, 116, 120, 122, 85, 83, 126, 90, + 93, 105, 123, 109, 117, 118, 98, 117, 106, + 107, 119, 114, 117, 110, 114, 119, 69, 1, 18, + 4, 37, 47, 2, 12, 21, 25, 6, 22, 41, 4, 65, + 20, 87, 122, 126, 126, 126, 126, 126, 126, 8, + 39, 31, 28, 18, 35, 19, 11, 9, 3, 71, 66, 13, + 4, 29, 39, 3, 6, 13, 17, 6, 15, 32, 6, 64, 20, + 87, 122, 126, 126, 126, 126, 126, 126 }, + + { + + 15, + 3, 83, 15, 3, 83, 26, 33, 30, 13, 73, 95, 108, + 12, 61, 10, 38, 71, 12, 26, 67, 78, 3, 85, + 116, 82, 126, 126, 126, 126, 62, 10, 0, 12, + 26, 67, 88, 15, 11, 68, 1, 66, 64, 65, 81, 77, + 90, 4, 64, 65, 4, 71, 0, 79, 1, 73, 73, 79, 7, + 2, 22, 0, 0, 0, 9, 98, 97, 14, 82, 71, 7, 73, + 86, 61, 30, 22, 62, 62, 38, 40, 31, 41, 20, + 19, 51, 80, 73, 71, 79, 24, 65, 27, 48, 66, + 65, 1, 35, 64, 78, 77, 86, 20, 68, 12, 4, 2, + 14, 3, 16, 13, 15, 27, 35, 17, 15, 19, 62, 62, + 62, 62, 10, 1, 5, 17, 65, 12, 16, 8, 0, 53, + 65, 122, 117, 62, 9, 18, 5, 7, 12, 22, 59, 34, + 14, 67, 0, 2, 23, 29, 112, 5, 5, 83, 69, 82, + 3, 5, 75, 19, 12, 11, 98, 10, 85, 80, 1, 89, + 6, 4, 1, 94, 122, 72, 89, 89, 96, 108, 106, + 90, 126, 62, 126, 101, 102, 112, 126, 115, + 126, 126, 126, 126, 109, 126, 103, 62, 122, + 80, 78, 86, 93, 94, 90, 95, 94, 94, 111, 111, + 105, 107, 107, 126, 75, 78, 102, 79, 88, 89, + 96, 99, 105, 102, 112, 105, 88, 107, 108, 98, + 84, 25, 40, 25, 10, 13, 22, 12, 8, 8, 45, 29, + 34, 26, 25, 24, 34, 27, 36, 32, 31, 23, 51, + 43, 38, 34, 42, 17, 7, 5, 6, 72, 58, 28, 66, + 67, 15, 3, 73, 0, 2, 37, 24, 1, 70, 17, 6, 6, + 66, 65, 62, 4, 13, 17, 20, 19, 13, 29, 33, 16, + 29, 34, 47, 0, 8, 69, 7, 39, 69, 73, 69, 7, 8, + 68, 79, 70, 84, 69, 72, 91, 17, 16, 37, 6, 67, + 16, 9, 0, 8, 7, 1, 79, 1, 64, 68, 66, 20, 104, + 88, 16, 92, 72, 79, 72, 9, 79, 82, 4, 4, 100, + 75, 107, 9, 12, 19, 70, 82, 80, 83, 89, 94, + 103, 107, 107, 122, 113, 111, 126, 126, 126, + 126, 126, 126, 120, 114, 126, 109, 115, 110, + 93, 100, 84, 88, 90, 91, 113, 103, 103, 126, + 109, 117, 118, 126, 118, 122, 123, 86, 84, + 126, 92, 95, 107, 125, 110, 119, 120, 99, 118, + 107, 108, 120, 115, 118, 111, 115, 120, 69, 2, + 18, 5, 38, 48, 2, 12, 21, 25, 6, 23, 42, 4, + 65, 19, 89, 124, 126, 126, 126, 126, 126, 126, + 8, 39, 31, 28, 18, 35, 20, 11, 9, 4, 71, 66, + 14, 5, 30, 40, 3, 7, 13, 17, 6, 15, 32, 6, 64, + 19, 89, 124, 126, 126, 126, 126, 126, 126 }, + + }, + + { + + { + + 62, + 9, 74, 62, 9, 74, 126, 104, 10, 9, 12, 47, 62, + 62, 12, 1, 99, 47, 85, 102, 6, 6, 73, 6, 23, 53, + 62, 62, 21, 97, 126, 117, 74, 85, 102, 6, 93, + 88, 19, 8, 89, 103, 116, 6, 5, 84, 96, 0, 85, + 106, 0, 75, 90, 101, 8, 79, 75, 97, 13, 3, 22, + 0, 0, 0, 83, 86, 97, 72, 22, 1, 29, 88, 126, + 126, 91, 95, 84, 86, 89, 91, 126, 76, 103, 90, + 126, 80, 76, 84, 78, 8, 2, 83, 126, 79, 104, 91, + 126, 65, 79, 72, 92, 7, 68, 71, 98, 86, 88, 82, + 72, 67, 72, 89, 69, 4, 66, 6, 71, 71, 5, 74, 19, + 69, 1, 12, 16, 21, 22, 10, 76, 78, 83, 11, 67, + 90, 67, 72, 75, 80, 83, 64, 32, 64, 94, 75, 0, + 74, 28, 36, 91, 65, 69, 77, 66, 1, 68, 81, 33, + 56, 40, 74, 66, 124, 26, 62, 62, 126, 24, 21, + 29, 34, 32, 26, 21, 23, 30, 20, 27, 16, 8, 5, 3, + 19, 19, 21, 15, 7, 11, 26, 14, 5, 15, 18, 69, + 30, 0, 62, 62, 62, 53, 62, 62, 62, 62, 46, 38, + 34, 30, 48, 43, 73, 29, 32, 19, 47, 27, 27, 35, + 42, 43, 51, 47, 21, 93, 7, 6, 25, 126, 115, 82, + 1, 10, 4, 85, 89, 94, 92, 126, 100, 6, 67, 71, + 77, 85, 88, 104, 98, 126, 82, 15, 2, 66, 70, 75, + 79, 83, 92, 108, 79, 69, 75, 5, 5, 78, 83, 81, + 99, 81, 25, 1, 5, 4, 73, 76, 86, 83, 87, 62, + 126, 126, 120, 126, 114, 117, 118, 117, 113, + 118, 120, 124, 94, 102, 99, 106, 126, 92, 6, 86, + 94, 91, 77, 71, 73, 64, 81, 64, 6, 67, 68, 67, + 68, 77, 64, 68, 78, 8, 4, 65, 9, 19, 3, 70, 76, + 86, 70, 64, 70, 8, 7, 69, 65, 74, 9, 9, 76, 82, + 77, 77, 21, 62, 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 52, 62, 62, 62, 62, 62, 62, + 48, 62, 62, 46, 25, 18, 9, 79, 62, 62, 62, 62, + 48, 48, 38, 41, 47, 45, 35, 22, 35, 16, 1, 32, + 37, 39, 40, 47, 33, 34, 22, 21, 3, 11, 3, 78, + 123, 10, 7, 2, 30, 13, 2, 78, 74, 72, 72, 75, + 71, 0, 70, 75, 72, 67, 10, 4, 11, 68, 62, 62, + 62, 62, 56, 51, 40, 25, 64, 71, 26, 19, 14, 7, + 4, 0, 67, 68, 79, 78, 74, 72, 72, 75, 71, 0, 70, + 75, 72, 67, 10, 4, 11, 68, 62, 62, 62, 62, 56, + 51, 40, 25, 64 }, + + { + + 62, + 9, 74, 62, 9, 74, 125, 102, 11, 10, 12, 46, + 62, 62, 13, 2, 97, 46, 84, 100, 6, 6, 71, 6, + 22, 52, 62, 60, 19, 97, 125, 115, 73, 84, 100, + 6, 92, 87, 20, 8, 88, 102, 114, 5, 4, 84, 96, + 0, 84, 105, 0, 75, 89, 100, 8, 78, 74, 96, 14, + 3, 22, 0, 0, 0, 82, 86, 97, 71, 22, 1, 29, 87, + 125, 124, 89, 94, 82, 84, 88, 89, 125, 75, + 101, 89, 124, 80, 76, 84, 78, 9, 2, 82, 124, + 78, 103, 90, 125, 65, 78, 72, 91, 8, 68, 70, + 97, 85, 87, 81, 71, 66, 71, 88, 68, 5, 66, 6, + 70, 70, 5, 73, 20, 68, 1, 13, 17, 22, 23, 11, + 76, 77, 82, 11, 67, 89, 67, 71, 74, 79, 81, 1, + 33, 1, 92, 75, 64, 73, 29, 37, 91, 65, 68, 77, + 65, 1, 67, 79, 33, 56, 41, 72, 67, 122, 25, + 62, 62, 125, 24, 21, 29, 34, 32, 26, 21, 23, + 30, 20, 27, 16, 8, 5, 3, 19, 19, 21, 15, 7, + 11, 26, 14, 4, 15, 18, 69, 29, 0, 62, 62, 62, + 52, 62, 62, 62, 62, 45, 37, 32, 29, 46, 42, + 74, 28, 31, 18, 46, 27, 27, 34, 41, 42, 50, + 46, 20, 93, 7, 6, 24, 125, 113, 80, 2, 10, 4, + 84, 88, 93, 91, 125, 98, 7, 66, 70, 76, 83, + 87, 102, 97, 124, 81, 16, 3, 65, 69, 74, 78, + 82, 91, 106, 78, 67, 74, 6, 5, 77, 82, 80, 98, + 80, 26, 2, 6, 5, 72, 75, 85, 82, 86, 62, 125, + 125, 118, 125, 112, 115, 116, 115, 111, 116, + 118, 121, 93, 101, 98, 105, 123, 91, 5, 85, + 93, 90, 76, 71, 72, 64, 80, 64, 6, 67, 68, 66, + 68, 77, 64, 68, 77, 8, 4, 65, 9, 19, 3, 70, + 75, 84, 70, 64, 69, 8, 7, 69, 65, 73, 9, 9, + 75, 81, 76, 76, 20, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, 50, 62, 62, + 62, 62, 62, 62, 47, 60, 60, 45, 24, 17, 9, 79, + 62, 62, 62, 60, 46, 47, 37, 39, 46, 43, 34, + 20, 33, 15, 0, 31, 36, 37, 39, 46, 32, 33, 21, + 20, 2, 11, 3, 78, 122, 9, 6, 1, 29, 12, 1, 77, + 73, 71, 71, 73, 70, 1, 69, 73, 71, 66, 11, 5, + 12, 67, 62, 62, 62, 62, 54, 50, 38, 24, 65, + 70, 27, 20, 15, 8, 5, 1, 66, 67, 78, 77, 73, + 71, 71, 73, 70, 1, 69, 73, 71, 66, 11, 5, 12, + 67, 62, 62, 62, 62, 54, 50, 38, 24, 65 }, + + { + + 62, + 9, 74, 62, 9, 74, 123, 101, 11, 10, 12, 44, + 60, 62, 14, 2, 95, 44, 84, 99, 6, 6, 70, 5, + 21, 51, 60, 57, 17, 98, 123, 114, 73, 84, 99, + 6, 92, 86, 20, 8, 87, 101, 113, 4, 3, 84, 96, + 0, 84, 104, 0, 75, 89, 100, 8, 78, 74, 95, 14, + 3, 22, 0, 0, 0, 81, 86, 97, 71, 21, 1, 29, 86, + 124, 122, 88, 93, 80, 82, 87, 88, 123, 74, + 100, 88, 122, 81, 76, 84, 78, 9, 2, 81, 122, + 78, 102, 89, 123, 65, 78, 72, 91, 8, 68, 70, + 96, 85, 86, 81, 71, 66, 71, 87, 67, 5, 66, 6, + 70, 70, 5, 73, 20, 68, 1, 13, 17, 22, 23, 11, + 77, 76, 81, 10, 67, 89, 67, 70, 74, 79, 80, 2, + 34, 3, 90, 76, 65, 73, 29, 37, 92, 65, 68, 78, + 64, 1, 67, 78, 33, 56, 41, 71, 68, 121, 24, + 62, 62, 124, 24, 21, 29, 33, 31, 26, 21, 23, + 29, 19, 26, 16, 8, 5, 3, 18, 18, 20, 15, 7, + 11, 25, 13, 3, 14, 17, 69, 28, 64, 62, 62, 62, + 50, 60, 62, 62, 62, 44, 35, 30, 27, 44, 40, + 75, 27, 30, 16, 45, 26, 26, 33, 39, 40, 48, + 44, 18, 93, 6, 5, 22, 124, 112, 79, 3, 10, 4, + 83, 87, 92, 90, 123, 97, 8, 65, 69, 75, 82, + 86, 101, 96, 122, 80, 16, 3, 65, 69, 73, 77, + 81, 90, 105, 78, 66, 73, 6, 5, 76, 81, 80, 97, + 79, 26, 3, 6, 5, 71, 74, 84, 81, 85, 62, 124, + 123, 116, 123, 111, 114, 114, 113, 110, 114, + 116, 119, 92, 100, 97, 104, 120, 91, 4, 85, + 92, 89, 76, 71, 72, 64, 80, 64, 5, 67, 68, 65, + 68, 77, 64, 68, 77, 8, 4, 65, 8, 18, 3, 70, + 75, 83, 71, 64, 68, 7, 7, 69, 65, 73, 9, 9, + 75, 80, 76, 76, 18, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, 48, 62, 62, + 62, 62, 62, 61, 45, 58, 58, 43, 23, 16, 8, 79, + 62, 62, 62, 58, 44, 45, 35, 37, 44, 41, 32, + 18, 31, 13, 64, 30, 35, 35, 37, 44, 30, 31, + 20, 19, 1, 10, 2, 78, 121, 8, 5, 64, 28, 11, + 0, 77, 73, 70, 70, 72, 69, 2, 69, 72, 70, 65, + 11, 6, 13, 66, 62, 62, 62, 60, 52, 48, 36, 22, + 66, 69, 27, 20, 16, 9, 6, 1, 65, 67, 77, 77, + 73, 70, 70, 72, 69, 2, 69, 72, 70, 65, 11, 6, + 13, 66, 62, 62, 62, 60, 52, 48, 36, 22, 66 }, + + { + + 62, + 9, 74, 62, 9, 74, 121, 99, 12, 10, 11, 42, 59, + 61, 14, 2, 93, 43, 84, 97, 6, 5, 69, 4, 20, + 50, 58, 53, 15, 99, 121, 112, 73, 84, 97, 6, + 91, 85, 21, 8, 86, 100, 112, 3, 2, 84, 97, 0, + 84, 103, 0, 76, 89, 100, 8, 78, 74, 94, 15, 3, + 22, 0, 0, 0, 81, 86, 97, 70, 20, 1, 28, 86, + 123, 120, 87, 92, 79, 81, 86, 87, 121, 73, 99, + 87, 120, 82, 76, 84, 78, 10, 2, 80, 120, 78, + 101, 88, 121, 65, 78, 72, 91, 9, 68, 69, 95, + 85, 85, 81, 71, 66, 70, 86, 67, 5, 66, 6, 70, + 70, 5, 73, 20, 68, 1, 14, 17, 23, 23, 12, 77, + 76, 80, 10, 67, 89, 67, 69, 74, 78, 79, 3, 35, + 4, 88, 76, 66, 72, 29, 37, 93, 65, 67, 78, 64, + 1, 67, 77, 33, 56, 41, 70, 69, 119, 23, 62, + 62, 122, 24, 21, 28, 32, 31, 25, 20, 23, 29, + 18, 25, 16, 8, 5, 2, 18, 17, 19, 14, 7, 11, + 24, 13, 2, 14, 16, 69, 27, 64, 62, 62, 61, 49, + 58, 62, 62, 62, 43, 33, 28, 26, 42, 38, 77, + 26, 29, 14, 44, 25, 25, 32, 38, 38, 46, 42, + 17, 93, 5, 4, 21, 122, 110, 77, 3, 10, 4, 82, + 86, 91, 89, 121, 96, 9, 64, 68, 75, 81, 85, + 99, 95, 120, 80, 17, 4, 64, 68, 72, 77, 81, + 89, 104, 78, 64, 72, 6, 5, 75, 81, 80, 96, 78, + 27, 4, 7, 5, 70, 74, 83, 81, 85, 62, 122, 122, + 115, 121, 110, 112, 113, 112, 108, 112, 114, + 117, 92, 99, 97, 103, 117, 91, 3, 85, 91, 88, + 76, 71, 72, 64, 79, 64, 4, 67, 68, 65, 68, 77, + 64, 68, 77, 7, 4, 65, 7, 17, 3, 70, 75, 82, + 72, 64, 67, 6, 7, 69, 65, 72, 9, 8, 74, 79, + 76, 76, 17, 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 46, 62, 62, 62, 62, + 62, 59, 43, 56, 55, 41, 22, 15, 7, 79, 62, 62, + 62, 56, 42, 43, 34, 35, 42, 39, 30, 16, 29, + 11, 65, 29, 34, 33, 36, 42, 29, 29, 18, 17, 0, + 9, 1, 78, 120, 7, 3, 65, 27, 10, 64, 77, 72, + 70, 70, 71, 68, 3, 69, 71, 69, 64, 12, 7, 13, + 65, 62, 62, 62, 58, 50, 46, 34, 20, 67, 69, + 28, 21, 17, 9, 7, 2, 65, 66, 77, 77, 72, 70, + 70, 71, 68, 3, 69, 71, 69, 64, 12, 7, 13, 65, + 62, 62, 62, 58, 50, 46, 34, 20, 67 }, + + { + + 62, + 9, 74, 62, 9, 74, 120, 98, 12, 10, 11, 40, 57, + 60, 15, 2, 92, 41, 84, 96, 5, 5, 68, 3, 18, + 48, 56, 50, 12, 100, 119, 111, 73, 84, 96, 5, + 91, 84, 21, 7, 86, 99, 110, 2, 0, 85, 97, 0, + 83, 102, 64, 76, 89, 100, 8, 78, 74, 94, 15, + 3, 22, 0, 0, 0, 80, 87, 97, 70, 19, 1, 28, 85, + 122, 118, 86, 91, 77, 79, 86, 86, 119, 72, 98, + 86, 117, 82, 77, 84, 79, 10, 1, 79, 117, 77, + 101, 88, 119, 65, 78, 72, 91, 9, 68, 69, 94, + 85, 85, 80, 71, 66, 70, 85, 66, 5, 67, 5, 70, + 70, 5, 73, 20, 68, 1, 14, 17, 23, 23, 12, 78, + 75, 80, 9, 67, 88, 67, 68, 73, 78, 77, 5, 36, + 6, 86, 77, 67, 72, 30, 37, 94, 65, 67, 79, 0, + 1, 67, 76, 33, 56, 41, 68, 70, 118, 22, 62, + 62, 121, 23, 21, 28, 32, 30, 25, 20, 23, 28, + 17, 24, 15, 8, 5, 2, 17, 17, 18, 14, 6, 10, + 23, 12, 1, 13, 15, 69, 25, 65, 62, 62, 59, 47, + 57, 62, 62, 62, 42, 31, 25, 24, 40, 36, 78, + 24, 28, 13, 43, 24, 24, 30, 36, 36, 44, 41, + 15, 93, 4, 3, 19, 121, 109, 76, 4, 10, 4, 81, + 85, 90, 89, 119, 94, 10, 64, 68, 74, 79, 84, + 98, 94, 117, 79, 17, 4, 64, 68, 71, 76, 80, + 89, 103, 78, 0, 71, 6, 5, 74, 80, 80, 95, 77, + 27, 5, 7, 5, 69, 73, 82, 80, 84, 62, 121, 120, + 113, 120, 109, 111, 111, 110, 107, 111, 112, + 114, 91, 98, 96, 102, 114, 90, 2, 84, 90, 88, + 76, 71, 72, 65, 79, 65, 3, 67, 68, 64, 68, 77, + 64, 68, 76, 7, 3, 65, 6, 16, 2, 70, 75, 81, + 73, 65, 67, 6, 6, 69, 65, 72, 8, 8, 74, 79, + 76, 76, 15, 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 44, 62, 62, 62, 62, + 62, 57, 41, 54, 53, 39, 20, 14, 6, 79, 62, 62, + 62, 54, 40, 41, 32, 33, 40, 37, 28, 14, 26, + 10, 67, 28, 33, 30, 34, 41, 27, 27, 17, 16, + 64, 8, 0, 78, 119, 5, 2, 67, 25, 9, 65, 77, + 72, 69, 69, 70, 68, 3, 68, 70, 68, 0, 12, 8, + 14, 65, 62, 62, 60, 56, 48, 44, 31, 18, 69, + 68, 28, 21, 17, 10, 7, 2, 64, 66, 76, 77, 72, + 69, 69, 70, 68, 3, 68, 70, 68, 0, 12, 8, 14, + 65, 62, 62, 60, 56, 48, 44, 31, 18, 69 }, + + { + + 62, + 9, 74, 62, 9, 74, 118, 96, 12, 10, 10, 38, 56, + 59, 16, 2, 90, 39, 83, 94, 5, 5, 67, 2, 17, + 47, 54, 47, 10, 100, 117, 110, 73, 83, 94, 5, + 91, 83, 21, 7, 85, 98, 109, 1, 64, 85, 97, 0, + 83, 101, 64, 76, 89, 100, 8, 77, 74, 93, 16, + 3, 22, 0, 0, 0, 80, 87, 97, 69, 18, 1, 27, 85, + 120, 115, 85, 90, 76, 78, 85, 85, 117, 71, 97, + 85, 115, 83, 77, 84, 79, 10, 1, 78, 115, 77, + 100, 87, 117, 65, 78, 72, 90, 9, 68, 68, 93, + 84, 84, 80, 71, 65, 69, 84, 66, 5, 67, 5, 69, + 70, 5, 73, 21, 68, 1, 15, 18, 23, 23, 12, 78, + 75, 79, 9, 67, 88, 67, 67, 73, 77, 76, 6, 37, + 7, 84, 77, 68, 71, 30, 37, 95, 65, 66, 79, 1, + 1, 67, 74, 33, 56, 41, 67, 71, 116, 21, 62, + 62, 120, 23, 21, 27, 31, 30, 25, 19, 23, 28, + 16, 23, 15, 8, 5, 2, 17, 16, 17, 13, 6, 10, + 22, 12, 0, 12, 15, 69, 24, 65, 62, 62, 58, 46, + 55, 62, 62, 62, 41, 29, 23, 23, 38, 34, 79, + 23, 27, 11, 42, 23, 23, 29, 35, 34, 42, 39, + 14, 93, 3, 2, 17, 119, 107, 75, 4, 10, 4, 80, + 84, 89, 88, 117, 93, 11, 0, 67, 73, 78, 83, + 96, 93, 115, 78, 18, 5, 0, 67, 70, 75, 80, 88, + 102, 77, 1, 70, 6, 5, 73, 80, 79, 94, 76, 27, + 6, 7, 5, 68, 72, 81, 80, 83, 62, 120, 119, + 112, 118, 108, 109, 110, 108, 105, 109, 110, + 112, 90, 97, 95, 101, 111, 90, 1, 84, 89, 87, + 76, 71, 72, 65, 78, 65, 2, 67, 68, 0, 68, 77, + 64, 68, 76, 6, 3, 65, 5, 15, 2, 70, 75, 80, + 73, 65, 66, 5, 6, 69, 65, 72, 8, 7, 74, 78, + 76, 76, 14, 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 42, 62, 62, 62, 62, + 62, 55, 40, 52, 50, 37, 19, 13, 5, 79, 62, 62, + 62, 52, 38, 39, 31, 31, 38, 35, 26, 12, 24, 8, + 68, 27, 32, 28, 33, 39, 26, 25, 16, 15, 65, 7, + 64, 78, 118, 4, 1, 68, 24, 8, 66, 77, 71, 69, + 68, 69, 67, 4, 68, 69, 67, 1, 13, 9, 14, 64, + 62, 62, 58, 54, 46, 42, 29, 16, 70, 68, 29, + 22, 18, 11, 8, 3, 64, 66, 75, 77, 71, 69, 68, + 69, 67, 4, 68, 69, 67, 1, 13, 9, 14, 64, 62, + 62, 58, 54, 46, 42, 29, 16, 70 }, + + { + + 62, + 9, 75, 62, 9, 75, 116, 95, 13, 10, 10, 37, 54, + 58, 16, 3, 88, 38, 83, 93, 5, 4, 66, 1, 16, + 46, 53, 43, 8, 101, 115, 108, 73, 83, 93, 5, + 90, 82, 22, 7, 84, 97, 108, 64, 65, 85, 98, 0, + 83, 101, 64, 77, 88, 100, 7, 77, 74, 92, 16, + 3, 22, 0, 0, 0, 79, 87, 97, 69, 18, 0, 27, 84, + 119, 113, 84, 89, 74, 76, 84, 84, 115, 70, 96, + 85, 113, 84, 77, 84, 79, 11, 1, 77, 113, 77, + 99, 86, 115, 65, 78, 72, 90, 10, 69, 68, 93, + 84, 83, 80, 70, 65, 69, 83, 65, 5, 67, 5, 69, + 70, 5, 73, 21, 68, 1, 15, 18, 24, 24, 13, 79, + 74, 78, 8, 67, 88, 67, 66, 73, 77, 75, 7, 37, + 9, 83, 78, 69, 71, 30, 37, 95, 66, 66, 80, 1, + 0, 66, 73, 33, 56, 42, 66, 72, 115, 20, 62, + 62, 118, 23, 21, 27, 30, 29, 24, 19, 22, 27, + 16, 23, 15, 7, 5, 1, 16, 15, 16, 13, 6, 10, + 22, 11, 65, 12, 14, 69, 23, 66, 62, 62, 56, + 44, 53, 62, 62, 62, 39, 27, 21, 21, 36, 32, + 81, 22, 25, 9, 40, 22, 22, 28, 33, 32, 40, 37, + 12, 93, 2, 1, 16, 118, 106, 73, 5, 10, 4, 79, + 84, 89, 87, 116, 92, 12, 1, 66, 73, 77, 82, + 95, 92, 113, 78, 18, 5, 0, 67, 69, 75, 79, 87, + 101, 77, 3, 69, 6, 5, 73, 79, 79, 94, 76, 28, + 6, 8, 5, 67, 72, 81, 79, 83, 62, 118, 117, + 110, 116, 106, 108, 108, 107, 104, 107, 108, + 110, 90, 96, 95, 101, 108, 90, 0, 84, 89, 86, + 76, 71, 72, 65, 78, 65, 1, 67, 68, 0, 68, 77, + 64, 68, 76, 6, 3, 65, 4, 14, 2, 70, 75, 79, + 74, 65, 65, 4, 6, 69, 65, 71, 8, 7, 73, 77, + 76, 76, 12, 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 40, 62, 62, 62, 62, + 62, 52, 38, 50, 48, 35, 18, 12, 4, 79, 62, 62, + 62, 50, 36, 38, 29, 29, 36, 32, 24, 10, 22, 6, + 69, 26, 30, 26, 31, 37, 24, 23, 14, 13, 66, 6, + 65, 79, 117, 3, 64, 70, 23, 6, 67, 76, 71, 68, + 68, 68, 66, 5, 68, 68, 66, 2, 13, 10, 15, 0, + 62, 62, 56, 52, 44, 40, 27, 14, 71, 67, 29, + 22, 19, 11, 9, 3, 0, 65, 75, 76, 71, 68, 68, + 68, 66, 5, 68, 68, 66, 2, 13, 10, 15, 0, 62, + 62, 56, 52, 44, 40, 27, 14, 71 }, + + { + + 62, + 9, 75, 62, 9, 75, 114, 93, 13, 10, 9, 35, 53, + 57, 17, 3, 87, 36, 83, 91, 4, 4, 65, 0, 15, + 45, 51, 40, 5, 102, 113, 107, 73, 83, 91, 4, + 90, 81, 22, 7, 84, 96, 106, 65, 66, 85, 98, 0, + 82, 100, 65, 77, 88, 100, 7, 77, 74, 91, 17, + 3, 22, 0, 0, 0, 79, 87, 97, 68, 17, 0, 26, 84, + 118, 111, 83, 88, 73, 75, 83, 83, 113, 69, 95, + 84, 110, 84, 78, 84, 80, 11, 1, 76, 110, 76, + 99, 86, 113, 65, 78, 72, 90, 10, 69, 67, 92, + 84, 82, 79, 70, 65, 68, 82, 65, 5, 68, 5, 69, + 70, 5, 73, 21, 68, 1, 16, 18, 24, 24, 13, 79, + 74, 78, 8, 67, 87, 67, 65, 72, 76, 73, 9, 38, + 10, 81, 78, 70, 70, 31, 37, 96, 66, 65, 80, 2, + 0, 66, 72, 33, 56, 42, 64, 73, 113, 19, 62, + 62, 117, 23, 21, 26, 30, 29, 24, 18, 22, 27, + 15, 22, 15, 7, 5, 1, 16, 15, 15, 12, 6, 10, + 21, 11, 66, 11, 13, 69, 22, 66, 62, 62, 54, + 43, 52, 62, 62, 62, 38, 25, 19, 20, 34, 30, + 82, 21, 24, 8, 39, 21, 21, 26, 32, 30, 38, 36, + 11, 93, 1, 0, 14, 116, 104, 72, 5, 10, 4, 78, + 83, 88, 87, 114, 90, 13, 2, 66, 72, 75, 81, + 93, 91, 110, 77, 19, 6, 1, 66, 68, 74, 79, 86, + 100, 77, 4, 68, 6, 5, 72, 79, 79, 93, 75, 28, + 7, 8, 5, 66, 71, 80, 79, 82, 62, 117, 116, + 109, 115, 105, 106, 107, 105, 102, 105, 106, + 107, 89, 95, 94, 100, 105, 89, 64, 83, 88, 85, + 76, 71, 72, 65, 77, 66, 0, 67, 68, 1, 68, 77, + 64, 68, 75, 5, 2, 65, 3, 13, 1, 70, 75, 78, + 75, 66, 64, 4, 5, 69, 65, 71, 7, 6, 73, 77, + 76, 76, 11, 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 38, 62, 62, 62, 62, + 62, 50, 36, 48, 45, 33, 17, 11, 3, 79, 62, 61, + 62, 48, 34, 36, 28, 27, 34, 30, 22, 8, 20, 5, + 71, 25, 29, 24, 30, 36, 23, 21, 13, 12, 67, 5, + 66, 79, 116, 1, 65, 71, 21, 5, 68, 76, 70, 68, + 67, 67, 65, 5, 67, 67, 65, 3, 14, 11, 15, 0, + 62, 60, 54, 50, 42, 38, 24, 12, 72, 67, 30, + 23, 19, 12, 10, 4, 0, 65, 74, 76, 70, 68, 67, + 67, 65, 5, 67, 67, 65, 3, 14, 11, 15, 0, 62, + 60, 54, 50, 42, 38, 24, 12, 72 }, + + { + + 62, + 8, 75, 62, 8, 75, 113, 92, 13, 10, 9, 33, 51, + 56, 17, 3, 85, 34, 83, 90, 4, 3, 64, 64, 13, + 43, 49, 36, 3, 103, 111, 106, 73, 83, 90, 4, + 90, 81, 22, 6, 83, 95, 105, 66, 68, 86, 99, 0, + 82, 99, 65, 78, 88, 100, 7, 77, 74, 91, 17, 3, + 22, 0, 0, 0, 78, 88, 97, 68, 16, 0, 26, 83, + 117, 109, 82, 88, 71, 73, 83, 82, 111, 69, 94, + 83, 108, 85, 78, 85, 80, 11, 0, 76, 108, 76, + 98, 85, 112, 65, 78, 72, 90, 10, 69, 67, 91, + 84, 82, 79, 70, 65, 68, 81, 64, 5, 68, 4, 69, + 70, 4, 73, 21, 68, 1, 16, 18, 24, 24, 13, 80, + 73, 77, 7, 67, 87, 67, 64, 72, 76, 72, 10, 39, + 12, 79, 79, 71, 70, 31, 37, 97, 66, 65, 81, 2, + 0, 66, 71, 33, 56, 42, 0, 74, 112, 18, 59, 62, + 116, 22, 21, 26, 29, 28, 23, 18, 22, 26, 14, + 21, 14, 7, 4, 0, 15, 14, 14, 12, 5, 9, 20, 10, + 67, 10, 12, 69, 20, 67, 62, 62, 52, 41, 50, + 60, 62, 62, 37, 23, 16, 18, 31, 28, 84, 19, + 23, 6, 38, 20, 20, 25, 30, 28, 36, 34, 9, 93, + 0, 64, 12, 115, 103, 71, 6, 10, 4, 78, 82, 87, + 86, 112, 89, 13, 2, 65, 72, 74, 80, 92, 90, + 108, 77, 19, 6, 1, 66, 68, 74, 78, 86, 99, 77, + 5, 67, 6, 5, 71, 78, 79, 92, 74, 28, 8, 8, 5, + 65, 71, 79, 78, 82, 62, 116, 114, 107, 113, + 104, 105, 105, 104, 101, 104, 104, 105, 89, + 94, 94, 99, 102, 89, 65, 83, 87, 85, 76, 71, + 72, 66, 77, 66, 64, 67, 68, 1, 68, 77, 65, 68, + 75, 5, 2, 66, 2, 12, 1, 71, 75, 77, 76, 66, + 64, 3, 5, 69, 66, 71, 7, 6, 73, 76, 76, 76, 9, + 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 61, 36, 62, 62, 62, 62, 61, 48, 34, + 45, 43, 31, 15, 9, 2, 79, 61, 59, 62, 46, 31, + 34, 26, 24, 32, 28, 20, 6, 17, 3, 72, 23, 28, + 21, 28, 34, 21, 19, 11, 10, 68, 4, 67, 79, + 115, 0, 67, 73, 20, 4, 69, 76, 70, 67, 67, 66, + 65, 6, 67, 66, 65, 4, 14, 11, 16, 1, 61, 58, + 52, 48, 40, 36, 22, 10, 74, 66, 30, 23, 20, + 12, 10, 4, 1, 65, 74, 76, 70, 67, 67, 66, 65, + 6, 67, 66, 65, 4, 14, 11, 16, 1, 61, 58, 52, + 48, 40, 36, 22, 10, 74 }, + + { + + 62, + 8, 75, 62, 8, 75, 111, 91, 14, 10, 9, 31, 49, + 56, 18, 3, 83, 33, 82, 88, 4, 3, 0, 64, 12, + 42, 47, 33, 1, 103, 109, 104, 72, 82, 88, 4, + 89, 80, 23, 6, 82, 94, 104, 67, 69, 86, 99, 0, + 82, 98, 65, 78, 88, 100, 7, 76, 73, 90, 17, 3, + 22, 0, 0, 0, 77, 88, 97, 68, 15, 0, 26, 82, + 115, 106, 81, 87, 69, 71, 82, 81, 109, 68, 92, + 82, 106, 86, 78, 85, 80, 12, 0, 75, 106, 76, + 97, 84, 110, 65, 77, 72, 89, 11, 69, 66, 90, + 83, 81, 79, 70, 64, 67, 80, 0, 5, 68, 4, 68, + 69, 4, 73, 22, 68, 1, 16, 19, 25, 24, 14, 80, + 72, 76, 6, 67, 87, 67, 0, 72, 75, 71, 11, 40, + 14, 77, 80, 72, 69, 31, 38, 98, 66, 65, 81, 3, + 0, 66, 69, 33, 56, 42, 1, 75, 111, 17, 57, 62, + 114, 22, 21, 26, 28, 28, 23, 18, 22, 26, 13, + 20, 14, 7, 4, 0, 15, 13, 14, 12, 5, 9, 19, 9, + 68, 10, 12, 69, 19, 67, 62, 62, 51, 40, 48, + 58, 62, 62, 36, 21, 14, 17, 29, 27, 85, 18, + 22, 4, 37, 19, 19, 24, 28, 27, 34, 32, 8, 93, + 0, 65, 11, 113, 101, 69, 7, 10, 4, 77, 81, 86, + 85, 110, 88, 14, 3, 64, 71, 73, 79, 91, 89, + 106, 76, 20, 7, 2, 66, 67, 73, 77, 85, 97, 76, + 7, 66, 7, 5, 70, 77, 78, 91, 73, 29, 9, 9, 6, + 64, 70, 78, 77, 81, 62, 114, 112, 105, 111, + 103, 104, 103, 102, 99, 102, 102, 103, 88, 93, + 93, 98, 98, 89, 66, 83, 86, 84, 75, 71, 72, + 66, 77, 66, 65, 67, 68, 2, 68, 77, 65, 68, 75, + 5, 2, 66, 2, 11, 1, 71, 74, 75, 76, 66, 0, 2, + 5, 69, 66, 70, 7, 6, 72, 75, 75, 75, 7, 62, + 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, + 62, 58, 34, 62, 62, 62, 62, 58, 46, 33, 43, + 41, 30, 14, 8, 1, 79, 59, 57, 60, 44, 29, 32, + 25, 22, 30, 26, 18, 4, 15, 1, 73, 22, 27, 19, + 27, 32, 20, 17, 10, 9, 69, 3, 67, 79, 114, 64, + 68, 75, 19, 3, 70, 76, 69, 66, 66, 64, 64, 7, + 67, 65, 64, 5, 15, 12, 17, 2, 60, 57, 50, 46, + 38, 34, 20, 8, 75, 65, 30, 24, 21, 13, 11, 5, + 2, 64, 73, 76, 69, 66, 66, 64, 64, 7, 67, 65, + 64, 5, 15, 12, 17, 2, 60, 57, 50, 46, 38, 34, + 20, 8, 75 }, + + { + + 62, + 8, 75, 62, 8, 75, 109, 89, 14, 10, 8, 29, 48, + 55, 19, 3, 82, 31, 82, 87, 3, 3, 1, 65, 11, + 41, 45, 30, 65, 104, 107, 103, 72, 82, 87, 3, + 89, 79, 23, 6, 82, 93, 102, 68, 70, 86, 99, 0, + 81, 97, 66, 78, 88, 100, 7, 76, 73, 89, 18, 3, + 22, 0, 0, 0, 77, 88, 97, 67, 14, 0, 25, 82, + 114, 104, 80, 86, 68, 70, 81, 80, 107, 67, 91, + 81, 103, 86, 79, 85, 81, 12, 0, 74, 103, 75, + 97, 84, 108, 65, 77, 72, 89, 11, 69, 66, 89, + 83, 80, 78, 70, 64, 67, 79, 0, 5, 69, 4, 68, + 69, 4, 73, 22, 68, 1, 17, 19, 25, 24, 14, 81, + 72, 76, 6, 67, 86, 67, 1, 71, 75, 69, 13, 41, + 15, 75, 80, 73, 69, 32, 38, 99, 66, 64, 82, 4, + 0, 66, 68, 33, 56, 42, 3, 76, 109, 16, 54, 62, + 113, 22, 21, 25, 28, 27, 23, 17, 22, 25, 12, + 19, 14, 7, 4, 0, 14, 13, 13, 11, 5, 9, 18, 9, + 69, 9, 11, 69, 18, 68, 60, 62, 49, 38, 47, 56, + 62, 62, 35, 19, 12, 15, 27, 25, 86, 17, 21, 3, + 36, 18, 18, 22, 27, 25, 32, 31, 6, 93, 64, 66, + 9, 112, 100, 68, 7, 10, 4, 76, 80, 85, 85, + 108, 86, 15, 4, 64, 70, 71, 78, 89, 88, 103, + 75, 20, 7, 2, 65, 66, 72, 77, 84, 96, 76, 8, + 65, 7, 5, 69, 77, 78, 90, 72, 29, 10, 9, 6, 0, + 69, 77, 77, 80, 62, 113, 111, 104, 110, 102, + 102, 102, 100, 98, 100, 100, 100, 87, 92, 92, + 97, 95, 88, 67, 82, 85, 83, 75, 71, 72, 66, + 76, 67, 66, 67, 68, 3, 68, 77, 65, 68, 74, 4, + 1, 66, 1, 10, 0, 71, 74, 74, 77, 67, 1, 2, 4, + 69, 66, 70, 6, 5, 72, 75, 75, 75, 6, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, + 56, 32, 62, 62, 62, 62, 55, 44, 31, 41, 38, + 28, 13, 7, 0, 79, 57, 54, 57, 42, 27, 30, 23, + 20, 28, 24, 16, 2, 13, 0, 75, 21, 26, 17, 25, + 31, 18, 15, 9, 8, 70, 2, 68, 79, 113, 66, 69, + 76, 17, 2, 71, 76, 69, 66, 65, 0, 0, 7, 66, + 64, 0, 6, 15, 13, 17, 2, 60, 55, 48, 44, 36, + 32, 17, 6, 76, 65, 31, 24, 21, 14, 12, 5, 2, + 64, 72, 76, 69, 66, 65, 0, 0, 7, 66, 64, 0, 6, + 15, 13, 17, 2, 60, 55, 48, 44, 36, 32, 17, 6, + 76 }, + + { + + 62, + 8, 76, 62, 8, 76, 107, 88, 15, 10, 8, 28, 46, + 54, 19, 4, 80, 30, 82, 85, 3, 2, 2, 66, 10, + 40, 44, 26, 67, 105, 105, 101, 72, 82, 85, 3, + 88, 78, 24, 6, 81, 92, 101, 70, 71, 86, 100, + 0, 81, 97, 66, 79, 87, 100, 6, 76, 73, 88, 18, + 3, 22, 0, 0, 0, 76, 88, 97, 67, 14, 64, 25, + 81, 113, 102, 79, 85, 66, 68, 80, 79, 105, 66, + 90, 81, 101, 87, 79, 85, 81, 13, 0, 73, 101, + 75, 96, 83, 106, 65, 77, 72, 89, 12, 70, 65, + 89, 83, 79, 78, 69, 64, 66, 78, 1, 5, 69, 4, + 68, 69, 4, 73, 22, 68, 1, 17, 19, 26, 25, 15, + 81, 71, 75, 5, 67, 86, 67, 2, 71, 74, 68, 14, + 41, 17, 74, 81, 74, 68, 32, 38, 99, 67, 64, + 82, 4, 64, 65, 67, 33, 56, 43, 4, 77, 108, 15, + 51, 62, 111, 22, 21, 25, 27, 27, 22, 17, 21, + 25, 12, 19, 14, 6, 4, 64, 14, 12, 12, 11, 5, + 9, 18, 8, 71, 9, 10, 69, 17, 68, 57, 62, 47, + 37, 45, 54, 62, 61, 33, 17, 10, 14, 25, 23, + 88, 16, 19, 1, 34, 17, 17, 21, 25, 23, 30, 29, + 5, 93, 65, 67, 8, 110, 98, 66, 8, 10, 4, 75, + 80, 85, 84, 107, 85, 16, 5, 0, 70, 70, 77, 88, + 87, 101, 75, 21, 8, 3, 65, 65, 72, 76, 83, 95, + 76, 10, 64, 7, 5, 69, 76, 78, 90, 72, 30, 10, + 10, 6, 1, 69, 77, 76, 80, 62, 111, 109, 102, + 108, 100, 101, 100, 99, 96, 98, 98, 98, 87, + 91, 92, 97, 92, 88, 68, 82, 85, 82, 75, 71, + 72, 66, 76, 67, 67, 67, 68, 3, 68, 77, 65, 68, + 74, 4, 1, 66, 0, 9, 0, 71, 74, 73, 78, 67, 2, + 1, 4, 69, 66, 69, 6, 5, 71, 74, 75, 75, 4, 62, + 61, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, + 62, 53, 30, 62, 62, 62, 62, 53, 41, 29, 39, + 36, 26, 12, 6, 64, 79, 55, 52, 55, 40, 25, 29, + 22, 18, 26, 21, 14, 0, 11, 65, 76, 20, 24, 15, + 24, 29, 17, 13, 7, 6, 71, 1, 69, 80, 112, 67, + 71, 78, 16, 0, 72, 75, 68, 65, 65, 1, 1, 8, + 66, 0, 1, 7, 16, 14, 18, 3, 59, 53, 46, 42, + 34, 30, 15, 4, 77, 64, 31, 25, 22, 14, 13, 6, + 3, 0, 72, 75, 68, 65, 65, 1, 1, 8, 66, 0, 1, + 7, 16, 14, 18, 3, 59, 53, 46, 42, 34, 30, 15, + 4, 77 }, + + { + + 62, + 8, 76, 62, 8, 76, 106, 86, 15, 10, 7, 26, 45, + 53, 20, 4, 78, 28, 82, 84, 3, 2, 3, 67, 8, 38, + 42, 23, 69, 106, 103, 100, 72, 82, 84, 3, 88, + 77, 24, 5, 80, 91, 100, 71, 73, 87, 100, 0, + 81, 96, 66, 79, 87, 100, 6, 76, 73, 88, 19, 3, + 22, 0, 0, 0, 76, 89, 97, 66, 13, 64, 24, 81, + 112, 100, 78, 84, 65, 67, 80, 78, 103, 65, 89, + 80, 99, 88, 79, 85, 81, 13, 64, 72, 99, 75, + 95, 82, 104, 65, 77, 72, 89, 12, 70, 65, 88, + 83, 79, 78, 69, 64, 66, 77, 1, 5, 69, 3, 68, + 69, 4, 73, 22, 68, 1, 18, 19, 26, 25, 15, 82, + 71, 74, 5, 67, 86, 67, 3, 71, 74, 67, 15, 42, + 18, 72, 81, 75, 68, 32, 38, 100, 67, 0, 83, 5, + 64, 65, 66, 33, 56, 43, 5, 78, 106, 14, 48, + 60, 110, 21, 21, 24, 26, 26, 22, 16, 21, 24, + 11, 18, 13, 6, 4, 64, 13, 11, 11, 10, 4, 8, + 17, 8, 72, 8, 9, 69, 15, 69, 55, 62, 45, 35, + 43, 52, 62, 58, 32, 15, 7, 12, 23, 21, 89, 14, + 18, 64, 33, 16, 16, 20, 24, 21, 28, 27, 3, 93, + 66, 68, 6, 109, 97, 65, 8, 10, 4, 74, 79, 84, + 83, 105, 84, 17, 5, 1, 69, 69, 76, 86, 86, 99, + 74, 21, 8, 3, 64, 64, 71, 76, 83, 94, 76, 11, + 0, 7, 5, 68, 76, 78, 89, 71, 30, 11, 10, 6, 2, + 68, 76, 76, 79, 62, 110, 108, 101, 106, 99, + 99, 99, 97, 95, 97, 96, 96, 86, 90, 91, 96, + 89, 88, 69, 82, 84, 82, 75, 71, 72, 67, 75, + 67, 68, 67, 68, 4, 68, 77, 65, 68, 74, 3, 1, + 66, 64, 8, 0, 71, 74, 72, 79, 67, 2, 0, 4, 69, + 66, 69, 6, 4, 71, 73, 75, 75, 3, 62, 60, 62, + 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 50, + 28, 62, 62, 62, 62, 50, 39, 27, 37, 33, 24, + 10, 5, 65, 79, 52, 50, 53, 38, 23, 27, 20, 16, + 24, 19, 12, 65, 8, 67, 77, 19, 23, 12, 22, 27, + 15, 11, 6, 5, 72, 0, 70, 80, 111, 68, 72, 79, + 15, 64, 73, 75, 68, 65, 64, 2, 1, 9, 66, 1, 2, + 8, 16, 15, 18, 4, 59, 51, 44, 40, 32, 28, 13, + 2, 79, 64, 32, 25, 23, 15, 13, 6, 3, 0, 71, + 75, 68, 65, 64, 2, 1, 9, 66, 1, 2, 8, 16, 15, + 18, 4, 59, 51, 44, 40, 32, 28, 13, 2, 79 }, + + { + + 62, + 8, 76, 62, 8, 76, 104, 85, 15, 10, 7, 24, 43, + 52, 21, 4, 77, 26, 81, 82, 2, 2, 4, 68, 7, 37, + 40, 20, 72, 106, 101, 99, 72, 81, 82, 2, 88, + 76, 24, 5, 80, 90, 98, 72, 74, 87, 100, 0, 80, + 95, 67, 79, 87, 100, 6, 75, 73, 87, 19, 3, 22, + 0, 0, 0, 75, 89, 97, 66, 12, 64, 24, 80, 110, + 97, 77, 83, 0, 65, 79, 77, 101, 64, 88, 79, + 96, 88, 80, 85, 82, 13, 64, 71, 96, 74, 95, + 82, 102, 65, 77, 72, 88, 12, 70, 64, 87, 82, + 78, 77, 69, 0, 65, 76, 2, 5, 70, 3, 67, 69, 4, + 73, 23, 68, 1, 18, 20, 26, 25, 15, 82, 70, 74, + 4, 67, 85, 67, 4, 70, 73, 65, 17, 43, 20, 70, + 82, 76, 67, 33, 38, 101, 67, 0, 83, 6, 64, 65, + 64, 33, 56, 43, 7, 79, 105, 13, 46, 57, 109, + 21, 21, 24, 26, 26, 22, 16, 21, 24, 10, 17, + 13, 6, 4, 64, 13, 11, 10, 10, 4, 8, 16, 7, 73, + 7, 9, 69, 14, 69, 53, 62, 44, 34, 42, 50, 62, + 56, 31, 13, 5, 11, 21, 19, 90, 13, 17, 65, 32, + 15, 15, 18, 22, 19, 26, 26, 2, 93, 67, 69, 4, + 107, 95, 64, 9, 10, 4, 73, 78, 83, 83, 103, + 82, 18, 6, 1, 68, 67, 75, 85, 85, 96, 73, 22, + 9, 4, 64, 0, 70, 75, 82, 93, 75, 12, 1, 7, 5, + 67, 75, 77, 88, 70, 30, 12, 10, 6, 3, 67, 75, + 75, 78, 62, 109, 106, 99, 105, 98, 98, 97, 95, + 93, 95, 94, 93, 85, 89, 90, 95, 86, 87, 70, + 81, 83, 81, 75, 71, 72, 67, 75, 68, 69, 67, + 68, 5, 68, 77, 65, 68, 73, 3, 0, 66, 65, 7, + 64, 71, 74, 71, 79, 68, 3, 0, 3, 69, 66, 69, + 5, 4, 71, 73, 75, 75, 1, 62, 59, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 60, 48, 26, 62, + 62, 62, 62, 47, 37, 26, 35, 31, 22, 9, 4, 66, + 79, 50, 47, 50, 36, 21, 25, 19, 14, 22, 17, + 10, 67, 6, 68, 79, 18, 22, 10, 21, 26, 14, 9, + 5, 4, 73, 64, 71, 80, 110, 70, 73, 81, 13, 65, + 74, 75, 67, 64, 0, 3, 2, 9, 65, 2, 3, 9, 17, + 16, 19, 4, 58, 49, 42, 38, 30, 26, 10, 0, 80, + 0, 32, 26, 23, 16, 14, 7, 4, 0, 70, 75, 67, + 64, 0, 3, 2, 9, 65, 2, 3, 9, 17, 16, 19, 4, + 58, 49, 42, 38, 30, 26, 10, 0, 80 }, + + { + + 61, + 8, 76, 61, 8, 76, 102, 83, 16, 10, 6, 22, 42, + 51, 21, 4, 75, 25, 81, 81, 2, 1, 5, 69, 6, 36, + 38, 16, 74, 107, 99, 97, 72, 81, 81, 2, 87, + 75, 25, 5, 79, 89, 97, 73, 75, 87, 101, 0, 80, + 94, 67, 80, 87, 100, 6, 75, 73, 86, 20, 3, 22, + 0, 0, 0, 75, 89, 97, 65, 11, 64, 23, 80, 109, + 95, 76, 82, 1, 64, 78, 76, 99, 0, 87, 78, 94, + 89, 80, 85, 82, 14, 64, 70, 94, 74, 94, 81, + 100, 65, 77, 72, 88, 13, 70, 64, 86, 82, 77, + 77, 69, 0, 65, 75, 2, 5, 70, 3, 67, 69, 4, 73, + 23, 68, 1, 19, 20, 27, 25, 16, 83, 70, 73, 4, + 67, 85, 67, 5, 70, 73, 64, 18, 44, 21, 68, 82, + 77, 67, 33, 38, 102, 67, 1, 84, 6, 64, 65, 0, + 33, 56, 43, 8, 80, 103, 12, 43, 54, 107, 21, + 21, 23, 25, 25, 21, 15, 21, 23, 9, 16, 13, 6, + 4, 65, 12, 10, 9, 9, 4, 8, 15, 7, 74, 7, 8, + 69, 13, 70, 51, 60, 42, 32, 40, 48, 62, 53, + 30, 11, 3, 9, 19, 17, 92, 12, 16, 67, 31, 14, + 14, 17, 21, 17, 24, 24, 0, 93, 68, 70, 3, 106, + 94, 1, 9, 10, 4, 72, 77, 82, 82, 101, 81, 19, + 7, 2, 68, 66, 74, 83, 84, 94, 73, 22, 9, 4, 0, + 1, 70, 75, 81, 92, 75, 14, 2, 7, 5, 66, 75, + 77, 87, 69, 31, 13, 11, 6, 4, 67, 74, 75, 78, + 62, 107, 105, 98, 103, 97, 96, 96, 94, 92, 93, + 92, 91, 85, 88, 90, 94, 83, 87, 71, 81, 82, + 80, 75, 71, 72, 67, 74, 68, 70, 67, 68, 5, 68, + 77, 65, 68, 73, 2, 0, 66, 66, 6, 64, 71, 74, + 70, 80, 68, 4, 64, 3, 69, 66, 68, 5, 3, 70, + 72, 75, 75, 0, 62, 58, 61, 61, 61, 62, 62, 62, + 61, 62, 62, 62, 57, 45, 24, 62, 60, 59, 60, + 44, 35, 24, 33, 28, 20, 8, 3, 67, 79, 48, 45, + 48, 34, 19, 23, 17, 12, 20, 15, 8, 69, 4, 70, + 80, 17, 21, 8, 19, 24, 12, 7, 3, 2, 74, 65, + 72, 80, 109, 71, 75, 82, 12, 66, 75, 75, 67, + 64, 0, 4, 3, 10, 65, 3, 4, 10, 17, 17, 19, 5, + 58, 47, 40, 36, 28, 24, 8, 65, 81, 0, 33, 26, + 24, 16, 15, 7, 4, 1, 70, 75, 67, 64, 0, 4, 3, + 10, 65, 3, 4, 10, 17, 17, 19, 5, 58, 47, 40, + 36, 28, 24, 8, 65, 81 }, + + { + + 60, + 8, 76, 60, 8, 76, 100, 82, 16, 10, 6, 20, 40, + 50, 22, 4, 73, 23, 81, 79, 2, 1, 6, 70, 5, 35, + 36, 13, 76, 108, 97, 96, 72, 81, 79, 2, 87, + 74, 25, 5, 78, 88, 96, 74, 76, 87, 101, 0, 80, + 93, 67, 80, 87, 100, 6, 75, 73, 85, 20, 3, 22, + 0, 0, 0, 74, 89, 97, 65, 10, 64, 23, 79, 108, + 93, 75, 81, 3, 1, 77, 75, 97, 1, 86, 77, 92, + 90, 80, 85, 82, 14, 64, 69, 92, 74, 93, 80, + 98, 65, 77, 72, 88, 13, 70, 0, 85, 82, 76, 77, + 69, 0, 64, 74, 3, 5, 70, 3, 67, 69, 4, 73, 23, + 68, 1, 19, 20, 27, 25, 16, 83, 69, 72, 3, 67, + 85, 67, 6, 70, 72, 0, 19, 45, 23, 66, 83, 78, + 66, 33, 38, 103, 67, 1, 84, 7, 64, 65, 1, 33, + 56, 43, 9, 81, 102, 11, 40, 51, 106, 21, 21, + 23, 24, 25, 21, 15, 21, 23, 8, 15, 13, 6, 4, + 65, 12, 9, 8, 9, 4, 8, 14, 6, 75, 6, 7, 69, + 12, 70, 49, 58, 40, 31, 38, 46, 59, 51, 29, 9, + 1, 8, 17, 15, 93, 11, 15, 69, 30, 13, 13, 16, + 19, 15, 22, 22, 64, 93, 69, 71, 1, 104, 92, 2, + 10, 10, 4, 71, 76, 81, 81, 99, 80, 20, 8, 3, + 67, 65, 73, 82, 83, 92, 72, 23, 10, 5, 0, 2, + 69, 74, 80, 91, 75, 15, 3, 7, 5, 65, 74, 77, + 86, 68, 31, 14, 11, 6, 5, 66, 73, 74, 77, 62, + 106, 103, 96, 101, 96, 95, 94, 92, 90, 91, 90, + 89, 84, 87, 89, 93, 80, 87, 72, 81, 81, 79, + 75, 71, 72, 67, 74, 68, 71, 67, 68, 6, 68, 77, + 65, 68, 73, 2, 0, 66, 67, 5, 64, 71, 74, 69, + 81, 68, 5, 65, 3, 69, 66, 68, 5, 3, 70, 71, + 75, 75, 65, 61, 57, 60, 59, 59, 62, 62, 62, + 59, 60, 62, 61, 54, 42, 22, 61, 57, 55, 55, + 41, 33, 22, 31, 26, 18, 7, 2, 68, 79, 46, 43, + 46, 32, 17, 21, 16, 10, 18, 13, 6, 71, 2, 72, + 81, 16, 20, 6, 18, 22, 11, 5, 2, 1, 75, 66, + 73, 80, 108, 72, 76, 84, 11, 67, 76, 75, 66, + 0, 1, 5, 4, 11, 65, 4, 5, 11, 18, 18, 20, 6, + 57, 45, 38, 34, 26, 22, 6, 67, 82, 1, 33, 27, + 25, 17, 16, 8, 5, 1, 69, 75, 66, 0, 1, 5, 4, + 11, 65, 4, 5, 11, 18, 18, 20, 6, 57, 45, 38, + 34, 26, 22, 6, 67, 82 }, + + { + + 58, + 7, 77, 58, 7, 77, 99, 81, 16, 10, 5, 18, 38, + 49, 22, 4, 72, 21, 81, 78, 1, 0, 7, 71, 3, 33, + 34, 9, 79, 109, 95, 95, 72, 81, 78, 1, 87, 74, + 25, 4, 78, 88, 95, 76, 78, 88, 102, 64, 80, + 93, 68, 81, 87, 100, 5, 75, 73, 85, 20, 2, 22, + 0, 0, 0, 74, 90, 97, 65, 9, 65, 22, 79, 107, + 91, 74, 81, 4, 2, 77, 74, 96, 1, 85, 77, 90, + 91, 81, 86, 83, 14, 65, 69, 90, 74, 93, 80, + 97, 65, 77, 72, 88, 13, 71, 0, 85, 82, 76, 77, + 69, 0, 64, 73, 3, 5, 71, 2, 67, 69, 3, 73, 23, + 68, 1, 19, 20, 27, 25, 16, 84, 69, 72, 2, 67, + 85, 68, 6, 70, 72, 1, 20, 45, 24, 65, 84, 80, + 66, 33, 38, 104, 68, 1, 85, 7, 65, 65, 2, 33, + 55, 43, 10, 82, 101, 9, 37, 47, 105, 20, 21, + 22, 23, 24, 20, 14, 20, 22, 7, 14, 12, 5, 3, + 66, 11, 8, 7, 8, 3, 7, 13, 5, 77, 5, 6, 69, + 10, 71, 46, 55, 38, 29, 36, 43, 55, 48, 27, 7, + 65, 6, 14, 13, 95, 9, 13, 71, 28, 12, 12, 14, + 17, 13, 20, 20, 66, 93, 70, 72, 64, 103, 91, + 3, 10, 10, 4, 71, 76, 81, 81, 98, 79, 20, 8, + 3, 67, 64, 72, 81, 83, 90, 72, 23, 10, 5, 0, + 2, 69, 74, 80, 90, 75, 16, 4, 7, 4, 65, 74, + 77, 86, 68, 31, 14, 11, 6, 6, 66, 73, 74, 77, + 62, 105, 102, 95, 100, 95, 94, 93, 91, 89, 90, + 89, 87, 84, 87, 89, 93, 77, 87, 74, 81, 81, + 79, 75, 71, 72, 68, 74, 69, 72, 68, 68, 6, 69, + 77, 66, 68, 73, 1, 64, 67, 68, 4, 65, 72, 74, + 68, 82, 69, 5, 66, 2, 69, 67, 68, 4, 2, 70, + 71, 75, 75, 67, 59, 56, 58, 57, 56, 62, 62, + 62, 56, 57, 62, 58, 50, 39, 20, 57, 53, 51, + 49, 38, 30, 20, 28, 23, 16, 5, 0, 69, 79, 43, + 40, 43, 30, 14, 19, 14, 7, 16, 10, 4, 74, 64, + 74, 83, 14, 18, 3, 16, 20, 9, 3, 0, 64, 76, + 67, 74, 81, 107, 74, 78, 86, 9, 69, 78, 75, + 66, 0, 1, 6, 4, 11, 65, 5, 5, 12, 18, 18, 20, + 6, 56, 43, 36, 31, 23, 20, 3, 69, 84, 1, 33, + 27, 25, 17, 16, 8, 5, 1, 69, 75, 66, 0, 1, 6, + 4, 11, 65, 5, 5, 12, 18, 18, 20, 6, 56, 43, + 36, 31, 23, 20, 3, 69, 84 }, + + { + + 57, + 7, 77, 57, 7, 77, 97, 79, 17, 11, 5, 17, 37, + 49, 23, 5, 70, 20, 80, 76, 1, 0, 9, 71, 2, 32, + 33, 6, 81, 109, 93, 93, 71, 80, 76, 1, 86, 73, + 26, 4, 77, 87, 93, 77, 79, 88, 102, 64, 79, + 92, 68, 81, 86, 99, 5, 74, 72, 84, 21, 2, 22, + 0, 0, 0, 73, 90, 97, 64, 9, 65, 22, 78, 105, + 88, 72, 80, 6, 4, 76, 72, 94, 2, 83, 76, 87, + 91, 81, 86, 83, 15, 65, 68, 87, 73, 92, 79, + 95, 65, 76, 72, 87, 14, 71, 1, 84, 81, 75, 76, + 68, 1, 0, 72, 4, 6, 71, 2, 66, 68, 3, 72, 24, + 67, 1, 20, 21, 28, 26, 17, 84, 68, 71, 2, 67, + 84, 68, 7, 69, 71, 3, 22, 46, 26, 0, 84, 81, + 65, 34, 39, 104, 68, 2, 85, 8, 65, 64, 4, 33, + 55, 44, 12, 83, 99, 8, 35, 44, 103, 20, 21, + 22, 23, 24, 20, 14, 20, 22, 7, 14, 12, 5, 3, + 66, 11, 8, 7, 8, 3, 7, 13, 5, 78, 5, 6, 69, 9, + 71, 44, 53, 37, 28, 35, 41, 52, 46, 26, 6, 67, + 5, 12, 12, 96, 8, 12, 72, 27, 12, 12, 13, 16, + 12, 19, 19, 67, 93, 70, 72, 65, 101, 89, 5, + 11, 10, 4, 70, 75, 80, 80, 96, 77, 21, 9, 4, + 66, 1, 71, 79, 82, 87, 71, 24, 11, 6, 1, 3, + 68, 73, 79, 88, 74, 18, 5, 8, 4, 64, 73, 76, + 85, 67, 32, 15, 12, 7, 7, 65, 72, 73, 76, 62, + 103, 100, 93, 98, 93, 92, 91, 89, 87, 88, 87, + 84, 83, 86, 88, 92, 73, 86, 75, 80, 80, 78, + 74, 71, 71, 68, 73, 69, 72, 68, 68, 7, 69, 77, + 66, 68, 72, 1, 64, 67, 68, 4, 65, 72, 73, 66, + 82, 69, 6, 66, 2, 69, 67, 67, 4, 2, 69, 70, + 74, 74, 68, 58, 55, 57, 56, 54, 60, 60, 59, + 54, 55, 59, 56, 47, 37, 18, 54, 50, 48, 44, + 36, 28, 19, 26, 21, 15, 4, 64, 69, 79, 41, 38, + 41, 28, 12, 18, 13, 5, 15, 8, 3, 76, 66, 75, + 84, 13, 17, 1, 15, 19, 8, 2, 64, 65, 77, 67, + 74, 81, 106, 75, 79, 87, 8, 70, 79, 74, 65, 1, + 2, 8, 5, 12, 64, 7, 6, 13, 19, 19, 21, 7, 56, + 42, 35, 29, 21, 19, 1, 70, 85, 2, 34, 28, 26, + 18, 17, 9, 6, 2, 68, 74, 65, 1, 2, 8, 5, 12, + 64, 7, 6, 13, 19, 19, 21, 7, 56, 42, 35, 29, + 21, 19, 1, 70, 85 }, + + { + + 56, + 7, 77, 56, 7, 77, 95, 78, 17, 11, 5, 15, 35, + 48, 24, 5, 68, 18, 80, 75, 1, 0, 10, 72, 1, + 31, 31, 3, 83, 110, 91, 92, 71, 80, 75, 1, 86, + 72, 26, 4, 76, 86, 92, 78, 80, 88, 102, 64, + 79, 91, 68, 81, 86, 99, 5, 74, 72, 83, 21, 2, + 22, 0, 0, 0, 72, 90, 97, 64, 8, 65, 22, 77, + 104, 86, 71, 79, 8, 6, 75, 71, 92, 3, 82, 75, + 85, 92, 81, 86, 83, 15, 65, 67, 85, 73, 91, + 78, 93, 65, 76, 72, 87, 14, 71, 1, 83, 81, 74, + 76, 68, 1, 0, 71, 5, 6, 71, 2, 66, 68, 3, 72, + 24, 67, 1, 20, 21, 28, 26, 17, 85, 67, 70, 1, + 67, 84, 68, 8, 69, 71, 4, 23, 47, 28, 2, 85, + 82, 65, 34, 39, 105, 68, 2, 86, 9, 65, 64, 5, + 33, 55, 44, 13, 84, 98, 7, 32, 41, 102, 20, + 21, 22, 22, 23, 20, 14, 20, 21, 6, 13, 12, 5, + 3, 66, 10, 7, 6, 8, 3, 7, 12, 4, 79, 4, 5, 69, + 8, 72, 42, 51, 35, 26, 33, 39, 49, 44, 25, 4, + 69, 3, 10, 10, 97, 7, 11, 74, 26, 11, 11, 12, + 14, 10, 17, 17, 69, 93, 71, 73, 67, 100, 88, + 6, 12, 10, 4, 69, 74, 79, 79, 94, 76, 22, 10, + 5, 65, 2, 70, 78, 81, 85, 70, 24, 11, 6, 1, 4, + 67, 72, 78, 87, 74, 19, 6, 8, 4, 0, 72, 76, + 84, 66, 32, 16, 12, 7, 8, 64, 71, 72, 75, 62, + 102, 98, 91, 96, 92, 91, 89, 87, 86, 86, 85, + 82, 82, 85, 87, 91, 70, 86, 76, 80, 79, 77, + 74, 71, 71, 68, 73, 69, 73, 68, 68, 8, 69, 77, + 66, 68, 72, 1, 64, 67, 69, 3, 65, 72, 73, 65, + 83, 69, 7, 67, 2, 69, 67, 67, 4, 2, 69, 69, + 74, 74, 70, 57, 54, 56, 54, 52, 57, 57, 56, + 52, 52, 56, 53, 44, 34, 16, 50, 46, 44, 39, + 33, 26, 17, 24, 19, 13, 3, 65, 70, 79, 39, 36, + 39, 26, 10, 16, 11, 3, 13, 6, 1, 78, 68, 77, + 85, 12, 16, 64, 13, 17, 6, 0, 65, 66, 78, 68, + 75, 81, 105, 76, 80, 89, 7, 71, 80, 74, 65, 2, + 3, 9, 6, 13, 64, 8, 7, 14, 19, 20, 22, 8, 55, + 40, 33, 27, 19, 17, 64, 72, 86, 3, 34, 28, 27, + 19, 18, 9, 7, 2, 67, 74, 65, 2, 3, 9, 6, 13, + 64, 8, 7, 14, 19, 20, 22, 8, 55, 40, 33, 27, + 19, 17, 64, 72, 86 }, + + { + + 55, + 7, 77, 55, 7, 77, 93, 76, 18, 11, 4, 13, 34, + 47, 24, 5, 66, 17, 80, 73, 1, 64, 11, 73, 0, + 30, 29, 64, 85, 111, 89, 90, 71, 80, 73, 1, + 85, 71, 27, 4, 75, 85, 91, 79, 81, 88, 103, + 64, 79, 90, 68, 82, 86, 99, 5, 74, 72, 82, 22, + 2, 22, 0, 0, 0, 72, 90, 97, 0, 7, 65, 21, 77, + 103, 84, 70, 78, 9, 7, 74, 70, 90, 4, 81, 74, + 83, 93, 81, 86, 83, 16, 65, 66, 83, 73, 90, + 77, 91, 65, 76, 72, 87, 15, 71, 2, 82, 81, 73, + 76, 68, 1, 1, 70, 5, 6, 71, 2, 66, 68, 3, 72, + 24, 67, 1, 21, 21, 29, 26, 18, 85, 67, 69, 1, + 67, 84, 68, 9, 69, 70, 5, 24, 48, 29, 4, 85, + 83, 64, 34, 39, 106, 68, 3, 86, 9, 65, 64, 6, + 33, 55, 44, 14, 85, 96, 6, 29, 38, 100, 20, + 21, 21, 21, 23, 19, 13, 20, 21, 5, 12, 12, 5, + 3, 67, 10, 6, 5, 7, 3, 7, 11, 4, 80, 4, 4, 69, + 7, 72, 40, 49, 33, 25, 31, 37, 46, 41, 24, 2, + 71, 2, 8, 8, 99, 6, 10, 76, 25, 10, 10, 11, + 13, 8, 15, 15, 70, 93, 72, 74, 68, 98, 86, 8, + 12, 10, 4, 68, 73, 78, 78, 92, 75, 23, 11, 6, + 65, 3, 69, 76, 80, 83, 70, 25, 12, 7, 2, 5, + 67, 72, 77, 86, 74, 21, 7, 8, 4, 1, 72, 76, + 83, 65, 33, 17, 13, 7, 9, 64, 70, 72, 75, 62, + 100, 97, 90, 94, 91, 89, 88, 86, 84, 84, 83, + 80, 82, 84, 87, 90, 67, 86, 77, 80, 78, 76, + 74, 71, 71, 68, 72, 69, 74, 68, 68, 8, 69, 77, + 66, 68, 72, 0, 64, 67, 70, 2, 65, 72, 73, 64, + 84, 69, 8, 68, 2, 69, 67, 66, 4, 1, 68, 68, + 74, 74, 71, 56, 53, 55, 52, 50, 55, 55, 53, + 49, 49, 53, 50, 41, 31, 14, 46, 43, 40, 34, + 30, 24, 15, 22, 16, 11, 2, 66, 71, 79, 37, 34, + 37, 24, 8, 14, 10, 1, 11, 4, 64, 80, 70, 79, + 86, 11, 15, 66, 12, 15, 5, 65, 67, 68, 79, 69, + 76, 81, 104, 77, 82, 90, 6, 72, 81, 74, 64, 2, + 3, 10, 7, 14, 64, 9, 8, 15, 20, 21, 22, 9, 55, + 38, 31, 25, 17, 15, 66, 74, 87, 3, 35, 29, 28, + 19, 19, 10, 7, 3, 67, 74, 64, 2, 3, 10, 7, 14, + 64, 9, 8, 15, 20, 21, 22, 9, 55, 38, 31, 25, + 17, 15, 66, 74, 87 }, + + { + + 53, + 7, 77, 53, 7, 77, 92, 75, 18, 11, 4, 11, 32, + 46, 25, 5, 65, 15, 80, 72, 0, 64, 12, 74, 65, + 28, 27, 67, 88, 112, 87, 89, 71, 80, 72, 0, + 85, 70, 27, 3, 75, 84, 89, 80, 83, 89, 103, + 64, 78, 89, 69, 82, 86, 99, 5, 74, 72, 82, 22, + 2, 22, 0, 0, 0, 71, 91, 97, 0, 6, 65, 21, 76, + 102, 82, 69, 77, 11, 9, 74, 69, 88, 5, 80, 73, + 80, 93, 82, 86, 84, 16, 66, 65, 80, 72, 90, + 77, 89, 65, 76, 72, 87, 15, 71, 2, 81, 81, 73, + 75, 68, 1, 1, 69, 6, 6, 72, 1, 66, 68, 3, 72, + 24, 67, 1, 21, 21, 29, 26, 18, 86, 66, 69, 0, + 67, 83, 68, 10, 68, 70, 7, 26, 49, 31, 6, 86, + 84, 64, 35, 39, 107, 68, 3, 87, 10, 65, 64, 7, + 33, 55, 44, 16, 86, 95, 5, 26, 35, 99, 19, 21, + 21, 21, 22, 19, 13, 20, 20, 4, 11, 11, 5, 3, + 67, 9, 6, 4, 7, 2, 6, 10, 3, 81, 3, 3, 69, 5, + 73, 38, 47, 31, 23, 30, 35, 42, 39, 23, 0, 74, + 0, 6, 6, 100, 4, 9, 77, 24, 9, 9, 9, 11, 6, + 13, 14, 72, 93, 73, 75, 70, 97, 85, 9, 13, 10, + 4, 67, 72, 77, 78, 90, 73, 24, 11, 6, 64, 5, + 68, 75, 79, 80, 69, 25, 12, 7, 2, 6, 66, 71, + 77, 85, 74, 22, 8, 8, 4, 2, 71, 76, 82, 64, + 33, 18, 13, 7, 10, 0, 69, 71, 74, 62, 99, 95, + 88, 93, 90, 88, 86, 84, 83, 83, 81, 77, 81, + 83, 86, 89, 64, 85, 78, 79, 77, 76, 74, 71, + 71, 69, 72, 70, 75, 68, 68, 9, 69, 77, 66, 68, + 71, 0, 65, 67, 71, 1, 66, 72, 73, 0, 85, 70, + 8, 68, 1, 69, 67, 66, 3, 1, 68, 68, 74, 74, + 73, 55, 52, 54, 51, 47, 52, 52, 50, 47, 46, + 49, 47, 37, 29, 12, 42, 39, 36, 29, 27, 22, + 13, 20, 14, 9, 0, 67, 72, 79, 34, 31, 34, 22, + 6, 12, 8, 64, 9, 2, 66, 82, 73, 80, 88, 10, + 14, 69, 10, 14, 3, 67, 68, 69, 80, 70, 77, 81, + 103, 79, 83, 92, 4, 73, 82, 74, 64, 3, 4, 11, + 7, 14, 0, 10, 9, 16, 20, 22, 23, 9, 54, 36, + 29, 23, 15, 13, 69, 76, 89, 4, 35, 29, 28, 20, + 19, 10, 8, 3, 66, 74, 64, 3, 4, 11, 7, 14, 0, + 10, 9, 16, 20, 22, 23, 9, 54, 36, 29, 23, 15, + 13, 69, 76, 89 }, + + { + + 52, + 7, 77, 52, 7, 77, 90, 73, 18, 11, 3, 9, 31, + 45, 26, 5, 0, 13, 79, 70, 0, 64, 13, 75, 66, + 27, 25, 70, 90, 112, 85, 88, 71, 79, 70, 0, + 85, 69, 27, 3, 74, 83, 88, 81, 84, 89, 103, + 64, 78, 88, 69, 82, 86, 99, 5, 73, 72, 81, 23, + 2, 22, 0, 0, 0, 71, 91, 97, 1, 5, 65, 20, 76, + 100, 79, 68, 76, 12, 10, 73, 68, 86, 6, 79, + 72, 78, 94, 82, 86, 84, 16, 66, 64, 78, 72, + 89, 76, 87, 65, 76, 72, 86, 15, 71, 3, 80, 80, + 72, 75, 68, 2, 2, 68, 6, 6, 72, 1, 65, 68, 3, + 72, 25, 67, 1, 22, 22, 29, 26, 18, 86, 66, 68, + 0, 67, 83, 68, 11, 68, 69, 8, 27, 50, 32, 8, + 86, 85, 0, 35, 39, 108, 68, 4, 87, 11, 65, 64, + 9, 33, 55, 44, 17, 87, 93, 4, 24, 32, 98, 19, + 21, 20, 20, 22, 19, 12, 20, 20, 3, 10, 11, 5, + 3, 67, 9, 5, 3, 6, 2, 6, 9, 3, 82, 2, 3, 69, + 4, 73, 36, 45, 30, 22, 28, 33, 39, 36, 22, 65, + 76, 64, 4, 4, 101, 3, 8, 79, 23, 8, 8, 8, 10, + 4, 11, 12, 73, 93, 74, 76, 72, 95, 83, 10, 13, + 10, 4, 66, 71, 76, 77, 88, 72, 25, 12, 7, 0, + 6, 67, 73, 78, 78, 68, 26, 13, 8, 3, 7, 65, + 71, 76, 84, 73, 23, 9, 8, 4, 3, 71, 75, 81, 0, + 33, 19, 13, 7, 11, 1, 68, 71, 73, 62, 98, 94, + 87, 91, 89, 86, 85, 82, 81, 81, 79, 75, 80, + 82, 85, 88, 2, 85, 79, 79, 76, 75, 74, 71, 71, + 69, 71, 70, 76, 68, 68, 10, 69, 77, 66, 68, + 71, 64, 65, 67, 72, 0, 66, 72, 73, 1, 85, 70, + 9, 69, 1, 69, 67, 66, 3, 0, 68, 67, 74, 74, + 74, 54, 51, 53, 49, 45, 50, 49, 47, 44, 43, + 46, 44, 34, 26, 10, 38, 36, 32, 24, 24, 20, + 12, 18, 11, 7, 64, 68, 73, 79, 32, 29, 32, 20, + 4, 10, 7, 66, 7, 0, 68, 84, 75, 82, 89, 9, 13, + 71, 9, 12, 2, 69, 69, 70, 81, 71, 78, 81, 102, + 80, 84, 93, 3, 74, 83, 74, 0, 3, 5, 12, 8, 15, + 0, 11, 10, 17, 21, 23, 23, 10, 54, 34, 27, 21, + 13, 11, 71, 78, 90, 4, 36, 30, 29, 21, 20, 11, + 8, 3, 65, 74, 0, 3, 5, 12, 8, 15, 0, 11, 10, + 17, 21, 23, 23, 10, 54, 34, 27, 21, 13, 11, + 71, 78, 90 }, + + { + + 51, + 7, 78, 51, 7, 78, 88, 72, 19, 11, 3, 8, 29, + 44, 26, 6, 2, 12, 79, 69, 0, 65, 14, 76, 67, + 26, 24, 74, 92, 113, 83, 86, 71, 79, 69, 0, + 84, 68, 28, 3, 73, 82, 87, 83, 85, 89, 104, + 64, 78, 88, 69, 83, 85, 99, 4, 73, 72, 80, 23, + 2, 22, 0, 0, 0, 70, 91, 97, 1, 5, 66, 20, 75, + 99, 77, 67, 75, 14, 12, 72, 67, 84, 7, 78, 72, + 76, 95, 82, 86, 84, 17, 66, 0, 76, 72, 88, 75, + 85, 65, 76, 72, 86, 16, 72, 3, 80, 80, 71, 75, + 67, 2, 2, 67, 7, 6, 72, 1, 65, 68, 3, 72, 25, + 67, 1, 22, 22, 30, 27, 19, 87, 65, 67, 64, 67, + 83, 68, 12, 68, 69, 9, 28, 50, 34, 9, 87, 86, + 0, 35, 39, 108, 69, 4, 88, 11, 66, 0, 10, 33, + 55, 45, 18, 88, 92, 3, 21, 29, 96, 19, 21, 20, + 19, 21, 18, 12, 19, 19, 3, 10, 11, 4, 3, 68, + 8, 4, 2, 6, 2, 6, 9, 2, 84, 2, 2, 69, 3, 74, + 33, 43, 28, 20, 26, 31, 36, 34, 20, 67, 78, + 66, 2, 2, 103, 2, 6, 81, 21, 7, 7, 7, 8, 2, 9, + 10, 75, 93, 75, 77, 73, 94, 82, 12, 14, 10, 4, + 65, 71, 76, 76, 87, 71, 26, 13, 8, 0, 7, 66, + 72, 77, 76, 68, 26, 13, 8, 3, 8, 65, 70, 75, + 83, 73, 25, 10, 8, 4, 3, 70, 75, 81, 0, 34, + 19, 14, 7, 12, 1, 68, 70, 73, 62, 96, 92, 85, + 89, 87, 85, 83, 81, 80, 79, 77, 73, 80, 81, + 85, 88, 5, 85, 80, 79, 76, 74, 74, 71, 71, 69, + 71, 70, 77, 68, 68, 10, 69, 77, 66, 68, 71, + 64, 65, 67, 73, 64, 66, 72, 73, 2, 86, 70, 10, + 70, 1, 69, 67, 65, 3, 0, 67, 66, 74, 74, 76, + 53, 50, 52, 47, 43, 47, 47, 44, 42, 40, 43, + 41, 31, 23, 8, 35, 32, 28, 19, 22, 17, 10, 16, + 9, 5, 65, 69, 74, 79, 30, 27, 30, 18, 2, 9, 5, + 68, 5, 66, 70, 86, 77, 84, 90, 8, 11, 73, 7, + 10, 0, 71, 71, 72, 82, 72, 79, 82, 101, 81, + 86, 95, 2, 76, 84, 73, 0, 4, 5, 13, 9, 16, 0, + 12, 11, 18, 21, 24, 24, 11, 53, 32, 25, 19, + 11, 9, 73, 80, 91, 5, 36, 30, 30, 21, 21, 11, + 9, 4, 65, 73, 0, 4, 5, 13, 9, 16, 0, 12, 11, + 18, 21, 24, 24, 11, 53, 32, 25, 19, 11, 9, 73, + 80, 91 }, + + { + + 50, + 7, 78, 50, 7, 78, 86, 70, 19, 11, 2, 6, 28, + 43, 27, 6, 3, 10, 79, 67, 64, 65, 15, 77, 68, + 25, 22, 77, 95, 114, 81, 85, 71, 79, 67, 64, + 84, 67, 28, 3, 73, 81, 85, 84, 86, 89, 104, + 64, 77, 87, 70, 83, 85, 99, 4, 73, 72, 79, 24, + 2, 22, 0, 0, 0, 70, 91, 97, 2, 4, 66, 19, 75, + 98, 75, 66, 74, 15, 13, 71, 66, 82, 8, 77, 71, + 73, 95, 83, 86, 85, 17, 66, 1, 73, 71, 88, 75, + 83, 65, 76, 72, 86, 16, 72, 4, 79, 80, 70, 74, + 67, 2, 3, 66, 7, 6, 73, 1, 65, 68, 3, 72, 25, + 67, 1, 23, 22, 30, 27, 19, 87, 65, 67, 64, 67, + 82, 68, 13, 67, 68, 11, 30, 51, 35, 11, 87, + 87, 1, 36, 39, 109, 69, 5, 88, 12, 66, 0, 11, + 33, 55, 45, 20, 89, 90, 2, 18, 26, 95, 19, 21, + 19, 19, 21, 18, 11, 19, 19, 2, 9, 11, 4, 3, + 68, 8, 4, 1, 5, 2, 6, 8, 2, 85, 1, 1, 69, 2, + 74, 31, 41, 26, 19, 25, 29, 33, 31, 19, 69, + 80, 67, 0, 0, 104, 1, 5, 82, 20, 6, 6, 5, 7, + 0, 7, 9, 76, 93, 76, 78, 75, 92, 80, 13, 14, + 10, 4, 64, 70, 75, 76, 85, 69, 27, 14, 8, 1, + 9, 65, 70, 76, 73, 67, 27, 14, 9, 4, 9, 64, + 70, 74, 82, 73, 26, 11, 8, 4, 4, 70, 75, 80, + 1, 34, 20, 14, 7, 13, 2, 67, 70, 72, 62, 95, + 91, 84, 88, 86, 83, 82, 79, 78, 77, 75, 70, + 79, 80, 84, 87, 8, 84, 81, 78, 75, 73, 74, 71, + 71, 69, 70, 71, 78, 68, 68, 11, 69, 77, 66, + 68, 70, 65, 66, 67, 74, 65, 67, 72, 73, 3, 87, + 71, 11, 70, 0, 69, 67, 65, 2, 64, 67, 66, 74, + 74, 77, 52, 49, 51, 46, 40, 45, 44, 41, 39, + 37, 40, 38, 28, 21, 6, 31, 29, 24, 14, 19, 15, + 8, 14, 6, 3, 66, 70, 75, 79, 28, 24, 27, 16, + 0, 7, 4, 70, 3, 68, 72, 88, 79, 85, 92, 7, 10, + 75, 6, 9, 64, 73, 72, 73, 83, 73, 80, 82, 100, + 83, 87, 96, 0, 77, 85, 73, 1, 4, 6, 14, 10, + 16, 1, 13, 12, 19, 22, 25, 24, 11, 53, 30, 23, + 17, 9, 7, 76, 82, 92, 5, 37, 31, 30, 22, 22, + 12, 9, 4, 64, 73, 1, 4, 6, 14, 10, 16, 1, 13, + 12, 19, 22, 25, 24, 11, 53, 30, 23, 17, 9, 7, + 76, 82, 92 }, + + { + + 48, + 6, 78, 48, 6, 78, 85, 69, 19, 11, 2, 4, 26, + 42, 27, 6, 5, 8, 79, 66, 64, 66, 16, 78, 70, + 23, 20, 81, 97, 115, 79, 84, 71, 79, 66, 64, + 84, 67, 28, 2, 72, 80, 84, 85, 88, 90, 105, + 64, 77, 86, 70, 84, 85, 99, 4, 73, 72, 79, 24, + 2, 22, 0, 0, 0, 69, 92, 97, 2, 3, 66, 19, 74, + 97, 73, 65, 74, 17, 15, 71, 65, 80, 8, 76, 70, + 71, 96, 83, 87, 85, 17, 67, 1, 71, 71, 87, 74, + 82, 65, 76, 72, 86, 16, 72, 4, 78, 80, 70, 74, + 67, 2, 3, 65, 8, 6, 73, 0, 65, 68, 2, 72, 25, + 67, 1, 23, 22, 30, 27, 19, 88, 64, 66, 65, 67, + 82, 68, 14, 67, 68, 12, 31, 52, 37, 13, 88, + 88, 1, 36, 39, 110, 69, 5, 89, 12, 66, 0, 12, + 33, 55, 45, 21, 90, 89, 1, 15, 22, 94, 18, 21, + 19, 18, 20, 17, 11, 19, 18, 1, 8, 10, 4, 2, + 69, 7, 3, 0, 5, 1, 5, 7, 1, 86, 0, 0, 69, 0, + 75, 29, 39, 24, 17, 23, 26, 29, 29, 18, 71, + 83, 69, 66, 65, 106, 64, 4, 84, 19, 5, 5, 4, + 5, 65, 5, 7, 78, 93, 77, 79, 77, 91, 79, 14, + 15, 10, 4, 64, 69, 74, 75, 83, 68, 27, 14, 9, + 1, 10, 64, 69, 75, 71, 67, 27, 14, 9, 4, 9, + 64, 69, 74, 81, 73, 27, 12, 8, 4, 5, 69, 75, + 79, 2, 34, 21, 14, 7, 14, 2, 66, 69, 72, 62, + 94, 89, 82, 86, 85, 82, 80, 78, 77, 76, 73, + 68, 79, 79, 84, 86, 11, 84, 82, 78, 74, 73, + 74, 71, 71, 70, 70, 71, 79, 68, 68, 11, 69, + 77, 67, 68, 70, 65, 66, 68, 75, 66, 67, 73, + 73, 4, 88, 71, 11, 71, 0, 69, 68, 65, 2, 64, + 67, 65, 74, 74, 79, 51, 48, 50, 44, 38, 42, + 41, 38, 37, 34, 36, 35, 24, 18, 4, 27, 25, 20, + 9, 16, 13, 6, 11, 4, 1, 68, 72, 76, 79, 25, + 22, 25, 14, 66, 5, 2, 73, 1, 70, 74, 90, 82, + 87, 93, 5, 9, 78, 4, 7, 66, 75, 74, 75, 84, + 74, 81, 82, 99, 84, 89, 98, 64, 78, 86, 73, 1, + 5, 6, 15, 10, 17, 1, 14, 12, 20, 22, 25, 25, + 12, 52, 28, 21, 15, 7, 5, 78, 84, 94, 6, 37, + 31, 31, 22, 22, 12, 10, 4, 64, 73, 1, 5, 6, + 15, 10, 17, 1, 14, 12, 20, 22, 25, 25, 12, 52, + 28, 21, 15, 7, 5, 78, 84, 94 }, + + { + + 47, + 6, 78, 47, 6, 78, 83, 68, 20, 11, 2, 2, 24, + 42, 28, 6, 7, 7, 78, 64, 64, 66, 17, 78, 71, + 22, 18, 84, 99, 115, 77, 82, 70, 78, 64, 64, + 83, 66, 29, 2, 71, 79, 83, 86, 89, 90, 105, + 64, 77, 85, 70, 84, 85, 99, 4, 72, 71, 78, 24, + 2, 22, 0, 0, 0, 68, 92, 97, 2, 2, 66, 19, 73, + 95, 70, 64, 73, 19, 17, 70, 64, 78, 9, 74, 69, + 69, 97, 83, 87, 85, 18, 67, 2, 69, 71, 86, 73, + 80, 65, 75, 72, 85, 17, 72, 5, 77, 79, 69, 74, + 67, 3, 4, 64, 9, 6, 73, 0, 64, 67, 2, 72, 26, + 67, 1, 23, 23, 31, 27, 20, 88, 0, 65, 66, 67, + 82, 68, 15, 67, 67, 13, 32, 53, 39, 15, 89, + 89, 2, 36, 40, 111, 69, 5, 89, 13, 66, 0, 14, + 33, 55, 45, 22, 91, 88, 0, 13, 19, 92, 18, 21, + 19, 17, 20, 17, 11, 19, 18, 0, 7, 10, 4, 2, + 69, 7, 2, 0, 5, 1, 5, 6, 0, 87, 0, 0, 69, 64, + 75, 27, 37, 23, 16, 21, 24, 26, 27, 17, 73, + 85, 70, 68, 66, 107, 65, 3, 86, 18, 4, 4, 3, + 3, 66, 3, 5, 79, 93, 77, 80, 78, 89, 77, 16, + 16, 10, 4, 0, 68, 73, 74, 81, 67, 28, 15, 10, + 2, 11, 0, 68, 74, 69, 66, 28, 15, 10, 4, 10, + 0, 68, 73, 79, 72, 29, 13, 9, 4, 6, 68, 74, + 78, 3, 35, 22, 15, 8, 15, 3, 65, 68, 71, 62, + 92, 87, 80, 84, 84, 81, 78, 76, 75, 74, 71, + 66, 78, 78, 83, 85, 15, 84, 83, 78, 73, 72, + 73, 71, 71, 70, 70, 71, 80, 68, 68, 12, 69, + 77, 67, 68, 70, 65, 66, 68, 75, 67, 67, 73, + 72, 6, 88, 71, 12, 72, 0, 69, 68, 64, 2, 64, + 66, 64, 73, 73, 81, 50, 47, 49, 42, 36, 39, + 39, 35, 35, 32, 33, 33, 21, 15, 2, 23, 22, 17, + 4, 13, 11, 5, 9, 2, 0, 69, 73, 77, 79, 23, 20, + 23, 12, 68, 3, 1, 75, 64, 72, 76, 92, 84, 89, + 94, 4, 8, 80, 3, 5, 67, 77, 75, 76, 85, 75, + 81, 82, 98, 85, 90, 100, 65, 79, 87, 73, 2, 6, + 7, 17, 11, 18, 1, 15, 13, 21, 23, 26, 26, 13, + 51, 27, 19, 13, 5, 3, 80, 86, 95, 7, 37, 32, + 32, 23, 23, 13, 11, 5, 0, 73, 2, 6, 7, 17, 11, + 18, 1, 15, 13, 21, 23, 26, 26, 13, 51, 27, 19, + 13, 5, 3, 80, 86, 95 }, + + { + + 46, + 6, 78, 46, 6, 78, 81, 66, 20, 11, 1, 0, 23, + 41, 29, 6, 8, 5, 78, 0, 65, 66, 18, 79, 72, + 21, 16, 87, 102, 116, 75, 81, 70, 78, 0, 65, + 83, 65, 29, 2, 71, 78, 81, 87, 90, 90, 105, + 64, 76, 84, 71, 84, 85, 99, 4, 72, 71, 77, 25, + 2, 22, 0, 0, 0, 68, 92, 97, 3, 1, 66, 18, 73, + 94, 68, 0, 72, 20, 18, 69, 0, 76, 10, 73, 68, + 66, 97, 84, 87, 86, 18, 67, 3, 66, 70, 86, 73, + 78, 65, 75, 72, 85, 17, 72, 5, 76, 79, 68, 73, + 67, 3, 4, 0, 9, 6, 74, 0, 64, 67, 2, 72, 26, + 67, 1, 24, 23, 31, 27, 20, 89, 0, 65, 66, 67, + 81, 68, 16, 66, 67, 15, 34, 54, 40, 17, 89, + 90, 2, 37, 40, 112, 69, 6, 90, 14, 66, 0, 15, + 33, 55, 45, 24, 92, 86, 64, 10, 16, 91, 18, + 21, 18, 17, 19, 17, 10, 19, 17, 64, 6, 10, 4, + 2, 69, 6, 2, 64, 4, 1, 5, 5, 0, 88, 64, 64, + 69, 65, 76, 25, 35, 21, 14, 20, 22, 23, 24, + 16, 75, 87, 72, 70, 68, 108, 66, 2, 87, 17, 3, + 3, 1, 2, 68, 1, 4, 81, 93, 78, 81, 80, 88, 76, + 17, 16, 10, 4, 1, 67, 72, 74, 79, 65, 29, 16, + 10, 3, 13, 1, 66, 73, 66, 65, 28, 15, 10, 5, + 11, 1, 68, 72, 78, 72, 30, 14, 9, 4, 7, 68, + 74, 77, 4, 35, 23, 15, 8, 16, 4, 64, 68, 70, + 62, 91, 86, 79, 83, 83, 79, 77, 74, 74, 72, + 69, 0, 77, 77, 82, 84, 18, 83, 84, 77, 72, 71, + 73, 71, 71, 70, 69, 72, 81, 68, 68, 13, 69, + 77, 67, 68, 69, 66, 67, 68, 76, 68, 68, 73, + 72, 7, 89, 72, 13, 72, 64, 69, 68, 64, 1, 65, + 66, 64, 73, 73, 82, 49, 46, 48, 41, 33, 37, + 36, 32, 32, 29, 30, 30, 18, 13, 0, 19, 18, 13, + 64, 10, 9, 3, 7, 64, 65, 70, 74, 78, 79, 21, + 17, 20, 10, 70, 1, 64, 77, 66, 74, 78, 94, 86, + 90, 96, 3, 7, 82, 1, 4, 69, 79, 76, 77, 86, + 76, 82, 82, 97, 87, 91, 101, 67, 80, 88, 73, + 2, 6, 8, 18, 12, 18, 2, 16, 14, 22, 23, 27, + 26, 13, 51, 25, 17, 11, 3, 1, 83, 88, 96, 7, + 38, 32, 32, 24, 24, 13, 11, 5, 1, 73, 2, 6, 8, + 18, 12, 18, 2, 16, 14, 22, 23, 27, 26, 13, 51, + 25, 17, 11, 3, 1, 83, 88, 96 }, + + { + + 45, + 6, 79, 45, 6, 79, 79, 65, 21, 11, 1, 64, 21, + 40, 29, 7, 10, 4, 78, 2, 65, 67, 19, 80, 73, + 20, 15, 91, 104, 117, 73, 79, 70, 78, 2, 65, + 82, 64, 30, 2, 70, 77, 80, 89, 91, 90, 106, + 64, 76, 84, 71, 85, 84, 99, 3, 72, 71, 76, 25, + 2, 22, 0, 0, 0, 67, 92, 97, 3, 1, 67, 18, 72, + 93, 66, 1, 71, 22, 20, 68, 1, 74, 11, 72, 68, + 64, 98, 84, 87, 86, 19, 67, 4, 64, 70, 85, 72, + 76, 65, 75, 72, 85, 18, 73, 6, 76, 79, 67, 73, + 66, 3, 5, 1, 10, 6, 74, 0, 64, 67, 2, 72, 26, + 67, 1, 24, 23, 32, 28, 21, 89, 1, 64, 67, 67, + 81, 68, 17, 66, 66, 16, 35, 54, 42, 18, 90, + 91, 3, 37, 40, 112, 70, 6, 90, 14, 67, 1, 16, + 33, 55, 46, 25, 93, 85, 65, 7, 13, 89, 18, 21, + 18, 16, 19, 16, 10, 18, 17, 64, 6, 10, 3, 2, + 70, 6, 1, 65, 4, 1, 5, 5, 64, 90, 64, 65, 69, + 66, 76, 22, 33, 19, 13, 18, 20, 20, 22, 14, + 77, 89, 73, 72, 70, 110, 67, 0, 89, 15, 2, 2, + 0, 0, 70, 64, 2, 82, 93, 79, 82, 81, 86, 74, + 19, 17, 10, 4, 2, 67, 72, 73, 78, 64, 30, 17, + 11, 3, 14, 2, 65, 72, 64, 65, 29, 16, 11, 5, + 12, 1, 67, 71, 77, 72, 32, 15, 9, 4, 7, 67, + 74, 77, 4, 36, 23, 16, 8, 17, 4, 64, 67, 70, + 62, 89, 84, 77, 81, 81, 78, 75, 73, 72, 70, + 67, 2, 77, 76, 82, 84, 21, 83, 85, 77, 72, 70, + 73, 71, 71, 70, 69, 72, 82, 68, 68, 13, 69, + 77, 67, 68, 69, 66, 67, 68, 77, 69, 68, 73, + 72, 8, 90, 72, 14, 73, 64, 69, 68, 0, 1, 65, + 65, 0, 73, 73, 84, 48, 45, 47, 39, 31, 34, 34, + 29, 30, 26, 27, 27, 15, 10, 65, 16, 15, 9, 69, + 8, 6, 1, 5, 66, 67, 71, 75, 79, 79, 19, 15, + 18, 8, 72, 0, 65, 79, 68, 77, 80, 96, 88, 92, + 97, 2, 5, 84, 0, 2, 70, 81, 78, 79, 87, 77, + 83, 83, 96, 88, 93, 103, 68, 82, 89, 72, 3, 7, + 8, 19, 13, 19, 2, 17, 15, 23, 24, 28, 27, 14, + 50, 23, 15, 9, 1, 64, 85, 90, 97, 8, 38, 33, + 33, 24, 25, 14, 12, 6, 1, 72, 3, 7, 8, 19, 13, + 19, 2, 17, 15, 23, 24, 28, 27, 14, 50, 23, 15, + 9, 1, 64, 85, 90, 97 }, + + { + + 43, + 6, 79, 43, 6, 79, 78, 0, 21, 11, 0, 66, 20, + 39, 30, 7, 12, 2, 78, 3, 65, 67, 20, 81, 75, + 18, 13, 94, 106, 118, 71, 78, 70, 78, 3, 65, + 82, 0, 30, 1, 69, 76, 79, 90, 93, 91, 106, 64, + 76, 83, 71, 85, 84, 99, 3, 72, 71, 76, 26, 2, + 22, 0, 0, 0, 67, 93, 97, 4, 0, 67, 17, 72, 92, + 64, 2, 70, 23, 21, 68, 2, 72, 12, 71, 67, 1, + 99, 84, 87, 86, 19, 68, 5, 1, 70, 84, 71, 74, + 65, 75, 72, 85, 18, 73, 6, 75, 79, 67, 73, 66, + 3, 5, 2, 10, 6, 74, 64, 64, 67, 2, 72, 26, 67, + 1, 25, 23, 32, 28, 21, 90, 1, 0, 67, 67, 81, + 68, 18, 66, 66, 17, 36, 55, 43, 20, 90, 92, 3, + 37, 40, 113, 70, 7, 91, 15, 67, 1, 17, 33, 55, + 46, 26, 94, 83, 66, 4, 10, 88, 17, 21, 17, 15, + 18, 16, 9, 18, 16, 65, 5, 9, 3, 2, 70, 5, 0, + 66, 3, 0, 4, 4, 64, 91, 65, 66, 69, 68, 77, + 20, 31, 17, 11, 16, 18, 16, 19, 13, 79, 92, + 75, 74, 72, 111, 69, 64, 91, 14, 1, 1, 64, 64, + 72, 66, 0, 84, 93, 80, 83, 83, 85, 73, 20, 17, + 10, 4, 3, 66, 71, 72, 76, 0, 31, 17, 12, 4, + 15, 3, 0, 71, 1, 64, 29, 16, 11, 6, 13, 2, 67, + 71, 76, 72, 33, 16, 9, 4, 8, 67, 74, 76, 5, + 36, 24, 16, 8, 18, 5, 0, 67, 69, 62, 88, 83, + 76, 79, 80, 76, 74, 71, 71, 69, 65, 4, 76, 75, + 81, 83, 24, 83, 86, 77, 71, 70, 73, 71, 71, + 71, 68, 72, 83, 68, 68, 14, 69, 77, 67, 68, + 69, 67, 67, 68, 78, 70, 68, 73, 72, 9, 91, 72, + 14, 74, 64, 69, 68, 0, 1, 66, 65, 1, 73, 73, + 85, 47, 44, 46, 37, 29, 32, 31, 26, 27, 23, + 23, 24, 11, 7, 67, 12, 11, 5, 74, 5, 4, 64, 3, + 69, 69, 73, 76, 80, 79, 16, 13, 16, 6, 74, 65, + 67, 81, 70, 79, 82, 98, 91, 94, 98, 1, 4, 87, + 65, 0, 72, 83, 79, 80, 88, 78, 84, 83, 95, 89, + 94, 104, 69, 83, 90, 72, 3, 7, 9, 20, 13, 20, + 2, 18, 16, 24, 24, 29, 27, 15, 50, 21, 13, 7, + 64, 66, 87, 92, 99, 8, 39, 33, 34, 25, 25, 14, + 12, 6, 2, 72, 3, 7, 9, 20, 13, 20, 2, 18, 16, + 24, 24, 29, 27, 15, 50, 21, 13, 7, 64, 66, 87, + 92, 99 }, + + { + + 42, + 6, 79, 42, 6, 79, 76, 1, 21, 11, 0, 68, 18, + 38, 31, 7, 13, 0, 77, 5, 66, 67, 21, 82, 76, + 17, 11, 97, 109, 118, 69, 77, 70, 77, 5, 66, + 82, 1, 30, 1, 69, 75, 77, 91, 94, 91, 106, 64, + 75, 82, 72, 85, 84, 99, 3, 71, 71, 75, 26, 2, + 22, 0, 0, 0, 66, 93, 97, 4, 64, 67, 17, 71, + 90, 2, 3, 69, 25, 23, 67, 3, 70, 13, 70, 66, + 4, 99, 85, 87, 87, 19, 68, 6, 4, 69, 84, 71, + 72, 65, 75, 72, 84, 18, 73, 7, 74, 78, 66, 72, + 66, 4, 6, 3, 11, 6, 75, 64, 0, 67, 2, 72, 27, + 67, 1, 25, 24, 32, 28, 21, 90, 2, 0, 68, 67, + 80, 68, 19, 65, 65, 19, 38, 56, 45, 22, 91, + 93, 4, 38, 40, 114, 70, 7, 91, 16, 67, 1, 19, + 33, 55, 46, 28, 95, 82, 67, 2, 7, 87, 17, 21, + 17, 15, 18, 16, 9, 18, 16, 66, 4, 9, 3, 2, 70, + 5, 0, 67, 3, 0, 4, 3, 65, 92, 66, 66, 69, 69, + 77, 18, 29, 16, 10, 15, 16, 13, 17, 12, 81, + 94, 76, 76, 74, 112, 70, 65, 92, 13, 0, 0, 66, + 66, 74, 68, 64, 85, 93, 81, 84, 85, 83, 71, + 21, 18, 10, 4, 4, 65, 70, 72, 74, 2, 32, 18, + 12, 5, 17, 4, 1, 70, 4, 0, 30, 17, 12, 6, 14, + 3, 66, 70, 75, 71, 34, 17, 9, 4, 9, 66, 73, + 75, 6, 36, 25, 16, 8, 19, 6, 1, 66, 68, 62, + 87, 81, 74, 78, 79, 75, 72, 69, 69, 67, 0, 7, + 75, 74, 80, 82, 27, 82, 87, 76, 70, 69, 73, + 71, 71, 71, 68, 73, 84, 68, 68, 15, 69, 77, + 67, 68, 68, 67, 68, 68, 79, 71, 69, 73, 72, + 10, 91, 73, 15, 74, 65, 69, 68, 0, 0, 66, 65, + 1, 73, 73, 87, 46, 43, 45, 36, 26, 29, 28, 23, + 25, 20, 20, 21, 8, 5, 69, 8, 8, 1, 79, 2, 2, + 65, 1, 71, 71, 74, 77, 81, 79, 14, 10, 13, 4, + 76, 67, 68, 83, 72, 81, 84, 100, 93, 95, 100, + 0, 3, 89, 66, 64, 73, 85, 80, 81, 89, 79, 85, + 83, 94, 91, 95, 106, 71, 84, 91, 72, 4, 8, 10, + 21, 14, 20, 3, 19, 17, 25, 25, 30, 28, 15, 49, + 19, 11, 5, 66, 68, 90, 94, 100, 9, 39, 34, 34, + 26, 26, 15, 13, 6, 3, 72, 4, 8, 10, 21, 14, + 20, 3, 19, 17, 25, 25, 30, 28, 15, 49, 19, 11, + 5, 66, 68, 90, 94, 100 }, + + { + + 41, + 6, 79, 41, 6, 79, 74, 3, 22, 11, 64, 70, 17, + 37, 31, 7, 15, 64, 77, 6, 66, 68, 22, 83, 77, + 16, 9, 101, 111, 119, 67, 75, 70, 77, 6, 66, + 81, 2, 31, 1, 68, 74, 76, 92, 95, 91, 107, 64, + 75, 81, 72, 86, 84, 99, 3, 71, 71, 74, 27, 2, + 22, 0, 0, 0, 66, 93, 97, 5, 65, 67, 16, 71, + 89, 4, 4, 68, 26, 24, 66, 4, 68, 14, 69, 65, + 6, 100, 85, 87, 87, 20, 68, 7, 6, 69, 83, 70, + 70, 65, 75, 72, 84, 19, 73, 7, 73, 78, 65, 72, + 66, 4, 6, 4, 11, 6, 75, 64, 0, 67, 2, 72, 27, + 67, 1, 26, 24, 33, 28, 22, 91, 2, 1, 68, 67, + 80, 68, 20, 65, 65, 20, 39, 57, 46, 24, 91, + 94, 4, 38, 40, 115, 70, 8, 92, 16, 67, 1, 20, + 33, 55, 46, 29, 96, 80, 68, 64, 4, 85, 17, 21, + 16, 14, 17, 15, 8, 18, 15, 67, 3, 9, 3, 2, 71, + 4, 64, 68, 2, 0, 4, 2, 65, 93, 66, 67, 69, 70, + 78, 16, 27, 14, 8, 13, 14, 10, 14, 11, 83, 96, + 78, 78, 76, 114, 71, 66, 94, 12, 64, 64, 67, + 67, 76, 70, 66, 87, 93, 82, 85, 86, 82, 70, + 23, 18, 10, 4, 5, 64, 69, 71, 72, 3, 33, 19, + 13, 5, 18, 5, 3, 69, 6, 0, 30, 17, 12, 7, 15, + 3, 66, 69, 74, 71, 36, 18, 9, 4, 10, 66, 73, + 74, 7, 37, 26, 17, 8, 20, 6, 2, 66, 68, 62, + 85, 80, 73, 76, 78, 73, 71, 68, 68, 65, 2, 9, + 75, 73, 80, 81, 30, 82, 88, 76, 69, 68, 73, + 71, 71, 71, 67, 73, 85, 68, 68, 15, 69, 77, + 67, 68, 68, 68, 68, 68, 80, 72, 69, 73, 72, + 11, 92, 73, 16, 75, 65, 69, 68, 1, 0, 67, 64, + 2, 73, 73, 88, 45, 42, 44, 34, 24, 27, 26, 20, + 22, 17, 17, 18, 5, 2, 71, 4, 4, 66, 84, 64, 0, + 67, 64, 74, 73, 75, 78, 82, 79, 12, 8, 11, 2, + 78, 69, 70, 85, 74, 83, 86, 102, 95, 97, 101, + 64, 2, 91, 68, 66, 75, 87, 82, 83, 90, 80, 86, + 83, 93, 92, 97, 107, 72, 85, 92, 72, 4, 8, 10, + 22, 15, 21, 3, 20, 18, 26, 25, 31, 28, 16, 49, + 17, 9, 3, 68, 70, 92, 96, 101, 9, 40, 34, 35, + 26, 27, 15, 13, 7, 3, 72, 4, 8, 10, 22, 15, + 21, 3, 20, 18, 26, 25, 31, 28, 16, 49, 17, 9, + 3, 68, 70, 92, 96, 101 }, + + { + + 40, + 6, 79, 40, 6, 79, 72, 4, 22, 11, 64, 72, 15, + 36, 32, 7, 17, 66, 77, 8, 66, 68, 23, 84, 78, + 15, 7, 104, 113, 120, 65, 74, 70, 77, 8, 66, + 81, 3, 31, 1, 67, 73, 75, 93, 96, 91, 107, 64, + 75, 80, 72, 86, 84, 99, 3, 71, 71, 73, 27, 2, + 22, 0, 0, 0, 65, 93, 97, 5, 66, 67, 16, 70, + 88, 6, 5, 67, 28, 26, 65, 5, 66, 15, 68, 64, + 8, 101, 85, 87, 87, 20, 68, 8, 8, 69, 82, 69, + 68, 65, 75, 72, 84, 19, 73, 8, 72, 78, 64, 72, + 66, 4, 7, 5, 12, 6, 75, 64, 0, 67, 2, 72, 27, + 67, 1, 26, 24, 33, 28, 22, 91, 3, 2, 69, 67, + 80, 68, 21, 65, 64, 21, 40, 58, 48, 26, 92, + 95, 5, 38, 40, 116, 70, 8, 92, 17, 67, 1, 21, + 33, 55, 46, 30, 97, 79, 69, 67, 1, 84, 17, 21, + 16, 13, 17, 15, 8, 18, 15, 68, 2, 9, 3, 2, 71, + 4, 65, 69, 2, 0, 4, 1, 66, 94, 67, 68, 69, 71, + 78, 14, 25, 12, 7, 11, 12, 7, 12, 10, 85, 98, + 79, 80, 78, 115, 72, 67, 96, 11, 65, 65, 68, + 69, 78, 72, 68, 88, 93, 83, 86, 88, 80, 68, + 24, 19, 10, 4, 6, 0, 68, 70, 70, 4, 34, 20, + 14, 6, 19, 6, 4, 68, 8, 1, 31, 18, 13, 7, 16, + 4, 65, 68, 73, 71, 37, 19, 9, 4, 11, 65, 73, + 73, 8, 37, 27, 17, 8, 21, 7, 3, 65, 67, 62, + 84, 78, 71, 74, 77, 72, 69, 66, 66, 0, 4, 11, + 74, 72, 79, 80, 33, 82, 89, 76, 68, 67, 73, + 71, 71, 71, 67, 73, 86, 68, 68, 16, 69, 77, + 67, 68, 68, 68, 68, 68, 81, 73, 69, 73, 72, + 12, 93, 73, 17, 76, 65, 69, 68, 1, 0, 67, 64, + 3, 73, 73, 90, 44, 41, 43, 32, 22, 24, 23, 17, + 20, 14, 14, 15, 2, 64, 73, 0, 1, 70, 89, 67, + 65, 69, 66, 76, 75, 76, 79, 83, 79, 10, 6, 9, + 0, 80, 71, 71, 87, 76, 85, 88, 104, 97, 99, + 102, 65, 1, 93, 69, 68, 76, 89, 83, 84, 91, + 81, 87, 83, 92, 93, 98, 109, 73, 86, 93, 72, + 5, 9, 11, 23, 16, 22, 3, 21, 19, 27, 26, 32, + 29, 17, 48, 15, 7, 1, 70, 72, 94, 98, 102, 10, + 40, 35, 36, 27, 28, 16, 14, 7, 4, 72, 5, 9, + 11, 23, 16, 22, 3, 21, 19, 27, 26, 32, 29, 17, + 48, 15, 7, 1, 70, 72, 94, 98, 102 }, + + { + + 38, + 5, 80, 38, 5, 80, 71, 5, 22, 11, 65, 74, 13, + 35, 32, 7, 18, 68, 77, 9, 67, 69, 24, 85, 80, + 13, 5, 108, 116, 121, 0, 73, 70, 77, 9, 67, + 81, 3, 31, 0, 67, 73, 74, 95, 98, 92, 108, 65, + 75, 80, 73, 87, 84, 99, 2, 71, 71, 73, 27, 1, + 22, 0, 0, 0, 65, 94, 97, 5, 67, 68, 15, 70, + 87, 8, 6, 67, 29, 27, 65, 6, 65, 15, 67, 64, + 10, 102, 86, 88, 88, 20, 69, 8, 10, 69, 82, + 69, 67, 65, 75, 72, 84, 19, 74, 8, 72, 78, 64, + 72, 66, 4, 7, 6, 12, 6, 76, 65, 0, 67, 1, 72, + 27, 67, 1, 26, 24, 33, 28, 22, 92, 3, 2, 70, + 67, 80, 69, 21, 65, 64, 22, 41, 58, 49, 27, + 93, 97, 5, 38, 40, 117, 71, 8, 93, 17, 68, 1, + 22, 33, 54, 46, 31, 98, 78, 71, 70, 66, 83, + 16, 21, 15, 12, 16, 14, 7, 17, 14, 69, 1, 8, + 2, 1, 72, 3, 66, 70, 1, 64, 3, 0, 67, 96, 68, + 69, 69, 73, 79, 11, 22, 10, 5, 9, 9, 3, 9, 8, + 87, 101, 81, 83, 80, 117, 74, 69, 98, 9, 66, + 66, 70, 71, 80, 74, 70, 90, 93, 84, 87, 90, + 79, 67, 25, 19, 10, 4, 6, 0, 68, 70, 69, 5, + 34, 20, 14, 6, 20, 7, 5, 68, 10, 1, 31, 18, + 13, 7, 16, 4, 65, 68, 72, 71, 38, 20, 9, 3, + 11, 65, 73, 73, 8, 37, 27, 17, 8, 22, 7, 3, + 65, 67, 62, 83, 77, 70, 73, 76, 71, 68, 65, + 65, 1, 5, 13, 74, 72, 79, 80, 36, 82, 91, 76, + 68, 67, 73, 71, 71, 72, 67, 74, 87, 69, 68, + 16, 70, 77, 68, 68, 68, 69, 69, 69, 82, 74, + 70, 74, 72, 13, 94, 74, 17, 77, 66, 69, 69, 1, + 64, 68, 64, 3, 73, 73, 92, 42, 40, 41, 30, 19, + 21, 20, 14, 17, 11, 10, 12, 65, 67, 75, 67, + 66, 74, 95, 70, 68, 71, 69, 79, 77, 78, 81, + 84, 79, 7, 3, 6, 65, 83, 73, 73, 90, 78, 88, + 90, 107, 100, 101, 104, 67, 64, 96, 71, 70, + 78, 91, 85, 86, 92, 82, 88, 84, 91, 95, 100, + 111, 75, 88, 95, 72, 5, 9, 11, 24, 16, 22, 3, + 22, 19, 28, 26, 32, 29, 17, 47, 13, 5, 65, 73, + 74, 97, 100, 104, 10, 40, 35, 36, 27, 28, 16, + 14, 7, 4, 72, 5, 9, 11, 24, 16, 22, 3, 22, 19, + 28, 26, 32, 29, 17, 47, 13, 5, 65, 73, 74, 97, + 100, 104 }, + + { + + 37, + 5, 80, 37, 5, 80, 69, 7, 23, 12, 65, 75, 12, + 35, 33, 8, 20, 69, 76, 11, 67, 69, 26, 85, 81, + 12, 4, 111, 118, 121, 2, 71, 69, 76, 11, 67, + 80, 4, 32, 0, 66, 72, 72, 96, 99, 92, 108, 65, + 74, 79, 73, 87, 83, 98, 2, 70, 70, 72, 28, 1, + 22, 0, 0, 0, 64, 94, 97, 6, 67, 68, 15, 69, + 85, 11, 8, 66, 31, 29, 64, 8, 0, 16, 65, 0, + 13, 102, 86, 88, 88, 21, 69, 9, 13, 68, 81, + 68, 65, 65, 74, 72, 83, 20, 74, 9, 71, 77, 0, + 71, 65, 5, 8, 7, 13, 7, 76, 65, 1, 66, 1, 71, + 28, 66, 1, 27, 25, 34, 29, 23, 92, 4, 3, 70, + 67, 79, 69, 22, 64, 0, 24, 43, 59, 51, 29, 93, + 98, 6, 39, 41, 117, 71, 9, 93, 18, 68, 2, 24, + 33, 54, 47, 33, 99, 76, 72, 72, 69, 81, 16, + 21, 15, 12, 16, 14, 7, 17, 14, 69, 1, 8, 2, 1, + 72, 3, 66, 70, 1, 64, 3, 0, 67, 97, 68, 69, + 69, 74, 79, 9, 20, 9, 4, 8, 7, 0, 7, 7, 88, + 103, 82, 85, 81, 118, 75, 70, 99, 8, 66, 66, + 71, 72, 81, 75, 71, 91, 93, 84, 87, 91, 77, + 65, 27, 20, 10, 4, 7, 1, 67, 69, 67, 7, 35, + 21, 15, 7, 22, 8, 7, 67, 13, 2, 32, 19, 14, 8, + 17, 5, 64, 67, 70, 70, 40, 21, 10, 3, 12, 64, + 72, 72, 9, 38, 28, 18, 9, 23, 8, 4, 64, 66, + 62, 81, 75, 68, 71, 74, 69, 66, 0, 0, 3, 7, + 16, 73, 71, 78, 79, 40, 81, 92, 75, 67, 66, + 72, 71, 70, 72, 66, 74, 87, 69, 68, 17, 70, + 77, 68, 68, 67, 69, 69, 69, 82, 74, 70, 74, + 71, 15, 94, 74, 18, 77, 66, 69, 69, 2, 64, 68, + 0, 4, 72, 72, 93, 41, 39, 40, 29, 17, 19, 18, + 11, 15, 9, 7, 10, 68, 69, 77, 70, 69, 77, 100, + 72, 70, 72, 71, 81, 78, 79, 82, 84, 79, 5, 1, + 4, 67, 85, 74, 74, 92, 79, 90, 91, 109, 102, + 102, 105, 68, 65, 98, 72, 71, 79, 92, 86, 87, + 93, 82, 88, 84, 90, 96, 101, 112, 76, 89, 96, + 71, 6, 10, 12, 26, 17, 23, 4, 24, 20, 29, 27, + 33, 30, 18, 47, 12, 4, 67, 75, 75, 99, 101, + 105, 11, 41, 36, 37, 28, 29, 17, 15, 8, 5, 71, + 6, 10, 12, 26, 17, 23, 4, 24, 20, 29, 27, 33, + 30, 18, 47, 12, 4, 67, 75, 75, 99, 101, 105 }, + + { + + 36, + 5, 80, 36, 5, 80, 67, 8, 23, 12, 65, 77, 10, + 34, 34, 8, 22, 71, 76, 12, 67, 69, 27, 86, 82, + 11, 2, 114, 120, 122, 4, 70, 69, 76, 12, 67, + 80, 5, 32, 0, 65, 71, 71, 97, 100, 92, 108, + 65, 74, 78, 73, 87, 83, 98, 2, 70, 70, 71, 28, + 1, 22, 0, 0, 0, 0, 94, 97, 6, 68, 68, 15, 68, + 84, 13, 9, 65, 33, 31, 0, 9, 2, 17, 64, 1, 15, + 103, 86, 88, 88, 21, 69, 10, 15, 68, 80, 67, + 0, 65, 74, 72, 83, 20, 74, 9, 70, 77, 1, 71, + 65, 5, 8, 8, 14, 7, 76, 65, 1, 66, 1, 71, 28, + 66, 1, 27, 25, 34, 29, 23, 93, 5, 4, 71, 67, + 79, 69, 23, 64, 0, 25, 44, 60, 53, 31, 94, 99, + 6, 39, 41, 118, 71, 9, 94, 19, 68, 2, 25, 33, + 54, 47, 34, 100, 75, 73, 75, 72, 80, 16, 21, + 15, 11, 15, 14, 7, 17, 13, 70, 0, 8, 2, 1, 72, + 2, 67, 71, 1, 64, 3, 64, 68, 98, 69, 70, 69, + 75, 80, 7, 18, 7, 2, 6, 5, 66, 5, 6, 90, 105, + 84, 87, 83, 119, 76, 71, 101, 7, 67, 67, 72, + 74, 83, 77, 73, 93, 93, 85, 88, 93, 76, 64, + 28, 21, 10, 4, 8, 2, 66, 68, 65, 8, 36, 22, + 16, 8, 23, 9, 8, 66, 15, 3, 32, 19, 14, 8, 18, + 6, 0, 66, 69, 70, 41, 22, 10, 3, 13, 0, 72, + 71, 10, 38, 29, 18, 9, 24, 9, 5, 0, 65, 62, + 80, 73, 66, 69, 73, 68, 64, 2, 1, 5, 9, 18, + 72, 70, 77, 78, 43, 81, 93, 75, 66, 65, 72, + 71, 70, 72, 66, 74, 88, 69, 68, 18, 70, 77, + 68, 68, 67, 69, 69, 69, 83, 75, 70, 74, 71, + 16, 95, 74, 19, 78, 66, 69, 69, 2, 64, 68, 0, + 5, 72, 72, 95, 40, 38, 39, 27, 15, 16, 15, 8, + 13, 6, 4, 7, 71, 72, 79, 74, 73, 81, 105, 75, + 72, 74, 73, 83, 80, 80, 83, 85, 79, 3, 64, 2, + 69, 87, 76, 76, 94, 81, 92, 93, 111, 104, 104, + 106, 69, 66, 100, 74, 73, 81, 94, 87, 88, 94, + 83, 89, 84, 89, 97, 102, 114, 77, 90, 97, 71, + 6, 11, 13, 27, 18, 24, 4, 25, 21, 30, 27, 34, + 31, 19, 46, 10, 2, 69, 77, 77, 101, 103, 106, + 12, 41, 36, 38, 29, 30, 17, 16, 8, 6, 71, 6, + 11, 13, 27, 18, 24, 4, 25, 21, 30, 27, 34, 31, + 19, 46, 10, 2, 69, 77, 77, 101, 103, 106 }, + + { + + 35, + 5, 80, 35, 5, 80, 65, 10, 24, 12, 66, 79, 9, + 33, 34, 8, 24, 72, 76, 14, 67, 70, 28, 87, 83, + 10, 0, 118, 122, 123, 6, 68, 69, 76, 14, 67, + 79, 6, 33, 0, 64, 70, 70, 98, 101, 92, 109, + 65, 74, 77, 73, 88, 83, 98, 2, 70, 70, 70, 29, + 1, 22, 0, 0, 0, 0, 94, 97, 7, 69, 68, 14, 68, + 83, 15, 10, 64, 34, 32, 1, 10, 4, 18, 0, 2, + 17, 104, 86, 88, 88, 22, 69, 11, 17, 68, 79, + 66, 2, 65, 74, 72, 83, 21, 74, 10, 69, 77, 2, + 71, 65, 5, 9, 9, 14, 7, 76, 65, 1, 66, 1, 71, + 28, 66, 1, 28, 25, 35, 29, 24, 93, 5, 5, 71, + 67, 79, 69, 24, 64, 1, 26, 45, 61, 54, 33, 94, + 100, 7, 39, 41, 119, 71, 10, 94, 19, 68, 2, + 26, 33, 54, 47, 35, 101, 73, 74, 78, 75, 78, + 16, 21, 14, 10, 15, 13, 6, 17, 13, 71, 64, 8, + 2, 1, 73, 2, 68, 72, 0, 64, 3, 65, 68, 99, 69, + 71, 69, 76, 80, 5, 16, 5, 1, 4, 3, 69, 2, 5, + 92, 107, 85, 89, 85, 121, 77, 72, 103, 6, 68, + 68, 73, 75, 85, 79, 75, 94, 93, 86, 89, 94, + 74, 1, 30, 21, 10, 4, 9, 3, 65, 67, 0, 9, 37, + 23, 17, 8, 24, 10, 10, 65, 17, 3, 33, 20, 15, + 9, 19, 6, 0, 65, 68, 70, 43, 23, 10, 3, 14, 0, + 72, 70, 11, 39, 30, 19, 9, 25, 9, 6, 0, 65, + 62, 78, 72, 65, 67, 72, 66, 0, 3, 3, 7, 11, + 20, 72, 69, 77, 77, 46, 81, 94, 75, 65, 64, + 72, 71, 70, 72, 65, 74, 89, 69, 68, 18, 70, + 77, 68, 68, 67, 70, 69, 69, 84, 76, 70, 74, + 71, 17, 96, 74, 20, 79, 66, 69, 69, 3, 64, 69, + 1, 6, 72, 72, 96, 39, 37, 38, 25, 13, 14, 13, + 5, 10, 3, 1, 4, 74, 75, 81, 78, 76, 85, 110, + 78, 74, 76, 75, 86, 82, 81, 84, 86, 79, 1, 66, + 0, 71, 89, 78, 77, 96, 83, 94, 95, 113, 106, + 106, 107, 70, 67, 102, 75, 75, 82, 96, 89, 90, + 95, 84, 90, 84, 88, 98, 104, 115, 78, 91, 98, + 71, 7, 11, 13, 28, 19, 25, 4, 26, 22, 31, 28, + 35, 31, 20, 46, 8, 0, 71, 79, 79, 103, 105, + 107, 12, 42, 37, 39, 29, 31, 18, 16, 9, 6, 71, + 7, 11, 13, 28, 19, 25, 4, 26, 22, 31, 28, 35, + 31, 20, 46, 8, 0, 71, 79, 79, 103, 105, 107 }, + + { + + 33, + 5, 80, 33, 5, 80, 64, 11, 24, 12, 66, 81, 7, + 32, 35, 8, 25, 74, 76, 15, 68, 70, 29, 88, 85, + 8, 65, 121, 125, 124, 8, 67, 69, 76, 15, 68, + 79, 7, 33, 64, 64, 69, 68, 99, 103, 93, 109, + 65, 73, 76, 74, 88, 83, 98, 2, 70, 70, 70, 29, + 1, 22, 0, 0, 0, 1, 95, 97, 7, 70, 68, 14, 67, + 82, 17, 11, 0, 36, 34, 1, 11, 6, 19, 1, 3, 20, + 104, 87, 88, 89, 22, 70, 12, 20, 67, 79, 66, + 4, 65, 74, 72, 83, 21, 74, 10, 68, 77, 2, 70, + 65, 5, 9, 10, 15, 7, 77, 66, 1, 66, 1, 71, 28, + 66, 1, 28, 25, 35, 29, 24, 94, 6, 5, 72, 67, + 78, 69, 25, 0, 1, 28, 47, 62, 56, 35, 95, 101, + 7, 40, 41, 120, 71, 10, 95, 20, 68, 2, 27, 33, + 54, 47, 37, 102, 72, 75, 81, 78, 77, 15, 21, + 14, 10, 14, 13, 6, 17, 12, 72, 65, 7, 2, 1, + 73, 1, 68, 73, 0, 65, 2, 66, 69, 100, 70, 72, + 69, 78, 81, 3, 14, 3, 64, 3, 1, 73, 0, 4, 94, + 110, 87, 91, 87, 122, 79, 73, 104, 5, 69, 69, + 75, 77, 87, 81, 76, 96, 93, 87, 90, 96, 73, 2, + 31, 22, 10, 4, 10, 4, 64, 67, 2, 11, 38, 23, + 17, 9, 26, 11, 11, 64, 20, 4, 33, 20, 15, 9, + 20, 7, 1, 65, 67, 70, 44, 24, 10, 3, 15, 1, + 72, 69, 12, 39, 31, 19, 9, 26, 10, 7, 1, 64, + 62, 77, 70, 0, 66, 71, 65, 2, 5, 4, 8, 13, 23, + 71, 68, 76, 76, 49, 80, 95, 74, 64, 64, 72, + 71, 70, 73, 65, 75, 90, 69, 68, 19, 70, 77, + 68, 68, 66, 70, 70, 69, 85, 77, 71, 74, 71, + 18, 97, 75, 20, 79, 67, 69, 69, 3, 65, 69, 1, + 6, 72, 72, 98, 38, 36, 37, 24, 10, 11, 10, 2, + 8, 0, 66, 1, 78, 77, 83, 82, 80, 89, 115, 81, + 76, 78, 77, 88, 84, 83, 85, 87, 79, 65, 69, + 66, 73, 91, 80, 79, 98, 85, 96, 97, 115, 109, + 107, 109, 71, 68, 105, 77, 76, 84, 98, 90, 91, + 96, 85, 91, 84, 87, 100, 105, 117, 80, 92, 99, + 71, 7, 12, 14, 29, 19, 25, 5, 27, 23, 32, 28, + 36, 32, 20, 45, 6, 65, 73, 81, 81, 106, 107, + 109, 13, 42, 37, 39, 30, 31, 18, 17, 9, 7, 71, + 7, 12, 14, 29, 19, 25, 5, 27, 23, 32, 28, 36, + 32, 20, 45, 6, 65, 73, 81, 81, 106, 107, 109 }, + + { + + 32, + 5, 80, 32, 5, 80, 1, 13, 24, 12, 67, 83, 6, + 31, 36, 8, 27, 76, 75, 17, 68, 70, 30, 89, 86, + 7, 67, 124, 126, 124, 10, 66, 69, 75, 17, 68, + 79, 8, 33, 64, 0, 68, 67, 100, 104, 93, 109, + 65, 73, 75, 74, 88, 83, 98, 2, 69, 70, 69, 30, + 1, 22, 0, 0, 0, 1, 95, 97, 8, 71, 68, 13, 67, + 80, 20, 12, 1, 37, 35, 2, 12, 8, 20, 2, 4, 22, + 105, 87, 88, 89, 22, 70, 13, 22, 67, 78, 65, + 6, 65, 74, 72, 82, 21, 74, 11, 67, 76, 3, 70, + 65, 6, 10, 11, 15, 7, 77, 66, 2, 66, 1, 71, + 29, 66, 1, 29, 26, 35, 29, 24, 94, 6, 6, 72, + 67, 78, 69, 26, 0, 2, 29, 48, 62, 57, 37, 95, + 102, 8, 40, 41, 121, 71, 11, 95, 21, 68, 2, + 29, 33, 54, 47, 38, 103, 70, 76, 83, 81, 76, + 15, 21, 13, 9, 14, 13, 5, 17, 12, 73, 66, 7, + 2, 1, 73, 1, 69, 74, 64, 65, 2, 67, 69, 101, + 71, 72, 69, 79, 81, 1, 12, 2, 65, 1, 64, 76, + 66, 3, 96, 112, 88, 93, 89, 123, 80, 74, 106, + 4, 70, 70, 76, 78, 89, 83, 78, 97, 93, 88, 91, + 98, 71, 4, 32, 22, 10, 4, 11, 5, 0, 66, 4, 12, + 39, 24, 18, 10, 27, 12, 13, 0, 22, 5, 34, 21, + 16, 10, 21, 8, 1, 64, 66, 69, 45, 25, 10, 3, + 16, 1, 71, 68, 13, 39, 32, 19, 9, 27, 11, 8, + 1, 0, 62, 76, 69, 1, 64, 70, 0, 3, 7, 6, 10, + 15, 25, 70, 67, 75, 75, 52, 80, 96, 74, 0, 0, + 72, 71, 70, 73, 64, 75, 91, 69, 68, 20, 70, + 77, 68, 68, 66, 71, 70, 69, 86, 78, 71, 74, + 71, 19, 97, 75, 21, 80, 67, 69, 69, 3, 65, 70, + 1, 7, 72, 72, 99, 37, 35, 36, 22, 8, 9, 7, 64, + 5, 66, 69, 65, 81, 80, 85, 86, 83, 93, 120, + 84, 78, 79, 79, 91, 86, 84, 86, 88, 79, 67, + 71, 68, 75, 93, 82, 80, 100, 87, 98, 99, 117, + 111, 109, 110, 72, 69, 107, 78, 78, 85, 100, + 91, 92, 97, 86, 92, 84, 86, 101, 106, 118, 81, + 93, 100, 71, 8, 12, 15, 30, 20, 26, 5, 28, 24, + 33, 29, 37, 32, 21, 45, 4, 67, 75, 83, 83, + 108, 109, 110, 13, 43, 38, 40, 31, 32, 19, 17, + 9, 8, 71, 8, 12, 15, 30, 20, 26, 5, 28, 24, + 33, 29, 37, 32, 21, 45, 4, 67, 75, 83, 83, + 108, 109, 110 }, + + { + + 31, + 5, 81, 31, 5, 81, 3, 14, 25, 12, 67, 84, 4, + 30, 36, 9, 29, 77, 75, 18, 68, 71, 31, 90, 87, + 6, 68, 126, 126, 125, 12, 64, 69, 75, 18, 68, + 78, 9, 34, 64, 1, 67, 66, 102, 105, 93, 110, + 65, 73, 75, 74, 89, 82, 98, 1, 69, 70, 68, 30, + 1, 22, 0, 0, 0, 2, 95, 97, 8, 71, 69, 13, 66, + 79, 22, 13, 2, 39, 37, 3, 13, 10, 21, 3, 4, + 24, 106, 87, 88, 89, 23, 70, 14, 24, 67, 77, + 64, 8, 65, 74, 72, 82, 22, 75, 11, 67, 76, 4, + 70, 64, 6, 10, 12, 16, 7, 77, 66, 2, 66, 1, + 71, 29, 66, 1, 29, 26, 36, 30, 25, 95, 7, 7, + 73, 67, 78, 69, 27, 0, 2, 30, 49, 62, 59, 38, + 96, 103, 8, 40, 41, 121, 72, 11, 96, 21, 69, + 3, 30, 33, 54, 48, 39, 104, 69, 77, 86, 84, + 74, 15, 21, 13, 8, 13, 12, 5, 16, 11, 73, 66, + 7, 1, 1, 74, 0, 70, 75, 64, 65, 2, 67, 70, + 103, 71, 73, 69, 80, 82, 65, 10, 0, 67, 64, + 66, 79, 68, 1, 98, 114, 90, 95, 91, 125, 81, + 76, 108, 2, 71, 71, 77, 80, 91, 85, 80, 99, + 93, 89, 92, 99, 70, 5, 34, 23, 10, 4, 12, 5, + 0, 65, 5, 13, 40, 25, 19, 10, 28, 13, 14, 1, + 24, 5, 34, 21, 16, 10, 22, 8, 2, 0, 65, 69, + 47, 26, 10, 3, 16, 2, 71, 68, 13, 40, 32, 20, + 9, 28, 11, 8, 2, 0, 62, 74, 67, 3, 1, 68, 1, + 5, 8, 7, 12, 17, 27, 70, 66, 75, 75, 55, 80, + 97, 74, 0, 1, 72, 71, 70, 73, 64, 75, 92, 69, + 68, 20, 70, 77, 68, 68, 66, 71, 70, 69, 87, + 79, 71, 74, 71, 20, 98, 75, 22, 81, 67, 69, + 69, 4, 65, 70, 2, 8, 72, 72, 101, 36, 34, 35, + 20, 6, 6, 5, 67, 3, 69, 72, 68, 84, 83, 87, + 89, 87, 97, 125, 86, 81, 81, 81, 93, 88, 85, + 87, 89, 79, 69, 73, 70, 77, 95, 83, 82, 102, + 89, 101, 101, 119, 113, 111, 111, 73, 71, 109, + 80, 80, 87, 102, 93, 94, 98, 87, 93, 85, 85, + 102, 108, 120, 82, 95, 101, 70, 8, 13, 15, 31, + 21, 27, 5, 29, 25, 34, 29, 38, 33, 22, 44, 2, + 69, 77, 85, 85, 110, 111, 111, 14, 43, 38, 41, + 31, 33, 19, 18, 10, 8, 70, 8, 13, 15, 31, 21, + 27, 5, 29, 25, 34, 29, 38, 33, 22, 44, 2, 69, + 77, 85, 85, 110, 111, 111 }, + + { + + 30, + 5, 81, 30, 5, 81, 5, 16, 25, 12, 68, 86, 3, + 29, 37, 9, 30, 79, 75, 20, 69, 71, 32, 91, 88, + 5, 70, 126, 126, 126, 14, 0, 69, 75, 20, 69, + 78, 10, 34, 64, 1, 66, 64, 103, 106, 93, 110, + 65, 72, 74, 75, 89, 82, 98, 1, 69, 70, 67, 31, + 1, 22, 0, 0, 0, 2, 95, 97, 9, 72, 69, 12, 66, + 78, 24, 14, 3, 40, 38, 4, 14, 12, 22, 4, 5, + 27, 106, 88, 88, 90, 23, 70, 15, 27, 66, 77, + 64, 10, 65, 74, 72, 82, 22, 75, 12, 66, 76, 5, + 69, 64, 6, 11, 13, 16, 7, 78, 66, 2, 66, 1, + 71, 29, 66, 1, 30, 26, 36, 30, 25, 95, 7, 7, + 73, 67, 77, 69, 28, 1, 3, 32, 51, 62, 60, 40, + 96, 104, 9, 41, 41, 122, 72, 12, 96, 22, 69, + 3, 31, 33, 54, 48, 41, 105, 67, 78, 89, 87, + 73, 15, 21, 12, 8, 13, 12, 4, 16, 11, 74, 67, + 7, 1, 1, 74, 0, 70, 76, 65, 65, 2, 68, 70, + 104, 72, 74, 69, 81, 82, 67, 8, 65, 68, 65, + 68, 82, 71, 0, 100, 116, 91, 97, 93, 126, 82, + 77, 109, 1, 72, 72, 79, 81, 93, 87, 81, 100, + 93, 90, 93, 101, 68, 7, 35, 23, 10, 4, 13, 6, + 1, 65, 7, 15, 41, 26, 19, 11, 30, 14, 16, 2, + 27, 6, 35, 22, 17, 11, 23, 9, 2, 1, 64, 69, + 48, 27, 10, 3, 17, 2, 71, 67, 14, 40, 33, 20, + 9, 29, 12, 9, 2, 1, 62, 73, 66, 4, 2, 67, 3, + 6, 10, 9, 14, 19, 30, 69, 65, 74, 74, 58, 79, + 98, 73, 1, 2, 72, 71, 70, 73, 0, 76, 93, 69, + 68, 21, 70, 77, 68, 68, 65, 72, 71, 69, 88, + 80, 72, 74, 71, 21, 99, 76, 23, 81, 68, 69, + 69, 4, 66, 71, 2, 8, 72, 72, 102, 35, 33, 34, + 19, 3, 4, 2, 70, 0, 72, 75, 71, 87, 85, 89, + 93, 90, 101, 126, 89, 83, 83, 83, 96, 90, 86, + 88, 90, 79, 71, 76, 73, 79, 97, 85, 83, 104, + 91, 103, 103, 121, 115, 112, 113, 74, 72, 111, + 81, 81, 88, 104, 94, 95, 99, 88, 94, 85, 84, + 104, 109, 121, 84, 96, 102, 70, 9, 13, 16, 32, + 22, 27, 6, 30, 26, 35, 30, 39, 33, 22, 44, 0, + 71, 79, 87, 87, 113, 113, 112, 14, 44, 39, 41, + 32, 34, 20, 18, 10, 9, 70, 9, 13, 16, 32, 22, + 27, 6, 30, 26, 35, 30, 39, 33, 22, 44, 0, 71, + 79, 87, 87, 113, 113, 112 }, + + { + + 28, + 4, 81, 28, 4, 81, 6, 17, 25, 12, 68, 88, 1, + 28, 37, 9, 32, 81, 75, 21, 69, 72, 33, 92, 90, + 3, 72, 126, 126, 126, 16, 1, 69, 75, 21, 69, + 78, 10, 34, 65, 2, 65, 0, 104, 108, 94, 111, + 65, 72, 73, 75, 90, 82, 98, 1, 69, 70, 67, 31, + 1, 22, 0, 0, 0, 3, 96, 97, 9, 73, 69, 12, 65, + 77, 26, 15, 3, 42, 40, 4, 15, 14, 22, 5, 6, + 29, 107, 88, 89, 90, 23, 71, 15, 29, 66, 76, + 0, 11, 65, 74, 72, 82, 22, 75, 12, 65, 76, 5, + 69, 64, 6, 11, 14, 17, 7, 78, 67, 2, 66, 0, + 71, 29, 66, 1, 30, 26, 36, 30, 25, 96, 8, 8, + 74, 67, 77, 69, 29, 1, 3, 33, 52, 62, 62, 42, + 97, 105, 9, 41, 41, 123, 72, 12, 97, 22, 69, + 3, 32, 33, 54, 48, 42, 106, 66, 79, 92, 91, + 72, 14, 21, 12, 7, 12, 11, 4, 16, 10, 75, 68, + 6, 1, 0, 75, 64, 71, 77, 65, 66, 1, 69, 71, + 105, 73, 75, 69, 83, 83, 69, 6, 67, 70, 67, + 71, 86, 73, 64, 102, 119, 93, 100, 95, 126, + 84, 78, 111, 0, 73, 73, 80, 83, 95, 89, 83, + 102, 93, 91, 94, 103, 67, 8, 36, 24, 10, 4, + 13, 7, 2, 64, 9, 16, 41, 26, 20, 11, 31, 15, + 17, 3, 29, 6, 35, 22, 17, 11, 23, 9, 3, 1, 0, + 69, 49, 28, 10, 3, 18, 3, 71, 66, 15, 40, 34, + 20, 9, 30, 12, 10, 3, 1, 62, 72, 64, 6, 4, 66, + 4, 8, 11, 10, 15, 21, 32, 69, 64, 74, 73, 61, + 79, 99, 73, 2, 2, 72, 71, 70, 74, 0, 76, 94, + 69, 68, 21, 70, 77, 69, 68, 65, 72, 71, 70, + 89, 81, 72, 75, 71, 22, 100, 76, 23, 82, 68, + 69, 70, 4, 66, 71, 2, 9, 72, 72, 104, 34, 32, + 33, 17, 1, 1, 64, 73, 65, 75, 79, 74, 91, 88, + 91, 97, 94, 105, 126, 92, 85, 85, 86, 98, 92, + 88, 90, 91, 79, 74, 78, 75, 81, 100, 87, 85, + 107, 93, 105, 105, 123, 118, 114, 114, 76, 73, + 114, 83, 83, 90, 106, 96, 97, 100, 89, 95, 85, + 83, 105, 111, 123, 85, 97, 103, 70, 9, 14, 16, + 33, 22, 28, 6, 31, 26, 36, 30, 39, 34, 23, 43, + 65, 73, 81, 89, 89, 115, 115, 114, 15, 44, 39, + 42, 32, 34, 20, 19, 10, 9, 70, 9, 14, 16, 33, + 22, 28, 6, 31, 26, 36, 30, 39, 34, 23, 43, 65, + 73, 81, 89, 89, 115, 115, 114 }, + + { + + 27, + 4, 81, 27, 4, 81, 8, 18, 26, 12, 68, 90, 64, + 28, 38, 9, 34, 82, 74, 23, 69, 72, 34, 92, 91, + 2, 74, 126, 126, 126, 18, 3, 68, 74, 23, 69, + 77, 11, 35, 65, 3, 64, 1, 105, 109, 94, 111, + 65, 72, 72, 75, 90, 82, 98, 1, 68, 69, 66, 31, + 1, 22, 0, 0, 0, 4, 96, 97, 9, 74, 69, 12, 64, + 75, 29, 16, 4, 44, 42, 5, 16, 16, 23, 7, 7, + 31, 108, 88, 89, 90, 24, 71, 16, 31, 66, 75, + 1, 13, 65, 73, 72, 81, 23, 75, 13, 64, 75, 6, + 69, 64, 7, 12, 15, 18, 7, 78, 67, 3, 65, 0, + 71, 30, 66, 1, 30, 27, 37, 30, 26, 96, 9, 9, + 75, 67, 77, 69, 30, 1, 4, 34, 53, 62, 62, 44, + 98, 106, 10, 41, 42, 124, 72, 12, 97, 23, 69, + 3, 34, 33, 54, 48, 43, 107, 65, 80, 94, 94, + 70, 14, 21, 12, 6, 12, 11, 4, 16, 10, 76, 69, + 6, 1, 0, 75, 64, 72, 77, 65, 66, 1, 70, 72, + 106, 73, 75, 69, 84, 83, 71, 4, 68, 71, 69, + 73, 89, 75, 65, 104, 121, 94, 102, 96, 126, + 85, 79, 113, 64, 74, 74, 81, 85, 96, 91, 85, + 103, 93, 91, 95, 104, 65, 10, 38, 25, 10, 4, + 14, 8, 3, 0, 11, 17, 42, 27, 21, 12, 32, 16, + 18, 4, 31, 7, 36, 23, 18, 11, 24, 10, 4, 2, 2, + 68, 51, 29, 11, 3, 19, 4, 70, 65, 16, 41, 35, + 21, 10, 31, 13, 11, 4, 2, 62, 70, 1, 8, 6, 65, + 5, 10, 13, 12, 17, 23, 34, 68, 0, 73, 72, 62, + 79, 100, 73, 3, 3, 71, 71, 70, 74, 0, 76, 95, + 69, 68, 22, 70, 77, 69, 68, 65, 72, 71, 70, + 89, 82, 72, 75, 70, 24, 100, 76, 24, 83, 68, + 69, 70, 5, 66, 71, 3, 10, 71, 71, 106, 33, 31, + 32, 15, 64, 65, 66, 76, 67, 77, 82, 76, 94, + 91, 93, 101, 97, 108, 126, 95, 87, 86, 88, + 100, 93, 89, 91, 92, 79, 76, 80, 77, 83, 102, + 89, 86, 109, 95, 107, 107, 125, 120, 116, 115, + 77, 74, 116, 84, 85, 91, 108, 97, 98, 101, 90, + 95, 85, 82, 106, 112, 125, 86, 98, 104, 70, + 10, 15, 17, 35, 23, 29, 6, 32, 27, 37, 31, 40, + 35, 24, 42, 66, 75, 83, 91, 91, 117, 117, 115, + 16, 44, 40, 43, 33, 35, 21, 20, 11, 10, 70, + 10, 15, 17, 35, 23, 29, 6, 32, 27, 37, 31, 40, + 35, 24, 42, 66, 75, 83, 91, 91, 117, 117, 115 }, + + { + + 26, + 4, 81, 26, 4, 81, 10, 20, 26, 12, 69, 92, 65, + 27, 39, 9, 35, 84, 74, 24, 70, 72, 35, 93, 92, + 1, 76, 126, 126, 126, 20, 4, 68, 74, 24, 70, + 77, 12, 35, 65, 3, 0, 3, 106, 110, 94, 111, + 65, 71, 71, 76, 90, 82, 98, 1, 68, 69, 65, 32, + 1, 22, 0, 0, 0, 4, 96, 97, 10, 75, 69, 11, 64, + 74, 31, 17, 5, 45, 43, 6, 17, 18, 24, 8, 8, + 34, 108, 89, 89, 91, 24, 71, 17, 34, 65, 75, + 1, 15, 65, 73, 72, 81, 23, 75, 13, 0, 75, 7, + 68, 64, 7, 12, 16, 18, 7, 79, 67, 3, 65, 0, + 71, 30, 66, 1, 31, 27, 37, 30, 26, 97, 9, 9, + 75, 67, 76, 69, 31, 2, 4, 36, 55, 62, 62, 46, + 98, 107, 10, 42, 42, 125, 72, 13, 98, 24, 69, + 3, 35, 33, 54, 48, 45, 108, 0, 81, 97, 97, 69, + 14, 21, 11, 6, 11, 11, 3, 16, 9, 77, 70, 6, 1, + 0, 75, 65, 72, 78, 66, 66, 1, 71, 72, 107, 74, + 76, 69, 85, 84, 73, 2, 70, 73, 70, 75, 92, 78, + 66, 106, 123, 96, 104, 98, 126, 86, 80, 114, + 65, 75, 75, 83, 86, 98, 93, 86, 105, 93, 92, + 96, 106, 64, 11, 39, 25, 10, 4, 15, 9, 4, 0, + 13, 19, 43, 28, 21, 13, 34, 17, 20, 5, 34, 8, + 36, 23, 18, 12, 25, 11, 4, 3, 3, 68, 52, 30, + 11, 3, 20, 4, 70, 64, 17, 41, 36, 21, 10, 32, + 14, 12, 4, 3, 62, 69, 2, 9, 7, 64, 7, 11, 15, + 13, 19, 25, 37, 67, 1, 72, 71, 62, 78, 101, + 72, 4, 4, 71, 71, 70, 74, 1, 77, 96, 69, 68, + 23, 70, 77, 69, 68, 64, 73, 72, 70, 90, 83, + 73, 75, 70, 25, 101, 77, 25, 83, 69, 69, 70, + 5, 67, 72, 3, 10, 71, 71, 107, 32, 30, 31, 14, + 67, 67, 69, 79, 70, 80, 85, 79, 97, 93, 95, + 105, 101, 112, 126, 98, 89, 88, 90, 103, 95, + 90, 92, 93, 79, 78, 83, 80, 85, 104, 91, 88, + 111, 97, 109, 109, 126, 122, 117, 117, 78, 75, + 118, 86, 86, 93, 110, 98, 99, 102, 91, 96, 85, + 81, 108, 113, 126, 88, 99, 105, 70, 10, 15, + 18, 36, 24, 29, 7, 33, 28, 38, 31, 41, 35, 24, + 42, 68, 77, 85, 93, 93, 120, 119, 116, 16, 45, + 40, 43, 34, 36, 21, 20, 11, 11, 70, 10, 15, + 18, 36, 24, 29, 7, 33, 28, 38, 31, 41, 35, 24, + 42, 68, 77, 85, 93, 93, 120, 119, 116 }, + + { + + 25, + 4, 82, 25, 4, 82, 12, 21, 27, 12, 69, 93, 67, + 26, 39, 10, 37, 85, 74, 26, 70, 73, 36, 94, + 93, 0, 77, 126, 126, 126, 22, 6, 68, 74, 26, + 70, 76, 13, 36, 65, 4, 1, 4, 108, 111, 94, + 112, 65, 71, 71, 76, 91, 81, 98, 0, 68, 69, + 64, 32, 1, 22, 0, 0, 0, 5, 96, 97, 10, 75, 70, + 11, 0, 73, 33, 18, 6, 47, 45, 7, 18, 20, 25, + 9, 8, 36, 109, 89, 89, 91, 25, 71, 18, 36, 65, + 74, 2, 17, 65, 73, 72, 81, 24, 76, 14, 0, 75, + 8, 68, 0, 7, 13, 17, 19, 7, 79, 67, 3, 65, 0, + 71, 30, 66, 1, 31, 27, 38, 31, 27, 97, 10, 10, + 76, 67, 76, 69, 32, 2, 5, 37, 56, 62, 62, 47, + 99, 108, 11, 42, 42, 125, 73, 13, 98, 24, 70, + 4, 36, 33, 54, 49, 46, 109, 1, 82, 100, 100, + 67, 14, 21, 11, 5, 11, 10, 3, 15, 9, 77, 70, + 6, 0, 0, 76, 65, 73, 79, 66, 66, 1, 71, 73, + 109, 74, 77, 69, 86, 84, 76, 0, 72, 74, 72, + 77, 95, 80, 68, 108, 125, 97, 106, 100, 126, + 87, 82, 116, 67, 76, 76, 84, 88, 100, 95, 88, + 106, 93, 93, 97, 107, 1, 13, 41, 26, 10, 4, + 16, 9, 4, 1, 14, 20, 44, 29, 22, 13, 35, 18, + 21, 6, 36, 8, 37, 24, 19, 12, 26, 11, 5, 4, 4, + 68, 54, 31, 11, 3, 20, 5, 70, 64, 17, 42, 36, + 22, 10, 33, 14, 12, 5, 3, 62, 67, 4, 11, 9, 1, + 8, 13, 16, 15, 21, 27, 39, 67, 2, 72, 71, 62, + 78, 102, 72, 4, 5, 71, 71, 70, 74, 1, 77, 97, + 69, 68, 23, 70, 77, 69, 68, 64, 73, 72, 70, + 91, 84, 73, 75, 70, 26, 102, 77, 26, 84, 69, + 69, 70, 6, 67, 72, 4, 11, 71, 71, 109, 31, 29, + 30, 12, 69, 70, 71, 82, 72, 83, 88, 82, 100, + 96, 97, 108, 104, 116, 126, 100, 92, 90, 92, + 105, 97, 91, 93, 94, 79, 80, 85, 82, 87, 106, + 92, 89, 113, 99, 112, 111, 126, 124, 119, 118, + 79, 77, 120, 87, 88, 94, 112, 100, 101, 103, + 92, 97, 86, 80, 109, 115, 126, 89, 101, 106, + 69, 11, 16, 18, 37, 25, 30, 7, 34, 29, 39, 32, + 42, 36, 25, 41, 70, 79, 87, 95, 95, 122, 121, + 117, 17, 45, 41, 44, 34, 37, 22, 21, 12, 11, + 69, 11, 16, 18, 37, 25, 30, 7, 34, 29, 39, 32, + 42, 36, 25, 41, 70, 79, 87, 95, 95, 122, 121, + 117 }, + + { + + 23, + 4, 82, 23, 4, 82, 13, 23, 27, 12, 70, 95, 68, + 25, 40, 10, 39, 87, 74, 27, 70, 73, 37, 95, + 95, 65, 79, 126, 126, 126, 24, 7, 68, 74, 27, + 70, 76, 14, 36, 66, 5, 2, 5, 109, 113, 95, + 112, 65, 71, 70, 76, 91, 81, 98, 0, 68, 69, + 64, 33, 1, 22, 0, 0, 0, 5, 97, 97, 11, 76, 70, + 10, 0, 72, 35, 19, 7, 48, 46, 7, 19, 22, 26, + 10, 9, 38, 110, 89, 89, 91, 25, 72, 19, 38, + 65, 73, 3, 19, 65, 73, 72, 81, 24, 76, 14, 1, + 75, 8, 68, 0, 7, 13, 18, 19, 7, 79, 68, 3, 65, + 0, 71, 30, 66, 1, 32, 27, 38, 31, 27, 98, 10, + 11, 76, 67, 76, 69, 33, 2, 5, 38, 57, 62, 62, + 49, 99, 109, 11, 42, 42, 126, 73, 14, 99, 25, + 70, 4, 37, 33, 54, 49, 47, 110, 3, 83, 103, + 103, 66, 13, 21, 10, 4, 10, 10, 2, 15, 8, 78, + 71, 5, 0, 0, 76, 66, 74, 80, 67, 67, 0, 72, + 73, 110, 75, 78, 69, 88, 85, 78, 65, 74, 76, + 74, 79, 99, 83, 69, 110, 126, 99, 108, 102, + 126, 89, 83, 118, 68, 77, 77, 85, 89, 102, 97, + 90, 108, 93, 94, 98, 109, 2, 14, 42, 26, 10, + 4, 17, 10, 5, 2, 16, 21, 45, 29, 23, 14, 36, + 19, 23, 7, 38, 9, 37, 24, 19, 13, 27, 12, 5, + 4, 5, 68, 55, 32, 11, 3, 21, 5, 70, 0, 18, 42, + 37, 22, 10, 34, 15, 13, 5, 4, 62, 66, 5, 12, + 11, 2, 10, 14, 18, 16, 22, 29, 41, 66, 3, 71, + 70, 62, 78, 103, 72, 5, 5, 71, 71, 70, 75, 2, + 77, 98, 69, 68, 24, 70, 77, 69, 68, 64, 74, + 72, 70, 92, 85, 73, 75, 70, 27, 103, 77, 26, + 85, 69, 69, 70, 6, 67, 73, 4, 12, 71, 71, 110, + 30, 28, 29, 10, 71, 72, 74, 85, 75, 86, 92, + 85, 104, 99, 99, 112, 108, 120, 126, 103, 94, + 92, 94, 108, 99, 93, 94, 95, 79, 83, 87, 84, + 89, 108, 94, 91, 115, 101, 114, 113, 126, 126, + 121, 119, 80, 78, 123, 89, 90, 96, 114, 101, + 102, 104, 93, 98, 86, 79, 110, 116, 126, 90, + 102, 107, 69, 11, 16, 19, 38, 25, 31, 7, 35, + 30, 40, 32, 43, 36, 26, 41, 72, 81, 89, 97, + 97, 124, 123, 119, 17, 46, 41, 45, 35, 37, 22, + 21, 12, 12, 69, 11, 16, 19, 38, 25, 31, 7, 35, + 30, 40, 32, 43, 36, 26, 41, 72, 81, 89, 97, + 97, 124, 123, 119 }, + + { + + 22, + 4, 82, 22, 4, 82, 15, 24, 27, 12, 70, 97, 70, + 24, 41, 10, 40, 89, 73, 29, 71, 73, 38, 96, + 96, 66, 81, 126, 126, 126, 26, 8, 68, 73, 29, + 71, 76, 15, 36, 66, 5, 3, 7, 110, 114, 95, + 112, 65, 70, 69, 77, 91, 81, 98, 0, 67, 69, 0, + 33, 1, 22, 0, 0, 0, 6, 97, 97, 11, 77, 70, 10, + 1, 70, 38, 20, 8, 50, 48, 8, 20, 24, 27, 11, + 10, 41, 110, 90, 89, 92, 25, 72, 20, 41, 64, + 73, 3, 21, 65, 73, 72, 80, 24, 76, 15, 2, 74, + 9, 67, 0, 8, 14, 19, 20, 7, 80, 68, 4, 65, 0, + 71, 31, 66, 1, 32, 28, 38, 31, 27, 98, 11, 11, + 77, 67, 75, 69, 34, 3, 6, 40, 59, 62, 62, 51, + 100, 110, 12, 43, 42, 126, 73, 14, 99, 26, 70, + 4, 39, 33, 54, 49, 49, 111, 4, 84, 105, 106, + 65, 13, 21, 10, 4, 10, 10, 2, 15, 8, 79, 72, + 5, 0, 0, 76, 66, 74, 81, 67, 67, 0, 73, 74, + 111, 76, 78, 69, 89, 85, 80, 67, 75, 77, 75, + 81, 102, 85, 70, 112, 126, 100, 110, 104, 126, + 90, 84, 119, 69, 78, 78, 87, 91, 104, 99, 91, + 109, 93, 95, 99, 111, 4, 16, 43, 27, 10, 4, + 18, 11, 6, 2, 18, 23, 46, 30, 23, 15, 38, 20, + 24, 8, 41, 10, 38, 25, 20, 13, 28, 13, 6, 5, + 6, 67, 56, 33, 11, 3, 22, 6, 69, 1, 19, 42, + 38, 22, 10, 35, 16, 14, 6, 5, 62, 65, 7, 14, + 12, 3, 11, 16, 20, 18, 24, 31, 44, 65, 4, 70, + 69, 62, 77, 104, 71, 6, 6, 71, 71, 70, 75, 2, + 78, 99, 69, 68, 25, 70, 77, 69, 68, 0, 74, 73, + 70, 93, 86, 74, 75, 70, 28, 103, 78, 27, 85, + 70, 69, 70, 6, 68, 73, 4, 12, 71, 71, 112, 29, + 27, 28, 9, 74, 75, 77, 88, 77, 89, 95, 88, + 107, 101, 101, 116, 111, 124, 126, 106, 96, + 93, 96, 110, 101, 94, 95, 96, 79, 85, 90, 87, + 91, 110, 96, 92, 117, 103, 116, 115, 126, 126, + 122, 121, 81, 79, 125, 90, 91, 97, 116, 102, + 103, 105, 94, 99, 86, 78, 112, 117, 126, 92, + 103, 108, 69, 12, 17, 20, 39, 26, 31, 8, 36, + 31, 41, 33, 44, 37, 26, 40, 74, 83, 91, 99, + 99, 126, 125, 120, 18, 46, 42, 45, 36, 38, 23, + 22, 12, 13, 69, 12, 17, 20, 39, 26, 31, 8, 36, + 31, 41, 33, 44, 37, 26, 40, 74, 83, 91, 99, + 99, 126, 125, 120 }, + + { + + 21, + 4, 82, 21, 4, 82, 17, 26, 28, 12, 71, 99, 71, + 23, 41, 10, 42, 90, 73, 30, 71, 74, 39, 97, + 97, 67, 83, 126, 126, 126, 28, 10, 68, 73, 30, + 71, 75, 16, 37, 66, 6, 4, 8, 111, 115, 95, + 113, 65, 70, 68, 77, 92, 81, 98, 0, 67, 69, 1, + 34, 1, 22, 0, 0, 0, 6, 97, 97, 12, 78, 70, 9, + 1, 69, 40, 21, 9, 51, 49, 9, 21, 26, 28, 12, + 11, 43, 111, 90, 89, 92, 26, 72, 21, 43, 64, + 72, 4, 23, 65, 73, 72, 80, 25, 76, 15, 3, 74, + 10, 67, 0, 8, 14, 20, 20, 7, 80, 68, 4, 65, 0, + 71, 31, 66, 1, 33, 28, 39, 31, 28, 99, 11, 12, + 77, 67, 75, 69, 35, 3, 6, 41, 60, 62, 62, 53, + 100, 111, 12, 43, 42, 126, 73, 15, 100, 26, + 70, 4, 40, 33, 54, 49, 50, 112, 6, 85, 108, + 109, 0, 13, 21, 9, 3, 9, 9, 1, 15, 7, 80, 73, + 5, 0, 0, 77, 67, 75, 82, 68, 67, 0, 74, 74, + 112, 76, 79, 69, 90, 86, 82, 69, 77, 79, 77, + 83, 105, 88, 71, 114, 126, 102, 112, 106, 126, + 91, 85, 121, 70, 79, 79, 88, 92, 106, 101, 93, + 111, 93, 96, 100, 112, 5, 17, 45, 27, 10, 4, + 19, 12, 7, 3, 20, 24, 47, 31, 24, 15, 39, 21, + 26, 9, 43, 10, 38, 25, 20, 14, 29, 13, 6, 6, + 7, 67, 58, 34, 11, 3, 23, 6, 69, 2, 20, 43, + 39, 23, 10, 36, 16, 15, 6, 5, 62, 0, 8, 15, + 14, 4, 13, 17, 21, 19, 26, 33, 46, 65, 5, 70, + 68, 62, 77, 105, 71, 7, 7, 71, 71, 70, 75, 3, + 78, 100, 69, 68, 25, 70, 77, 69, 68, 0, 75, + 73, 70, 94, 87, 74, 75, 70, 29, 104, 78, 28, + 86, 70, 69, 70, 7, 68, 74, 5, 13, 71, 71, 113, + 28, 26, 27, 7, 76, 77, 79, 91, 80, 92, 98, 91, + 110, 104, 103, 120, 115, 126, 126, 109, 98, + 95, 98, 113, 103, 95, 96, 97, 79, 87, 92, 89, + 93, 112, 98, 94, 119, 105, 118, 117, 126, 126, + 124, 122, 82, 80, 126, 92, 93, 99, 118, 104, + 105, 106, 95, 100, 86, 77, 113, 119, 126, 93, + 104, 109, 69, 12, 17, 20, 40, 27, 32, 8, 37, + 32, 42, 33, 45, 37, 27, 40, 76, 85, 93, 101, + 101, 126, 126, 121, 18, 47, 42, 46, 36, 39, + 23, 22, 13, 13, 69, 12, 17, 20, 40, 27, 32, 8, + 37, 32, 42, 33, 45, 37, 27, 40, 76, 85, 93, + 101, 101, 126, 126, 121 }, + + { + + 20, + 4, 82, 20, 4, 82, 19, 27, 28, 12, 71, 101, 73, + 22, 42, 10, 44, 92, 73, 32, 71, 74, 40, 98, + 98, 68, 85, 126, 126, 126, 30, 11, 68, 73, 32, + 71, 75, 17, 37, 66, 7, 5, 9, 112, 116, 95, + 113, 65, 70, 67, 77, 92, 81, 98, 0, 67, 69, 2, + 34, 1, 22, 0, 0, 0, 7, 97, 97, 12, 79, 70, 9, + 2, 68, 42, 22, 10, 53, 51, 10, 22, 28, 29, 13, + 12, 45, 112, 90, 89, 92, 26, 72, 22, 45, 64, + 71, 5, 25, 65, 73, 72, 80, 25, 76, 16, 4, 74, + 11, 67, 0, 8, 15, 21, 21, 7, 80, 68, 4, 65, 0, + 71, 31, 66, 1, 33, 28, 39, 31, 28, 99, 12, 13, + 78, 67, 75, 69, 36, 3, 7, 42, 61, 62, 62, 55, + 101, 112, 13, 43, 42, 126, 73, 15, 100, 27, + 70, 4, 41, 33, 54, 49, 51, 113, 7, 86, 111, + 112, 1, 13, 21, 9, 2, 9, 9, 1, 15, 7, 81, 74, + 5, 0, 0, 77, 67, 76, 83, 68, 67, 0, 75, 75, + 113, 77, 80, 69, 91, 86, 84, 71, 79, 80, 79, + 85, 108, 90, 72, 116, 126, 103, 114, 108, 126, + 92, 86, 123, 71, 80, 80, 89, 94, 108, 103, 95, + 112, 93, 97, 101, 114, 7, 19, 46, 28, 10, 4, + 20, 13, 8, 4, 22, 25, 48, 32, 25, 16, 40, 22, + 27, 10, 45, 11, 39, 26, 21, 14, 30, 14, 7, 7, + 8, 67, 59, 35, 11, 3, 24, 7, 69, 3, 21, 43, + 40, 23, 10, 37, 17, 16, 7, 6, 62, 1, 10, 17, + 16, 5, 14, 19, 23, 21, 28, 35, 48, 64, 6, 69, + 67, 62, 77, 106, 71, 8, 8, 71, 71, 70, 75, 3, + 78, 101, 69, 68, 26, 70, 77, 69, 68, 0, 75, + 73, 70, 95, 88, 74, 75, 70, 30, 105, 78, 29, + 87, 70, 69, 70, 7, 68, 74, 5, 14, 71, 71, 115, + 27, 25, 26, 5, 78, 80, 82, 94, 82, 95, 101, + 94, 113, 107, 105, 124, 118, 126, 126, 112, + 100, 97, 100, 115, 105, 96, 97, 98, 79, 89, + 94, 91, 95, 114, 100, 95, 121, 107, 120, 119, + 126, 126, 126, 123, 83, 81, 126, 93, 95, 100, + 120, 105, 106, 107, 96, 101, 86, 76, 114, 120, + 126, 94, 105, 110, 69, 13, 18, 21, 41, 28, 33, + 8, 38, 33, 43, 34, 46, 38, 28, 39, 78, 87, 95, + 103, 103, 126, 126, 122, 19, 47, 43, 47, 37, + 40, 24, 23, 13, 14, 69, 13, 18, 21, 41, 28, + 33, 8, 38, 33, 43, 34, 46, 38, 28, 39, 78, 87, + 95, 103, 103, 126, 126, 122 }, + + { + + 18, + 3, 83, 18, 3, 83, 20, 28, 28, 12, 72, 103, 75, + 21, 42, 10, 45, 94, 73, 33, 72, 75, 41, 99, + 100, 70, 87, 126, 126, 126, 32, 12, 68, 73, + 33, 72, 75, 17, 37, 67, 7, 5, 10, 114, 118, + 96, 114, 66, 70, 67, 78, 93, 81, 98, 64, 67, + 69, 2, 34, 0, 22, 0, 0, 0, 7, 98, 97, 12, 80, + 71, 8, 2, 67, 44, 23, 10, 54, 52, 10, 23, 29, + 29, 14, 12, 47, 113, 91, 90, 93, 26, 73, 22, + 47, 64, 71, 5, 26, 65, 73, 72, 80, 25, 77, 16, + 4, 74, 11, 67, 0, 8, 15, 22, 21, 7, 81, 69, 4, + 65, 64, 71, 31, 66, 1, 33, 28, 39, 31, 28, + 100, 12, 13, 79, 67, 75, 70, 36, 3, 7, 43, 62, + 62, 62, 56, 102, 114, 13, 43, 42, 126, 74, 15, + 101, 27, 71, 4, 42, 33, 53, 49, 52, 114, 8, + 88, 114, 116, 2, 12, 21, 8, 1, 8, 8, 0, 14, 6, + 82, 75, 4, 64, 64, 78, 68, 77, 84, 69, 68, 64, + 76, 76, 115, 78, 81, 69, 93, 87, 87, 74, 81, + 82, 81, 88, 112, 93, 74, 118, 126, 105, 117, + 110, 126, 94, 88, 125, 73, 81, 81, 91, 96, + 110, 105, 97, 114, 93, 98, 102, 116, 8, 20, + 47, 28, 10, 4, 20, 13, 8, 4, 23, 26, 48, 32, + 25, 16, 41, 23, 28, 10, 47, 11, 39, 26, 21, + 14, 30, 14, 7, 7, 9, 67, 60, 36, 11, 2, 24, 7, + 69, 3, 21, 43, 40, 23, 10, 38, 17, 16, 7, 6, + 62, 2, 11, 18, 17, 6, 15, 20, 24, 22, 29, 36, + 50, 64, 6, 69, 67, 62, 77, 108, 71, 8, 8, 71, + 71, 70, 76, 3, 79, 102, 70, 68, 26, 71, 77, + 70, 68, 0, 76, 74, 71, 96, 89, 75, 76, 70, 31, + 106, 79, 29, 88, 71, 69, 71, 7, 69, 75, 5, 14, + 71, 71, 117, 25, 24, 24, 3, 81, 83, 85, 97, + 85, 98, 105, 97, 117, 110, 107, 126, 122, 126, + 126, 115, 103, 99, 103, 118, 107, 98, 99, 99, + 79, 92, 97, 94, 97, 117, 102, 97, 124, 109, + 123, 121, 126, 126, 126, 125, 85, 83, 126, 95, + 97, 102, 122, 107, 108, 108, 97, 102, 87, 75, + 116, 122, 126, 96, 107, 112, 69, 13, 18, 21, + 42, 28, 33, 8, 39, 33, 44, 34, 46, 38, 28, 38, + 80, 89, 98, 106, 105, 126, 126, 124, 19, 47, + 43, 47, 37, 40, 24, 23, 13, 14, 69, 13, 18, + 21, 42, 28, 33, 8, 39, 33, 44, 34, 46, 38, 28, + 38, 80, 89, 98, 106, 105, 126, 126, 124 }, + + { + + 17, + 3, 83, 17, 3, 83, 22, 30, 29, 13, 72, 104, 76, + 21, 43, 11, 47, 95, 72, 35, 72, 75, 43, 99, + 101, 71, 88, 126, 126, 126, 34, 14, 67, 72, + 35, 72, 74, 18, 38, 67, 8, 6, 12, 115, 119, + 96, 114, 66, 69, 66, 78, 93, 80, 97, 64, 66, + 68, 3, 35, 0, 22, 0, 0, 0, 8, 98, 97, 13, 80, + 71, 8, 3, 65, 47, 25, 11, 56, 54, 11, 25, 31, + 30, 16, 13, 50, 113, 91, 90, 93, 27, 73, 23, + 50, 0, 70, 6, 28, 65, 72, 72, 79, 26, 77, 17, + 5, 73, 12, 66, 1, 9, 16, 23, 22, 8, 81, 69, 5, + 64, 64, 70, 32, 65, 1, 34, 29, 40, 32, 29, + 100, 13, 14, 79, 67, 74, 70, 37, 4, 8, 45, 62, + 62, 62, 58, 102, 115, 14, 44, 43, 126, 74, 16, + 101, 28, 71, 5, 44, 33, 53, 50, 54, 115, 10, + 89, 116, 119, 4, 12, 21, 8, 1, 8, 8, 0, 14, 6, + 82, 75, 4, 64, 64, 78, 68, 77, 84, 69, 68, 64, + 76, 76, 116, 78, 81, 69, 94, 87, 89, 76, 82, + 83, 82, 90, 115, 95, 75, 119, 126, 106, 119, + 111, 126, 95, 89, 126, 74, 81, 81, 92, 97, + 111, 106, 98, 115, 93, 98, 102, 117, 10, 22, + 49, 29, 10, 4, 21, 14, 9, 5, 25, 28, 49, 33, + 26, 17, 43, 24, 30, 11, 50, 12, 40, 27, 22, + 15, 31, 15, 8, 8, 11, 66, 62, 37, 12, 2, 25, + 8, 68, 4, 22, 44, 41, 24, 11, 39, 18, 17, 8, + 7, 62, 4, 13, 20, 19, 8, 17, 22, 26, 24, 31, + 38, 53, 0, 7, 68, 66, 62, 76, 109, 70, 9, 9, + 70, 71, 69, 76, 4, 79, 102, 70, 68, 27, 71, + 77, 70, 68, 1, 76, 74, 71, 96, 89, 75, 76, 69, + 33, 106, 79, 30, 88, 71, 69, 71, 8, 69, 75, 6, + 15, 70, 70, 118, 24, 23, 23, 2, 83, 85, 87, + 100, 87, 100, 108, 99, 120, 112, 109, 126, + 125, 126, 126, 117, 105, 100, 105, 120, 108, + 99, 100, 99, 79, 94, 99, 96, 99, 119, 103, 98, + 126, 110, 125, 122, 126, 126, 126, 126, 86, + 84, 126, 96, 98, 103, 123, 108, 109, 109, 97, + 102, 87, 74, 117, 123, 126, 97, 108, 113, 68, + 14, 19, 22, 44, 29, 34, 9, 41, 34, 45, 35, 47, + 39, 29, 38, 81, 90, 100, 108, 106, 126, 126, + 125, 20, 48, 44, 48, 38, 41, 25, 24, 14, 15, + 68, 14, 19, 22, 44, 29, 34, 9, 41, 34, 45, 35, + 47, 39, 29, 38, 81, 90, 100, 108, 106, 126, + 126, 125 }, + + { + + 16, + 3, 83, 16, 3, 83, 24, 31, 29, 13, 72, 106, 78, + 20, 44, 11, 49, 97, 72, 36, 72, 75, 44, 100, + 102, 72, 90, 126, 126, 126, 36, 15, 67, 72, + 36, 72, 74, 19, 38, 67, 9, 7, 13, 116, 120, + 96, 114, 66, 69, 65, 78, 93, 80, 97, 64, 66, + 68, 4, 35, 0, 22, 0, 0, 0, 9, 98, 97, 13, 81, + 71, 8, 4, 64, 49, 26, 12, 58, 56, 12, 26, 33, + 31, 17, 14, 52, 114, 91, 90, 93, 27, 73, 24, + 52, 0, 69, 7, 30, 65, 72, 72, 79, 26, 77, 17, + 6, 73, 13, 66, 1, 9, 16, 24, 23, 8, 81, 69, 5, + 64, 64, 70, 32, 65, 1, 34, 29, 40, 32, 29, + 101, 14, 15, 80, 67, 74, 70, 38, 4, 8, 46, 62, + 62, 62, 60, 103, 116, 14, 44, 43, 126, 74, 16, + 102, 29, 71, 5, 45, 33, 53, 50, 55, 116, 11, + 90, 119, 122, 5, 12, 21, 8, 0, 7, 8, 0, 14, 5, + 83, 76, 4, 64, 64, 78, 69, 78, 85, 69, 68, 64, + 77, 77, 117, 79, 82, 69, 95, 88, 91, 78, 84, + 85, 84, 92, 118, 97, 76, 121, 126, 108, 121, + 113, 126, 96, 90, 126, 75, 82, 82, 93, 99, + 113, 108, 100, 117, 93, 99, 103, 119, 11, 23, + 50, 30, 10, 4, 22, 15, 10, 6, 27, 29, 50, 34, + 27, 18, 44, 25, 31, 12, 52, 13, 40, 27, 22, + 15, 32, 16, 9, 9, 12, 66, 62, 38, 12, 2, 26, + 9, 68, 5, 23, 44, 42, 24, 11, 40, 19, 18, 9, + 8, 62, 5, 15, 22, 21, 9, 18, 24, 28, 25, 33, + 40, 55, 1, 8, 67, 65, 62, 76, 110, 70, 10, 10, + 70, 71, 69, 76, 4, 79, 103, 70, 68, 28, 71, + 77, 70, 68, 1, 76, 74, 71, 97, 90, 75, 76, 69, + 34, 107, 79, 31, 89, 71, 69, 71, 8, 69, 75, 6, + 16, 70, 70, 120, 23, 22, 22, 0, 85, 88, 90, + 103, 89, 103, 111, 102, 123, 115, 111, 126, + 126, 126, 126, 120, 107, 102, 107, 122, 110, + 100, 101, 100, 79, 96, 101, 98, 101, 121, 105, + 100, 126, 112, 126, 124, 126, 126, 126, 126, + 87, 85, 126, 98, 100, 105, 125, 109, 110, 110, + 98, 103, 87, 73, 118, 124, 126, 98, 109, 114, + 68, 14, 20, 23, 45, 30, 35, 9, 42, 35, 46, 35, + 48, 40, 30, 37, 83, 92, 102, 110, 108, 126, + 126, 126, 21, 48, 44, 49, 39, 42, 25, 25, 14, + 16, 68, 14, 20, 23, 45, 30, 35, 9, 42, 35, 46, + 35, 48, 40, 30, 37, 83, 92, 102, 110, 108, + 126, 126, 126 }, + + { + + 15, + 3, 83, 15, 3, 83, 26, 33, 30, 13, 73, 108, 79, + 19, 44, 11, 51, 98, 72, 38, 72, 76, 45, 101, + 103, 73, 92, 126, 126, 126, 38, 17, 67, 72, + 38, 72, 73, 20, 39, 67, 10, 8, 14, 117, 121, + 96, 115, 66, 69, 64, 78, 94, 80, 97, 64, 66, + 68, 5, 36, 0, 22, 0, 0, 0, 9, 98, 97, 14, 82, + 71, 7, 4, 0, 51, 27, 13, 59, 57, 13, 27, 35, + 32, 18, 15, 54, 115, 91, 90, 93, 28, 73, 25, + 54, 0, 68, 8, 32, 65, 72, 72, 79, 27, 77, 18, + 7, 73, 14, 66, 1, 9, 17, 25, 23, 8, 81, 69, 5, + 64, 64, 70, 32, 65, 1, 35, 29, 41, 32, 30, + 101, 14, 16, 80, 67, 74, 70, 39, 4, 9, 47, 62, + 62, 62, 62, 103, 117, 15, 44, 43, 126, 74, 17, + 102, 29, 71, 5, 46, 33, 53, 50, 56, 117, 13, + 91, 122, 125, 7, 12, 21, 7, 64, 7, 7, 64, 14, + 5, 84, 77, 4, 64, 64, 79, 69, 79, 86, 70, 68, + 64, 78, 77, 118, 79, 83, 69, 96, 88, 93, 80, + 86, 86, 86, 94, 121, 100, 77, 123, 126, 109, + 123, 115, 126, 97, 91, 126, 76, 83, 83, 94, + 100, 115, 110, 102, 118, 93, 100, 104, 120, + 13, 25, 52, 30, 10, 4, 23, 16, 11, 7, 29, 30, + 51, 35, 28, 18, 45, 26, 33, 13, 54, 13, 41, + 28, 23, 16, 33, 16, 9, 10, 13, 66, 62, 39, 12, + 2, 27, 9, 68, 6, 24, 45, 43, 25, 11, 41, 19, + 19, 9, 8, 62, 7, 16, 23, 23, 10, 20, 25, 29, + 27, 35, 42, 57, 1, 9, 67, 64, 62, 76, 111, 70, + 11, 11, 70, 71, 69, 76, 5, 79, 104, 70, 68, + 28, 71, 77, 70, 68, 1, 77, 74, 71, 98, 91, 75, + 76, 69, 35, 108, 79, 32, 90, 71, 69, 71, 9, + 69, 76, 7, 17, 70, 70, 121, 22, 21, 21, 65, + 87, 90, 92, 106, 92, 106, 114, 105, 126, 118, + 113, 126, 126, 126, 126, 123, 109, 104, 109, + 125, 112, 101, 102, 101, 79, 98, 103, 100, + 103, 123, 107, 101, 126, 114, 126, 126, 126, + 126, 126, 126, 88, 86, 126, 99, 102, 106, 126, + 111, 112, 111, 99, 104, 87, 72, 119, 126, 126, + 99, 110, 115, 68, 15, 20, 23, 46, 31, 36, 9, + 43, 36, 47, 36, 49, 40, 31, 37, 85, 94, 104, + 112, 110, 126, 126, 126, 21, 49, 45, 50, 39, + 43, 26, 25, 15, 16, 68, 15, 20, 23, 46, 31, + 36, 9, 43, 36, 47, 36, 49, 40, 31, 37, 85, 94, + 104, 112, 110, 126, 126, 126 }, + + }, + + { + + { + + 62, + 9, 74, 62, 9, 74, 126, 104, 10, 9, 12, 30, 61, + 62, 54, 14, 118, 6, 78, 65, 1, 14, 73, 13, 64, + 20, 62, 67, 90, 104, 126, 104, 67, 78, 65, 1, + 86, 95, 2, 18, 69, 81, 96, 8, 67, 86, 88, 5, 76, + 94, 9, 69, 81, 88, 67, 74, 74, 80, 72, 5, 22, 0, + 0, 0, 83, 86, 97, 72, 22, 1, 52, 8, 69, 126, + 102, 82, 74, 107, 126, 126, 126, 95, 126, 114, + 126, 123, 115, 122, 115, 0, 68, 84, 104, 70, 93, + 90, 126, 74, 97, 91, 126, 7, 82, 76, 125, 93, + 87, 77, 71, 0, 68, 84, 1, 65, 2, 7, 66, 64, 2, + 78, 13, 11, 28, 19, 25, 18, 17, 19, 46, 12, 13, + 44, 30, 1, 108, 100, 101, 91, 94, 88, 84, 86, + 83, 87, 94, 70, 72, 74, 4, 102, 100, 95, 75, 72, + 75, 71, 17, 69, 1, 65, 26, 72, 6, 9, 1, 72, 62, + 54, 38, 45, 54, 44, 26, 45, 34, 30, 33, 18, 5, + 1, 2, 25, 18, 24, 21, 19, 18, 22, 14, 29, 21, 8, + 12, 17, 89, 62, 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 46, 62, 60, 41, 62, 62, 62, + 62, 60, 58, 62, 47, 41, 15, 26, 3, 68, 97, 71, + 21, 13, 9, 1, 5, 0, 72, 74, 91, 67, 36, 24, 19, + 17, 64, 68, 78, 77, 86, 92, 8, 3, 1, 65, 73, 76, + 80, 88, 110, 97, 84, 79, 73, 74, 86, 96, 97, + 117, 78, 30, 15, 10, 1, 71, 79, 86, 90, 97, 62, + 93, 84, 79, 66, 71, 1, 3, 4, 75, 1, 5, 66, 79, + 71, 68, 19, 1, 27, 23, 36, 34, 19, 27, 31, 21, + 15, 1, 17, 64, 104, 97, 96, 88, 85, 85, 85, 88, + 66, 77, 76, 76, 5, 76, 83, 99, 95, 95, 76, 74, + 70, 75, 68, 65, 73, 1, 1, 68, 75, 8, 64, 70, 57, + 44, 47, 49, 50, 52, 48, 47, 40, 40, 43, 37, 19, + 23, 16, 46, 42, 41, 36, 34, 28, 13, 6, 0, 77, + 82, 94, 69, 109, 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 61, 50, 28, 5, 62, 62, 33, 62, 62, + 62, 60, 62, 58, 52, 58, 51, 52, 34, 37, 24, 66, + 42, 32, 13, 120, 112, 114, 85, 92, 89, 71, 81, + 80, 68, 70, 7, 68, 13, 74, 62, 62, 62, 62, 60, + 57, 29, 9, 82, 75, 40, 29, 20, 9, 8, 2, 64, 68, + 92, 106, 97, 90, 90, 88, 73, 79, 86, 73, 70, 69, + 66, 64, 5, 4, 62, 62, 62, 62, 60, 54, 43, 27, 67 }, + + { + + 62, + 9, 74, 62, 9, 74, 125, 102, 11, 10, 12, 29, + 60, 62, 54, 14, 115, 6, 77, 64, 1, 14, 72, 12, + 65, 20, 62, 68, 91, 104, 124, 102, 67, 77, 64, + 1, 85, 93, 3, 18, 68, 80, 95, 8, 67, 85, 88, + 5, 75, 93, 9, 69, 80, 88, 66, 73, 73, 79, 71, + 5, 22, 0, 0, 0, 82, 86, 97, 71, 22, 1, 52, 8, + 69, 125, 101, 82, 73, 105, 125, 125, 125, 93, + 125, 112, 125, 121, 114, 121, 114, 1, 67, 83, + 103, 69, 92, 89, 125, 73, 96, 90, 125, 8, 81, + 75, 123, 92, 86, 76, 70, 1, 67, 83, 2, 64, 2, + 7, 65, 64, 2, 77, 13, 11, 28, 19, 25, 18, 17, + 19, 45, 12, 13, 43, 29, 1, 107, 99, 100, 90, + 93, 87, 83, 85, 82, 86, 92, 70, 72, 73, 3, + 101, 99, 95, 74, 72, 74, 70, 17, 68, 1, 65, + 25, 71, 6, 8, 1, 72, 62, 54, 38, 45, 54, 44, + 26, 45, 34, 29, 33, 18, 5, 1, 2, 25, 18, 24, + 21, 19, 17, 22, 14, 28, 20, 8, 11, 16, 89, 62, + 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, + 62, 60, 44, 62, 59, 40, 62, 62, 62, 62, 58, + 56, 61, 45, 39, 15, 25, 2, 68, 97, 70, 22, 14, + 10, 2, 5, 0, 71, 73, 90, 66, 37, 25, 20, 17, + 0, 67, 77, 76, 85, 91, 9, 4, 2, 64, 72, 75, + 79, 87, 108, 96, 82, 78, 72, 73, 85, 95, 96, + 115, 77, 31, 16, 11, 2, 70, 78, 85, 89, 96, + 62, 92, 83, 78, 66, 70, 1, 4, 5, 74, 2, 6, 65, + 78, 71, 68, 19, 2, 27, 23, 35, 34, 19, 26, 30, + 21, 15, 1, 16, 64, 103, 96, 95, 87, 84, 84, + 84, 87, 66, 76, 75, 75, 5, 75, 82, 98, 94, 95, + 76, 73, 70, 74, 68, 65, 72, 1, 1, 67, 74, 8, + 64, 70, 57, 44, 47, 49, 49, 52, 48, 47, 40, + 40, 43, 37, 19, 22, 15, 45, 41, 40, 35, 33, + 27, 13, 6, 0, 76, 81, 93, 69, 108, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 61, 59, 48, 27, 5, + 62, 62, 32, 62, 62, 62, 58, 62, 56, 50, 56, + 49, 50, 33, 35, 23, 67, 41, 31, 12, 118, 110, + 112, 84, 91, 88, 69, 80, 79, 68, 69, 9, 66, + 15, 73, 62, 62, 62, 62, 58, 55, 27, 7, 83, 74, + 41, 29, 20, 9, 9, 2, 64, 68, 91, 105, 96, 89, + 89, 86, 72, 78, 85, 72, 69, 68, 65, 0, 6, 4, + 62, 62, 62, 62, 59, 53, 41, 26, 67 }, + + { + + 62, + 9, 74, 62, 9, 74, 123, 101, 11, 10, 12, 28, + 59, 61, 54, 14, 113, 6, 76, 0, 1, 13, 72, 11, + 66, 19, 60, 70, 92, 105, 121, 101, 67, 76, 0, + 1, 85, 92, 3, 17, 68, 80, 94, 8, 67, 85, 88, + 5, 75, 92, 9, 69, 80, 88, 66, 73, 73, 79, 71, + 5, 22, 0, 0, 0, 81, 86, 97, 71, 21, 1, 52, 8, + 69, 124, 100, 82, 73, 104, 123, 123, 124, 92, + 123, 111, 123, 120, 113, 120, 113, 2, 67, 82, + 102, 69, 92, 88, 123, 73, 96, 90, 124, 8, 81, + 75, 122, 92, 85, 76, 70, 1, 67, 82, 2, 64, 1, + 7, 65, 64, 2, 77, 13, 11, 27, 19, 24, 18, 17, + 19, 43, 12, 13, 41, 28, 0, 106, 98, 99, 89, + 92, 86, 82, 84, 82, 85, 91, 70, 72, 73, 2, + 101, 98, 95, 74, 72, 73, 70, 16, 67, 1, 65, + 24, 70, 5, 7, 1, 73, 60, 53, 37, 44, 53, 43, + 25, 44, 34, 28, 32, 18, 5, 1, 2, 24, 17, 23, + 20, 18, 16, 21, 13, 26, 19, 7, 10, 15, 89, 62, + 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, + 62, 58, 41, 62, 57, 38, 62, 62, 62, 62, 56, + 54, 58, 43, 37, 14, 23, 1, 69, 97, 70, 22, 14, + 10, 2, 5, 0, 71, 73, 89, 66, 37, 25, 20, 17, + 1, 67, 76, 76, 84, 90, 10, 5, 2, 64, 71, 75, + 79, 86, 107, 95, 81, 77, 72, 73, 84, 94, 95, + 114, 77, 31, 16, 11, 2, 69, 77, 84, 88, 95, + 62, 92, 83, 78, 66, 70, 1, 4, 5, 74, 2, 6, 64, + 78, 71, 68, 18, 2, 26, 22, 34, 33, 19, 25, 29, + 21, 15, 0, 15, 65, 102, 95, 94, 87, 84, 84, + 83, 86, 66, 76, 75, 75, 4, 75, 82, 98, 93, 95, + 76, 73, 70, 73, 68, 65, 71, 1, 1, 67, 73, 7, + 64, 71, 56, 44, 47, 48, 48, 51, 47, 46, 39, + 39, 42, 36, 18, 21, 14, 43, 40, 38, 33, 32, + 26, 12, 5, 0, 76, 81, 93, 70, 107, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 59, 57, 46, 26, 4, + 62, 60, 31, 62, 62, 62, 56, 60, 54, 48, 54, + 47, 48, 31, 33, 21, 68, 39, 29, 10, 117, 109, + 111, 83, 90, 87, 67, 79, 78, 68, 68, 10, 65, + 16, 72, 62, 62, 62, 62, 55, 52, 24, 5, 84, 74, + 41, 29, 20, 9, 9, 2, 64, 68, 90, 104, 95, 88, + 88, 85, 71, 77, 84, 71, 68, 67, 65, 1, 6, 4, + 62, 62, 62, 61, 57, 51, 39, 24, 68 }, + + { + + 62, + 9, 74, 62, 9, 74, 121, 99, 12, 10, 11, 26, 57, + 60, 54, 14, 111, 6, 75, 1, 1, 12, 72, 10, 67, + 19, 58, 71, 93, 105, 118, 100, 67, 75, 1, 1, + 84, 91, 4, 17, 68, 79, 93, 7, 68, 85, 88, 5, + 75, 92, 9, 69, 80, 88, 65, 73, 73, 79, 70, 5, + 22, 0, 0, 0, 81, 86, 97, 70, 20, 1, 52, 8, 69, + 123, 99, 82, 72, 103, 121, 121, 122, 91, 121, + 110, 121, 119, 112, 119, 112, 3, 67, 81, 101, + 69, 91, 88, 121, 73, 95, 89, 123, 8, 81, 74, + 120, 91, 84, 76, 70, 1, 67, 81, 3, 0, 1, 7, + 65, 64, 2, 77, 13, 10, 27, 19, 23, 18, 17, 19, + 41, 12, 12, 39, 27, 64, 105, 97, 98, 88, 91, + 86, 81, 84, 81, 84, 90, 70, 72, 73, 1, 100, + 97, 95, 74, 72, 72, 70, 15, 66, 1, 65, 23, 69, + 5, 6, 1, 74, 59, 52, 37, 43, 52, 42, 25, 43, + 33, 27, 31, 18, 5, 1, 1, 23, 16, 22, 19, 17, + 15, 20, 13, 24, 18, 7, 9, 14, 89, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 55, + 39, 62, 55, 37, 62, 61, 62, 59, 54, 51, 56, + 41, 34, 13, 21, 0, 70, 97, 70, 23, 14, 10, 2, + 5, 0, 71, 73, 89, 66, 37, 25, 20, 17, 2, 66, + 76, 75, 84, 89, 11, 5, 3, 64, 70, 74, 78, 86, + 106, 94, 80, 76, 71, 73, 83, 93, 94, 113, 76, + 31, 16, 11, 2, 68, 77, 83, 87, 94, 62, 91, 82, + 77, 66, 70, 1, 4, 5, 74, 2, 6, 64, 78, 71, 68, + 18, 3, 25, 21, 33, 32, 19, 24, 28, 21, 15, 0, + 14, 65, 101, 94, 93, 86, 83, 83, 83, 85, 66, + 76, 75, 74, 4, 75, 82, 97, 92, 95, 76, 73, 70, + 72, 68, 65, 70, 1, 1, 67, 72, 6, 64, 72, 55, + 43, 46, 47, 47, 50, 46, 45, 38, 38, 41, 35, + 17, 20, 13, 42, 39, 37, 31, 30, 25, 11, 5, 64, + 76, 81, 93, 70, 106, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 57, 54, 44, 24, 3, 61, 59, 29, + 62, 62, 60, 54, 58, 52, 46, 52, 45, 45, 29, + 31, 19, 69, 37, 27, 9, 116, 108, 110, 82, 89, + 86, 66, 78, 77, 68, 67, 12, 0, 18, 71, 62, 62, + 62, 62, 52, 49, 21, 3, 85, 74, 41, 29, 20, 9, + 9, 2, 64, 68, 90, 103, 94, 87, 87, 84, 71, 77, + 83, 71, 68, 67, 65, 1, 6, 4, 62, 62, 62, 59, + 55, 49, 37, 22, 69 }, + + { + + 62, + 9, 74, 62, 9, 74, 120, 98, 12, 10, 11, 25, 56, + 58, 54, 14, 108, 5, 74, 1, 1, 11, 72, 9, 68, + 18, 56, 73, 94, 106, 115, 99, 67, 74, 1, 1, + 84, 90, 4, 16, 68, 79, 93, 7, 68, 84, 88, 5, + 75, 91, 8, 70, 80, 88, 65, 72, 73, 78, 70, 5, + 22, 0, 0, 0, 80, 87, 97, 70, 19, 1, 52, 8, 69, + 122, 98, 82, 72, 101, 120, 119, 121, 90, 120, + 108, 119, 118, 112, 118, 112, 3, 67, 80, 100, + 69, 91, 87, 119, 73, 95, 89, 122, 8, 80, 74, + 119, 91, 84, 76, 69, 1, 67, 81, 3, 0, 0, 6, + 65, 64, 2, 77, 13, 10, 26, 19, 23, 18, 17, 18, + 39, 12, 12, 37, 26, 65, 104, 96, 97, 87, 91, + 85, 80, 83, 81, 83, 89, 70, 72, 72, 0, 100, + 96, 95, 74, 72, 72, 70, 14, 65, 1, 65, 21, 68, + 4, 5, 1, 75, 57, 51, 36, 42, 51, 41, 24, 42, + 33, 25, 30, 17, 5, 1, 1, 22, 16, 21, 19, 16, + 14, 19, 12, 22, 17, 6, 8, 13, 89, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, 62, 59, 53, + 36, 62, 54, 35, 62, 59, 62, 57, 51, 49, 53, + 39, 32, 12, 20, 65, 71, 97, 70, 23, 15, 10, 2, + 5, 0, 71, 73, 88, 65, 38, 25, 20, 17, 3, 66, + 75, 75, 83, 89, 12, 6, 3, 64, 70, 74, 78, 85, + 105, 94, 79, 76, 71, 73, 82, 92, 94, 112, 76, + 32, 16, 11, 2, 67, 76, 83, 86, 93, 62, 91, 82, + 77, 66, 70, 1, 4, 5, 73, 2, 6, 0, 78, 71, 68, + 17, 3, 24, 20, 32, 31, 19, 22, 27, 20, 15, 64, + 13, 66, 101, 94, 92, 86, 83, 83, 82, 84, 67, + 76, 75, 74, 3, 75, 82, 97, 91, 95, 76, 72, 70, + 72, 68, 65, 69, 1, 0, 67, 71, 6, 65, 73, 54, + 43, 46, 46, 46, 49, 45, 44, 37, 37, 40, 34, + 16, 19, 12, 40, 37, 35, 29, 29, 24, 10, 4, 64, + 76, 81, 93, 71, 106, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 60, 55, 52, 42, 23, 2, 59, 57, 28, + 62, 62, 58, 52, 55, 50, 44, 50, 43, 43, 27, + 29, 17, 70, 35, 25, 7, 115, 107, 109, 82, 88, + 85, 64, 77, 76, 68, 66, 13, 1, 19, 71, 62, 62, + 62, 62, 49, 46, 18, 1, 86, 74, 41, 29, 20, 9, + 9, 2, 64, 68, 89, 102, 93, 86, 87, 83, 70, 76, + 82, 70, 67, 66, 64, 2, 7, 4, 62, 62, 62, 57, + 53, 47, 35, 20, 70 }, + + { + + 62, + 9, 74, 62, 9, 74, 118, 96, 12, 10, 10, 23, 54, + 57, 54, 14, 106, 5, 73, 2, 1, 11, 71, 8, 69, + 18, 54, 75, 95, 106, 112, 97, 67, 73, 2, 1, + 84, 89, 4, 16, 68, 79, 92, 7, 69, 84, 88, 5, + 75, 90, 8, 70, 80, 88, 64, 72, 72, 78, 69, 5, + 22, 0, 0, 0, 80, 87, 97, 69, 18, 1, 52, 8, 69, + 121, 97, 82, 71, 100, 118, 117, 119, 89, 118, + 107, 117, 117, 111, 117, 111, 4, 67, 79, 99, + 69, 90, 86, 117, 73, 95, 88, 120, 9, 80, 73, + 118, 90, 83, 76, 69, 2, 66, 80, 4, 1, 0, 6, + 65, 64, 2, 77, 13, 9, 25, 19, 22, 18, 17, 18, + 37, 12, 11, 36, 25, 66, 103, 95, 96, 86, 90, + 84, 79, 82, 80, 82, 88, 70, 72, 72, 64, 99, + 95, 95, 73, 72, 71, 70, 13, 64, 1, 65, 20, 67, + 4, 4, 1, 75, 56, 50, 36, 41, 50, 40, 23, 42, + 33, 24, 29, 17, 5, 1, 0, 22, 15, 20, 18, 15, + 13, 19, 11, 20, 16, 5, 7, 12, 89, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, 62, 57, 51, + 34, 60, 52, 33, 62, 57, 60, 55, 49, 47, 50, + 37, 29, 11, 18, 66, 71, 97, 70, 23, 15, 10, 2, + 5, 0, 71, 73, 88, 65, 38, 25, 20, 17, 4, 65, + 74, 75, 82, 88, 13, 7, 3, 0, 69, 73, 77, 85, + 104, 93, 77, 75, 71, 72, 81, 91, 93, 111, 75, + 32, 17, 11, 2, 66, 75, 82, 85, 92, 62, 91, 82, + 76, 66, 70, 1, 4, 5, 73, 2, 7, 0, 78, 71, 68, + 16, 4, 23, 19, 31, 31, 19, 21, 26, 20, 15, 65, + 12, 66, 100, 93, 91, 85, 82, 82, 82, 83, 67, + 76, 75, 74, 2, 75, 82, 96, 90, 95, 76, 72, 70, + 71, 68, 65, 68, 1, 0, 67, 70, 5, 65, 73, 53, + 43, 45, 46, 45, 48, 44, 43, 37, 36, 39, 33, + 15, 18, 11, 39, 36, 34, 27, 28, 23, 9, 3, 65, + 76, 80, 93, 71, 105, 62, 62, 62, 62, 62, 62, + 62, 62, 60, 58, 53, 50, 40, 21, 1, 57, 55, 27, + 61, 62, 56, 50, 53, 48, 42, 48, 41, 40, 25, + 27, 15, 71, 33, 23, 6, 114, 105, 108, 81, 87, + 84, 1, 76, 75, 68, 65, 15, 3, 21, 70, 62, 62, + 62, 62, 47, 43, 16, 64, 87, 74, 41, 29, 20, 9, + 9, 2, 64, 68, 89, 101, 92, 85, 86, 82, 69, 76, + 81, 69, 66, 65, 64, 2, 7, 4, 62, 62, 62, 56, + 51, 45, 33, 18, 71 }, + + { + + 62, + 9, 75, 62, 9, 75, 116, 95, 13, 10, 10, 22, 53, + 56, 54, 14, 104, 5, 73, 3, 1, 10, 71, 7, 70, + 17, 53, 76, 96, 107, 109, 96, 67, 73, 3, 1, + 83, 88, 5, 15, 67, 78, 91, 6, 69, 84, 88, 5, + 74, 90, 8, 70, 79, 88, 64, 72, 72, 78, 69, 5, + 22, 0, 0, 0, 79, 87, 97, 69, 18, 0, 52, 8, 69, + 120, 97, 82, 71, 99, 116, 115, 118, 88, 116, + 106, 115, 116, 110, 116, 110, 5, 67, 78, 99, + 68, 90, 86, 115, 73, 94, 88, 119, 9, 80, 73, + 116, 90, 82, 75, 69, 2, 66, 79, 4, 1, 64, 6, + 65, 64, 2, 77, 13, 9, 25, 19, 21, 18, 17, 18, + 35, 12, 11, 34, 24, 67, 103, 94, 96, 86, 89, + 84, 78, 82, 80, 82, 86, 70, 72, 72, 65, 99, + 94, 95, 73, 72, 70, 69, 12, 64, 1, 65, 19, 66, + 3, 3, 1, 76, 54, 49, 35, 41, 49, 40, 23, 41, + 32, 23, 28, 17, 5, 1, 0, 21, 14, 19, 17, 15, + 12, 18, 11, 18, 15, 5, 6, 11, 89, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, 62, 54, 48, + 31, 58, 50, 32, 62, 54, 57, 52, 47, 44, 48, + 34, 27, 10, 16, 67, 72, 97, 69, 24, 15, 11, 2, + 5, 0, 71, 73, 87, 65, 38, 26, 20, 17, 5, 65, + 74, 74, 82, 87, 14, 7, 4, 0, 68, 73, 77, 84, + 103, 92, 76, 74, 70, 72, 81, 91, 92, 109, 75, + 32, 17, 11, 3, 66, 75, 81, 85, 91, 62, 90, 81, + 76, 66, 70, 1, 4, 5, 73, 3, 7, 1, 78, 71, 69, + 16, 4, 22, 18, 30, 30, 19, 20, 25, 20, 15, 65, + 11, 67, 99, 92, 90, 85, 82, 82, 81, 83, 67, + 75, 74, 73, 2, 75, 82, 96, 89, 95, 76, 72, 70, + 70, 68, 65, 67, 0, 0, 67, 70, 4, 65, 74, 52, + 42, 45, 45, 44, 48, 44, 42, 36, 36, 38, 32, + 14, 17, 10, 37, 35, 32, 25, 26, 21, 8, 3, 65, + 76, 80, 92, 72, 104, 62, 62, 62, 62, 62, 62, + 62, 62, 58, 55, 51, 47, 38, 20, 1, 56, 54, 25, + 59, 62, 54, 48, 51, 46, 40, 45, 39, 38, 23, + 25, 14, 73, 31, 21, 4, 113, 104, 107, 80, 86, + 83, 2, 75, 74, 68, 64, 16, 4, 22, 69, 62, 62, + 62, 59, 44, 41, 13, 66, 89, 73, 41, 29, 20, 9, + 9, 2, 64, 68, 88, 100, 92, 84, 85, 81, 69, 75, + 80, 69, 66, 65, 64, 3, 7, 4, 62, 62, 61, 54, + 50, 44, 30, 17, 72 }, + + { + + 62, + 9, 75, 62, 9, 75, 114, 93, 13, 10, 9, 20, 51, + 54, 54, 14, 101, 4, 72, 3, 1, 9, 71, 6, 71, + 17, 51, 78, 97, 107, 106, 95, 67, 72, 3, 1, + 83, 87, 5, 15, 67, 78, 91, 6, 70, 83, 88, 5, + 74, 89, 7, 70, 79, 88, 0, 71, 72, 77, 68, 5, + 22, 0, 0, 0, 79, 87, 97, 68, 17, 0, 52, 8, 69, + 119, 96, 82, 70, 97, 115, 113, 116, 87, 115, + 104, 113, 115, 109, 115, 110, 6, 67, 77, 98, + 68, 89, 85, 113, 73, 94, 87, 118, 9, 79, 72, + 115, 89, 82, 75, 68, 2, 66, 78, 5, 2, 64, 5, + 65, 64, 2, 77, 13, 8, 24, 19, 21, 18, 17, 17, + 33, 12, 10, 32, 23, 68, 102, 93, 95, 85, 88, + 83, 77, 81, 79, 81, 85, 70, 72, 71, 66, 98, + 93, 95, 73, 72, 70, 69, 11, 0, 1, 65, 17, 65, + 3, 2, 1, 77, 53, 48, 35, 40, 48, 39, 22, 40, + 32, 22, 27, 17, 5, 1, 64, 20, 14, 18, 17, 14, + 11, 17, 10, 16, 14, 4, 5, 10, 89, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 60, 61, 52, 46, + 29, 56, 49, 30, 62, 52, 55, 50, 44, 42, 45, + 32, 24, 9, 15, 69, 73, 97, 69, 24, 16, 11, 2, + 5, 0, 71, 73, 87, 64, 39, 26, 20, 17, 6, 64, + 73, 74, 81, 86, 15, 8, 4, 0, 67, 72, 76, 84, + 102, 92, 75, 74, 70, 72, 80, 90, 92, 108, 74, + 33, 17, 11, 3, 65, 74, 80, 84, 90, 62, 90, 81, + 75, 66, 70, 1, 4, 5, 72, 3, 7, 1, 78, 71, 69, + 15, 5, 21, 17, 29, 29, 19, 19, 24, 19, 15, 66, + 10, 67, 98, 92, 89, 84, 81, 81, 81, 82, 67, + 75, 74, 73, 1, 75, 82, 95, 88, 95, 76, 71, 70, + 70, 68, 65, 66, 0, 0, 67, 69, 4, 66, 75, 51, + 42, 44, 44, 43, 47, 43, 41, 35, 35, 37, 31, + 13, 16, 9, 36, 33, 31, 23, 25, 20, 7, 2, 66, + 76, 80, 92, 72, 103, 62, 62, 62, 62, 62, 62, + 62, 61, 56, 53, 49, 45, 36, 18, 0, 54, 52, 24, + 57, 62, 52, 46, 49, 44, 38, 43, 37, 35, 21, + 23, 12, 74, 29, 19, 3, 112, 103, 106, 80, 85, + 82, 4, 74, 73, 68, 0, 18, 6, 24, 69, 62, 62, + 61, 56, 41, 38, 10, 68, 90, 73, 41, 29, 20, 9, + 9, 2, 64, 68, 88, 99, 91, 83, 84, 80, 68, 75, + 79, 68, 65, 64, 0, 3, 8, 4, 62, 62, 59, 52, + 48, 42, 28, 15, 73 }, + + { + + 62, + 8, 75, 62, 8, 75, 113, 92, 13, 10, 9, 19, 50, + 53, 54, 14, 99, 4, 71, 4, 1, 8, 71, 5, 73, 16, + 49, 80, 98, 108, 104, 94, 67, 71, 4, 1, 83, + 86, 5, 14, 67, 78, 90, 5, 70, 83, 89, 5, 74, + 89, 7, 71, 79, 88, 0, 71, 72, 77, 68, 5, 22, + 0, 0, 0, 78, 88, 97, 68, 16, 0, 52, 8, 69, + 118, 95, 82, 70, 96, 113, 111, 115, 86, 113, + 103, 112, 114, 109, 114, 109, 6, 67, 76, 97, + 68, 89, 85, 112, 73, 94, 87, 117, 9, 79, 72, + 114, 89, 81, 75, 68, 2, 66, 78, 5, 2, 65, 5, + 65, 64, 2, 77, 13, 8, 23, 19, 20, 18, 17, 17, + 31, 12, 10, 30, 22, 69, 101, 92, 94, 84, 88, + 83, 76, 81, 79, 80, 84, 70, 72, 71, 68, 98, + 92, 95, 73, 73, 69, 69, 10, 1, 1, 65, 16, 64, + 2, 1, 1, 78, 51, 47, 34, 39, 47, 38, 21, 39, + 31, 20, 26, 16, 5, 1, 64, 19, 13, 17, 16, 13, + 10, 16, 9, 14, 12, 3, 4, 9, 89, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 61, 58, 58, 49, 43, + 26, 54, 47, 28, 61, 50, 52, 47, 42, 39, 42, + 30, 22, 8, 13, 70, 74, 98, 69, 24, 16, 11, 2, + 5, 0, 71, 73, 86, 64, 39, 26, 20, 17, 7, 64, + 73, 74, 81, 86, 16, 8, 4, 0, 67, 72, 76, 83, + 101, 91, 74, 73, 70, 72, 79, 89, 91, 107, 74, + 33, 17, 11, 3, 64, 74, 80, 83, 90, 62, 90, 81, + 75, 66, 70, 1, 4, 5, 72, 3, 7, 2, 78, 71, 69, + 14, 5, 20, 16, 28, 28, 19, 17, 22, 19, 15, 67, + 9, 68, 98, 91, 88, 84, 81, 81, 80, 81, 68, 75, + 74, 73, 0, 75, 82, 95, 88, 96, 76, 71, 70, 69, + 68, 65, 66, 0, 64, 67, 68, 3, 66, 76, 50, 41, + 44, 43, 41, 46, 42, 40, 34, 34, 36, 30, 12, + 15, 8, 34, 32, 29, 21, 23, 19, 6, 1, 66, 76, + 80, 92, 73, 103, 62, 62, 62, 62, 62, 62, 61, + 58, 54, 51, 47, 42, 34, 17, 64, 52, 50, 22, + 55, 61, 49, 43, 46, 41, 36, 41, 34, 33, 19, + 20, 10, 75, 27, 17, 1, 111, 102, 105, 79, 84, + 82, 5, 73, 73, 68, 0, 19, 7, 25, 68, 62, 62, + 58, 53, 38, 35, 7, 70, 91, 73, 41, 29, 20, 9, + 9, 2, 64, 68, 87, 99, 90, 82, 84, 79, 68, 74, + 79, 68, 65, 64, 0, 4, 8, 3, 62, 62, 57, 50, + 46, 40, 26, 13, 74 }, + + { + + 62, + 8, 75, 62, 8, 75, 111, 91, 14, 10, 9, 18, 49, + 52, 54, 14, 97, 4, 70, 5, 1, 8, 70, 4, 74, 15, + 47, 81, 99, 109, 101, 92, 67, 70, 5, 1, 82, + 85, 6, 13, 67, 77, 89, 5, 70, 83, 89, 5, 74, + 88, 7, 71, 79, 88, 0, 71, 71, 77, 68, 5, 22, + 0, 0, 0, 77, 88, 97, 68, 15, 0, 52, 8, 69, + 117, 94, 82, 70, 95, 111, 109, 113, 84, 111, + 102, 110, 113, 108, 113, 108, 7, 66, 75, 96, + 68, 88, 84, 110, 73, 93, 87, 115, 10, 79, 72, + 112, 89, 80, 75, 68, 3, 65, 77, 5, 2, 65, 5, + 64, 64, 2, 76, 13, 8, 23, 19, 19, 18, 17, 17, + 29, 12, 10, 29, 21, 69, 100, 91, 93, 83, 87, + 82, 75, 80, 79, 79, 83, 70, 72, 71, 69, 97, + 91, 95, 72, 73, 68, 69, 9, 2, 1, 65, 15, 0, 1, + 0, 1, 78, 50, 46, 34, 38, 46, 37, 21, 39, 31, + 19, 25, 16, 5, 1, 64, 19, 12, 16, 15, 12, 9, + 16, 9, 13, 11, 3, 3, 8, 89, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 59, 56, 56, 46, 41, 23, + 53, 45, 27, 59, 48, 50, 45, 40, 37, 40, 28, + 20, 8, 11, 71, 74, 98, 69, 25, 16, 11, 3, 5, + 0, 70, 73, 85, 64, 39, 26, 21, 17, 8, 0, 72, + 73, 80, 85, 17, 9, 5, 1, 66, 71, 76, 82, 100, + 90, 72, 72, 69, 71, 78, 88, 90, 106, 73, 33, + 18, 12, 3, 0, 73, 79, 82, 89, 62, 89, 80, 74, + 66, 70, 1, 5, 6, 72, 3, 8, 3, 78, 71, 69, 14, + 5, 19, 16, 27, 28, 19, 16, 21, 19, 15, 67, 8, + 69, 97, 90, 87, 84, 80, 81, 79, 80, 68, 75, + 74, 72, 0, 75, 82, 95, 87, 96, 76, 71, 70, 68, + 68, 65, 65, 0, 64, 67, 67, 2, 66, 76, 49, 41, + 44, 43, 40, 45, 41, 39, 34, 33, 35, 30, 12, + 14, 7, 33, 31, 27, 19, 22, 18, 6, 1, 66, 75, + 79, 92, 74, 102, 62, 62, 62, 62, 62, 62, 59, + 56, 52, 49, 45, 40, 32, 16, 65, 50, 49, 21, + 53, 59, 47, 41, 44, 39, 34, 39, 32, 31, 18, + 18, 8, 76, 25, 15, 64, 110, 100, 103, 78, 83, + 81, 7, 72, 72, 68, 1, 21, 8, 27, 67, 62, 62, + 56, 50, 36, 32, 5, 72, 92, 73, 41, 29, 20, 9, + 10, 2, 64, 68, 86, 98, 89, 81, 83, 77, 67, 73, + 78, 67, 64, 0, 0, 5, 8, 3, 62, 61, 56, 49, 44, + 38, 24, 11, 74 }, + + { + + 62, + 8, 75, 62, 8, 75, 109, 89, 14, 10, 8, 16, 47, + 50, 54, 14, 94, 3, 69, 5, 1, 7, 70, 3, 75, 15, + 45, 83, 100, 109, 98, 91, 67, 69, 5, 1, 82, + 84, 6, 13, 67, 77, 89, 5, 71, 82, 89, 5, 74, + 87, 6, 71, 79, 88, 1, 70, 71, 76, 67, 5, 22, + 0, 0, 0, 77, 88, 97, 67, 14, 0, 52, 8, 69, + 116, 93, 82, 69, 93, 110, 107, 112, 83, 110, + 100, 108, 112, 107, 112, 108, 8, 66, 74, 95, + 68, 88, 83, 108, 73, 93, 86, 114, 10, 78, 71, + 111, 88, 80, 75, 67, 3, 65, 76, 6, 3, 66, 4, + 64, 64, 2, 76, 13, 7, 22, 19, 19, 18, 17, 16, + 27, 12, 9, 27, 20, 70, 99, 90, 92, 82, 86, 81, + 74, 79, 78, 78, 82, 70, 72, 70, 70, 97, 90, + 95, 72, 73, 68, 69, 8, 3, 1, 65, 13, 1, 1, 64, + 1, 79, 48, 45, 33, 37, 45, 36, 20, 38, 31, 18, + 24, 16, 5, 1, 65, 18, 12, 15, 15, 11, 8, 15, + 8, 11, 10, 2, 2, 7, 89, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 57, 54, 53, 44, 39, 21, 51, + 44, 25, 56, 46, 48, 43, 37, 35, 37, 26, 17, 7, + 10, 73, 75, 98, 69, 25, 17, 11, 3, 5, 0, 70, + 73, 85, 0, 40, 26, 21, 17, 9, 0, 71, 73, 79, + 84, 18, 10, 5, 1, 65, 71, 75, 82, 99, 90, 71, + 72, 69, 71, 77, 87, 90, 105, 73, 34, 18, 12, + 3, 1, 72, 78, 81, 88, 62, 89, 80, 74, 66, 70, + 1, 5, 6, 71, 3, 8, 3, 78, 71, 69, 13, 6, 18, + 15, 26, 27, 19, 15, 20, 18, 15, 68, 7, 69, 96, + 90, 86, 83, 80, 80, 79, 79, 68, 75, 74, 72, + 64, 75, 82, 94, 86, 96, 76, 70, 70, 68, 68, + 65, 64, 0, 64, 67, 66, 2, 67, 77, 48, 41, 43, + 42, 39, 44, 40, 38, 33, 32, 34, 29, 11, 13, 6, + 31, 29, 26, 17, 21, 17, 5, 0, 67, 75, 79, 92, + 74, 101, 62, 62, 62, 62, 62, 60, 57, 53, 50, + 47, 43, 38, 30, 14, 66, 48, 47, 20, 51, 57, + 45, 39, 42, 37, 32, 37, 30, 28, 16, 16, 6, 77, + 23, 13, 65, 109, 99, 102, 78, 82, 80, 9, 71, + 71, 68, 2, 22, 10, 28, 67, 62, 60, 53, 47, 33, + 29, 2, 74, 93, 73, 41, 29, 20, 9, 10, 2, 64, + 68, 86, 97, 88, 80, 82, 76, 66, 73, 77, 66, 0, + 1, 1, 5, 9, 3, 60, 59, 54, 47, 42, 36, 22, 9, + 75 }, + + { + + 62, + 8, 76, 62, 8, 76, 107, 88, 15, 10, 8, 15, 46, + 49, 54, 14, 92, 3, 69, 6, 1, 6, 70, 2, 76, 14, + 44, 84, 101, 110, 95, 90, 67, 69, 6, 1, 81, + 83, 7, 12, 66, 76, 88, 4, 71, 82, 89, 5, 73, + 87, 6, 71, 78, 88, 1, 70, 71, 76, 67, 5, 22, + 0, 0, 0, 76, 88, 97, 67, 14, 64, 52, 8, 69, + 115, 93, 82, 69, 92, 108, 105, 110, 82, 108, + 99, 106, 111, 106, 111, 107, 9, 66, 73, 95, + 67, 87, 83, 106, 73, 92, 86, 113, 10, 78, 71, + 109, 88, 79, 74, 67, 3, 65, 75, 6, 3, 66, 4, + 64, 64, 2, 76, 13, 7, 22, 19, 18, 18, 17, 16, + 25, 12, 9, 25, 19, 71, 99, 89, 92, 82, 85, 81, + 73, 79, 78, 78, 80, 70, 72, 70, 71, 96, 89, + 95, 72, 73, 67, 68, 7, 3, 1, 65, 12, 2, 0, 65, + 1, 80, 47, 44, 33, 37, 44, 36, 20, 37, 30, 17, + 23, 16, 5, 1, 65, 17, 11, 14, 14, 11, 7, 14, + 8, 9, 9, 2, 1, 6, 89, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 54, 52, 51, 41, 36, 18, 49, 42, + 24, 54, 43, 45, 40, 35, 32, 35, 23, 15, 6, 8, + 74, 76, 98, 68, 26, 17, 12, 3, 5, 0, 70, 73, + 84, 0, 40, 27, 21, 17, 10, 1, 71, 72, 79, 83, + 19, 10, 6, 1, 64, 70, 75, 81, 98, 89, 70, 71, + 68, 71, 77, 87, 89, 103, 72, 34, 18, 12, 4, 1, + 72, 77, 81, 87, 62, 88, 79, 73, 66, 70, 1, 5, + 6, 71, 4, 8, 4, 78, 71, 70, 13, 6, 17, 14, 25, + 26, 19, 14, 19, 18, 15, 68, 6, 70, 95, 89, 85, + 83, 79, 80, 78, 79, 68, 74, 73, 71, 64, 75, + 82, 94, 85, 96, 76, 70, 70, 67, 68, 65, 0, 64, + 64, 67, 66, 1, 67, 78, 47, 40, 43, 41, 38, 44, + 40, 37, 32, 32, 33, 28, 10, 12, 5, 30, 28, 24, + 15, 19, 15, 4, 0, 67, 75, 79, 91, 75, 100, 62, + 62, 62, 62, 62, 58, 55, 51, 48, 44, 41, 35, + 28, 13, 66, 47, 46, 18, 49, 54, 43, 37, 40, + 35, 30, 34, 28, 26, 14, 14, 5, 79, 21, 11, 67, + 108, 98, 101, 77, 81, 79, 10, 70, 70, 68, 3, + 24, 11, 30, 66, 61, 59, 51, 44, 30, 27, 64, + 76, 95, 72, 41, 29, 20, 9, 10, 2, 64, 68, 85, + 96, 88, 79, 81, 75, 66, 72, 76, 66, 0, 1, 1, + 6, 9, 3, 59, 58, 52, 45, 41, 35, 19, 8, 76 }, + + { + + 62, + 8, 76, 62, 8, 76, 106, 86, 15, 10, 7, 13, 44, + 48, 54, 14, 90, 3, 68, 7, 1, 5, 70, 1, 77, 14, + 42, 86, 102, 110, 92, 89, 67, 68, 7, 1, 81, + 82, 7, 12, 66, 76, 87, 4, 72, 82, 89, 5, 73, + 86, 6, 72, 78, 88, 2, 70, 71, 76, 66, 5, 22, + 0, 0, 0, 76, 89, 97, 66, 13, 64, 52, 8, 69, + 114, 92, 82, 68, 91, 106, 103, 109, 81, 106, + 98, 104, 110, 106, 110, 106, 9, 66, 72, 94, + 67, 87, 82, 104, 73, 92, 85, 112, 10, 78, 70, + 108, 87, 78, 74, 67, 3, 65, 75, 7, 4, 67, 4, + 64, 64, 2, 76, 13, 6, 21, 19, 17, 18, 17, 16, + 23, 12, 8, 23, 18, 72, 98, 88, 91, 81, 85, 80, + 72, 78, 77, 77, 79, 70, 72, 70, 72, 96, 88, + 95, 72, 73, 66, 68, 6, 4, 1, 65, 11, 3, 0, 66, + 1, 81, 45, 43, 32, 36, 43, 35, 19, 36, 30, 15, + 22, 15, 5, 1, 66, 16, 10, 13, 13, 10, 6, 13, + 7, 7, 8, 1, 0, 5, 89, 62, 62, 61, 62, 62, 62, + 62, 62, 61, 52, 50, 48, 39, 34, 16, 47, 40, + 22, 52, 41, 43, 38, 33, 30, 32, 21, 12, 5, 6, + 75, 77, 98, 68, 26, 17, 12, 3, 5, 0, 70, 73, + 84, 0, 40, 27, 21, 17, 11, 1, 70, 72, 78, 83, + 20, 11, 6, 1, 64, 70, 74, 81, 97, 88, 69, 70, + 68, 71, 76, 86, 88, 102, 72, 34, 18, 12, 4, 2, + 71, 77, 80, 86, 62, 88, 79, 73, 66, 70, 1, 5, + 6, 71, 4, 8, 4, 78, 71, 70, 12, 7, 16, 13, 24, + 25, 19, 12, 18, 18, 15, 69, 5, 70, 95, 88, 84, + 82, 79, 79, 78, 78, 69, 74, 73, 71, 65, 75, + 82, 93, 84, 96, 76, 70, 70, 66, 68, 65, 1, 64, + 65, 67, 65, 0, 67, 79, 46, 40, 42, 40, 37, 43, + 39, 36, 31, 31, 32, 27, 9, 11, 4, 28, 27, 23, + 13, 18, 14, 3, 64, 68, 75, 79, 91, 75, 100, + 62, 62, 62, 62, 62, 56, 53, 48, 46, 42, 39, + 33, 26, 11, 67, 45, 44, 17, 47, 52, 41, 35, + 37, 33, 28, 32, 26, 23, 12, 12, 3, 80, 19, 9, + 68, 107, 97, 100, 76, 80, 78, 12, 69, 69, 68, + 4, 25, 13, 31, 65, 59, 57, 48, 41, 27, 24, 67, + 78, 96, 72, 41, 29, 20, 9, 10, 2, 64, 68, 85, + 95, 87, 78, 81, 74, 65, 72, 75, 65, 1, 2, 1, + 6, 9, 3, 58, 56, 50, 43, 39, 33, 17, 6, 77 }, + + { + + 62, + 8, 76, 62, 8, 76, 104, 85, 15, 10, 7, 12, 43, + 46, 54, 14, 87, 2, 67, 7, 1, 5, 69, 0, 78, 13, + 40, 88, 103, 111, 89, 87, 67, 67, 7, 1, 81, + 81, 7, 11, 66, 76, 87, 4, 72, 81, 89, 5, 73, + 85, 5, 72, 78, 88, 2, 69, 70, 75, 66, 5, 22, + 0, 0, 0, 75, 89, 97, 66, 12, 64, 52, 8, 69, + 113, 91, 82, 68, 89, 105, 101, 107, 80, 105, + 96, 102, 109, 105, 109, 106, 10, 66, 71, 93, + 67, 86, 81, 102, 73, 92, 85, 110, 11, 77, 70, + 107, 87, 78, 74, 66, 4, 64, 74, 7, 4, 67, 3, + 64, 64, 2, 76, 13, 6, 20, 19, 17, 18, 17, 15, + 21, 12, 8, 22, 17, 73, 97, 87, 90, 80, 84, 79, + 71, 77, 77, 76, 78, 70, 72, 69, 73, 95, 87, + 95, 71, 73, 66, 68, 5, 5, 1, 65, 9, 4, 64, 67, + 1, 81, 44, 42, 32, 35, 42, 34, 18, 36, 30, 14, + 21, 15, 5, 1, 66, 16, 10, 12, 13, 9, 5, 13, 6, + 5, 7, 0, 64, 4, 89, 61, 62, 59, 62, 61, 60, + 60, 60, 59, 50, 48, 46, 36, 32, 13, 45, 39, + 20, 49, 39, 41, 36, 30, 28, 29, 19, 10, 4, 5, + 77, 77, 98, 68, 26, 18, 12, 3, 5, 0, 70, 73, + 83, 1, 41, 27, 21, 17, 12, 2, 69, 72, 77, 82, + 21, 12, 6, 2, 0, 69, 74, 80, 96, 88, 67, 70, + 68, 70, 75, 85, 88, 101, 71, 35, 19, 12, 4, 3, + 70, 76, 79, 85, 62, 88, 79, 72, 66, 70, 1, 5, + 6, 70, 4, 9, 5, 78, 71, 70, 11, 7, 15, 12, 23, + 25, 19, 11, 17, 17, 15, 70, 4, 71, 94, 88, 83, + 82, 78, 79, 77, 77, 69, 74, 73, 71, 66, 75, + 82, 93, 83, 96, 76, 69, 70, 66, 68, 65, 2, 64, + 65, 67, 64, 0, 68, 79, 45, 40, 42, 40, 36, 42, + 38, 35, 31, 30, 31, 26, 8, 10, 3, 27, 25, 21, + 11, 17, 13, 2, 65, 68, 75, 78, 91, 76, 99, 62, + 62, 62, 62, 60, 54, 51, 46, 44, 40, 37, 31, + 24, 10, 68, 43, 42, 16, 45, 50, 39, 33, 35, + 31, 26, 30, 24, 21, 10, 10, 1, 81, 17, 7, 70, + 106, 95, 99, 76, 79, 77, 14, 68, 68, 68, 5, + 27, 14, 33, 65, 58, 55, 46, 38, 25, 21, 69, + 80, 97, 72, 41, 29, 20, 9, 10, 2, 64, 68, 84, + 94, 86, 77, 80, 73, 64, 71, 74, 64, 2, 3, 2, + 7, 10, 3, 56, 55, 49, 42, 37, 31, 15, 4, 78 }, + + { + + 61, + 8, 76, 61, 8, 76, 102, 83, 16, 10, 6, 10, 41, + 45, 54, 14, 85, 2, 66, 8, 1, 4, 69, 64, 79, + 13, 38, 89, 104, 111, 86, 86, 67, 66, 8, 1, + 80, 80, 8, 11, 66, 75, 86, 3, 73, 81, 89, 5, + 73, 85, 5, 72, 78, 88, 3, 69, 70, 75, 65, 5, + 22, 0, 0, 0, 75, 89, 97, 65, 11, 64, 52, 8, + 69, 112, 90, 82, 67, 88, 103, 99, 106, 79, + 103, 95, 100, 108, 104, 108, 105, 11, 66, 70, + 92, 67, 86, 81, 100, 73, 91, 84, 109, 11, 77, + 69, 105, 86, 77, 74, 66, 4, 64, 73, 8, 5, 68, + 3, 64, 64, 2, 76, 13, 5, 20, 19, 16, 18, 17, + 15, 19, 12, 7, 20, 16, 74, 96, 86, 89, 79, 83, + 79, 70, 77, 76, 75, 77, 70, 72, 69, 74, 95, + 86, 95, 71, 73, 65, 68, 4, 6, 1, 65, 8, 5, 64, + 68, 1, 82, 42, 41, 31, 34, 41, 33, 18, 35, 29, + 13, 20, 15, 5, 1, 67, 15, 9, 11, 12, 8, 4, 12, + 6, 3, 6, 0, 65, 3, 89, 60, 61, 58, 62, 59, 58, + 58, 58, 56, 47, 46, 43, 34, 29, 11, 43, 37, + 19, 47, 37, 38, 33, 28, 25, 27, 17, 7, 3, 3, + 78, 78, 98, 68, 27, 18, 12, 3, 5, 0, 70, 73, + 83, 1, 41, 27, 21, 17, 13, 2, 69, 71, 77, 81, + 22, 12, 7, 2, 1, 69, 73, 80, 95, 87, 66, 69, + 67, 70, 74, 84, 87, 100, 71, 35, 19, 12, 4, 4, + 70, 75, 78, 84, 62, 87, 78, 72, 66, 70, 1, 5, + 6, 70, 4, 9, 5, 78, 71, 70, 11, 8, 14, 11, 22, + 24, 19, 10, 16, 17, 15, 70, 3, 71, 93, 87, 82, + 81, 78, 78, 77, 76, 69, 74, 73, 70, 66, 75, + 82, 92, 82, 96, 76, 69, 70, 65, 68, 65, 3, 64, + 65, 67, 0, 64, 68, 80, 44, 39, 41, 39, 35, 41, + 37, 34, 30, 29, 30, 25, 7, 9, 2, 25, 24, 20, + 9, 15, 12, 1, 65, 69, 75, 78, 91, 76, 98, 62, + 62, 61, 61, 57, 52, 49, 43, 42, 38, 35, 28, + 22, 8, 69, 41, 41, 14, 43, 48, 37, 31, 33, 29, + 24, 28, 22, 18, 8, 8, 64, 82, 15, 5, 71, 105, + 94, 98, 75, 78, 76, 15, 67, 67, 68, 6, 28, 16, + 34, 64, 56, 54, 43, 35, 22, 18, 72, 82, 98, + 72, 41, 29, 20, 9, 10, 2, 64, 68, 84, 93, 85, + 76, 79, 72, 64, 71, 73, 64, 2, 3, 2, 7, 10, 3, + 55, 53, 47, 40, 35, 29, 13, 2, 79 }, + + { + + 60, + 8, 76, 60, 8, 76, 100, 82, 16, 10, 6, 9, 40, + 44, 54, 14, 83, 2, 65, 9, 1, 3, 69, 65, 80, + 12, 36, 91, 105, 112, 83, 85, 67, 65, 9, 1, + 80, 79, 8, 10, 66, 75, 85, 3, 73, 81, 89, 5, + 73, 84, 5, 72, 78, 88, 3, 69, 70, 75, 65, 5, + 22, 0, 0, 0, 74, 89, 97, 65, 10, 64, 52, 8, + 69, 111, 89, 82, 67, 87, 101, 97, 104, 78, + 101, 94, 98, 107, 103, 107, 104, 12, 66, 69, + 91, 67, 85, 80, 98, 73, 91, 84, 108, 11, 77, + 69, 104, 86, 76, 74, 66, 4, 64, 72, 8, 5, 68, + 3, 64, 64, 2, 76, 13, 5, 19, 19, 15, 18, 17, + 15, 17, 12, 7, 18, 15, 75, 95, 85, 88, 78, 82, + 78, 69, 76, 76, 74, 76, 70, 72, 69, 75, 94, + 85, 95, 71, 73, 64, 68, 3, 7, 1, 65, 7, 6, 65, + 69, 1, 83, 41, 40, 31, 33, 40, 32, 17, 34, 29, + 12, 19, 15, 5, 1, 67, 14, 8, 10, 11, 7, 3, 11, + 5, 1, 5, 64, 66, 2, 89, 58, 60, 56, 60, 57, + 56, 56, 56, 54, 45, 44, 41, 31, 27, 8, 41, 35, + 17, 45, 35, 36, 31, 26, 23, 24, 15, 5, 2, 1, + 79, 79, 98, 68, 27, 18, 12, 3, 5, 0, 70, 73, + 82, 1, 41, 27, 21, 17, 14, 3, 68, 71, 76, 80, + 23, 13, 7, 2, 2, 68, 73, 79, 94, 86, 65, 68, + 67, 70, 73, 83, 86, 99, 70, 35, 19, 12, 4, 5, + 69, 74, 77, 83, 62, 87, 78, 71, 66, 70, 1, 5, + 6, 70, 4, 9, 6, 78, 71, 70, 10, 8, 13, 10, 21, + 23, 19, 9, 15, 17, 15, 71, 2, 72, 92, 86, 81, + 81, 77, 78, 76, 75, 69, 74, 73, 70, 67, 75, + 82, 92, 81, 96, 76, 69, 70, 64, 68, 65, 4, 64, + 65, 67, 1, 65, 68, 81, 43, 39, 41, 38, 34, 40, + 36, 33, 29, 28, 29, 24, 6, 8, 1, 24, 23, 18, + 7, 14, 11, 0, 66, 69, 75, 78, 91, 77, 97, 62, + 62, 59, 59, 54, 50, 47, 41, 40, 36, 33, 26, + 20, 7, 70, 39, 39, 13, 41, 46, 35, 29, 31, 27, + 22, 26, 20, 16, 6, 6, 66, 83, 13, 3, 73, 104, + 93, 97, 74, 77, 75, 17, 66, 66, 68, 7, 30, 17, + 36, 0, 55, 52, 41, 32, 19, 15, 75, 84, 99, 72, + 41, 29, 20, 9, 10, 2, 64, 68, 83, 92, 84, 75, + 78, 71, 0, 70, 72, 0, 3, 4, 2, 8, 10, 3, 54, + 52, 45, 38, 33, 27, 11, 0, 80 }, + + { + + 58, + 7, 77, 58, 7, 77, 99, 81, 16, 10, 5, 7, 38, + 42, 53, 14, 81, 1, 65, 9, 0, 2, 69, 67, 82, + 11, 34, 93, 106, 113, 81, 84, 68, 65, 9, 0, + 80, 78, 8, 9, 66, 75, 85, 2, 74, 81, 90, 5, + 73, 84, 4, 73, 78, 88, 3, 69, 70, 75, 65, 4, + 22, 0, 0, 0, 74, 90, 97, 65, 9, 65, 52, 7, 69, + 110, 89, 82, 67, 86, 100, 96, 103, 77, 100, + 93, 97, 106, 103, 106, 104, 12, 66, 69, 91, + 67, 85, 80, 97, 73, 91, 84, 107, 11, 77, 69, + 103, 86, 76, 74, 66, 4, 64, 72, 8, 5, 69, 2, + 64, 65, 2, 76, 12, 4, 18, 19, 14, 17, 17, 14, + 15, 11, 6, 16, 14, 76, 95, 85, 88, 78, 82, 78, + 68, 76, 76, 74, 75, 71, 72, 69, 77, 94, 85, + 95, 71, 74, 64, 68, 2, 7, 1, 65, 5, 6, 66, 70, + 1, 84, 39, 39, 30, 32, 39, 31, 16, 33, 28, 10, + 18, 14, 4, 1, 68, 13, 7, 9, 10, 6, 2, 10, 4, + 64, 3, 65, 68, 0, 89, 56, 58, 54, 58, 55, 53, + 53, 53, 51, 42, 41, 38, 28, 24, 5, 39, 33, 15, + 42, 32, 33, 28, 23, 20, 21, 12, 2, 1, 64, 81, + 80, 99, 68, 27, 18, 12, 3, 5, 64, 70, 73, 82, + 1, 41, 27, 21, 17, 15, 3, 68, 71, 76, 80, 23, + 13, 7, 2, 2, 68, 73, 79, 93, 86, 64, 68, 67, + 70, 73, 83, 86, 98, 70, 35, 19, 12, 4, 5, 69, + 74, 77, 83, 62, 87, 78, 71, 66, 70, 1, 5, 6, + 70, 4, 9, 6, 78, 71, 71, 9, 8, 12, 9, 20, 22, + 18, 7, 13, 16, 14, 72, 0, 73, 92, 86, 80, 81, + 77, 78, 76, 75, 70, 74, 73, 70, 68, 75, 82, + 92, 81, 97, 76, 69, 70, 64, 69, 65, 4, 65, 66, + 67, 1, 66, 69, 82, 42, 38, 40, 37, 32, 39, 35, + 32, 28, 27, 28, 23, 5, 6, 64, 22, 21, 16, 5, + 12, 9, 64, 67, 70, 75, 78, 91, 78, 97, 62, 61, + 57, 56, 51, 47, 44, 38, 37, 33, 30, 23, 17, 5, + 71, 37, 37, 11, 39, 43, 32, 26, 28, 24, 20, + 23, 17, 13, 4, 3, 68, 85, 11, 1, 75, 103, 92, + 96, 74, 77, 75, 18, 66, 66, 68, 7, 31, 18, 37, + 0, 53, 50, 38, 28, 16, 12, 78, 87, 101, 72, + 41, 28, 19, 9, 10, 2, 65, 68, 83, 92, 84, 75, + 78, 70, 0, 70, 72, 0, 3, 4, 2, 8, 10, 2, 52, + 50, 43, 36, 31, 25, 8, 65, 81 }, + + { + + 57, + 7, 77, 57, 7, 77, 97, 79, 17, 11, 5, 6, 37, + 41, 53, 14, 78, 1, 64, 10, 0, 2, 68, 68, 83, + 11, 33, 94, 107, 113, 78, 82, 68, 64, 10, 0, + 79, 76, 9, 9, 65, 74, 84, 2, 74, 80, 90, 5, + 72, 83, 4, 73, 77, 88, 4, 68, 69, 74, 64, 4, + 22, 0, 0, 0, 73, 90, 97, 64, 9, 65, 52, 7, 69, + 108, 88, 82, 66, 84, 98, 94, 101, 75, 98, 91, + 95, 104, 102, 105, 103, 13, 65, 68, 90, 66, + 84, 79, 95, 72, 90, 83, 105, 12, 76, 68, 101, + 85, 75, 73, 65, 5, 0, 71, 9, 6, 69, 2, 0, 65, + 2, 75, 12, 4, 18, 19, 14, 17, 17, 14, 14, 11, + 6, 15, 13, 76, 94, 84, 87, 77, 81, 77, 67, 75, + 75, 73, 73, 71, 72, 68, 78, 93, 84, 95, 70, + 74, 0, 67, 2, 8, 1, 65, 4, 7, 66, 71, 1, 84, + 38, 39, 30, 32, 39, 31, 16, 33, 28, 9, 18, 14, + 4, 1, 68, 13, 7, 9, 10, 6, 1, 10, 4, 65, 2, + 65, 69, 64, 89, 55, 57, 53, 57, 54, 51, 51, + 51, 49, 40, 39, 36, 26, 22, 3, 38, 32, 14, 40, + 30, 31, 26, 21, 18, 19, 10, 0, 1, 65, 82, 80, + 99, 67, 28, 19, 13, 4, 5, 64, 69, 72, 81, 2, + 42, 28, 22, 17, 16, 4, 67, 70, 75, 79, 24, 14, + 8, 3, 3, 67, 72, 78, 91, 85, 1, 67, 66, 69, + 72, 82, 85, 96, 69, 36, 20, 13, 5, 6, 68, 73, + 76, 82, 62, 86, 77, 70, 66, 69, 1, 6, 7, 69, + 5, 10, 7, 77, 71, 71, 9, 9, 12, 9, 19, 22, 18, + 6, 12, 16, 14, 72, 64, 73, 91, 85, 79, 80, 76, + 77, 75, 74, 70, 73, 72, 69, 68, 74, 81, 91, + 80, 97, 76, 68, 70, 0, 69, 65, 5, 65, 66, 66, + 2, 66, 69, 82, 42, 38, 40, 37, 31, 39, 35, 32, + 28, 27, 28, 23, 5, 5, 65, 21, 20, 15, 4, 11, + 8, 64, 67, 70, 74, 77, 90, 78, 96, 60, 59, 55, + 54, 49, 45, 42, 36, 35, 31, 28, 21, 15, 4, 71, + 36, 36, 10, 38, 41, 30, 24, 26, 22, 18, 21, + 15, 11, 3, 1, 69, 86, 10, 0, 76, 101, 90, 94, + 73, 76, 74, 20, 65, 65, 68, 8, 33, 20, 39, 1, + 52, 49, 36, 25, 14, 10, 80, 89, 102, 71, 42, + 28, 19, 9, 11, 2, 65, 68, 82, 91, 83, 74, 77, + 68, 1, 69, 71, 1, 4, 5, 3, 9, 11, 2, 51, 49, + 42, 35, 30, 24, 6, 66, 81 }, + + { + + 56, + 7, 77, 56, 7, 77, 95, 78, 17, 11, 5, 5, 36, + 40, 53, 14, 76, 1, 0, 11, 0, 1, 68, 69, 84, + 10, 31, 96, 108, 114, 75, 81, 68, 0, 11, 0, + 79, 75, 9, 8, 65, 74, 83, 2, 74, 80, 90, 5, + 72, 82, 4, 73, 77, 88, 4, 68, 69, 74, 64, 4, + 22, 0, 0, 0, 72, 90, 97, 64, 8, 65, 52, 7, 69, + 107, 87, 82, 66, 83, 96, 92, 100, 74, 96, 90, + 93, 103, 101, 104, 102, 14, 65, 67, 89, 66, + 84, 78, 93, 72, 90, 83, 104, 12, 76, 68, 100, + 85, 74, 73, 65, 5, 0, 70, 9, 6, 70, 2, 0, 65, + 2, 75, 12, 4, 17, 19, 13, 17, 17, 14, 12, 11, + 6, 13, 12, 77, 93, 83, 86, 76, 80, 76, 66, 74, + 75, 72, 72, 71, 72, 68, 79, 93, 83, 95, 70, + 74, 1, 67, 1, 9, 1, 65, 3, 8, 67, 72, 1, 85, + 36, 38, 29, 31, 38, 30, 15, 32, 28, 8, 17, 14, + 4, 1, 68, 12, 6, 8, 9, 5, 0, 9, 3, 67, 1, 66, + 70, 65, 89, 53, 56, 51, 55, 52, 49, 49, 49, + 46, 38, 37, 33, 23, 20, 0, 36, 30, 12, 38, 28, + 29, 24, 19, 16, 16, 8, 65, 0, 67, 83, 81, 99, + 67, 28, 19, 13, 4, 5, 64, 69, 72, 80, 2, 42, + 28, 22, 17, 17, 4, 66, 70, 74, 78, 25, 15, 8, + 3, 4, 67, 72, 77, 90, 84, 2, 66, 66, 69, 71, + 81, 84, 95, 69, 36, 20, 13, 5, 7, 67, 72, 75, + 81, 62, 86, 77, 70, 66, 69, 1, 6, 7, 69, 5, + 10, 8, 77, 71, 71, 8, 9, 11, 8, 18, 21, 18, 5, + 11, 16, 14, 73, 65, 74, 90, 84, 78, 80, 76, + 77, 74, 73, 70, 73, 72, 69, 69, 74, 81, 91, + 79, 97, 76, 68, 70, 1, 69, 65, 6, 65, 66, 66, + 3, 67, 69, 83, 41, 38, 40, 36, 30, 38, 34, 31, + 27, 26, 27, 22, 4, 4, 66, 19, 19, 13, 2, 10, + 7, 65, 68, 70, 74, 77, 90, 79, 95, 58, 57, 53, + 52, 46, 43, 40, 33, 33, 29, 26, 19, 13, 3, 72, + 34, 34, 9, 36, 39, 28, 22, 24, 20, 16, 19, 13, + 9, 1, 64, 71, 87, 8, 65, 78, 100, 89, 93, 72, + 75, 73, 22, 64, 64, 68, 9, 34, 21, 40, 2, 51, + 47, 33, 22, 11, 7, 83, 91, 103, 71, 42, 28, + 19, 9, 11, 2, 65, 68, 81, 90, 82, 73, 76, 67, + 2, 68, 70, 2, 5, 6, 3, 10, 11, 2, 50, 47, 40, + 33, 28, 22, 4, 68, 82 }, + + { + + 55, + 7, 77, 55, 7, 77, 93, 76, 18, 11, 4, 3, 34, + 39, 53, 14, 74, 1, 1, 12, 0, 0, 68, 70, 85, + 10, 29, 97, 109, 114, 72, 80, 68, 1, 12, 0, + 78, 74, 10, 8, 65, 73, 82, 1, 75, 80, 90, 5, + 72, 82, 4, 73, 77, 88, 5, 68, 69, 74, 0, 4, + 22, 0, 0, 0, 72, 90, 97, 0, 7, 65, 52, 7, 69, + 106, 86, 82, 65, 82, 94, 90, 98, 73, 94, 89, + 91, 102, 100, 103, 101, 15, 65, 66, 88, 66, + 83, 78, 91, 72, 89, 82, 103, 12, 76, 67, 98, + 84, 73, 73, 65, 5, 0, 69, 10, 7, 70, 2, 0, 65, + 2, 75, 12, 3, 17, 19, 12, 17, 17, 14, 10, 11, + 5, 11, 11, 78, 92, 82, 85, 75, 79, 76, 65, 74, + 74, 71, 71, 71, 72, 68, 80, 92, 82, 95, 70, + 74, 2, 67, 0, 10, 1, 65, 2, 9, 67, 73, 1, 86, + 35, 37, 29, 30, 37, 29, 15, 31, 27, 7, 16, 14, + 4, 1, 69, 11, 5, 7, 8, 4, 64, 8, 3, 69, 0, 66, + 71, 66, 89, 52, 54, 50, 53, 50, 47, 47, 47, + 44, 35, 35, 31, 21, 17, 65, 34, 28, 11, 36, + 26, 26, 21, 17, 13, 14, 6, 68, 64, 69, 84, 82, + 99, 67, 29, 19, 13, 4, 5, 64, 69, 72, 80, 2, + 42, 28, 22, 17, 18, 5, 66, 69, 74, 77, 26, 15, + 9, 3, 5, 66, 71, 77, 89, 83, 3, 65, 65, 69, + 70, 80, 83, 94, 68, 36, 20, 13, 5, 8, 67, 71, + 74, 80, 62, 85, 76, 69, 66, 69, 1, 6, 7, 69, + 5, 10, 8, 77, 71, 71, 8, 10, 10, 7, 17, 20, + 18, 4, 10, 16, 14, 73, 66, 74, 89, 83, 77, 79, + 75, 76, 74, 72, 70, 73, 72, 68, 69, 74, 81, + 90, 78, 97, 76, 68, 70, 2, 69, 65, 7, 65, 66, + 66, 4, 68, 69, 84, 40, 37, 39, 35, 29, 37, 33, + 30, 26, 25, 26, 21, 3, 3, 67, 18, 18, 12, 0, + 8, 6, 66, 68, 71, 74, 77, 90, 79, 94, 56, 55, + 51, 50, 43, 41, 38, 31, 31, 27, 24, 16, 11, 1, + 73, 32, 33, 7, 34, 37, 26, 20, 22, 18, 14, 17, + 11, 6, 64, 66, 73, 88, 6, 67, 79, 99, 88, 92, + 71, 74, 72, 23, 0, 0, 68, 10, 36, 23, 42, 3, + 49, 46, 31, 19, 8, 4, 86, 93, 104, 71, 42, 28, + 19, 9, 11, 2, 65, 68, 81, 89, 81, 72, 75, 66, + 2, 68, 69, 2, 5, 6, 3, 10, 11, 2, 49, 46, 38, + 31, 26, 20, 2, 70, 83 }, + + { + + 53, + 7, 77, 53, 7, 77, 92, 75, 18, 11, 4, 2, 33, + 37, 53, 14, 71, 0, 2, 12, 0, 64, 68, 71, 86, + 9, 27, 99, 110, 115, 69, 79, 68, 2, 12, 0, 78, + 73, 10, 7, 65, 73, 82, 1, 75, 79, 90, 5, 72, + 81, 3, 74, 77, 88, 5, 67, 69, 73, 0, 4, 22, 0, + 0, 0, 71, 91, 97, 0, 6, 65, 52, 7, 69, 105, + 85, 82, 65, 80, 93, 88, 97, 72, 93, 87, 89, + 101, 100, 102, 101, 15, 65, 65, 87, 66, 83, + 77, 89, 72, 89, 82, 102, 12, 75, 67, 97, 84, + 73, 73, 64, 5, 0, 69, 10, 7, 71, 1, 0, 65, 2, + 75, 12, 3, 16, 19, 12, 17, 17, 13, 8, 11, 5, + 9, 10, 79, 91, 81, 84, 74, 79, 75, 64, 73, 74, + 70, 70, 71, 72, 67, 81, 92, 81, 95, 70, 74, 2, + 67, 64, 11, 1, 65, 0, 10, 68, 74, 1, 87, 33, + 36, 28, 29, 36, 28, 14, 30, 27, 5, 15, 13, 4, + 1, 69, 10, 5, 6, 8, 3, 65, 7, 2, 71, 64, 67, + 72, 67, 89, 50, 53, 48, 51, 48, 45, 44, 45, + 41, 33, 33, 28, 18, 15, 68, 32, 27, 9, 33, 24, + 24, 19, 14, 11, 11, 4, 70, 65, 70, 86, 83, 99, + 67, 29, 20, 13, 4, 5, 64, 69, 72, 79, 3, 43, + 28, 22, 17, 19, 5, 65, 69, 73, 77, 27, 16, 9, + 3, 5, 66, 71, 76, 88, 83, 4, 65, 65, 69, 69, + 79, 83, 93, 68, 37, 20, 13, 5, 9, 66, 71, 73, + 79, 62, 85, 76, 69, 66, 69, 1, 6, 7, 68, 5, + 10, 9, 77, 71, 71, 7, 10, 9, 6, 16, 19, 18, 2, + 9, 15, 14, 74, 67, 75, 89, 83, 76, 79, 75, 76, + 73, 71, 71, 73, 72, 68, 70, 74, 81, 90, 77, + 97, 76, 67, 70, 2, 69, 65, 8, 65, 67, 66, 5, + 68, 70, 85, 39, 37, 39, 34, 28, 36, 32, 29, + 25, 24, 25, 20, 2, 2, 68, 16, 16, 10, 65, 7, + 5, 67, 69, 71, 74, 77, 90, 80, 94, 53, 52, 49, + 47, 40, 39, 36, 28, 29, 25, 22, 14, 9, 0, 74, + 30, 31, 6, 32, 35, 24, 18, 19, 16, 12, 15, 9, + 4, 66, 68, 75, 89, 4, 69, 81, 98, 87, 91, 71, + 73, 71, 25, 1, 1, 68, 11, 37, 24, 43, 3, 48, + 44, 28, 16, 5, 1, 89, 95, 105, 71, 42, 28, 19, + 9, 11, 2, 65, 68, 80, 88, 80, 71, 75, 65, 3, + 67, 68, 3, 6, 7, 4, 11, 12, 2, 47, 44, 36, 29, + 24, 18, 0, 72, 84 }, + + { + + 52, + 7, 77, 52, 7, 77, 90, 73, 18, 11, 3, 0, 31, + 36, 53, 14, 69, 0, 3, 13, 0, 64, 67, 72, 87, + 9, 25, 101, 111, 115, 66, 77, 68, 3, 13, 0, + 78, 72, 10, 7, 65, 73, 81, 1, 76, 79, 90, 5, + 72, 80, 3, 74, 77, 88, 6, 67, 68, 73, 1, 4, + 22, 0, 0, 0, 71, 91, 97, 1, 5, 65, 52, 7, 69, + 104, 84, 82, 64, 79, 91, 86, 95, 71, 91, 86, + 87, 100, 99, 101, 100, 16, 65, 64, 86, 66, 82, + 76, 87, 72, 89, 81, 100, 13, 75, 66, 96, 83, + 72, 73, 64, 6, 1, 68, 11, 8, 71, 1, 0, 65, 2, + 75, 12, 2, 15, 19, 11, 17, 17, 13, 6, 11, 4, + 8, 9, 80, 90, 80, 83, 73, 78, 74, 0, 72, 73, + 69, 69, 71, 72, 67, 82, 91, 80, 95, 69, 74, 3, + 67, 65, 12, 1, 65, 64, 11, 68, 75, 1, 87, 32, + 35, 28, 28, 35, 27, 13, 30, 27, 4, 14, 13, 4, + 1, 70, 10, 4, 5, 7, 2, 66, 7, 1, 73, 65, 68, + 73, 68, 89, 48, 52, 46, 49, 47, 43, 42, 43, + 39, 31, 31, 26, 16, 13, 70, 30, 25, 7, 31, 22, + 22, 17, 12, 9, 8, 2, 73, 66, 72, 87, 83, 99, + 67, 29, 20, 13, 4, 5, 64, 69, 72, 79, 3, 43, + 28, 22, 17, 20, 6, 64, 69, 72, 76, 28, 17, 9, + 4, 6, 65, 70, 76, 87, 82, 6, 64, 65, 68, 68, + 78, 82, 92, 67, 37, 21, 13, 5, 10, 65, 70, 72, + 78, 62, 85, 76, 68, 66, 69, 1, 6, 7, 68, 5, + 11, 9, 77, 71, 71, 6, 11, 8, 5, 15, 19, 18, 1, + 8, 15, 14, 75, 68, 75, 88, 82, 75, 78, 74, 75, + 73, 70, 71, 73, 72, 68, 71, 74, 81, 89, 76, + 97, 76, 67, 70, 3, 69, 65, 9, 65, 67, 66, 6, + 69, 70, 85, 38, 37, 38, 34, 27, 35, 31, 28, + 25, 23, 24, 19, 1, 1, 69, 15, 15, 9, 67, 6, 4, + 68, 70, 72, 74, 76, 90, 80, 93, 51, 50, 47, + 45, 38, 37, 34, 26, 27, 23, 20, 12, 7, 65, 75, + 28, 29, 5, 30, 33, 22, 16, 17, 14, 10, 13, 7, + 1, 68, 70, 77, 90, 2, 71, 82, 97, 85, 90, 70, + 72, 70, 27, 2, 2, 68, 12, 39, 26, 45, 4, 46, + 42, 26, 13, 3, 65, 91, 97, 106, 71, 42, 28, + 19, 9, 11, 2, 65, 68, 80, 87, 79, 70, 74, 64, + 4, 67, 67, 4, 7, 8, 4, 11, 12, 2, 46, 43, 35, + 28, 22, 16, 65, 74, 85 }, + + { + + 51, + 7, 78, 51, 7, 78, 88, 72, 19, 11, 3, 64, 30, + 35, 53, 14, 67, 0, 3, 14, 0, 65, 67, 73, 88, + 8, 24, 102, 112, 116, 0, 76, 68, 3, 14, 0, 77, + 71, 11, 6, 64, 72, 80, 0, 76, 79, 90, 5, 71, + 80, 3, 74, 76, 88, 6, 67, 68, 73, 1, 4, 22, 0, + 0, 0, 70, 91, 97, 1, 5, 66, 52, 7, 69, 103, + 84, 82, 64, 78, 89, 84, 94, 70, 89, 85, 85, + 99, 98, 100, 99, 17, 65, 0, 86, 65, 82, 76, + 85, 72, 88, 81, 99, 13, 75, 66, 94, 83, 71, + 72, 64, 6, 1, 67, 11, 8, 72, 1, 0, 65, 2, 75, + 12, 2, 15, 19, 10, 17, 17, 13, 4, 11, 4, 6, 8, + 81, 90, 79, 83, 73, 77, 74, 1, 72, 73, 69, 67, + 71, 72, 67, 83, 91, 79, 95, 69, 74, 4, 66, 66, + 12, 1, 65, 65, 12, 69, 76, 1, 88, 30, 34, 27, + 28, 34, 27, 13, 29, 26, 3, 13, 13, 4, 1, 70, + 9, 3, 4, 6, 2, 67, 6, 1, 75, 66, 68, 74, 69, + 89, 47, 50, 45, 47, 45, 41, 40, 41, 36, 28, + 29, 23, 13, 10, 73, 28, 23, 6, 29, 19, 19, 14, + 10, 6, 6, 64, 75, 67, 74, 88, 84, 99, 66, 30, + 20, 14, 4, 5, 64, 69, 72, 78, 3, 43, 29, 22, + 17, 21, 6, 64, 68, 72, 75, 29, 17, 10, 4, 7, + 65, 70, 75, 86, 81, 7, 0, 64, 68, 68, 78, 81, + 90, 67, 37, 21, 13, 6, 10, 65, 69, 72, 77, 62, + 84, 75, 68, 66, 69, 1, 6, 7, 68, 6, 11, 10, + 77, 71, 72, 6, 11, 7, 4, 14, 18, 18, 0, 7, 15, + 14, 75, 69, 76, 87, 81, 74, 78, 74, 75, 72, + 70, 71, 72, 71, 67, 71, 74, 81, 89, 75, 97, + 76, 67, 70, 4, 69, 65, 10, 66, 67, 66, 6, 70, + 70, 86, 37, 36, 38, 33, 26, 35, 31, 27, 24, + 23, 23, 18, 0, 0, 70, 13, 14, 7, 69, 4, 2, 69, + 70, 72, 74, 76, 89, 81, 92, 49, 48, 45, 43, + 35, 35, 32, 23, 25, 20, 18, 9, 5, 66, 75, 27, + 28, 3, 28, 30, 20, 14, 15, 12, 8, 10, 5, 64, + 70, 72, 78, 92, 0, 73, 84, 96, 84, 89, 69, 71, + 69, 28, 3, 3, 68, 13, 40, 27, 46, 5, 45, 41, + 23, 10, 0, 67, 94, 99, 108, 70, 42, 28, 19, 9, + 11, 2, 65, 68, 79, 86, 79, 69, 73, 0, 4, 66, + 66, 4, 7, 8, 4, 12, 12, 2, 45, 41, 33, 26, 21, + 15, 68, 75, 86 }, + + { + + 50, + 7, 78, 50, 7, 78, 86, 70, 19, 11, 2, 66, 28, + 33, 53, 14, 64, 64, 4, 14, 0, 66, 67, 74, 89, + 8, 22, 104, 113, 116, 3, 75, 68, 4, 14, 0, 77, + 70, 11, 6, 64, 72, 80, 0, 77, 78, 90, 5, 71, + 79, 2, 74, 76, 88, 7, 66, 68, 72, 2, 4, 22, 0, + 0, 0, 70, 91, 97, 2, 4, 66, 52, 7, 69, 102, + 83, 82, 0, 76, 88, 82, 92, 69, 88, 83, 83, 98, + 97, 99, 99, 18, 65, 1, 85, 65, 81, 75, 83, 72, + 88, 80, 98, 13, 74, 65, 93, 82, 71, 72, 0, 6, + 1, 66, 12, 9, 72, 0, 0, 65, 2, 75, 12, 1, 14, + 19, 10, 17, 17, 12, 2, 11, 3, 4, 7, 82, 89, + 78, 82, 72, 76, 73, 2, 71, 72, 68, 66, 71, 72, + 66, 84, 90, 78, 95, 69, 74, 4, 66, 67, 13, 1, + 65, 67, 13, 69, 77, 1, 89, 29, 33, 27, 27, 33, + 26, 12, 28, 26, 2, 12, 13, 4, 1, 71, 8, 3, 3, + 6, 1, 68, 5, 0, 77, 67, 69, 75, 70, 89, 45, + 49, 43, 45, 43, 39, 37, 39, 34, 26, 27, 21, + 11, 8, 75, 26, 22, 4, 26, 17, 17, 12, 7, 4, 3, + 66, 78, 68, 75, 90, 85, 99, 66, 30, 21, 14, 4, + 5, 64, 69, 72, 78, 4, 44, 29, 22, 17, 22, 7, + 0, 68, 71, 74, 30, 18, 10, 4, 8, 64, 69, 75, + 85, 81, 8, 0, 64, 68, 67, 77, 81, 89, 66, 38, + 21, 13, 6, 11, 64, 68, 71, 76, 62, 84, 75, 67, + 66, 69, 1, 6, 7, 67, 6, 11, 10, 77, 71, 72, 5, + 12, 6, 3, 13, 17, 18, 64, 6, 14, 14, 76, 70, + 76, 86, 81, 73, 77, 73, 74, 72, 69, 71, 72, + 71, 67, 72, 74, 81, 88, 74, 97, 76, 66, 70, 4, + 69, 65, 11, 66, 67, 66, 7, 70, 71, 87, 36, 36, + 37, 32, 25, 34, 30, 26, 23, 22, 22, 17, 64, + 64, 71, 12, 12, 6, 71, 3, 1, 70, 71, 73, 74, + 76, 89, 81, 91, 47, 46, 43, 40, 32, 33, 30, + 21, 23, 18, 16, 7, 3, 68, 76, 25, 26, 2, 26, + 28, 18, 12, 13, 10, 6, 8, 3, 67, 72, 74, 80, + 93, 65, 75, 85, 95, 83, 88, 69, 70, 68, 30, 4, + 4, 68, 14, 42, 29, 48, 5, 43, 39, 21, 7, 66, + 70, 97, 101, 109, 70, 42, 28, 19, 9, 11, 2, + 65, 68, 79, 85, 78, 68, 72, 1, 5, 66, 65, 5, + 8, 9, 5, 12, 13, 2, 43, 40, 31, 24, 19, 13, + 70, 77, 87 }, + + { + + 48, + 6, 78, 48, 6, 78, 85, 69, 19, 11, 2, 67, 27, + 32, 53, 14, 1, 64, 5, 15, 0, 67, 67, 75, 91, + 7, 20, 106, 114, 117, 5, 74, 68, 5, 15, 0, 77, + 69, 11, 5, 64, 72, 79, 64, 77, 78, 91, 5, 71, + 79, 2, 75, 76, 88, 7, 66, 68, 72, 2, 4, 22, 0, + 0, 0, 69, 92, 97, 2, 3, 66, 52, 7, 69, 101, + 82, 82, 0, 75, 86, 80, 91, 68, 86, 82, 82, 97, + 97, 98, 98, 18, 65, 2, 84, 65, 81, 75, 82, 72, + 88, 80, 97, 13, 74, 65, 92, 82, 70, 72, 0, 6, + 1, 66, 12, 9, 73, 0, 0, 65, 2, 75, 12, 1, 13, + 19, 9, 17, 17, 12, 0, 11, 3, 2, 6, 83, 88, 77, + 81, 71, 76, 73, 3, 71, 72, 67, 65, 71, 72, 66, + 86, 90, 77, 95, 69, 75, 5, 66, 68, 14, 1, 65, + 68, 14, 70, 78, 1, 90, 27, 32, 26, 26, 32, 25, + 11, 27, 25, 0, 11, 12, 4, 1, 71, 7, 2, 2, 5, + 0, 69, 4, 64, 79, 69, 70, 76, 71, 89, 43, 47, + 41, 43, 41, 37, 35, 37, 31, 23, 25, 18, 8, 5, + 78, 24, 20, 2, 24, 15, 14, 9, 5, 1, 0, 68, 80, + 69, 77, 91, 86, 100, 66, 30, 21, 14, 4, 5, 64, + 69, 72, 77, 4, 44, 29, 22, 17, 23, 7, 0, 68, + 71, 74, 31, 18, 10, 4, 8, 64, 69, 74, 84, 80, + 9, 1, 64, 68, 66, 76, 80, 88, 66, 38, 21, 13, + 6, 12, 64, 68, 70, 76, 62, 84, 75, 67, 66, 69, + 1, 6, 7, 67, 6, 11, 11, 77, 71, 72, 4, 12, 5, + 2, 12, 16, 18, 66, 4, 14, 14, 77, 71, 77, 86, + 80, 72, 77, 73, 74, 71, 68, 72, 72, 71, 67, + 73, 74, 81, 88, 74, 98, 76, 66, 70, 5, 69, 65, + 11, 66, 68, 66, 8, 71, 71, 88, 35, 35, 37, 31, + 23, 33, 29, 25, 22, 21, 21, 16, 65, 65, 72, + 10, 11, 4, 73, 1, 0, 71, 72, 73, 74, 76, 89, + 82, 91, 44, 43, 41, 38, 29, 30, 27, 18, 21, + 16, 14, 4, 1, 69, 77, 23, 24, 0, 24, 26, 15, + 9, 10, 7, 4, 6, 0, 69, 74, 77, 82, 94, 67, 77, + 87, 94, 82, 87, 68, 69, 68, 31, 5, 4, 68, 14, + 43, 30, 49, 6, 42, 37, 18, 4, 69, 73, 100, + 103, 110, 70, 42, 28, 19, 9, 11, 2, 65, 68, + 78, 85, 77, 67, 72, 2, 5, 65, 65, 5, 8, 9, 5, + 13, 13, 1, 42, 38, 29, 22, 17, 11, 72, 79, 88 }, + + { + + 47, + 6, 78, 47, 6, 78, 83, 68, 20, 11, 2, 68, 26, + 31, 53, 14, 3, 64, 6, 16, 0, 67, 66, 76, 92, + 6, 18, 107, 115, 118, 8, 72, 68, 6, 16, 0, 76, + 68, 12, 4, 64, 71, 78, 64, 77, 78, 91, 5, 71, + 78, 2, 75, 76, 88, 7, 66, 67, 72, 2, 4, 22, 0, + 0, 0, 68, 92, 97, 2, 2, 66, 52, 7, 69, 100, + 81, 82, 0, 74, 84, 78, 89, 66, 84, 81, 80, 96, + 96, 97, 97, 19, 64, 3, 83, 65, 80, 74, 80, 72, + 87, 80, 95, 14, 74, 65, 90, 82, 69, 72, 0, 7, + 2, 65, 12, 9, 73, 0, 1, 65, 2, 74, 12, 1, 13, + 19, 8, 17, 17, 12, 65, 11, 3, 1, 5, 83, 87, + 76, 80, 70, 75, 72, 4, 70, 72, 66, 64, 71, 72, + 66, 87, 89, 76, 95, 68, 75, 6, 66, 69, 15, 1, + 65, 69, 15, 71, 79, 1, 90, 26, 31, 26, 25, 31, + 24, 11, 27, 25, 64, 10, 12, 4, 1, 71, 7, 1, 1, + 4, 64, 70, 4, 64, 80, 70, 70, 77, 72, 89, 42, + 46, 40, 42, 40, 35, 33, 35, 29, 21, 23, 16, 5, + 3, 81, 23, 18, 1, 22, 13, 12, 7, 3, 64, 65, + 70, 82, 69, 79, 92, 86, 100, 66, 31, 21, 14, + 5, 5, 64, 68, 72, 76, 4, 44, 29, 23, 17, 24, + 8, 1, 67, 70, 73, 32, 19, 11, 5, 9, 0, 69, 73, + 83, 79, 11, 2, 0, 67, 65, 75, 79, 87, 65, 38, + 22, 14, 6, 13, 0, 67, 69, 75, 62, 83, 74, 66, + 66, 69, 1, 7, 8, 67, 6, 12, 12, 77, 71, 72, 4, + 12, 4, 2, 11, 16, 18, 67, 3, 14, 14, 77, 72, + 78, 85, 79, 71, 77, 72, 74, 70, 67, 72, 72, + 71, 66, 73, 74, 81, 88, 73, 98, 76, 66, 70, 6, + 69, 65, 12, 66, 68, 66, 9, 72, 71, 88, 34, 35, + 37, 31, 22, 32, 28, 24, 22, 20, 20, 16, 65, + 66, 73, 9, 10, 2, 75, 0, 64, 71, 72, 73, 73, + 75, 89, 83, 90, 42, 41, 39, 36, 27, 28, 25, + 16, 19, 14, 12, 2, 64, 70, 78, 21, 23, 64, 22, + 24, 13, 7, 8, 5, 2, 4, 65, 71, 75, 79, 84, 95, + 69, 79, 89, 93, 80, 85, 67, 68, 67, 33, 6, 5, + 68, 15, 45, 31, 51, 7, 41, 36, 16, 1, 71, 76, + 102, 105, 111, 70, 42, 28, 19, 9, 12, 2, 65, + 68, 77, 84, 76, 66, 71, 4, 6, 64, 64, 6, 9, + 10, 5, 14, 13, 1, 41, 37, 28, 21, 15, 9, 74, + 81, 88 }, + + { + + 46, + 6, 78, 46, 6, 78, 81, 66, 20, 11, 1, 70, 24, + 29, 53, 14, 6, 65, 7, 16, 0, 68, 66, 77, 93, + 6, 16, 109, 116, 118, 11, 71, 68, 7, 16, 0, + 76, 67, 12, 4, 64, 71, 78, 64, 78, 77, 91, 5, + 71, 77, 1, 75, 76, 88, 8, 65, 67, 71, 3, 4, + 22, 0, 0, 0, 68, 92, 97, 3, 1, 66, 52, 7, 69, + 99, 80, 82, 1, 72, 83, 76, 88, 65, 83, 79, 78, + 95, 95, 96, 97, 20, 64, 4, 82, 65, 80, 73, 78, + 72, 87, 79, 94, 14, 73, 64, 89, 81, 69, 72, 1, + 7, 2, 64, 13, 10, 74, 64, 1, 65, 2, 74, 12, 0, + 12, 19, 8, 17, 17, 11, 67, 11, 2, 64, 4, 84, + 86, 75, 79, 69, 74, 71, 5, 69, 71, 65, 0, 71, + 72, 65, 88, 89, 75, 95, 68, 75, 6, 66, 70, 16, + 1, 65, 71, 16, 71, 80, 1, 91, 24, 30, 25, 24, + 30, 23, 10, 26, 25, 65, 9, 12, 4, 1, 72, 6, 1, + 0, 4, 65, 71, 3, 65, 82, 71, 71, 78, 73, 89, + 40, 45, 38, 40, 38, 33, 30, 33, 26, 19, 21, + 13, 3, 1, 83, 21, 17, 64, 19, 11, 10, 5, 0, + 66, 68, 72, 85, 70, 80, 94, 87, 100, 66, 31, + 22, 14, 5, 5, 64, 68, 72, 76, 5, 45, 29, 23, + 17, 25, 8, 2, 67, 69, 72, 33, 20, 11, 5, 10, + 0, 68, 73, 82, 79, 12, 2, 0, 67, 64, 74, 79, + 86, 65, 39, 22, 14, 6, 14, 1, 66, 68, 74, 62, + 83, 74, 66, 66, 69, 1, 7, 8, 66, 6, 12, 12, + 77, 71, 72, 3, 13, 3, 1, 10, 15, 18, 68, 2, + 13, 14, 78, 73, 78, 84, 79, 70, 76, 72, 73, + 70, 66, 72, 72, 71, 66, 74, 74, 81, 87, 72, + 98, 76, 65, 70, 6, 69, 65, 13, 66, 68, 66, 10, + 72, 72, 89, 33, 35, 36, 30, 21, 31, 27, 23, + 21, 19, 19, 15, 66, 67, 74, 7, 8, 1, 77, 64, + 65, 72, 73, 74, 73, 75, 89, 83, 89, 40, 39, + 37, 33, 24, 26, 23, 13, 17, 12, 10, 0, 66, 72, + 79, 19, 21, 65, 20, 22, 11, 5, 6, 3, 0, 2, 67, + 74, 77, 81, 86, 96, 71, 81, 90, 92, 79, 84, + 67, 67, 66, 35, 7, 6, 68, 16, 46, 33, 52, 7, + 39, 34, 13, 65, 74, 79, 105, 107, 112, 70, 42, + 28, 19, 9, 12, 2, 65, 68, 77, 83, 75, 65, 70, + 5, 7, 64, 0, 7, 10, 11, 6, 14, 14, 1, 39, 35, + 26, 19, 13, 7, 76, 83, 89 }, + + { + + 45, + 6, 79, 45, 6, 79, 79, 65, 21, 11, 1, 71, 23, + 28, 53, 14, 8, 65, 7, 17, 0, 69, 66, 78, 94, + 5, 15, 110, 117, 119, 14, 70, 68, 7, 17, 0, + 75, 66, 13, 3, 0, 70, 77, 65, 78, 77, 91, 5, + 70, 77, 1, 75, 75, 88, 8, 65, 67, 71, 3, 4, + 22, 0, 0, 0, 67, 92, 97, 3, 1, 67, 52, 7, 69, + 98, 80, 82, 1, 71, 81, 74, 86, 64, 81, 78, 76, + 94, 94, 95, 96, 21, 64, 5, 82, 64, 79, 73, 76, + 72, 86, 79, 93, 14, 73, 64, 87, 81, 68, 71, 1, + 7, 2, 0, 13, 10, 74, 64, 1, 65, 2, 74, 12, 0, + 12, 19, 7, 17, 17, 11, 69, 11, 2, 66, 3, 85, + 86, 74, 79, 69, 73, 71, 6, 69, 71, 65, 2, 71, + 72, 65, 89, 88, 74, 95, 68, 75, 7, 65, 71, 16, + 1, 65, 72, 17, 72, 81, 1, 92, 23, 29, 25, 24, + 29, 23, 10, 25, 24, 66, 8, 12, 4, 1, 72, 5, 0, + 64, 3, 65, 72, 2, 65, 84, 72, 71, 79, 74, 89, + 39, 43, 37, 38, 36, 31, 28, 31, 24, 16, 19, + 11, 0, 65, 86, 19, 15, 65, 17, 8, 7, 2, 65, + 69, 70, 75, 87, 71, 82, 95, 88, 100, 65, 32, + 22, 15, 5, 5, 64, 68, 72, 75, 5, 45, 30, 23, + 17, 26, 9, 2, 66, 69, 71, 34, 20, 12, 5, 11, + 1, 68, 72, 81, 78, 13, 3, 1, 67, 64, 74, 78, + 84, 64, 39, 22, 14, 7, 14, 1, 65, 68, 73, 62, + 82, 73, 65, 66, 69, 1, 7, 8, 66, 7, 12, 13, + 77, 71, 73, 3, 13, 2, 0, 9, 14, 18, 69, 1, 13, + 14, 78, 74, 79, 83, 78, 69, 76, 71, 73, 69, + 66, 72, 71, 70, 65, 74, 74, 81, 87, 71, 98, + 76, 65, 70, 7, 69, 65, 14, 67, 68, 66, 10, 73, + 72, 90, 32, 34, 36, 29, 20, 31, 27, 22, 20, + 19, 18, 14, 67, 68, 75, 6, 7, 64, 79, 66, 67, + 73, 73, 74, 73, 75, 88, 84, 88, 38, 37, 35, + 31, 21, 24, 21, 11, 15, 9, 8, 66, 68, 73, 79, + 18, 20, 67, 18, 19, 9, 3, 4, 1, 65, 64, 69, + 76, 79, 83, 87, 98, 73, 83, 92, 91, 78, 83, + 66, 66, 65, 36, 8, 7, 68, 17, 48, 34, 54, 8, + 38, 33, 11, 68, 77, 81, 108, 109, 114, 69, 42, + 28, 19, 9, 12, 2, 65, 68, 76, 82, 75, 64, 69, + 6, 7, 0, 1, 7, 10, 11, 6, 15, 14, 1, 38, 34, + 24, 17, 12, 6, 79, 84, 90 }, + + { + + 43, + 6, 79, 43, 6, 79, 78, 0, 21, 11, 0, 73, 21, + 27, 53, 14, 10, 65, 8, 18, 0, 70, 66, 79, 95, + 5, 13, 112, 118, 119, 17, 69, 68, 8, 18, 0, + 75, 65, 13, 3, 0, 70, 76, 65, 79, 77, 91, 5, + 70, 76, 1, 76, 75, 88, 9, 65, 67, 71, 4, 4, + 22, 0, 0, 0, 67, 93, 97, 4, 0, 67, 52, 7, 69, + 97, 79, 82, 2, 70, 79, 72, 85, 0, 79, 77, 74, + 93, 94, 94, 95, 21, 64, 6, 81, 64, 79, 72, 74, + 72, 86, 78, 92, 14, 73, 0, 86, 80, 67, 71, 1, + 7, 2, 0, 14, 11, 75, 64, 1, 65, 2, 74, 12, 64, + 11, 19, 6, 17, 17, 11, 71, 11, 1, 68, 2, 86, + 85, 73, 78, 68, 73, 70, 7, 68, 70, 64, 3, 71, + 72, 65, 90, 88, 73, 95, 68, 75, 8, 65, 72, 17, + 1, 65, 73, 18, 72, 82, 1, 93, 21, 28, 24, 23, + 28, 22, 9, 24, 24, 68, 7, 11, 4, 1, 73, 4, 64, + 65, 2, 66, 73, 1, 66, 86, 73, 72, 80, 75, 89, + 37, 42, 35, 36, 34, 29, 26, 29, 21, 14, 17, 8, + 65, 67, 88, 17, 13, 67, 15, 6, 5, 0, 67, 71, + 73, 77, 90, 72, 84, 96, 89, 100, 65, 32, 22, + 15, 5, 5, 64, 68, 72, 75, 5, 45, 30, 23, 17, + 27, 9, 3, 66, 68, 71, 35, 21, 12, 5, 11, 1, + 67, 72, 80, 77, 14, 4, 1, 67, 0, 73, 77, 83, + 64, 39, 22, 14, 7, 15, 2, 65, 67, 72, 62, 82, + 73, 65, 66, 69, 1, 7, 8, 66, 7, 12, 13, 77, + 71, 73, 2, 14, 1, 64, 8, 13, 18, 71, 0, 13, + 14, 79, 75, 79, 83, 77, 68, 75, 71, 72, 69, + 65, 73, 71, 70, 65, 75, 74, 81, 86, 70, 98, + 76, 65, 70, 8, 69, 65, 15, 67, 69, 66, 11, 74, + 72, 91, 31, 34, 35, 28, 19, 30, 26, 21, 19, + 18, 17, 13, 68, 69, 76, 4, 6, 65, 81, 67, 68, + 74, 74, 75, 73, 75, 88, 84, 88, 35, 34, 33, + 29, 18, 22, 19, 8, 13, 7, 6, 68, 70, 75, 80, + 16, 18, 68, 16, 17, 7, 1, 1, 64, 67, 66, 71, + 79, 81, 85, 89, 99, 75, 85, 93, 90, 77, 82, + 65, 65, 64, 38, 9, 8, 68, 18, 49, 36, 55, 9, + 36, 31, 8, 71, 80, 84, 111, 111, 115, 69, 42, + 28, 19, 9, 12, 2, 65, 68, 76, 81, 74, 0, 69, + 7, 8, 0, 2, 8, 11, 12, 6, 15, 14, 1, 37, 32, + 22, 15, 10, 4, 81, 86, 91 }, + + { + + 42, + 6, 79, 42, 6, 79, 76, 1, 21, 11, 0, 74, 20, + 25, 53, 14, 13, 66, 9, 18, 0, 70, 65, 80, 96, + 4, 11, 114, 119, 120, 20, 67, 68, 9, 18, 0, + 75, 64, 13, 2, 0, 70, 76, 65, 79, 76, 91, 5, + 70, 75, 0, 76, 75, 88, 9, 64, 66, 70, 4, 4, + 22, 0, 0, 0, 66, 93, 97, 4, 64, 67, 52, 7, 69, + 96, 78, 82, 2, 68, 78, 70, 83, 1, 78, 75, 72, + 92, 93, 93, 95, 22, 64, 7, 80, 64, 78, 71, 72, + 72, 86, 78, 90, 15, 72, 0, 85, 80, 67, 71, 2, + 8, 3, 1, 14, 11, 75, 65, 1, 65, 2, 74, 12, 64, + 10, 19, 6, 17, 17, 10, 73, 11, 1, 69, 1, 87, + 84, 72, 77, 67, 72, 69, 8, 67, 70, 0, 4, 71, + 72, 64, 91, 87, 72, 95, 67, 75, 8, 65, 73, 18, + 1, 65, 75, 19, 73, 83, 1, 93, 20, 27, 24, 22, + 27, 21, 8, 24, 24, 69, 6, 11, 4, 1, 73, 4, 64, + 66, 2, 67, 74, 1, 67, 88, 74, 73, 81, 76, 89, + 35, 41, 33, 34, 33, 27, 23, 27, 19, 12, 15, 6, + 68, 69, 91, 15, 12, 69, 12, 4, 3, 65, 70, 73, + 76, 79, 92, 73, 85, 98, 89, 100, 65, 32, 23, + 15, 5, 5, 64, 68, 72, 74, 6, 46, 30, 23, 17, + 28, 10, 4, 66, 67, 70, 36, 22, 12, 6, 12, 2, + 67, 71, 79, 77, 16, 4, 1, 66, 1, 72, 77, 82, + 0, 40, 23, 14, 7, 16, 3, 64, 66, 71, 62, 82, + 73, 64, 66, 69, 1, 7, 8, 65, 7, 13, 14, 77, + 71, 73, 1, 14, 0, 65, 7, 13, 18, 72, 64, 12, + 14, 80, 76, 80, 82, 77, 67, 75, 70, 72, 68, + 64, 73, 71, 70, 65, 76, 74, 81, 86, 69, 98, + 76, 64, 70, 8, 69, 65, 16, 67, 69, 66, 12, 74, + 73, 91, 30, 34, 35, 28, 18, 29, 25, 20, 19, + 17, 16, 12, 69, 70, 77, 3, 4, 67, 83, 68, 69, + 75, 75, 75, 73, 74, 88, 85, 87, 33, 32, 31, + 26, 16, 20, 17, 6, 11, 5, 4, 70, 72, 76, 81, + 14, 16, 69, 14, 15, 5, 64, 64, 66, 69, 68, 73, + 81, 83, 87, 91, 100, 77, 87, 95, 89, 75, 81, + 65, 64, 0, 40, 10, 9, 68, 19, 51, 37, 57, 9, + 35, 29, 6, 74, 82, 87, 113, 113, 116, 69, 42, + 28, 19, 9, 12, 2, 65, 68, 75, 80, 73, 1, 68, + 8, 9, 1, 3, 9, 12, 13, 7, 16, 15, 1, 35, 31, + 21, 14, 8, 2, 83, 88, 92 }, + + { + + 41, + 6, 79, 41, 6, 79, 74, 3, 22, 11, 64, 76, 18, + 24, 53, 14, 15, 66, 10, 19, 0, 71, 65, 81, 97, + 4, 9, 115, 120, 120, 23, 66, 68, 10, 19, 0, + 74, 0, 14, 2, 0, 69, 75, 66, 80, 76, 91, 5, + 70, 75, 0, 76, 75, 88, 10, 64, 66, 70, 5, 4, + 22, 0, 0, 0, 66, 93, 97, 5, 65, 67, 52, 7, 69, + 95, 77, 82, 3, 67, 76, 68, 82, 2, 76, 74, 70, + 91, 92, 92, 94, 23, 64, 8, 79, 64, 78, 71, 70, + 72, 85, 77, 89, 15, 72, 1, 83, 79, 66, 71, 2, + 8, 3, 2, 15, 12, 76, 65, 1, 65, 2, 74, 12, 65, + 10, 19, 5, 17, 17, 10, 75, 11, 0, 71, 0, 88, + 83, 71, 76, 66, 71, 69, 9, 67, 69, 1, 5, 71, + 72, 64, 92, 87, 71, 95, 67, 75, 9, 65, 74, 19, + 1, 65, 76, 20, 73, 84, 1, 94, 18, 26, 23, 21, + 26, 20, 8, 23, 23, 70, 5, 11, 4, 1, 74, 3, 65, + 67, 1, 68, 75, 0, 67, 90, 75, 73, 82, 77, 89, + 34, 39, 32, 32, 31, 25, 21, 25, 16, 9, 13, 3, + 70, 72, 93, 13, 10, 70, 10, 2, 0, 68, 72, 76, + 78, 81, 95, 74, 87, 99, 90, 100, 65, 33, 23, + 15, 5, 5, 64, 68, 72, 74, 6, 46, 30, 23, 17, + 29, 10, 4, 65, 67, 69, 37, 22, 13, 6, 13, 2, + 66, 71, 78, 76, 17, 5, 2, 66, 2, 71, 76, 81, + 0, 40, 23, 14, 7, 17, 3, 0, 65, 70, 62, 81, + 72, 64, 66, 69, 1, 7, 8, 65, 7, 13, 14, 77, + 71, 73, 1, 15, 64, 66, 6, 12, 18, 73, 65, 12, + 14, 80, 77, 80, 81, 76, 66, 74, 70, 71, 68, 0, + 73, 71, 70, 64, 76, 74, 81, 85, 68, 98, 76, + 64, 70, 9, 69, 65, 17, 67, 69, 66, 13, 75, 73, + 92, 29, 33, 34, 27, 17, 28, 24, 19, 18, 16, + 15, 11, 70, 71, 78, 1, 3, 68, 85, 70, 70, 76, + 75, 76, 73, 74, 88, 85, 86, 31, 30, 29, 24, + 13, 18, 15, 3, 9, 3, 2, 73, 74, 78, 82, 12, + 15, 71, 12, 13, 3, 66, 66, 68, 71, 70, 75, 84, + 85, 89, 93, 101, 79, 89, 96, 88, 74, 80, 64, + 0, 1, 41, 11, 10, 68, 20, 52, 39, 58, 10, 33, + 28, 3, 77, 85, 90, 116, 115, 117, 69, 42, 28, + 19, 9, 12, 2, 65, 68, 75, 79, 72, 2, 67, 9, 9, + 1, 4, 9, 12, 13, 7, 16, 15, 1, 34, 29, 19, 12, + 6, 0, 85, 90, 93 }, + + { + + 40, + 6, 79, 40, 6, 79, 72, 4, 22, 11, 64, 77, 17, + 23, 53, 14, 17, 66, 11, 20, 0, 72, 65, 82, 98, + 3, 7, 117, 121, 121, 26, 65, 68, 11, 20, 0, + 74, 1, 14, 1, 0, 69, 74, 66, 80, 76, 91, 5, + 70, 74, 0, 76, 75, 88, 10, 64, 66, 70, 5, 4, + 22, 0, 0, 0, 65, 93, 97, 5, 66, 67, 52, 7, 69, + 94, 76, 82, 3, 66, 74, 66, 80, 3, 74, 73, 68, + 90, 91, 91, 93, 24, 64, 9, 78, 64, 77, 70, 68, + 72, 85, 77, 88, 15, 72, 1, 82, 79, 65, 71, 2, + 8, 3, 3, 15, 12, 76, 65, 1, 65, 2, 74, 12, 65, + 9, 19, 4, 17, 17, 10, 77, 11, 0, 73, 64, 89, + 82, 70, 75, 65, 70, 68, 10, 66, 69, 2, 6, 71, + 72, 64, 93, 86, 70, 95, 67, 75, 10, 65, 75, + 20, 1, 65, 77, 21, 74, 85, 1, 95, 17, 25, 23, + 20, 25, 19, 7, 22, 23, 71, 4, 11, 4, 1, 74, 2, + 66, 68, 0, 69, 76, 64, 68, 92, 76, 74, 83, 78, + 89, 32, 38, 30, 30, 29, 23, 19, 23, 14, 7, 11, + 1, 73, 74, 96, 11, 8, 72, 8, 0, 65, 70, 74, + 78, 81, 83, 97, 75, 89, 100, 91, 100, 65, 33, + 23, 15, 5, 5, 64, 68, 72, 73, 6, 46, 30, 23, + 17, 30, 11, 5, 65, 66, 68, 38, 23, 13, 6, 14, + 3, 66, 70, 77, 75, 18, 6, 2, 66, 3, 70, 75, + 80, 1, 40, 23, 14, 7, 18, 4, 1, 64, 69, 62, + 81, 72, 0, 66, 69, 1, 7, 8, 65, 7, 13, 15, 77, + 71, 73, 0, 15, 65, 67, 5, 11, 18, 74, 66, 12, + 14, 81, 78, 81, 80, 75, 65, 74, 69, 71, 67, 1, + 73, 71, 70, 64, 77, 74, 81, 85, 67, 98, 76, + 64, 70, 10, 69, 65, 18, 67, 69, 66, 14, 76, + 73, 93, 28, 33, 34, 26, 16, 27, 23, 18, 17, + 15, 14, 10, 71, 72, 79, 0, 2, 70, 87, 71, 71, + 77, 76, 76, 73, 74, 88, 86, 85, 29, 28, 27, + 22, 10, 16, 13, 1, 7, 1, 0, 75, 76, 79, 83, + 10, 13, 72, 10, 11, 1, 68, 68, 70, 73, 72, 77, + 86, 87, 91, 95, 102, 81, 91, 98, 87, 73, 79, + 0, 1, 2, 43, 12, 11, 68, 21, 54, 40, 60, 11, + 32, 26, 1, 80, 88, 93, 119, 117, 118, 69, 42, + 28, 19, 9, 12, 2, 65, 68, 74, 78, 71, 3, 66, + 10, 10, 2, 5, 10, 13, 14, 7, 17, 15, 1, 33, + 28, 17, 10, 4, 65, 87, 92, 94 }, + + { + + 38, + 5, 80, 38, 5, 80, 71, 5, 22, 11, 65, 79, 15, + 21, 52, 14, 19, 67, 11, 20, 64, 73, 65, 84, + 100, 2, 5, 119, 122, 122, 28, 64, 69, 11, 20, + 64, 74, 2, 14, 0, 0, 69, 74, 67, 81, 76, 92, + 5, 70, 74, 64, 77, 75, 88, 10, 64, 66, 70, 5, + 3, 22, 0, 0, 0, 65, 94, 97, 5, 67, 68, 52, 6, + 69, 93, 76, 82, 3, 65, 73, 65, 79, 4, 73, 72, + 67, 89, 91, 90, 93, 24, 64, 9, 78, 64, 77, 70, + 67, 72, 85, 77, 87, 15, 72, 1, 81, 79, 65, 71, + 2, 8, 3, 3, 15, 12, 77, 66, 1, 66, 2, 74, 11, + 66, 8, 19, 3, 16, 17, 9, 79, 10, 64, 75, 65, + 90, 82, 70, 75, 65, 70, 68, 11, 66, 69, 2, 7, + 72, 72, 64, 95, 86, 70, 95, 67, 76, 10, 65, + 76, 20, 1, 65, 79, 21, 75, 86, 1, 96, 15, 24, + 22, 19, 24, 18, 6, 21, 22, 73, 3, 10, 3, 1, + 75, 1, 67, 69, 64, 70, 77, 65, 69, 94, 78, 75, + 85, 80, 89, 30, 36, 28, 28, 27, 20, 16, 20, + 11, 4, 8, 65, 76, 77, 99, 9, 6, 74, 5, 66, 68, + 73, 77, 81, 84, 86, 100, 76, 91, 102, 92, 101, + 65, 33, 23, 15, 5, 5, 65, 68, 72, 73, 6, 46, + 30, 23, 17, 31, 11, 5, 65, 66, 68, 38, 23, 13, + 6, 14, 3, 66, 70, 76, 75, 19, 6, 2, 66, 3, 70, + 75, 79, 1, 40, 23, 14, 7, 18, 4, 1, 64, 69, + 62, 81, 72, 0, 66, 69, 1, 7, 8, 65, 7, 13, 15, + 77, 71, 74, 64, 15, 66, 68, 4, 10, 17, 76, 68, + 11, 13, 82, 80, 82, 80, 75, 64, 74, 69, 71, + 67, 1, 74, 71, 70, 64, 78, 74, 81, 85, 67, 99, + 76, 64, 70, 10, 70, 65, 18, 68, 70, 66, 14, + 77, 74, 94, 27, 32, 33, 25, 14, 26, 22, 17, + 16, 14, 13, 9, 72, 74, 81, 65, 0, 72, 89, 73, + 73, 78, 77, 77, 73, 74, 88, 87, 85, 26, 25, + 25, 19, 7, 13, 10, 65, 4, 65, 66, 78, 79, 81, + 84, 8, 11, 74, 8, 8, 65, 71, 71, 73, 75, 75, + 80, 89, 89, 94, 97, 104, 83, 93, 100, 86, 72, + 78, 0, 1, 2, 44, 12, 11, 68, 21, 55, 41, 61, + 11, 30, 24, 65, 84, 91, 96, 122, 120, 120, 69, + 42, 27, 18, 9, 12, 2, 66, 68, 74, 78, 71, 3, + 66, 11, 10, 2, 5, 10, 13, 14, 7, 17, 15, 0, + 31, 26, 15, 8, 2, 67, 90, 94, 95 }, + + { + + 37, + 5, 80, 37, 5, 80, 69, 7, 23, 12, 65, 80, 14, + 20, 52, 14, 22, 67, 12, 21, 64, 73, 64, 85, + 101, 2, 4, 120, 123, 122, 31, 1, 69, 12, 21, + 64, 73, 4, 15, 0, 1, 68, 73, 67, 81, 75, 92, + 5, 69, 73, 64, 77, 74, 88, 11, 0, 65, 69, 6, + 3, 22, 0, 0, 0, 64, 94, 97, 6, 67, 68, 52, 6, + 69, 91, 75, 82, 4, 0, 71, 0, 77, 6, 71, 70, + 65, 87, 90, 89, 92, 25, 0, 10, 77, 0, 76, 69, + 65, 71, 84, 76, 85, 16, 71, 2, 79, 78, 64, 70, + 3, 9, 4, 4, 16, 13, 77, 66, 2, 66, 2, 73, 11, + 66, 8, 19, 3, 16, 17, 9, 80, 10, 64, 76, 66, + 90, 81, 69, 74, 64, 69, 67, 12, 65, 68, 3, 9, + 72, 72, 0, 96, 85, 69, 95, 66, 76, 11, 64, 76, + 21, 1, 65, 80, 22, 75, 87, 1, 96, 14, 24, 22, + 19, 24, 18, 6, 21, 22, 74, 3, 10, 3, 1, 75, 1, + 67, 69, 64, 70, 78, 65, 69, 95, 79, 75, 86, + 81, 89, 29, 35, 27, 27, 26, 18, 14, 18, 9, 2, + 6, 67, 78, 79, 101, 8, 5, 75, 3, 68, 70, 75, + 79, 83, 86, 88, 102, 76, 92, 103, 92, 101, 64, + 34, 24, 16, 6, 5, 65, 67, 71, 72, 7, 47, 31, + 24, 17, 32, 12, 6, 64, 65, 67, 39, 24, 14, 7, + 15, 4, 65, 69, 74, 74, 21, 7, 3, 65, 4, 69, + 74, 77, 2, 41, 24, 15, 8, 19, 5, 2, 0, 68, 62, + 80, 71, 1, 66, 68, 1, 8, 9, 64, 8, 14, 16, 76, + 71, 74, 64, 16, 66, 68, 3, 10, 17, 77, 69, 11, + 13, 82, 81, 82, 79, 74, 0, 73, 68, 70, 66, 2, + 74, 70, 69, 0, 78, 73, 80, 84, 66, 99, 76, 0, + 70, 11, 70, 65, 19, 68, 70, 65, 15, 77, 74, + 94, 27, 32, 33, 25, 13, 26, 22, 17, 16, 14, + 13, 9, 72, 75, 82, 66, 64, 73, 90, 74, 74, 78, + 77, 77, 72, 73, 87, 87, 84, 24, 23, 23, 17, 5, + 11, 8, 67, 2, 67, 68, 80, 81, 82, 84, 7, 10, + 75, 7, 6, 67, 73, 73, 75, 77, 77, 82, 91, 90, + 96, 98, 105, 84, 94, 101, 84, 70, 76, 1, 2, 3, + 46, 13, 12, 68, 22, 57, 43, 62, 12, 29, 23, + 67, 87, 93, 98, 124, 122, 121, 68, 43, 27, 18, + 9, 13, 2, 66, 68, 73, 77, 70, 4, 65, 13, 11, + 3, 6, 11, 14, 15, 8, 18, 16, 0, 30, 25, 14, 7, + 1, 68, 92, 95, 95 }, + + { + + 36, + 5, 80, 36, 5, 80, 67, 8, 23, 12, 65, 81, 13, + 19, 52, 14, 24, 67, 13, 22, 64, 74, 64, 86, + 102, 1, 2, 122, 124, 123, 34, 2, 69, 13, 22, + 64, 73, 5, 15, 64, 1, 68, 72, 67, 81, 75, 92, + 5, 69, 72, 64, 77, 74, 88, 11, 0, 65, 69, 6, + 3, 22, 0, 0, 0, 0, 94, 97, 6, 68, 68, 52, 6, + 69, 90, 74, 82, 4, 1, 69, 2, 76, 7, 69, 69, 0, + 86, 89, 88, 91, 26, 0, 11, 76, 0, 76, 68, 0, + 71, 84, 76, 84, 16, 71, 2, 78, 78, 0, 70, 3, + 9, 4, 5, 16, 13, 78, 66, 2, 66, 2, 73, 11, 66, + 7, 19, 2, 16, 17, 9, 82, 10, 64, 78, 67, 91, + 80, 68, 73, 0, 68, 66, 13, 64, 68, 4, 10, 72, + 72, 0, 97, 85, 68, 95, 66, 76, 12, 64, 77, 22, + 1, 65, 81, 23, 76, 88, 1, 97, 12, 23, 21, 18, + 23, 17, 5, 20, 22, 75, 2, 10, 3, 1, 75, 0, 68, + 70, 65, 71, 79, 66, 70, 97, 80, 76, 87, 82, + 89, 27, 34, 25, 25, 24, 16, 12, 16, 6, 0, 4, + 70, 81, 81, 104, 6, 3, 77, 1, 70, 72, 77, 81, + 85, 89, 90, 104, 77, 94, 104, 93, 101, 64, 34, + 24, 16, 6, 5, 65, 67, 71, 71, 7, 47, 31, 24, + 17, 33, 12, 7, 64, 64, 66, 40, 25, 14, 7, 16, + 4, 65, 68, 73, 73, 22, 8, 3, 65, 5, 68, 73, + 76, 2, 41, 24, 15, 8, 20, 6, 3, 1, 67, 62, 80, + 71, 1, 66, 68, 1, 8, 9, 64, 8, 14, 17, 76, 71, + 74, 65, 16, 67, 69, 2, 9, 17, 78, 70, 11, 13, + 83, 82, 83, 78, 73, 1, 73, 68, 70, 65, 3, 74, + 70, 69, 0, 79, 73, 80, 84, 65, 99, 76, 0, 70, + 12, 70, 65, 20, 68, 70, 65, 16, 78, 74, 95, + 26, 32, 33, 24, 12, 25, 21, 16, 15, 13, 12, 8, + 73, 76, 83, 68, 65, 75, 92, 75, 75, 79, 78, + 77, 72, 73, 87, 88, 83, 22, 21, 21, 15, 2, 9, + 6, 70, 0, 69, 70, 82, 83, 83, 85, 5, 8, 76, 5, + 4, 69, 75, 75, 77, 79, 79, 84, 93, 92, 98, + 100, 106, 86, 96, 103, 83, 69, 75, 2, 3, 4, + 48, 14, 13, 68, 23, 58, 44, 62, 13, 28, 21, + 70, 90, 96, 101, 126, 124, 122, 68, 43, 27, + 18, 9, 13, 2, 66, 68, 72, 76, 69, 5, 64, 14, + 12, 4, 7, 12, 15, 16, 8, 19, 16, 0, 29, 23, + 12, 5, 64, 70, 94, 97, 96 }, + + { + + 35, + 5, 80, 35, 5, 80, 65, 10, 24, 12, 66, 83, 11, + 18, 52, 14, 26, 67, 14, 23, 64, 75, 64, 87, + 103, 1, 0, 123, 125, 123, 37, 3, 69, 14, 23, + 64, 72, 6, 16, 64, 1, 67, 71, 68, 82, 75, 92, + 5, 69, 72, 64, 77, 74, 88, 12, 0, 65, 69, 7, + 3, 22, 0, 0, 0, 0, 94, 97, 7, 69, 68, 52, 6, + 69, 89, 73, 82, 5, 2, 67, 4, 74, 8, 67, 68, 2, + 85, 88, 87, 90, 27, 0, 12, 75, 0, 75, 68, 2, + 71, 83, 75, 83, 16, 71, 3, 76, 77, 1, 70, 3, + 9, 4, 6, 17, 14, 78, 66, 2, 66, 2, 73, 11, 67, + 7, 19, 1, 16, 17, 9, 84, 10, 65, 80, 68, 92, + 79, 67, 72, 1, 67, 66, 14, 64, 67, 5, 11, 72, + 72, 0, 98, 84, 67, 95, 66, 76, 13, 64, 78, 23, + 1, 65, 82, 24, 76, 89, 1, 98, 11, 22, 21, 17, + 22, 16, 5, 19, 21, 76, 1, 10, 3, 1, 76, 64, + 69, 71, 66, 72, 80, 67, 70, 99, 81, 76, 88, + 83, 89, 26, 32, 24, 23, 22, 14, 10, 14, 4, 66, + 2, 72, 83, 84, 106, 4, 1, 78, 64, 72, 75, 80, + 83, 88, 91, 92, 107, 78, 96, 105, 94, 101, 64, + 35, 24, 16, 6, 5, 65, 67, 71, 71, 7, 47, 31, + 24, 17, 34, 13, 7, 0, 64, 65, 41, 25, 15, 7, + 17, 5, 64, 68, 72, 72, 23, 9, 4, 65, 6, 67, + 72, 75, 3, 41, 24, 15, 8, 21, 6, 4, 2, 66, 62, + 79, 70, 2, 66, 68, 1, 8, 9, 64, 8, 14, 17, 76, + 71, 74, 65, 17, 68, 70, 1, 8, 17, 79, 71, 11, + 13, 83, 83, 83, 77, 72, 2, 72, 67, 69, 65, 4, + 74, 70, 69, 1, 79, 73, 80, 83, 64, 99, 76, 0, + 70, 13, 70, 65, 21, 68, 70, 65, 17, 79, 74, + 96, 25, 31, 32, 23, 11, 24, 20, 15, 14, 12, + 11, 7, 74, 77, 84, 69, 66, 76, 94, 77, 76, 80, + 78, 78, 72, 73, 87, 88, 82, 20, 19, 19, 13, + 64, 7, 4, 72, 65, 71, 72, 85, 85, 85, 86, 3, + 7, 78, 3, 2, 71, 77, 77, 79, 81, 81, 86, 96, + 94, 100, 102, 107, 88, 98, 104, 82, 68, 74, 3, + 4, 5, 49, 15, 14, 68, 24, 60, 46, 62, 14, 26, + 20, 72, 93, 99, 104, 126, 126, 123, 68, 43, + 27, 18, 9, 13, 2, 66, 68, 72, 75, 68, 6, 0, + 15, 12, 4, 8, 12, 15, 16, 8, 19, 16, 0, 28, + 22, 10, 3, 66, 72, 96, 99, 97 }, + + { + + 33, + 5, 80, 33, 5, 80, 64, 11, 24, 12, 66, 84, 10, + 16, 52, 14, 29, 68, 15, 23, 64, 76, 64, 88, + 104, 0, 65, 125, 126, 124, 40, 4, 69, 15, 23, + 64, 72, 7, 16, 65, 1, 67, 71, 68, 82, 74, 92, + 5, 69, 71, 65, 78, 74, 88, 12, 1, 65, 68, 7, + 3, 22, 0, 0, 0, 1, 95, 97, 7, 70, 68, 52, 6, + 69, 88, 72, 82, 5, 4, 66, 6, 73, 9, 66, 66, 4, + 84, 88, 86, 90, 27, 0, 13, 74, 0, 75, 67, 4, + 71, 83, 75, 82, 16, 70, 3, 75, 77, 1, 70, 4, + 9, 4, 6, 17, 14, 79, 67, 2, 66, 2, 73, 11, 67, + 6, 19, 1, 16, 17, 8, 86, 10, 65, 82, 69, 93, + 78, 66, 71, 2, 67, 65, 15, 0, 67, 6, 12, 72, + 72, 1, 99, 84, 66, 95, 66, 76, 13, 64, 79, 24, + 1, 65, 84, 25, 77, 90, 1, 99, 9, 21, 20, 16, + 21, 15, 4, 18, 21, 78, 0, 9, 3, 1, 76, 65, 69, + 72, 66, 73, 81, 68, 71, 101, 82, 77, 89, 84, + 89, 24, 31, 22, 21, 20, 12, 7, 12, 1, 68, 0, + 75, 86, 86, 109, 2, 0, 80, 67, 74, 77, 82, 86, + 90, 94, 94, 109, 79, 97, 107, 95, 101, 64, 35, + 25, 16, 6, 5, 65, 67, 71, 70, 8, 48, 31, 24, + 17, 35, 13, 8, 0, 0, 65, 42, 26, 15, 7, 17, 5, + 64, 67, 71, 72, 24, 9, 4, 65, 7, 66, 72, 74, + 3, 42, 24, 15, 8, 22, 7, 4, 3, 65, 62, 79, 70, + 2, 66, 68, 1, 8, 9, 0, 8, 14, 18, 76, 71, 74, + 66, 17, 69, 71, 0, 7, 17, 81, 72, 10, 13, 84, + 84, 84, 77, 72, 3, 72, 67, 69, 64, 5, 75, 70, + 69, 1, 80, 73, 80, 83, 0, 99, 76, 1, 70, 13, + 70, 65, 22, 68, 71, 65, 18, 79, 75, 97, 24, + 31, 32, 22, 10, 23, 19, 14, 13, 11, 10, 6, 75, + 78, 85, 71, 68, 78, 96, 78, 77, 81, 79, 78, + 72, 73, 87, 89, 82, 17, 16, 17, 10, 67, 5, 2, + 75, 67, 73, 74, 87, 87, 86, 87, 1, 5, 79, 1, + 0, 73, 79, 80, 81, 83, 83, 88, 98, 96, 102, + 104, 108, 90, 100, 106, 81, 67, 73, 3, 5, 6, + 51, 16, 15, 68, 25, 61, 47, 62, 14, 25, 18, + 75, 96, 102, 107, 126, 126, 124, 68, 43, 27, + 18, 9, 13, 2, 66, 68, 71, 74, 67, 7, 0, 16, + 13, 5, 9, 13, 16, 17, 9, 20, 17, 0, 26, 20, 8, + 1, 68, 74, 98, 101, 98 }, + + { + + 32, + 5, 80, 32, 5, 80, 1, 13, 24, 12, 67, 86, 8, + 15, 52, 14, 31, 68, 16, 24, 64, 76, 0, 89, + 105, 0, 67, 126, 126, 124, 43, 6, 69, 16, 24, + 64, 72, 8, 16, 65, 1, 67, 70, 68, 83, 74, 92, + 5, 69, 70, 65, 78, 74, 88, 13, 1, 64, 68, 8, + 3, 22, 0, 0, 0, 1, 95, 97, 8, 71, 68, 52, 6, + 69, 87, 71, 82, 6, 5, 64, 8, 71, 10, 64, 65, + 6, 83, 87, 85, 89, 28, 0, 14, 73, 0, 74, 66, + 6, 71, 83, 74, 80, 17, 70, 4, 74, 76, 2, 70, + 4, 10, 5, 7, 18, 15, 79, 67, 2, 66, 2, 73, 11, + 68, 5, 19, 0, 16, 17, 8, 88, 10, 66, 83, 70, + 94, 77, 65, 70, 3, 66, 64, 16, 1, 66, 7, 13, + 72, 72, 1, 100, 83, 65, 95, 65, 76, 14, 64, + 80, 25, 1, 65, 85, 26, 77, 91, 1, 99, 8, 20, + 20, 15, 20, 14, 3, 18, 21, 79, 64, 9, 3, 1, + 77, 65, 70, 73, 67, 74, 82, 68, 72, 103, 83, + 78, 90, 85, 89, 22, 30, 20, 19, 19, 10, 5, 10, + 64, 70, 65, 77, 88, 88, 111, 0, 65, 82, 69, + 76, 79, 84, 88, 92, 97, 96, 112, 80, 99, 108, + 95, 101, 64, 35, 25, 16, 6, 5, 65, 67, 71, 70, + 8, 48, 31, 24, 17, 36, 14, 9, 0, 1, 64, 43, + 27, 15, 8, 18, 6, 0, 67, 70, 71, 26, 10, 4, + 64, 8, 65, 71, 73, 4, 42, 25, 15, 8, 23, 8, 5, + 4, 64, 62, 79, 70, 3, 66, 68, 1, 8, 9, 0, 8, + 15, 18, 76, 71, 74, 67, 18, 70, 72, 64, 7, 17, + 82, 73, 10, 13, 85, 85, 84, 76, 71, 4, 71, 66, + 68, 64, 6, 75, 70, 69, 1, 81, 73, 80, 82, 1, + 99, 76, 1, 70, 14, 70, 65, 23, 68, 71, 65, 19, + 80, 75, 97, 23, 31, 31, 22, 9, 22, 18, 13, 13, + 10, 9, 5, 76, 79, 86, 72, 69, 79, 98, 79, 78, + 82, 80, 79, 72, 72, 87, 89, 81, 15, 14, 15, 8, + 69, 3, 0, 77, 69, 75, 76, 89, 89, 88, 88, 64, + 3, 80, 64, 65, 75, 81, 82, 83, 85, 85, 90, + 101, 98, 104, 106, 109, 92, 102, 107, 80, 65, + 72, 4, 6, 7, 53, 17, 16, 68, 26, 62, 49, 62, + 15, 23, 16, 77, 99, 104, 110, 126, 126, 125, + 68, 43, 27, 18, 9, 13, 2, 66, 68, 71, 73, 66, + 8, 1, 17, 14, 5, 10, 14, 17, 18, 9, 20, 17, 0, + 25, 19, 7, 0, 70, 76, 100, 103, 99 }, + + { + + 31, + 5, 81, 31, 5, 81, 3, 14, 25, 12, 67, 87, 7, + 14, 52, 14, 33, 68, 16, 25, 64, 77, 0, 90, + 106, 64, 68, 126, 126, 125, 46, 7, 69, 16, 25, + 64, 71, 9, 17, 66, 2, 66, 69, 69, 83, 74, 92, + 5, 68, 70, 65, 78, 73, 88, 13, 1, 64, 68, 8, + 3, 22, 0, 0, 0, 2, 95, 97, 8, 71, 69, 52, 6, + 69, 86, 71, 82, 6, 6, 1, 10, 70, 11, 1, 64, 8, + 82, 86, 84, 88, 29, 0, 15, 73, 1, 74, 66, 8, + 71, 82, 74, 79, 17, 70, 4, 72, 76, 3, 69, 4, + 10, 5, 8, 18, 15, 80, 67, 2, 66, 2, 73, 11, + 68, 5, 19, 64, 16, 17, 8, 90, 10, 66, 85, 71, + 95, 77, 64, 70, 3, 65, 64, 17, 1, 66, 7, 15, + 72, 72, 1, 101, 83, 64, 95, 65, 76, 15, 0, 81, + 25, 1, 65, 86, 27, 78, 92, 1, 100, 6, 19, 19, + 15, 19, 14, 3, 17, 20, 80, 65, 9, 3, 1, 77, + 66, 71, 74, 68, 74, 83, 69, 72, 105, 84, 78, + 91, 86, 89, 21, 28, 19, 17, 17, 8, 3, 8, 67, + 73, 67, 80, 91, 91, 114, 65, 67, 83, 71, 79, + 82, 87, 90, 95, 99, 99, 114, 81, 101, 109, 96, + 101, 0, 36, 25, 17, 6, 5, 65, 67, 71, 69, 8, + 48, 32, 24, 17, 37, 14, 9, 1, 1, 0, 44, 27, + 16, 8, 19, 6, 0, 66, 69, 70, 27, 11, 5, 64, 8, + 65, 70, 71, 4, 42, 25, 15, 9, 23, 8, 6, 4, 0, + 62, 78, 69, 3, 66, 68, 1, 8, 9, 0, 9, 15, 19, + 76, 71, 75, 67, 18, 71, 73, 65, 6, 17, 83, 74, + 10, 13, 85, 86, 85, 75, 70, 5, 71, 66, 68, 0, + 6, 75, 69, 68, 2, 81, 73, 80, 82, 2, 99, 76, + 1, 70, 15, 70, 65, 24, 69, 71, 65, 19, 81, 75, + 98, 22, 30, 31, 21, 8, 22, 18, 12, 12, 10, 8, + 4, 77, 80, 87, 74, 70, 81, 100, 81, 80, 83, + 80, 79, 72, 72, 86, 90, 80, 13, 12, 13, 6, 72, + 1, 65, 80, 71, 78, 78, 92, 91, 89, 88, 65, 2, + 82, 66, 68, 77, 83, 84, 85, 87, 88, 92, 103, + 100, 106, 107, 111, 94, 104, 109, 79, 64, 71, + 5, 7, 8, 54, 18, 17, 68, 27, 62, 50, 62, 16, + 22, 15, 80, 102, 107, 112, 126, 126, 126, 67, + 43, 27, 18, 9, 13, 2, 66, 68, 70, 72, 66, 9, + 2, 18, 14, 6, 11, 14, 17, 18, 9, 21, 17, 0, + 24, 17, 5, 65, 71, 77, 103, 104, 100 }, + + { + + 30, + 5, 81, 30, 5, 81, 5, 16, 25, 12, 68, 89, 5, + 12, 52, 14, 36, 69, 17, 25, 64, 78, 0, 91, + 107, 64, 70, 126, 126, 125, 49, 8, 69, 17, 25, + 64, 71, 10, 17, 66, 2, 66, 69, 69, 84, 73, 92, + 5, 68, 69, 66, 78, 73, 88, 14, 2, 64, 67, 9, + 3, 22, 0, 0, 0, 2, 95, 97, 9, 72, 69, 52, 6, + 69, 85, 70, 82, 7, 8, 2, 12, 68, 12, 2, 1, 10, + 81, 85, 83, 88, 30, 0, 16, 72, 1, 73, 65, 10, + 71, 82, 73, 78, 17, 69, 5, 71, 75, 3, 69, 5, + 10, 5, 9, 19, 16, 80, 68, 2, 66, 2, 73, 11, + 69, 4, 19, 64, 16, 17, 7, 92, 10, 67, 87, 72, + 96, 76, 0, 69, 4, 64, 0, 18, 2, 65, 8, 16, 72, + 72, 2, 102, 82, 0, 95, 65, 76, 15, 0, 82, 26, + 1, 65, 88, 28, 78, 93, 1, 101, 5, 18, 19, 14, + 18, 13, 2, 16, 20, 81, 66, 9, 3, 1, 78, 67, + 71, 75, 68, 75, 84, 70, 73, 107, 85, 79, 92, + 87, 89, 19, 27, 17, 15, 15, 6, 0, 6, 69, 75, + 69, 82, 93, 93, 116, 67, 68, 85, 74, 81, 84, + 89, 93, 97, 102, 101, 117, 82, 102, 111, 97, + 101, 0, 36, 26, 17, 6, 5, 65, 67, 71, 69, 9, + 49, 32, 24, 17, 38, 15, 10, 1, 2, 1, 45, 28, + 16, 8, 20, 7, 1, 66, 68, 70, 28, 11, 5, 64, 9, + 64, 70, 70, 5, 43, 25, 15, 9, 24, 9, 7, 5, 1, + 62, 78, 69, 4, 66, 68, 1, 8, 9, 1, 9, 15, 19, + 76, 71, 75, 68, 19, 72, 74, 66, 5, 17, 84, 75, + 9, 13, 86, 87, 85, 74, 70, 6, 70, 65, 67, 0, + 7, 75, 69, 68, 2, 82, 73, 80, 81, 3, 99, 76, + 2, 70, 15, 70, 65, 25, 69, 71, 65, 20, 81, 76, + 99, 21, 30, 30, 20, 7, 21, 17, 11, 11, 9, 7, + 3, 78, 81, 88, 75, 72, 82, 102, 82, 81, 84, + 81, 80, 72, 72, 86, 90, 79, 11, 10, 11, 3, 75, + 64, 67, 82, 73, 80, 80, 94, 93, 91, 89, 67, 0, + 83, 68, 70, 79, 85, 86, 87, 89, 90, 94, 106, + 102, 108, 109, 112, 96, 106, 110, 78, 0, 70, + 5, 8, 9, 56, 19, 18, 68, 28, 62, 52, 62, 16, + 20, 13, 82, 105, 110, 115, 126, 126, 126, 67, + 43, 27, 18, 9, 13, 2, 66, 68, 70, 71, 65, 10, + 3, 19, 15, 6, 12, 15, 18, 19, 10, 21, 18, 0, + 22, 16, 3, 67, 73, 79, 105, 106, 101 }, + + { + + 28, + 4, 81, 28, 4, 81, 6, 17, 25, 12, 68, 90, 4, + 11, 52, 14, 38, 69, 18, 26, 64, 79, 0, 92, + 109, 65, 72, 126, 126, 126, 51, 9, 69, 18, 26, + 64, 71, 11, 17, 67, 2, 66, 68, 70, 84, 73, 93, + 5, 68, 69, 66, 79, 73, 88, 14, 2, 64, 67, 9, + 3, 22, 0, 0, 0, 3, 96, 97, 9, 73, 69, 52, 6, + 69, 84, 69, 82, 7, 9, 4, 14, 67, 13, 4, 2, 11, + 80, 85, 82, 87, 30, 0, 17, 71, 1, 73, 65, 11, + 71, 82, 73, 77, 17, 69, 5, 70, 75, 4, 69, 5, + 10, 5, 9, 19, 16, 81, 68, 2, 66, 2, 73, 11, + 69, 3, 19, 65, 16, 17, 7, 94, 10, 67, 89, 73, + 97, 75, 1, 68, 5, 64, 0, 19, 2, 65, 9, 17, 72, + 72, 2, 104, 82, 1, 95, 65, 77, 16, 0, 83, 27, + 1, 65, 89, 29, 79, 94, 1, 102, 3, 17, 18, 13, + 17, 12, 1, 15, 19, 83, 67, 8, 3, 1, 78, 68, + 72, 76, 69, 76, 85, 71, 74, 109, 87, 80, 93, + 88, 89, 17, 25, 15, 13, 13, 4, 65, 4, 72, 78, + 71, 85, 96, 96, 119, 69, 70, 87, 76, 83, 87, + 92, 95, 100, 105, 103, 119, 83, 104, 112, 98, + 102, 0, 36, 26, 17, 6, 5, 65, 67, 71, 68, 9, + 49, 32, 24, 17, 39, 15, 10, 1, 2, 1, 46, 28, + 16, 8, 20, 7, 1, 65, 67, 69, 29, 12, 5, 64, + 10, 0, 69, 69, 5, 43, 25, 15, 9, 25, 9, 7, 6, + 1, 62, 78, 69, 4, 66, 68, 1, 8, 9, 1, 9, 15, + 20, 76, 71, 75, 69, 19, 73, 75, 67, 4, 17, 86, + 77, 9, 13, 87, 88, 86, 74, 69, 7, 70, 65, 67, + 1, 8, 76, 69, 68, 2, 83, 73, 80, 81, 3, 100, + 76, 2, 70, 16, 70, 65, 25, 69, 72, 65, 21, 82, + 76, 100, 20, 29, 30, 19, 5, 20, 16, 10, 10, 8, + 6, 2, 79, 82, 89, 77, 73, 84, 104, 84, 82, 85, + 82, 80, 72, 72, 86, 91, 79, 8, 7, 9, 1, 78, + 67, 70, 85, 75, 82, 82, 97, 95, 92, 90, 69, + 65, 85, 70, 72, 82, 88, 89, 90, 91, 92, 97, + 108, 104, 111, 111, 113, 98, 108, 112, 77, 1, + 69, 6, 9, 9, 57, 20, 18, 68, 28, 62, 53, 62, + 17, 19, 11, 85, 108, 113, 118, 126, 126, 126, + 67, 43, 27, 18, 9, 13, 2, 66, 68, 69, 71, 64, + 11, 3, 20, 15, 7, 12, 15, 18, 19, 10, 22, 18, + 64, 21, 14, 1, 69, 75, 81, 107, 108, 102 }, + + { + + 27, + 4, 81, 27, 4, 81, 8, 18, 26, 12, 68, 91, 3, + 10, 52, 14, 40, 69, 19, 27, 64, 79, 1, 93, + 110, 66, 74, 126, 126, 126, 54, 11, 69, 19, + 27, 64, 70, 12, 18, 68, 2, 65, 67, 70, 84, 73, + 93, 5, 68, 68, 66, 79, 73, 88, 14, 2, 0, 67, + 9, 3, 22, 0, 0, 0, 4, 96, 97, 9, 74, 69, 52, + 6, 69, 83, 68, 82, 7, 10, 6, 16, 65, 15, 6, 3, + 13, 79, 84, 81, 86, 31, 1, 18, 70, 1, 72, 64, + 13, 71, 81, 73, 75, 18, 69, 5, 68, 75, 5, 69, + 5, 11, 6, 10, 19, 16, 81, 68, 3, 66, 2, 72, + 11, 69, 3, 19, 66, 16, 17, 7, 96, 10, 67, 90, + 74, 97, 74, 2, 67, 6, 0, 1, 20, 3, 65, 10, 18, + 72, 72, 2, 105, 81, 2, 95, 64, 77, 17, 0, 84, + 28, 1, 65, 90, 30, 80, 95, 1, 102, 2, 16, 18, + 12, 16, 11, 1, 15, 19, 84, 68, 8, 3, 1, 78, + 68, 73, 77, 70, 77, 86, 71, 74, 110, 88, 80, + 94, 89, 89, 16, 24, 14, 12, 12, 2, 67, 2, 74, + 80, 73, 87, 99, 98, 122, 70, 72, 88, 78, 85, + 89, 94, 97, 102, 107, 105, 121, 83, 106, 113, + 98, 102, 0, 37, 26, 17, 7, 5, 65, 66, 71, 67, + 9, 49, 32, 25, 17, 40, 16, 11, 2, 3, 2, 47, + 29, 17, 9, 21, 8, 1, 64, 66, 68, 31, 13, 6, 0, + 11, 1, 68, 68, 6, 43, 26, 16, 9, 26, 10, 8, 7, + 2, 62, 77, 68, 5, 66, 68, 1, 9, 10, 1, 9, 16, + 21, 76, 71, 75, 69, 19, 74, 75, 68, 4, 17, 87, + 78, 9, 13, 87, 89, 87, 73, 68, 8, 70, 64, 67, + 2, 9, 76, 69, 68, 3, 83, 73, 80, 81, 4, 100, + 76, 2, 70, 17, 70, 65, 26, 69, 72, 65, 22, 83, + 76, 100, 19, 29, 30, 19, 4, 19, 15, 9, 10, 7, + 5, 2, 79, 83, 90, 78, 74, 86, 106, 85, 83, 85, + 82, 80, 71, 71, 86, 92, 78, 6, 5, 7, 64, 80, + 69, 72, 87, 77, 84, 84, 99, 97, 93, 91, 71, + 66, 86, 72, 74, 84, 90, 91, 92, 93, 94, 99, + 110, 105, 113, 113, 114, 100, 110, 114, 76, 3, + 67, 7, 10, 10, 59, 21, 19, 68, 29, 62, 54, 62, + 18, 18, 10, 87, 111, 115, 121, 126, 126, 126, + 67, 43, 27, 18, 9, 14, 2, 66, 68, 68, 70, 0, + 12, 4, 22, 16, 8, 13, 16, 19, 20, 10, 23, 18, + 64, 20, 13, 0, 70, 77, 83, 109, 110, 102 }, + + { + + 26, + 4, 81, 26, 4, 81, 10, 20, 26, 12, 69, 93, 1, + 8, 52, 14, 43, 70, 20, 27, 64, 80, 1, 94, 111, + 66, 76, 126, 126, 126, 57, 12, 69, 20, 27, 64, + 70, 13, 18, 68, 2, 65, 67, 70, 85, 72, 93, 5, + 68, 67, 67, 79, 73, 88, 15, 3, 0, 66, 10, 3, + 22, 0, 0, 0, 4, 96, 97, 10, 75, 69, 52, 6, 69, + 82, 67, 82, 8, 12, 7, 18, 64, 16, 7, 5, 15, + 78, 83, 80, 86, 32, 1, 19, 69, 1, 72, 0, 15, + 71, 81, 72, 74, 18, 68, 6, 67, 74, 5, 69, 6, + 11, 6, 11, 20, 17, 82, 69, 3, 66, 2, 72, 11, + 70, 2, 19, 66, 16, 17, 6, 98, 10, 68, 92, 75, + 98, 73, 3, 66, 7, 1, 2, 21, 4, 64, 11, 19, 72, + 72, 3, 106, 81, 3, 95, 64, 77, 17, 0, 85, 29, + 1, 65, 92, 31, 80, 96, 1, 103, 0, 15, 17, 11, + 15, 10, 0, 14, 19, 85, 69, 8, 3, 1, 79, 69, + 73, 78, 70, 78, 87, 72, 75, 112, 89, 81, 95, + 90, 89, 14, 23, 12, 10, 10, 0, 70, 0, 77, 82, + 75, 90, 101, 100, 124, 72, 73, 90, 81, 87, 91, + 96, 100, 104, 110, 107, 124, 84, 107, 115, 99, + 102, 0, 37, 27, 17, 7, 5, 65, 66, 71, 67, 10, + 50, 32, 25, 17, 41, 16, 12, 2, 4, 3, 48, 30, + 17, 9, 22, 8, 2, 64, 65, 68, 32, 13, 6, 0, 12, + 2, 68, 67, 6, 44, 26, 16, 9, 27, 11, 9, 8, 3, + 62, 77, 68, 5, 66, 68, 1, 9, 10, 2, 9, 16, 21, + 76, 71, 75, 70, 20, 75, 76, 69, 3, 17, 88, 79, + 8, 13, 88, 90, 87, 72, 68, 9, 69, 64, 66, 2, + 10, 76, 69, 68, 3, 84, 73, 80, 80, 5, 100, 76, + 3, 70, 17, 70, 65, 27, 69, 72, 65, 23, 83, 77, + 101, 18, 29, 29, 18, 3, 18, 14, 8, 9, 6, 4, 1, + 80, 84, 91, 80, 76, 87, 108, 86, 84, 86, 83, + 81, 71, 71, 86, 92, 77, 4, 3, 5, 67, 83, 71, + 74, 90, 79, 86, 86, 101, 99, 95, 92, 73, 68, + 87, 74, 76, 86, 92, 93, 94, 95, 96, 101, 113, + 107, 115, 115, 115, 102, 112, 115, 75, 4, 66, + 7, 11, 11, 61, 22, 20, 68, 30, 62, 56, 62, 18, + 16, 8, 90, 114, 118, 124, 126, 126, 126, 67, + 43, 27, 18, 9, 14, 2, 66, 68, 68, 69, 1, 13, + 5, 23, 17, 8, 14, 17, 20, 21, 11, 23, 19, 64, + 18, 11, 65, 72, 79, 85, 111, 112, 103 }, + + { + + 25, + 4, 82, 25, 4, 82, 12, 21, 27, 12, 69, 94, 0, + 7, 52, 14, 45, 70, 20, 28, 64, 81, 1, 95, 112, + 67, 77, 126, 126, 126, 60, 13, 69, 20, 28, 64, + 69, 14, 19, 69, 3, 64, 66, 71, 85, 72, 93, 5, + 67, 67, 67, 79, 72, 88, 15, 3, 0, 66, 10, 3, + 22, 0, 0, 0, 5, 96, 97, 10, 75, 70, 52, 6, 69, + 81, 67, 82, 8, 13, 9, 20, 1, 17, 9, 6, 17, 77, + 82, 79, 85, 33, 1, 20, 69, 2, 71, 0, 17, 71, + 80, 72, 73, 18, 68, 6, 65, 74, 6, 68, 6, 11, + 6, 12, 20, 17, 82, 69, 3, 66, 2, 72, 11, 70, + 2, 19, 67, 16, 17, 6, 100, 10, 68, 94, 76, 99, + 73, 4, 66, 7, 2, 2, 22, 4, 64, 11, 21, 72, 72, + 3, 107, 80, 4, 95, 64, 77, 18, 1, 86, 29, 1, + 65, 93, 32, 81, 97, 1, 104, 64, 14, 17, 11, + 14, 10, 0, 13, 18, 86, 70, 8, 3, 1, 79, 70, + 74, 79, 71, 78, 88, 73, 75, 114, 90, 81, 96, + 91, 89, 13, 21, 11, 8, 8, 65, 72, 65, 79, 85, + 77, 92, 104, 103, 126, 74, 75, 91, 83, 90, 94, + 99, 102, 107, 112, 110, 126, 85, 109, 116, + 100, 102, 1, 38, 27, 18, 7, 5, 65, 66, 71, 66, + 10, 50, 33, 25, 17, 42, 17, 12, 3, 4, 4, 49, + 30, 18, 9, 23, 9, 2, 0, 64, 67, 33, 14, 7, 0, + 12, 2, 67, 65, 7, 44, 26, 16, 10, 27, 11, 10, + 8, 4, 62, 76, 67, 6, 66, 68, 1, 9, 10, 2, 10, + 16, 22, 76, 71, 76, 70, 20, 76, 77, 70, 2, 17, + 89, 80, 8, 13, 88, 91, 88, 71, 67, 10, 69, 0, + 66, 3, 10, 76, 68, 67, 4, 84, 73, 80, 80, 6, + 100, 76, 3, 70, 18, 70, 65, 28, 70, 72, 65, + 23, 84, 77, 102, 17, 28, 29, 17, 2, 18, 14, 7, + 8, 6, 3, 0, 81, 85, 92, 81, 77, 89, 110, 88, + 86, 87, 83, 81, 71, 71, 85, 93, 76, 2, 1, 3, + 69, 86, 73, 76, 92, 81, 89, 88, 104, 101, 96, + 92, 74, 69, 89, 76, 79, 88, 94, 95, 96, 97, + 99, 103, 115, 109, 117, 116, 117, 104, 114, + 117, 74, 5, 65, 8, 12, 12, 62, 23, 21, 68, 31, + 62, 57, 62, 19, 15, 7, 92, 117, 121, 126, 126, + 126, 126, 66, 43, 27, 18, 9, 14, 2, 66, 68, + 67, 68, 1, 14, 6, 24, 17, 9, 15, 17, 20, 21, + 11, 24, 19, 64, 17, 10, 67, 74, 80, 86, 114, + 113, 104 }, + + { + + 23, + 4, 82, 23, 4, 82, 13, 23, 27, 12, 70, 96, 65, + 6, 52, 14, 47, 70, 21, 29, 64, 82, 1, 96, 113, + 67, 79, 126, 126, 126, 62, 14, 69, 21, 29, 64, + 69, 15, 19, 69, 3, 64, 65, 71, 86, 72, 93, 5, + 67, 66, 67, 80, 72, 88, 16, 3, 0, 66, 11, 3, + 22, 0, 0, 0, 5, 97, 97, 11, 76, 70, 52, 6, 69, + 80, 66, 82, 9, 14, 11, 22, 2, 18, 11, 7, 19, + 76, 82, 78, 84, 33, 1, 21, 68, 2, 71, 1, 19, + 71, 80, 71, 72, 18, 68, 7, 64, 73, 7, 68, 6, + 11, 6, 12, 21, 18, 83, 69, 3, 66, 2, 72, 11, + 71, 1, 19, 68, 16, 17, 6, 102, 10, 69, 96, 77, + 100, 72, 5, 65, 8, 2, 3, 23, 5, 0, 12, 22, 72, + 72, 3, 108, 80, 5, 95, 64, 77, 19, 1, 87, 30, + 1, 65, 94, 33, 81, 98, 1, 105, 66, 13, 16, 10, + 13, 9, 64, 12, 18, 88, 71, 7, 3, 1, 80, 71, + 75, 80, 72, 79, 89, 74, 76, 116, 91, 82, 97, + 92, 89, 11, 20, 9, 6, 6, 67, 74, 67, 82, 87, + 79, 95, 106, 105, 126, 76, 77, 93, 85, 92, 96, + 101, 104, 109, 115, 112, 126, 86, 111, 117, + 101, 102, 1, 38, 27, 18, 7, 5, 65, 66, 71, 66, + 10, 50, 33, 25, 17, 43, 17, 13, 3, 5, 4, 50, + 31, 18, 9, 23, 9, 3, 0, 0, 66, 34, 15, 7, 0, + 13, 3, 66, 64, 7, 44, 26, 16, 10, 28, 12, 10, + 9, 5, 62, 76, 67, 6, 66, 68, 1, 9, 10, 2, 10, + 16, 22, 76, 71, 76, 71, 21, 77, 78, 71, 1, 17, + 91, 81, 8, 13, 89, 92, 88, 71, 66, 11, 68, 0, + 65, 3, 11, 77, 68, 67, 4, 85, 73, 80, 79, 7, + 100, 76, 3, 70, 19, 70, 65, 29, 70, 73, 65, + 24, 85, 77, 103, 16, 28, 28, 16, 1, 17, 13, 6, + 7, 5, 2, 64, 82, 86, 93, 83, 78, 90, 112, 89, + 87, 88, 84, 82, 71, 71, 85, 93, 76, 64, 65, 1, + 71, 89, 75, 78, 95, 83, 91, 90, 106, 103, 98, + 93, 76, 71, 90, 78, 81, 90, 96, 98, 98, 99, + 101, 105, 118, 111, 119, 118, 118, 106, 116, + 118, 73, 6, 64, 9, 13, 13, 62, 24, 22, 68, 32, + 62, 59, 62, 20, 13, 5, 95, 120, 124, 126, 126, + 126, 126, 66, 43, 27, 18, 9, 14, 2, 66, 68, + 67, 67, 2, 15, 6, 25, 18, 9, 16, 18, 21, 22, + 11, 24, 19, 64, 16, 8, 69, 76, 82, 88, 116, + 115, 105 }, + + { + + 22, + 4, 82, 22, 4, 82, 15, 24, 27, 12, 70, 97, 66, + 4, 52, 14, 50, 71, 22, 29, 64, 82, 2, 97, 114, + 68, 81, 126, 126, 126, 62, 16, 69, 22, 29, 64, + 69, 16, 19, 70, 3, 64, 65, 71, 86, 71, 93, 5, + 67, 65, 68, 80, 72, 88, 16, 4, 1, 65, 11, 3, + 22, 0, 0, 0, 6, 97, 97, 11, 77, 70, 52, 6, 69, + 79, 65, 82, 9, 16, 12, 24, 4, 19, 12, 9, 21, + 75, 81, 77, 84, 34, 1, 22, 67, 2, 70, 2, 21, + 71, 80, 71, 70, 19, 67, 7, 0, 73, 7, 68, 7, + 12, 7, 13, 21, 18, 83, 70, 3, 66, 2, 72, 11, + 71, 0, 19, 68, 16, 17, 5, 104, 10, 69, 97, 78, + 101, 71, 6, 64, 9, 3, 4, 24, 6, 0, 13, 23, 72, + 72, 4, 109, 79, 6, 95, 0, 77, 19, 1, 88, 31, + 1, 65, 96, 34, 82, 99, 1, 105, 67, 12, 16, 9, + 12, 8, 65, 12, 18, 89, 72, 7, 3, 1, 80, 71, + 75, 81, 72, 80, 90, 74, 77, 118, 92, 83, 98, + 93, 89, 9, 19, 7, 4, 5, 69, 77, 69, 84, 89, + 81, 97, 109, 107, 126, 78, 78, 95, 88, 94, 98, + 103, 107, 111, 118, 114, 126, 87, 112, 119, + 101, 102, 1, 38, 28, 18, 7, 5, 65, 66, 71, 65, + 11, 51, 33, 25, 17, 44, 18, 14, 3, 6, 5, 51, + 32, 18, 10, 24, 10, 3, 1, 1, 66, 36, 15, 7, 1, + 14, 4, 66, 0, 8, 45, 27, 16, 10, 29, 13, 11, + 10, 6, 62, 76, 67, 7, 66, 68, 1, 9, 10, 3, 10, + 17, 23, 76, 71, 76, 72, 21, 78, 79, 72, 1, 17, + 92, 82, 7, 13, 90, 93, 89, 70, 66, 12, 68, 1, + 65, 4, 12, 77, 68, 67, 4, 86, 73, 80, 79, 8, + 100, 76, 4, 70, 19, 70, 65, 30, 70, 73, 65, + 25, 85, 78, 103, 15, 28, 28, 16, 0, 16, 12, 5, + 7, 4, 1, 65, 83, 87, 94, 84, 80, 92, 114, 90, + 88, 89, 85, 82, 71, 70, 85, 94, 75, 66, 67, + 64, 74, 91, 77, 80, 97, 85, 93, 92, 108, 105, + 99, 94, 78, 73, 91, 80, 83, 92, 98, 100, 100, + 101, 103, 107, 120, 113, 121, 120, 119, 108, + 118, 120, 72, 8, 0, 9, 14, 14, 62, 25, 23, 68, + 33, 62, 60, 62, 20, 12, 3, 97, 123, 126, 126, + 126, 126, 126, 66, 43, 27, 18, 9, 14, 2, 66, + 68, 66, 66, 3, 16, 7, 26, 19, 10, 17, 19, 22, + 23, 12, 25, 20, 64, 14, 7, 70, 77, 84, 90, + 118, 117, 106 }, + + { + + 21, + 4, 82, 21, 4, 82, 17, 26, 28, 12, 71, 99, 68, + 3, 52, 14, 52, 71, 23, 30, 64, 83, 2, 98, 115, + 68, 83, 126, 126, 126, 62, 17, 69, 23, 30, 64, + 68, 17, 20, 70, 3, 0, 64, 72, 87, 71, 93, 5, + 67, 65, 68, 80, 72, 88, 17, 4, 1, 65, 12, 3, + 22, 0, 0, 0, 6, 97, 97, 12, 78, 70, 52, 6, 69, + 78, 64, 82, 10, 17, 14, 26, 5, 20, 14, 10, 23, + 74, 80, 76, 83, 35, 1, 23, 66, 2, 70, 2, 23, + 71, 79, 70, 69, 19, 67, 8, 2, 72, 8, 68, 7, + 12, 7, 14, 22, 19, 84, 70, 3, 66, 2, 72, 11, + 72, 0, 19, 69, 16, 17, 5, 106, 10, 70, 99, 79, + 102, 70, 7, 0, 10, 4, 4, 25, 6, 1, 14, 24, 72, + 72, 4, 110, 79, 7, 95, 0, 77, 20, 1, 89, 32, + 1, 65, 97, 35, 82, 100, 1, 106, 69, 11, 15, 8, + 11, 7, 65, 11, 17, 90, 73, 7, 3, 1, 81, 72, + 76, 82, 73, 81, 91, 75, 77, 120, 93, 83, 99, + 94, 89, 8, 17, 6, 2, 3, 71, 79, 71, 87, 92, + 83, 100, 111, 110, 126, 80, 80, 96, 90, 96, + 101, 106, 109, 114, 120, 116, 126, 88, 114, + 120, 102, 102, 1, 39, 28, 18, 7, 5, 65, 66, + 71, 65, 11, 51, 33, 25, 17, 45, 18, 14, 4, 6, + 6, 52, 32, 19, 10, 25, 10, 4, 1, 2, 65, 37, + 16, 8, 1, 15, 5, 65, 1, 8, 45, 27, 16, 10, 30, + 13, 12, 11, 7, 62, 75, 66, 7, 66, 68, 1, 9, + 10, 3, 10, 17, 23, 76, 71, 76, 72, 22, 79, 80, + 73, 0, 17, 93, 83, 7, 13, 90, 94, 89, 69, 65, + 13, 67, 1, 64, 4, 13, 77, 68, 67, 5, 86, 73, + 80, 78, 9, 100, 76, 4, 70, 20, 70, 65, 31, 70, + 73, 65, 26, 86, 78, 104, 14, 27, 27, 15, 64, + 15, 11, 4, 6, 3, 0, 66, 84, 88, 95, 86, 81, + 93, 116, 92, 89, 90, 85, 83, 71, 70, 85, 94, + 74, 68, 69, 66, 76, 94, 79, 82, 100, 87, 95, + 94, 111, 107, 101, 95, 80, 74, 93, 82, 85, 94, + 100, 102, 102, 103, 105, 109, 123, 115, 123, + 122, 120, 110, 120, 121, 71, 9, 1, 10, 15, 15, + 62, 26, 24, 68, 34, 62, 62, 62, 21, 10, 2, + 100, 126, 126, 126, 126, 126, 126, 66, 43, 27, + 18, 9, 14, 2, 66, 68, 66, 65, 4, 17, 8, 27, + 19, 10, 18, 19, 22, 23, 12, 25, 20, 64, 13, 5, + 72, 79, 86, 92, 120, 119, 107 }, + + { + + 20, + 4, 82, 20, 4, 82, 19, 27, 28, 12, 71, 100, 69, + 2, 52, 14, 54, 71, 24, 31, 64, 84, 2, 99, 116, + 69, 85, 126, 126, 126, 62, 18, 69, 24, 31, 64, + 68, 18, 20, 71, 3, 0, 0, 72, 87, 71, 93, 5, + 67, 64, 68, 80, 72, 88, 17, 4, 1, 65, 12, 3, + 22, 0, 0, 0, 7, 97, 97, 12, 79, 70, 52, 6, 69, + 77, 0, 82, 10, 18, 16, 28, 7, 21, 16, 11, 25, + 73, 79, 75, 82, 36, 1, 24, 65, 2, 69, 3, 25, + 71, 79, 70, 68, 19, 67, 8, 3, 72, 9, 68, 7, + 12, 7, 15, 22, 19, 84, 70, 3, 66, 2, 72, 11, + 72, 64, 19, 70, 16, 17, 5, 108, 10, 70, 101, + 80, 103, 69, 8, 1, 11, 5, 5, 26, 7, 1, 15, 25, + 72, 72, 4, 111, 78, 8, 95, 0, 77, 21, 1, 90, + 33, 1, 65, 98, 36, 83, 101, 1, 107, 70, 10, + 15, 7, 10, 6, 66, 10, 17, 91, 74, 7, 3, 1, 81, + 73, 77, 83, 74, 82, 92, 76, 78, 122, 94, 84, + 100, 95, 89, 6, 16, 4, 0, 1, 73, 81, 73, 89, + 94, 85, 102, 114, 112, 126, 82, 82, 98, 92, + 98, 103, 108, 111, 116, 123, 118, 126, 89, + 116, 121, 103, 102, 1, 39, 28, 18, 7, 5, 65, + 66, 71, 64, 11, 51, 33, 25, 17, 46, 19, 15, 4, + 7, 7, 53, 33, 19, 10, 26, 11, 4, 2, 3, 64, 38, + 17, 8, 1, 16, 6, 64, 2, 9, 45, 27, 16, 10, 31, + 14, 13, 12, 8, 62, 75, 66, 8, 66, 68, 1, 9, + 10, 3, 10, 17, 24, 76, 71, 76, 73, 22, 80, 81, + 74, 64, 17, 94, 84, 7, 13, 91, 95, 90, 68, 64, + 14, 67, 2, 64, 5, 14, 77, 68, 67, 5, 87, 73, + 80, 78, 10, 100, 76, 4, 70, 21, 70, 65, 32, + 70, 73, 65, 27, 87, 78, 105, 13, 27, 27, 14, + 65, 14, 10, 3, 5, 2, 64, 67, 85, 89, 96, 87, + 82, 95, 118, 93, 90, 91, 86, 83, 71, 70, 85, + 95, 73, 70, 71, 68, 78, 97, 81, 84, 102, 89, + 97, 96, 113, 109, 102, 96, 82, 76, 94, 84, 87, + 96, 102, 104, 104, 105, 107, 111, 125, 117, + 125, 124, 121, 112, 122, 123, 70, 10, 2, 11, + 16, 16, 62, 27, 25, 68, 35, 62, 62, 62, 22, 9, + 0, 102, 126, 126, 126, 126, 126, 126, 66, 43, + 27, 18, 9, 14, 2, 66, 68, 65, 64, 5, 18, 9, + 28, 20, 11, 19, 20, 23, 24, 12, 26, 20, 64, + 12, 4, 74, 81, 88, 94, 122, 121, 108 }, + + { + + 18, + 3, 83, 18, 3, 83, 20, 28, 28, 12, 72, 102, 71, + 0, 51, 14, 56, 72, 24, 31, 65, 85, 2, 101, + 118, 70, 87, 126, 126, 126, 62, 19, 70, 24, + 31, 65, 68, 19, 20, 72, 3, 0, 0, 73, 88, 71, + 94, 5, 67, 64, 69, 81, 72, 88, 17, 4, 1, 65, + 12, 2, 22, 0, 0, 0, 7, 98, 97, 12, 80, 71, 52, + 5, 69, 76, 0, 82, 10, 19, 17, 29, 8, 22, 17, + 12, 26, 72, 79, 74, 82, 36, 1, 24, 65, 2, 69, + 3, 26, 71, 79, 70, 67, 19, 67, 8, 4, 72, 9, + 68, 7, 12, 7, 15, 22, 19, 85, 71, 3, 67, 2, + 72, 10, 73, 65, 19, 71, 15, 17, 4, 110, 9, 71, + 103, 81, 104, 69, 8, 1, 11, 5, 5, 27, 7, 1, + 15, 26, 73, 72, 4, 113, 78, 8, 95, 0, 78, 21, + 1, 91, 33, 1, 65, 100, 36, 84, 102, 1, 108, + 72, 9, 14, 6, 9, 5, 67, 9, 16, 93, 75, 6, 2, + 1, 82, 74, 78, 84, 75, 83, 93, 77, 79, 124, + 96, 85, 102, 97, 89, 4, 14, 2, 65, 64, 76, 84, + 76, 92, 97, 88, 105, 117, 115, 126, 84, 84, + 100, 95, 101, 106, 111, 114, 119, 126, 121, + 126, 90, 118, 123, 104, 103, 1, 39, 28, 18, 7, + 5, 66, 66, 71, 64, 11, 51, 33, 25, 17, 47, 19, + 15, 4, 7, 7, 53, 33, 19, 10, 26, 11, 4, 2, 4, + 64, 39, 17, 8, 1, 16, 6, 64, 3, 9, 45, 27, 16, + 10, 31, 14, 13, 12, 8, 62, 75, 66, 8, 66, 68, + 1, 9, 10, 3, 10, 17, 24, 76, 71, 77, 74, 22, + 81, 82, 75, 65, 16, 96, 86, 6, 12, 92, 97, 91, + 68, 64, 15, 67, 2, 64, 5, 14, 78, 68, 67, 5, + 88, 73, 80, 78, 10, 101, 76, 4, 70, 21, 71, + 65, 32, 71, 74, 65, 27, 88, 79, 106, 12, 26, + 26, 13, 67, 13, 9, 2, 4, 1, 65, 68, 86, 91, + 98, 89, 84, 97, 120, 95, 92, 92, 87, 84, 71, + 70, 85, 96, 73, 73, 74, 70, 81, 100, 84, 87, + 105, 92, 100, 99, 116, 112, 104, 97, 84, 78, + 96, 86, 90, 99, 105, 107, 107, 107, 110, 114, + 126, 119, 126, 126, 123, 114, 124, 125, 69, + 11, 3, 11, 16, 16, 62, 27, 25, 68, 35, 62, 62, + 62, 22, 7, 65, 105, 126, 126, 126, 126, 126, + 126, 66, 43, 26, 17, 9, 14, 2, 67, 68, 65, 64, + 5, 18, 9, 29, 20, 11, 19, 20, 23, 24, 12, 26, + 20, 65, 10, 2, 76, 83, 90, 96, 125, 123, 109 }, + + { + + 17, + 3, 83, 17, 3, 83, 22, 30, 29, 13, 72, 103, 72, + 64, 51, 14, 59, 72, 25, 32, 65, 85, 3, 102, + 119, 70, 88, 126, 126, 126, 62, 21, 70, 25, + 32, 65, 67, 21, 21, 72, 4, 1, 1, 73, 88, 70, + 94, 5, 66, 0, 69, 81, 71, 88, 18, 5, 2, 64, + 13, 2, 22, 0, 0, 0, 8, 98, 97, 13, 80, 71, 52, + 5, 69, 74, 1, 82, 11, 21, 19, 31, 10, 24, 19, + 14, 28, 70, 78, 73, 81, 37, 2, 25, 64, 3, 68, + 4, 28, 70, 78, 69, 65, 20, 66, 9, 6, 71, 10, + 67, 8, 13, 8, 16, 23, 20, 85, 71, 4, 67, 2, + 71, 10, 73, 65, 19, 71, 15, 17, 4, 111, 9, 71, + 104, 82, 104, 68, 9, 2, 12, 6, 6, 28, 8, 2, + 16, 28, 73, 72, 5, 114, 77, 9, 95, 1, 78, 22, + 2, 91, 34, 1, 65, 101, 37, 84, 103, 1, 108, + 73, 9, 14, 6, 9, 5, 67, 9, 16, 94, 75, 6, 2, + 1, 82, 74, 78, 84, 75, 83, 94, 77, 79, 125, + 97, 85, 103, 98, 89, 3, 13, 1, 66, 65, 78, 86, + 78, 94, 99, 90, 107, 119, 117, 126, 85, 85, + 101, 97, 103, 108, 113, 116, 121, 126, 123, + 126, 90, 119, 124, 104, 103, 2, 40, 29, 19, 8, + 5, 66, 65, 70, 0, 12, 52, 34, 26, 17, 48, 20, + 16, 5, 8, 8, 54, 34, 20, 11, 27, 12, 5, 3, 6, + 0, 41, 18, 9, 2, 17, 7, 0, 5, 10, 46, 28, 17, + 11, 32, 15, 14, 13, 9, 62, 74, 65, 9, 66, 67, + 1, 10, 11, 4, 11, 18, 25, 75, 71, 77, 74, 23, + 81, 82, 76, 65, 16, 97, 87, 6, 12, 92, 98, 91, + 67, 0, 16, 66, 3, 0, 6, 15, 78, 67, 66, 6, 88, + 72, 79, 77, 11, 101, 76, 5, 70, 22, 71, 65, + 33, 71, 74, 64, 28, 88, 79, 106, 12, 26, 26, + 13, 68, 13, 9, 2, 4, 1, 65, 68, 86, 92, 99, + 90, 85, 98, 121, 96, 93, 92, 87, 84, 70, 69, + 84, 96, 72, 75, 76, 72, 83, 102, 86, 89, 107, + 94, 102, 101, 118, 114, 105, 97, 85, 79, 97, + 87, 92, 101, 107, 109, 109, 109, 112, 116, + 126, 120, 126, 126, 124, 115, 125, 126, 67, + 13, 5, 12, 17, 17, 62, 28, 26, 68, 36, 62, 62, + 62, 23, 6, 66, 107, 126, 126, 126, 126, 126, + 126, 65, 44, 26, 17, 9, 15, 2, 67, 68, 64, 0, + 6, 19, 10, 31, 21, 12, 20, 21, 24, 25, 13, 27, + 21, 65, 9, 1, 77, 84, 91, 97, 126, 124, 109 }, + + { + + 16, + 3, 83, 16, 3, 83, 24, 31, 29, 13, 72, 104, 73, + 65, 51, 14, 61, 72, 26, 33, 65, 86, 3, 103, + 120, 71, 90, 126, 126, 126, 62, 22, 70, 26, + 33, 65, 67, 22, 21, 73, 4, 1, 2, 73, 88, 70, + 94, 5, 66, 1, 69, 81, 71, 88, 18, 5, 2, 64, + 13, 2, 22, 0, 0, 0, 9, 98, 97, 13, 81, 71, 52, + 5, 69, 73, 2, 82, 11, 22, 21, 33, 11, 25, 21, + 15, 30, 69, 77, 72, 80, 38, 2, 26, 0, 3, 68, + 5, 30, 70, 78, 69, 64, 20, 66, 9, 7, 71, 11, + 67, 8, 13, 8, 17, 23, 20, 86, 71, 4, 67, 2, + 71, 10, 73, 66, 19, 72, 15, 17, 4, 113, 9, 71, + 106, 83, 105, 67, 10, 3, 13, 7, 7, 29, 9, 2, + 17, 29, 73, 72, 5, 115, 77, 10, 95, 1, 78, 23, + 2, 92, 35, 1, 65, 102, 38, 85, 104, 1, 109, + 75, 8, 13, 5, 8, 4, 68, 8, 16, 95, 76, 6, 2, + 1, 82, 75, 79, 85, 76, 84, 95, 78, 80, 126, + 98, 86, 104, 99, 89, 1, 12, 64, 68, 67, 80, + 88, 80, 97, 101, 92, 110, 122, 119, 126, 87, + 87, 103, 99, 105, 110, 115, 118, 123, 126, + 125, 126, 91, 121, 125, 105, 103, 2, 40, 29, + 19, 8, 5, 66, 65, 70, 1, 12, 52, 34, 26, 17, + 49, 20, 17, 5, 9, 9, 55, 35, 20, 11, 28, 12, + 5, 4, 7, 1, 42, 19, 9, 2, 18, 8, 1, 6, 10, 46, + 28, 17, 11, 33, 16, 15, 14, 10, 62, 74, 65, 9, + 66, 67, 1, 10, 11, 4, 11, 18, 26, 75, 71, 77, + 75, 23, 82, 83, 77, 66, 16, 98, 88, 6, 12, 93, + 99, 92, 66, 1, 17, 66, 3, 0, 7, 16, 78, 67, + 66, 6, 89, 72, 79, 77, 12, 101, 76, 5, 70, 23, + 71, 65, 34, 71, 74, 64, 29, 89, 79, 107, 11, + 26, 26, 12, 69, 12, 8, 1, 3, 0, 66, 69, 87, + 93, 100, 92, 86, 100, 123, 97, 94, 93, 88, 84, + 70, 69, 84, 97, 71, 77, 78, 74, 85, 105, 88, + 91, 110, 96, 104, 103, 120, 116, 106, 98, 87, + 81, 98, 89, 94, 103, 109, 111, 111, 111, 114, + 118, 126, 122, 126, 126, 125, 117, 126, 126, + 66, 14, 6, 13, 18, 18, 62, 29, 27, 68, 37, 62, + 62, 62, 24, 5, 68, 110, 126, 126, 126, 126, + 126, 126, 65, 44, 26, 17, 9, 15, 2, 67, 68, 0, + 1, 7, 20, 11, 32, 22, 13, 21, 22, 25, 26, 13, + 28, 21, 65, 8, 64, 79, 86, 93, 99, 126, 126, + 110 }, + + { + + 15, + 3, 83, 15, 3, 83, 26, 33, 30, 13, 73, 106, 75, + 66, 51, 14, 62, 72, 27, 34, 65, 87, 3, 104, + 121, 71, 92, 126, 126, 126, 62, 23, 70, 27, + 34, 65, 66, 23, 22, 73, 4, 2, 3, 74, 89, 70, + 94, 5, 66, 1, 69, 81, 71, 88, 19, 5, 2, 64, + 14, 2, 22, 0, 0, 0, 9, 98, 97, 14, 82, 71, 52, + 5, 69, 72, 3, 82, 12, 23, 23, 35, 13, 26, 23, + 16, 32, 68, 76, 71, 79, 39, 2, 27, 1, 3, 67, + 5, 32, 70, 77, 68, 0, 20, 66, 10, 9, 70, 12, + 67, 8, 13, 8, 18, 24, 21, 86, 71, 4, 67, 2, + 71, 10, 74, 66, 19, 73, 15, 17, 4, 115, 9, 72, + 108, 84, 106, 66, 11, 4, 14, 8, 7, 30, 9, 3, + 18, 30, 73, 72, 5, 116, 76, 11, 95, 1, 78, 24, + 2, 93, 36, 1, 65, 103, 39, 85, 105, 1, 110, + 76, 7, 13, 4, 7, 3, 68, 7, 15, 96, 77, 6, 2, + 1, 83, 76, 80, 86, 77, 85, 96, 79, 80, 126, + 99, 86, 105, 100, 89, 0, 10, 65, 70, 69, 82, + 90, 82, 99, 104, 94, 112, 124, 122, 126, 89, + 89, 104, 101, 107, 113, 118, 120, 126, 126, + 126, 126, 92, 123, 126, 106, 103, 2, 41, 29, + 19, 8, 5, 66, 65, 70, 1, 12, 52, 34, 26, 17, + 50, 21, 17, 6, 9, 10, 56, 35, 21, 11, 29, 13, + 6, 4, 8, 2, 43, 20, 10, 2, 19, 9, 2, 7, 11, + 46, 28, 17, 11, 34, 16, 16, 15, 11, 62, 73, + 64, 10, 66, 67, 1, 10, 11, 4, 11, 18, 26, 75, + 71, 77, 75, 24, 83, 84, 78, 67, 16, 99, 89, 6, + 12, 93, 100, 92, 65, 2, 18, 65, 4, 1, 7, 17, + 78, 67, 66, 7, 89, 72, 79, 76, 13, 101, 76, 5, + 70, 24, 71, 65, 35, 71, 74, 64, 30, 90, 79, + 108, 10, 25, 25, 11, 70, 11, 7, 0, 2, 64, 67, + 70, 88, 94, 101, 93, 87, 101, 125, 99, 95, 94, + 88, 85, 70, 69, 84, 97, 70, 79, 80, 76, 87, + 108, 90, 93, 112, 98, 106, 105, 123, 118, 108, + 99, 89, 82, 100, 91, 96, 105, 111, 113, 113, + 113, 116, 120, 126, 124, 126, 126, 126, 119, + 126, 126, 65, 15, 7, 14, 19, 19, 62, 30, 28, + 68, 38, 62, 62, 62, 25, 3, 69, 112, 126, 126, + 126, 126, 126, 126, 65, 44, 26, 17, 9, 15, 2, + 67, 68, 0, 2, 8, 21, 12, 33, 22, 13, 22, 22, + 25, 26, 13, 28, 21, 65, 7, 65, 81, 88, 95, + 101, 126, 126, 111 }, + + }, + +}; diff --git a/common/ih264_cabac_tables.h b/common/ih264_cabac_tables.h index 5cddc459..72377a3e 100644 --- a/common/ih264_cabac_tables.h +++ b/common/ih264_cabac_tables.h @@ -20,22 +20,23 @@ /** ****************************************************************************** -* @file ih264_cabac_tables.h +* @file +* ih264_cabac_tables.h * * @brief * This file contains enumerations, macros and extern declarations of H264 * cabac tables * * @author -* Ittiam +* ittiam * * @remarks * none ****************************************************************************** */ -#ifndef IH264_CABAC_TABLES_H_ -#define IH264_CABAC_TABLES_H_ +#ifndef _IH264_CABAC_TABLES_H_ +#define _IH264_CABAC_TABLES_H_ /*****************************************************************************/ /* Constant Macros */ @@ -86,8 +87,7 @@ /** ****************************************************************************** - * @enum ctxBlockCat - +* @enum ctxBlockCat ****************************************************************************** */ typedef enum @@ -104,8 +104,7 @@ typedef enum /** ****************************************************************************** - * @enum ctxIdxOffset - +* @enum ctxIdxOffset ****************************************************************************** */ typedef enum @@ -151,10 +150,10 @@ typedef enum } cabac_table_num_t; + /** ****************************************************************************** - * @enum ctxIdxOffset - +* @enum ctxIdxOffset ****************************************************************************** */ typedef enum @@ -174,22 +173,10 @@ typedef enum } cabac_blk_cat_offset_t; - - /*****************************************************************************/ -/* Extern global declarations */ +/* Global declarations */ /*****************************************************************************/ - - -/* CABAC Table declaration*/ extern const UWORD32 gau4_ih264_cabac_table[128][4]; - - -/*****************************************************************************/ -/* Cabac tables for context initialization depending upon type of Slice, */ -/* cabac init Idc value and Qp. */ -/*****************************************************************************/ extern const UWORD8 gau1_ih264_cabac_ctxt_init_table[NUM_CAB_INIT_IDC_PLUS_ONE][QP_RANGE][NUM_CABAC_CTXTS]; - -#endif /* IH264_CABAC_TABLES_H_ */ +#endif /* _IH264_CABAC_TABLES_H_ */ diff --git a/common/ih264_cavlc_tables.c b/common/ih264_cavlc_tables.c index f122ab9b..6fc51c51 100644 --- a/common/ih264_cavlc_tables.c +++ b/common/ih264_cavlc_tables.c @@ -18,7 +18,6 @@ * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore */ - /** ****************************************************************************** * @file @@ -29,23 +28,7 @@ * zeros and runs before zeros * * @author -* Ittiam -* -* @par List of Tables -* - gu1_code_coeff_token_table -* - gu1_size_coeff_token_table -* - gu1_code_coeff_token_table_chroma -* - gu1_size_coeff_token_table_chroma -* - gu1_threshold_vlc_level -* - gu1_size_zero_table -* - gu1_code_zero_table -* - gu1_size_zero_table_chroma -* - gu1_code_zero_table_chroma -* - gu1_index_zero_table -* - gu1_size_run_table -* - gu1_code_run_table -* - gu4_codeword_level_tables -* - gu1_codesize_level_tables +* ittiam * * @remarks * none @@ -72,7 +55,7 @@ * chroma format idc != 0 * input : cbp, intra - 0/inter - 1 * output : codenum - * @remarks Table 9-4 – Assignment of codeNum to values of coded_block_pattern + * @remarks Table 9-4 - Assignment of codeNum to values of coded_block_pattern * for macroblock prediction modes in H264 spec ****************************************************************************** */ @@ -269,6 +252,7 @@ const UWORD8 gu1_code_run_table[42] = 3, 0, 1, 3, 2, 5, 4, 7, 6, 5, 4, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; + /** ****************************************************************************** * @brief index to access zero table (look up) diff --git a/common/ih264_cavlc_tables.h b/common/ih264_cavlc_tables.h index 78057b52..d64ac549 100644 --- a/common/ih264_cavlc_tables.h +++ b/common/ih264_cavlc_tables.h @@ -20,22 +20,23 @@ /** ****************************************************************************** -* @file ih264_cavlc_tables.h +* @file +* ih264_cavlc_tables.h * * @brief * This file contains enumerations, macros and extern declarations of H264 * cavlc tables * * @author -* Ittiam +* ittiam * -* @remarks -* none +* @remarks +* none ****************************************************************************** */ -#ifndef IH264_CAVLC_TABLES_H_ -#define IH264_CAVLC_TABLES_H_ +#ifndef _IH264_CAVLC_TABLES_H_ +#define _IH264_CAVLC_TABLES_H_ /*****************************************************************************/ /* Constant Macros */ @@ -48,86 +49,22 @@ #define MAX_ZERO_LEFT 6 /*****************************************************************************/ -/* Extern global declarations */ +/* global declarations */ /*****************************************************************************/ -/** - ****************************************************************************** - * @brief Assignment of cbp to a codenum for intra and inter prediction modes - * chroma format idc != 0 - * input : cbp, intra - 0/inter - 1 - * output : codenum - * @remarks Table 9-4 – Assignment of codeNum to values of coded_block_pattern - * for macroblock prediction modes in H264 spec - ****************************************************************************** - */ extern const UWORD8 gu1_cbp_map_tables[48][2]; - -/** - ****************************************************************************** - * @brief total non-zero coefficients and numbers of trailing ones of a residual - * block are mapped to coefftoken using the tables given below. - * input : VLC-Num | Trailing ones | Total coeffs - * output : coeff_token (code word, size of the code word) - * @remarks Table-9-5 coeff_token mapping to TotalCoeff( coeff_token ) - * and TrailingOnes( coeff_token ) in H264 spec - ****************************************************************************** - */ extern const UWORD8 gu1_code_coeff_token_table[3][4][16]; extern const UWORD8 gu1_size_coeff_token_table[3][4][16]; extern const UWORD8 gu1_code_coeff_token_table_chroma[4][4]; extern const UWORD8 gu1_size_coeff_token_table_chroma[4][4]; - -/** - ****************************************************************************** - * @brief Thresholds for determining whether to increment Level table number. - * input : suffix_length - * output : threshold - ****************************************************************************** - */ extern const UWORD8 gu1_threshold_vlc_level[6]; - -/** - ****************************************************************************** - * @brief table for encoding total number of zeros - * input : coeff_token, total zeros - * output : code word, size of the code word - * @remarks Table-9-7, 9-8 total_zeros tables for 4x4 blocks with - * TotalCoeff( coeff_token ) in H264 spec - ****************************************************************************** - */ extern const UWORD8 gu1_size_zero_table[135]; extern const UWORD8 gu1_code_zero_table[135]; extern const UWORD8 gu1_size_zero_table_chroma[9]; extern const UWORD8 gu1_code_zero_table_chroma[9]; - -/** - ****************************************************************************** - * @brief index to access zero table (for speed) - * input : TotalCoeff( coeff_token ) - * output : index to access zero table - ****************************************************************************** - */ extern const UWORD8 gu1_index_zero_table[15]; - -/** - ****************************************************************************** - * @brief table for encoding runs of zeros before - * input : zeros left, runs of zeros before - * output : code word, size of the code word - * @remarks Table-9-10 table for run_before in H264 spec - ****************************************************************************** - */ extern const UWORD8 gu1_size_run_table[42]; extern const UWORD8 gu1_code_run_table[42]; - -/** - ****************************************************************************** - * @brief index to access run table (look up) - * input : zeros left - * output : index to access run table - ****************************************************************************** - */ extern const UWORD8 gu1_index_run_table[7]; -#endif /* IH264_CAVLC_TABLES_H_ */ +#endif /* _IH264_CAVLC_TABLES_H_ */ diff --git a/common/ih264_chroma_intra_pred_filters.c b/common/ih264_chroma_intra_pred_filters.c index 1894bfc4..3a615e98 100644 --- a/common/ih264_chroma_intra_pred_filters.c +++ b/common/ih264_chroma_intra_pred_filters.c @@ -17,25 +17,26 @@ ***************************************************************************** * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore */ + /** ******************************************************************************* * @file * ih264_chroma_intra_pred_filters.c * * @brief -* Contains function definitions for chroma intra prediction filters +* Contains function definitions for chroma intra prediction filters * * @author -* Ittiam +* ittiam * * @par List of Functions: -* -ih264_intra_pred_chroma_8x8_mode_dc -* -ih264_intra_pred_chroma_8x8_mode_horz -* -ih264_intra_pred_chroma_8x8_mode_vert -* -ih264_intra_pred_chroma_8x8_mode_plane +* - ih264_intra_pred_chroma_8x8_mode_dc +* - ih264_intra_pred_chroma_8x8_mode_horz +* - ih264_intra_pred_chroma_8x8_mode_vert +* - ih264_intra_pred_chroma_8x8_mode_plane * * @remarks -* None +* none * ******************************************************************************* */ @@ -44,66 +45,68 @@ /* File Includes */ /*****************************************************************************/ -/* System include files */ +/* System Include Files */ #include #include #include -/* User include files */ -#include "ih264_defs.h" +/* User Include Files */ #include "ih264_typedefs.h" #include "ih264_macros.h" -#include "ih264_platform_macros.h" +#include "ih264_defs.h" #include "ih264_intra_pred_filters.h" +#include "ih264_platform_macros.h" -/* Global variables used only in assembly files*/ +/*****************************************************************************/ +/* Global definitions */ +/*****************************************************************************/ +/* Note: used only in assembly files */ const WORD8 ih264_gai1_intrapred_chroma_plane_coeffs1[] = -{ 0x01,0x00,0x01,0x00, - 0x02,0x00,0x02,0x00, - 0x03,0x00,0x03,0x00, - 0x04,0x00,0x04,0x00 +{ + 0x01, 0x00, 0x01, 0x00, + 0x02, 0x00, 0x02, 0x00, + 0x03, 0x00, 0x03, 0x00, + 0x04, 0x00, 0x04, 0x00, +}; + +const WORD8 ih264_gai1_intrapred_chroma_plane_coeffs2[] = +{ + 0xfd, 0xff, 0xfe, 0xff, + 0xff, 0xff, 0x00, 0x00, + 0x01, 0x00, 0x02, 0x00, + 0x03, 0x00, 0x04, 0x00, }; - const WORD8 ih264_gai1_intrapred_chroma_plane_coeffs2[] = - { 0xfd,0xff,0xfe,0xff, - 0xff,0xff,0x00,0x00, - 0x01,0x00,0x02,0x00, - 0x03,0x00,0x04,0x00, - }; /*****************************************************************************/ -/* Chroma Intra prediction 8x8 filters */ +/* Function Definitions */ /*****************************************************************************/ /** ******************************************************************************* * -* ih264_intra_pred_chroma_8x8_mode_dc +* @brief Perform chroma_8x8 intra DC prediction * -* @brief -* Perform Intra prediction for chroma_8x8 mode:DC -* -* @par Description: -* Perform Intra prediction for chroma_8x8 mode:DC ,described in sec 8.3.4.1 +* @par Description +* Perform chroma_8x8 intra DC prediction (refer sec 8.3.4.1 of ITU T.h264) * * @param[in] pu1_src -* UWORD8 pointer to the source containing alternate U and V samples +* pointer to the source containing alternate U and V samples * * @param[out] pu1_dst -* UWORD8 pointer to the destination with alternate U and V samples +* pointer to the destination with alternate U and V samples * * @param[in] src_strd -* integer source stride +* source stride * * @param[in] dst_strd -* integer destination stride +* destination stride * -** @param[in] ngbr_avail +* @param[in] ngbr_avail * availability of neighbouring pixels * -* @returns +* @returns none * -* @remarks -* None +* @remarks none * ****************************************************************************** */ @@ -113,21 +116,28 @@ void ih264_intra_pred_chroma_8x8_mode_dc(UWORD8 *pu1_src, WORD32 dst_strd, WORD32 ngbr_avail) { - WORD32 left_avail, left_avail1, left_avail2; /* availability of left predictors (only for DC) */ - WORD32 top_avail; /* availability of top predictors (only for DC) */ - UWORD8 *pu1_left = NULL; /* Pointer to start of left predictors */ - UWORD8 *pu1_top = NULL; /* Pointer to start of top predictors */ + /* availability of left predictors (only for DC) */ + WORD32 left_avail, left_avail1, left_avail2; - /* temporary variables to store accumulated first left half,second left half, - * first top half,second top half of U and V values*/ + /* availability of top predictors (only for DC) */ + WORD32 top_avail; + + /* Pointer to start of left predictors */ + UWORD8 *pu1_left = NULL; + + /* Pointer to start of top predictors */ + UWORD8 *pu1_top = NULL; + + /* temporary variables to store accumulated first left half, second left half, + * first top half, second top half of U and V values*/ WORD32 val_u_l1 = 0, val_u_l2 = 0, val_u_t1 = 0, val_u_t2 = 0; WORD32 val_v_l1 = 0, val_v_l2 = 0, val_v_t1 = 0, val_v_t2 = 0; - WORD32 val_u1 = 0, val_u2 = 0, val_v1 = 0, val_v2 = 0; - WORD32 col, row; /*loop variables*/ - UNUSED(src_strd); + /* temp */ + WORD32 col, row; + UNUSED(src_strd); left_avail = ngbr_avail & 0x11; left_avail1 = ngbr_avail & 1; left_avail2 = (ngbr_avail >> 4) & 1; @@ -137,7 +147,8 @@ void ih264_intra_pred_chroma_8x8_mode_dc(UWORD8 *pu1_src, pu1_left = pu1_src + 2 * BLK8x8SIZE - 2; if(left_avail1) - { /* First 4x4 block*/ + { + /* First 4x4 block */ val_u_l1 += *pu1_left; val_v_l1 += *(pu1_left + 1); pu1_left -= 2; @@ -152,11 +163,13 @@ void ih264_intra_pred_chroma_8x8_mode_dc(UWORD8 *pu1_src, pu1_left -= 2; } else + { pu1_left -= 2 * 4; + } if(left_avail2) { - /* Second 4x4 block*/ + /* Second 4x4 block */ val_u_l2 += *pu1_left; val_v_l2 += *(pu1_left + 1); pu1_left -= 2; @@ -171,7 +184,9 @@ void ih264_intra_pred_chroma_8x8_mode_dc(UWORD8 *pu1_src, pu1_left -= 2; } else + { pu1_left -= 2 * 4; + } if(top_avail) { @@ -210,13 +225,13 @@ void ih264_intra_pred_chroma_8x8_mode_dc(UWORD8 *pu1_src, for(row = 0; row < 4; row++) { - /*top left 4x4 block*/ + /* top left 4x4 block */ for(col = 0; col < 8; col += 2) { *(pu1_dst + row * dst_strd + col) = val_u1; *(pu1_dst + row * dst_strd + col + 1) = val_v1; } - /*top right 4x4 block*/ + /* top right 4x4 block */ for(col = 8; col < 16; col += 2) { *(pu1_dst + row * dst_strd + col) = val_u2; @@ -246,13 +261,14 @@ void ih264_intra_pred_chroma_8x8_mode_dc(UWORD8 *pu1_src, >> (1 + left_avail2 + top_avail)) : 128; for(row = 4; row < 8; row++) - { /*bottom left 4x4 block*/ + { + /* bottom left 4x4 block */ for(col = 0; col < 8; col += 2) { *(pu1_dst + row * dst_strd + col) = val_u1; *(pu1_dst + row * dst_strd + col + 1) = val_v1; } - /*bottom right 4x4 block*/ + /* bottom right 4x4 block */ for(col = 8; col < 16; col += 2) { *(pu1_dst + row * dst_strd + col) = val_u2; @@ -273,33 +289,29 @@ void ih264_intra_pred_chroma_8x8_mode_dc(UWORD8 *pu1_src, /** ******************************************************************************* * -*ih264_intra_pred_chroma_8x8_mode_horz +* @brief Perform chroma_8x8 intra Horz prediction * -* @brief -* Perform Intra prediction for chroma_8x8 mode:Horizontal -* -* @par Description: -* Perform Intra prediction for chroma_8x8 mode:Horizontal ,described in sec 8.3.4.2 +* @par Description +* Perform chroma_8x8 intra Horz prediction (refer sec 8.3.4.2 of ITU T.h264) * * @param[in] pu1_src -* UWORD8 pointer to the source containing alternate U and V samples +* pointer to the source containing alternate U and V samples * * @param[out] pu1_dst -* UWORD8 pointer to the destination with alternate U and V samples +* pointer to the destination with alternate U and V samples * * @param[in] src_strd -* integer source stride +* source stride * * @param[in] dst_strd -* integer destination stride +* destination stride * * @param[in] ngbr_avail -* availability of neighbouring pixels(Not used in this function) +* availability of neighbouring pixels (Not used in this function) * * @returns * -* @remarks -* None +* @remarks none * ****************************************************************************** */ @@ -309,9 +321,12 @@ void ih264_intra_pred_chroma_8x8_mode_horz(UWORD8 *pu1_src, WORD32 dst_strd, WORD32 ngbr_avail) { + /* Pointer to start of left predictors */ + UWORD8 *pu1_left = NULL; + + /* temp */ + WORD32 rows, cols; - UWORD8 *pu1_left = NULL; /* Pointer to start of top predictors */ - WORD32 rows, cols; /* loop variables*/ UNUSED(src_strd); UNUSED(ngbr_avail); pu1_left = pu1_src + 2 * BLK8x8SIZE - 2; @@ -320,39 +335,34 @@ void ih264_intra_pred_chroma_8x8_mode_horz(UWORD8 *pu1_src, for(cols = 0; cols < 16; cols += 2) { *(pu1_dst + rows * dst_strd + cols) = *pu1_left; - *(pu1_dst + rows * dst_strd + cols + 1) = *(pu1_left + 1); } pu1_left -= 2; } - } /** ******************************************************************************* * -*ih264_intra_pred_chroma_8x8_mode_vert -* -* @brief -* Perform Intra prediction for chroma_8x8 mode:vertical +* @brief Perform chroma_8x8 intra Vert prediction * -* @par Description: -* Perform Intra prediction for chroma_8x8 mode:vertical ,described in sec 8.3.4.3 +* @par Description +* Perform chroma_8x8 intra Vert prediction (refer sec 8.3.4.3 of ITU T.h264) * * @param[in] pu1_src -* UWORD8 pointer to the source containing alternate U and V samples +* pointer to the source containing alternate U and V samples * * @param[out] pu1_dst -* UWORD8 pointer to the destination with alternate U and V samples +* pointer to the destination with alternate U and V samples * * @param[in] src_strd -* integer source stride +* source stride * * @param[in] dst_strd -* integer destination stride +* destination stride * * @param[in] ngbr_avail -* availability of neighbouring pixels(Not used in this function) +* availability of neighbouring pixels (Not used in this function) * * @returns * @@ -367,9 +377,12 @@ void ih264_intra_pred_chroma_8x8_mode_vert(UWORD8 *pu1_src, WORD32 dst_strd, WORD32 ngbr_avail) { + /* Pointer to start of top predictors */ + UWORD8 *pu1_top = NULL; + + /* temp */ + WORD32 row; - UWORD8 *pu1_top = NULL; /* Pointer to start of top predictors */ - WORD32 row;/*loop variable*/ UNUSED(src_strd); UNUSED(ngbr_avail); pu1_top = pu1_src + 2 * BLK8x8SIZE + 2; @@ -395,28 +408,25 @@ void ih264_intra_pred_chroma_8x8_mode_vert(UWORD8 *pu1_src, /** ******************************************************************************* * -* ih264_intra_pred_chroma_8x8_mode_plane -* -* @brief -* Perform Intra prediction for chroma_8x8 mode:PLANE +* @brief Perform chroma_8x8 intra Plane prediction * -* @par Description: -* Perform Intra prediction for chroma_8x8 mode:PLANE ,described in sec 8.3.4.4 +* @par Description +* Perform chroma_8x8 intra Plane prediction (refer sec 8.3.4.4 of ITU T.h264) * * @param[in] pu1_src -* UWORD8 pointer to the source containing alternate U and V samples +* pointer to the source containing alternate U and V samples * * @param[out] pu1_dst -* UWORD8 pointer to the destination with alternate U and V samples +* pointer to the destination with alternate U and V samples * * @param[in] src_strd -* integer source stride +* source stride * * @param[in] dst_strd -* integer destination stride +* destination stride * * @param[in] ngbr_avail -* availability of neighbouring pixels(Not used in this function) +* availability of neighbouring pixels (Not used in this function) * * @returns * @@ -431,45 +441,52 @@ void ih264_intra_pred_chroma_8x8_mode_plane(UWORD8 *pu1_src, WORD32 dst_strd, WORD32 ngbr_avail) { + /* Pointer to start of left predictors */ + UWORD8 *pu1_left = NULL; - UWORD8 *pu1_left = NULL; /* Pointer to start of left predictors */ - UWORD8 *pu1_top = NULL; /* Pointer to start of top predictors */ + /* Pointer to start of top predictors */ + UWORD8 *pu1_top = NULL; + + /* temp */ WORD32 val = 0; - WORD32 rows, cols; /* loop variables*/ - WORD32 a_u, b_u, c_u, h_u, v_u; /* Implementing section 8.3.4.4 . The variables represent the corresponding variables in the section*/ + WORD32 rows, cols; + + /* Implementing section 8.3.4.4. The variables represent the corresponding + * variables in the section */ + WORD32 a_u, b_u, c_u, h_u, v_u; WORD32 a_v, b_v, c_v, h_v, v_v; + UNUSED(src_strd); UNUSED(ngbr_avail); a_u = b_u = c_u = h_u = v_u = 0; a_v = b_v = c_v = h_v = v_v = 0; - /* As chroma format 4:2:0 is used,xCF = 4 * ( chroma_format_idc = = 3 ) = 0 and - yCF = 4 * ( chroma_format_idc != 1 ) = 0 */ + pu1_top = pu1_src + 2 * BLK8x8SIZE + 2; pu1_left = pu1_src + 2 * BLK8x8SIZE - 2; - /* Implementing section 8.3.4.4 */ + for(cols = 0; cols < 4; cols++) { - h_u += (cols + 1) * (pu1_top[8 + 2 * cols] - pu1_top[4 - 2 * cols]);/*section 8.3.4.4 equation (8-144)*/ + h_u += (cols + 1) * (pu1_top[8 + 2 * cols] - pu1_top[4 - 2 * cols]); h_v += (cols + 1) * (pu1_top[8 + 2 * cols + 1] - pu1_top[4 - 2 * cols+ 1]); v_u += (cols + 1) * (pu1_left[(4 + cols) * (-2)] - pu1_left[(2 - cols) * (-2)]); - v_v += (cols + 1) * (pu1_left[(4 + cols) * (-2) + 1] - pu1_left[(2 - cols) * (-2) + 1]);/*section 8.3.4.4 equation (8-145)*/ + v_v += (cols + 1) * (pu1_left[(4 + cols) * (-2) + 1] - pu1_left[(2 - cols) * (-2) + 1]); } a_u = 16 * (pu1_left[7 * (-2)] + pu1_top[14]); - a_v = 16 * (pu1_left[7 * (-2) + 1] + pu1_top[15]);/*section 8.3.3.4 equation (8-141)*/ - b_u = (34 * h_u + 32) >> 6;/*section 8.3.3.4 equation (8-142)*/ - b_v = (34 * h_v + 32) >> 6;/*section 8.3.3.4 equation (8-142)*/ - c_u = (34 * v_u + 32) >> 6;/*section 8.3.3.4 equation (8-143)*/ - c_v = (34 * v_v + 32) >> 6;/*section 8.3.3.4 equation (8-143)*/ + a_v = 16 * (pu1_left[7 * (-2) + 1] + pu1_top[15]); + b_u = (34 * h_u + 32) >> 6; + b_v = (34 * h_v + 32) >> 6; + c_u = (34 * v_u + 32) >> 6; + c_v = (34 * v_v + 32) >> 6; for(rows = 0; rows < 8; rows++) { for(cols = 0; cols < 8; cols++) { - val = (a_u + b_u * (cols - 3) + c_u * (rows - 3) );/*section 8.3.4.4 equation (8-140)*/ + val = (a_u + b_u * (cols - 3) + c_u * (rows - 3) ); val = (val + 16) >> 5; *(pu1_dst + rows * dst_strd + 2 * cols) = CLIP_U8(val); - val = (a_v + b_v * (cols - 3) + c_v * (rows - 3) );/*section 8.3.4.4 equation (8-140)*/ + val = (a_v + b_v * (cols - 3) + c_v * (rows - 3) ); val = (val + 16) >> 5; *(pu1_dst + rows * dst_strd + 2 * cols + 1) = CLIP_U8(val); } diff --git a/common/ih264_common_tables.c b/common/ih264_common_tables.c index df09f5ac..1489628e 100644 --- a/common/ih264_common_tables.c +++ b/common/ih264_common_tables.c @@ -17,6 +17,7 @@ ***************************************************************************** * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore */ + /** ******************************************************************************* * @file @@ -26,12 +27,10 @@ * Contains common global tables * * @author -* Harish M -* -* @par List of Functions: +* ittiam * * @remarks -* None +* none * ******************************************************************************* */ @@ -40,27 +39,27 @@ /* File Includes */ /*****************************************************************************/ -/* User include files */ +/* User Include Files */ #include "ih264_typedefs.h" -#include "ih264_defs.h" #include "ih264_macros.h" +#include "ih264_defs.h" #include "ih264_structs.h" #include "ih264_common_tables.h" /*****************************************************************************/ -/* Extern global definitions */ +/* Global definitions */ /*****************************************************************************/ /** - ****************************************************************************** - * @brief while encoding, basing on the input configuration parameters, the - * the level of the bitstream is computed basing on the table below. - * input : table_idx - * output : level_idc or cpb size - * @remarks Table A-1 – level table limits - ****************************************************************************** - */ +****************************************************************************** +* @brief while encoding, basing on the input configuration parameters, the +* the level of the bitstream is computed basing on the table below. +* input : table_idx +* output : level_idc or cpb size +* @remarks Table A-1 - level table limits +****************************************************************************** +*/ const level_tables_t gas_ih264_lvl_tbl[16] = { { IH264_LEVEL_10, 1485, 99, 297, 64, 175, 64 }, @@ -81,10 +80,7 @@ const level_tables_t gas_ih264_lvl_tbl[16] = { IH264_LEVEL_51, 983040, 36864, 138240, 240000, 240000, 512 }, }; - -/** - * Array containing supported levels - */ +/* Array containing supported levels */ const WORD32 gai4_ih264_levels[] = { IH264_LEVEL_10, @@ -104,10 +100,7 @@ const WORD32 gai4_ih264_levels[] = IH264_LEVEL_51, }; - -/** - * Array giving size of max luma samples in a picture for a given level - */ +/* Array giving size of max luma samples in a picture for a given level */ const WORD32 gai4_ih264_max_luma_pic_size[] = { /* Level 1 */ @@ -142,9 +135,8 @@ const WORD32 gai4_ih264_max_luma_pic_size[] = 9437184 }; - -/** Max width and height allowed for a given level */ -/** This is derived as SQRT(8 * gai4_ih264_max_luma_pic_size[]) */ +/* Max width and height allowed for a given level */ +/* This is derived as SQRT(8 * gai4_ih264_max_luma_pic_size[]) */ const WORD32 gai4_ih264_max_wd_ht[] = { /* Level 1 */ @@ -179,8 +171,8 @@ const WORD32 gai4_ih264_max_wd_ht[] = 8689 }; -/** Min width and height allowed for a given level */ -/** This is derived as gai4_ih264_max_luma_pic_size[]/gai4_ih264_max_wd_ht[] */ +/* Min width and height allowed for a given level */ +/* This is derived as gai4_ih264_max_luma_pic_size[]/gai4_ih264_max_wd_ht[] */ const WORD32 gai4_ih264_min_wd_ht[] = { /* Level 1 */ @@ -216,8 +208,7 @@ const WORD32 gai4_ih264_min_wd_ht[] = }; - -/** Table 7-11 Macroblock types for I slices */ +/* Table 7-11 Macroblock types for I slices */ intra_mbtype_info_t gas_ih264_i_mbtype_info[] = { /* For first entry, if transform_size_8x8_flag is 1, mode will be MBPART_I8x8 */ @@ -250,7 +241,7 @@ intra_mbtype_info_t gas_ih264_i_mbtype_info[] = {0, MBPART_IPCM, VERT_I16x16, 0, 0} }; -/** Table 7-13 Macroblock types for P slices */ +/* Table 7-13 Macroblock types for P slices */ inter_mbtype_info_t gas_ih264_p_mbtype_info[] = { {1, MBPART_L0, MBPART_NA, 16, 16}, @@ -260,7 +251,7 @@ inter_mbtype_info_t gas_ih264_p_mbtype_info[] = {4, MBPART_NA, MBPART_NA, 8, 8}, }; -/** Table 7-14 Macroblock types for B slices */ +/* Table 7-14 Macroblock types for B slices */ inter_mbtype_info_t gas_ih264_b_mbtype_info[] = { {0, MBPART_DIRECT, MBPART_NA, 8, 8, }, @@ -288,7 +279,7 @@ inter_mbtype_info_t gas_ih264_b_mbtype_info[] = {4, MBPART_NA, MBPART_NA, 8, 8, }, }; -/** Table 7-17 – Sub-macroblock types in P macroblocks */ +/* Table 7-17 - Sub-macroblock types in P macroblocks */ submbtype_info_t gas_ih264_p_submbtype_info[] = { {1, MBPART_L0, 8, 8}, @@ -297,7 +288,7 @@ submbtype_info_t gas_ih264_p_submbtype_info[] = {4, MBPART_L0, 4, 4}, }; -/** Table 7-18 – Sub-macroblock types in B macroblocks */ +/* Table 7-18 - Sub-macroblock types in B macroblocks */ submbtype_info_t gas_ih264_b_submbtype_info[] = { {4, MBPART_DIRECT, 4, 4}, @@ -315,9 +306,6 @@ submbtype_info_t gas_ih264_b_submbtype_info[] = {4, MBPART_BI, 4, 4}, }; - - - const UWORD8 gau1_ih264_inv_scan_prog4x4[] = { 0, 1, 4, 8, @@ -334,7 +322,7 @@ const UWORD8 gau1_ih264_inv_scan_int4x4[] = 3, 7, 11, 15 }; -/** Inverse scan tables for individual 4x4 blocks of 8x8 transform coeffs of CAVLC */ +/* Inverse scan tables for individual 4x4 blocks of 8x8 transform coeffs of CAVLC */ /* progressive */ const UWORD8 gau1_ih264_inv_scan_prog8x8_cavlc[64] = { @@ -347,7 +335,6 @@ const UWORD8 gau1_ih264_inv_scan_prog8x8_cavlc[64] = 16, 10, 25, 5, 33, 34, 6, 28, 56, 36, 23, 51, 45, 46, 54, 63 }; - /* interlace */ const UWORD8 gau1_ih264_inv_scan_int8x8_cavlc[64] = { @@ -361,11 +348,8 @@ const UWORD8 gau1_ih264_inv_scan_int8x8_cavlc[64] = 59, 21, 60, 37, 30, 46, 31, 63 }; - - /*Inverse scan tables for individual 8x8 blocks of 8x8 transform coeffs of CABAC */ /* progressive */ - const UWORD8 gau1_ih264_inv_scan_prog8x8_cabac[64] = { 0, 1, 8, 16, 9, 2, 3, 10, @@ -377,10 +361,7 @@ const UWORD8 gau1_ih264_inv_scan_prog8x8_cabac[64] = 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63 }; - - /* interlace */ - const UWORD8 gau1_ih264_inv_scan_int8x8_cabac[64] = { 0, 8, 16, 1, 9, 24, 32, 17, @@ -393,7 +374,6 @@ const UWORD8 gau1_ih264_inv_scan_int8x8_cabac[64] = 54, 62, 23, 31, 39, 47, 55, 63 }; - const UWORD8 *const gpau1_ih264_inv_scan8x8[] = { gau1_ih264_inv_scan_prog8x8_cavlc, @@ -416,7 +396,6 @@ const UWORD8 gau1_ih264_8x8_subblk_idx[] = 10, 11, 14, 15 }; - /* Table 8-15 Chroma QP offset table */ const UWORD8 gau1_ih264_chroma_qp[] = { @@ -429,7 +408,6 @@ const UWORD8 gau1_ih264_chroma_qp[] = 39, 39, 39, 39 }; - /** ****************************************************************************** * @brief look up table to compute neigbour availability of 4x4 blocks @@ -493,7 +471,7 @@ const UWORD8 gau1_ih264_8x8_ngbr_avbl[16][4] = { 0xf, 0xf, 0xf, 0x7 }, }; -/** Table 7-3 Default intra 4x4 scaling list */ +/* Table 7-3 Default intra 4x4 scaling list */ const UWORD16 gau2_ih264_default_intra4x4_scaling_list[] = { 6, 13, 13, 20, @@ -502,7 +480,7 @@ const UWORD16 gau2_ih264_default_intra4x4_scaling_list[] = 32, 37, 37, 42 }; -/** Table 7-3 Default inter 4x4 scaling list */ +/* Table 7-3 Default inter 4x4 scaling list */ const UWORD16 gau2_ih264_default_inter4x4_scaling_list[] = { 10, 14, 14, 20, @@ -529,7 +507,7 @@ const UWORD16 gau2_ih264_default_inter4x4_weight_scale[] = 24, 27, 30, 34 }; -/** Table 7-4 Default intra 8x8 scaling list */ +/* Table 7-4 Default intra 8x8 scaling list */ const UWORD16 gau2_ih264_default_intra8x8_scaling_list[] = { 6, 10, 10, 13, 11, 13, 16, 16, @@ -542,7 +520,7 @@ const UWORD16 gau2_ih264_default_intra8x8_scaling_list[] = 36, 36, 38, 38, 38, 40, 40, 42 }; -/** Table 7-4 Default inter 8x8 scaling list */ +/* Table 7-4 Default inter 8x8 scaling list */ const UWORD16 gau2_ih264_default_inter8x8_scaling_list[] = { 9, 13, 13, 15, 13, 15, 17, 17, @@ -602,22 +580,20 @@ const UWORD16 gau2_ih264_flat_8x8_weight_scale[] = 16, 16, 16, 16, 16, 16, 16, 16 }; - /** - ****************************************************************************** - * @brief Scale Table for inverse quantizing 4x4 subblock. To inverse quantize - * a given 4x4 quantized block, the coefficient at index location (i,j) is scaled - * by one of the constants in this table and right shift the result by abs (4 - - * floor(qp/6)), here qp is the quantization parameter used to quantize the mb. - * - * input : 16 * qp%6, index location (i,j) - * output : scale constant. - * - * @remarks 16 constants for each index position of the subblock and 6 for each - * qp%6 in the range 0-5 inclusive. - ****************************************************************************** - */ - +****************************************************************************** +* @brief Scale Table for inverse quantizing 4x4 subblock. To inverse quantize +* a given 4x4 quantized block, the coefficient at index location (i,j) is scaled +* by one of the constants in this table and right shift the result by abs (4 - +* floor(qp/6)), here qp is the quantization parameter used to quantize the mb. +* +* input : 16 * qp%6, index location (i,j) +* output : scale constant. +* +* @remarks 16 constants for each index position of the subblock and 6 for each +* qp%6 in the range 0-5 inclusive. +****************************************************************************** +*/ const UWORD16 gau2_ih264_iquant_scale_matrix_4x4[96] = { 10, 13, 10, 13, @@ -653,19 +629,19 @@ const UWORD16 gau2_ih264_iquant_scale_matrix_4x4[96] = }; /** - ****************************************************************************** - * @brief Scale Table for inverse quantizing 8x8 subblock. To inverse quantize - * a given 8x8 quantized block, the coefficient at index location (i,j) is scaled - * by one of the constants in this table and right shift the result by abs (4 - - * floor(qp/6)), here qp is the quantization parameter used to quantize the mb. - * - * input : qp%6, index location (i,j) - * output : scale constant. - * - * @remarks 64 constants for each index position of the subblock and 6 for each - * qp%6 in the range 0-5 inclusive. - ****************************************************************************** - */ +****************************************************************************** +* @brief Scale Table for inverse quantizing 8x8 subblock. To inverse quantize +* a given 8x8 quantized block, the coefficient at index location (i,j) is scaled +* by one of the constants in this table and right shift the result by abs (4 - +* floor(qp/6)), here qp is the quantization parameter used to quantize the mb. +* +* input : qp%6, index location (i,j) +* output : scale constant. +* +* @remarks 64 constants for each index position of the subblock and 6 for each +* qp%6 in the range 0-5 inclusive. +****************************************************************************** +*/ const UWORD16 gau2_ih264_iquant_scale_matrix_8x8 [384] = { 20, 19, 25, 19, 20, 19, 25, 19, diff --git a/common/ih264_common_tables.h b/common/ih264_common_tables.h index d4ec1470..945024f0 100644 --- a/common/ih264_common_tables.h +++ b/common/ih264_common_tables.h @@ -17,6 +17,7 @@ ***************************************************************************** * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore */ + /** ******************************************************************************* * @file @@ -26,12 +27,10 @@ * Common tables * * @author -* Harish -* -* @par List of Functions: +* ittiam * * @remarks -* None +* none * ******************************************************************************* */ @@ -78,15 +77,6 @@ typedef struct /* Extern global declarations */ /*****************************************************************************/ -/** - ****************************************************************************** - * @brief while encoding, basing on the input configuration parameters, the - * the level of the bitstream is computed basing on the table below. - * input : table_idx - * output : level_idc or cpb size - * @remarks Table A-1 – level table limits - ****************************************************************************** - */ extern const level_tables_t gas_ih264_lvl_tbl[16]; extern const WORD32 gai4_ih264_levels[]; diff --git a/common/ih264_deblk_edge_filters.c b/common/ih264_deblk_edge_filters.c index d2ffefdc..c30f7530 100644 --- a/common/ih264_deblk_edge_filters.c +++ b/common/ih264_deblk_edge_filters.c @@ -17,90 +17,90 @@ ***************************************************************************** * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore */ -/**************************************************************************** */ -/* */ -/* File Name : ih264_deblk_edge_filters.c */ -/* */ -/* Description : Contains function definitions for deblocking */ -/* */ -/* List of Functions : ih264_deblk_luma_vert_bs4() */ -/* ih264_deblk_luma_horz_bs4() */ -/* ih264_deblk_luma_vert_bslt4() */ -/* ih264_deblk_luma_horz_bslt4() */ -/* ih264_deblk_luma_vert_bs4_mbaff() */ -/* ih264_deblk_luma_vert_bslt4_mbaff() */ -/* ih264_deblk_chroma_vert_bs4_bp() */ -/* ih264_deblk_chroma_horz_bs4_bp() */ -/* ih264_deblk_chroma_vert_bslt4_bp() */ -/* ih264_deblk_chroma_horz_bslt4_bp() */ -/* ih264_deblk_chroma_vert_bs4_mbaff_bp() */ -/* ih264_deblk_chroma_vert_bslt4_mbaff_bp() */ -/* ih264_deblk_chroma_vert_bs4() */ -/* ih264_deblk_chroma_horz_bs4() */ -/* ih264_deblk_chroma_vert_bslt4() */ -/* ih264_deblk_chroma_horz_bslt4() */ -/* ih264_deblk_chroma_vert_bs4_mbaff() */ -/* ih264_deblk_chroma_vert_bslt4_mbaff() */ -/* */ -/* Issues / Problems : None */ -/* */ -/* Revision History : */ -/* */ -/* DD MM YYYY Author(s) Changes (Describe the changes made) */ -/* 28 11 2013 Ittiam Draft */ -/* 29 12 2014 Kaushik Added double-call vertical */ -/* Senthoor deblocking and high profile */ -/* deblocking functions */ -/* */ -/******************************************************************************/ + +/** +******************************************************************************* +* @file +* ih264_deblk_edge_filters.c +* +* @brief +* Contains function definitions for deblocking +* +* @author +* ittiam +* +* @par List of Functions: +* - ih264_deblk_luma_vert_bs4 +* - ih264_deblk_luma_horz_bs4 +* - ih264_deblk_chroma_vert_bs4_bp +* - ih264_deblk_chroma_horz_bs4_bp +* - ih264_deblk_luma_vert_bslt4 +* - ih264_deblk_chroma_vert_bslt4_bp +* - ih264_deblk_luma_horz_bslt4 +* - ih264_deblk_luma_horz_bslt4 +* - ih264_deblk_luma_vert_bs4_mbaff +* - ih264_deblk_chroma_vert_bs4_mbaff_bp +* - ih264_deblk_luma_vert_bslt4_mbaff +* - ih264_deblk_chroma_vert_bslt4_mbaff_bp +* - ih264_deblk_chroma_vert_bs4 +* - ih264_deblk_chroma_horz_bs4 +* - ih264_deblk_chroma_vert_bslt4 +* - ih264_deblk_chroma_horz_bslt4 +* - ih264_deblk_chroma_vert_bs4_mbaff +* - ih264_deblk_chroma_vert_bslt4_mbaff +* +* @remarks +* none +* +******************************************************************************* +*/ /*****************************************************************************/ /* File Includes */ /*****************************************************************************/ -/* System include files */ +/* System Include Files */ #include -/* User include files */ +/* User Include Files */ #include "ih264_typedefs.h" -#include "ih264_platform_macros.h" -#include "ih264_deblk_edge_filters.h" #include "ih264_macros.h" +#include "ih264_deblk_edge_filters.h" +#include "ih264_platform_macros.h" + /*****************************************************************************/ /* Function Definitions */ /*****************************************************************************/ -/*****************************************************************************/ -/* */ -/* Function Name : ih264_deblk_luma_vert_bs4() */ -/* */ -/* Description : This function performs filtering of a luma block */ -/* vertical edge when the boundary strength is set to 4. */ -/* */ -/* Inputs : pu1_src - pointer to the src sample q0 */ -/* src_strd - source stride */ -/* alpha - alpha value for the boundary */ -/* beta - beta value for the boundary */ -/* */ -/* Globals : None */ -/* */ -/* Processing : This operation is described in Sec. 8.7.2.4 under the */ -/* title "Filtering process for edges for bS equal to 4" in */ -/* ITU T Rec H.264. */ -/* */ -/* Outputs : None */ -/* */ -/* Returns : None */ -/* */ -/* Issues : None */ -/* */ -/* Revision History: */ -/* */ -/* DD MM YYYY Author(s) Changes (Describe the changes made) */ -/* 28 11 2013 Ittiam Draft */ -/* */ -/*****************************************************************************/ +/** +******************************************************************************* +* +* @brief luma vertical edge deblock @ bs4 +* +* @par Description +* This function performs filtering of a luma block vertical edge when the +* boundary strength is set to 4 +* +* @param[in] pu1_src +* pointer to the src sample q0 +* +* @param[in] src_strd +* source stride +* +* @param[in] alpha +* alpha value for the boundary +* +* @param[in] beta +* beta value for the boundary +* +* @returns none +* +* @remarks This operation is described in Sec. 8.7.2.4 under the title +* "Filtering process for edges for bS equal to 4" in ITU T Rec H.264 +* +****************************************************************************** +*/ void ih264_deblk_luma_vert_bs4(UWORD8 *pu1_src, WORD32 src_strd, WORD32 alpha, @@ -191,36 +191,34 @@ void ih264_deblk_luma_vert_bs4(UWORD8 *pu1_src, } } -/*****************************************************************************/ -/* */ -/* Function Name : ih264_deblk_luma_horz_bs4() */ -/* */ -/* Description : This function performs filtering of a luma block */ -/* horizontal edge when the boundary strength is set to 4. */ -/* */ -/* Inputs : pu1_src - pointer to the src sample q0 */ -/* src_strd - source stride */ -/* alpha - alpha value for the boundary */ -/* beta - beta value for the boundary */ -/* */ -/* Globals : None */ -/* */ -/* Processing : This operation is described in Sec. 8.7.2.4 under the */ -/* title "Filtering process for edges for bS equal to 4" in */ -/* ITU T Rec H.264. */ -/* */ -/* Outputs : None */ -/* */ -/* Returns : None */ -/* */ -/* Issues : None */ -/* */ -/* Revision History: */ -/* */ -/* DD MM YYYY Author(s) Changes (Describe the changes made) */ -/* 28 11 2013 Ittiam Draft */ -/* */ -/*****************************************************************************/ +/** +******************************************************************************* +* +* @brief luma horizontal edge deblock @ bs4 +* +* @par Description +* This function performs filtering of a luma block horizontal edge when the +* boundary strength is set to 4 +* +* @param[in] pu1_src +* pointer to the src sample q0 +* +* @param[in] src_strd +* source stride +* +* @param[in] alpha +* alpha value for the boundary +* +* @param[in] beta +* beta value for the boundary +* +* @returns none +* +* @remarks This operation is described in Sec. 8.7.2.4 under the title +* "Filtering process for edges for bS equal to 4" in ITU T Rec H.264 +* +****************************************************************************** +*/ void ih264_deblk_luma_horz_bs4(UWORD8 *pu1_src, WORD32 src_strd, WORD32 alpha, @@ -314,36 +312,34 @@ void ih264_deblk_luma_horz_bs4(UWORD8 *pu1_src, } } -/*****************************************************************************/ -/* */ -/* Function Name : ih264_deblk_chroma_vert_bs4_bp() */ -/* */ -/* Description : This function performs filtering of a chroma block */ -/* vertical edge when the boundary strength is set to 4. */ -/* */ -/* Inputs : pu1_src - pointer to the src sample q0 of U */ -/* src_strd - source stride */ -/* alpha - alpha value for the boundary */ -/* beta - beta value for the boundary */ -/* */ -/* Globals : None */ -/* */ -/* Processing : This operation is described in Sec. 8.7.2.4 under the */ -/* title "Filtering process for edges for bS equal to 4" in */ -/* ITU T Rec H.264. */ -/* */ -/* Outputs : None */ -/* */ -/* Returns : None */ -/* */ -/* Issues : None */ -/* */ -/* Revision History: */ -/* */ -/* DD MM YYYY Author(s) Changes (Describe the changes made) */ -/* 28 11 2013 Ittiam Draft */ -/* */ -/*****************************************************************************/ +/** +******************************************************************************* +* +* @brief chroma vertical edge deblock @ bs4 +* +* @par Description +* This function performs filtering of a chroma block vertical edge when the +* boundary strength is set to 4 +* +* @param[in] pu1_src +* pointer to the src sample q0 of U +* +* @param[in] src_strd +* source stride +* +* @param[in] alpha +* alpha value for the boundary +* +* @param[in] beta +* beta value for the boundary +* +* @returns none +* +* @remarks This operation is described in Sec. 8.7.2.4 under the title +* "Filtering process for edges for bS equal to 4" in ITU T Rec H.264 +* +****************************************************************************** +*/ void ih264_deblk_chroma_vert_bs4_bp(UWORD8 *pu1_src, WORD32 src_strd, WORD32 alpha, @@ -404,36 +400,34 @@ void ih264_deblk_chroma_vert_bs4_bp(UWORD8 *pu1_src, } } -/*****************************************************************************/ -/* */ -/* Function Name : ih264_deblk_chroma_horz_bs4_bp() */ -/* */ -/* Description : This function performs filtering of a chroma block */ -/* horizontal edge when the boundary strength is set to 4. */ -/* */ -/* Inputs : pu1_src - pointer to the src sample q0 of U */ -/* src_strd - source stride */ -/* alpha - alpha value for the boundary */ -/* beta - beta value for the boundary */ -/* */ -/* Globals : None */ -/* */ -/* Processing : This operation is described in Sec. 8.7.2.4 under the */ -/* title "Filtering process for edges for bS equal to 4" in */ -/* ITU T Rec H.264. */ -/* */ -/* Outputs : None */ -/* */ -/* Returns : None */ -/* */ -/* Issues : None */ -/* */ -/* Revision History: */ -/* */ -/* DD MM YYYY Author(s) Changes (Describe the changes made) */ -/* 28 11 2013 Ittiam Draft */ -/* */ -/*****************************************************************************/ +/** +******************************************************************************* +* +* @brief chroma horizontal edge deblock @ bs4 +* +* @par Description +* This function performs filtering of a chroma block horizontal edge when the +* boundary strength is set to 4 +* +* @param[in] pu1_src +* pointer to the src sample q0 of U +* +* @param[in] src_strd +* source stride +* +* @param[in] alpha +* alpha value for the boundary +* +* @param[in] beta +* beta value for the boundary +* +* @returns none +* +* @remarks This operation is described in Sec. 8.7.2.4 under the title +* "Filtering process for edges for bS equal to 4" in ITU T Rec H.264 +* +****************************************************************************** +*/ void ih264_deblk_chroma_horz_bs4_bp(UWORD8 *pu1_src, WORD32 src_strd, WORD32 alpha, @@ -501,38 +495,40 @@ void ih264_deblk_chroma_horz_bs4_bp(UWORD8 *pu1_src, } } -/*****************************************************************************/ -/* */ -/* Function Name : ih264_deblk_luma_vert_bslt4() */ -/* */ -/* Description : This function performs filtering of a luma block */ -/* vertical edge when the boundary strength is less than 4. */ -/* */ -/* Inputs : pu1_src - pointer to the src sample q0 */ -/* src_strd - source stride */ -/* alpha - alpha value for the boundary */ -/* beta - beta value for the boundary */ -/* u4_bs - packed Boundary strength array */ -/* pu1_cliptab - tc0_table */ -/* */ -/* Globals : None */ -/* */ -/* Processing : This operation is described in Sec. 8.7.2.3 under the */ -/* title "Filtering process for edges for bS less than 4" */ -/* in ITU T Rec H.264. */ -/* */ -/* Outputs : None */ -/* */ -/* Returns : None */ -/* */ -/* Issues : None */ -/* */ -/* Revision History: */ -/* */ -/* DD MM YYYY Author(s) Changes (Describe the changes made) */ -/* 28 11 2013 Ittiam Draft */ -/* */ -/*****************************************************************************/ +/** +******************************************************************************* +* +* @brief luma vertical edge deblock @ bs < 4 +* +* @par Description +* This function performs filtering of a luma block vertical edge when the +* boundary strength is less than 4 +* +* @param[in] pu1_src +* pointer to the src sample q0 +* +* @param[in] src_strd +* source stride +* +* @param[in] alpha +* alpha value for the boundary +* +* @param[in] beta +* beta value for the boundary +* +* @param[in] u4_bs +* packed Boundary strength array +* +* @param[in] pu1_cliptab +* tc0_table +* +* @returns none +* +* @remarks This operation is described in Sec. 8.7.2.3 under the title +* "Filtering process for edges for bS less than 4" in ITU T Rec H.264 +* +****************************************************************************** +*/ void ih264_deblk_luma_vert_bslt4(UWORD8 *pu1_src, WORD32 src_strd, WORD32 alpha, @@ -617,38 +613,40 @@ void ih264_deblk_luma_vert_bslt4(UWORD8 *pu1_src, } } -/*****************************************************************************/ -/* */ -/* Function Name : ih264_deblk_chroma_vert_bslt4_bp() */ -/* */ -/* Description : This function performs filtering of a chroma block */ -/* vertical edge when the boundary strength is less than 4. */ -/* */ -/* Inputs : pu1_src - pointer to the src sample q0 of U */ -/* src_strd - source stride */ -/* alpha - alpha value for the boundary */ -/* beta - beta value for the boundary */ -/* u4_bs - packed Boundary strength array */ -/* pu1_cliptab - tc0_table */ -/* */ -/* Globals : None */ -/* */ -/* Processing : This operation is described in Sec. 8.7.2.3 under the */ -/* title "Filtering process for edges for bS less than 4" */ -/* in ITU T Rec H.264. */ -/* */ -/* Outputs : None */ -/* */ -/* Returns : None */ -/* */ -/* Issues : None */ -/* */ -/* Revision History: */ -/* */ -/* DD MM YYYY Author(s) Changes (Describe the changes made) */ -/* 28 11 2013 Ittiam Draft */ -/* */ -/*****************************************************************************/ +/** +******************************************************************************* +* +* @brief chroma vertical edge deblock @ bs < 4 +* +* @par Description +* This function performs filtering of a chroma block vertical edge when the +* boundary strength is less than 4 +* +* @param[in] pu1_src +* pointer to the src sample q0 of U +* +* @param[in] src_strd +* source stride +* +* @param[in] alpha +* alpha value for the boundary +* +* @param[in] beta +* beta value for the boundary +* +* @param[in] u4_bs +* packed Boundary strength array +* +* @param[in] pu1_cliptab +* tc0_table +* +* @returns none +* +* @remarks This operation is described in Sec. 8.7.2.3 under the title +* "Filtering process for edges for bS less than 4" in ITU T Rec H.264 +* +****************************************************************************** +*/ void ih264_deblk_chroma_vert_bslt4_bp(UWORD8 *pu1_src, WORD32 src_strd, WORD32 alpha, @@ -731,38 +729,40 @@ void ih264_deblk_chroma_vert_bslt4_bp(UWORD8 *pu1_src, } } -/*****************************************************************************/ -/* */ -/* Function Name : ih264_deblk_luma_horz_bslt4() */ -/* */ -/* Description : This function performs filtering of a luma block */ -/* horizontal edge when boundary strength is less than 4. */ -/* */ -/* Inputs : pu1_src - pointer to the src sample q0 */ -/* src_strd - source stride */ -/* alpha - alpha value for the boundary */ -/* beta - beta value for the boundary */ -/* u4_bs - packed Boundary strength array */ -/* pu1_cliptab - tc0_table */ -/* */ -/* Globals : None */ -/* */ -/* Processing : This operation is described in Sec. 8.7.2.3 under the */ -/* title "Filtering process for edges for bS less than 4" */ -/* in ITU T Rec H.264. */ -/* */ -/* Outputs : None */ -/* */ -/* Returns : None */ -/* */ -/* Issues : None */ -/* */ -/* Revision History: */ -/* */ -/* DD MM YYYY Author(s) Changes (Describe the changes made) */ -/* 28 11 2013 Ittiam Draft */ -/* */ -/*****************************************************************************/ +/** +******************************************************************************* +* +* @brief luma horizontal edge deblock @ bs < 4 +* +* @par Description +* This function performs filtering of a luma block horizontal edge when the +* boundary strength is less than 4 +* +* @param[in] pu1_src +* pointer to the src sample q0 +* +* @param[in] src_strd +* source stride +* +* @param[in] alpha +* alpha value for the boundary +* +* @param[in] beta +* beta value for the boundary +* +* @param[in] u4_bs +* packed Boundary strength array +* +* @param[in] pu1_cliptab +* tc0_table +* +* @returns none +* +* @remarks This operation is described in Sec. 8.7.2.3 under the title +* "Filtering process for edges for bS less than 4" in ITU T Rec H.264 +* +****************************************************************************** +*/ void ih264_deblk_luma_horz_bslt4(UWORD8 *pu1_src, WORD32 src_strd, WORD32 alpha, @@ -850,38 +850,40 @@ void ih264_deblk_luma_horz_bslt4(UWORD8 *pu1_src, } } -/*****************************************************************************/ -/* */ -/* Function Name : ih264_deblk_chroma_horz_bslt4_bp() */ -/* */ -/* Description : This function performs filtering of a chroma block */ -/* horizontal edge when boundary strength is less than 4. */ -/* */ -/* Inputs : pu1_src - pointer to the src sample q0 of U */ -/* src_strd - source stride */ -/* alpha - alpha value for the boundary */ -/* beta - beta value for the boundary */ -/* u4_bs - packed Boundary strength array */ -/* pu1_cliptab - tc0_table */ -/* */ -/* Globals : None */ -/* */ -/* Processing : This operation is described in Sec. 8.7.2.3 under the */ -/* title "Filtering process for edges for bS less than 4" */ -/* in ITU T Rec H.264. */ -/* */ -/* Outputs : None */ -/* */ -/* Returns : None */ -/* */ -/* Issues : None */ -/* */ -/* Revision History: */ -/* */ -/* DD MM YYYY Author(s) Changes (Describe the changes made) */ -/* 28 11 2013 Ittiam Draft */ -/* */ -/*****************************************************************************/ +/** +******************************************************************************* +* +* @brief chroma horizontal edge deblock @ bs < 4 +* +* @par Description +* This function performs filtering of a chroma block horizontal edge when the +* boundary strength is less than 4 +* +* @param[in] pu1_src +* pointer to the src sample q0 of U +* +* @param[in] src_strd +* source stride +* +* @param[in] alpha +* alpha value for the boundary +* +* @param[in] beta +* beta value for the boundary +* +* @param[in] u4_bs +* packed Boundary strength array +* +* @param[in] pu1_cliptab +* tc0_table +* +* @returns none +* +* @remarks This operation is described in Sec. 8.7.2.3 under the title +* "Filtering process for edges for bS less than 4" in ITU T Rec H.264 +* +****************************************************************************** +*/ void ih264_deblk_chroma_horz_bslt4_bp(UWORD8 *pu1_src, WORD32 src_strd, WORD32 alpha, @@ -975,37 +977,34 @@ void ih264_deblk_chroma_horz_bslt4_bp(UWORD8 *pu1_src, /* Function Definitions for vertical edge deblocking for double-call */ /*****************************************************************************/ -/*****************************************************************************/ -/* */ -/* Function Name : ih264_deblk_luma_vert_bs4_mbaff() */ -/* */ -/* Description : This function performs filtering of a luma block */ -/* vertical edge when boundary strength is set to 4. */ -/* */ -/* Inputs : pu1_src - pointer to the src sample q0 */ -/* src_strd - source stride */ -/* alpha - alpha value for the boundary */ -/* beta - beta value for the boundary */ -/* */ -/* Globals : None */ -/* */ -/* Processing : When the function is called twice, this operation is as */ -/* described in Sec. 8.7.2.3 under the title "Filtering */ -/* process for edges for bS equal to 4" in ITU T Rec H.264. */ -/* */ -/* Outputs : None */ -/* */ -/* Returns : None */ -/* */ -/* Issues : None */ -/* */ -/* Revision History: */ -/* */ -/* DD MM YYYY Author(s) Changes (Describe the changes made) */ -/* 29 12 2014 Kaushik Draft */ -/* Senthoor */ -/* */ -/*****************************************************************************/ +/** +******************************************************************************* +* +* @brief luma vertical edge deblock @ bs4 +* +* @par Description +* This function performs filtering of a luma block vertical edge when the +* boundary strength is set to 4 +* +* @param[in] pu1_src +* pointer to the src sample q0 +* +* @param[in] src_strd +* source stride +* +* @param[in] alpha +* alpha value for the boundary +* +* @param[in] beta +* beta value for the boundary +* +* @returns none +* +* @remarks This operation is described in Sec. 8.7.2.4 under the title +* "Filtering process for edges for bS equal to 4" in ITU T Rec H.264 +* +****************************************************************************** +*/ void ih264_deblk_luma_vert_bs4_mbaff(UWORD8 *pu1_src, WORD32 src_strd, WORD32 alpha, @@ -1096,37 +1095,34 @@ void ih264_deblk_luma_vert_bs4_mbaff(UWORD8 *pu1_src, } } -/*****************************************************************************/ -/* */ -/* Function Name : ih264_deblk_chroma_vert_bs4_mbaff_bp() */ -/* */ -/* Description : This function performs filtering of a chroma block */ -/* vertical edge when boundary strength is set to 4. */ -/* */ -/* Inputs : pu1_src - pointer to the src sample q0 of U */ -/* src_strd - source stride */ -/* alpha - alpha value for the boundary */ -/* beta - beta value for the boundary */ -/* */ -/* Globals : None */ -/* */ -/* Processing : When the function is called twice, this operation is as */ -/* described in Sec. 8.7.2.3 under the title "Filtering */ -/* process for edges for bS equal to 4" in ITU T Rec H.264. */ -/* */ -/* Outputs : None */ -/* */ -/* Returns : None */ -/* */ -/* Issues : None */ -/* */ -/* Revision History: */ -/* */ -/* DD MM YYYY Author(s) Changes (Describe the changes made) */ -/* 29 12 2014 Kaushik Draft */ -/* Senthoor */ -/* */ -/*****************************************************************************/ +/** +******************************************************************************* +* +* @brief chroma vertical edge deblock @ bs4 +* +* @par Description +* This function performs filtering of a chroma block vertical edge when the +* boundary strength is set to 4 +* +* @param[in] pu1_src +* pointer to the src sample q0 of U +* +* @param[in] src_strd +* source stride +* +* @param[in] alpha +* alpha value for the boundary +* +* @param[in] beta +* beta value for the boundary +* +* @returns none +* +* @remarks This operation is described in Sec. 8.7.2.4 under the title +* "Filtering process for edges for bS equal to 4" in ITU T Rec H.264 +* +****************************************************************************** +*/ void ih264_deblk_chroma_vert_bs4_mbaff_bp(UWORD8 *pu1_src, WORD32 src_strd, WORD32 alpha, @@ -1183,39 +1179,40 @@ void ih264_deblk_chroma_vert_bs4_mbaff_bp(UWORD8 *pu1_src, } } -/*****************************************************************************/ -/* */ -/* Function Name : ih264_deblk_luma_vert_bslt4_mbaff() */ -/* */ -/* Description : This function performs filtering of a luma block */ -/* vertical edge when boundary strength is less than 4. */ -/* */ -/* Inputs : pu1_src - pointer to the src sample q0 */ -/* src_strd - source stride */ -/* alpha - alpha value for the boundary */ -/* beta - beta value for the boundary */ -/* u4_bs - packed Boundary strength array */ -/* pu1_cliptab - tc0_table */ -/* */ -/* Globals : None */ -/* */ -/* Processing : When the function is called twice, this operation is as */ -/* described in Sec. 8.7.2.3 under the title "Filtering */ -/* process for edges for bS less than 4" in ITU T Rec H.264.*/ -/* */ -/* Outputs : None */ -/* */ -/* Returns : None */ -/* */ -/* Issues : None */ -/* */ -/* Revision History: */ -/* */ -/* DD MM YYYY Author(s) Changes (Describe the changes made) */ -/* 29 12 2014 Kaushik Draft */ -/* Senthoor */ -/* */ -/*****************************************************************************/ +/** +******************************************************************************* +* +* @brief luma vertical edge deblock @ bs < 4 +* +* @par Description +* This function performs filtering of a luma block vertical edge when the +* boundary strength is less than 4 +* +* @param[in] pu1_src +* pointer to the src sample q0 +* +* @param[in] src_strd +* source stride +* +* @param[in] alpha +* alpha value for the boundary +* +* @param[in] beta +* beta value for the boundary +* +* @param[in] u4_bs +* packed Boundary strength array +* +* @param[in] pu1_cliptab +* tc0_table +* +* @returns none +* +* @remarks This operation is described in Sec. 8.7.2.3 under the title +* "Filtering process for edges for bS less than 4" in ITU T Rec H.264 +* +****************************************************************************** +*/ void ih264_deblk_luma_vert_bslt4_mbaff(UWORD8 *pu1_src, WORD32 src_strd, WORD32 alpha, @@ -1299,39 +1296,40 @@ void ih264_deblk_luma_vert_bslt4_mbaff(UWORD8 *pu1_src, } } -/*****************************************************************************/ -/* */ -/* Function Name : ih264_deblk_chroma_vert_bslt4_mbaff_bp() */ -/* */ -/* Description : This function performs filtering of a chroma block */ -/* vertical edge when boundary strength is less than 4. */ -/* */ -/* Inputs : pu1_src - pointer to the src sample q0 of U */ -/* src_strd - source stride */ -/* alpha - alpha value for the boundary */ -/* beta - beta value for the boundary */ -/* u4_bs - packed Boundary strength array */ -/* pu1_cliptab - tc0_table */ -/* */ -/* Globals : None */ -/* */ -/* Processing : When the function is called twice, this operation is as */ -/* described in Sec. 8.7.2.3 under the title "Filtering */ -/* process for edges for bS less than 4" in ITU T Rec H.264.*/ -/* */ -/* Outputs : None */ -/* */ -/* Returns : None */ -/* */ -/* Issues : None */ -/* */ -/* Revision History: */ -/* */ -/* DD MM YYYY Author(s) Changes (Describe the changes made) */ -/* 29 12 2014 Kaushik Draft */ -/* Senthoor */ -/* */ -/*****************************************************************************/ +/** +******************************************************************************* +* +* @brief chroma vertical edge deblock @ bs < 4 +* +* @par Description +* This function performs filtering of a chroma block vertical edge when the +* boundary strength is less than 4 +* +* @param[in] pu1_src +* pointer to the src sample q0 of U +* +* @param[in] src_strd +* source stride +* +* @param[in] alpha +* alpha value for the boundary +* +* @param[in] beta +* beta value for the boundary +* +* @param[in] u4_bs +* packed Boundary strength array +* +* @param[in] pu1_cliptab +* tc0_table +* +* @returns none +* +* @remarks This operation is described in Sec. 8.7.2.3 under the title +* "Filtering process for edges for bS less than 4" in ITU T Rec H.264 +* +****************************************************************************** +*/ void ih264_deblk_chroma_vert_bslt4_mbaff_bp(UWORD8 *pu1_src, WORD32 src_strd, WORD32 alpha, @@ -1415,41 +1413,40 @@ void ih264_deblk_chroma_vert_bslt4_mbaff_bp(UWORD8 *pu1_src, /* Function Definitions for chroma deblocking in high profile */ /*****************************************************************************/ -/*****************************************************************************/ -/* */ -/* Function Name : ih264_deblk_chroma_vert_bs4() */ -/* */ -/* Description : This function performs filtering of a chroma block */ -/* vertical edge when the boundary strength is set to 4 in */ -/* high profile. */ -/* */ -/* Inputs : pu1_src - pointer to the src sample q0 of U */ -/* src_strd - source stride */ -/* alpha_cb - alpha value for the boundary in U */ -/* beta_cb - beta value for the boundary in U */ -/* alpha_cr - alpha value for the boundary in V */ -/* beta_cr - beta value for the boundary in V */ -/* */ -/* Globals : None */ -/* */ -/* Processing : This operation is described in Sec. 8.7.2.4 under the */ -/* title "Filtering process for edges for bS equal to 4" in */ -/* ITU T Rec H.264 with alpha and beta values different in */ -/* U and V. */ -/* */ -/* Outputs : None */ -/* */ -/* Returns : None */ -/* */ -/* Issues : None */ -/* */ -/* Revision History: */ -/* */ -/* DD MM YYYY Author(s) Changes (Describe the changes made) */ -/* 29 12 2014 Kaushik Draft */ -/* Senthoor */ -/* */ -/*****************************************************************************/ +/** +******************************************************************************* +* +* @brief chroma vertical edge deblock @ bs4 +* +* @par Description +* This function performs filtering of a chroma block vertical edge when the +* boundary strength is set to 4 +* +* @param[in] pu1_src +* pointer to the src sample q0 of U +* +* @param[in] src_strd +* source stride +* +* @param[in] alpha_cb +* alpha value for the boundary of U +* +* @param[in] beta_cb +* beta value for the boundary of U +* +* @param[in] alpha_cr +* alpha value for the boundary of V +* +* @param[in] beta_cr +* beta value for the boundary of V +* +* @returns none +* +* @remarks This operation is described in Sec. 8.7.2.4 under the title +* "Filtering process for edges for bS equal to 4" in ITU T Rec H.264 +* +****************************************************************************** +*/ void ih264_deblk_chroma_vert_bs4(UWORD8 *pu1_src, WORD32 src_strd, WORD32 alpha_cb, @@ -1512,41 +1509,40 @@ void ih264_deblk_chroma_vert_bs4(UWORD8 *pu1_src, } } -/*****************************************************************************/ -/* */ -/* Function Name : ih264_deblk_chroma_horz_bs4() */ -/* */ -/* Description : This function performs filtering of a chroma block */ -/* horizontal edge when the boundary strength is set to 4 */ -/* in high profile. */ -/* */ -/* Inputs : pu1_src - pointer to the src sample q0 of U */ -/* src_strd - source stride */ -/* alpha_cb - alpha value for the boundary in U */ -/* beta_cb - beta value for the boundary in U */ -/* alpha_cr - alpha value for the boundary in V */ -/* beta_cr - beta value for the boundary in V */ -/* */ -/* Globals : None */ -/* */ -/* Processing : This operation is described in Sec. 8.7.2.4 under the */ -/* title "Filtering process for edges for bS equal to 4" in */ -/* ITU T Rec H.264 with alpha and beta values different in */ -/* U and V. */ -/* */ -/* Outputs : None */ -/* */ -/* Returns : None */ -/* */ -/* Issues : None */ -/* */ -/* Revision History: */ -/* */ -/* DD MM YYYY Author(s) Changes (Describe the changes made) */ -/* 29 12 2014 Kaushik Draft */ -/* Senthoor */ -/* */ -/*****************************************************************************/ +/** +******************************************************************************* +* +* @brief chroma horizontal edge deblock @ bs4 +* +* @par Description +* This function performs filtering of a chroma block horizontal edge when the +* boundary strength is set to 4 +* +* @param[in] pu1_src +* pointer to the src sample q0 of U +* +* @param[in] src_strd +* source stride +* +* @param[in] alpha_cb +* alpha value for the boundary of U +* +* @param[in] beta_cb +* beta value for the boundary of U +* +* @param[in] alpha_cr +* alpha value for the boundary of V +* +* @param[in] beta_cr +* beta value for the boundary of V +* +* @returns none +* +* @remarks This operation is described in Sec. 8.7.2.4 under the title +* "Filtering process for edges for bS equal to 4" in ITU T Rec H.264 +* +****************************************************************************** +*/ void ih264_deblk_chroma_horz_bs4(UWORD8 *pu1_src, WORD32 src_strd, WORD32 alpha_cb, @@ -1614,44 +1610,49 @@ void ih264_deblk_chroma_horz_bs4(UWORD8 *pu1_src, } } -/*****************************************************************************/ -/* */ -/* Function Name : ih264_deblk_chroma_vert_bslt4() */ -/* */ -/* Description : This function performs filtering of a chroma block */ -/* vertical edge when the boundary strength is less than 4 */ -/* in high profile. */ -/* */ -/* Inputs : pu1_src - pointer to the src sample q0 of U */ -/* src_strd - source stride */ -/* alpha_cb - alpha value for the boundary in U */ -/* beta_cb - beta value for the boundary in U */ -/* alpha_cr - alpha value for the boundary in V */ -/* beta_cr - beta value for the boundary in V */ -/* u4_bs - packed Boundary strength array */ -/* pu1_cliptab_cb - tc0_table for U */ -/* pu1_cliptab_cr - tc0_table for V */ -/* */ -/* Globals : None */ -/* */ -/* Processing : This operation is described in Sec. 8.7.2.3 under the */ -/* title "Filtering process for edges for bS less than 4" */ -/* in ITU T Rec H.264 with alpha and beta values different */ -/* in U and V. */ -/* */ -/* Outputs : None */ -/* */ -/* Returns : None */ -/* */ -/* Issues : None */ -/* */ -/* Revision History: */ -/* */ -/* DD MM YYYY Author(s) Changes (Describe the changes made) */ -/* 29 12 2014 Kaushik Draft */ -/* Senthoor */ -/* */ -/*****************************************************************************/ +/** +******************************************************************************* +* +* @brief chroma vertical edge deblock @ bs < 4 +* +* @par Description +* This function performs filtering of a chroma block vertical edge when the +* boundary strength is less than 4 +* +* @param[in] pu1_src +* pointer to the src sample q0 of U +* +* @param[in] src_strd +* source stride +* +* @param[in] alpha_cb +* alpha value for the boundary of U +* +* @param[in] beta_cb +* beta value for the boundary of U +* +* @param[in] alpha_cr +* alpha value for the boundary of V +* +* @param[in] beta_cr +* beta value for the boundary of V +* +* @param[in] u4_bs +* packed Boundary strength array +* +* @param[in] pu1_cliptab_cb +* tc0_table of U +* +* @param[in] pu1_cliptab_cr +* tc0_table of V +* +* @returns none +* +* @remarks This operation is described in Sec. 8.7.2.3 under the title +* "Filtering process for edges for bS less than 4" in ITU T Rec H.264 +* +****************************************************************************** +*/ void ih264_deblk_chroma_vert_bslt4(UWORD8 *pu1_src, WORD32 src_strd, WORD32 alpha_cb, @@ -1737,44 +1738,49 @@ void ih264_deblk_chroma_vert_bslt4(UWORD8 *pu1_src, } } -/*****************************************************************************/ -/* */ -/* Function Name : ih264_deblk_chroma_horz_bslt4() */ -/* */ -/* Description : This function performs filtering of a chroma block */ -/* horizontal edge when the boundary strength is less than */ -/* 4 in high profile. */ -/* */ -/* Inputs : pu1_src - pointer to the src sample q0 of U */ -/* src_strd - source stride */ -/* alpha_cb - alpha value for the boundary in U */ -/* beta_cb - beta value for the boundary in U */ -/* alpha_cr - alpha value for the boundary in V */ -/* beta_cr - beta value for the boundary in V */ -/* u4_bs - packed Boundary strength array */ -/* pu1_cliptab_cb - tc0_table for U */ -/* pu1_cliptab_cr - tc0_table for V */ -/* */ -/* Globals : None */ -/* */ -/* Processing : This operation is described in Sec. 8.7.2.3 under the */ -/* title "Filtering process for edges for bS less than 4" */ -/* in ITU T Rec H.264 with alpha and beta values different */ -/* in U and V. */ -/* */ -/* Outputs : None */ -/* */ -/* Returns : None */ -/* */ -/* Issues : None */ -/* */ -/* Revision History: */ -/* */ -/* DD MM YYYY Author(s) Changes (Describe the changes made) */ -/* 29 12 2014 Kaushik Draft */ -/* Senthoor */ -/* */ -/*****************************************************************************/ +/** +******************************************************************************* +* +* @brief chroma horizontal edge deblock @ bs < 4 +* +* @par Description +* This function performs filtering of a chroma block horizontal edge when the +* boundary strength is less than 4 +* +* @param[in] pu1_src +* pointer to the src sample q0 of U +* +* @param[in] src_strd +* source stride +* +* @param[in] alpha_cb +* alpha value for the boundary of U +* +* @param[in] beta_cb +* beta value for the boundary of U +* +* @param[in] alpha_cr +* alpha value for the boundary of V +* +* @param[in] beta_cr +* beta value for the boundary of V +* +* @param[in] u4_bs +* packed Boundary strength array +* +* @param[in] pu1_cliptab_cb +* tc0_table of U +* +* @param[in] pu1_cliptab_cr +* tc0_table of V +* +* @returns none +* +* @remarks This operation is described in Sec. 8.7.2.3 under the title +* "Filtering process for edges for bS less than 4" in ITU T Rec H.264 +* +****************************************************************************** +*/ void ih264_deblk_chroma_horz_bslt4(UWORD8 *pu1_src, WORD32 src_strd, WORD32 alpha_cb, @@ -1869,44 +1875,40 @@ void ih264_deblk_chroma_horz_bslt4(UWORD8 *pu1_src, } } -/*****************************************************************************/ -/* */ -/* Function Name : ih264_deblk_chroma_vert_bs4_mbaff() */ -/* */ -/* Description : This function performs filtering of a chroma block */ -/* vertical edge when boundary strength is set to 4 in high */ -/* profile. */ -/* */ -/* Inputs : pu1_src - pointer to the src sample q0 of U */ -/* src_strd - source stride */ -/* alpha_cb - alpha value for the boundary in U */ -/* beta_cb - beta value for the boundary in U */ -/* alpha_cr - alpha value for the boundary in V */ -/* beta_cr - beta value for the boundary in V */ -/* u4_bs - packed Boundary strength array */ -/* pu1_cliptab_cb - tc0_table for U */ -/* pu1_cliptab_cr - tc0_table for V */ -/* */ -/* Globals : None */ -/* */ -/* Processing : When the function is called twice, this operation is as */ -/* described in Sec. 8.7.2.4 under the title "Filtering */ -/* process for edges for bS equal to 4" in ITU T Rec H.264 */ -/* with alpha and beta values different in U and V. */ -/* */ -/* Outputs : None */ -/* */ -/* Returns : None */ -/* */ -/* Issues : None */ -/* */ -/* Revision History: */ -/* */ -/* DD MM YYYY Author(s) Changes (Describe the changes made) */ -/* 29 12 2014 Kaushik Draft */ -/* Senthoor */ -/* */ -/*****************************************************************************/ +/** +******************************************************************************* +* +* @brief chroma vertical edge deblock @ bs4 +* +* @par Description +* This function performs filtering of a chroma block vertical edge when the +* boundary strength is set to 4 +* +* @param[in] pu1_src +* pointer to the src sample q0 of U +* +* @param[in] src_strd +* source stride +* +* @param[in] alpha_cb +* alpha value for the boundary of U +* +* @param[in] beta_cb +* beta value for the boundary of U +* +* @param[in] alpha_cr +* alpha value for the boundary of V +* +* @param[in] beta_cr +* beta value for the boundary of V +* +* @returns none +* +* @remarks This operation is described in Sec. 8.7.2.4 under the title +* "Filtering process for edges for bS equal to 4" in ITU T Rec H.264 +* +****************************************************************************** +*/ void ih264_deblk_chroma_vert_bs4_mbaff(UWORD8 *pu1_src, WORD32 src_strd, WORD32 alpha_cb, @@ -1965,44 +1967,49 @@ void ih264_deblk_chroma_vert_bs4_mbaff(UWORD8 *pu1_src, } } -/*****************************************************************************/ -/* */ -/* Function Name : ih264_deblk_chroma_vert_bslt4_mbaff() */ -/* */ -/* Description : This function performs filtering of a chroma block */ -/* vertical edge when boundary strength is less than 4 in */ -/* high profile. */ -/* */ -/* Inputs : pu1_src - pointer to the src sample q0 of U */ -/* src_strd - source stride */ -/* alpha_cb - alpha value for the boundary in U */ -/* beta_cb - beta value for the boundary in U */ -/* alpha_cr - alpha value for the boundary in V */ -/* beta_cr - beta value for the boundary in V */ -/* u4_bs - packed Boundary strength array */ -/* pu1_cliptab_cb - tc0_table for U */ -/* pu1_cliptab_cr - tc0_table for V */ -/* */ -/* Globals : None */ -/* */ -/* Processing : When the function is called twice, this operation is as */ -/* described in Sec. 8.7.2.4 under the title "Filtering */ -/* process for edges for bS less than 4" in ITU T Rec H.264 */ -/* with alpha and beta values different in U and V. */ -/* */ -/* Outputs : None */ -/* */ -/* Returns : None */ -/* */ -/* Issues : None */ -/* */ -/* Revision History: */ -/* */ -/* DD MM YYYY Author(s) Changes (Describe the changes made) */ -/* 29 12 2014 Kaushik Draft */ -/* Senthoor */ -/* */ -/*****************************************************************************/ +/** +******************************************************************************* +* +* @brief chroma vertical edge deblock @ bs < 4 +* +* @par Description +* This function performs filtering of a chroma block vertical edge when the +* boundary strength is less than 4 +* +* @param[in] pu1_src +* pointer to the src sample q0 of U +* +* @param[in] src_strd +* source stride +* +* @param[in] alpha_cb +* alpha value for the boundary of U +* +* @param[in] beta_cb +* beta value for the boundary of U +* +* @param[in] alpha_cr +* alpha value for the boundary of V +* +* @param[in] beta_cr +* beta value for the boundary of V +* +* @param[in] u4_bs +* packed Boundary strength array +* +* @param[in] pu1_cliptab_cb +* tc0_table of U +* +* @param[in] pu1_cliptab_cr +* tc0_table of V +* +* @returns none +* +* @remarks This operation is described in Sec. 8.7.2.3 under the title +* "Filtering process for edges for bS less than 4" in ITU T Rec H.264 +* +****************************************************************************** +*/ void ih264_deblk_chroma_vert_bslt4_mbaff(UWORD8 *pu1_src, WORD32 src_strd, WORD32 alpha_cb, diff --git a/common/ih264_deblk_edge_filters.h b/common/ih264_deblk_edge_filters.h index 4079dd2c..455d4b0a 100644 --- a/common/ih264_deblk_edge_filters.h +++ b/common/ih264_deblk_edge_filters.h @@ -17,25 +17,26 @@ ***************************************************************************** * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore */ + /** - ******************************************************************************* - * @file - * ih264_deblk_edge_filters.h - * - * @brief - * This file contains declarations of functions used for deblocking - * - * @author - * Ittiam - * - * @remarks - * None - * - ******************************************************************************* - */ +******************************************************************************* +* @file +* ih264_deblk_edge_filters.h +* +* @brief +* This file contains declarations of functions used for deblocking +* +* @author +* ittiam +* +* @remarks +* none +* +******************************************************************************* +*/ -#ifndef IH264_DEBLK_H_ -#define IH264_DEBLK_H_ +#ifndef _IH264_DEBLK_EDGE_FILTERS_H_ +#define _IH264_DEBLK_EDGE_FILTERS_H_ /*****************************************************************************/ /* Extern Function Declarations */ @@ -70,126 +71,92 @@ typedef void ih264_deblk_chroma_edge_bs4_ft(UWORD8 *pu1_src, WORD32 alpha_cr, WORD32 beta_cr); - - +/* C Declarations */ ih264_deblk_edge_bs4_ft ih264_deblk_luma_horz_bs4; ih264_deblk_edge_bs4_ft ih264_deblk_luma_vert_bs4; ih264_deblk_edge_bs4_ft ih264_deblk_luma_vert_bs4_mbaff; - - ih264_deblk_edge_bs4_ft ih264_deblk_chroma_horz_bs4_bp; ih264_deblk_edge_bs4_ft ih264_deblk_chroma_vert_bs4_bp; ih264_deblk_edge_bs4_ft ih264_deblk_chroma_vert_bs4_mbaff_bp; - - ih264_deblk_edge_bslt4_ft ih264_deblk_luma_horz_bslt4; ih264_deblk_edge_bslt4_ft ih264_deblk_luma_vert_bslt4; ih264_deblk_edge_bslt4_ft ih264_deblk_luma_vert_bslt4_mbaff; - - ih264_deblk_edge_bslt4_ft ih264_deblk_chroma_horz_bslt4_bp; ih264_deblk_edge_bslt4_ft ih264_deblk_chroma_vert_bslt4_bp; ih264_deblk_edge_bslt4_ft ih264_deblk_chroma_vert_bslt4_mbaff_bp; - ih264_deblk_chroma_edge_bs4_ft ih264_deblk_chroma_vert_bs4; ih264_deblk_chroma_edge_bs4_ft ih264_deblk_chroma_horz_bs4; ih264_deblk_chroma_edge_bs4_ft ih264_deblk_chroma_vert_bs4_mbaff; ih264_deblk_chroma_edge_bs4_ft ih264_deblk_chroma_horz_bs4_mbaff; - ih264_deblk_chroma_edge_bslt4_ft ih264_deblk_chroma_vert_bslt4; ih264_deblk_chroma_edge_bslt4_ft ih264_deblk_chroma_horz_bslt4; ih264_deblk_chroma_edge_bslt4_ft ih264_deblk_chroma_vert_bslt4_mbaff; ih264_deblk_chroma_edge_bslt4_ft ih264_deblk_chroma_horz_bslt4_mbaff; - -/*A9*/ +/* A9 Declarations */ ih264_deblk_edge_bs4_ft ih264_deblk_luma_horz_bs4_a9; ih264_deblk_edge_bs4_ft ih264_deblk_luma_vert_bs4_a9; ih264_deblk_edge_bs4_ft ih264_deblk_luma_vert_bs4_mbaff_a9; - - ih264_deblk_edge_bs4_ft ih264_deblk_chroma_horz_bs4_bp_a9; ih264_deblk_edge_bs4_ft ih264_deblk_chroma_vert_bs4_bp_a9; ih264_deblk_edge_bs4_ft ih264_deblk_chroma_vert_bs4_mbaff_bp_a9; - - ih264_deblk_edge_bslt4_ft ih264_deblk_luma_horz_bslt4_a9; ih264_deblk_edge_bslt4_ft ih264_deblk_luma_vert_bslt4_a9; ih264_deblk_edge_bslt4_ft ih264_deblk_luma_vert_bslt4_mbaff_a9; - - ih264_deblk_edge_bslt4_ft ih264_deblk_chroma_horz_bslt4_bp_a9; ih264_deblk_edge_bslt4_ft ih264_deblk_chroma_vert_bslt4_bp_a9; ih264_deblk_edge_bslt4_ft ih264_deblk_chroma_vert_bslt4_mbaff_bp_a9; - ih264_deblk_chroma_edge_bs4_ft ih264_deblk_chroma_vert_bs4_a9; ih264_deblk_chroma_edge_bs4_ft ih264_deblk_chroma_horz_bs4_a9; ih264_deblk_chroma_edge_bs4_ft ih264_deblk_chroma_vert_bs4_mbaff_a9; ih264_deblk_chroma_edge_bs4_ft ih264_deblk_chroma_horz_bs4_mbaff_a9; - ih264_deblk_chroma_edge_bslt4_ft ih264_deblk_chroma_vert_bslt4_a9; ih264_deblk_chroma_edge_bslt4_ft ih264_deblk_chroma_horz_bslt4_a9; ih264_deblk_chroma_edge_bslt4_ft ih264_deblk_chroma_vert_bslt4_mbaff_a9; ih264_deblk_chroma_edge_bslt4_ft ih264_deblk_chroma_horz_bslt4_mbaff_a9; -/*AV8*/ +/* AV8 Declarations */ ih264_deblk_edge_bs4_ft ih264_deblk_luma_horz_bs4_av8; ih264_deblk_edge_bs4_ft ih264_deblk_luma_vert_bs4_av8; ih264_deblk_edge_bs4_ft ih264_deblk_luma_vert_bs4_mbaff_av8; - - ih264_deblk_edge_bs4_ft ih264_deblk_chroma_horz_bs4_bp_av8; ih264_deblk_edge_bs4_ft ih264_deblk_chroma_vert_bs4_bp_av8; ih264_deblk_edge_bs4_ft ih264_deblk_chroma_vert_bs4_mbaff_bp_av8; - - ih264_deblk_edge_bslt4_ft ih264_deblk_luma_horz_bslt4_av8; ih264_deblk_edge_bslt4_ft ih264_deblk_luma_vert_bslt4_av8; ih264_deblk_edge_bslt4_ft ih264_deblk_luma_vert_bslt4_mbaff_av8; - - ih264_deblk_edge_bslt4_ft ih264_deblk_chroma_horz_bslt4_bp_av8; ih264_deblk_edge_bslt4_ft ih264_deblk_chroma_vert_bslt4_bp_av8; ih264_deblk_edge_bslt4_ft ih264_deblk_chroma_vert_bslt4_mbaff_bp_av8; - ih264_deblk_chroma_edge_bs4_ft ih264_deblk_chroma_vert_bs4_av8; ih264_deblk_chroma_edge_bs4_ft ih264_deblk_chroma_horz_bs4_av8; ih264_deblk_chroma_edge_bs4_ft ih264_deblk_chroma_vert_bs4_mbaff_av8; ih264_deblk_chroma_edge_bs4_ft ih264_deblk_chroma_horz_bs4_mbaff_av8; - ih264_deblk_chroma_edge_bslt4_ft ih264_deblk_chroma_vert_bslt4_av8; ih264_deblk_chroma_edge_bslt4_ft ih264_deblk_chroma_horz_bslt4_av8; ih264_deblk_chroma_edge_bslt4_ft ih264_deblk_chroma_vert_bslt4_mbaff_av8; ih264_deblk_chroma_edge_bslt4_ft ih264_deblk_chroma_horz_bslt4_mbaff_av8; -/*SSE3*/ +/* SSSE3 Declarations */ ih264_deblk_edge_bs4_ft ih264_deblk_luma_horz_bs4_ssse3; ih264_deblk_edge_bs4_ft ih264_deblk_luma_vert_bs4_ssse3; ih264_deblk_edge_bs4_ft ih264_deblk_luma_vert_bs4_mbaff_ssse3; - - ih264_deblk_edge_bs4_ft ih264_deblk_chroma_horz_bs4_bp_ssse3; ih264_deblk_edge_bs4_ft ih264_deblk_chroma_vert_bs4_bp_ssse3; ih264_deblk_edge_bs4_ft ih264_deblk_chroma_vert_bs4_mbaff_bp_ssse3; - - ih264_deblk_edge_bslt4_ft ih264_deblk_luma_horz_bslt4_ssse3; ih264_deblk_edge_bslt4_ft ih264_deblk_luma_vert_bslt4_ssse3; ih264_deblk_edge_bslt4_ft ih264_deblk_luma_vert_bslt4_mbaff_ssse3; - - ih264_deblk_edge_bslt4_ft ih264_deblk_chroma_horz_bslt4_bp_ssse3; ih264_deblk_edge_bslt4_ft ih264_deblk_chroma_vert_bslt4_bp_ssse3; ih264_deblk_edge_bslt4_ft ih264_deblk_chroma_vert_bslt4_mbaff_bp_ssse3; - ih264_deblk_chroma_edge_bs4_ft ih264_deblk_chroma_vert_bs4_ssse3; ih264_deblk_chroma_edge_bs4_ft ih264_deblk_chroma_horz_bs4_ssse3; ih264_deblk_chroma_edge_bs4_ft ih264_deblk_chroma_vert_bs4_mbaff_ssse3; ih264_deblk_chroma_edge_bs4_ft ih264_deblk_chroma_horz_bs4_mbaff_ssse3; - ih264_deblk_chroma_edge_bslt4_ft ih264_deblk_chroma_vert_bslt4_ssse3; ih264_deblk_chroma_edge_bslt4_ft ih264_deblk_chroma_horz_bslt4_ssse3; ih264_deblk_chroma_edge_bslt4_ft ih264_deblk_chroma_vert_bslt4_mbaff_ssse3; ih264_deblk_chroma_edge_bslt4_ft ih264_deblk_chroma_horz_bslt4_mbaff_ssse3; -#endif /* IH264_DEBLK_H_ */ +#endif /* _IH264_DEBLK_EDGE_FILTERS_H_ */ diff --git a/common/ih264_deblk_tables.c b/common/ih264_deblk_tables.c index 91e28e0a..b0106e31 100644 --- a/common/ih264_deblk_tables.c +++ b/common/ih264_deblk_tables.c @@ -17,6 +17,7 @@ ***************************************************************************** * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore */ + /** ******************************************************************************* * @file @@ -26,16 +27,10 @@ * Contains tables used for deblocking * * @author -* Ittiam -* -* @par List of Tables: -* - guc_ih264_qp_scale_cr[] -* - guc_ih264_alpha_table[] -* - guc_ih264_beta_table[] -* - guc_ih264_clip_table[][] +* ittiam * * @remarks -* None +* none * ******************************************************************************* */ @@ -61,7 +56,7 @@ * input : indexA [0-51] & indexB [0-51] * output : alpha & beta * - * @remarks Table 8-16 – in H264 Specification, + * @remarks Table 8-16 - in H264 Specification, * Derivation of offset dependent threshold variables * alpha and beta from indexA and indexB ****************************************************************************** @@ -96,7 +91,7 @@ const UWORD8 gu1_ih264_beta_table[52] = * input : indexA [0-51] and bS [1,3] * output : t'C0 * - * @remarks Table 8-17 – in H264 Specification, + * @remarks Table 8-17 - in H264 Specification, * Value of variable t'C0 as a function of indexA and bS ****************************************************************************** */ diff --git a/common/ih264_deblk_tables.h b/common/ih264_deblk_tables.h index 3935dcbc..c365788e 100644 --- a/common/ih264_deblk_tables.h +++ b/common/ih264_deblk_tables.h @@ -17,57 +17,34 @@ ***************************************************************************** * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore */ + /** - ******************************************************************************* - * @file - * ih264_deblk_tables.h - * - * @brief - * This file contains declarations of tables used for deblocking - * - * @author - * Ittiam - * - * @par List of Functions: - * - * @remarks - * None - * - ******************************************************************************* - */ +******************************************************************************* +* @file +* ih264_deblk_tables.h +* +* @brief +* This file contains declarations of tables used for deblocking +* +* @author +* ittiam +* +* @remarks +* None +* +******************************************************************************* +*/ -#ifndef IH264_DEBLK_TABLES_H_ -#define IH264_DEBLK_TABLES_H_ +#ifndef _IH264_DEBLK_TABLES_H_ +#define _IH264_DEBLK_TABLES_H_ /*****************************************************************************/ /* Extern global declarations */ /*****************************************************************************/ - -/** - ****************************************************************************** - * @brief alpha & beta tables for deblocking - * input : indexA [0-51] & indexB [0-51] - * output : alpha & beta - * - * @remarks Table 8-16 – in H264 Specification, - * Derivation of offset dependent threshold variables - * alpha and beta from indexA and indexB - ****************************************************************************** - */ extern const UWORD8 gu1_ih264_alpha_table[52]; extern const UWORD8 gu1_ih264_beta_table[52]; -/** - ****************************************************************************** - * @brief t'C0 table for deblocking - * input : indexA [0-51] and bS [1,3] - * output : t'C0 - * - * @remarks Table 8-17 – in H264 Specification, - * Value of variable t'C0 as a function of indexA and bS - ****************************************************************************** - */ extern const UWORD8 gu1_ih264_clip_table[52][4]; -#endif /* IH264_DEBLK_TABLES_H_ */ +#endif /* _IH264_DEBLK_TABLES_H_ */ diff --git a/common/ih264_debug.h b/common/ih264_debug.h index 63d5c71d..afadc4d4 100644 --- a/common/ih264_debug.h +++ b/common/ih264_debug.h @@ -17,6 +17,7 @@ ***************************************************************************** * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore */ + /** ******************************************************************************* * @file @@ -26,12 +27,10 @@ * Definitions for codec debugging * * @author -* Ittiam -* -* @par List of Functions: +* ittiam * * @remarks -* None +* none * ******************************************************************************* */ @@ -40,23 +39,21 @@ #include -#if DEBUG_PRINT +/*****************************************************************************/ +/* Function Macros */ +/*****************************************************************************/ +#if DEBUG_PRINT #define DEBUG(...) \ { \ printf("\n[H264 DBG] %s/%d:: ", __FUNCTION__, __LINE__); \ printf(__VA_ARGS__); \ } - #else - #define DEBUG(...) {} - #endif - #define ASSERT(x) assert((x)) - #endif /* _IH264_DEBUG_H_ */ diff --git a/common/ih264_defs.h b/common/ih264_defs.h index 62b27834..5157116a 100644 --- a/common/ih264_defs.h +++ b/common/ih264_defs.h @@ -17,6 +17,7 @@ ***************************************************************************** * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore */ + /** ******************************************************************************* * @file @@ -26,17 +27,16 @@ * Definitions used in the codec * * @author -* Ittiam -* +* ittiam * * @remarks -* None +* none * ******************************************************************************* */ -#ifndef IH264_DEFS_H_ -#define IH264_DEFS_H_ +#ifndef _IH264_DEFS_H_ +#define _IH264_DEFS_H_ /*****************************************************************************/ /* Enums */ @@ -456,18 +456,16 @@ typedef enum B_BI_4x4, }SUBMBTYPE_BSLICE_T; +/*****************************************************************************/ +/* Constant Macros */ +/*****************************************************************************/ + /** * DC Mode pattern for 4 4x4 sub blocks in an MB row */ #define DC_I16X16_MB_ROW (DC_I16x16 << 24) | (DC_I16x16 << 16) | \ (DC_I16x16 << 8) | DC_I16x16 - - -/*****************************************************************************/ -/* Constant Macros */ -/*****************************************************************************/ - /*****************************************************************************/ /* Reference frame defs */ /*****************************************************************************/ @@ -540,7 +538,7 @@ typedef enum /* Number of max PU in a MB */ /*****************************************************************************/ -/* Note though for 64 x 64 MB, Max PU in MB is 128, in order to store */ +/* Note though for 64 x 64 MB, Max PU in MB is 128, in order to store */ /* intra pred info, 256 entries are needed */ /*****************************************************************************/ #define MAX_PU_IN_MB ((MB_SIZE / MIN_PU_SIZE) * \ @@ -792,4 +790,4 @@ typedef enum #define SEI_FGC_MAX_NUM_MODEL_VALUES 6 #define SEI_FGC_MAX_NUM_INTENSITY_INTERVALS 256 -#endif /* IH264_DEFS_H_ */ +#endif /* _IH264_DEFS_H_ */ diff --git a/common/ih264_disp_mgr.c b/common/ih264_disp_mgr.c index 2bdb5244..caf1d0f8 100644 --- a/common/ih264_disp_mgr.c +++ b/common/ih264_disp_mgr.c @@ -17,6 +17,7 @@ ***************************************************************************** * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore */ + /** ******************************************************************************* * @file @@ -26,40 +27,49 @@ * Contains function definitions for display management * * @author -* Srinivas T +* ittiam * * @par List of Functions: -* - ih264_disp_mgr_init() -* - ih264_disp_mgr_add() -* - ih264_disp_mgr_get() +* - ih264_disp_mgr_init +* - ih264_disp_mgr_add +* - ih264_disp_mgr_get * * @remarks -* None +* none * ******************************************************************************* */ + +/*****************************************************************************/ +/* File Includes */ +/*****************************************************************************/ + +/* System Include Files */ #include + +/* User Include Files */ #include "ih264_typedefs.h" #include "ih264_macros.h" #include "ih264_disp_mgr.h" +/*****************************************************************************/ +/* Function Definitions */ +/*****************************************************************************/ /** ******************************************************************************* * -* @brief -* Initialization function for display buffer manager +* @brief Initialization function for display buffer manager * -* @par Description: -* Initializes the display buffer management structure +* @par Description +* Initializes the display buffer management structure * * @param[in] ps_disp_mgr * Pointer to the display buffer management structure * * @returns none * -* @remarks -* None +* @remarks none * ******************************************************************************* */ @@ -76,15 +86,13 @@ void ih264_disp_mgr_init(disp_mgr_t *ps_disp_mgr) } } - /** ******************************************************************************* * -* @brief -* Adds a buffer to the display manager +* @brief Adds a buffer to the display manager * * @par Description: -* Adds a buffer to the display buffer manager +* Adds a buffer to the display buffer manager * * @param[in] ps_disp_mgr * Pointer to the display buffer management structure @@ -122,15 +130,14 @@ WORD32 ih264_disp_mgr_add(disp_mgr_t *ps_disp_mgr, ps_disp_mgr->apv_ptr[buf_id] = pv_ptr; ps_disp_mgr->ai4_abs_poc[buf_id] = abs_poc; + return 0; } - /** ******************************************************************************* * -* @brief -* Gets the next buffer +* @brief Gets the next buffer * * @par Description: * Gets the next display buffer @@ -151,14 +158,9 @@ WORD32 ih264_disp_mgr_add(disp_mgr_t *ps_disp_mgr, void* ih264_disp_mgr_get(disp_mgr_t *ps_disp_mgr, WORD32 *pi4_buf_id) { WORD32 id; - void *pv_ret_ptr; - WORD32 i4_min_poc; - WORD32 min_poc_id; - - - pv_ret_ptr = NULL; - i4_min_poc = 0x7FFFFFFF; - min_poc_id = -1; + void *pv_ret_ptr = NULL; + WORD32 i4_min_poc = 0x7FFFFFFF; + WORD32 min_poc_id = -1; /* Find minimum POC */ for(id = 0; id < DISP_MGR_MAX_CNT; id++) @@ -182,5 +184,6 @@ void* ih264_disp_mgr_get(disp_mgr_t *ps_disp_mgr, WORD32 *pi4_buf_id) /* Set abs poc to default and apv_ptr to null so that the buffer is not returned again */ ps_disp_mgr->apv_ptr[min_poc_id] = NULL; ps_disp_mgr->ai4_abs_poc[min_poc_id] = DEFAULT_POC; + return pv_ret_ptr; } diff --git a/common/ih264_disp_mgr.h b/common/ih264_disp_mgr.h index 6f56493f..d634e77d 100644 --- a/common/ih264_disp_mgr.h +++ b/common/ih264_disp_mgr.h @@ -17,6 +17,7 @@ ***************************************************************************** * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore */ + /** ******************************************************************************* * @file @@ -26,20 +27,26 @@ * Function declarations used for display management * * @author -* Srinivas T -* +* ittiam * * @remarks -* None +* none * ******************************************************************************* */ -#ifndef _DISP_MGR_H_ -#define _DISP_MGR_H_ +#ifndef _IH264_DISP_MGR_H_ +#define _IH264_DISP_MGR_H_ + +/*****************************************************************************/ +/* Constant Macros */ +/*****************************************************************************/ #define DISP_MGR_MAX_CNT 64 #define DEFAULT_POC 0x7FFFFFFF +/*****************************************************************************/ +/* Structure Definitions */ +/*****************************************************************************/ typedef struct { /** @@ -55,9 +62,12 @@ typedef struct /** * apv_ptr[DISP_MGR_MAX_CNT] */ - void *apv_ptr[DISP_MGR_MAX_CNT]; + void *apv_ptr[DISP_MGR_MAX_CNT]; }disp_mgr_t; +/*****************************************************************************/ +/* Function Declarations */ +/*****************************************************************************/ void ih264_disp_mgr_init(disp_mgr_t *ps_disp_mgr); WORD32 ih264_disp_mgr_add(disp_mgr_t *ps_disp_mgr, @@ -67,4 +77,4 @@ WORD32 ih264_disp_mgr_add(disp_mgr_t *ps_disp_mgr, void* ih264_disp_mgr_get(disp_mgr_t *ps_disp_mgr, WORD32 *pi4_buf_id); -#endif //_DISP_MGR_H_ +#endif /* _IH264_DISP_MGR_H_ */ diff --git a/common/ih264_dpb_mgr.c b/common/ih264_dpb_mgr.c index 9380b7e7..afb8630a 100644 --- a/common/ih264_dpb_mgr.c +++ b/common/ih264_dpb_mgr.c @@ -17,89 +17,97 @@ ***************************************************************************** * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore */ + /** - ******************************************************************************* - * @file - * ih264_dpb_mgr.c - * - * @brief - * Function definitions used for decoded picture buffer management - * - * @author - * Srinivas T - * - * @par List of Functions: - * - ih264_dpb_mgr_init() - * - ih264_dpb_mgr_sort_short_term_fields_by_frame_num() - * - ih264_dpb_mgr_sort_short_term_fields_by_poc_l0() - * - ih264_dpb_mgr_sort_short_term_fields_by_poc_l1() - * - ih264_dpb_mgr_sort_long_term_fields_by_frame_idx() - * - ih264_dpb_mgr_alternate_ref_fields() - * - ih264_dpb_mgr_insert_ref_field() - * - ih264_dpb_mgr_insert_ref_frame() - * - ih264_dpb_mgr_count_ref_frames() - * - ih264_dpb_mgr_delete_ref_frame() - * - ih264_dpb_mgr_delete_long_ref_fields_max_frame_idx() - * - ih264_dpb_mgr_delete_short_ref_frame() - * - ih264_dpb_mgr_delete_all_ref_frames() - * - ih264_dpb_mgr_reset() - * - ih264_dpb_mgr_release_pics() - * - * @remarks - * None - * - ******************************************************************************* - */ +******************************************************************************* +* @file +* ih264_dpb_mgr.c +* +* @brief +* Function definitions used for decoded picture buffer management +* +* @author +* ittiam +* +* @par List of Functions: +* - ih264_dpb_mgr_init +* - ih264_dpb_mgr_sort_short_term_fields_by_frame_num +* - ih264_dpb_mgr_sort_short_term_fields_by_poc_l0 +* - ih264_dpb_mgr_sort_short_term_fields_by_poc_l1 +* - ih264_dpb_mgr_sort_long_term_fields_by_frame_idx +* - ih264_dpb_mgr_alternate_ref_fields +* - ih264_dpb_mgr_insert_ref_field +* - ih264_dpb_mgr_insert_ref_frame +* - ih264_dpb_mgr_count_ref_frames +* - ih264_dpb_mgr_delete_ref_frame +* - ih264_dpb_mgr_delete_long_ref_fields_max_frame_idx +* - ih264_dpb_mgr_delete_short_ref_frame +* - ih264_dpb_mgr_delete_all_ref_frames +* - ih264_dpb_mgr_reset +* - ih264_dpb_mgr_release_pics +* +* @remarks +* none +* +******************************************************************************* +*/ + +/*****************************************************************************/ +/* File Includes */ +/*****************************************************************************/ +/* System Include Files */ #include #include #include +/* User Include Files */ #include "ih264_typedefs.h" -#include "ih264_defs.h" +#include "ih264_debug.h" #include "ih264_macros.h" #include "ih264_error.h" +#include "ih264_defs.h" #include "ih264_structs.h" #include "ih264_buf_mgr.h" #include "ih264_dpb_mgr.h" -#include "ih264_debug.h" -/** - ******************************************************************************* - * - * @brief - * DPB manager initializer - * - * @par Description: - * Initialises the DPB manager structure - * - * @param[in] ps_dpb_mgr - * Pointer to the DPB manager structure - * - * @returns - * - * @remarks - * - * - ******************************************************************************* - */ +/*****************************************************************************/ +/* Function Definitions */ +/*****************************************************************************/ + +/** +******************************************************************************* +* +* @brief DPB manager initializer +* +* @par Description Initialises the DPB manager structure +* +* @param[in] ps_dpb_mgr +* Pointer to the DPB manager structure +* +* @returns +* +* @remarks +* +******************************************************************************* +*/ void ih264_dpb_mgr_init(dpb_mgr_t *ps_dpb_mgr) { UWORD32 i; dpb_info_t *ps_dpb_info = ps_dpb_mgr->as_dpb_info; + for(i = 0; i < MAX_DPB_BUFS; i++) { ps_dpb_info[i].ps_prev_dpb = NULL; ps_dpb_info[i].ps_pic_buf = NULL; - ps_dpb_mgr->as_top_field_pics[i].i4_used_as_ref = INVALID; + ps_dpb_mgr->as_top_field_pics[i].i4_used_as_ref = INVALID; ps_dpb_mgr->as_bottom_field_pics[i].i4_used_as_ref = INVALID; - ps_dpb_mgr->as_top_field_pics[i].i1_field_type = INVALID; - ps_dpb_mgr->as_bottom_field_pics[i].i1_field_type = INVALID; - ps_dpb_mgr->as_top_field_pics[i].i4_long_term_frame_idx = -1; + ps_dpb_mgr->as_top_field_pics[i].i1_field_type = INVALID; + ps_dpb_mgr->as_bottom_field_pics[i].i1_field_type = INVALID; + ps_dpb_mgr->as_top_field_pics[i].i4_long_term_frame_idx = -1; ps_dpb_mgr->as_bottom_field_pics[i].i4_long_term_frame_idx = -1; } - ps_dpb_mgr->u1_num_short_term_ref_bufs = 0; ps_dpb_mgr->u1_num_long_term_ref_bufs = 0; ps_dpb_mgr->ps_dpb_short_term_head = NULL; @@ -107,34 +115,34 @@ void ih264_dpb_mgr_init(dpb_mgr_t *ps_dpb_mgr) } /** - ******************************************************************************* - * - * @brief - * Function to sort sort term pics by frame_num. - * - * @par Description: - * Sorts short term fields by frame_num. For 2 fields having same frame_num, - * orders them based on requested first field type. - * - * @param[in] ps_dpb_mgr - * Pointer to the DPB manager structure - * - * @param[in] curr_frame_num - * frame_num of the current pic - * - * @param[in] first_field_type - * For complementary fields, required first field - * - * @param[in] max_frame_num - * Maximum frame_num allowed - * - * @returns - * - * @remarks - * - * - ******************************************************************************* - */ +******************************************************************************* +* +* @brief +* Function to sort short term pics by frame_num. +* +* @par Description: +* Sorts short term fields by frame_num. For 2 fields having same frame_num, +* orders them based on requested first field type. +* +* @param[in] ps_dpb_mgr +* Pointer to the DPB manager structure +* +* @param[in] curr_frame_num +* frame_num of the current pic +* +* @param[in] first_field_type +* For complementary fields, required first field +* +* @param[in] max_frame_num +* Maximum frame_num allowed +* +* @returns +* +* @remarks +* +* +******************************************************************************* +*/ WORD32 ih264_dpb_mgr_sort_short_term_fields_by_frame_num(dpb_mgr_t *ps_dpb_mgr, WORD32 curr_frame_num, WORD32 first_field_type, @@ -195,35 +203,33 @@ WORD32 ih264_dpb_mgr_sort_short_term_fields_by_frame_num(dpb_mgr_t *ps_dpb_mgr, ps_dpb_node2 = ps_dpb_node2->ps_prev_dpb; } return 0; - } /** - ******************************************************************************* - * - * @brief - * Function to sort sort term pics by poc for list 0. - * - * @par Description: - * Orders all the pocs less than current poc in the descending order. - * Then orders all the pocs greater than current poc in the ascending order. - * - * @param[in] ps_dpb_mgr - * Pointer to the DPB manager structure - * - * @param[in] curr_poc - * Poc of the current pic - * - * @param[in] first_field_type - * For complementary fields, required first field - * - * @returns - * - * @remarks - * - * - ******************************************************************************* - */ +******************************************************************************* +* +* @brief +* Function to sort sort term pics by poc for list 0. +* +* @par Description: +* Orders all the pocs less than current poc in the descending order. +* Then orders all the pocs greater than current poc in the ascending order. +* +* @param[in] ps_dpb_mgr +* Pointer to the DPB manager structure +* +* @param[in] curr_poc +* Poc of the current pic +* +* @param[in] first_field_type +* For complementary fields, required first field +* +* @returns +* +* @remarks +* +******************************************************************************* +*/ WORD32 ih264_dpb_mgr_sort_short_term_fields_by_poc_l0(dpb_mgr_t *ps_dpb_mgr, WORD32 curr_poc, WORD32 first_field_type) @@ -284,35 +290,34 @@ WORD32 ih264_dpb_mgr_sort_short_term_fields_by_poc_l0(dpb_mgr_t *ps_dpb_mgr, ps_dpb_node2 = ps_dpb_node2->ps_prev_dpb; } return 0; - } /** - ******************************************************************************* - * - * @brief - * Function to sort sort term pics by poc for list 1. - * - * @par Description: - * Orders all the pocs greater than current poc in the ascending order. - * Then rrders all the pocs less than current poc in the descending order. - * - * @param[in] ps_dpb_mgr - * Pointer to the DPB manager structure - * - * @param[in] curr_poc - * Poc of the current pic - * - * @param[in] first_field_type - * For complementary fields, required first field - * - * @returns - * - * @remarks - * - * - ******************************************************************************* - */ +******************************************************************************* +* +* @brief +* Function to sort sort term pics by poc for list 1. +* +* @par Description: +* Orders all the pocs greater than current poc in the ascending order. +* Then rrders all the pocs less than current poc in the descending order. +* +* @param[in] ps_dpb_mgr +* Pointer to the DPB manager structure +* +* @param[in] curr_poc +* Poc of the current pic +* +* @param[in] first_field_type +* For complementary fields, required first field +* +* @returns +* +* @remarks +* +* +******************************************************************************* +*/ WORD32 ih264_dpb_mgr_sort_short_term_fields_by_poc_l1(dpb_mgr_t *ps_dpb_mgr, WORD32 curr_poc, WORD32 first_field_type) @@ -374,29 +379,29 @@ WORD32 ih264_dpb_mgr_sort_short_term_fields_by_poc_l1(dpb_mgr_t *ps_dpb_mgr, } return 0; } + /** - ******************************************************************************* - * - * @brief - * Function to sort long term pics by long term frame idx. - * - * @par Description: - * Sorts long term fields by long term frame idx. For 2 fields - * having same frame_num, orders them based on requested first field type. - * - * @param[in] ps_dpb_mgr - * Pointer to the DPB manager structure - * - * @param[in] first_field_type - * For complementary fields, required first field - * - * @returns - * - * @remarks - * - * - ******************************************************************************* - */ +******************************************************************************* +* +* @brief +* Function to sort long term pics by long term frame idx. +* +* @par Description: +* Sorts long term fields by long term frame idx. For 2 fields +* having same frame_num, orders them based on requested first field type. +* +* @param[in] ps_dpb_mgr +* Pointer to the DPB manager structure +* +* @param[in] first_field_type +* For complementary fields, required first field +* +* @returns +* +* @remarks +* +******************************************************************************* +*/ WORD32 ih264_dpb_mgr_sort_long_term_fields_by_frame_idx(dpb_mgr_t *ps_dpb_mgr, WORD32 first_field_type) { @@ -454,31 +459,30 @@ WORD32 ih264_dpb_mgr_sort_long_term_fields_by_frame_idx(dpb_mgr_t *ps_dpb_mgr, } /** - ******************************************************************************* - * - * @brief - * Function to alternate fields. - * - * @par Description: - * In the ordered list of fields, alternate fields starting with - * first_field_type - * - * @param[in] ps_dpb_mgr - * Pointer to the DPB manager structure - * - * @param[in] reference_type - * This is used to select between short-term and long-term linked list. - * - * @param[in] first_field_type - * For complementary fields, required first field - * - * @returns - * - * @remarks - * - * - ******************************************************************************* - */ +******************************************************************************* +* +* @brief +* Function to alternate fields. +* +* @par Description: +* In the ordered list of fields, alternate fields starting with +* first_field_type +* +* @param[in] ps_dpb_mgr +* Pointer to the DPB manager structure +* +* @param[in] reference_type +* This is used to select between short-term and long-term linked list. +* +* @param[in] first_field_type +* For complementary fields, required first field +* +* @returns +* +* @remarks +* +******************************************************************************* +*/ WORD32 ih264_dpb_mgr_alternate_ref_fields(dpb_mgr_t *ps_dpb_mgr, WORD32 reference_type, WORD32 first_field_type) @@ -549,40 +553,39 @@ WORD32 ih264_dpb_mgr_alternate_ref_fields(dpb_mgr_t *ps_dpb_mgr, } /** - ******************************************************************************* - * - * @brief - * Add a ref field to short-term or long-term linked list. - * - * @par Description: - * This function adds a ref field to either short-term or long-term linked - * list. It picks up memory for the link from the array of dpb_info in - * dpb_mgr. The field is added to the beginning of the linked list and the - * head is set the the field. - * - * @param[in] ps_dpb_mgr - * Pointer to the DPB manager structure - * - * @param[in] ps_pic_buf - * Pic buf structure for the field being added. - * - * @param[in] reference_type - * This is used to select between short-term and long-term linked list. - * - * @param[in] frame_num - * frame_num for the field. - * - * @param[in] long_term_frame_idx - * If the ref being added is long-term, long_term_frame_idx of the field. - * Otherwise invalid. - * - * @returns - * - * @remarks - * - * - ******************************************************************************* - */ +******************************************************************************* +* +* @brief +* Add a ref field to short-term or long-term linked list. +* +* @par Description: +* This function adds a ref field to either short-term or long-term linked +* list. It picks up memory for the link from the array of dpb_info in +* dpb_mgr. The field is added to the beginning of the linked list and the +* head is set the the field. +* +* @param[in] ps_dpb_mgr +* Pointer to the DPB manager structure +* +* @param[in] ps_pic_buf +* Pic buf structure for the field being added. +* +* @param[in] reference_type +* This is used to select between short-term and long-term linked list. +* +* @param[in] frame_num +* frame_num for the field. +* +* @param[in] long_term_frame_idx +* If the ref being added is long-term, long_term_frame_idx of the field. +* Otherwise invalid. +* +* @returns +* +* @remarks +* +******************************************************************************* +*/ WORD32 ih264_dpb_mgr_insert_ref_field(dpb_mgr_t *ps_dpb_mgr, pic_buf_t *ps_pic_buf, WORD32 reference_type, @@ -653,38 +656,37 @@ WORD32 ih264_dpb_mgr_insert_ref_field(dpb_mgr_t *ps_dpb_mgr, } /** - ******************************************************************************* - * - * @brief - * Add a ref frame to short-term or long-term linked list. - * - * @par Description: - * This function adds a ref frame to either short-term or long-term linked - * list. Internally it calls add ref field twice to add top and bottom field. - * - * @param[in] ps_dpb_mgr - * Pointer to the DPB manager structure - * - * @param[in] ps_pic_buf - * Pic buf structure for the field being added. - * - * @param[in] reference_type - * This is used to select between short-term and long-term linked list. - * - * @param[in] frame_num - * frame_num for the field. - * - * @param[in] long_term_frame_idx - * If the ref being added is long-term, long_term_frame_idx of the field. - * Otherwise invalid. - * - * @returns - * - * @remarks - * - * - ******************************************************************************* - */ +******************************************************************************* +* +* @brief +* Add a ref frame to short-term or long-term linked list. +* +* @par Description: +* This function adds a ref frame to either short-term or long-term linked +* list. Internally it calls add ref field twice to add top and bottom field. +* +* @param[in] ps_dpb_mgr +* Pointer to the DPB manager structure +* +* @param[in] ps_pic_buf +* Pic buf structure for the field being added. +* +* @param[in] reference_type +* This is used to select between short-term and long-term linked list. +* +* @param[in] frame_num +* frame_num for the field. +* +* @param[in] long_term_frame_idx +* If the ref being added is long-term, long_term_frame_idx of the field. +* Otherwise invalid. +* +* @returns +* +* @remarks +* +******************************************************************************* +*/ WORD32 ih264_dpb_mgr_insert_ref_frame(dpb_mgr_t *ps_dpb_mgr, pic_buf_t *ps_pic_buf, WORD32 reference_type, @@ -728,31 +730,30 @@ WORD32 ih264_dpb_mgr_insert_ref_frame(dpb_mgr_t *ps_dpb_mgr, } /** - ******************************************************************************* - * - * @brief - * Returns the number of ref frames in both the linked list. - * - * @par Description: - * Returns the count of number of frames, number of complementary field pairs - * and number of unpaired fields. - * - * @param[in] ps_dpb_mgr - * Pointer to the DPB manager structure - * - * @param[in] curr_frame_num - * frame_num for the field. - * - * @param[in] max_frame_num - * Maximum frame_num allowed - * - * @returns - * - * @remarks - * - * - ******************************************************************************* - */ +******************************************************************************* +* +* @brief +* Returns the number of ref frames in both the linked list. +* +* @par Description: +* Returns the count of number of frames, number of complementary field pairs +* and number of unpaired fields. +* +* @param[in] ps_dpb_mgr +* Pointer to the DPB manager structure +* +* @param[in] curr_frame_num +* frame_num for the field. +* +* @param[in] max_frame_num +* Maximum frame_num allowed +* +* @returns +* +* @remarks +* +******************************************************************************* +*/ WORD32 ih264_dpb_mgr_count_ref_frames(dpb_mgr_t *ps_dpb_mgr, WORD32 curr_frame_num, WORD32 max_frame_num) @@ -823,29 +824,28 @@ WORD32 ih264_dpb_mgr_count_ref_frames(dpb_mgr_t *ps_dpb_mgr, } /** - ******************************************************************************* - * - * @brief - * Deletes the ref frame at the end of the linked list. - * - * @par Description: - * Deletes the ref frame at the end of the linked list. For unpaired fields, - * it deletes just the last node. For frame or complementary field pair, it - * deletes the last two nodes. - * - * @param[in] ps_dpb_mgr - * Pointer to the DPB manager structure - * - * @param[in] reference_type - * This is used to select between short-term and long-term linked list. - * - * @returns - * - * @remarks - * - * - ******************************************************************************* - */ +******************************************************************************* +* +* @brief +* Deletes the ref frame at the end of the linked list. +* +* @par Description: +* Deletes the ref frame at the end of the linked list. For unpaired fields, +* it deletes just the last node. For frame or complementary field pair, it +* deletes the last two nodes. +* +* @param[in] ps_dpb_mgr +* Pointer to the DPB manager structure +* +* @param[in] reference_type +* This is used to select between short-term and long-term linked list. +* +* @returns +* +* @remarks +* +******************************************************************************* +*/ WORD32 ih264_dpb_mgr_delete_ref_frame(dpb_mgr_t *ps_dpb_mgr, WORD32 reference_type) { @@ -856,8 +856,6 @@ WORD32 ih264_dpb_mgr_delete_ref_frame(dpb_mgr_t *ps_dpb_mgr, /* * Assumption: The nodes sorted for frame num. */ - - /* Select bw short-term and long-term list. */ ps_dpb_node1 = (reference_type == SHORT_TERM_REF) ?ps_dpb_mgr->ps_dpb_short_term_head @@ -957,33 +955,34 @@ WORD32 ih264_dpb_mgr_delete_ref_frame(dpb_mgr_t *ps_dpb_mgr, return 0; } + /** - ******************************************************************************* - * - * @brief - * Delete long-term ref fields above max frame idx. - * - * @par Description: - * Deletes all the long-term ref fields having idx greater than max_frame_idx - * - * @param[in] ps_dpb_mgr - * Pointer to the DPB manager structure - * - * @param[in] max_frame_idx - * Max long-term frame idx allowed. - * - * @returns - * - * @remarks - * - * - ******************************************************************************* - */ +******************************************************************************* +* +* @brief +* Delete long-term ref fields above max frame idx. +* +* @par Description: +* Deletes all the long-term ref fields having idx greater than max_frame_idx +* +* @param[in] ps_dpb_mgr +* Pointer to the DPB manager structure +* +* @param[in] max_frame_idx +* Max long-term frame idx allowed. +* +* @returns +* +* @remarks +* +******************************************************************************* +*/ WORD32 ih264_dpb_mgr_delete_long_ref_fields_max_frame_idx(dpb_mgr_t *ps_dpb_mgr, WORD32 max_frame_idx) { dpb_info_t *ps_dpb_node1; dpb_info_t *ps_dpb_node2; + /* * Loop until there is node which isn't to be deleted is encountered. */ @@ -1023,37 +1022,37 @@ WORD32 ih264_dpb_mgr_delete_long_ref_fields_max_frame_idx(dpb_mgr_t *ps_dpb_mgr, } /** - ******************************************************************************* - * - * @brief - * Deletes the short-term with least frame_num - * - * @par Description: - * Deletes the short-term with least frame_num. It sorts the function the - * short-term linked list by frame-num and the function that deletes the last - * frame in the linked list. - * - * @param[in] ps_dpb_mgr - * Pointer to the DPB manager structure - * - * @param[in] curr_frame_num - * frame_num of the current pic - * - * @param[in] max_frame_num - * Maximum frame_num allowed - * - * @returns - * - * @remarks - * - * - ******************************************************************************* - */ +******************************************************************************* +* +* @brief +* Deletes the short-term with least frame_num +* +* @par Description: +* Deletes the short-term with least frame_num. It sorts the function the +* short-term linked list by frame-num and the function that deletes the last +* frame in the linked list. +* +* @param[in] ps_dpb_mgr +* Pointer to the DPB manager structure +* +* @param[in] curr_frame_num +* frame_num of the current pic +* +* @param[in] max_frame_num +* Maximum frame_num allowed +* +* @returns +* +* @remarks +* +******************************************************************************* +*/ WORD32 ih264_dpb_mgr_delete_short_ref_frame(dpb_mgr_t *ps_dpb_mgr, WORD32 curr_frame_num, WORD32 max_frame_num) { WORD32 ret; + /* Sort the short-term list by frame_num */ ret = ih264_dpb_mgr_sort_short_term_fields_by_frame_num(ps_dpb_mgr, curr_frame_num, @@ -1070,26 +1069,26 @@ WORD32 ih264_dpb_mgr_delete_short_ref_frame(dpb_mgr_t *ps_dpb_mgr, return ret; } + /** - ******************************************************************************* - * - * @brief - * Deletes all the ref frames. - * - * @par Description: - * Deletes all of the ref frames/fields in the short-term and long-term linked - * list. - * - * @param[in] ps_dpb_mgr - * Pointer to the DPB manager structure - * - * @returns - * - * @remarks - * - * - ******************************************************************************* - */ +******************************************************************************* +* +* @brief +* Deletes all the ref frames. +* +* @par Description: +* Deletes all of the ref frames/fields in the short-term and long-term linked +* list. +* +* @param[in] ps_dpb_mgr +* Pointer to the DPB manager structure +* +* @returns +* +* @remarks +* +******************************************************************************* +*/ WORD32 ih264_dpb_mgr_delete_all_ref_frames(dpb_mgr_t *ps_dpb_mgr) { /* Loop over short-term linked list. */ @@ -1106,23 +1105,41 @@ WORD32 ih264_dpb_mgr_delete_all_ref_frames(dpb_mgr_t *ps_dpb_mgr) return 0; } - +/** +******************************************************************************* +* +* @brief +* deletes all pictures from DPB and reset dpb +* +* @par Description: +* deletes all pictures from DPB and reset dpb +* +* @param[in] ps_dpb_mgr +* Pointer to the DPB manager structure +* +* @param[in] ps_buf_mgr +* Pointer to buffer manager structure +* +* @returns +* +* @remarks +* +******************************************************************************* +*/ void ih264_dpb_mgr_reset(dpb_mgr_t *ps_dpb_mgr, buf_mgr_t *ps_buf_mgr) { WORD32 i; dpb_info_t *ps_dpb_info; - ASSERT(0); - + ASSERT(0); ps_dpb_info = ps_dpb_mgr->as_dpb_info; - for(i = 0; i < MAX_DPB_BUFS; i++) { if(ps_dpb_info[i].ps_pic_buf->i4_used_as_ref) { ps_dpb_info[i].ps_pic_buf->i4_used_as_ref = UNUSED_FOR_REF; ps_dpb_info[i].ps_prev_dpb = NULL; - //Release physical buffer + // Release physical buffer ih264_buf_mgr_release(ps_buf_mgr, ps_dpb_info[i].ps_pic_buf->i4_buf_id, BUF_MGR_REF); @@ -1133,38 +1150,35 @@ void ih264_dpb_mgr_reset(dpb_mgr_t *ps_dpb_mgr, buf_mgr_t *ps_buf_mgr) ps_dpb_mgr->u1_num_long_term_ref_bufs = 0; ps_dpb_mgr->ps_dpb_short_term_head = NULL; ps_dpb_mgr->ps_dpb_long_term_head = NULL; - } /** - ******************************************************************************* - * - * @brief - * deletes all pictures from DPB - * - * @par Description: - * Deletes all pictures present in the DPB manager - * - * @param[in] ps_buf_mgr - * Pointer to buffer manager structure - * - * @param[in] u1_disp_bufs - * Number of buffers to be deleted - * - * @returns - * - * @remarks - * - * - ******************************************************************************* - */ - +******************************************************************************* +* +* @brief +* deletes all pictures from DPB +* +* @par Description: +* Deletes all pictures present in the DPB manager +* +* @param[in] ps_buf_mgr +* Pointer to buffer manager structure +* +* @param[in] u1_disp_bufs +* Number of buffers to be deleted +* +* @returns +* +* @remarks +* +******************************************************************************* +*/ void ih264_dpb_mgr_release_pics(buf_mgr_t *ps_buf_mgr, UWORD8 u1_disp_bufs) { WORD8 i; UWORD32 buf_status; - ASSERT(0); + ASSERT(0); for(i = 0; i < u1_disp_bufs; i++) { buf_status = ih264_buf_mgr_get_status(ps_buf_mgr, i); diff --git a/common/ih264_dpb_mgr.h b/common/ih264_dpb_mgr.h index b0cf0fd2..1e7198cc 100644 --- a/common/ih264_dpb_mgr.h +++ b/common/ih264_dpb_mgr.h @@ -19,27 +19,27 @@ */ /** - ******************************************************************************* - * @file - * ih264_dpb_mgr.h - * - * @brief - * Function declarations used for decoded picture buffer management - * - * @author - * Srinivas T - * - * - * @remarks - * None - * - ******************************************************************************* - */ +******************************************************************************* +* @file +* ih264_dpb_mgr.h +* +* @brief +* Function declarations used for decoded picture buffer management +* +* @author +* none +* +* @remarks +* none +* +******************************************************************************* +*/ #ifndef _IH264_DPB_MGR_H_ #define _IH264_DPB_MGR_H_ -/* Temporary definitions. Have to be defined later */ - +/*****************************************************************************/ +/* Constant Macros */ +/*****************************************************************************/ #define MAX_DPB_BUFS (MAX_DPB_SIZE * 4) #define MARK_ST_PICNUM_AS_NONREF 1 @@ -47,16 +47,21 @@ #define MARK_ST_PICNUM_AS_LT_INDEX 3 #define RESET_REF_PICTURES 5 -typedef struct dpb_info_t dpb_info_t; - +/*****************************************************************************/ +/* Enums */ +/*****************************************************************************/ enum { INVALID = -1, - UNUSED_FOR_REF = 0 , - LONG_TERM_REF , - SHORT_TERM_REF , + UNUSED_FOR_REF = 0, + LONG_TERM_REF, + SHORT_TERM_REF, }; -struct dpb_info_t + +/*****************************************************************************/ +/* Structure Definitions */ +/*****************************************************************************/ +typedef struct dpb_info_t { /** * Pointer to picture buffer structure @@ -66,9 +71,9 @@ struct dpb_info_t /** * Link to the DPB buffer with previous link */ - dpb_info_t *ps_prev_dpb; + struct dpb_info_t *ps_prev_dpb; -}; +} dpb_info_t; typedef struct { @@ -114,6 +119,9 @@ typedef struct } dpb_mgr_t; +/*****************************************************************************/ +/* Function Declarations */ +/*****************************************************************************/ void ih264_dpb_mgr_init(dpb_mgr_t *ps_dpb_mgr); WORD32 ih264_dpb_mgr_insert_ref_frame(dpb_mgr_t *ps_dpb_mgr, diff --git a/common/ih264_error.h b/common/ih264_error.h index ff1662d6..654955b1 100644 --- a/common/ih264_error.h +++ b/common/ih264_error.h @@ -17,6 +17,7 @@ ***************************************************************************** * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore */ + /** ******************************************************************************* * @file @@ -26,12 +27,10 @@ * Definitions related to error handling for common modules * * @author -* Harish -* -* @par List of Functions: +* ittiam * * @remarks -* None +* none * ******************************************************************************* */ diff --git a/common/ih264_ihadamard_scaling.c b/common/ih264_ihadamard_scaling.c index e4729c83..0e265f78 100644 --- a/common/ih264_ihadamard_scaling.c +++ b/common/ih264_ihadamard_scaling.c @@ -17,74 +17,82 @@ ***************************************************************************** * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore */ + /** - ******************************************************************************* - * @file - * ih264_ihadamard_scaling.c - * - * @brief - * Contains definition of functions for h264 inverse hadamard 4x4 transform and scaling - * - * @author - * Mohit - * - * @par List of Functions: - * - ih264_ihadamard_scaling_4x4() - * - * @remarks - * - ******************************************************************************* - */ +******************************************************************************* +* @file +* ih264_ihadamard_scaling.c +* +* @brief +* Contains definition of functions for h264 inverse hadamard 4x4 transform and +* scaling +* +* @author +* ittiam +* +* @par List of Functions: +* - ih264_ihadamard_scaling_4x4 +* - ih264_ihadamard_scaling_2x2_uv +* +* @remarks +* none +* +******************************************************************************* +*/ /*****************************************************************************/ /* File Includes */ /*****************************************************************************/ -/* User include files */ +/* User Include Files */ #include "ih264_typedefs.h" +#include "ih264_macros.h" #include "ih264_defs.h" #include "ih264_trans_macros.h" -#include "ih264_macros.h" #include "ih264_trans_data.h" #include "ih264_size_defs.h" #include "ih264_structs.h" #include "ih264_trans_quant_itrans_iquant.h" -/* - ******************************************************************************** - * - * @brief This function performs a 4x4 inverse hadamard transform on the 4x4 DC coefficients - * of a 16x16 intra prediction macroblock, and then performs scaling. - * prediction buffer - * - * @par Description: - * The DC coefficients pass through a 2-stage inverse hadamard transform. - * This inverse transformed content is scaled to based on Qp value. - * - * @param[in] pi2_src - * input 4x4 block of DC coefficients - * - * @param[out] pi2_out - * output 4x4 block - * - * @param[in] pu2_iscal_mat - * pointer to scaling list - * - * @param[in] pu2_weigh_mat - * pointer to weight matrix - * - * @param[in] u4_qp_div_6 - * Floor (qp/6) - * - * @param[in] pi4_tmp - * temporary buffer of size 1*16 - * - * @returns none - * - * @remarks none - * - ******************************************************************************* - */ + +/*****************************************************************************/ +/* Function Definitions */ +/*****************************************************************************/ + +/** +******************************************************************************** +* +* @brief This function performs a 4x4 inverse hadamard transform on the luma +* DC coefficients and then performs scaling. +* +* @par Description: +* The DC coefficients pass through a 2-stage inverse hadamard transform. +* This inverse transformed content is scaled to based on Qp value. +* +* @param[in] pi2_src +* input 4x4 block of DC coefficients +* +* @param[out] pi2_out +* output 4x4 block +* +* @param[in] pu2_iscal_mat +* pointer to scaling list +* +* @param[in] pu2_weigh_mat +* pointer to weight matrix +* +* @param[in] u4_qp_div_6 +* Floor (qp/6) +* +* @param[in] pi4_tmp +* temporary buffer of size 1*16 +* +* @returns none +* +* @remarks none +* +******************************************************************************* +*/ void ih264_ihadamard_scaling_4x4(WORD16* pi2_src, WORD16* pi2_out, const UWORD16 *pu2_iscal_mat, @@ -94,13 +102,15 @@ void ih264_ihadamard_scaling_4x4(WORD16* pi2_src, { WORD32 i; WORD32 x0, x1, x2, x3, x4, x5, x6, x7; - WORD16* pi2_src_ptr, *pi2_out_ptr; - WORD32* pi4_tmp_ptr; + WORD16 *pi2_src_ptr, *pi2_out_ptr; + WORD32 *pi4_tmp_ptr; WORD32 rnd_fact = (u4_qp_div_6 < 6) ? (1 << (5 - u4_qp_div_6)) : 0; + pi4_tmp_ptr = pi4_tmp; pi2_src_ptr = pi2_src; pi2_out_ptr = pi2_out; - // Horizontal transform + + /* horizontal transform */ for(i = 0; i < SUB_BLK_WIDTH_4x4; i++) { x4 = pi2_src_ptr[0]; @@ -121,8 +131,9 @@ void ih264_ihadamard_scaling_4x4(WORD16* pi2_src, pi4_tmp_ptr += SUB_BLK_WIDTH_4x4; pi2_src_ptr += SUB_BLK_WIDTH_4x4; } + + /* vertical transform */ pi4_tmp_ptr = pi4_tmp; - // Vertical Transform for(i = 0; i < SUB_BLK_WIDTH_4x4; i++) { x4 = pi4_tmp_ptr[0]; @@ -143,15 +154,50 @@ void ih264_ihadamard_scaling_4x4(WORD16* pi2_src, pi4_tmp_ptr++; } pi4_tmp_ptr = pi4_tmp; - //Scaling + + /* scaling */ for(i = 0; i < (SUB_BLK_WIDTH_4x4 * SUB_BLK_WIDTH_4x4); i++) { - INV_QUANT(pi4_tmp_ptr[i], pu2_iscal_mat[0], pu2_weigh_mat[0], u4_qp_div_6, - rnd_fact, 6); - pi2_out_ptr[i] = pi4_tmp_ptr[i]; + INV_QUANT(pi4_tmp_ptr[i], pu2_iscal_mat[0], pu2_weigh_mat[0], + u4_qp_div_6, rnd_fact, 6); + pi2_out_ptr[i] = pi4_tmp_ptr[i]; } } +/** +******************************************************************************** +* +* @brief This function performs a 2x2 inverse hadamard transform on the chroma +* DC coefficients and then performs scaling. +* +* @par Description: +* The DC coefficients pass through a 2-stage inverse hadamard transform. +* This inverse transformed content is scaled to based on Qp value. +* +* @param[in] pi2_src +* input 2x2 block of DC coefficients +* +* @param[out] pi2_out +* output 2x2 block +* +* @param[in] pu2_iscal_mat +* pointer to scaling list +* +* @param[in] pu2_weigh_mat +* pointer to weight matrix +* +* @param[in] u4_qp_div_6 +* Floor (qp/6) +* +* @param[in] pi4_tmp +* temporary buffer of size 1*16 +* +* @returns none +* +* @remarks none +* +******************************************************************************* +*/ void ih264_ihadamard_scaling_2x2_uv(WORD16* pi2_src, WORD16* pi2_out, const UWORD16 *pu2_iscal_mat, @@ -159,58 +205,60 @@ void ih264_ihadamard_scaling_2x2_uv(WORD16* pi2_src, UWORD32 u4_qp_div_6, WORD32* pi4_tmp) { - WORD32 i4_x0,i4_x1,i4_x2,i4_x3,i4_x4,i4_x5,i4_x6,i4_x7; - WORD32 i4_y0,i4_y1,i4_y2,i4_y3,i4_y4,i4_y5,i4_y6,i4_y7; - - UNUSED(pi4_tmp); - - i4_x4 = pi2_src[0]; - i4_x5 = pi2_src[1]; - i4_x6 = pi2_src[2]; - i4_x7 = pi2_src[3]; - - i4_x0 = i4_x4 + i4_x5; - i4_x1 = i4_x4 - i4_x5; - i4_x2 = i4_x6 + i4_x7; - i4_x3 = i4_x6 - i4_x7; - - i4_x4 = i4_x0+i4_x2; - i4_x5 = i4_x1+i4_x3; - i4_x6 = i4_x0-i4_x2; - i4_x7 = i4_x1-i4_x3; - - INV_QUANT(i4_x4,pu2_iscal_mat[0],pu2_weigh_mat[0],u4_qp_div_6,0,5); - INV_QUANT(i4_x5,pu2_iscal_mat[0],pu2_weigh_mat[0],u4_qp_div_6,0,5); - INV_QUANT(i4_x6,pu2_iscal_mat[0],pu2_weigh_mat[0],u4_qp_div_6,0,5); - INV_QUANT(i4_x7,pu2_iscal_mat[0],pu2_weigh_mat[0],u4_qp_div_6,0,5); - - pi2_out[0] = i4_x4; - pi2_out[1] = i4_x5; - pi2_out[2] = i4_x6; - pi2_out[3] = i4_x7; - - i4_y4 = pi2_src[4]; - i4_y5 = pi2_src[5]; - i4_y6 = pi2_src[6]; - i4_y7 = pi2_src[7]; - - i4_y0 = i4_y4 + i4_y5; - i4_y1 = i4_y4 - i4_y5; - i4_y2 = i4_y6 + i4_y7; - i4_y3 = i4_y6 - i4_y7; - - i4_y4 = i4_y0+i4_y2; - i4_y5 = i4_y1+i4_y3; - i4_y6 = i4_y0-i4_y2; - i4_y7 = i4_y1-i4_y3; - - INV_QUANT(i4_y4,pu2_iscal_mat[0],pu2_weigh_mat[0],u4_qp_div_6,0,5); - INV_QUANT(i4_y5,pu2_iscal_mat[0],pu2_weigh_mat[0],u4_qp_div_6,0,5); - INV_QUANT(i4_y6,pu2_iscal_mat[0],pu2_weigh_mat[0],u4_qp_div_6,0,5); - INV_QUANT(i4_y7,pu2_iscal_mat[0],pu2_weigh_mat[0],u4_qp_div_6,0,5); - - pi2_out[4] = i4_y4; - pi2_out[5] = i4_y5; - pi2_out[6] = i4_y6; - pi2_out[7] = i4_y7; + WORD32 i4_x0, i4_x1, i4_x2, i4_x3, i4_x4, i4_x5, i4_x6, i4_x7; + WORD32 i4_y0, i4_y1, i4_y2, i4_y3, i4_y4, i4_y5, i4_y6, i4_y7; + + UNUSED(pi4_tmp); + + /* U Plane */ + i4_x4 = pi2_src[0]; + i4_x5 = pi2_src[1]; + i4_x6 = pi2_src[2]; + i4_x7 = pi2_src[3]; + + i4_x0 = i4_x4 + i4_x5; + i4_x1 = i4_x4 - i4_x5; + i4_x2 = i4_x6 + i4_x7; + i4_x3 = i4_x6 - i4_x7; + + i4_x4 = i4_x0 + i4_x2; + i4_x5 = i4_x1 + i4_x3; + i4_x6 = i4_x0 - i4_x2; + i4_x7 = i4_x1 - i4_x3; + + INV_QUANT(i4_x4, pu2_iscal_mat[0], pu2_weigh_mat[0], u4_qp_div_6, 0, 5); + INV_QUANT(i4_x5, pu2_iscal_mat[0], pu2_weigh_mat[0], u4_qp_div_6, 0, 5); + INV_QUANT(i4_x6, pu2_iscal_mat[0], pu2_weigh_mat[0], u4_qp_div_6, 0, 5); + INV_QUANT(i4_x7, pu2_iscal_mat[0], pu2_weigh_mat[0], u4_qp_div_6, 0, 5); + + pi2_out[0] = i4_x4; + pi2_out[1] = i4_x5; + pi2_out[2] = i4_x6; + pi2_out[3] = i4_x7; + + /* V Plane */ + i4_y4 = pi2_src[4]; + i4_y5 = pi2_src[5]; + i4_y6 = pi2_src[6]; + i4_y7 = pi2_src[7]; + + i4_y0 = i4_y4 + i4_y5; + i4_y1 = i4_y4 - i4_y5; + i4_y2 = i4_y6 + i4_y7; + i4_y3 = i4_y6 - i4_y7; + + i4_y4 = i4_y0 + i4_y2; + i4_y5 = i4_y1 + i4_y3; + i4_y6 = i4_y0 - i4_y2; + i4_y7 = i4_y1 - i4_y3; + + INV_QUANT(i4_y4, pu2_iscal_mat[0], pu2_weigh_mat[0], u4_qp_div_6, 0, 5); + INV_QUANT(i4_y5, pu2_iscal_mat[0], pu2_weigh_mat[0], u4_qp_div_6, 0, 5); + INV_QUANT(i4_y6, pu2_iscal_mat[0], pu2_weigh_mat[0], u4_qp_div_6, 0, 5); + INV_QUANT(i4_y7, pu2_iscal_mat[0], pu2_weigh_mat[0], u4_qp_div_6, 0, 5); + + pi2_out[4] = i4_y4; + pi2_out[5] = i4_y5; + pi2_out[6] = i4_y6; + pi2_out[7] = i4_y7; } diff --git a/common/ih264_inter_pred_filters.c b/common/ih264_inter_pred_filters.c index 7d1e4079..93bd9440 100644 --- a/common/ih264_inter_pred_filters.c +++ b/common/ih264_inter_pred_filters.c @@ -17,36 +17,37 @@ ***************************************************************************** * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore */ + /** - ******************************************************************************* - * @file - * ih264_inter_pred_filters.c - * - * @brief - * Contains function definitions for inter prediction interpolation filters - * - * @author - * Ittiam - * - * @par List of Functions: - * - ih264_inter_pred_luma_copy - * - ih264_interleave_copy - * - ih264_inter_pred_luma_horz - * - ih264_inter_pred_luma_vert - * - ih264_inter_pred_luma_horz_hpel_vert_hpel - * - ih264_inter_pred_luma_horz_qpel - * - ih264_inter_pred_luma_vert_qpel - * - ih264_inter_pred_luma_horz_qpel_vert_qpel - * - ih264_inter_pred_luma_horz_hpel_vert_qpel - * - ih264_inter_pred_luma_horz_qpel_vert_hpel - * - ih264_inter_pred_luma_bilinear - * - ih264_inter_pred_chroma - * - * @remarks - * None - * - ******************************************************************************* - */ +******************************************************************************* +* @file +* ih264_inter_pred_filters.c +* +* @brief +* Contains function definitions for inter prediction interpolation filters +* +* @author +* ittiam +* +* @par List of Functions: +* - ih264_inter_pred_luma_copy +* - ih264_interleave_copy +* - ih264_inter_pred_luma_horz +* - ih264_inter_pred_luma_vert +* - ih264_inter_pred_luma_horz_hpel_vert_hpel +* - ih264_inter_pred_luma_horz_qpel +* - ih264_inter_pred_luma_vert_qpel +* - ih264_inter_pred_luma_horz_qpel_vert_qpel +* - ih264_inter_pred_luma_horz_hpel_vert_qpel +* - ih264_inter_pred_luma_horz_qpel_vert_hpel +* - ih264_inter_pred_luma_bilinear +* - ih264_inter_pred_chroma +* +* @remarks +* none +* +******************************************************************************* +*/ /*****************************************************************************/ /* File Includes */ @@ -55,68 +56,79 @@ /* User include files */ #include "ih264_typedefs.h" #include "ih264_macros.h" -#include "ih264_platform_macros.h" #include "ih264_inter_pred_filters.h" +#include "ih264_platform_macros.h" /*****************************************************************************/ /* Constant Data variables */ /*****************************************************************************/ - -/* coefficients for 6 tap filtering*/ -const WORD32 ih264_g_six_tap[3] ={1,-5,20}; +/** + ****************************************************************************** + * @brief coefficients for 6 tap filtering + ****************************************************************************** + */ +const WORD32 ih264_g_six_tap[3] = +{ + 1, -5, 20 +}; /*****************************************************************************/ /* Function definitions . */ /*****************************************************************************/ -/** - ******************************************************************************* - * - * @brief - * Interprediction luma function for copy - * - * @par Description: - * Copies the array of width 'wd' and height 'ht' from the location pointed - * by 'src' to the location pointed by 'dst' - * - * @param[in] pu1_src - * UWORD8 pointer to the source - * - * @param[out] pu1_dst - * UWORD8 pointer to the destination - * - * @param[in] src_strd - * integer source stride - * - * @param[in] dst_strd - * integer destination stride - * - * - * @param[in] ht - * integer height of the array - * - * @param[in] wd - * integer width of the array - * - * @returns - * - * @remarks - * None - * - ******************************************************************************* - */ +/** +******************************************************************************* +* +* @brief function for luma copy +* +* @par Description: +* Copies the array of width 'wd' and height 'ht' from the location pointed +* by 'src' to the location pointed by 'dst' +* +* @param[in] pu1_src +* pointer to the source +* +* @param[out] pu1_dst +* pointer to the destination +* +* @param[in] src_strd +* source stride +* +* @param[in] dst_strd +* destination stride +* +* @param[in] ht +* height of the array +* +* @param[in] wd +* width of the array +* +* @param[in] pu1_tmp +* temporary buffer +* +* @param[in] dydx +* x and y reference offset for qpel calculations +* +* @returns +* +* @remarks +* none +* +******************************************************************************* +*/ void ih264_inter_pred_luma_copy(UWORD8 *pu1_src, UWORD8 *pu1_dst, WORD32 src_strd, WORD32 dst_strd, WORD32 ht, WORD32 wd, - UWORD8* pu1_tmp, + UWORD8 *pu1_tmp, WORD32 dydx) { WORD32 row, col; + UNUSED(pu1_tmp); UNUSED(dydx); for(row = 0; row < ht; row++) @@ -132,41 +144,40 @@ void ih264_inter_pred_luma_copy(UWORD8 *pu1_src, } /** - ******************************************************************************* - * - * @brief - * Fucntion for copying to an interleaved destination - * - * @par Description: - * Copies the array of width 'wd' and height 'ht' from the location pointed - * by 'src' to the location pointed by 'dst' - * - * @param[in] pu1_src - * UWORD8 pointer to the source - * - * @param[out] pu1_dst - * UWORD8 pointer to the destination - * - * @param[in] src_strd - * integer source stride - * - * @param[in] dst_strd - * integer destination stride - * - * @param[in] ht - * integer height of the array - * - * @param[in] wd - * integer width of the array - * - * @returns - * - * @remarks - * The alternate elements of src will be copied to alternate locations in dsr - * Other locations are not touched - * - ******************************************************************************* - */ +******************************************************************************* +* +* @brief interleaved copy +* +* @par Description: +* Copies the array of width 'wd' and height 'ht' from the location pointed +* by 'src' to the location pointed by 'dst' +* +* @param[in] pu1_src +* pointer to the source +* +* @param[out] pu1_dst +* pointer to the destination +* +* @param[in] src_strd +* source stride +* +* @param[in] dst_strd +* destination stride +* +* @param[in] ht +* height of the array +* +* @param[in] wd +* width of the array +* +* @returns +* +* @remarks +* The alternate elements of src will be copied to alternate locations in dsr +* Other locations are not touched +* +******************************************************************************* +*/ void ih264_interleave_copy(UWORD8 *pu1_src, UWORD8 *pu1_dst, WORD32 src_strd, @@ -175,150 +186,151 @@ void ih264_interleave_copy(UWORD8 *pu1_src, WORD32 wd) { WORD32 row, col; - wd *= 2; + wd *= 2; for(row = 0; row < ht; row++) { - for(col = 0; col < wd; col+=2) + for(col = 0; col < wd; col += 2) { pu1_dst[col] = pu1_src[col]; } - pu1_src += src_strd; pu1_dst += dst_strd; } } /** - ******************************************************************************* - * - * @brief - * Interprediction luma filter for horizontal input - * - * @par Description: - * Applies a 6 tap horizontal filter .The output is clipped to 8 bits - * sec 8.4.2.2.1 titled "Luma sample interpolation process" - * - * @param[in] pu1_src - * UWORD8 pointer to the source - * - * @param[out] pu1_dst - * UWORD8 pointer to the destination - * - * @param[in] src_strd - * integer source stride - * - * @param[in] dst_strd - * integer destination stride - * - * @param[in] ht - * integer height of the array - * - * @param[in] wd - * integer width of the array - * - * @returns - * - * @remarks - * None - * - ******************************************************************************* - */ +******************************************************************************* +* +* @brief +* Luma hpel Horizontal Interprediction +* +* @par Description: +* Applies a 6 tap horizontal filter. The output is clipped to 8 bits. +* Refer sec 8.4.2.2.1 titled "Luma sample interpolation process" +* +* @param[in] pu1_src +* pointer to the source +* +* @param[out] pu1_dst +* pointer to the destination +* +* @param[in] src_strd +* source stride +* +* @param[in] dst_strd +* destination stride +* +* @param[in] ht +* height of the array +* +* @param[in] wd +* width of the array +* +* @param[in] pu1_tmp +* temporary buffer +* +* @param[in] dydx +* x and y reference offset for qpel calculations +* +* @returns +* +* @remarks +* none +* +******************************************************************************* +*/ void ih264_inter_pred_luma_horz(UWORD8 *pu1_src, UWORD8 *pu1_dst, WORD32 src_strd, WORD32 dst_strd, WORD32 ht, WORD32 wd, - UWORD8* pu1_tmp, + UWORD8 *pu1_tmp, WORD32 dydx) { WORD32 row, col; WORD16 i2_tmp; + UNUSED(pu1_tmp); UNUSED(dydx); - for(row = 0; row < ht; row++) { for(col = 0; col < wd; col++) { - i2_tmp = 0;/*ih264_g_six_tap[] is the array containing the filter coeffs*/ - i2_tmp = ih264_g_six_tap[0] * - (pu1_src[col - 2] + pu1_src[col + 3]) - + ih264_g_six_tap[1] * - (pu1_src[col - 1] + pu1_src[col + 2]) - + ih264_g_six_tap[2] * - (pu1_src[col] + pu1_src[col + 1]); + i2_tmp = ih264_g_six_tap[0] * (pu1_src[col - 2] + pu1_src[col + 3]) + + ih264_g_six_tap[1] * (pu1_src[col - 1] + pu1_src[col + 2]) + + ih264_g_six_tap[2] * (pu1_src[col] + pu1_src[col + 1]); i2_tmp = (i2_tmp + 16) >> 5; pu1_dst[col] = CLIP_U8(i2_tmp); } - pu1_src += src_strd; pu1_dst += dst_strd; } - } /** - ******************************************************************************* - * - * @brief - * Interprediction luma filter for vertical input - * - * @par Description: - * Applies a 6 tap vertical filter.The output is clipped to 8 bits - * sec 8.4.2.2.1 titled "Luma sample interpolation process" - * - * @param[in] pu1_src - * UWORD8 pointer to the source - * - * @param[out] pu1_dst - * UWORD8 pointer to the destination - * - * @param[in] src_strd - * integer source stride - * - * @param[in] dst_strd - * integer destination stride - * - * @param[in] ht - * integer height of the array - * - * @param[in] wd - * integer width of the array - * - * @returns - * - * @remarks - * None - * - ******************************************************************************* - */ +******************************************************************************* +* +* @brief +* Luma hpel Vertical Interprediction +* +* @par Description: +* Applies a 6 tap vertical filter.The output is clipped to 8 bits +* Refer sec 8.4.2.2.1 titled "Luma sample interpolation process" +* +* @param[in] pu1_src +* pointer to the source +* +* @param[out] pu1_dst +* pointer to the destination +* +* @param[in] src_strd +* source stride +* +* @param[in] dst_strd +* destination stride +* +* @param[in] ht +* height of the array +* +* @param[in] wd +* width of the array +* +* @param[in] pu1_tmp +* temporary buffer +* +* @param[in] dydx +* x and y reference offset for qpel calculations +* +* @returns +* +* @remarks +* none +* +******************************************************************************* +*/ void ih264_inter_pred_luma_vert(UWORD8 *pu1_src, UWORD8 *pu1_dst, WORD32 src_strd, WORD32 dst_strd, WORD32 ht, WORD32 wd, - UWORD8* pu1_tmp, + UWORD8 *pu1_tmp, WORD32 dydx) { WORD32 row, col; WORD16 i2_tmp; + UNUSED(pu1_tmp); UNUSED(dydx); - for(row = 0; row < ht; row++) { for(col = 0; col < wd; col++) { - i2_tmp = 0; /*ih264_g_six_tap[] is the array containing the filter coeffs*/ - i2_tmp = ih264_g_six_tap[0] * - (pu1_src[col - 2 * src_strd] + pu1_src[col + 3 * src_strd]) - + ih264_g_six_tap[1] * - (pu1_src[col - 1 * src_strd] + pu1_src[col + 2 * src_strd]) - + ih264_g_six_tap[2] * - (pu1_src[col] + pu1_src[col + 1 * src_strd]); + i2_tmp = ih264_g_six_tap[0] * (pu1_src[col - 2 * src_strd] + pu1_src[col + 3 * src_strd]) + + ih264_g_six_tap[1] * (pu1_src[col - 1 * src_strd] + pu1_src[col + 2 * src_strd]) + + ih264_g_six_tap[2] * (pu1_src[col] + pu1_src[col + 1 * src_strd]); i2_tmp = (i2_tmp + 16) >> 5; pu1_dst[col] = CLIP_U8(i2_tmp); } @@ -327,70 +339,82 @@ void ih264_inter_pred_luma_vert(UWORD8 *pu1_src, } } -/*! - ************************************************************************** - * \if Function name : ih264_inter_pred_luma_horz_hpel_vert_hpel \endif - * - * \brief - * This function implements a two stage cascaded six tap filter. It - * applies the six tap filter in the horizontal direction on the - * predictor values, followed by applying the same filter in the - * vertical direction on the output of the first stage. The six tap - * filtering operation is described in sec 8.4.2.2.1 titled "Luma sample - * interpolation process" - * - * \param pu1_src: Pointer to the buffer containing the predictor values. - * pu1_src could point to the frame buffer or the predictor buffer. - * \param pu1_dst: Pointer to the destination buffer where the output of - * the six tap filter is stored. - * \param ht: Height of the rectangular pixel grid to be interpolated - * \param wd: Width of the rectangular pixel grid to be interpolated - * \param src_strd: Width of the buffer pointed to by pu1_src. - * \param dst_strd: Width of the destination buffer - * \param pu1_tmp: temporary buffer. - * \param dydx: x and y reference offset for qpel calculations: UNUSED in this function. - * - * \return - * None. - * - * \note - * This function takes the 8 bit predictor values, applies the six tap - * filter in the horizontal direction and outputs the result clipped to - * 8 bit precision. The input is stored in the buffer pointed to by - * pu1_src while the output is stored in the buffer pointed by pu1_dst. - * Both pu1_src and pu1_dst could point to the same buffer i.e. the - * six tap filter could be done in place. - * - ************************************************************************** - */ +/** +******************************************************************************* +* +* @brief +* Luma Horizontal hpel & Vertical hpel Interprediction +* +* @par Description: +* This function implements a two stage cascaded six tap filter. It +* applies the six tap filter in the horizontal direction on the +* predictor values, followed by applying the same filter in the +* vertical direction on the output of the first stage. The six tap +* filtering operation is described in sec 8.4.2.2.1 titled "Luma sample +* interpolation process" +* +* @param[in] pu1_src +* pointer to the source +* +* @param[out] pu1_dst +* pointer to the destination +* +* @param[in] src_strd +* source stride +* +* @param[in] dst_strd +* destination stride +* +* @param[in] ht +* height of the array +* +* @param[in] wd +* width of the array +* +* @param[in] pu1_tmp +* temporary buffer +* +* @param[in] dydx +* x and y reference offset for qpel calculations +* +* @returns +* +* @remarks +* This function takes the 8 bit predictor values, applies the six tap +* filter in the horizontal direction and outputs the result clipped to +* 8 bit precision. The input is stored in the buffer pointed to by +* pu1_src while the output is stored in the buffer pointed by pu1_dst. +* Both pu1_src and pu1_dst could point to the same buffer i.e. the +* six tap filter could be done in place. +* +******************************************************************************* +*/ void ih264_inter_pred_luma_horz_hpel_vert_hpel(UWORD8 *pu1_src, UWORD8 *pu1_dst, WORD32 src_strd, WORD32 dst_strd, WORD32 ht, WORD32 wd, - UWORD8* pu1_tmp, + UWORD8 *pu1_tmp, WORD32 dydx) { WORD32 row, col; WORD32 tmp; - WORD16* pi2_pred1_temp; - WORD16* pi2_pred1; + WORD16 *pi2_pred1_temp; + WORD16 *pi2_pred1; + UNUSED(dydx); pi2_pred1_temp = (WORD16*)pu1_tmp; pi2_pred1_temp += 2; pi2_pred1 = pi2_pred1_temp; + for(row = 0; row < ht; row++) { for(col = -2; col < wd + 3; col++) { - tmp = 0;/*ih264_g_six_tap[] is the array containing the filter coeffs*/ - tmp = ih264_g_six_tap[0] * - (pu1_src[col - 2 * src_strd] + pu1_src[col + 3 * src_strd]) - + ih264_g_six_tap[1] * - (pu1_src[col - 1 * src_strd] + pu1_src[col + 2 * src_strd]) - + ih264_g_six_tap[2] * - (pu1_src[col] + pu1_src[col + 1 * src_strd]); + tmp = ih264_g_six_tap[0] * (pu1_src[col - 2 * src_strd] + pu1_src[col + 3 * src_strd]) + + ih264_g_six_tap[1] * (pu1_src[col - 1 * src_strd] + pu1_src[col + 2 * src_strd]) + + ih264_g_six_tap[2] * (pu1_src[col] + pu1_src[col + 1 * src_strd]); pi2_pred1_temp[col] = tmp; } pu1_src += src_strd; @@ -401,11 +425,8 @@ void ih264_inter_pred_luma_horz_hpel_vert_hpel(UWORD8 *pu1_src, { for(col = 0; col < wd; col++) { - tmp = 0;/*ih264_g_six_tap[] is the array containing the filter coeffs*/ - tmp = ih264_g_six_tap[0] * - (pi2_pred1[col - 2] + pi2_pred1[col + 3]) - + ih264_g_six_tap[1] * - (pi2_pred1[col - 1] + pi2_pred1[col + 2]) + tmp = ih264_g_six_tap[0] * (pi2_pred1[col - 2] + pi2_pred1[col + 3]) + + ih264_g_six_tap[1] * (pi2_pred1[col - 1] + pi2_pred1[col + 2]) + ih264_g_six_tap[2] * (pi2_pred1[col] + pi2_pred1[col + 1]); tmp = (tmp + 512) >> 10; pu1_dst[col] = CLIP_U8(tmp); @@ -415,39 +436,55 @@ void ih264_inter_pred_luma_horz_hpel_vert_hpel(UWORD8 *pu1_src, } } -/*! - ************************************************************************** - * \if Function name : ih264_inter_pred_luma_horz_qpel \endif - * - * \brief - * This routine applies the six tap filter to the predictors in the - * horizontal direction. The six tap filtering operation is described in - * sec 8.4.2.2.1 titled "Luma sample interpolation process" - * - * \param pu1_src: Pointer to the buffer containing the predictor values. - * pu1_src could point to the frame buffer or the predictor buffer. - * \param pu1_dst: Pointer to the destination buffer where the output of - * the six tap filter is stored. - * \param ht: Height of the rectangular pixel grid to be interpolated - * \param wd: Width of the rectangular pixel grid to be interpolated - * \param src_strd: Width of the buffer pointed to by pu1_src. - * \param dst_strd: Width of the destination buffer - * \param pu1_tmp: temporary buffer: UNUSED in this function - * \param dydx: x and y reference offset for qpel calculations. - * - * \return - * None. - * - * \note - * This function takes the 8 bit predictor values, applies the six tap - * filter in the horizontal direction and outputs the result clipped to - * 8 bit precision. The input is stored in the buffer pointed to by - * pu1_src while the output is stored in the buffer pointed by pu1_dst. - * Both pu1_src and pu1_dst could point to the same buffer i.e. the - * six tap filter could be done in place. - * - ************************************************************************** - */ +/** +******************************************************************************* +* +* @brief +* Luma Horizontal qpel Interprediction +* +* @par Description: +* This routine applies the six tap filter to the predictors in the +* horizontal direction and interpolates them to obtain pixels at quarter +* horizontal positions (1/4, 0) and (3/4, 0). The six tap filtering operation +* is described in sec 8.4.2.2.1 titled "Luma sample interpolation process" +* +* @param[in] pu1_src +* Pointer to the buffer containing the predictor values. +* +* @param[out] pu1_dst +* Pointer to the destination buffer where the output of the six tap filter is +* stored +* +* @param[in] src_strd +* source stride +* +* @param[in] dst_strd +* destination stride +* +* @param[in] ht +* Height of the rectangular pixel grid to be interpolated +* +* @param[in] wd +* Width of the rectangular pixel grid to be interpolated +* +* @param[in] pu1_tmp +* temporary buffer. UNUSED in this function +* +* @param[in] dydx +* x and y reference offset for qpel calculations +* +* @returns +* +* @remarks +* This function takes the 8 bit predictor values, applies the six tap +* filter in the horizontal direction and outputs the result clipped to +* 8 bit precision. The input is stored in the buffer pointed to by +* pu1_src while the output is stored in the buffer pointed by pu1_dst. +* Both pu1_src and pu1_dst could point to the same buffer i.e. the +* six tap filter could be done in place. +* +******************************************************************************* +*/ void ih264_inter_pred_luma_horz_qpel(UWORD8 *pu1_src, UWORD8 *pu1_dst, WORD32 src_strd, @@ -487,43 +524,55 @@ void ih264_inter_pred_luma_horz_qpel(UWORD8 *pu1_src, } } -/*! - ************************************************************************** - * \if Function name : ih264_inter_pred_luma_vert_qpel \endif - * - * \brief - * This routine applies the six tap filter to the predictors in the - * vertical direction and interpolates them to obtain pixels at quarter vertical - * positions (0, 1/4) and (0, 3/4). The six tap filtering operation is - * described in sec 8.4.2.2.1 titled "Luma sample interpolation process" - * - * \param pu1_src: Pointer to the buffer containing the predictor values. - * pu1_src could point to the frame buffer or the predictor buffer. - * \param pu1_dst: Pointer to the destination buffer where the output of - * the six tap filter is stored. - * \param ht: Height of the rectangular pixel grid to be interpolated - * \param wd: Width of the rectangular pixel grid to be interpolated - * \param src_strd: Width of the buffer pointed to by puc_pred. - * \param dst_strd: Width of the destination buffer - * \param pu1_tmp: temporary buffer: UNUSED in this function - * \param dydx: x and y reference offset for qpel calculations. - * - * \return - * void - * - * \note - * This function takes the 8 bit predictor values, applies the six tap - * filter in the vertical direction and outputs the result clipped to - * 8 bit precision. The input is stored in the buffer pointed to by - * puc_pred while the output is stored in the buffer pointed by puc_dest. - * Both puc_pred and puc_dest could point to the same buffer i.e. the - * six tap filter could be done in place. - * - * \para - * <paragraph> - * ... - ************************************************************************** - */ +/** +******************************************************************************* +* +* @brief +* Luma vertical qpel Interprediction +* +* @par Description: +* This routine applies the six tap filter to the predictors in the +* vertical direction and interpolates them to obtain pixels at quarter +* vertical positions (0, 1/4) and (0, 3/4). The six tap filtering operation +* is described in sec 8.4.2.2.1 titled "Luma sample interpolation process" +* +* @param[in] pu1_src +* Pointer to the buffer containing the predictor values. +* +* @param[out] pu1_dst +* Pointer to the destination buffer where the output of the six tap filter is +* stored +* +* @param[in] src_strd +* source stride +* +* @param[in] dst_strd +* destination stride +* +* @param[in] ht +* Height of the rectangular pixel grid to be interpolated +* +* @param[in] wd +* Width of the rectangular pixel grid to be interpolated +* +* @param[in] pu1_tmp +* temporary buffer. UNUSED in this function +* +* @param[in] dydx +* x and y reference offset for qpel calculations +* +* @returns +* +* @remarks +* This function takes the 8 bit predictor values, applies the six tap +* filter in the horizontal direction and outputs the result clipped to +* 8 bit precision. The input is stored in the buffer pointed to by +* pu1_src while the output is stored in the buffer pointed by pu1_dst. +* Both pu1_src and pu1_dst could point to the same buffer i.e. the +* six tap filter could be done in place. +* +******************************************************************************* +*/ void ih264_inter_pred_luma_vert_qpel(UWORD8 *pu1_src, UWORD8 *pu1_dst, WORD32 src_strd, @@ -570,43 +619,55 @@ void ih264_inter_pred_luma_vert_qpel(UWORD8 *pu1_src, } } -/*! - ************************************************************************** - * \if Function name : ih264_inter_pred_luma_horz_qpel_vert_qpel \endif - * - * \brief - * This routine applies the six tap filter to the predictors in the - * vertical and horizontal direction and averages them to get pixels at locations - * (1/4,1/4), (1/4, 3/4), (3/4, 1/4) & (3/4, 3/4). The six tap filtering operation - * is described in sec 8.4.2.2.1 titled "Luma sample interpolation process" - * - * \param pu1_src: Pointer to the buffer containing the predictor values. - * pu1_src could point to the frame buffer or the predictor buffer. - * \param pu1_dst: Pointer to the destination buffer where the output of - * the six tap filter is stored. - * \param wd: Width of the rectangular pixel grid to be interpolated - * \param ht: Height of the rectangular pixel grid to be interpolated - * \param src_strd: Width of the buffer pointed to by puc_pred. - * \param dst_strd: Width of the destination buffer - * \param pu1_tmp: temporary buffer, UNUSED in this function - * \param dydx: x and y reference offset for qpel calculations. - * - * \return - * void - * - * \note - * This function takes the 8 bit predictor values, applies the six tap - * filter in the vertical direction and outputs the result clipped to - * 8 bit precision. The input is stored in the buffer pointed to by - * puc_pred while the output is stored in the buffer pointed by puc_dest. - * Both puc_pred and puc_dest could point to the same buffer i.e. the - * six tap filter could be done in place. - * - * \para <title> - * <paragraph> - * ... - ************************************************************************** - */ +/** +******************************************************************************* +* +* @brief +* Luma Horizontal qpel and vertical qpel Interprediction +* +* @par Description: +* This routine applies the six tap filter to the predictors in the +* vertical and horizontal direction averages them to get pixels at locations +* (1/4, 1/4), (1/4, 3/4), (3/4, 1/4) & (3/4, 3/4). The six tap filtering operation +* is described in sec 8.4.2.2.1 titled "Luma sample interpolation process" +* +* @param[in] pu1_src +* Pointer to the buffer containing the predictor values. +* +* @param[out] pu1_dst +* Pointer to the destination buffer where the output of the six tap filter is +* stored +* +* @param[in] src_strd +* source stride +* +* @param[in] dst_strd +* destination stride +* +* @param[in] ht +* Height of the rectangular pixel grid to be interpolated +* +* @param[in] wd +* Width of the rectangular pixel grid to be interpolated +* +* @param[in] pu1_tmp +* temporary buffer. UNUSED in this function +* +* @param[in] dydx +* x and y reference offset for qpel calculations +* +* @returns +* +* @remarks +* This function takes the 8 bit predictor values, applies the six tap +* filter in the horizontal direction and outputs the result clipped to +* 8 bit precision. The input is stored in the buffer pointed to by +* pu1_src while the output is stored in the buffer pointed by pu1_dst. +* Both pu1_src and pu1_dst could point to the same buffer i.e. the +* six tap filter could be done in place. +* +******************************************************************************* +*/ void ih264_inter_pred_luma_horz_qpel_vert_qpel(UWORD8 *pu1_src, UWORD8 *pu1_dst, WORD32 src_strd, @@ -670,44 +731,56 @@ void ih264_inter_pred_luma_horz_qpel_vert_qpel(UWORD8 *pu1_src, } } -/*! - ************************************************************************** - * \if Function name : ih264_inter_pred_luma_horz_qpel_vert_hpel \endif - * - * \brief - * This routine applies the six tap filter to the predictors in the vertical - * and horizontal direction to obtain the pixel at (1/2,1/2). It then interpolates - * pixel at (0,1/2) and (1/2,1/2) to obtain pixel at (1/4,1/2). Similarly for (3/4,1/2). - * The six tap filtering operation is described in sec 8.4.2.2.1 titled - * "Luma sample interpolation process" - * - * \param pu1_src: Pointer to the buffer containing the predictor values. - * pu1_src could point to the frame buffer or the predictor buffer. - * \param pu1_dst: Pointer to the destination buffer where the output of - * the six tap filter followed by interpolation is stored. - * \param wd: Width of the rectangular pixel grid to be interpolated - * \param ht: Height of the rectangular pixel grid to be interpolated - * \param src_strd: Width of the buffer pointed to by puc_pred. - * \param dst_strd: Width of the destination buffer - * \param pu1_tmp: buffer to store temporary output after 1st 6-tap filter. - * \param dydx: x and y reference offset for qpel calculations. - * - * \return - * void - * - * \note - * This function takes the 8 bit predictor values, applies the six tap - * filter in the vertical direction and outputs the result clipped to - * 8 bit precision. The input is stored in the buffer pointed to by - * puc_pred while the output is stored in the buffer pointed by puc_dest. - * Both puc_pred and puc_dest could point to the same buffer i.e. the - * six tap filter could be done in place. - * - * \para <title> - * <paragraph> - * ... - ************************************************************************** - */ +/** +******************************************************************************* +* +* @brief +* Luma Horizontal qpel and vertical hpel Interprediction +* +* @par Description: +* This routine applies the six tap filter to the predictors in the vertical +* and horizontal direction to obtain the pixel at (1/2,1/2). It then interpolates +* pixel at (0, 1/2) and (1/2, 1/2) to obtain pixel at (1/4, 1/2). Similarly for +* (3/4,1/2). The six tap filtering operation is described in sec 8.4.2.2.1 +* titled "Luma sample interpolation process" +* +* @param[in] pu1_src +* Pointer to the buffer containing the predictor values. +* +* @param[out] pu1_dst +* Pointer to the destination buffer where the output of the six tap filter is +* stored +* +* @param[in] src_strd +* source stride +* +* @param[in] dst_strd +* destination stride +* +* @param[in] ht +* Height of the rectangular pixel grid to be interpolated +* +* @param[in] wd +* Width of the rectangular pixel grid to be interpolated +* +* @param[in] pu1_tmp +* temporary buffer. UNUSED in this function +* +* @param[in] dydx +* x and y reference offset for qpel calculations +* +* @returns +* +* @remarks +* This function takes the 8 bit predictor values, applies the six tap +* filter in the horizontal direction and outputs the result clipped to +* 8 bit precision. The input is stored in the buffer pointed to by +* pu1_src while the output is stored in the buffer pointed by pu1_dst. +* Both pu1_src and pu1_dst could point to the same buffer i.e. the +* six tap filter could be done in place. +* +******************************************************************************* +*/ void ih264_inter_pred_luma_horz_qpel_vert_hpel(UWORD8 *pu1_src, UWORD8 *pu1_dst, WORD32 src_strd, @@ -823,6 +896,56 @@ void ih264_inter_pred_luma_horz_qpel_vert_hpel(UWORD8 *pu1_src, * ... ************************************************************************** */ +/** +******************************************************************************* +* +* @brief +* Luma Horizontal hpel and vertical qpel Interprediction +* +* @par Description: +* This routine applies the six tap filter to the predictors in the vertical +* and horizontal direction to obtain the pixel at (1/2,1/2). It then interpolates +* pixel at (1/2, 0) and (1/2, 1/2) to obtain pixel at (1/2, 1/4). Similarly for +* (1/2, 3/4). The six tap filtering operation is described in sec 8.4.2.2.1 +* titled "Luma sample interpolation process" +* +* @param[in] pu1_src +* Pointer to the buffer containing the predictor values. +* +* @param[out] pu1_dst +* Pointer to the destination buffer where the output of the six tap filter is +* stored +* +* @param[in] src_strd +* source stride +* +* @param[in] dst_strd +* destination stride +* +* @param[in] ht +* Height of the rectangular pixel grid to be interpolated +* +* @param[in] wd +* Width of the rectangular pixel grid to be interpolated +* +* @param[in] pu1_tmp +* temporary buffer. UNUSED in this function +* +* @param[in] dydx +* x and y reference offset for qpel calculations +* +* @returns +* +* @remarks +* This function takes the 8 bit predictor values, applies the six tap +* filter in the horizontal direction and outputs the result clipped to +* 8 bit precision. The input is stored in the buffer pointed to by +* pu1_src while the output is stored in the buffer pointed by pu1_dst. +* Both pu1_src and pu1_dst could point to the same buffer i.e. the +* six tap filter could be done in place. +* +******************************************************************************* +*/ void ih264_inter_pred_luma_horz_hpel_vert_qpel(UWORD8 *pu1_src, UWORD8 *pu1_dst, WORD32 src_strd, @@ -898,52 +1021,49 @@ void ih264_inter_pred_luma_horz_hpel_vert_qpel(UWORD8 *pu1_src, } /** - ******************************************************************************* - * function:ih264_inter_pred_luma_bilinear - * - * @brief - * This routine applies the bilinear filter to the predictors . - * The filtering operation is described in - * sec 8.4.2.2.1 titled "Luma sample interpolation process" - * - * @par Description: -\note - * This function is called to obtain pixels lying at the following - * locations (1/4,1), (3/4,1),(1,1/4), (1,3/4) ,(1/4,1/2), (3/4,1/2),(1/2,1/4), (1/2,3/4),(3/4,1/4),(1/4,3/4),(3/4,3/4)&& (1/4,1/4) . - * The function averages the two adjacent values from the two input arrays in horizontal direction. - * - * - * @param[in] pu1_src1: - * UWORD8 Pointer to the buffer containing the first input array. - * - * @param[in] pu1_src2: - * UWORD8 Pointer to the buffer containing the second input array. - * - * @param[out] pu1_dst - * UWORD8 pointer to the destination where the output of bilinear filter is stored. - * - * @param[in] src_strd1 - * Stride of the first input buffer - * - * @param[in] src_strd2 - * Stride of the second input buffer - * - * @param[in] dst_strd - * integer destination stride of pu1_dst - * - * @param[in] ht - * integer height of the array - * - * @param[in] wd - * integer width of the array - * - * @returns - * - * @remarks - * None - * - ******************************************************************************* - */ +******************************************************************************* +* +* @brief This routine applies the bilinear filter to the predictors. +* +* @par Description This routine applies the bilinear filter to the predictors. +* The filtering operation is described in sec 8.4.2.2.1 titled +* "Luma sample interpolation process". This function is called to obtain +* pixels lying at the following locations (1/4,1), (3/4,1),(1,1/4), (1,3/4), +* (1/4,1/2), (3/4,1/2), (1/2,1/4), (1/2,3/4), (3/4,1/4), (1/4,3/4), (3/4,3/4) +* and (1/4,1/4). The function averages the two adjacent values from the two +* input arrays in horizontal direction. +* +* @param[in] pu1_src1: +* Pointer to the buffer containing the first input array. +* +* @param[in] pu1_src2: +* Pointer to the buffer containing the second input array. +* +* @param[out] pu1_dst +* pointer to the destination where the output of bilinear filter is stored. +* +* @param[in] src_strd1 +* Stride of the first input buffer +* +* @param[in] src_strd2 +* Stride of the second input buffer +* +* @param[in] dst_strd +* destination stride of pu1_dst +* +* @param[in] ht +* height of the array +* +* @param[in] wd +* width of the array +* +* @returns +* +* @remarks +* None +* +******************************************************************************* +*/ void ih264_inter_pred_luma_bilinear(UWORD8 *pu1_src1, UWORD8 *pu1_src2, UWORD8 *pu1_dst, @@ -968,50 +1088,48 @@ void ih264_inter_pred_luma_bilinear(UWORD8 *pu1_src1, pu1_src2 += src_strd2; pu1_dst += dst_strd; } - } /** - ******************************************************************************* - * - * @brief - * Interprediction chroma filter - * - * @par Description: - * Applies filtering to chroma samples as mentioned in - * sec 8.4.2.2.2 titled "chroma sample interpolation process" - * - * @param[in] pu1_src - * UWORD8 pointer to the source containing alternate U and V samples - * - * @param[out] pu1_dst - * UWORD8 pointer to the destination - * - * @param[in] src_strd - * integer source stride - * - * @param[in] dst_strd - * integer destination stride - * - * @param[in] u1_dx - * dx value where the sample is to be produced(refer sec 8.4.2.2.2 ) - * - * @param[in] u1_dy - * dy value where the sample is to be produced(refer sec 8.4.2.2.2 ) - * - * @param[in] ht - * integer height of the array - * - * @param[in] wd - * integer width of the array - * - * @returns - * - * @remarks - * None - * - ******************************************************************************* - */ +******************************************************************************* +* +* @brief Interprediction chroma filter +* +* @par Description: +* Applies filtering to chroma samples as mentioned in sec 8.4.2.2.2 titled +* "chroma sample interpolation process" +* +* @param[in] pu1_src +* pointer to the source containing alternate U and V samples +* +* @param[out] pu1_dst +* pointer to the destination +* +* @param[in] src_strd +* source stride +* +* @param[in] dst_strd +* destination stride +* +* @param[in] dx +* dx value where the sample is to be produced (refer sec 8.4.2.2.2 ) +* +* @param[in] dy +* dy value where the sample is to be produced (refer sec 8.4.2.2.2 ) +* +* @param[in] ht +* integer height of the array +* +* @param[in] wd +* integer width of the array +* +* @returns +* +* @remarks +* None +* +******************************************************************************* +*/ void ih264_inter_pred_chroma(UWORD8 *pu1_src, UWORD8 *pu1_dst, WORD32 src_strd, diff --git a/common/ih264_inter_pred_filters.h b/common/ih264_inter_pred_filters.h index c439ab84..f42222fd 100644 --- a/common/ih264_inter_pred_filters.h +++ b/common/ih264_inter_pred_filters.h @@ -19,76 +19,24 @@ */ /** - ******************************************************************************* - * @file - * ih264_inter_pred_filters.h - * - * @brief - * Declarations of functions used for inter prediction - * - * @author - * Ittiam - * - * @par List of Functions: - * -ih264_inter_pred_luma_copy - * -ih264_interleave_copy - * -ih264_inter_pred_luma_horz - * -ih264_inter_pred_luma_vert - * -ih264_inter_pred_luma_horz_hpel_vert_hpel - * -ih264_inter_pred_luma_vert_qpel - * -ih264_inter_pred_luma_horz_qpel - * -ih264_inter_pred_luma_horz_qpel_vert_qpel - * -ih264_inter_pred_luma_horz_qpel_vert_hpel - * -ih264_inter_pred_luma_horz_hpel_vert_qpel - * -ih264_inter_pred_luma_bilinear - * -ih264_inter_pred_chroma - * -ih264_inter_pred_luma_copy_a9q - * -ih264_interleave_copy_a9 - * -ih264_inter_pred_luma_horz_a9q - * -ih264_inter_pred_luma_vert_a9q - * -ih264_inter_pred_luma_bilinear_a9q - * -ih264_inter_pred_luma_horz_hpel_vert_hpel_a9q - * -ih264_inter_pred_luma_horz_qpel_a9q - * -ih264_inter_pred_luma_vert_qpel_a9q - * -ih264_inter_pred_luma_horz_qpel_vert_qpel_a9q - * -ih264_inter_pred_luma_horz_qpel_vert_hpel_a9q - * -ih264_inter_pred_luma_horz_hpel_vert_qpel_a9q - * -ih264_inter_pred_chroma_a9q - * -ih264_inter_pred_luma_copy_av8 - * -ih264_interleave_copy_av8 - * -ih264_inter_pred_luma_horz_av8 - * -ih264_inter_pred_luma_vert_av8 - * -ih264_inter_pred_luma_bilinear_av8 - * -ih264_inter_pred_luma_horz_hpel_vert_hpel_av8 - * -ih264_inter_pred_luma_horz_qpel_av8 - * -ih264_inter_pred_luma_vert_qpel_av8 - * -ih264_inter_pred_luma_horz_qpel_vert_qpel_av8 - * -ih264_inter_pred_luma_horz_qpel_vert_hpel_av8 - * -ih264_inter_pred_luma_horz_hpel_vert_qpel_av8 - * -ih264_inter_pred_chroma_av8 - * -ih264_inter_pred_chroma_dx_zero_av8 - * -ih264_inter_pred_chroma_dy_zero_av8 - * -ih264_inter_pred_luma_copy_ssse3 - * -ih264_inter_pred_luma_copy_ssse3 - * -ih264_inter_pred_luma_horz_ssse3 - * -ih264_inter_pred_luma_vert_ssse3 - * -ih264_inter_pred_luma_bilinear_ssse3 - * -ih264_inter_pred_luma_horz_hpel_vert_hpel_ssse3 - * -ih264_inter_pred_luma_horz_qpel_ssse3 - * -ih264_inter_pred_luma_vert_qpel_ssse3 - * -ih264_inter_pred_luma_horz_qpel_vert_qpel_ssse3 - * -ih264_inter_pred_luma_horz_qpel_vert_hpel_ssse3 - * -ih264_inter_pred_luma_horz_hpel_vert_qpel_ssse3 - * -ih264_inter_pred_chroma_ssse3 - * - * @remarks - * None - * - ******************************************************************************* - */ +******************************************************************************* +* @file +* ih264_inter_pred_filters.h +* +* @brief +* Declarations of functions used for inter prediction +* +* @author +* ittiam +* +* @remarks +* none +* +******************************************************************************* +*/ -#ifndef _IH264_INTER_PRED_H_ -#define _IH264_INTER_PRED_H_ +#ifndef _IH264_INTER_PRED_FILTERS_H_ +#define _IH264_INTER_PRED_FILTERS_H_ /*****************************************************************************/ /* Constant Data variables */ @@ -134,108 +82,60 @@ typedef void ih264_inter_pred_chroma_ft(UWORD8 *pu1_src, WORD32 ht, WORD32 wd); -/* No NEON Declarations */ - +/* C Declarations */ ih264_inter_pred_luma_ft ih264_inter_pred_luma_copy; - ih264_interleave_copy_ft ih264_interleave_copy; - ih264_inter_pred_luma_ft ih264_inter_pred_luma_horz; - ih264_inter_pred_luma_ft ih264_inter_pred_luma_vert; - ih264_inter_pred_luma_ft ih264_inter_pred_luma_horz_hpel_vert_hpel; - ih264_inter_pred_luma_ft ih264_inter_pred_luma_vert_qpel; - ih264_inter_pred_luma_ft ih264_inter_pred_luma_horz_qpel; - ih264_inter_pred_luma_ft ih264_inter_pred_luma_horz_qpel_vert_qpel; - ih264_inter_pred_luma_ft ih264_inter_pred_luma_horz_qpel_vert_hpel; - ih264_inter_pred_luma_ft ih264_inter_pred_luma_horz_hpel_vert_qpel; - ih264_inter_pred_luma_bilinear_ft ih264_inter_pred_luma_bilinear; - ih264_inter_pred_chroma_ft ih264_inter_pred_chroma; /* A9 NEON Declarations */ ih264_inter_pred_luma_ft ih264_inter_pred_luma_copy_a9q; - ih264_interleave_copy_ft ih264_interleave_copy_a9; - ih264_inter_pred_luma_ft ih264_inter_pred_luma_horz_a9q; - ih264_inter_pred_luma_ft ih264_inter_pred_luma_vert_a9q; - ih264_inter_pred_luma_bilinear_ft ih264_inter_pred_luma_bilinear_a9q; - ih264_inter_pred_luma_ft ih264_inter_pred_luma_horz_hpel_vert_hpel_a9q; - ih264_inter_pred_luma_ft ih264_inter_pred_luma_horz_qpel_a9q; - ih264_inter_pred_luma_ft ih264_inter_pred_luma_vert_qpel_a9q; - ih264_inter_pred_luma_ft ih264_inter_pred_luma_horz_qpel_vert_qpel_a9q; - ih264_inter_pred_luma_ft ih264_inter_pred_luma_horz_qpel_vert_hpel_a9q; - ih264_inter_pred_luma_ft ih264_inter_pred_luma_horz_hpel_vert_qpel_a9q; - ih264_inter_pred_chroma_ft ih264_inter_pred_chroma_a9q; /* AV8 NEON Declarations */ ih264_inter_pred_luma_ft ih264_inter_pred_luma_copy_av8; - ih264_interleave_copy_ft ih264_interleave_copy_av8; - ih264_inter_pred_luma_ft ih264_inter_pred_luma_horz_av8; - ih264_inter_pred_luma_ft ih264_inter_pred_luma_vert_av8; - ih264_inter_pred_luma_ft ih264_inter_pred_luma_horz_hpel_vert_hpel_av8; - ih264_inter_pred_luma_ft ih264_inter_pred_luma_horz_qpel_av8; - ih264_inter_pred_luma_ft ih264_inter_pred_luma_vert_qpel_av8; - ih264_inter_pred_luma_ft ih264_inter_pred_luma_horz_qpel_vert_qpel_av8; - ih264_inter_pred_luma_ft ih264_inter_pred_luma_horz_qpel_vert_hpel_av8; - ih264_inter_pred_luma_ft ih264_inter_pred_luma_horz_hpel_vert_qpel_av8; - ih264_inter_pred_chroma_ft ih264_inter_pred_chroma_av8; - ih264_inter_pred_chroma_ft ih264_inter_pred_chroma_dx_zero_av8; - ih264_inter_pred_chroma_ft ih264_inter_pred_chroma_dy_zero_av8; - /* SSSE3 Intrinsic Declarations */ ih264_inter_pred_luma_ft ih264_inter_pred_luma_copy_ssse3; - ih264_inter_pred_luma_ft ih264_inter_pred_luma_horz_ssse3; - ih264_inter_pred_luma_ft ih264_inter_pred_luma_vert_ssse3; - ih264_inter_pred_luma_bilinear_ft ih264_inter_pred_luma_bilinear_ssse3; - ih264_inter_pred_luma_ft ih264_inter_pred_luma_horz_hpel_vert_hpel_ssse3; - ih264_inter_pred_luma_ft ih264_inter_pred_luma_horz_qpel_ssse3; - ih264_inter_pred_luma_ft ih264_inter_pred_luma_vert_qpel_ssse3; - ih264_inter_pred_luma_ft ih264_inter_pred_luma_horz_qpel_vert_qpel_ssse3; - ih264_inter_pred_luma_ft ih264_inter_pred_luma_horz_qpel_vert_hpel_ssse3; - ih264_inter_pred_luma_ft ih264_inter_pred_luma_horz_hpel_vert_qpel_ssse3; - ih264_inter_pred_chroma_ft ih264_inter_pred_chroma_ssse3; -#endif - -/** Nothing past this point */ +#endif /* _IH264_INTER_PRED_FILTERS_H_ */ diff --git a/common/ih264_intra_pred_filters.h b/common/ih264_intra_pred_filters.h index caf6b335..20530b50 100644 --- a/common/ih264_intra_pred_filters.h +++ b/common/ih264_intra_pred_filters.h @@ -17,40 +17,41 @@ ***************************************************************************** * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore */ -/** - ******************************************************************************* - * @file - * ih264_intra_pred_filters.h - * - * @brief - * Declarations of functions used for intra prediction - * - * @author - * Ittiam - * - * @remarks - * None - * - ******************************************************************************* - */ -#ifndef IH264_INTRA_PRED_FILTERS_H_ +/** +******************************************************************************* +* @file +* ih264_intra_pred_filters.h +* +* @brief +* Declarations of functions used for intra prediction +* +* @author +* ittiam +* +* @remarks +* none +* +******************************************************************************* +*/ -#define IH264_INTRA_PRED_FILTERS_H_ +#ifndef _IH264_INTRA_PRED_FILTERS_H_ +#define _IH264_INTRA_PRED_FILTERS_H_ /*****************************************************************************/ -/* Macro Expansion */ +/* Function Macros */ /*****************************************************************************/ /*! Filter (1,2,1) i.e (a + 2b + c) / 4 */ -#define FILT121(a,b,c) ((a + (b<<1) + c + 2)>>2) +#define FILT121(a,b,c) ((a + (b << 1) + c + 2) >> 2) + /*! Filter (1,1) i.e (a + b) / 2 */ -#define FILT11(a,b) ((a + b + 1)>>1) +#define FILT11(a,b) ((a + b + 1) >> 1) + /*****************************************************************************/ /* Global Variables */ /*****************************************************************************/ - -/* Global variables used only in assembly files*/ +/* Note: Global variables used only in assembly files */ extern const WORD8 ih264_gai1_intrapred_luma_plane_coeffs[]; extern const WORD8 ih264_gai1_intrapred_chroma_plane_coeffs1[]; extern const WORD8 ih264_gai1_intrapred_chroma_plane_coeffs2[]; @@ -60,7 +61,6 @@ extern const WORD8 ih264_gai1_intrapred_luma_8x8_horz_u[]; /* Extern Function Declarations */ /*****************************************************************************/ - typedef void ih264_intra_pred_ref_filtering_ft(UWORD8 *pu1_left, UWORD8 *pu1_topleft, UWORD8 *pu1_top, @@ -74,258 +74,136 @@ typedef void ih264_intra_pred_luma_ft(UWORD8 *pu1_src, WORD32 dst_strd, WORD32 ngbr_avail); -/* No Neon Definitions */ +typedef ih264_intra_pred_luma_ft ih264_intra_pred_chroma_ft; +/* C Declarations */ /* Luma 4x4 Intra pred filters */ - ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_vert; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_horz; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_dc; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_diag_dl; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_diag_dr; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_vert_r; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_horz_d; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_vert_l; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_horz_u; - /* Luma 8x8 Intra pred filters */ - ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_vert; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_horz; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_dc; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_diag_dl; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_diag_dr; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_vert_r; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_horz_d; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_vert_l; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_horz_u; - /* Luma 16x16 Intra pred filters */ - ih264_intra_pred_luma_ft ih264_intra_pred_luma_16x16_mode_vert; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_16x16_mode_horz; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_16x16_mode_dc; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_16x16_mode_plane; - /* Chroma 8x8 Intra pred filters */ - -typedef ih264_intra_pred_luma_ft ih264_intra_pred_chroma_ft; - ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_dc; - ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_horz; - ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_vert; - ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_plane; - - ih264_intra_pred_ref_filtering_ft ih264_intra_pred_luma_8x8_mode_ref_filtering; -/* A9 Definition */ - +/* A9 Declarations */ /* Luma 4x4 Intra pred filters */ - ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_vert_a9q; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_horz_a9q; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_dc_a9q; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_diag_dl_a9q; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_diag_dr_a9q; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_vert_r_a9q; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_horz_d_a9q; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_vert_l_a9q; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_horz_u_a9q; - /* Luma 8x8 Intra pred filters */ - ih264_intra_pred_ref_filtering_ft ih264_intra_pred_luma_8x8_mode_ref_filtering_a9q; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_vert_a9q; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_horz_a9q; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_dc_a9q; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_diag_dl_a9q; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_diag_dr_a9q; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_vert_r_a9q; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_horz_d_a9q; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_vert_l_a9q; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_horz_u_a9q; - /* Luma 16x16 Intra pred filters */ - ih264_intra_pred_luma_ft ih264_intra_pred_luma_16x16_mode_vert_a9q; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_16x16_mode_horz_a9q; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_16x16_mode_dc_a9q; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_16x16_mode_plane_a9q; - /* Chroma 8x8 Intra pred filters */ - ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_dc_a9q; - ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_horz_a9q; - ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_vert_a9q; - ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_plane_a9q; -/* X86 Intrinsic Definitions */ - +/* SSSE3 Intrinsic Declarationss */ /* Luma 4x4 Intra pred filters */ - ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_vert_ssse3; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_horz_ssse3; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_dc_ssse3; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_diag_dl_ssse3; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_diag_dr_ssse3; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_vert_r_ssse3; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_horz_d_ssse3; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_vert_l_ssse3; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_horz_u_ssse3; - /* Luma 8x8 Intra pred filters */ - ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_vert_ssse3; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_horz_ssse3; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_dc_ssse3; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_diag_dl_ssse3; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_diag_dr_ssse3; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_vert_r_ssse3; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_horz_d_ssse3; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_vert_l_ssse3; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_horz_u_ssse3; - /* Luma 16x16 Intra pred filters */ - ih264_intra_pred_luma_ft ih264_intra_pred_luma_16x16_mode_vert_ssse3; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_16x16_mode_horz_ssse3; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_16x16_mode_dc_ssse3; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_16x16_mode_plane_ssse3; - /* Chroma 8x8 Intra pred filters */ - ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_dc_ssse3; - ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_horz_ssse3; - ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_vert_ssse3; - ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_plane_ssse3; -/* AV8 Definition */ - +/* AV8 Declarations */ /* Luma 4x4 Intra pred filters */ ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_vert_av8; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_horz_av8; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_dc_av8; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_diag_dl_av8; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_diag_dr_av8; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_vert_r_av8; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_horz_d_av8; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_vert_l_av8; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_horz_u_av8; - /* Luma 8x8 Intra pred filters */ - ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_vert_av8; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_horz_av8; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_dc_av8; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_diag_dl_av8; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_diag_dr_av8; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_vert_r_av8; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_horz_d_av8; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_vert_l_av8; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_horz_u_av8; - /* Luma 16x16 Intra pred filters */ - ih264_intra_pred_luma_ft ih264_intra_pred_luma_16x16_mode_vert_av8; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_16x16_mode_horz_av8; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_16x16_mode_dc_av8; - ih264_intra_pred_luma_ft ih264_intra_pred_luma_16x16_mode_plane_av8; - /* Chroma 8x8 Intra pred filters */ - ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_dc_av8; - ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_horz_av8; - ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_vert_av8; - ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_plane_av8; -#endif /* IH264_INTRA_PRED_FILTERS_H_ */ +#endif /* _IH264_INTRA_PRED_FILTERS_H_ */ diff --git a/common/ih264_iquant_itrans_recon.c b/common/ih264_iquant_itrans_recon.c index 3c14046f..8a27c9a5 100644 --- a/common/ih264_iquant_itrans_recon.c +++ b/common/ih264_iquant_itrans_recon.c @@ -17,92 +17,101 @@ ***************************************************************************** * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore */ + /** - ******************************************************************************* - * @file - * ih264_iquant_itrans_recon.c - * - * @brief - * Contains definition of functions for h264 inverse quantization inverse transformation and recon - * - * @author - * Ittiam - * - * @par List of Functions: - * - ih264_iquant_itrans_recon_4x4() - * - ih264_iquant_itrans_recon_8x8() - * - ih264_iquant_itrans_recon_4x4_dc() - * - ih264_iquant_itrans_recon_8x8_dc() - * - ih264_iquant_itrans_recon_chroma_4x4() - * -ih264_iquant_itrans_recon_chroma_4x4_dc() - * - * @remarks - * - ******************************************************************************* - */ +******************************************************************************* +* @file +* ih264_iquant_itrans_recon.c +* +* @brief +* Contains definition of functions for h264 inverse quantization, +* inverse transformation and recon +* +* @author +* ittiam +* +* @par List of Functions: +* - ih264_iquant_itrans_recon_4x4 +* - ih264_iquant_itrans_recon_8x8 +* - ih264_iquant_itrans_recon_4x4_dc +* - ih264_iquant_itrans_recon_8x8_dc +* - ih264_iquant_itrans_recon_chroma_4x4 +* - ih264_iquant_itrans_recon_chroma_4x4_dc +* +* @remarks +* +******************************************************************************* +*/ /*****************************************************************************/ /* File Includes */ /*****************************************************************************/ -/* User include files */ +/* User Include Files */ #include "ih264_typedefs.h" #include "ih264_defs.h" -#include "ih264_trans_macros.h" #include "ih264_macros.h" -#include "ih264_platform_macros.h" -#include "ih264_trans_data.h" #include "ih264_size_defs.h" +#include "ih264_trans_macros.h" +#include "ih264_trans_data.h" #include "ih264_structs.h" #include "ih264_trans_quant_itrans_iquant.h" +#include "ih264_platform_macros.h" -/* - ******************************************************************************** - * - * @brief This function reconstructs a 4x4 sub block from quantized resiude and - * prediction buffer - * - * @par Description: - * The quantized residue is first inverse quantized, then inverse transformed. - * This inverse transformed content is added to the prediction buffer to recon- - * struct the end output - * - * @param[in] pi2_src - * quantized 4x4 block - * - * @param[in] pu1_pred - * prediction 4x4 block - * - * @param[out] pu1_out - * reconstructed 4x4 block - * - * @param[in] src_strd - * quantization buffer stride - * - * @param[in] pred_strd, - * Prediction buffer stride - * - * @param[in] out_strd - * recon buffer Stride - * - * @param[in] pu2_scaling_list - * pointer to scaling list - * - * @param[in] pu2_norm_adjust - * pointer to inverse scale matrix - * - * @param[in] u4_qp_div_6 - * Floor (qp/6) - * - * @param[in] pi4_tmp - * temporary buffer of size 1*16 - * - * @returns none - * - * @remarks none - * - ******************************************************************************* - */ +/*****************************************************************************/ +/* Function definitions */ +/*****************************************************************************/ + +/** +******************************************************************************** +* +* @brief This function reconstructs a 4x4 sub block from quantized residue and +* prediction buffer +* +* @par Description: +* The quantized residue is first inverse quantized, then inverse transformed. +* This inverse transformed content is added to the prediction buffer to recon- +* struct the end output +* +* @param[in] pi2_src +* quantized 4x4 block +* +* @param[in] pu1_pred +* prediction 4x4 block +* +* @param[out] pu1_out +* reconstructed 4x4 block +* +* @param[in] pred_strd +* Prediction buffer stride +* +* @param[in] out_strd +* recon buffer Stride +* +* @param[in] pu2_iscal_mat +* pointer to inverse scaling matrix +* +* @param[in] pu2_weigh_mat +* pointer to weight matrix +* +* @param[in] u4_qp_div_6 +* Floor (qp/6) +* +* @param[in] pi2_tmp +* temporary buffer of size 1*16 +* +* @param[in] iq_start_idx +* Differentiates b/w intra or inter +* +* @param[in] pi2_dc_ld_addr +* Address to load DC value of the 4x4 blk +* +* @returns none +* +* @remarks none +* +******************************************************************************* +*/ void ih264_iquant_itrans_recon_4x4(WORD16 *pi2_src, UWORD8 *pu1_pred, UWORD8 *pu1_out, @@ -113,8 +122,7 @@ void ih264_iquant_itrans_recon_4x4(WORD16 *pi2_src, UWORD32 u4_qp_div_6, WORD16 *pi2_tmp, WORD32 iq_start_idx, - WORD16 *pi2_dc_ld_addr -) + WORD16 *pi2_dc_ld_addr) { WORD16 *pi2_src_ptr = pi2_src; WORD16 *pi2_tmp_ptr = pi2_tmp; @@ -126,29 +134,28 @@ void ih264_iquant_itrans_recon_4x4(WORD16 *pi2_src, WORD16 rnd_fact = (u4_qp_div_6 < 4) ? 1 << (3 - u4_qp_div_6) : 0; /* inverse quant */ - /*horizontal inverse transform */ + /* horizontal inverse transform */ for(i = 0; i < SUB_BLK_WIDTH_4x4; i++) { q0 = pi2_src_ptr[0]; - INV_QUANT(q0, pu2_iscal_mat[0], pu2_weigh_mat[0], u4_qp_div_6, rnd_fact, - 4); + INV_QUANT(q0, pu2_iscal_mat[0], pu2_weigh_mat[0], u4_qp_div_6, rnd_fact, 4); + /* Restoring dc value for intra case */ if (i==0 && iq_start_idx == 1) - q0 = pi2_dc_ld_addr[0]; // Restoring dc value for intra case + { + q0 = pi2_dc_ld_addr[0]; + } q2 = pi2_src_ptr[2]; - INV_QUANT(q2, pu2_iscal_mat[2], pu2_weigh_mat[2], u4_qp_div_6, rnd_fact, - 4); + INV_QUANT(q2, pu2_iscal_mat[2], pu2_weigh_mat[2], u4_qp_div_6, rnd_fact, 4); x0 = q0 + q2; x1 = q0 - q2; q1 = pi2_src_ptr[1]; - INV_QUANT(q1, pu2_iscal_mat[1], pu2_weigh_mat[1], u4_qp_div_6, rnd_fact, - 4); + INV_QUANT(q1, pu2_iscal_mat[1], pu2_weigh_mat[1], u4_qp_div_6, rnd_fact, 4); q3 = pi2_src_ptr[3]; - INV_QUANT(q3, pu2_iscal_mat[3], pu2_weigh_mat[3], u4_qp_div_6, rnd_fact, - 4); + INV_QUANT(q3, pu2_iscal_mat[3], pu2_weigh_mat[3], u4_qp_div_6, rnd_fact, 4); x2 = (q1 >> 1) - q3; x3 = q1 + (q3 >> 1); @@ -207,9 +214,58 @@ void ih264_iquant_itrans_recon_4x4(WORD16 *pi2_src, pu1_out_ptr++; pu1_pred++; } - } +/** +******************************************************************************** +* +* @brief This function reconstructs a 4x4 sub block from quantized residue and +* prediction buffer, if only dc value is present for residue +* +* @par Description: +* The quantized residue is first inverse quantized, then inverse transformed. +* This inverse transformed content is added to the prediction buffer to recon- +* struct the end output +* +* @param[in] pi2_src +* quantized 4x4 block +* +* @param[in] pu1_pred +* prediction 4x4 block +* +* @param[out] pu1_out +* reconstructed 4x4 block +* +* @param[in] pred_strd +* Prediction buffer stride +* +* @param[in] out_strd +* recon buffer Stride +* +* @param[in] pu2_iscal_mat +* pointer to inverse scaling matrix +* +* @param[in] pu2_weigh_mat +* pointer to weight matrix +* +* @param[in] u4_qp_div_6 +* Floor (qp/6) +* +* @param[in] pi2_tmp +* temporary buffer of size 1*16 +* +* @param[in] iq_start_idx +* Differentiates b/w intra or inter +* +* @param[in] pi2_dc_ld_addr +* Address to load DC value of the 4x4 blk +* +* @returns none +* +* @remarks none +* +******************************************************************************* +*/ void ih264_iquant_itrans_recon_4x4_dc(WORD16 *pi2_src, UWORD8 *pu1_pred, UWORD8 *pu1_out, @@ -227,16 +283,16 @@ void ih264_iquant_itrans_recon_4x4_dc(WORD16 *pi2_src, WORD32 q0; WORD16 x, i_macro, i; WORD16 rnd_fact = (u4_qp_div_6 < 4) ? 1 << (3 - u4_qp_div_6) : 0; - UNUSED(pi2_tmp); - if (iq_start_idx == 0) + UNUSED(pi2_tmp); + if(iq_start_idx == 0) { - q0 = pi2_src[0]; - INV_QUANT(q0, pu2_iscal_mat[0], pu2_weigh_mat[0], u4_qp_div_6, rnd_fact, 4); + q0 = pi2_src[0]; + INV_QUANT(q0, pu2_iscal_mat[0], pu2_weigh_mat[0], u4_qp_div_6, rnd_fact, 4); } else { - q0 = pi2_dc_ld_addr[0]; // Restoring dc value for intra case3 + q0 = pi2_dc_ld_addr[0]; // Restoring dc value for intra case3 } i_macro = ((q0 + 32) >> 6); for(i = 0; i < SUB_BLK_WIDTH_4x4; i++) @@ -245,7 +301,6 @@ void ih264_iquant_itrans_recon_4x4_dc(WORD16 *pi2_src, pu1_out = pu1_out_ptr; /* inverse prediction */ - x = i_macro + *pu1_pred_ptr; *pu1_out = CLIP_U8(x); pu1_pred_ptr += pred_strd; @@ -270,56 +325,56 @@ void ih264_iquant_itrans_recon_4x4_dc(WORD16 *pi2_src, } /** - ******************************************************************************* - * - * @brief - * This function performs inverse quant and Inverse transform type Ci4 for 8x8 block - * - * @par Description: - * Performs inverse transform Ci8 and adds the residue to get the - * reconstructed block - * - * @param[in] pi2_src - * Input 8x8coefficients - * - * @param[in] pu1_pred - * Prediction 8x8 block - * - * @param[out] pu1_recon - * Output 8x8 block - * - * @param[in] q_div - * QP/6 - * - * @param[in] q_rem - * QP%6 - * - * @param[in] q_lev - * Quantizer level - * - * @param[in] src_strd - * Input stride - * - * @param[in] pred_strd, - * Prediction stride - * - * @param[in] out_strd - * Output Stride - * - * @param[in] pi4_tmp - * temporary buffer of size 1*16 we dont need a bigger blcok since we reuse - * the tmp for each block - * - * @param[in] pu4_iquant_mat - * Pointer to the inverse quantization matrix - * - * @returns Void - * - * @remarks - * None - * - ******************************************************************************* - */ +******************************************************************************** +* +* @brief This function reconstructs a 8x8 sub block from quantized residue and +* prediction buffer +* +* @par Description: +* The quantized residue is first inverse quantized, then inverse transformed. +* This inverse transformed content is added to the prediction buffer to recon- +* struct the end output +* +* @param[in] pi2_src +* quantized 4x4 block +* +* @param[in] pu1_pred +* prediction 4x4 block +* +* @param[out] pu1_out +* reconstructed 4x4 block +* +* @param[in] pred_strd +* Prediction buffer stride +* +* @param[in] out_strd +* recon buffer Stride +* +* @param[in] pu2_iscal_mat +* pointer to inverse scaling matrix +* +* @param[in] pu2_weigh_mat +* pointer to weight matrix +* +* @param[in] u4_qp_div_6 +* Floor (qp/6) +* +* @param[in] pi2_tmp +* temporary buffer of size 1*16. we dont need a bigger block since we reuse +* the tmp for each block +* +* @param[in] iq_start_idx +* UNUSED +* +* @param[in] pi2_dc_ld_addr +* UNUSED +* +* @returns none +* +* @remarks none +* +******************************************************************************* +*/ void ih264_iquant_itrans_recon_8x8(WORD16 *pi2_src, UWORD8 *pu1_pred, UWORD8 *pu1_out, @@ -330,8 +385,7 @@ void ih264_iquant_itrans_recon_8x8(WORD16 *pi2_src, UWORD32 qp_div, WORD16 *pi2_tmp, WORD32 iq_start_idx, - WORD16 *pi2_dc_ld_addr -) + WORD16 *pi2_dc_ld_addr) { WORD32 i; WORD16 *pi2_tmp_ptr = pi2_tmp; @@ -342,6 +396,7 @@ void ih264_iquant_itrans_recon_8x8(WORD16 *pi2_src, WORD16 i_macro; WORD32 q; WORD32 rnd_fact = (qp_div < 6) ? (1 << (5 - qp_div)) : 0; + UNUSED(iq_start_idx); UNUSED(pi2_dc_ld_addr); /*************************************************************/ @@ -432,13 +487,13 @@ void ih264_iquant_itrans_recon_8x8(WORD16 *pi2_src, //pi2_src_ptr += SUB_BLK_WIDTH_8x8; pi2_tmp_ptr += SUB_BLK_WIDTH_8x8; } + /*--------------------------------------------------------------------*/ /* IDCT [ Vertical transformation] and Xij = (xij + 32)>>6 */ /* */ /* Add the prediction and store it back to reconstructed frame buffer */ /* [Prediction buffer itself in this case] */ /*--------------------------------------------------------------------*/ - pi2_tmp_ptr = pi2_tmp; for(i = 0; i < SUB_BLK_WIDTH_8x8; i++) { @@ -548,6 +603,57 @@ void ih264_iquant_itrans_recon_8x8(WORD16 *pi2_src, } } +/** +******************************************************************************** +* +* @brief This function reconstructs a 8x8 sub block from quantized residue and +* prediction buffer, if only dc value is present +* +* @par Description: +* The quantized residue is first inverse quantized, then inverse transformed. +* This inverse transformed content is added to the prediction buffer to recon- +* struct the end output +* +* @param[in] pi2_src +* quantized 4x4 block +* +* @param[in] pu1_pred +* prediction 4x4 block +* +* @param[out] pu1_out +* reconstructed 4x4 block +* +* @param[in] pred_strd +* Prediction buffer stride +* +* @param[in] out_strd +* recon buffer Stride +* +* @param[in] pu2_iscal_mat +* pointer to inverse scaling matrix +* +* @param[in] pu2_weigh_mat +* pointer to weight matrix +* +* @param[in] u4_qp_div_6 +* Floor (qp/6) +* +* @param[in] pi2_tmp +* temporary buffer of size 1*16. we dont need a bigger block since we reuse +* the tmp for each block +* +* @param[in] iq_start_idx +* UNUSED +* +* @param[in] pi2_dc_ld_addr +* UNUSED +* +* @returns none +* +* @remarks none +* +******************************************************************************* +*/ void ih264_iquant_itrans_recon_8x8_dc(WORD16 *pi2_src, UWORD8 *pu1_pred, UWORD8 *pu1_out, @@ -565,6 +671,7 @@ void ih264_iquant_itrans_recon_8x8_dc(WORD16 *pi2_src, WORD16 x, i, i_macro; WORD32 q; WORD32 rnd_fact = (qp_div < 6) ? (1 << (5 - qp_div)) : 0; + UNUSED(pi2_tmp); UNUSED(iq_start_idx); UNUSED(pi2_dc_ld_addr); @@ -634,53 +741,53 @@ void ih264_iquant_itrans_recon_8x8_dc(WORD16 *pi2_src, } } -/* - ******************************************************************************** - * - * @brief This function reconstructs a 4x4 sub block from quantized resiude and - * prediction buffer - * - * @par Description: - * The quantized residue is first inverse quantized, then inverse transformed. - * This inverse transformed content is added to the prediction buffer to recon- - * struct the end output - * - * @param[in] pi2_src - * quantized 4x4 block - * - * @param[in] pu1_pred - * prediction 4x4 block - * - * @param[out] pu1_out - * reconstructed 4x4 block - * - * @param[in] src_strd - * quantization buffer stride - * - * @param[in] pred_strd, - * Prediction buffer stride - * - * @param[in] out_strd - * recon buffer Stride - * - * @param[in] pu2_scaling_list - * pointer to scaling list - * - * @param[in] pu2_norm_adjust - * pointer to inverse scale matrix - * - * @param[in] u4_qp_div_6 - * Floor (qp/6) - * - * @param[in] pi4_tmp - * temporary buffer of size 1*16 - * - * @returns none - * - * @remarks none - * - ******************************************************************************* - */ +/** +******************************************************************************** +* +* @brief This function reconstructs a 4x4 sub block from quantized residue and +* prediction buffer +* +* @par Description: +* The quantized residue is first inverse quantized, then inverse transformed. +* This inverse transformed content is added to the prediction buffer to recon- +* struct the end output +* +* @param[in] pi2_src +* quantized 4x4 block +* +* @param[in] pu1_pred +* prediction 4x4 block +* +* @param[out] pu1_out +* reconstructed 4x4 block +* +* @param[in] pred_strd +* Prediction buffer stride +* +* @param[in] out_strd +* recon buffer Stride +* +* @param[in] pu2_iscal_mat +* pointer to inverse scaling matrix +* +* @param[in] pu2_weigh_mat +* pointer to weight matrix +* +* @param[in] u4_qp_div_6 +* Floor (qp/6) +* +* @param[in] pi2_tmp +* temporary buffer of size 1*16 +* +* @param[in] pi2_dc_src +* Address to load DC value of the 4x4 blk +* +* @returns none +* +* @remarks none +* +******************************************************************************* +*/ void ih264_iquant_itrans_recon_chroma_4x4(WORD16 *pi2_src, UWORD8 *pu1_pred, UWORD8 *pu1_out, @@ -702,46 +809,43 @@ void ih264_iquant_itrans_recon_chroma_4x4(WORD16 *pi2_src, WORD16 rnd_fact = (u4_qp_div_6 < 4) ? 1 << (3 - u4_qp_div_6) : 0; /* inverse quant */ - /*horizontal inverse transform */ + /* horizontal inverse transform */ for(i = 0; i < SUB_BLK_WIDTH_4x4; i++) { - if(i==0) - { - q0 = pi2_dc_src[0]; - } - else - { - q0 = pi2_src_ptr[0]; - INV_QUANT(q0, pu2_iscal_mat[0], pu2_weigh_mat[0], u4_qp_div_6, rnd_fact, 4); - } + if(i == 0) + { + q0 = pi2_dc_src[0]; + } + else + { + q0 = pi2_src_ptr[0]; + INV_QUANT(q0, pu2_iscal_mat[0], pu2_weigh_mat[0], u4_qp_div_6, rnd_fact, 4); + } - q2 = pi2_src_ptr[2]; - INV_QUANT(q2, pu2_iscal_mat[2], pu2_weigh_mat[2], u4_qp_div_6, rnd_fact, - 4); + q2 = pi2_src_ptr[2]; + INV_QUANT(q2, pu2_iscal_mat[2], pu2_weigh_mat[2], u4_qp_div_6, rnd_fact, 4); - x0 = q0 + q2; - x1 = q0 - q2; + x0 = q0 + q2; + x1 = q0 - q2; - q1 = pi2_src_ptr[1]; - INV_QUANT(q1, pu2_iscal_mat[1], pu2_weigh_mat[1], u4_qp_div_6, rnd_fact, - 4); + q1 = pi2_src_ptr[1]; + INV_QUANT(q1, pu2_iscal_mat[1], pu2_weigh_mat[1], u4_qp_div_6, rnd_fact, 4); - q3 = pi2_src_ptr[3]; - INV_QUANT(q3, pu2_iscal_mat[3], pu2_weigh_mat[3], u4_qp_div_6, rnd_fact, - 4); + q3 = pi2_src_ptr[3]; + INV_QUANT(q3, pu2_iscal_mat[3], pu2_weigh_mat[3], u4_qp_div_6, rnd_fact, 4); - x2 = (q1 >> 1) - q3; - x3 = q1 + (q3 >> 1); + x2 = (q1 >> 1) - q3; + x3 = q1 + (q3 >> 1); - pi2_tmp_ptr[0] = x0 + x3; - pi2_tmp_ptr[1] = x1 + x2; - pi2_tmp_ptr[2] = x1 - x2; - pi2_tmp_ptr[3] = x0 - x3; + pi2_tmp_ptr[0] = x0 + x3; + pi2_tmp_ptr[1] = x1 + x2; + pi2_tmp_ptr[2] = x1 - x2; + pi2_tmp_ptr[3] = x0 - x3; - pi2_src_ptr += SUB_BLK_WIDTH_4x4; - pi2_tmp_ptr += SUB_BLK_WIDTH_4x4; - pu2_iscal_mat += SUB_BLK_WIDTH_4x4; - pu2_weigh_mat += SUB_BLK_WIDTH_4x4; + pi2_src_ptr += SUB_BLK_WIDTH_4x4; + pi2_tmp_ptr += SUB_BLK_WIDTH_4x4; + pu2_iscal_mat += SUB_BLK_WIDTH_4x4; + pu2_weigh_mat += SUB_BLK_WIDTH_4x4; } /* vertical inverse transform */ @@ -754,7 +858,7 @@ void ih264_iquant_itrans_recon_chroma_4x4(WORD16 *pi2_src, x0 = (pi2_tmp_ptr[0] + pi2_tmp_ptr[8]); x1 = (pi2_tmp_ptr[0] - pi2_tmp_ptr[8]); x2 = (pi2_tmp_ptr[4] >> 1) - pi2_tmp_ptr[12]; - x3 = pi2_tmp_ptr[4] + (pi2_tmp_ptr[12] >> 1); + x3 = pi2_tmp_ptr[4] + (pi2_tmp_ptr[12] >> 1); /* inverse prediction */ i_macro = x0 + x3; @@ -784,41 +888,55 @@ void ih264_iquant_itrans_recon_chroma_4x4(WORD16 *pi2_src, *pu1_out = CLIP_U8(i_macro); pi2_tmp_ptr++; - pu1_out_ptr+= 2; //Interleaved store for output - pu1_pred+= 2; //Interleaved load for pred buffer + pu1_out_ptr += 2; // Interleaved store for output + pu1_pred += 2; // Interleaved load for pred buffer } } -/* - ******************************************************************************** - * - * @brief This function reconstructs a 4x4 sub block from quantized resiude and - * prediction buffer if only dc value is present for residue - * - * @par Description: - * The quantized residue is first inverse quantized, - * This inverse quantized content is added to the prediction buffer to recon- - * struct the end output - * - * @param[in] pi2_src - * quantized dc coefficient - * - * @param[in] pu1_pred - * prediction 4x4 block in interleaved format - * - * @param[in] pred_strd, - * Prediction buffer stride in interleaved format - * - * @param[in] out_strd - * recon buffer Stride - * - * @returns none - * - * @remarks none - * - ******************************************************************************* - */ - +/** +******************************************************************************** +* +* @brief This function reconstructs a 4x4 sub block from quantized residue and +* prediction buffer if only dc value is present for residue +* +* @par Description: +* The quantized residue is first inverse quantized, +* This inverse quantized content is added to the prediction buffer to recon- +* struct the end output +* +* @param[in] pi2_src +* quantized dc coefficient +* +* @param[in] pu1_pred +* prediction 4x4 block in interleaved format +* +* @param[in] pred_strd, +* Prediction buffer stride in interleaved format +* +* @param[in] out_strd +* recon buffer Stride +* +* @param[in] pu2_iscal_mat +* pointer to inverse scaling matrix +* +* @param[in] pu2_weigh_mat +* pointer to weight matrix +* +* @param[in] u4_qp_div_6 +* Floor (qp/6) +* +* @param[in] pi2_tmp +* temporary buffer of size 1*16 +* +* @param[in] pi2_dc_src +* Address to load DC value of the 4x4 blk +* +* @returns none +* +* @remarks none +* +******************************************************************************* +*/ void ih264_iquant_itrans_recon_chroma_4x4_dc(WORD16 *pi2_src, UWORD8 *pu1_pred, UWORD8 *pu1_out, @@ -834,6 +952,7 @@ void ih264_iquant_itrans_recon_chroma_4x4_dc(WORD16 *pi2_src, UWORD8 *pu1_out_ptr = pu1_out; WORD32 q0; WORD16 x, i_macro, i; + UNUSED(pi2_src); UNUSED(pu2_iscal_mat); UNUSED(pu2_weigh_mat); diff --git a/common/ih264_list.c b/common/ih264_list.c index 736b41c4..7f38842c 100644 --- a/common/ih264_list.c +++ b/common/ih264_list.c @@ -17,6 +17,7 @@ ***************************************************************************** * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore */ + /** ******************************************************************************* * @file @@ -26,55 +27,66 @@ * Contains functions for buf queue * * @author -* Harish +* ittiam * * @par List of Functions: -* ih264_list_size() -* ih264_list_lock() -* ih264_list_unlock() -* ih264_list_yield() -* ih264_list_free() -* ih264_list_init() -* ih264_list_reset() -* ih264_list_deinit() -* ih264_list_terminate() -* ih264_list_queue() -* ih264_list_dequeue() +* - ih264_list_size +* - ih264_list_lock +* - ih264_list_unlock +* - ih264_list_yield +* - ih264_list_free +* - ih264_list_init +* - ih264_list_reset +* - ih264_list_deinit +* - ih264_list_terminate +* - ih264_list_queue +* - ih264_list_dequeue * * @remarks -* None +* none * ******************************************************************************* */ + /*****************************************************************************/ /* File Includes */ /*****************************************************************************/ + +/* System Include Files */ #include <stdio.h> #include <stddef.h> #include <stdlib.h> #include <string.h> #include <assert.h> +/* User Include Files */ #include "ih264_typedefs.h" #include "ithread.h" -#include "ih264_platform_macros.h" -#include "ih264_macros.h" #include "ih264_debug.h" +#include "ih264_macros.h" #include "ih264_error.h" #include "ih264_list.h" +#include "ih264_platform_macros.h" + +/*****************************************************************************/ +/* Function Definitions */ +/*****************************************************************************/ /** ******************************************************************************* * -* @brief Returns size for buf queue context. Does not include buf queue buffer -* requirements +* @brief Returns size for job queue context. * -* @par Description -* Returns size for buf queue context. Does not include buf queue buffer -* requirements. Buffer size required to store the bufs should be allocated in -* addition to the value returned here. +* @par Description +* Returns size for job queue context. * -* @returns Size of the buf queue context +* @param[in] num_entries +* max number of jobs that can be queued +* +* @param[in] entry_size +* memory needed for a single job +* +* @returns Size of the job queue context * * @remarks * @@ -84,6 +96,7 @@ WORD32 ih264_list_size(WORD32 num_entries, WORD32 entry_size) { WORD32 size; WORD32 clz; + size = sizeof(list_t); size += ithread_get_mutex_lock_size(); @@ -91,21 +104,20 @@ WORD32 ih264_list_size(WORD32 num_entries, WORD32 entry_size) clz = CLZ(num_entries); num_entries = 1 << (32 - clz); - size += num_entries * entry_size; + size += num_entries * entry_size; return size; } /** ******************************************************************************* * -* @brief -* Locks the list context +* @brief Locks the list context * -* @par Description -* Locks the list context by calling ithread_mutex_lock() +* @par Description +* Locks the list context by calling ithread_mutex_lock() * * @param[in] ps_list -* Job Queue context +* Pointer to job queue context * * @returns IH264_FAIL if mutex lock fails else IH264_SUCCESS * @@ -116,25 +128,23 @@ WORD32 ih264_list_size(WORD32 num_entries, WORD32 entry_size) IH264_ERROR_T ih264_list_lock(list_t *ps_list) { WORD32 retval; + retval = ithread_mutex_lock(ps_list->pv_mutex); if(retval) - { return IH264_FAIL; - } return IH264_SUCCESS; } /** ******************************************************************************* * -* @brief -* Unlocks the list context +* @brief Unlocks the list context * -* @par Description -* Unlocks the list context by calling ithread_mutex_unlock() +* @par Description +* Unlocks the list context by calling ithread_mutex_unlock() * * @param[in] ps_list -* Job Queue context +* Pointer to job queue context * * @returns IH264_FAIL if mutex unlock fails else IH264_SUCCESS * @@ -142,33 +152,29 @@ IH264_ERROR_T ih264_list_lock(list_t *ps_list) * ******************************************************************************* */ - IH264_ERROR_T ih264_list_unlock(list_t *ps_list) { WORD32 retval; + retval = ithread_mutex_unlock(ps_list->pv_mutex); if(retval) - { return IH264_FAIL; - } return IH264_SUCCESS; - } + /** ******************************************************************************* * -* @brief -* Yields the thread +* @brief Yields the thread * -* @par Description -* Unlocks the list context by calling -* ih264_list_unlock(), ithread_yield() and then ih264_list_lock() -* list is unlocked before to ensure the list can be accessed by other threads -* If unlock is not done before calling yield then no other thread can access -* the list functions and update list. +* @par Description +* Unlocks the list context by calling ih264_list_unlock(), ithread_yield() +* and then ih264_list_lock(). List is unlocked before to ensure its +* access by other threads. If unlock is not done before calling yield then +* no other thread can access the list functions and update list. * * @param[in] ps_list -* Job Queue context +* pointer to Job Queue context * * @returns IH264_FAIL if mutex lock unlock or yield fails else IH264_SUCCESS * @@ -178,51 +184,47 @@ IH264_ERROR_T ih264_list_unlock(list_t *ps_list) */ IH264_ERROR_T ih264_list_yield(list_t *ps_list) { + IH264_ERROR_T ret; - IH264_ERROR_T ret = IH264_SUCCESS; - - IH264_ERROR_T rettmp; - rettmp = ih264_list_unlock(ps_list); - RETURN_IF((rettmp != IH264_SUCCESS), rettmp); + ret = ih264_list_unlock(ps_list); + RETURN_IF((ret != IH264_SUCCESS), ret); ithread_yield(); - if(ps_list->i4_yeild_interval_us > 0) - ithread_usleep(ps_list->i4_yeild_interval_us); + if(ps_list->i4_yield_interval_us > 0) + ithread_usleep(ps_list->i4_yield_interval_us); - rettmp = ih264_list_lock(ps_list); - RETURN_IF((rettmp != IH264_SUCCESS), rettmp); - return ret; + ret = ih264_list_lock(ps_list); + RETURN_IF((ret != IH264_SUCCESS), ret); + return IH264_SUCCESS; } - /** ******************************************************************************* * -* @brief free the buf queue pointers +* @brief free the list context * -* @par Description -* Frees the list context +* @par Description +* Frees the list context * -* @param[in] pv_buf -* Memory for buf queue buffer and buf queue context +* @param[in] ps_list +* pointer to Job Queue context * -* @returns Pointer to buf queue context +* @returns IH264_FAIL if mutex desttroy fails else IH264_SUCCESS * * @remarks -* Since it will be called only once by master thread this is not thread safe. +* Since it will be called only once by master thread this is not thread safe. * ******************************************************************************* */ IH264_ERROR_T ih264_list_free(list_t *ps_list) { WORD32 ret; - ret = ithread_mutex_destroy(ps_list->pv_mutex); + ret = ithread_mutex_destroy(ps_list->pv_mutex); if(0 == ret) return IH264_SUCCESS; - else - return IH264_FAIL; + return IH264_FAIL; } /** @@ -230,20 +232,29 @@ IH264_ERROR_T ih264_list_free(list_t *ps_list) * * @brief Initialize the buf queue * -* @par Description -* Initializes the list context and sets write and read pointers to start of -* buf queue buffer +* @par Description +* Initializes the list context and sets write and read pointers to start of +* buf queue buffer * * @param[in] pv_buf -* Memoy for buf queue buffer and buf queue context +* Memory for job queue context * * @param[in] buf_size -* Size of the total memory allocated +* Size of the total memory allocated +* +* @param[in] num_entries +* max number of jobs that can be queued +* +* @param[in] entry_size +* memory needed for a single job * -* @returns Pointer to buf queue context +* @param[in] yield_interval_us +* Thread sleep duration +* +* @returns Pointer to job queue context * * @remarks -* Since it will be called only once by master thread this is not thread safe. +* Since it will be called only once by master thread this is not thread safe. * ******************************************************************************* */ @@ -251,14 +262,11 @@ void* ih264_list_init(void *pv_buf, WORD32 buf_size, WORD32 num_entries, WORD32 entry_size, - WORD32 yeild_interval_us) + WORD32 yield_interval_us) { - list_t *ps_list; - UWORD8 *pu1_buf; - - pu1_buf = (UWORD8 *)pv_buf; + list_t *ps_list = (list_t *)pv_buf; + UWORD8 *pu1_buf = (UWORD8 *)pv_buf; - ps_list = (list_t *)pu1_buf; pu1_buf += sizeof(list_t); buf_size -= sizeof(list_t); @@ -284,21 +292,21 @@ void* ih264_list_init(void *pv_buf, ps_list->i4_buf_wr_idx = 0; ps_list->i4_log2_buf_max_idx = 32 - CLZ(num_entries); ps_list->i4_buf_max_idx = num_entries; - ps_list->i4_yeild_interval_us = yeild_interval_us; + ps_list->i4_yield_interval_us = yield_interval_us; return ps_list; } + /** ******************************************************************************* * -* @brief -* Resets the list context +* @brief Resets the list context * -* @par Description -* Resets the list context by initializing buf queue context elements +* @par Description +* Resets the list context by initializing buf queue context elements * * @param[in] ps_list -* Job Queue context +* Pointer to job queue context * * @returns IH264_FAIL if lock unlock fails else IH264_SUCCESS * @@ -309,6 +317,7 @@ void* ih264_list_init(void *pv_buf, IH264_ERROR_T ih264_list_reset(list_t *ps_list) { IH264_ERROR_T ret = IH264_SUCCESS; + ret = ih264_list_lock(ps_list); RETURN_IF((ret != IH264_SUCCESS), ret); @@ -325,15 +334,14 @@ IH264_ERROR_T ih264_list_reset(list_t *ps_list) /** ******************************************************************************* * -* @brief -* Deinitializes the list context +* @brief De-initializes the list context * -* @par Description -* Deinitializes the list context by calling ih264_list_reset() -* and then destrying the mutex created +* @par Description +* De-initializes the list context by calling ih264_list_reset() and then +* destroying the mutex created * * @param[in] ps_list -* Job Queue context +* Pointer to job queue context * * @returns IH264_FAIL if lock unlock fails else IH264_SUCCESS * @@ -351,25 +359,20 @@ IH264_ERROR_T ih264_list_deinit(list_t *ps_list) retval = ithread_mutex_destroy(ps_list->pv_mutex); if(retval) - { return IH264_FAIL; - } - return IH264_SUCCESS; } - /** ******************************************************************************* * -* @brief -* Terminates the list +* @brief Terminates the list * -* @par Description -* Terminates the list by setting a flag in context. +* @par Description +* Terminates the list by setting a flag in context. * * @param[in] ps_list -* Job Queue context +* Pointer to job queue context * * @returns IH264_FAIL if lock unlock fails else IH264_SUCCESS * @@ -377,10 +380,10 @@ IH264_ERROR_T ih264_list_deinit(list_t *ps_list) * ******************************************************************************* */ - IH264_ERROR_T ih264_list_terminate(list_t *ps_list) { IH264_ERROR_T ret = IH264_SUCCESS; + ret = ih264_list_lock(ps_list); RETURN_IF((ret != IH264_SUCCESS), ret); @@ -391,34 +394,28 @@ IH264_ERROR_T ih264_list_terminate(list_t *ps_list) return ret; } - /** ******************************************************************************* * -* @brief Adds a buf to the queue +* @brief Adds a job to the queue * -* @par Description -* Adds a buf to the queue and updates wr address to next location. -* Format/content of the buf structure is abstracted and hence size of the buf -* buffer is being passed. +* @par Description +* Adds a buffer to the queue and updates write address to next location. * * @param[in] ps_list -* Job Queue context +* Pointer to job queue context * * @param[in] pv_buf -* Pointer to the location that contains details of the buf to be added -* -* @param[in] buf_size -* Size of the buf buffer +* Pointer to the location that contains details of the job to be added * * @param[in] blocking -* To signal if the write is blocking or non-blocking. +* To signal if the write is blocking or non-blocking. * -* @returns +* @returns IH264_SUCCESS on success and IH264_FAIL on fail * * @remarks -* Job Queue buffer is assumed to be allocated to handle worst case number of bufs -* Wrap around is not supported +* Job Queue buffer is assumed to be allocated to handle worst case number of +* buffers. Wrap around is not supported * ******************************************************************************* */ @@ -426,10 +423,8 @@ IH264_ERROR_T ih264_list_queue(list_t *ps_list, void *pv_buf, WORD32 blocking) { IH264_ERROR_T ret = IH264_SUCCESS; IH264_ERROR_T rettmp; - WORD32 diff; void *pv_buf_wr; - volatile WORD32 *pi4_wr_idx, *pi4_rd_idx; WORD32 buf_size = ps_list->i4_entry_size; @@ -437,8 +432,6 @@ IH264_ERROR_T ih264_list_queue(list_t *ps_list, void *pv_buf, WORD32 blocking) rettmp = ih264_list_lock(ps_list); RETURN_IF((rettmp != IH264_SUCCESS), rettmp); - - while(1) { /* Ensure wr idx does not go beyond rd idx by more than number of entries @@ -470,7 +463,6 @@ IH264_ERROR_T ih264_list_queue(list_t *ps_list, void *pv_buf, WORD32 blocking) break; } } - } ps_list->i4_terminate = 0; @@ -479,35 +471,32 @@ IH264_ERROR_T ih264_list_queue(list_t *ps_list, void *pv_buf, WORD32 blocking) return ret; } + /** ******************************************************************************* * -* @brief Gets next from the Job queue +* @brief Gets next job from the job queue * * @par Description -* Gets next buf from the buf queue and updates rd address to next location. -* Format/content of the buf structure is abstracted and hence size of the buf -* buffer is being passed. If it is a blocking call and if there is no new buf -* then this functions unlocks the mutex and calls yield and then locks it back. -* and continues till a buf is available or terminate is set +* Gets next job from the job queue and updates rd address to next location. +* If it is a blocking call and if there is no new buf then this functions +* unlocks the mutex and calls yield and then locks it back and continues +* till a buf is available or terminate is set * * @param[in] ps_list -* Job Queue context +* Pointer to Job Queue context * * @param[out] pv_buf -* Pointer to the location that contains details of the buf to be written -* -* @param[in] buf_size -* Size of the buf buffer +* Pointer to the location that contains details of the buf to be written * * @param[in] blocking -* To signal if the read is blocking or non-blocking. +* To signal if the read is blocking or non-blocking. * * @returns * * @remarks -* Job Queue buffer is assumed to be allocated to handle worst case number of bufs -* Wrap around is not supported +* Job Queue buffer is assumed to be allocated to handle worst case number of +* buffers. Wrap around is not supported * ******************************************************************************* */ @@ -517,7 +506,6 @@ IH264_ERROR_T ih264_list_dequeue(list_t *ps_list, void *pv_buf, WORD32 blocking) IH264_ERROR_T rettmp; WORD32 buf_size = ps_list->i4_entry_size; WORD32 diff; - void *pv_buf_rd; volatile WORD32 *pi4_wr_idx, *pi4_rd_idx; @@ -533,7 +521,6 @@ IH264_ERROR_T ih264_list_dequeue(list_t *ps_list, void *pv_buf, WORD32 blocking) pi4_rd_idx = &ps_list->i4_buf_rd_idx; diff = *pi4_wr_idx - *pi4_rd_idx; - if(diff > 0) { WORD32 rd_idx; @@ -563,10 +550,8 @@ IH264_ERROR_T ih264_list_dequeue(list_t *ps_list, void *pv_buf, WORD32 blocking) break; } } - } - rettmp = ih264_list_unlock(ps_list); RETURN_IF((rettmp != IH264_SUCCESS), rettmp); diff --git a/common/ih264_list.h b/common/ih264_list.h index fc59d954..4b97d593 100644 --- a/common/ih264_list.h +++ b/common/ih264_list.h @@ -17,6 +17,7 @@ ***************************************************************************** * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore */ + /** ******************************************************************************* * @file @@ -26,12 +27,10 @@ * Contains functions for buf queue * * @author -* Harish -* -* @par List of Functions: +* ittiam * * @remarks -* None +* none * ******************************************************************************* */ @@ -39,6 +38,9 @@ #ifndef _IH264_LIST_H_ #define _IH264_LIST_H_ +/*****************************************************************************/ +/* Structure Definitions */ +/*****************************************************************************/ typedef struct { /** Pointer to buffer base which contains the bufs */ @@ -73,21 +75,29 @@ typedef struct * For eg: For picture level queues this can be a large value like 100us * but for jobq this will be zero. */ - WORD32 i4_yeild_interval_us; + WORD32 i4_yield_interval_us; }list_t; +/*****************************************************************************/ +/* Function Declarations */ +/*****************************************************************************/ WORD32 ih264_list_size(WORD32 num_entries, WORD32 entry_size); -void* ih264_list_init(void *pv_buf, - WORD32 buf_size, - WORD32 num_entries, - WORD32 entry_size, - WORD32 yeild_interval_us); + +void* ih264_list_init(void *pv_buf, WORD32 buf_size, WORD32 num_entries, + WORD32 entry_size, WORD32 yeild_interval_us); + IH264_ERROR_T ih264_list_free(list_t *ps_list); + IH264_ERROR_T ih264_list_reset(list_t *ps_list); + IH264_ERROR_T ih264_list_deinit(list_t *ps_list); + IH264_ERROR_T ih264_list_terminate(list_t *ps_list); + IH264_ERROR_T ih264_list_queue(list_t *ps_list, void *pv_buf, WORD32 blocking); -IH264_ERROR_T ih264_list_dequeue(list_t *ps_list, void *pv_buf, WORD32 blocking); -#endif /* _IH264_PROCESS_SLICE_H_ */ +IH264_ERROR_T ih264_list_dequeue(list_t *ps_list, void *pv_buf, + WORD32 blocking); + +#endif /* _IH264_LIST_H_ */ diff --git a/common/ih264_luma_intra_pred_filters.c b/common/ih264_luma_intra_pred_filters.c index 4a5b143f..fc925ca3 100644 --- a/common/ih264_luma_intra_pred_filters.c +++ b/common/ih264_luma_intra_pred_filters.c @@ -17,48 +17,48 @@ ***************************************************************************** * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore */ + /** - ******************************************************************************* - * @file - * ih264_luma_intra_pred_filters.c - * - * @brief - * Contains function definitions for intra prediction filters - * - * @author - * Ittiam - * - * @par List of Functions: - * - ih264_intra_pred_luma_4x4_mode_vert - * - ih264_intra_pred_luma_4x4_mode_horz - * - ih264_intra_pred_luma_4x4_mode_dc - * - ih264_intra_pred_luma_4x4_mode_diag_dl - * - ih264_intra_pred_luma_4x4_mode_diag_dr - * - ih264_intra_pred_luma_4x4_mode_vert_r - * - ih264_intra_pred_luma_4x4_mode_horz_d - * - ih264_intra_pred_luma_4x4_mode_vert_l - * - ih264_intra_pred_luma_4x4_mode_horz_u - * - ih264_intra_pred_luma_8x8_mode_ref_filtering - * - ih264_intra_pred_luma_8x8_mode_vert - * - ih264_intra_pred_luma_8x8_mode_horz - * - ih264_intra_pred_luma_8x8_mode_dc - * - ih264_intra_pred_luma_8x8_mode_diag_dl - * - ih264_intra_pred_luma_8x8_mode_diag_dr - * - ih264_intra_pred_luma_8x8_mode_vert_r - * - ih264_intra_pred_luma_8x8_mode_horz_d - * - ih264_intra_pred_luma_8x8_mode_vert_l - * - ih264_intra_pred_luma_8x8_mode_horz_u - * - ih264_intra_pred_luma_16x16_mode_vert - * - ih264_intra_pred_luma_16x16_mode_horz - * - ih264_intra_pred_luma_16x16_mode_dc - * - ih264_intra_pred_luma_16x16_mode_plane - * - * - * @remarks - * None - * - ****************************************************************************** - */ +******************************************************************************* +* @file +* ih264_luma_intra_pred_filters.c +* +* @brief +* Contains function definitions for intra prediction filters +* +* @author +* ittiam +* +* @par List of Functions: +* - ih264_intra_pred_luma_4x4_mode_vert +* - ih264_intra_pred_luma_4x4_mode_horz +* - ih264_intra_pred_luma_4x4_mode_dc +* - ih264_intra_pred_luma_4x4_mode_diag_dl +* - ih264_intra_pred_luma_4x4_mode_diag_dr +* - ih264_intra_pred_luma_4x4_mode_vert_r +* - ih264_intra_pred_luma_4x4_mode_horz_d +* - ih264_intra_pred_luma_4x4_mode_vert_l +* - ih264_intra_pred_luma_4x4_mode_horz_u +* - ih264_intra_pred_luma_8x8_mode_ref_filtering +* - ih264_intra_pred_luma_8x8_mode_vert +* - ih264_intra_pred_luma_8x8_mode_horz +* - ih264_intra_pred_luma_8x8_mode_dc +* - ih264_intra_pred_luma_8x8_mode_diag_dl +* - ih264_intra_pred_luma_8x8_mode_diag_dr +* - ih264_intra_pred_luma_8x8_mode_vert_r +* - ih264_intra_pred_luma_8x8_mode_horz_d +* - ih264_intra_pred_luma_8x8_mode_vert_l +* - ih264_intra_pred_luma_8x8_mode_horz_u +* - ih264_intra_pred_luma_16x16_mode_vert +* - ih264_intra_pred_luma_16x16_mode_horz +* - ih264_intra_pred_luma_16x16_mode_dc +* - ih264_intra_pred_luma_16x16_mode_plane +* +* @remarks +* none +* +****************************************************************************** +*/ /*****************************************************************************/ /* File Includes */ @@ -69,63 +69,68 @@ #include <string.h> /* User include files */ -#include "ih264_defs.h" #include "ih264_typedefs.h" #include "ih264_macros.h" -#include "ih264_platform_macros.h" +#include "ih264_defs.h" #include "ih264_intra_pred_filters.h" +#include "ih264_platform_macros.h" -/* Global variables used only in assembly files*/ +/*****************************************************************************/ +/* Global definitions */ +/*****************************************************************************/ +/* Note: Global variables used only in assembly files */ const WORD8 ih264_gai1_intrapred_luma_plane_coeffs[] = -{ 0x01, 0x02, 0x03, 0x04, - 0x05, 0x06, 0x07, 0x08, - 0x09, 0x0A, 0x0B, 0x0C, - 0x0D, 0x0E, 0x0F, 0x10, }; +{ + 0x01, 0x02, 0x03, 0x04, + 0x05, 0x06, 0x07, 0x08, + 0x09, 0x0A, 0x0B, 0x0C, + 0x0D, 0x0E, 0x0F, 0x10, +}; const WORD8 ih264_gai1_intrapred_luma_8x8_horz_u[] = -{ 0x06,0x15,0x05,0x14, - 0x04,0x13,0x03,0x12, - 0x02,0x11,0x01,0x10, - 0x00,0x1F,0x0F,0x0F +{ + 0x06, 0x15, 0x05, 0x14, + 0x04, 0x13, 0x03, 0x12, + 0x02, 0x11, 0x01, 0x10, + 0x00, 0x1F, 0x0F, 0x0F, }; -/******************* LUMA INTRAPREDICTION *******************/ -/******************* 4x4 Modes *******************/ +/*****************************************************************************/ +/* Function Definitions */ +/*****************************************************************************/ /** - ******************************************************************************* - * - *ih264_intra_pred_luma_4x4_mode_vert - * - * @brief - * Perform Intra prediction for luma_4x4 mode:vertical - * - * @par Description: - * Perform Intra prediction for luma_4x4 mode:vertical ,described in sec 8.3.1.2.1 - * - * @param[in] pu1_src - * UWORD8 pointer to the source - * - * @param[out] pu1_dst - * UWORD8 pointer to the destination - * - * @param[in] src_strd - * integer source stride - * - * @param[in] dst_strd - * integer destination stride - * - * @param[in] ngbr_avail - * availability of neighbouring pixels(Not used in this function) - * - * @returns - * - * @remarks - * None - * - ******************************************************************************* - */ +******************************************************************************* +* +* @brief +* Perform Intra prediction for luma_4x4 mode:vertical +* +* @par Description: +* Perform Intra prediction for luma_4x4 mode:vertical, described in sec 8.3.1.2.1 +* +* @param[in] pu1_src +* pointer to the source +* +* @param[out] pu1_dst +* pointer to the destination +* +* @param[in] src_strd +* source stride +* +* @param[in] dst_strd +* destination stride +* +* @param[in] ngbr_avail +* availability of neighbouring pixels +* +* @returns +* +* @remarks +* none +* +******************************************************************************* +*/ void ih264_intra_pred_luma_4x4_mode_vert(UWORD8 *pu1_src, UWORD8 *pu1_dst, WORD32 src_strd, @@ -133,10 +138,10 @@ void ih264_intra_pred_luma_4x4_mode_vert(UWORD8 *pu1_src, WORD32 ngbr_avail) { UWORD8 *pu1_top = NULL; /* Pointer to start of top predictors */ + UNUSED(src_strd); UNUSED(ngbr_avail); pu1_top = pu1_src + BLK_SIZE + 1; - memcpy(pu1_dst, pu1_top, 4); memcpy(pu1_dst + dst_strd, pu1_top, 4); memcpy(pu1_dst + 2 * dst_strd, pu1_top, 4); @@ -144,38 +149,37 @@ void ih264_intra_pred_luma_4x4_mode_vert(UWORD8 *pu1_src, } /** - ******************************************************************************* - * - *ih264_intra_pred_luma_4x4_mode_horz - * - * @brief - * Perform Intra prediction for luma_4x4 mode:horizontal - * - * @par Description: - * Perform Intra prediction for luma_4x4 mode:horizontal ,described in sec 8.3.1.2.2 - * - * @param[in] pu1_src - * UWORD8 pointer to the source - * - * @param[out] pu1_dst - * UWORD8 pointer to the destination - * - * @param[in] src_strd - * integer source stride - * - * @param[in] dst_strd - * integer destination stride - * - * @param[in] ngbr_avail - * availability of neighbouring pixels(Not used in this function) - * - * @returns - * - * @remarks - * None - * - ******************************************************************************* - */ +******************************************************************************* +* +* @brief +* Perform Intra prediction for luma_4x4 mode:horizontal +* +* @par Description: +* Perform Intra prediction for luma_4x4 mode:horizontal, described in +* sec 8.3.1.2.2 +* +* @param[in] pu1_src +* pointer to the source +* +* @param[out] pu1_dst +* pointer to the destination +* +* @param[in] src_strd +* source stride +* +* @param[in] dst_strd +* destination stride +* +* @param[in] ngbr_avail +* availability of neighbouring pixels +* +* @returns +* +* @remarks +* none +* +******************************************************************************* +*/ void ih264_intra_pred_luma_4x4_mode_horz(UWORD8 *pu1_src, UWORD8 *pu1_dst, WORD32 src_strd, @@ -187,7 +191,6 @@ void ih264_intra_pred_luma_4x4_mode_horz(UWORD8 *pu1_src, UNUSED(src_strd); UNUSED(ngbr_avail); pu1_left = pu1_src + BLK_SIZE - 1; - memset(pu1_dst, *pu1_left, 4); memset(pu1_dst + dst_strd, *(pu1_left - 1), 4); memset(pu1_dst + 2 * dst_strd, *(pu1_left - 2), 4); @@ -195,37 +198,36 @@ void ih264_intra_pred_luma_4x4_mode_horz(UWORD8 *pu1_src, } /** - ******************************************************************************* - * - *ih264_intra_pred_luma_4x4_mode_dc - * - * @brief - * Perform Intra prediction for luma_4x4 mode:DC - * - * @par Description: - * Perform Intra prediction for luma_4x4 mode:DC ,described in sec 8.3.1.2.3 - * - * @param[in] pu1_src - * UWORD8 pointer to the source - * - * @param[out] pu1_dst - * UWORD8 pointer to the destination - * - * @param[in] src_strd - * integer source stride - * - * @param[in] dst_strd - * integer destination stride - * - * @param[in] ngbr_avail - * availability of neighbouring pixels - * - * @returns - * - * @remarks - * None - * - *******************************************************************************/ +******************************************************************************* +* +* @brief +* Perform Intra prediction for luma_4x4 mode:DC +* +* @par Description: +* Perform Intra prediction for luma_4x4 mode:DC, described in sec 8.3.1.2.3 +* +* @param[in] pu1_src +* pointer to the source +* +* @param[out] pu1_dst +* pointer to the destination +* +* @param[in] src_strd +* source stride +* +* @param[in] dst_strd +* destination stride +* +* @param[in] ngbr_avail +* availability of neighbouring pixels +* +* @returns +* +* @remarks +* none +* +******************************************************************************* +*/ void ih264_intra_pred_luma_4x4_mode_dc(UWORD8 *pu1_src, UWORD8 *pu1_dst, WORD32 src_strd, @@ -237,6 +239,7 @@ void ih264_intra_pred_luma_4x4_mode_dc(UWORD8 *pu1_src, UWORD8 *pu1_left = NULL; /* Pointer to start of left predictors */ UWORD8 *pu1_top = NULL; /* Pointer to start of top predictors */ WORD32 val = 0; + UNUSED(src_strd); UNUSED(ngbr_avail); u1_useleft = BOOLEAN(ngbr_avail & LEFT_MB_AVAILABLE_MASK); @@ -259,7 +262,6 @@ void ih264_intra_pred_luma_4x4_mode_dc(UWORD8 *pu1_src, /* Since 2 is added if either left/top pred is there, val still being zero implies both preds are not there */ val = (val) ? (val >> (1 + u1_useleft + u1_usetop)) : 128; - /* 4 bytes are copied from src to dst */ memset(pu1_dst, val, 4); memset(pu1_dst + dst_strd, val, 4); @@ -268,37 +270,37 @@ void ih264_intra_pred_luma_4x4_mode_dc(UWORD8 *pu1_src, } /** - ******************************************************************************* - * - *ih264_intra_pred_luma_4x4_mode_diag_dl - * - * @brief - * Perform Intra prediction for luma_4x4 mode:Diagonal_Down_Left - * - * @par Description: - * Perform Intra prediction for luma_4x4 mode:Diagonal_Down_Left ,described in sec 8.3.1.2.4 - * - * @param[in] pu1_src - * UWORD8 pointer to the source - * - * @param[out] pu1_dst - * UWORD8 pointer to the destination - * - * @param[in] src_strd - * integer source stride - * - * @param[in] dst_strd - * integer destination stride - * - * @param[in] ngbr_avail - * availability of neighbouring pixels(Not used in this function) - * - * @returns - * - * @remarks - * None - * - *******************************************************************************/ +******************************************************************************* +* +* @brief +* Perform Intra prediction for luma_4x4 mode:Diagonal_Down_Left +* +* @par Description: +* Perform Intra prediction for luma_4x4 mode:Diagonal_Down_Left, described in +* sec 8.3.1.2.4 +* +* @param[in] pu1_src +* pointer to the source +* +* @param[out] pu1_dst +* pointer to the destination +* +* @param[in] src_strd +* source stride +* +* @param[in] dst_strd +* destination stride +* +* @param[in] ngbr_avail +* availability of neighbouring pixels +* +* @returns +* +* @remarks +* none +* +******************************************************************************* +*/ void ih264_intra_pred_luma_4x4_mode_diag_dl(UWORD8 *pu1_src, UWORD8 *pu1_dst, WORD32 src_strd, @@ -308,6 +310,7 @@ void ih264_intra_pred_luma_4x4_mode_diag_dl(UWORD8 *pu1_src, UWORD8 *pu1_top = NULL; /* Pointer to start of top predictors */ UWORD32 ui4_a, ui4_b, ui4_c, ui4_d, ui4_e, ui4_f, ui4_g, ui4_h; UWORD8 predicted_pixels[7]; + UNUSED(src_strd); UNUSED(ngbr_avail); pu1_top = pu1_src +BLK_SIZE + 1; @@ -336,37 +339,37 @@ void ih264_intra_pred_luma_4x4_mode_diag_dl(UWORD8 *pu1_src, } /** - ******************************************************************************* - * - *ih264_intra_pred_luma_4x4_mode_diag_dr - * - * @brief - * Perform Intra prediction for luma_4x4 mode:Diagonal_Down_Right - * - * @par Description: - * Perform Intra prediction for luma_4x4 mode:Diagonal_Down_Right ,described in sec 8.3.1.2.5 - * - * @param[in] pu1_src - * UWORD8 pointer to the source - * - * @param[out] pu1_dst - * UWORD8 pointer to the destination - * - * @param[in] src_strd - * integer source stride - * - * @param[in] dst_strd - * integer destination stride - * - * @param[in] ngbr_avail - * availability of neighbouring pixels(Not used in this function) - * - * @returns - * - * @remarks - * None - * - *******************************************************************************/ +******************************************************************************* +* +* @brief +* Perform Intra prediction for luma_4x4 mode:Diagonal_Down_Right +* +* @par Description: +* Perform Intra prediction for luma_4x4 mode:Diagonal_Down_Right, described in +* sec 8.3.1.2.5 +* +* @param[in] pu1_src +* pointer to the source +* +* @param[out] pu1_dst +* pointer to the destination +* +* @param[in] src_strd +* source stride +* +* @param[in] dst_strd +* destination stride +* +* @param[in] ngbr_avail +* availability of neighbouring pixels +* +* @returns +* +* @remarks +* none +* +******************************************************************************* +*/ void ih264_intra_pred_luma_4x4_mode_diag_dr(UWORD8 *pu1_src, UWORD8 *pu1_dst, WORD32 src_strd, @@ -378,6 +381,7 @@ void ih264_intra_pred_luma_4x4_mode_diag_dr(UWORD8 *pu1_src, UWORD8 *pu1_topleft = NULL;/* Pointer to top left predictor */ UWORD32 ui4_a, ui4_b, ui4_c, ui4_d, ui4_i, ui4_j, ui4_k, ui4_l, ui4_m; UWORD8 predicted_pixels[7]; + UNUSED(src_strd); UNUSED(ngbr_avail); pu1_top = pu1_src + BLK_SIZE + 1; @@ -409,37 +413,37 @@ void ih264_intra_pred_luma_4x4_mode_diag_dr(UWORD8 *pu1_src, } /** - ******************************************************************************* - * - *ih264_intra_pred_luma_4x4_mode_vert_r - * - * @brief - * Perform Intra prediction for luma_4x4 mode:Vertical_Right - * - * @par Description: - * Perform Intra prediction for luma_4x4 mode:Vertical_Right ,described in sec 8.3.1.2.6 - * - * @param[in] pu1_src - * UWORD8 pointer to the source - * - * @param[out] pu1_dst - * UWORD8 pointer to the destination - * - * @param[in] src_strd - * integer source stride - * - * @param[in] dst_strd - * integer destination stride - * - * @param[in] ngbr_avail - * availability of neighbouring pixels(Not used in this function) - * - * @returns - * - * @remarks - * None - * - *******************************************************************************/ +******************************************************************************* +* +* @brief +* Perform Intra prediction for luma_4x4 mode:Vertical_Right +* +* @par Description: +* Perform Intra prediction for luma_4x4 mode:Vertical_Right, described in +* sec 8.3.1.2.6 +* +* @param[in] pu1_src +* pointer to the source +* +* @param[out] pu1_dst +* pointer to the destination +* +* @param[in] src_strd +* source stride +* +* @param[in] dst_strd +* destination stride +* +* @param[in] ngbr_avail +* availability of neighbouring pixels +* +* @returns +* +* @remarks +* none +* +******************************************************************************* +*/ void ih264_intra_pred_luma_4x4_mode_vert_r(UWORD8 *pu1_src, UWORD8 *pu1_dst, WORD32 src_strd, @@ -452,6 +456,7 @@ void ih264_intra_pred_luma_4x4_mode_vert_r(UWORD8 *pu1_src, UWORD8 *pu1_left = NULL; /* Pointer to start of left predictors */ UWORD8 *pu1_topleft = NULL;/* Pointer to top left predictor */ UWORD8 predicted_pixels[10]; + UNUSED(src_strd); UNUSED(ngbr_avail); pu1_top = pu1_src +BLK_SIZE + 1; @@ -485,37 +490,37 @@ void ih264_intra_pred_luma_4x4_mode_vert_r(UWORD8 *pu1_src, } /* - ******************************************************************************* - * - *ih264_intra_pred_luma_4x4_mode_horz_d - * - * @brief - * Perform Intra prediction for luma_4x4 mode:Horizontal_Down - * - * @par Description: - * Perform Intra prediction for luma_4x4 mode:Horizontal_Down ,described in sec 8.3.1.2.7 - * - * @param[in] pu1_src - * UWORD8 pointer to the source - * - * @param[out] pu1_dst - * UWORD8 pointer to the destination - * - * @param[in] src_strd - * integer source stride - * - * @param[in] dst_strd - * integer destination stride - * - * @param[in] ngbr_avail - * availability of neighbouring pixels(Not used in this function) - * - * @returns - * - * @remarks - * None - * - *******************************************************************************/ +******************************************************************************* +* +* @brief +* Perform Intra prediction for luma_4x4 mode:Horizontal_Down +* +* @par Description: +* Perform Intra prediction for luma_4x4 mode:Horizontal_Down, described in +* sec 8.3.1.2.7 +* +* @param[in] pu1_src +* pointer to the source +* +* @param[out] pu1_dst +* pointer to the destination +* +* @param[in] src_strd +* source stride +* +* @param[in] dst_strd +* destination stride +* +* @param[in] ngbr_avail +* availability of neighbouring pixels +* +* @returns +* +* @remarks +* none +* +******************************************************************************* +*/ void ih264_intra_pred_luma_4x4_mode_horz_d(UWORD8 *pu1_src, UWORD8 *pu1_dst, WORD32 src_strd, @@ -527,6 +532,7 @@ void ih264_intra_pred_luma_4x4_mode_horz_d(UWORD8 *pu1_src, UWORD8 *pu1_topleft = NULL;/* Pointer to top left predictor */ UWORD32 ui4_a, ui4_b, ui4_c, ui4_i, ui4_j, ui4_k, ui4_l, ui4_m; UWORD8 predicted_pixels[10]; + UNUSED(src_strd); UNUSED(ngbr_avail); pu1_top = pu1_src + BLK_SIZE + 1; @@ -560,37 +566,37 @@ void ih264_intra_pred_luma_4x4_mode_horz_d(UWORD8 *pu1_src, } /** - ******************************************************************************* - * - *ih264_intra_pred_luma_4x4_mode_vert_l - * - * @brief - * Perform Intra prediction for luma_4x4 mode:Vertical_Left - * - * @par Description: - * Perform Intra prediction for luma_4x4 mode:Vertical_Left ,described in sec 8.3.1.2.8 - * - * @param[in] pu1_src - * UWORD8 pointer to the source - * - * @param[out] pu1_dst - * UWORD8 pointer to the destination - * - * @param[in] src_strd - * integer source stride - * - * @param[in] dst_strd - * integer destination stride - * - * @param[in] ngbr_avail - * availability of neighbouring pixels(Not used in this function) - * - * @returns - * - * @remarks - * None - * - *******************************************************************************/ +******************************************************************************* +* +* @brief +* Perform Intra prediction for luma_4x4 mode:Vertical_Left +* +* @par Description: +* Perform Intra prediction for luma_4x4 mode:Vertical_Left, described in +* sec 8.3.1.2.8 +* +* @param[in] pu1_src +* pointer to the source +* +* @param[out] pu1_dst +* pointer to the destination +* +* @param[in] src_strd +* source stride +* +* @param[in] dst_strd +* destination stride +* +* @param[in] ngbr_avail +* availability of neighbouring pixels +* +* @returns +* +* @remarks +* none +* +******************************************************************************* +*/ void ih264_intra_pred_luma_4x4_mode_vert_l(UWORD8 *pu1_src, UWORD8 *pu1_dst, WORD32 src_strd, @@ -600,6 +606,7 @@ void ih264_intra_pred_luma_4x4_mode_vert_l(UWORD8 *pu1_src, UWORD8 *pu1_top = NULL; /* Pointer to start of top predictors */ UWORD32 ui4_a, ui4_b, ui4_c, ui4_d, ui4_e, ui4_f, ui4_g; UWORD8 predicted_pixels[10]; + UNUSED(src_strd); UNUSED(ngbr_avail); pu1_top = pu1_src + BLK_SIZE + 1; @@ -630,37 +637,37 @@ void ih264_intra_pred_luma_4x4_mode_vert_l(UWORD8 *pu1_src, } /** - ******************************************************************************* - * - *ih264_intra_pred_luma_4x4_mode_horz_u - * - * @brief - * Perform Intra prediction for luma_4x4 mode:Horizontal_Up - * - * @par Description: - * Perform Intra prediction for luma_4x4 mode:Horizontal_Up ,described in sec 8.3.1.2.9 - * - * @param[in] pu1_src - * UWORD8 pointer to the source - * - * @param[out] pu1_dst - * UWORD8 pointer to the destination - * - * @param[in] src_strd - * integer source stride - * - * @param[in] dst_strd - * integer destination stride - * - * @param[in] ngbr_avail - * availability of neighbouring pixels(Not used in this function) - * - * @returns - * - * @remarks - * None - * - *******************************************************************************/ +******************************************************************************* +* +* @brief +* Perform Intra prediction for luma_4x4 mode:Horizontal_Up +* +* @par Description: +* Perform Intra prediction for luma_4x4 mode:Horizontal_Up, described in +* sec 8.3.1.2.9 +* +* @param[in] pu1_src +* pointer to the source +* +* @param[out] pu1_dst +* pointer to the destination +* +* @param[in] src_strd +* source stride +* +* @param[in] dst_strd +* destination stride +* +* @param[in] ngbr_avail +* availability of neighbouring pixels +* +* @returns +* +* @remarks +* none +* +******************************************************************************* +*/ void ih264_intra_pred_luma_4x4_mode_horz_u(UWORD8 *pu1_src, UWORD8 *pu1_dst, WORD32 src_strd, @@ -670,6 +677,7 @@ void ih264_intra_pred_luma_4x4_mode_horz_u(UWORD8 *pu1_src, UWORD8 *pu1_left = NULL; /* Pointer to start of left predictors */ UWORD32 ui4_i, ui4_j, ui4_k, ui4_l; UWORD8 predicted_pixels[10]; + UNUSED(src_strd); UNUSED(ngbr_avail); pu1_left = pu1_src + BLK_SIZE - 1; @@ -696,46 +704,45 @@ void ih264_intra_pred_luma_4x4_mode_horz_u(UWORD8 *pu1_src, memcpy(pu1_dst + 3 * dst_strd, predicted_pixels + 6, 4); } -/******************* 8x8 Modes *******************/ - /** - ******************************************************************************* - * - *ih264_intra_pred_luma_8x8_mode_ref_filtering - * - * @brief - * Reference sample filtering process for Intra_8x8 sample prediction - * - * @par Description: - * Perform Reference sample filtering process for Intra_8x8 sample prediction ,described in sec 8.3.2.2.1 - * - * @param[in] pu1_src - * UWORD8 pointer to the source - * - * @param[out] pu1_dst - * UWORD8 pointer to the destination - * - * @param[in] src_strd - * integer source stride[Not Used] - * - * @param[in] dst_strd - * integer destination stride[Not Used] - * - * @param[in] ngbr_avail - * availability of neighbouring pixels(Not used in this function) - * - * @returns - * - * @remarks - * None - * - * - *******************************************************************************/ +******************************************************************************* +* +* @brief +* Reference sample filtering process for Intra_8x8 sample prediction +* +* @par Description: +* Perform Reference sample filtering process for Intra_8x8 sample prediction, +* described in sec 8.3.2.2.1 +* +* @param[in] pu1_left +* pointer to the left pixel wrt current mb +* +* @param[in] pu1_topleft +* pointer to the topleft pixel wrt current mb +* +* @param[in] pu1_top +* pointer to the top pixel wrt current mb +* +* @param[out] pu1_dst +* pointer to the destination +* +* @param[in] src_strd +* source stride[Not Used] +* +* @param[in] ngbr_avail +* availability of neighbouring pixels +* +* @returns +* +* @remarks +* none +* +*******************************************************************************/ void ih264_intra_pred_luma_8x8_mode_ref_filtering(UWORD8 *pu1_left, UWORD8 *pu1_topleft, UWORD8 *pu1_top, UWORD8 *pu1_dst, - WORD32 left_strd, + WORD32 src_strd, WORD32 ngbr_avail) { WORD32 top_avail, left_avail, top_left_avail, top_right_avail; @@ -764,7 +771,6 @@ void ih264_intra_pred_luma_8x8_mode_ref_filtering(UWORD8 *pu1_left, { pu1_dst[8 + 1 + 0] = FILT121((*pu1_topleft), pu1_top[0], pu1_top[1]); - } else { @@ -775,7 +781,6 @@ void ih264_intra_pred_luma_8x8_mode_ref_filtering(UWORD8 *pu1_left, { pu1_dst[8 + 1 + i] = FILT121(pu1_top[i - 1], pu1_top[i], pu1_top[i + 1]); - } /* First byte of Top Right input is in pu1_dst[8 + 1 + 8]*/ pu1_dst[8 + 1 + 7] = FILT121(pu1_top[6], pu1_top[7], @@ -796,7 +801,6 @@ void ih264_intra_pred_luma_8x8_mode_ref_filtering(UWORD8 *pu1_left, } pu1_dst[8 + 1 + 15] = (u4_xm1 + (3 * pu1_dst[8 + 1 + 15]) + 2) >> 2; - } /* pu1_topleft is overloaded. It is both: */ @@ -824,59 +828,57 @@ void ih264_intra_pred_luma_8x8_mode_ref_filtering(UWORD8 *pu1_left, if(0 != pu1_topleft) { pu1_dst[7] = FILT121((*pu1_topleft), pu1_left[0], - pu1_left[left_strd]); + pu1_left[src_strd]); } else { - pu1_dst[7] = ((3 * pu1_left[0]) + pu1_left[left_strd] + 2) >> 2; + pu1_dst[7] = ((3 * pu1_left[0]) + pu1_left[src_strd] + 2) >> 2; } for(idx = 1; idx <= 6; idx++) { - pu1_dst[7 - idx] = FILT121(pu1_left[(idx - 1) * left_strd], - pu1_left[idx * left_strd], - pu1_left[(idx + 1) * left_strd]); + pu1_dst[7 - idx] = FILT121(pu1_left[(idx - 1) * src_strd], + pu1_left[idx * src_strd], + pu1_left[(idx + 1) * src_strd]); } - pu1_dst[0] = (pu1_left[6 * left_strd] + 3 * pu1_left[7 * left_strd] + 2) + pu1_dst[0] = (pu1_left[6 * src_strd] + 3 * pu1_left[7 * src_strd] + 2) >> 2; - } } /** - ******************************************************************************* - * - *ih264_intra_pred_luma_8x8_mode_vert - * - * @brief - * Perform Intra prediction for luma_8x8 mode:vertical - * - * @par Description: - * Perform Intra prediction for luma_8x8 mode:vertical ,described in sec 8.3.2.2.2 - * - * @param[in] pu1_src - * UWORD8 pointer to the source - * - * @param[out] pu1_dst - * UWORD8 pointer to the destination - * - * @param[in] src_strd - * integer source stride - * - * @param[in] dst_strd - * integer destination stride - * - * @param[in] ngbr_avail - * availability of neighbouring pixels(Not used in this function) - * - * @returns - * - * @remarks - * None - * - ******************************************************************************* - */ +******************************************************************************* +* +* @brief +* Perform Intra prediction for luma_8x8 mode:vertical +* +* @par Description: +* Perform Intra prediction for luma_8x8 mode:vertical, described in +* sec 8.3.2.2.2 +* +* @param[in] pu1_src +* pointer to the source +* +* @param[out] pu1_dst +* pointer to the destination +* +* @param[in] src_strd +* source stride +* +* @param[in] dst_strd +* destination stride +* +* @param[in] ngbr_avail +* availability of neighbouring pixels +* +* @returns +* +* @remarks +* none +* +******************************************************************************* +*/ void ih264_intra_pred_luma_8x8_mode_vert(UWORD8 *pu1_src, UWORD8 *pu1_dst, WORD32 src_strd, @@ -884,6 +886,7 @@ void ih264_intra_pred_luma_8x8_mode_vert(UWORD8 *pu1_src, WORD32 ngbr_avail) { UWORD8 *pu1_top = NULL; + UNUSED(src_strd); UNUSED(ngbr_avail); pu1_top = pu1_src + BLK8x8SIZE + 1; @@ -899,39 +902,37 @@ void ih264_intra_pred_luma_8x8_mode_vert(UWORD8 *pu1_src, } /** - ******************************************************************************* - * - *ih264_intra_pred_luma_8x8_mode_horz - * - * @brief - * Perform Intra prediction for luma_8x8 mode:horizontal - * - * @par Description: - * Perform Intra prediction for luma_8x8 mode:horizontal ,described in sec 8.3.2.2.2 - * - * @param[in] pu1_src - * UWORD8 pointer to the source - * - * @param[out] pu1_dst - * UWORD8 pointer to the destination - * - * @param[in] src_strd - * integer source stride - * - * @param[in] dst_strd - * integer destination stride - * - * @param[in] ngbr_avail - * availability of neighbouring pixels(Not used in this function) - * - * @returns - * - * @remarks - * None - * - ******************************************************************************* - */ - +******************************************************************************* +* +* @brief +* Perform Intra prediction for luma_8x8 mode:horizontal +* +* @par Description: +* Perform Intra prediction for luma_8x8 mode:horizontal, described in +* sec 8.3.2.2.2 +* +* @param[in] pu1_src +* pointer to the source +* +* @param[out] pu1_dst +* pointer to the destination +* +* @param[in] src_strd +* source stride +* +* @param[in] dst_strd +* destination stride +* +* @param[in] ngbr_avail +* availability of neighbouring pixels +* +* @returns +* +* @remarks +* none +* +******************************************************************************* +*/ void ih264_intra_pred_luma_8x8_mode_horz(UWORD8 *pu1_src, UWORD8 *pu1_dst, WORD32 src_strd, @@ -939,6 +940,7 @@ void ih264_intra_pred_luma_8x8_mode_horz(UWORD8 *pu1_src, WORD32 ngbr_avail) { UWORD8 *pu1_left = pu1_src + BLK8x8SIZE - 1; + UNUSED(src_strd); UNUSED(ngbr_avail); memset(pu1_dst, *pu1_left, 8); @@ -952,37 +954,36 @@ void ih264_intra_pred_luma_8x8_mode_horz(UWORD8 *pu1_src, } /** - ******************************************************************************* - * - *ih264_intra_pred_luma_8x8_mode_dc - * - * @brief - * Perform Intra prediction for luma_8x8 mode:DC - * - * @par Description: - * Perform Intra prediction for luma_8x8 mode:DC ,described in sec 8.3.2.2.4 - * - * @param[in] pu1_src - * UWORD8 pointer to the source - * - * @param[out] pu1_dst - * UWORD8 pointer to the destination - * - * @param[in] src_strd - * integer source stride - * - * @param[in] dst_strd - * integer destination stride - * - * @param[in] ngbr_avail - * availability of neighbouring pixels - * - * @returns - * - * @remarks - * None - * - *******************************************************************************/ +******************************************************************************* +* +* @brief +* Perform Intra prediction for luma_8x8 mode:DC +* +* @par Description: +* Perform Intra prediction for luma_8x8 mode:DC, described in sec 8.3.2.2.4 +* +* @param[in] pu1_src +* pointer to the source +* +* @param[out] pu1_dst +* pointer to the destination +* +* @param[in] src_strd +* source stride +* +* @param[in] dst_strd +* destination stride +* +* @param[in] ngbr_avail +* availability of neighbouring pixels +* +* @returns +* +* @remarks +* none +* +******************************************************************************* +*/ void ih264_intra_pred_luma_8x8_mode_dc(UWORD8 *pu1_src, UWORD8 *pu1_dst, WORD32 src_strd, @@ -995,8 +996,8 @@ void ih264_intra_pred_luma_8x8_mode_dc(UWORD8 *pu1_src, UWORD8 *pu1_top = NULL; /* Pointer to start of top predictors */ WORD32 row; WORD32 val = 0; - UNUSED(src_strd); + UNUSED(src_strd); u1_useleft = BOOLEAN(ngbr_avail & LEFT_MB_AVAILABLE_MASK); u1_usetop = BOOLEAN(ngbr_avail & TOP_MB_AVAILABLE_MASK); pu1_top = pu1_src + BLK8x8SIZE + 1; @@ -1030,37 +1031,37 @@ void ih264_intra_pred_luma_8x8_mode_dc(UWORD8 *pu1_src, } /** - ******************************************************************************* - * - *ih264_intra_pred_luma_8x8_mode_diag_dl - * - * @brief - * Perform Intra prediction for luma_8x8 mode:Diagonal_Down_Left - * - * @par Description: - * Perform Intra prediction for luma_8x8 mode:Diagonal_Down_Left ,described in sec 8.3.2.2.5 - * - * @param[in] pu1_src - * UWORD8 pointer to the source - * - * @param[out] pu1_dst - * UWORD8 pointer to the destination - * - * @param[in] src_strd - * integer source stride - * - * @param[in] dst_strd - * integer destination stride - * - * @param[in] ngbr_avail - * availability of neighbouring pixels(Not used in this function) - * - * @returns - * - * @remarks - * None - * - *******************************************************************************/ +******************************************************************************* +* +* @brief +* Perform Intra prediction for luma_8x8 mode:Diagonal_Down_Left +* +* @par Description: +* Perform Intra prediction for luma_8x8 mode:Diagonal_Down_Left, described in +* sec 8.3.2.2.5 +* +* @param[in] pu1_src +* pointer to the source +* +* @param[out] pu1_dst +* pointer to the destination +* +* @param[in] src_strd +* source stride +* +* @param[in] dst_strd +* destination stride +* +* @param[in] ngbr_avail +* availability of neighbouring pixels +* +* @returns +* +* @remarks +* none +* +******************************************************************************* +*/ void ih264_intra_pred_luma_8x8_mode_diag_dl(UWORD8 *pu1_src, UWORD8 *pu1_dst, WORD32 src_strd, @@ -1071,6 +1072,7 @@ void ih264_intra_pred_luma_8x8_mode_diag_dl(UWORD8 *pu1_src, UWORD32 ui4_a, ui4_b, ui4_c, ui4_d, ui4_e, ui4_f, ui4_g, ui4_h; UWORD32 ui4_i, ui4_j, ui4_k, ui4_l, ui4_m, ui4_n, ui4_o, ui4_p; UWORD8 predicted_pixels[15]; + UNUSED(src_strd); UNUSED(ngbr_avail); pu1_top = pu1_src + BLK8x8SIZE + 1; @@ -1119,37 +1121,37 @@ void ih264_intra_pred_luma_8x8_mode_diag_dl(UWORD8 *pu1_src, } /** - ******************************************************************************* - * - *ih264_intra_pred_luma_8x8_mode_diag_dr - * - * @brief - * Perform Intra prediction for luma_8x8 mode:Diagonal_Down_Right - * - * @par Description: - * Perform Intra prediction for luma_8x8 mode:Diagonal_Down_Right ,described in sec 8.3.2.2.6 - * - * @param[in] pu1_src - * UWORD8 pointer to the source - * - * @param[out] pu1_dst - * UWORD8 pointer to the destination - * - * @param[in] src_strd - * integer source stride - * - * @param[in] dst_strd - * integer destination stride - * - * @param[in] ngbr_avail - * availability of neighbouring pixels(Not used in this function) - * - * @returns - * - * @remarks - * None - * - *******************************************************************************/ +******************************************************************************* +* +* @brief +* Perform Intra prediction for luma_8x8 mode:Diagonal_Down_Right +* +* @par Description: +* Perform Intra prediction for luma_8x8 mode:Diagonal_Down_Right, described +* in sec 8.3.2.2.6 +* +* @param[in] pu1_src +* pointer to the source +* +* @param[out] pu1_dst +* pointer to the destination +* +* @param[in] src_strd +* source stride +* +* @param[in] dst_strd +* destination stride +* +* @param[in] ngbr_avail +* availability of neighbouring pixels +* +* @returns +* +* @remarks +* none +* +******************************************************************************* +*/ void ih264_intra_pred_luma_8x8_mode_diag_dr(UWORD8 *pu1_src, UWORD8 *pu1_dst, WORD32 src_strd, @@ -1163,6 +1165,7 @@ void ih264_intra_pred_luma_8x8_mode_diag_dr(UWORD8 *pu1_src, UWORD32 ui4_b, ui4_c, ui4_d, ui4_e, ui4_f, ui4_g, ui4_h, ui4_i; UWORD32 ui4_j, ui4_k, ui4_l, ui4_m, ui4_n, ui4_o, ui4_p, ui4_q; UWORD8 predicted_pixels[15]; + UNUSED(src_strd); UNUSED(ngbr_avail); pu1_top = pu1_src + BLK8x8SIZE + 1; @@ -1214,37 +1217,37 @@ void ih264_intra_pred_luma_8x8_mode_diag_dr(UWORD8 *pu1_src, } /** - ******************************************************************************* - * - *ih264_intra_pred_luma_8x8_mode_vert_r - * - * @brief - * Perform Intra prediction for luma_8x8 mode:Vertical_Right - * - * @par Description: - * Perform Intra prediction for luma_8x8 mode:Vertical_Right ,described in sec 8.3.2.2.7 - * - * @param[in] pu1_src - * UWORD8 pointer to the source - * - * @param[out] pu1_dst - * UWORD8 pointer to the destination - * - * @param[in] src_strd - * integer source stride - * - * @param[in] dst_strd - * integer destination stride - * - * @param[in] ngbr_avail - * availability of neighbouring pixels(Not used in this function) - * - * @returns - * - * @remarks - * None - * - *******************************************************************************/ +******************************************************************************* +* +* @brief +* Perform Intra prediction for luma_8x8 mode:Vertical_Right +* +* @par Description: +* Perform Intra prediction for luma_8x8 mode:Vertical_Right, described in +* sec 8.3.2.2.7 +* +* @param[in] pu1_src +* pointer to the source +* +* @param[out] pu1_dst +* pointer to the destination +* +* @param[in] src_strd +* source stride +* +* @param[in] dst_strd +* destination stride +* +* @param[in] ngbr_avail +* availability of neighbouring pixels +* +* @returns +* +* @remarks +* none +* +******************************************************************************* +*/ void ih264_intra_pred_luma_8x8_mode_vert_r(UWORD8 *pu1_src, UWORD8 *pu1_dst, WORD32 src_strd, @@ -1314,42 +1317,40 @@ void ih264_intra_pred_luma_8x8_mode_vert_r(UWORD8 *pu1_src, memcpy(pu1_dst + 5 * dst_strd, predicted_pixels + 12, 8); memcpy(pu1_dst + 6 * dst_strd, predicted_pixels, 8); memcpy(pu1_dst + 7 * dst_strd, predicted_pixels + 11, 8); - } -/* - ******************************************************************************* - * - *ih264_intra_pred_luma_8x8_mode_horz_d - * - * @brief - * Perform Intra prediction for luma_8x8 mode:Horizontal_Down - * - * @par Description: - * Perform Intra prediction for luma_8x8 mode:Horizontal_Down ,described in sec 8.3.2.2.8 - * - * @param[in] pu1_src - * UWORD8 pointer to the source - * - * @param[out] pu1_dst - * UWORD8 pointer to the destination - * - * @param[in] src_strd - * integer source stride - * - * @param[in] dst_strd - * integer destination stride - * - * @param[in] ngbr_avail - * availability of neighbouring pixels(Not used in this function) - * - * @returns - * - * @remarks - * None - * - *******************************************************************************/ - +/** +******************************************************************************* +* +* @brief +* Perform Intra prediction for luma_8x8 mode:Horizontal_Down +* +* @par Description: +* Perform Intra prediction for luma_8x8 mode:Horizontal_Down, described in +* sec 8.3.2.2.8 +* +* @param[in] pu1_src +* pointer to the source +* +* @param[out] pu1_dst +* pointer to the destination +* +* @param[in] src_strd +* source stride +* +* @param[in] dst_strd +* destination stride +* +* @param[in] ngbr_avail +* availability of neighbouring pixels +* +* @returns +* +* @remarks +* none +* +******************************************************************************* +*/ void ih264_intra_pred_luma_8x8_mode_horz_d(UWORD8 *pu1_src, UWORD8 *pu1_dst, WORD32 src_strd, @@ -1363,6 +1364,7 @@ void ih264_intra_pred_luma_8x8_mode_horz_d(UWORD8 *pu1_src, UWORD32 ui4_b, ui4_c, ui4_d, ui4_e, ui4_f, ui4_g, ui4_h, ui4_i; UWORD32 ui4_j, ui4_k, ui4_l, ui4_m, ui4_n, ui4_o, ui4_p; UWORD8 predicted_pixels[22]; + UNUSED(src_strd); UNUSED(ngbr_avail); pu1_top = pu1_src + BLK8x8SIZE + 1; @@ -1420,37 +1422,37 @@ void ih264_intra_pred_luma_8x8_mode_horz_d(UWORD8 *pu1_src, } /** - ******************************************************************************* - * - *ih264_intra_pred_luma_8x8_mode_vert_l - * - * @brief - * Perform Intra prediction for luma_8x8 mode:Vertical_Left - * - * @par Description: - * Perform Intra prediction for luma_8x8 mode:Vertical_Left ,described in sec 8.3.2.2.9 - * - * @param[in] pu1_src - * UWORD8 pointer to the source - * - * @param[out] pu1_dst - * UWORD8 pointer to the destination - * - * @param[in] src_strd - * integer source stride - * - * @param[in] dst_strd - * integer destination stride - * - * @param[in] ngbr_avail - * availability of neighbouring pixels(Not used in this function) - * - * @returns - * - * @remarks - * None - * - *******************************************************************************/ +******************************************************************************* +* +* @brief +* Perform Intra prediction for luma_8x8 mode:Vertical_Left +* +* @par Description: +* Perform Intra prediction for luma_8x8 mode:Vertical_Left, described in +* sec 8.3.2.2.9 +* +* @param[in] pu1_src +* pointer to the source +* +* @param[out] pu1_dst +* pointer to the destination +* +* @param[in] src_strd +* source stride +* +* @param[in] dst_strd +* destination stride +* +* @param[in] ngbr_avail +* availability of neighbouring pixels +* +* @returns +* +* @remarks +* none +* +******************************************************************************* +*/ void ih264_intra_pred_luma_8x8_mode_vert_l(UWORD8 *pu1_src, UWORD8 *pu1_dst, @@ -1462,6 +1464,7 @@ void ih264_intra_pred_luma_8x8_mode_vert_l(UWORD8 *pu1_src, UWORD32 ui4_a, ui4_b, ui4_c, ui4_d, ui4_e, ui4_f, ui4_g, ui4_h; UWORD32 ui4_i, ui4_j, ui4_k, ui4_l, ui4_m; UWORD8 predicted_pixels[22]; + UNUSED(src_strd); UNUSED(ngbr_avail); pu1_top = pu1_src + BLK8x8SIZE + 1; @@ -1514,48 +1517,47 @@ void ih264_intra_pred_luma_8x8_mode_vert_l(UWORD8 *pu1_src, } /** - ******************************************************************************* - * - *ih264_intra_pred_luma_8x8_mode_horz_u - * - * @brief - * Perform Intra prediction for luma_8x8 mode:Horizontal_Up - * - * @par Description: - * Perform Intra prediction for luma_8x8 mode:Horizontal_Up ,described in sec 8.3.2.2.10 - * - * @param[in] pu1_src - * UWORD8 pointer to the source - * - * @param[out] pu1_dst - * UWORD8 pointer to the destination - * - * @param[in] src_strd - * integer source stride - * - * @param[in] dst_strd - * integer destination stride - * - * @param[in] ngbr_avail - * availability of neighbouring pixels(Not used in this function) - * - * @returns - * - * @remarks - * None - * - *******************************************************************************/ - +******************************************************************************* +* +* @brief +* Perform Intra prediction for luma_8x8 mode:Horizontal_Up +* +* @par Description: +* Perform Intra prediction for luma_8x8 mode:Horizontal_Up, described in +* sec 8.3.2.2.10 +* +* @param[in] pu1_src +* pointer to the source +* +* @param[out] pu1_dst +* pointer to the destination +* +* @param[in] src_strd +* source stride +* +* @param[in] dst_strd +* destination stride +* +* @param[in] ngbr_avail +* availability of neighbouring pixels +* +* @returns +* +* @remarks +* none +* +******************************************************************************* +*/ void ih264_intra_pred_luma_8x8_mode_horz_u(UWORD8 *pu1_src, UWORD8 *pu1_dst, WORD32 src_strd, WORD32 dst_strd, WORD32 ngbr_avail) - { UWORD8 *pu1_left = NULL; /* Pointer to start of left predictors */ UWORD32 ui4_j, ui4_k, ui4_l, ui4_m, ui4_n, ui4_o, ui4_p, ui4_q; UWORD8 predicted_pixels[22]; + UNUSED(src_strd); UNUSED(ngbr_avail); pu1_left = pu1_src + BLK8x8SIZE - 1; @@ -1597,42 +1599,38 @@ void ih264_intra_pred_luma_8x8_mode_horz_u(UWORD8 *pu1_src, memcpy(pu1_dst + 7 * dst_strd, predicted_pixels + 14, 8); } - -/******************* 16x16 Modes *******************/ - /** - ******************************************************************************* - * - *ih264_intra_pred_luma_16x16_mode_vert - * - * @brief - * Perform Intra prediction for luma_16x16 mode:Vertical - * - * @par Description: - * Perform Intra prediction for luma_16x16 mode:Vertical, described in sec 8.3.3.1 - * - * @param[in] pu1_src - * UWORD8 pointer to the source - * - * @param[out] pu1_dst - * UWORD8 pointer to the destination - * - * @param[in] src_strd - * integer source stride - * - * @param[in] dst_strd - * integer destination stride - * - * @param[in] ngbr_avail - * availability of neighbouring pixels (Not used in this function) - * - * @returns - * - * @remarks - * None - * - *******************************************************************************/ - +******************************************************************************* +* +* @brief +* Perform Intra prediction for luma_16x16 mode:Vertical +* +* @par Description: +* Perform Intra prediction for luma_16x16 mode:Vertical, described in +* sec 8.3.3.1 +* +* @param[in] pu1_src +* pointer to the source +* +* @param[out] pu1_dst +* pointer to the destination +* +* @param[in] src_strd +* source stride +* +* @param[in] dst_strd +* destination stride +* +* @param[in] ngbr_avail +* availability of neighbouring pixels +* +* @returns +* +* @remarks +* none +* +******************************************************************************* +*/ void ih264_intra_pred_luma_16x16_mode_vert(UWORD8 *pu1_src, UWORD8 *pu1_dst, WORD32 src_strd, @@ -1641,10 +1639,10 @@ void ih264_intra_pred_luma_16x16_mode_vert(UWORD8 *pu1_src, { UWORD8 *pu1_top = NULL; /* Pointer to start of top predictors */ WORD32 rows; /* loop variables*/ + UNUSED(src_strd); UNUSED(ngbr_avail); pu1_top = pu1_src + MB_SIZE + 1; - for(rows = 0; rows < 16; rows += 4, pu1_dst += dst_strd) { memcpy(pu1_dst, pu1_top, 16); @@ -1658,38 +1656,37 @@ void ih264_intra_pred_luma_16x16_mode_vert(UWORD8 *pu1_src, } /** - ******************************************************************************* - * - *ih264_intra_pred_luma_16x16_mode_horz - * - * @brief - * Perform Intra prediction for luma_16x16 mode:Horizontal - * - * @par Description: - * Perform Intra prediction for luma_16x16 mode:Horizontal, described in sec 8.3.3.2 - * - * @param[in] pu1_src - * UWORD8 pointer to the source - * - * @param[out] pu1_dst - * UWORD8 pointer to the destination - * - * @param[in] src_strd - * integer source stride - * - * @param[in] dst_strd - * integer destination stride - * - * @param[in] ngbr_avail - * availability of neighbouring pixels(Not used in this function) - * - * @returns - * - * @remarks - * None - * - *******************************************************************************/ - +******************************************************************************* +* +* @brief +* Perform Intra prediction for luma_16x16 mode:Horizontal +* +* @par Description: +* Perform Intra prediction for luma_16x16 mode:Horizontal, described in +* sec 8.3.3.2 +* +* @param[in] pu1_src +* pointer to the source +* +* @param[out] pu1_dst +* pointer to the destination +* +* @param[in] src_strd +* source stride +* +* @param[in] dst_strd +* destination stride +* +* @param[in] ngbr_avail +* availability of neighbouring pixels +* +* @returns +* +* @remarks +* none +* +******************************************************************************* +*/ void ih264_intra_pred_luma_16x16_mode_horz(UWORD8 *pu1_src, UWORD8 *pu1_dst, WORD32 src_strd, @@ -1698,10 +1695,10 @@ void ih264_intra_pred_luma_16x16_mode_horz(UWORD8 *pu1_src, { UWORD8 *pu1_left = NULL; /* Pointer to start of top predictors */ WORD32 rows; + UNUSED(src_strd); UNUSED(ngbr_avail); pu1_left = pu1_src + MB_SIZE - 1; - for(rows = 0; rows < 16; rows += 4, pu1_dst += dst_strd, pu1_left --) { memset(pu1_dst, *pu1_left, 16); /* copy the left value to the entire row*/ @@ -1718,38 +1715,36 @@ void ih264_intra_pred_luma_16x16_mode_horz(UWORD8 *pu1_src, } /** - ******************************************************************************* - * - *ih264_intra_pred_luma_16x16_mode_dc - * - * @brief - * Perform Intra prediction for luma_16x16 mode:DC - * - * @par Description: - * Perform Intra prediction for luma_16x16 mode:DC, described in sec 8.3.3.3 - * - * @param[in] pu1_src - * UWORD8 pointer to the source - * - * @param[out] pu1_dst - * UWORD8 pointer to the destination - * - * @param[in] src_strd - * integer source stride - * - * @param[in] dst_strd - * integer destination stride - * - ** @param[in] ngbr_avail - * availability of neighbouring pixels - * - * @returns - * - * @remarks - * None - * - *******************************************************************************/ - +******************************************************************************* +* +* @brief +* Perform Intra prediction for luma_16x16 mode:DC +* +* @par Description: +* Perform Intra prediction for luma_16x16 mode:DC, described in sec 8.3.3.3 +* +* @param[in] pu1_src +* pointer to the source +* +* @param[out] pu1_dst +* pointer to the destination +* +* @param[in] src_strd +* source stride +* +* @param[in] dst_strd +* destination stride +* +* @param[in] ngbr_avail +* availability of neighbouring pixels +* +* @returns +* +* @remarks +* none +* +******************************************************************************* +*/ void ih264_intra_pred_luma_16x16_mode_dc(UWORD8 *pu1_src, UWORD8 *pu1_dst, WORD32 src_strd, @@ -1762,8 +1757,8 @@ void ih264_intra_pred_luma_16x16_mode_dc(UWORD8 *pu1_src, UWORD8 *pu1_top = NULL; /* Pointer to start of top predictors */ WORD32 rows; /* loop variables*/ WORD32 val = 0; - UNUSED(src_strd); + UNUSED(src_strd); u1_useleft = BOOLEAN(ngbr_avail & LEFT_MB_AVAILABLE_MASK); u1_usetop = BOOLEAN(ngbr_avail & TOP_MB_AVAILABLE_MASK); pu1_top = pu1_src + MB_SIZE + 1; @@ -1797,38 +1792,36 @@ void ih264_intra_pred_luma_16x16_mode_dc(UWORD8 *pu1_src, } /** - ******************************************************************************* - * - *ih264_intra_pred_luma_16x16_mode_plane - * - * @brief - * Perform Intra prediction for luma_16x16 mode:PLANE - * - * @par Description: - * Perform Intra prediction for luma_16x16 mode:PLANE, described in sec 8.3.3.4 - * - * @param[in] pu1_src - * UWORD8 pointer to the source - * - * @param[out] pu1_dst - * UWORD8 pointer to the destination - * - * @param[in] src_strd - * integer source stride - * - * @param[in] dst_strd - * integer destination stride - * - * @param[in] ngbr_avail - * availability of neighbouring pixels(Not used in this function) - * - * @returns - * - * @remarks - * None - * - *******************************************************************************/ - +******************************************************************************* +* +* @brief +* Perform Intra prediction for luma_16x16 mode:PLANE +* +* @par Description: +* Perform Intra prediction for luma_16x16 mode:PLANE, described in sec 8.3.3.4 +* +* @param[in] pu1_src +* pointer to the source +* +* @param[out] pu1_dst +* pointer to the destination +* +* @param[in] src_strd +* source stride +* +* @param[in] dst_strd +* destination stride +* +* @param[in] ngbr_avail +* availability of neighbouring pixels +* +* @returns +* +* @remarks +* none +* +******************************************************************************* +*/ void ih264_intra_pred_luma_16x16_mode_plane(UWORD8 *pu1_src, UWORD8 *pu1_dst, WORD32 src_strd, @@ -1842,6 +1835,7 @@ void ih264_intra_pred_luma_16x16_mode_plane(UWORD8 *pu1_src, WORD32 a, b, c, tmp; UWORD8 *pu1_tmp1, *pu1_tmp2; WORD32 shift; + UNUSED(src_strd); UNUSED(ngbr_avail); pu1_top = pu1_src + MB_SIZE + 1; diff --git a/common/ih264_macros.h b/common/ih264_macros.h index 969012fb..9b95eff0 100644 --- a/common/ih264_macros.h +++ b/common/ih264_macros.h @@ -18,7 +18,8 @@ * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore */ -/********************************************************************************* +/** +********************************************************************************** * @file * ih264_macros.h * @@ -26,13 +27,14 @@ * Macro definitions used in the codec * * @author -* Ittiam +* ittiam * * @remarks -* None +* none * ******************************************************************************* */ + #ifndef _IH264_MACROS_H_ #define _IH264_MACROS_H_ @@ -105,6 +107,7 @@ #define GET_BIT(x, pos) ((x) >> (pos)) & 0x1 #define INSERT_BIT(x, pos, bit) { RESET_BIT(x, pos); (x) = (x) | (bit << pos); } -#endif /*_IH264_MACROS_H_*/ + +#endif /*_IH264_MACROS_H_ */ diff --git a/common/ih264_mem_fns.c b/common/ih264_mem_fns.c index 1c1f3285..66a0947d 100644 --- a/common/ih264_mem_fns.c +++ b/common/ih264_mem_fns.c @@ -17,6 +17,7 @@ ***************************************************************************** * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore */ + /** ******************************************************************************* * @file @@ -26,18 +27,18 @@ * Functions used for memory operations * * @author - * Ittiam + * ittiam * * @par List of Functions: - * ih264_memcpy() - * ih264_memcpy_mul_8() - * ih264_memset() - * ih264_memset_mul_8() - * ih264_memset_16bit() - * ih264_memset_16bit_mul_8() + * ih264_memcpy + * ih264_memcpy_mul_8 + * ih264_memset + * ih264_memset_mul_8 + * ih264_memset_16bit + * ih264_memset_16bit_mul_8 * * @remarks - * None + * none * ****************************************************************************** */ @@ -45,118 +46,116 @@ /*****************************************************************************/ /* File Includes */ /*****************************************************************************/ -/* System include files */ + +/* System Include Files */ #include <stdio.h> #include <stddef.h> #include <stdlib.h> #include <string.h> #include <assert.h> - -/* User include files */ +/* User Include Files */ #include "ih264_typedefs.h" + +#include "ih264_debug.h" #include "ih264_mem_fns.h" /** - ******************************************************************************* - * - * @brief - * memcpy of a 8,16 or 32 bytes - * - * @par Description: - * Does memcpy of 8bit data from source to destination for 8,16 or 32 number of bytes - * - * @param[in] pu1_dst - * UWORD8 pointer to the destination - * - * @param[in] pu1_src - * UWORD8 pointer to the source - * - * @param[in] num_bytes - * number of bytes to copy - * @returns - * - * @remarks - * None - * - ******************************************************************************* - */ - +******************************************************************************* +* +* @brief memcpy of a 8,16 or 32 bytes +* +* @par Description +* Does memcpy of 8bit data from source to destination for 8,16 or 32 number of +* bytes +* +* @param[in] pu1_dst +* pointer to the destination +* +* @param[in] pu1_src +* pointer to the source +* +* @param[in] num_bytes +* number of bytes to copy +* +* @returns none +* +* @remarks none +* +******************************************************************************* +*/ void ih264_memcpy(UWORD8 *pu1_dst, UWORD8 *pu1_src, UWORD32 num_bytes) { memcpy(pu1_dst, pu1_src, num_bytes); } - void ih264_memcpy_mul_8(UWORD8 *pu1_dst, UWORD8 *pu1_src, UWORD32 num_bytes) { + ASSERT(num_bytes % 8 == 0); memcpy(pu1_dst, pu1_src, num_bytes); } /** - ******************************************************************************* - * - * @brief - * memset of a 8,16 or 32 bytes - * - * @par Description: - * Does memset of 8bit data for 8,16 or 32 number of bytes - * - * @param[in] pu1_dst - * UWORD8 pointer to the destination - * - * @param[in] value - * UWORD8 value used for memset - * - * @param[in] num_bytes - * number of bytes to set - * @returns - * - * @remarks - * None - * - ******************************************************************************* - */ - +******************************************************************************* +* +* @brief memset of a 8,16 or 32 bytes +* +* @par Description +* Does memset of 8bit data for 8,16 or 32 number of bytes +* +* @param[in] pu1_dst +* pointer to the destination +* +* @param[in] value +* value used for memset +* +* @param[in] num_bytes +* number of bytes to set +* +* @returns none +* +* @remarks none +* +******************************************************************************* +*/ void ih264_memset(UWORD8 *pu1_dst, UWORD8 value, UWORD32 num_bytes) { memset(pu1_dst, value, num_bytes); } - void ih264_memset_mul_8(UWORD8 *pu1_dst, UWORD8 value, UWORD32 num_bytes) { + ASSERT(num_bytes % 8 == 0); memset(pu1_dst, value, num_bytes); } /** - ******************************************************************************* - * - * @brief - * memset of 16bit data of a 8,16 or 32 bytes - * - * @par Description: - * Does memset of 16bit data for 8,16 or 32 number of bytes - * - * @param[in] pu2_dst - * UWORD8 pointer to the destination - * - * @param[in] value - * UWORD16 value used for memset - * - * @param[in] num_words - * number of words to set - * @returns - * - * @remarks - * None - * - ******************************************************************************* - */ - +******************************************************************************* +* +* @brief memset of 16bit data of a 8,16 or 32 bytes +* +* @par Description +* Does memset of 16bit data for 8,16 or 32 number of bytes +* +* @param[in] pu2_dst +* pointer to the destination +* +* @param[in] value +* value used for memset +* +* @param[in] num_words +* number of words to set +* +* @returns none +* +* @remarks none +* +******************************************************************************* +*/ void ih264_memset_16bit(UWORD16 *pu2_dst, UWORD16 value, UWORD32 num_words) { UWORD32 i; + for(i = 0; i < num_words; i++) { *pu2_dst++ = value; @@ -168,6 +167,8 @@ void ih264_memset_16bit_mul_8(UWORD16 *pu2_dst, UWORD32 num_words) { UWORD32 i; + + ASSERT(num_words % 8 == 0); for(i = 0; i < num_words; i++) { *pu2_dst++ = value; diff --git a/common/ih264_mem_fns.h b/common/ih264_mem_fns.h index e0167f40..a951b3c0 100644 --- a/common/ih264_mem_fns.h +++ b/common/ih264_mem_fns.h @@ -17,6 +17,7 @@ ***************************************************************************** * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore */ + /** ******************************************************************************* * @file @@ -26,74 +27,37 @@ * Function declarations used for memory functions * * @author -* Ittiam +* ittiam * * @remarks -* None +* none * ******************************************************************************* */ + #ifndef _IH264_MEM_FNS_H_ #define _IH264_MEM_FNS_H_ -typedef void ih264_memcpy_ft(UWORD8 *pu1_dst, UWORD8 *pu1_src, UWORD32 num_bytes); +/*****************************************************************************/ +/* Extern Function Declarations */ +/*****************************************************************************/ +typedef void ih264_memcpy_ft(UWORD8 *pu1_dst, UWORD8 *pu1_src, + UWORD32 num_bytes); -typedef void ih264_memcpy_mul_8_ft(UWORD8 *pu1_dst, UWORD8 *pu1_src, UWORD32 num_bytes); -/** - ******************************************************************************* - * - * @brief - * memset of a 8,16 or 32 bytes - * - * @par Description: - * Does memset of 8bit data for 8,16 or 32 number of bytes - * - * @param[in] pu1_dst - * UWORD8 pointer to the destination - * - * @param[in] value - * UWORD8 value used for memset - * - * @param[in] num_bytes - * number of bytes to set - * @returns - * - * @remarks - * None - * - ******************************************************************************* - */ -typedef void ih264_memset_ft(UWORD8 *pu1_dst, UWORD8 value, UWORD32 num_bytes); +typedef void ih264_memcpy_mul_8_ft(UWORD8 *pu1_dst, UWORD8 *pu1_src, + UWORD32 num_bytes); -typedef void ih264_memset_mul_8_ft(UWORD8 *pu1_dst, UWORD8 value, UWORD32 num_bytes); +typedef void ih264_memset_ft(UWORD8 *pu1_dst, UWORD8 value, + UWORD32 num_bytes); -/** - ******************************************************************************* - * - * @brief - * memset of 16bit data of a 8,16 or 32 bytes - * - * @par Description: - * Does memset of 16bit data for 8,16 or 32 number of bytes - * - * @param[in] pu2_dst - * UWORD8 pointer to the destination - * - * @param[in] value - * UWORD16 value used for memset - * - * @param[in] num_words - * number of words to set - * @returns - * - * @remarks - * None - * - ******************************************************************************* - */ -typedef void ih264_memset_16bit_ft(UWORD16 *pu2_dst, UWORD16 value, UWORD32 num_words); +typedef void ih264_memset_mul_8_ft(UWORD8 *pu1_dst, UWORD8 value, + UWORD32 num_bytes); + +typedef void ih264_memset_16bit_ft(UWORD16 *pu2_dst, UWORD16 value, + UWORD32 num_words); -typedef void ih264_memset_16bit_mul_8_ft(UWORD16 *pu2_dst, UWORD16 value, UWORD32 num_words); +typedef void ih264_memset_16bit_mul_8_ft(UWORD16 *pu2_dst, UWORD16 value, + UWORD32 num_words); /* C function declarations */ ih264_memcpy_ft ih264_memcpy; @@ -119,8 +83,9 @@ ih264_memset_mul_8_ft ih264_memset_mul_8_av8; ih264_memset_16bit_ft ih264_memset_16bit_av8; ih264_memset_16bit_mul_8_ft ih264_memset_16bit_mul_8_av8; - +/*SSSE3 Declarations*/ ih264_memcpy_mul_8_ft ih264_memcpy_mul_8_ssse3; ih264_memset_mul_8_ft ih264_memset_mul_8_ssse3; ih264_memset_16bit_mul_8_ft ih264_memset_16bit_mul_8_ssse3; -#endif //_MEM_FNS_H_ + +#endif /* _IH264_MEM_FNS_H_ */ diff --git a/common/ih264_padding.c b/common/ih264_padding.c index 8e8f3e25..075187b0 100644 --- a/common/ih264_padding.c +++ b/common/ih264_padding.c @@ -27,18 +27,18 @@ * Contains function definitions for Padding * * @author -* Ittiam +* ittiam * * @par List of Functions: -* - ih264_pad_top() -* - ih264_pad_bottom() -* - ih264_pad_left_luma() -* - ih264_pad_left_chroma() -* - ih264_pad_right_luma() -* - ih264_pad_right_chroma() +* - ih264_pad_top +* - ih264_pad_bottom +* - ih264_pad_left_luma +* - ih264_pad_left_chroma +* - ih264_pad_right_luma +* - ih264_pad_right_chroma * * @remarks -* None +* none * ******************************************************************************* */ @@ -47,11 +47,11 @@ /* File Includes */ /*****************************************************************************/ -/* System include files */ +/* System Include Files */ #include <stddef.h> #include <string.h> -/* User include files */ +/* User Include Files */ #include "ih264_typedefs.h" #include "ih264_macros.h" #include "ih264_padding.h" @@ -70,16 +70,16 @@ * The top row of a 2d array is replicated for pad_size times at the top * * @param[in] pu1_src -* UWORD8 pointer to the source +* pointer to the source * * @param[in] src_strd -* integer source stride +* source stride * * @param[in] wd -* integer width of the array +* width of the array * * @param[in] pad_size -* integer -padding size of the array +* padding size of the array * * @returns none * @@ -100,8 +100,6 @@ void ih264_pad_top(UWORD8 *pu1_src, } } - - /** ******************************************************************************* * @@ -111,16 +109,16 @@ void ih264_pad_top(UWORD8 *pu1_src, * The bottom row of a 2d array is replicated for pad_size times at the bottom * * @param[in] pu1_src -* UWORD8 pointer to the source +* pointer to the source * * @param[in] src_strd -* integer source stride +* source stride * * @param[in] wd -* integer width of the array +* width of the array * * @param[in] pad_size -* integer -padding size of the array +* padding size of the array * * @returns none * @@ -147,26 +145,26 @@ void ih264_pad_bottom(UWORD8 *pu1_src, * @brief pad (luma block) at the left of a 2d array * * @par Description: -* The left column of a 2d array is replicated for pad_size times to the left +* The left column of a 2d array is replicated for pad_size times to the left * * @param[in] pu1_src -* UWORD8 pointer to the source +* pointer to the source * * @param[in] src_strd -* integer source stride +* source stride * * @param[in] ht -* integer height of the array +* height of the array * * @param[in] pad_size -* integer -padding size of the array +* padding size of the array * * @returns none * * @remarks none * ******************************************************************************* - */ +*/ void ih264_pad_left_luma(UWORD8 *pu1_src, WORD32 src_strd, WORD32 ht, @@ -176,9 +174,7 @@ void ih264_pad_left_luma(UWORD8 *pu1_src, for(row = 0; row < ht; row++) { - memset(pu1_src - pad_size, *pu1_src, pad_size); - pu1_src += src_strd; } } @@ -189,19 +185,19 @@ void ih264_pad_left_luma(UWORD8 *pu1_src, * @brief pad (chroma block) at the left of a 2d array * * @par Description: -* The left column of a 2d array is replicated for pad_size times to the left +* The left column of a 2d array is replicated for pad_size times to the left * * @param[in] pu1_src -* UWORD8 pointer to the source +* pointer to the source * * @param[in] src_strd -* integer source stride +* source stride * * @param[in] ht -* integer height of the array +* height of the array * * @param[in] pad_size -* integer -padding size of the array +* padding size of the array * * @returns none * @@ -214,11 +210,8 @@ void ih264_pad_left_chroma(UWORD8 *pu1_src, WORD32 ht, WORD32 pad_size) { - /* temp var */ WORD32 row, col; UWORD16 u2_uv_val; - - /* pointer to src */ UWORD16 *pu2_src = (UWORD16 *)pu1_src; src_strd >>= 1; @@ -227,12 +220,10 @@ void ih264_pad_left_chroma(UWORD8 *pu1_src, for(row = 0; row < ht; row++) { u2_uv_val = pu2_src[0]; - - for (col = -pad_size; col < 0; col++) + for(col = -pad_size; col < 0; col++) { pu2_src[col] = u2_uv_val; } - pu2_src += src_strd; } } @@ -246,16 +237,16 @@ void ih264_pad_left_chroma(UWORD8 *pu1_src, * The right column of a 2d array is replicated for pad_size times at the right * * @param[in] pu1_src -* UWORD8 pointer to the source +* pointer to the source * * @param[in] src_strd -* integer source stride +* source stride * * @param[in] ht -* integer height of the array +* height of the array * * @param[in] pad_size -* integer -padding size of the array +* padding size of the array * * @returns none * @@ -273,7 +264,6 @@ void ih264_pad_right_luma(UWORD8 *pu1_src, for(row = 0; row < ht; row++) { memset(pu1_src, *(pu1_src -1), pad_size); - pu1_src += src_strd; } } @@ -287,16 +277,16 @@ void ih264_pad_right_luma(UWORD8 *pu1_src, * The right column of a 2d array is replicated for pad_size times at the right * * @param[in] pu1_src -* UWORD8 pointer to the source +* pointer to the source * * @param[in] src_strd -* integer source stride +* source stride * * @param[in] ht -* integer height of the array +* height of the array * * @param[in] pad_size -* integer -padding size of the array +* padding size of the array * * @returns none * @@ -319,12 +309,10 @@ void ih264_pad_right_chroma(UWORD8 *pu1_src, for(row = 0; row < ht; row++) { u2_uv_val = pu2_src[-1]; - - for (col = 0; col < pad_size; col++) + for(col = 0; col < pad_size; col++) { pu2_src[col] = u2_uv_val; } - pu2_src += src_strd; } } diff --git a/common/ih264_padding.h b/common/ih264_padding.h index e4e18fbe..1f9a8469 100644 --- a/common/ih264_padding.h +++ b/common/ih264_padding.h @@ -24,16 +24,17 @@ * ih264_padding.h * * @brief -* Declarations for padding functions +* Declarations of padding functions * * @author -* Ittiam +* ittiam * * @remarks -* None +* none * ******************************************************************************* */ + #ifndef _IH264_PADDING_H_ #define _IH264_PADDING_H_ @@ -65,10 +66,10 @@ ih264_pad ih264_pad_left_chroma_av8; ih264_pad ih264_pad_right_luma_av8; ih264_pad ih264_pad_right_chroma_av8; - +/* SSSE3 Declarations */ ih264_pad ih264_pad_left_luma_ssse3; ih264_pad ih264_pad_left_chroma_ssse3; ih264_pad ih264_pad_right_luma_ssse3; ih264_pad ih264_pad_right_chroma_ssse3; -#endif /*_IH264_PADDING_H_*/ +#endif /* _IH264_PADDING_H_ */ diff --git a/common/ih264_resi_trans.h b/common/ih264_resi_trans.h deleted file mode 100644 index ee0add39..00000000 --- a/common/ih264_resi_trans.h +++ /dev/null @@ -1,70 +0,0 @@ -/****************************************************************************** - * - * Copyright (C) 2015 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ***************************************************************************** - * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore -*/ -/** -******************************************************************************* -* @file -* ih264_resi_trans.h -* -* @brief -* Functions declarations for residue and forward transform -* -* @par List of Functions: -* - ih264_resi_trans_ft -* - ih264_resi_trans_4x4 -* - ih264_resi_trans_4x4 -* - ih264_resi_trans_4x4_a9 -* - ih264_resi_trans_4x4_a9 -* -* @author -* Ittiam -* -* @remarks -* None -* -******************************************************************************* -*/ - -#ifndef IH264_RESI_TRANS_H_ -#define IH264_RESI_TRANS_H_ - -/*****************************************************************************/ -/* Extern Function Declarations */ -/*****************************************************************************/ - -typedef void ih264_resi_trans_ft(UWORD8 *pu1_src, - UWORD8 *pu1_pred, - WORD32 *pi4_out, - WORD32 src_strd, - WORD32 pred_strd, - WORD32 out_strd); - -/*C functions*/ - -ih264_resi_trans_ft ih264_resi_trans_4x4; - -ih264_resi_trans_ft ih264_resi_trans_8x8; - -/*A9 functions*/ - -ih264_resi_trans_ft ih264_resi_trans_4x4_a9; - -ih264_resi_trans_ft ih264_resi_trans_8x8_a9; - -#endif /* IH264_RESI_TRANS_H_ */ diff --git a/common/ih264_resi_trans_quant.c b/common/ih264_resi_trans_quant.c index a17b0785..0e1b794e 100644 --- a/common/ih264_resi_trans_quant.c +++ b/common/ih264_resi_trans_quant.c @@ -17,98 +17,104 @@ ***************************************************************************** * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore */ + /** - ******************************************************************************* - * @file - * ih264_resi_trans_quant.c - * - * @brief - * Contains function definitions single stage forward transform for H.264 - * It will calculate the residue, do the cf and then do quantization - * - * @author - * Ittiam - * - * @par List of Functions: - * - ih264_resi_trans_quant_4x4() - * - ih264_resi_trans_quant_chroma_4x4 - * - ih264_hadamard_quant_4x4 - * - ih264_hadamard_quant_2x2_uv - * - ih264_resi_trans_quant_8x8 - * - * @remarks - ******************************************************************************* - */ +******************************************************************************* +* @file +* ih264_resi_trans_quant.c +* +* @brief +* Contains function definitions single stage forward transform for H.264 +* It will calculate the residue, do the cf and then do quantization +* +* @author +* ittiam +* +* @par List of Functions: +* - ih264_resi_trans_quant_4x4 +* - ih264_resi_trans_quant_chroma_4x4 +* - ih264_hadamard_quant_4x4 +* - ih264_hadamard_quant_2x2_uv +* - ih264_resi_trans_quant_8x8 +* +* @remarks +* none +* +******************************************************************************* +*/ + /*****************************************************************************/ /* File Includes */ /*****************************************************************************/ -/* System include files */ +/* System Include Files */ #include <stddef.h> -/* User include files */ +/* User Include Files */ #include "ih264_typedefs.h" #include "ih264_defs.h" -#include "ih264_size_defs.h" #include "ih264_macros.h" +#include "ih264_size_defs.h" #include "ih264_trans_macros.h" #include "ih264_trans_data.h" #include "ih264_structs.h" #include "ih264_trans_quant_itrans_iquant.h" + +/*****************************************************************************/ +/* Function Definitions */ +/*****************************************************************************/ + /** - ******************************************************************************* - * - * @brief - * This function performs forward transform and quantization on a 4*4 block - * - * @par Description: - * The function accepts source buffer and estimation buffer. From these, it - * computes the residue. This is residue is then transformed and quantized. - * The transform and quantization are in placed computed. They use the residue - * buffer for this. - * - * @param[in] pu1_src - * Pointer to source sub-block - * - * @param[in] pu1_pred - * Pointer to prediction sub-block - * - * @param[in] pi2_out - * Pointer to residual sub-block - * - * @param[in] src_strd - * Source stride - * - * @param[in] pred_strd - * Prediction stride - * - * @param[in] dst_strd - * Destination stride - * - * @param[in] u4_qbits - * QP_BITS_h264_4x4 + floor(QP/6) - * - * @param[in] pu2_threshold_matrix - * Pointer to Forward Quant Threshold Matrix - * - * @param[in] pu2_scale_matrix - * Pointer to Forward Quant Scale Matrix - * - * @param[in] u4_round_factor - * Quantization Round factor - * - * @param[out] pu1_nnz - * Total non-zero coefficients in the current sub-block - * - * @returns - * - * @remarks - * None - * - ******************************************************************************* - */ +******************************************************************************* +* +* @brief +* This function performs forward transform and quantization on a 4x4 block +* +* @par Description: +* The function accepts source buffer and estimation buffer. From these, it +* computes the residue. This is residue is then transformed and quantized. +* The transform and quantization are in placed computed. They use the residue +* buffer for this. +* +* @param[in] pu1_src +* Pointer to source sub-block +* +* @param[in] pu1_pred +* Pointer to prediction sub-block +* +* @param[in] pi2_out +* Pointer to residual sub-block +* +* @param[in] src_strd +* Source stride +* +* @param[in] pred_strd +* Prediction stride +* +* @param[in] pu2_scale_matrix +* Pointer to Forward Quant Scale Matrix +* +* @param[in] pu2_threshold_matrix +* Pointer to Forward Quant Threshold Matrix +* +* @param[in] u4_qbits +* QP_BITS_h264_4x4 + floor(QP/6) +* +* @param[in] u4_round_factor +* Quantization Round factor +* +* @param[out] pu1_nnz +* Total non-zero coefficients in the current sub-block +* +* @param[in] pi2_alt_dc_addr +* DC Coefficient of the block +* +* @remarks none +* +******************************************************************************* +*/ void ih264_resi_trans_quant_4x4(UWORD8 *pu1_src, UWORD8 *pu1_pred, WORD16 *pi2_out, @@ -122,9 +128,9 @@ void ih264_resi_trans_quant_4x4(UWORD8 *pu1_src, WORD16 *pi2_alt_dc_addr) { UWORD32 i; - WORD32 x0, x1, x2, x3, x4, x5, x6, x7; - WORD32 i4_value; - WORD16 *pi2_out_tmp = pi2_out; + WORD32 x0, x1, x2, x3, x4, x5, x6, x7; + WORD32 i4_value; + WORD16 *pi2_out_tmp = pi2_out; UWORD32 u4_nonzero_coeff = 0; for (i = 0; i < SUB_BLK_WIDTH_4x4; i++) @@ -142,60 +148,60 @@ void ih264_resi_trans_quant_4x4(UWORD8 *pu1_src, x3 = x4 - x7; pi2_out_tmp[0] = x0 + x1; - pi2_out_tmp[1] = (x3 <<1) + x2; + pi2_out_tmp[1] = (x3 << 1) + x2; pi2_out_tmp[2] = x0 - x1; - pi2_out_tmp[3] = x3 - (x2<<1); + pi2_out_tmp[3] = x3 - (x2 << 1); /* pointing to next row; */ pu1_src += src_strd; pu1_pred += pred_strd; pi2_out_tmp += 4; - } + pi2_out_tmp = pi2_out; for (i = 0; i < SUB_BLK_WIDTH_4x4; i++) { - /* Vertical transform and quantization */ x4 = pi2_out_tmp[0]; x5 = pi2_out_tmp[4]; x6 = pi2_out_tmp[8]; x7 = pi2_out_tmp[12]; - x0 = x4 + x7; x1 = x5 + x6; x2 = x5 - x6; x3 = x4 - x7; /* quantization is done in place */ - i4_value = x0 + x1; - - if(i==0) + if(i == 0) { - (*pi2_alt_dc_addr) = i4_value; + (*pi2_alt_dc_addr) = i4_value; } - - FWD_QUANT(i4_value, pu2_threshold_matrix[0], pu2_scale_matrix[0], u4_round_factor, u4_qbits, u4_nonzero_coeff); + FWD_QUANT(i4_value, pu2_threshold_matrix[0], + pu2_scale_matrix[0], u4_round_factor, u4_qbits, + u4_nonzero_coeff); pi2_out_tmp[0] = i4_value; - i4_value = (x3 << 1) + x2; - FWD_QUANT(i4_value, pu2_threshold_matrix[4], pu2_scale_matrix[4], u4_round_factor, u4_qbits, u4_nonzero_coeff); + FWD_QUANT(i4_value, pu2_threshold_matrix[4], + pu2_scale_matrix[4], u4_round_factor, u4_qbits, + u4_nonzero_coeff); pi2_out_tmp[4] = i4_value; - i4_value = x0 - x1; - FWD_QUANT(i4_value, pu2_threshold_matrix[8], pu2_scale_matrix[8], u4_round_factor, u4_qbits, u4_nonzero_coeff); + FWD_QUANT(i4_value, pu2_threshold_matrix[8], + pu2_scale_matrix[8], u4_round_factor, u4_qbits, + u4_nonzero_coeff); pi2_out_tmp[8] = i4_value; - i4_value = x3 - (x2 << 1); - FWD_QUANT(i4_value, pu2_threshold_matrix[12], pu2_scale_matrix[12], u4_round_factor, u4_qbits, u4_nonzero_coeff); + FWD_QUANT(i4_value, pu2_threshold_matrix[12], + pu2_scale_matrix[12], u4_round_factor, u4_qbits, + u4_nonzero_coeff); pi2_out_tmp[12] = i4_value; - pi2_out_tmp ++; + pi2_out_tmp++; pu2_scale_matrix++; pu2_threshold_matrix++; } @@ -203,59 +209,57 @@ void ih264_resi_trans_quant_4x4(UWORD8 *pu1_src, /* Return total nonzero coefficients in the current sub block */ *pu1_nnz = u4_nonzero_coeff; } + /** - ******************************************************************************* - * - * @brief - * This function performs forward transform and quantization on a 4*4 chroma block - * with interleaved values - * - * @par Description: - * The function accepts source buffer and estimation buffer. From these, it - * computes the residue. This is residue is then transformed and quantized. - * The transform and quantization are in placed computed. They use the residue - * buffer for this. - * - * @param[in] pu1_src - * Pointer to source sub-block - * - * @param[in] pu1_pred - * Pointer to prediction sub-block - * - * @param[in] pi2_out - * Pointer to residual sub-block - * - * @param[in] src_strd - * Source stride - * - * @param[in] pred_strd - * Prediction stride - * - * @param[in] dst_strd - * Destination stride - * - * @param[in] u4_qbits - * QP_BITS_h264_4x4 + floor(QP/6) - * - * @param[in] pu2_threshold_matrix - * Pointer to Forward Quant Threshold Matrix - * - * @param[in] pu2_scale_matrix - * Pointer to Forward Quant Scale Matrix - * - * @param[in] u4_round_factor - * Quantization Round factor - * - * @param[out] pu1_nnz - * Total non-zero coefficients in the current sub-block - * - * @returns - * - * @remarks - * None - * - ******************************************************************************* - */ +******************************************************************************* +* +* @brief +* This function performs forward transform and quantization on a 4x4 +* chroma block with interleaved values +* +* @par Description: +* The function accepts source buffer and estimation buffer. From these, it +* computes the residue. This is residue is then transformed and quantized. +* The transform and quantization are in placed computed. They use the residue +* buffer for this. +* +* @param[in] pu1_src +* Pointer to source sub-block +* +* @param[in] pu1_pred +* Pointer to prediction sub-block +* +* @param[in] pi2_out +* Pointer to residual sub-block +* +* @param[in] src_strd +* Source stride +* +* @param[in] pred_strd +* Prediction stride +* +* @param[in] pu2_scale_matrix +* Pointer to Forward Quant Scale Matrix +* +* @param[in] pu2_threshold_matrix +* Pointer to Forward Quant Threshold Matrix +* +* @param[in] u4_qbits +* QP_BITS_h264_4x4 + floor(QP/6) +* +* @param[in] u4_round_factor +* Quantization Round factor +* +* @param[out] pu1_nnz +* Total non-zero coefficients in the current sub-block +* +* @param[in] pi2_alt_dc_addr +* DC Coefficient of the block +* +* @remarks none +* +******************************************************************************* +*/ void ih264_resi_trans_quant_chroma_4x4(UWORD8 *pu1_src, UWORD8 *pu1_pred, WORD16 *pi2_out, @@ -269,12 +273,12 @@ void ih264_resi_trans_quant_chroma_4x4(UWORD8 *pu1_src, WORD16 *pu1_dc_alt_addr) { UWORD32 i; - WORD32 x0, x1, x2, x3, x4, x5, x6, x7; - WORD32 i4_value; - WORD16 *pi2_out_tmp = pi2_out; + WORD32 x0, x1, x2, x3, x4, x5, x6, x7; + WORD32 i4_value; + WORD16 *pi2_out_tmp = pi2_out; UWORD32 u4_nonzero_coeff = 0; - for (i = 0; i < SUB_BLK_WIDTH_4x4; i++) + for(i = 0; i < SUB_BLK_WIDTH_4x4; i++) { /* computing prediction error (residue) */ x4 = pu1_src[0] - pu1_pred[0]; @@ -289,41 +293,36 @@ void ih264_resi_trans_quant_chroma_4x4(UWORD8 *pu1_src, x3 = x4 - x7; pi2_out_tmp[0] = x0 + x1; - pi2_out_tmp[1] = (x3 <<1) + x2; + pi2_out_tmp[1] = (x3 << 1) + x2; pi2_out_tmp[2] = x0 - x1; - pi2_out_tmp[3] = x3 - (x2<<1); + pi2_out_tmp[3] = x3 - (x2 << 1); /* pointing to next row; */ pu1_src += src_strd; pu1_pred += pred_strd; pi2_out_tmp += 4; - } + pi2_out_tmp = pi2_out; - for (i = 0; i < SUB_BLK_WIDTH_4x4; i++) + for(i = 0; i < SUB_BLK_WIDTH_4x4; i++) { - /* Vertical transform and quantization */ x4 = pi2_out_tmp[0]; x5 = pi2_out_tmp[4]; x6 = pi2_out_tmp[8]; x7 = pi2_out_tmp[12]; - x0 = x4 + x7; x1 = x5 + x6; x2 = x5 - x6; x3 = x4 - x7; /* quantization is done in place */ - i4_value = x0 + x1; - - if(i==0) + if(i == 0) { - *pu1_dc_alt_addr = i4_value; + *pu1_dc_alt_addr = i4_value; } - FWD_QUANT(i4_value, pu2_threshold_matrix[0], pu2_scale_matrix[0], u4_round_factor, u4_qbits, u4_nonzero_coeff); @@ -347,7 +346,7 @@ void ih264_resi_trans_quant_chroma_4x4(UWORD8 *pu1_src, u4_nonzero_coeff); pi2_out_tmp[12] = i4_value; - pi2_out_tmp ++; + pi2_out_tmp++; pu2_scale_matrix++; pu2_threshold_matrix++; } @@ -357,57 +356,43 @@ void ih264_resi_trans_quant_chroma_4x4(UWORD8 *pu1_src, } /** - ******************************************************************************* - * - * @brief - * This function performs forward hadamard transform and quantization on a 4*4 block - * - * @par Description: - * The function accepts source buffer and estimation buffer. From these, it - * computes the residue. This is residue is then transformed and quantized. - * The transform and quantization are in placed computed. They use the residue - * buffer for this. - * - * @param[in] pu1_src - * Pointer to source sub-block - * - * @param[in] pu1_pred - * Pointer to prediction sub-block - * - * @param[in] pi2_out - * Pointer to residual sub-block - * - * @param[in] src_strd - * Source stride - * - * @param[in] pred_strd - * Prediction stride - * - * @param[in] dst_strd - * Destination stride - * - * @param[in] u4_qbits - * QP_BITS_h264_4x4 + floor(QP/6) - * - * @param[in] pu2_threshold_matrix - * Pointer to Forward Quant Threshold Matrix - * - * @param[in] pu2_scale_matrix - * Pointer to Forward Quant Scale Matrix - * - * @param[in] u4_round_factor - * Quantization Round factor - * - * @param[out] pu1_nnz - * Total non-zero coefficients in the current sub-block - * - * @returns - * - * @remarks - * None - * - */ - +******************************************************************************* +* +* @brief +* This function performs forward hadamard transform and quantization on a +* 4x4 block +* +* @par Description: +* The function accepts source buffer and estimation buffer. From these, it +* computes the residue. This is residue is then transformed and quantized. +* The transform and quantization are in placed computed. They use the residue +* buffer for this. +* +* @param[in] pu1_src +* Pointer to source sub-block +* +* @param[in] pi2_dst +* Pointer to destination sub-block +* +* @param[in] pu2_threshold_matrix +* Pointer to Forward Quant Threshold Matrix +* +* @param[in] pu2_scale_matrix +* Pointer to Forward Quant Scale Matrix +* +* @param[in] u4_qbits +* QP_BITS_h264_4x4 + floor(QP/6) +* +* @param[in] u4_round_factor +* Quantization Round factor +* +* @param[out] pu1_nnz +* Total non-zero coefficients in the current sub-block +* +* @remarks none +* +******************************************************************************** +*/ void ih264_hadamard_quant_4x4(WORD16 *pi2_src, WORD16 *pi2_dst, const UWORD16 *pu2_scale_matrix, @@ -416,12 +401,12 @@ void ih264_hadamard_quant_4x4(WORD16 *pi2_src, UWORD32 u4_round_factor, UWORD8 *pu1_nnz) { - WORD32 i; - WORD32 x0,x1,x2,x3,x4,x5,x6,x7,i4_value; + WORD32 i; + WORD32 x0, x1, x2, x3, x4, x5, x6, x7, i4_value; - *pu1_nnz = 0; + *pu1_nnz = 0; - for (i = 0; i < SUB_BLK_WIDTH_4x4; i++) + for(i = 0; i < SUB_BLK_WIDTH_4x4; i++) { x4 = pi2_src[0]; x5 = pi2_src[1]; @@ -443,21 +428,20 @@ void ih264_hadamard_quant_4x4(WORD16 *pi2_src, } /* Vertical transform and quantization */ - pi2_dst -= SUB_BLK_WIDTH_4x4<<2; + pi2_dst -= SUB_BLK_WIDTH_4x4 << 2; - for (i = 0; i < SUB_BLK_WIDTH_4x4; i++) + for(i = 0; i < SUB_BLK_WIDTH_4x4; i++) { x4 = pi2_dst[0]; x5 = pi2_dst[4]; x6 = pi2_dst[8]; - x7 = pi2_dst[12] ; + x7 = pi2_dst[12]; x0 = x4 + x7; x1 = x5 + x6; x2 = x5 - x6; x3 = x4 - x7; - i4_value = (x0 + x1) >> 1; FWD_QUANT(i4_value, pu2_threshold_matrix[0], pu2_scale_matrix[0], u4_round_factor, u4_qbits, pu1_nnz[0]); @@ -478,63 +462,49 @@ void ih264_hadamard_quant_4x4(WORD16 *pi2_src, pu2_scale_matrix[0], u4_round_factor, u4_qbits, pu1_nnz[0]); pi2_dst[12] = i4_value; - pi2_dst ++; + pi2_dst++; } } /** - ******************************************************************************* - * - * @brief - * This function performs forward hadamard transform and quantization on a 2*2 block - * for both U and V planes - * - * @par Description: - * The function accepts source buffer and estimation buffer. From these, it - * computes the residue. This is residue is then transformed and quantized. - * The transform and quantization are in placed computed. They use the residue - * buffer for this. - * - * @param[in] pu1_src - * Pointer to source sub-block - * - * @param[in] pu1_pred - * Pointer to prediction sub-block - * - * @param[in] pi2_out - * Pointer to residual sub-block - * - * @param[in] src_strd - * Source stride - * - * @param[in] pred_strd - * Prediction stride - * - * @param[in] dst_strd - * Destination stride - * - * @param[in] u4_qbits - * QP_BITS_h264_4x4 + floor(QP/6) - * - * @param[in] pu2_threshold_matrix - * Pointer to Forward Quant Threshold Matrix - * - * @param[in] pu2_scale_matrix - * Pointer to Forward Quant Scale Matrix - * - * @param[in] u4_round_factor - * Quantization Round factor - * - * @param[out] pu1_nnz - * Total non-zero coefficients in the current sub-block - * - * @returns - * - * @remarks - * NNZ for dc is populated at 0 and 5th position of pu1_nnz - * - */ - +******************************************************************************* +* +* @brief +* This function performs forward hadamard transform and quantization on a +* 2x2 block for both U and V planes +* +* @par Description: +* The function accepts source buffer and estimation buffer. From these, it +* computes the residue. This is residue is then transformed and quantized. +* The transform and quantization are in placed computed. They use the residue +* buffer for this. +* +* @param[in] pu1_src +* Pointer to source sub-block +* +* @param[in] pi2_dst +* Pointer to destination sub-block +* +* @param[in] pu2_threshold_matrix +* Pointer to Forward Quant Threshold Matrix +* +* @param[in] pu2_scale_matrix +* Pointer to Forward Quant Scale Matrix +* +* @param[in] u4_qbits +* QP_BITS_h264_4x4 + floor(QP/6) +* +* @param[in] u4_round_factor +* Quantization Round factor +* +* @param[out] pu1_nnz +* Total non-zero coefficients in the current sub-block +* +* @remarks +* NNZ for dc is populated at 0 and 5th position of pu1_nnz +* +******************************************************************************* +*/ void ih264_hadamard_quant_2x2_uv(WORD16 *pi2_src, WORD16 *pi2_dst, const UWORD16 *pu2_scale_matrix, @@ -588,56 +558,60 @@ void ih264_hadamard_quant_2x2_uv(WORD16 *pi2_src, pi2_dst += 4; pi2_src += 4; - } } -/* - ******************************************************************************* - * - * @brief - * This function performs Single stage forward transform CF8 and quantization on 8*8 blocks - * for h.264 - * - * @par Description: - * Performs single stage 8x8 forward transform CF8 after calculating the residue - * The result is then quantized - * - * @param[in] pu1_src - * Input 8x8 pixels - * - * @param[in] pu1_pred - * Input 8x8 pixels - * - * @param[in] pi1_out - * Output 8x8 pixels - * - * @param[in] u4_thresh - * Threshold under which the coeffs are not quantized - * - * @param[in] u4_qp_div - * QP/6 - * - * @param[in] u4_qp_rem - * QP%6 - * - * @param[in] u2_src_stride - * Source stride - * - * @param[in] pred_strd - * stride for prediciton buffer - * - * @param[in] dst_strd - * stride for destination buffer - * - * @param[in] pu4_quant_mat - * Pointer to the 4x4 quantization matrix - * - * @returns Void - * - * - ******************************************************************************* - */ +/** +******************************************************************************* +* +* @brief +* This function performs Single stage forward transform CF8 and quantization +* on 8x8 blocks +* +* @par Description: +* Performs single stage 8x8 forward transform CF8 after calculating the residue +* The result is then quantized +* +* @param[in] pu1_src +* Pointer to source sub-block +* +* @param[in] pu1_pred +* Pointer to prediction sub-block +* +* @param[in] pi2_out +* Pointer to residual sub-block +* +* @param[in] src_strd +* Source stride +* +* @param[in] pred_strd +* Prediction stride +* +* @param[in] pu2_scale_matrix +* Pointer to Forward Quant Scale Matrix +* +* @param[in] pu2_threshold_matrix +* Pointer to Forward Quant Threshold Matrix +* +* @param[in] u4_qbits +* QP_BITS_h264_8x8 + floor(QP/6) +* +* @param[in] u4_round_factor +* Quantization Round factor +* +* @param[out] pu1_nnz +* Total non-zero coefficients in the current sub-block +* +* @param[in] pi2_alt_dc_addr +* UNUSED +* +* @returns none +* +* @remarks: +* TODO: This function needs to be tested before integration +* +******************************************************************************* +*/ void ih264_resi_trans_quant_8x8(UWORD8 *pu1_src, UWORD8 *pu1_pred, WORD16 *pi2_out, @@ -649,32 +623,28 @@ void ih264_resi_trans_quant_8x8(UWORD8 *pu1_src, UWORD32 u4_round_factor, UWORD8 *pu1_nnz, WORD16 *pu1_dc_alt_addr) - { WORD16 *pi2_out_tmp = pi2_out; - UWORD32 i; + WORD32 i; WORD32 a0, a1, a2, a3, a4, a5, a6, a7; WORD32 r0, r1, r2, r3, r4, r5, r6, r7; UWORD32 u4_nonzero_coeff = 0; UNUSED(pu1_dc_alt_addr); - /*Horizontal transform */ - /* we are going to use the a's and r's in a twisted way since */ - /*i dont want to declare more variables */ + /* Horizontal transform */ for(i = 0; i < SUB_BLK_WIDTH_8x8; ++i) { r0 = pu1_src[0]; r0 -= pu1_pred[0]; r1 = pu1_src[1]; r1 -= pu1_pred[1]; - r2 = pu1_src[2];r2 -= pu1_pred[2]; - r3 = pu1_src[3];r3 -= pu1_pred[3]; - r4 = pu1_src[4];r4 -= pu1_pred[4]; - r5 = pu1_src[5];r5 -= pu1_pred[5]; - r6 = pu1_src[6];r6 -= pu1_pred[6]; - r7 = pu1_src[7];r7 -= pu1_pred[7]; - + r2 = pu1_src[2]; r2 -= pu1_pred[2]; + r3 = pu1_src[3]; r3 -= pu1_pred[3]; + r4 = pu1_src[4]; r4 -= pu1_pred[4]; + r5 = pu1_src[5]; r5 -= pu1_pred[5]; + r6 = pu1_src[6]; r6 -= pu1_pred[6]; + r7 = pu1_src[7]; r7 -= pu1_pred[7]; a0 = r0 + r7; a1 = r1 + r6; @@ -687,38 +657,34 @@ void ih264_resi_trans_quant_8x8(UWORD8 *pu1_src, a7 = a1 - a2; pi2_out_tmp[0] = a4 + a5; - - pi2_out_tmp[2] = a6 + (a7>>1); + pi2_out_tmp[2] = a6 + (a7 >> 1); pi2_out_tmp[4] = a4 - a5; - pi2_out_tmp[6] = (a6>>1) - a7; + pi2_out_tmp[6] = (a6 >> 1) - a7; a0 = r0 - r7; a1 = r1 - r6; a2 = r2 - r5; a3 = r3 - r4; - a4 = a1 + a2 + ((a0>>1) + a0); - a5 = a0 - a3 - ((a2>>1) + a2); - a6 = a0 + a3 - ((a1>>1) + a1); - a7 = a1 - a2 + ((a3>>1) + a3); + a4 = a1 + a2 + ((a0 >> 1) + a0); + a5 = a0 - a3 - ((a2 >> 1) + a2); + a6 = a0 + a3 - ((a1 >> 1) + a1); + a7 = a1 - a2 + ((a3 >> 1) + a3); - pi2_out_tmp[1] = a4 + (a7>>2); - pi2_out_tmp[3] = a5 + (a6>>2); - pi2_out_tmp[5] = a6 - (a5>>2); - pi2_out_tmp[7] = (a4>>2) - a7; + pi2_out_tmp[1] = a4 + (a7 >> 2); + pi2_out_tmp[3] = a5 + (a6 >> 2); + pi2_out_tmp[5] = a6 - (a5 >> 2); + pi2_out_tmp[7] = (a4 >> 2) - a7; pu1_src += src_strd; pu1_pred += pred_strd; pi2_out_tmp += 8; } - /*vertical transform and quant */ - + /* vertical transform and quant */ pi2_out_tmp = pi2_out; - - for (i = 0; i < SUB_BLK_WIDTH_8x8; ++i) + for(i = 0; i < SUB_BLK_WIDTH_8x8; ++i) { - r0 = pi2_out_tmp[0]; r1 = pi2_out_tmp[8]; r2 = pi2_out_tmp[16]; @@ -744,19 +710,19 @@ void ih264_resi_trans_quant_8x8(UWORD8 *pu1_src, a3 = r3 - r4; r0 = a4 + a5; - r2 = a6 + (a7>>1); + r2 = a6 + (a7 >> 1); r4 = a4 - a5; - r6 = (a6>>1) - a7; + r6 = (a6 >> 1) - a7; - a4 = a1 + a2 + ((a0>>1) + a0); - a5 = a0 - a3 - ((a2>>1) + a2); - a6 = a0 + a3 - ((a1>>1) + a1); - a7 = a1 - a2 + ((a3>>1) + a3); + a4 = a1 + a2 + ((a0 >> 1) + a0); + a5 = a0 - a3 - ((a2 >> 1) + a2); + a6 = a0 + a3 - ((a1 >> 1) + a1); + a7 = a1 - a2 + ((a3 >> 1) + a3); - r1 = a4 + (a7>>2); - r3 = a5 + (a6>>2); - r5 = a6 - (a5>>2); - r7 = (a4>>2) - a7; + r1 = a4 + (a7 >> 2); + r3 = a5 + (a6 >> 2); + r5 = a6 - (a5 >> 2); + r7 = (a4 >> 2) - a7; FWD_QUANT(r0, pu2_threshold_matrix[0], pu2_scale_matrix[0], u4_round_factor, u4_qbits, @@ -802,6 +768,6 @@ void ih264_resi_trans_quant_8x8(UWORD8 *pu1_src, pu2_scale_matrix++; pu2_threshold_matrix++; } - /* Return total nonzero coefficients in the current sub block */ - *pu1_nnz = u4_nonzero_coeff; + /* Return total nonzero coefficients in the current sub block */ + *pu1_nnz = u4_nonzero_coeff; } diff --git a/common/ih264_size_defs.h b/common/ih264_size_defs.h index 45556477..e2a584b3 100644 --- a/common/ih264_size_defs.h +++ b/common/ih264_size_defs.h @@ -17,23 +17,26 @@ ***************************************************************************** * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore */ + /** - ******************************************************************************* - * @file - * ih264_size_defs.h - * - * @brief - * Contains declaration of global variables for H264 transform , quant and inverse quant - * - * @author - * Ittiam - * - * @remarks - * - ********************************************************************************/ +******************************************************************************* +* @file +* ih264_size_defs.h +* +* @brief +* Contains macro definitions used in h264 transform, quant and inverse quant +* +* @author +* ittiam +* +* @remarks +* none +* +******************************************************************************* +*/ -#ifndef IH264_SIZE_DEFS_H_ -#define IH264_SIZE_DEFS_H_ +#ifndef _IH264_SIZE_DEFS_H_ +#define _IH264_SIZE_DEFS_H_ /*****************************************************************************/ /* Constant Macros */ @@ -84,4 +87,4 @@ #define SIZE_TMP_BUFF_ITRANS ((SUB_BLK_WIDTH_4x4*SUB_BLK_WIDTH_4x4) +\ (SUB_BLK_WIDTH_4x4*SUB_BLK_WIDTH_4x4)) -#endif /* IH264_DEFS_H_ */ +#endif /* _IH264_SIZE_DEFS_H_ */ diff --git a/common/ih264_structs.h b/common/ih264_structs.h index 7699451d..72f4d102 100644 --- a/common/ih264_structs.h +++ b/common/ih264_structs.h @@ -19,23 +19,21 @@ */ /** - ******************************************************************************* - * @file - * ih264_structs.h - * - * @brief - * Structure definitions used in the code - * - * @author - * Ittiam - * - * @par List of Functions: - * - * @remarks - * None - * - ******************************************************************************* - */ +******************************************************************************* +* @file +* ih264_structs.h +* +* @brief +* Structure definitions used in the code +* +* @author +* ittiam +* +* @remarks +* none +* +******************************************************************************* +*/ #ifndef _IH264_STRUCTS_H_ #define _IH264_STRUCTS_H_ @@ -569,16 +567,16 @@ typedef struct UWORD8 u1_cpb_cnt_minus1; /** - * (together with bit_rate_value_minus1) specifies the - * maximum input bit rate of the i-th CPB - */ + * (together with bit_rate_value_minus1) specifies the + * maximum input bit rate of the i-th CPB + */ UWORD32 u4_bit_rate_scale; /** - * (together with cpb_size_du_value_minus1) specifies - * CPB size of the i-th CPB when the CPB operates - * at the access unit level - */ + * (together with cpb_size_du_value_minus1) specifies + * CPB size of the i-th CPB when the CPB operates + * at the access unit level + */ UWORD32 u4_cpb_size_scale; /** @@ -600,18 +598,18 @@ typedef struct /** - * specifies the length, in bits for initial cpb delay (nal/vcl)syntax in bp sei - */ + * specifies the length, in bits for initial cpb delay (nal/vcl)syntax in bp sei + */ UWORD8 u1_initial_cpb_removal_delay_length_minus1; /** - * specifies the length, in bits for the cpb delay syntax in pt_sei - */ + * specifies the length, in bits for the cpb delay syntax in pt_sei + */ UWORD8 u1_cpb_removal_delay_length_minus1; /** - * specifies the length, in bits, of the pic_dpb_output_delay syntax element in the pt SEI message - */ + * specifies the length, in bits, of the pic_dpb_output_delay syntax element in the pt SEI message + */ UWORD8 u1_dpb_output_delay_length_minus1; /** @@ -628,104 +626,104 @@ typedef struct typedef struct { /** - * indicates the presence of aspect_ratio - */ + * indicates the presence of aspect_ratio + */ UWORD8 u1_aspect_ratio_info_present_flag; /** - * specifies the aspect ratio of the luma samples - */ + * specifies the aspect ratio of the luma samples + */ UWORD8 u1_aspect_ratio_idc; /** - * width of the luma samples. user dependent - */ + * width of the luma samples. user dependent + */ UWORD16 u2_sar_width; /** - * Height of the luma samples. user dependent - */ + * Height of the luma samples. user dependent + */ UWORD16 u2_sar_height; /** - * if 1, specifies that the overscan_appropriate_flag is present - * if 0, the preferred display method for the video signal is unspecified - */ + * if 1, specifies that the overscan_appropriate_flag is present + * if 0, the preferred display method for the video signal is unspecified + */ UWORD8 u1_overscan_info_present_flag; /** - * if 1,indicates that the cropped decoded pictures output - * are suitable for display using overscan - */ + * if 1,indicates that the cropped decoded pictures output + * are suitable for display using overscan + */ UWORD8 u1_overscan_appropriate_flag; /** - * if 1 specifies that video_format, video_full_range_flag and - * colour_description_present_flag are present - */ + * if 1 specifies that video_format, video_full_range_flag and + * colour_description_present_flag are present + */ UWORD8 u1_video_signal_type_present_flag; /** - * pal, secam, ntsc, ... - */ + * pal, secam, ntsc, ... + */ UWORD8 u1_video_format; /** - * indicates the black level and range of the luma and chroma signals - */ + * indicates the black level and range of the luma and chroma signals + */ UWORD8 u1_video_full_range_flag; /** - * if 1,to 1 specifies that colour_primaries, transfer_characteristics - * and matrix_coefficients are present - */ + * if 1,to 1 specifies that colour_primaries, transfer_characteristics + * and matrix_coefficients are present + */ UWORD8 u1_colour_description_present_flag; /** - * indicates the chromaticity coordinates of the source primaries - */ + * indicates the chromaticity coordinates of the source primaries + */ UWORD8 u1_colour_primaries; /** - * indicates the opto-electronic transfer characteristic of the source picture - */ + * indicates the opto-electronic transfer characteristic of the source picture + */ UWORD8 u1_transfer_characteristics; /** - * the matrix coefficients used in deriving luma and chroma signals - * from the green, blue, and red primaries - */ + * the matrix coefficients used in deriving luma and chroma signals + * from the green, blue, and red primaries + */ UWORD8 u1_matrix_coefficients; /** - * if 1, specifies that chroma_sample_loc_type_top_field and - * chroma_sample_loc_type_bottom_field are present - */ + * if 1, specifies that chroma_sample_loc_type_top_field and + * chroma_sample_loc_type_bottom_field are present + */ UWORD8 u1_chroma_loc_info_present_flag; /** - * location of chroma samples - */ + * location of chroma samples + */ UWORD8 u1_chroma_sample_loc_type_top_field; UWORD8 u1_chroma_sample_loc_type_bottom_field; /** - * Indicates the presence of the - * num_units_in_ticks, time_scale flag - */ + * Indicates the presence of the + * num_units_in_ticks, time_scale flag + */ UWORD8 u1_vui_timing_info_present_flag; /** - * Number of units that - * correspond to one increment of the - * clock. Indicates the resolution - */ + * Number of units that + * correspond to one increment of the + * clock. Indicates the resolution + */ UWORD32 u4_vui_num_units_in_tick; /** - * The number of time units that pass in one second - */ + * The number of time units that pass in one second + */ UWORD32 u4_vui_time_scale; /** @@ -764,37 +762,37 @@ typedef struct UWORD8 u1_pic_struct_present_flag; /** - * 1, specifies that the following cvs bitstream restriction parameters are present - */ + * 1, specifies that the following cvs bitstream restriction parameters are present + */ UWORD8 u1_bitstream_restriction_flag; /** - * if 0, indicates that no pel outside the pic boundaries and - * no sub-pels derived using pels outside the pic boundaries is used for inter prediction - */ + * if 0, indicates that no pel outside the pic boundaries and + * no sub-pels derived using pels outside the pic boundaries is used for inter prediction + */ UWORD8 u1_motion_vectors_over_pic_boundaries_flag; /** - * Indicates a number of bytes not exceeded by the sum of the sizes of the VCL NAL units - * associated with any coded picture - */ + * Indicates a number of bytes not exceeded by the sum of the sizes of the VCL NAL units + * associated with any coded picture + */ UWORD8 u1_max_bytes_per_pic_denom; /** - * Indicates an upper bound for the number of bits of coding_unit() data - */ + * Indicates an upper bound for the number of bits of coding_unit() data + */ UWORD8 u1_max_bits_per_mb_denom; /** - * Indicate the maximum absolute value of a decoded horizontal MV component - * in quarter-pel luma units - */ + * Indicate the maximum absolute value of a decoded horizontal MV component + * in quarter-pel luma units + */ UWORD8 u1_log2_max_mv_length_horizontal; /** - * Indicate the maximum absolute value of a decoded vertical MV component - * in quarter-pel luma units - */ + * Indicate the maximum absolute value of a decoded vertical MV component + * in quarter-pel luma units + */ UWORD8 u1_log2_max_mv_length_vertical; /** @@ -805,7 +803,7 @@ typedef struct /** * specifies required size of the HRD DPB in units of frame buffers. */ - UWORD8 u1_max_dec_frame_buffering; + UWORD8 u1_max_dec_frame_buffering; } vui_t; @@ -820,16 +818,24 @@ typedef struct */ UWORD8 u1_profile_idc; - /** constraint_set0_flag */ + /** + * constraint_set0_flag + */ UWORD8 u1_constraint_set0_flag; - /** constraint_set1_flag */ + /** + * constraint_set1_flag + */ UWORD8 u1_constraint_set1_flag; - /** constraint_set2_flag */ + /** + * constraint_set2_flag + */ UWORD8 u1_constraint_set2_flag; - /** constraint_set3_flag */ + /** + * constraint_set3_flag + */ UWORD8 u1_constraint_set3_flag; /** @@ -1180,7 +1186,9 @@ typedef struct */ typedef struct { - /* memory management control operation command */ + /* + * memory management control operation command + */ UWORD8 u1_memory_management_control_operation; /* @@ -1213,10 +1221,14 @@ typedef struct */ typedef struct { - /* ref_pic_list_modification_flag_l0 */ + /* + * ref_pic_list_modification_flag_l0 + */ WORD8 i1_ref_pic_list_modification_flag_l0; - /* Modification required in list0 */ + /* + * Modification required in list0 + */ WORD8 i1_modification_of_pic_nums_idc_l0[MAX_MODICATION_IDC]; /* @@ -1232,10 +1244,14 @@ typedef struct */ UWORD8 u1_long_term_pic_num_l0[MAX_MODICATION_IDC]; - /* ref_pic_list_modification_flag_l1 */ + /* + * ref_pic_list_modification_flag_l1 + */ WORD8 i1_ref_pic_list_modification_flag_l1; - /* Modification required in list1 */ + /* + * Modification required in list1 + */ WORD8 i1_modification_of_pic_nums_idc_l1[MAX_MODICATION_IDC]; /* @@ -1471,60 +1487,92 @@ typedef struct */ WORD32 i4_abs_bottom_pic_order_cnt; - /** Flag signaling if the current slice is ref slice */ + /** + * Flag signaling if the current slice is ref slice + */ UWORD8 i1_nal_ref_idc; - /** Flag to indicate if the current slice is MBAFF Frame */ + /** + * Flag to indicate if the current slice is MBAFF Frame + */ UWORD8 u1_mbaff_frame_flag; - /** luma_log2_weight_denom */ + /** + * luma_log2_weight_denom + */ UWORD8 u1_luma_log2_weight_denom; - /** chroma_log2_weight_denom */ + /** + * chroma_log2_weight_denom + */ UWORD8 u1_chroma_log2_weight_denom; - /** luma_weight_l0_flag */ + /** + * luma_weight_l0_flag + */ UWORD8 au1_luma_weight_l0_flag[MAX_DPB_SIZE]; - /** luma_weight_l0 : (-128, 127 )is the range of weights - * when weighted pred is enabled, 128 is default value */ + /** + * luma_weight_l0 : (-128, 127 )is the range of weights + * when weighted pred is enabled, 128 is default value + */ WORD16 ai2_luma_weight_l0[MAX_DPB_SIZE]; - /** luma_offset_l0 : (-128, 127 )is the range of offset - * when weighted pred is enabled, 0 is default value */ + /** + * luma_offset_l0 : (-128, 127 )is the range of offset + * when weighted pred is enabled, 0 is default value + */ WORD8 ai1_luma_offset_l0[MAX_DPB_SIZE]; - /** chroma_weight_l0_flag */ + /** + * chroma_weight_l0_flag + */ UWORD8 au1_chroma_weight_l0_flag[MAX_DPB_SIZE]; - /** chroma_weight_l0 : (-128, 127 )is the range of weights - * when weighted pred is enabled, 128 is default value*/ + /** + * chroma_weight_l0 : (-128, 127 )is the range of weights + * when weighted pred is enabled, 128 is default value + */ WORD16 ai2_chroma_weight_l0[MAX_DPB_SIZE][2]; - /** chroma_offset_l0 : (-128, 127 )is the range of offset - * when weighted pred is enabled, 0 is default value*/ + /** + * chroma_offset_l0 : (-128, 127 )is the range of offset + * when weighted pred is enabled, 0 is default value + */ WORD8 ai1_chroma_offset_l0[MAX_DPB_SIZE][2]; - /** luma_weight_l0_flag */ + /** + * luma_weight_l0_flag + */ UWORD8 au1_luma_weight_l1_flag[MAX_DPB_SIZE]; - /** luma_weight_l1 : (-128, 127 )is the range of weights - * when weighted pred is enabled, 128 is default value */ + /** + * luma_weight_l1 : (-128, 127 )is the range of weights + * when weighted pred is enabled, 128 is default value + */ WORD16 ai2_luma_weight_l1[MAX_DPB_SIZE]; - /** luma_offset_l1 : (-128, 127 )is the range of offset - * when weighted pred is enabled, 0 is default value */ + /** + * luma_offset_l1 : (-128, 127 )is the range of offset + * when weighted pred is enabled, 0 is default value + */ WORD8 ai1_luma_offset_l1[MAX_DPB_SIZE]; - /** chroma_weight_l1_flag */ + /** + * chroma_weight_l1_flag + */ UWORD8 au1_chroma_weight_l1_flag[MAX_DPB_SIZE]; - /** chroma_weight_l1 : (-128, 127 )is the range of weights - * when weighted pred is enabled, 128 is default value */ + /** + * chroma_weight_l1 : (-128, 127 )is the range of weights + * when weighted pred is enabled, 128 is default value + */ WORD16 ai2_chroma_weight_l1[MAX_DPB_SIZE][2]; - /** chroma_offset_l1 :(-128, 127 )is the range of offset - * when weighted pred is enabled, 0 is default value */ + /** + * chroma_offset_l1 :(-128, 127 )is the range of offset + * when weighted pred is enabled, 0 is default value + */ WORD8 ai1_chroma_offset_l1[MAX_DPB_SIZE][2]; }slice_header_t; diff --git a/common/ih264_trans_data.c b/common/ih264_trans_data.c index a1231e6f..4a1a01f8 100644 --- a/common/ih264_trans_data.c +++ b/common/ih264_trans_data.c @@ -17,67 +17,35 @@ ***************************************************************************** * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore */ + /** - ******************************************************************************* - * @file - * ih264_trans_data.c - * - * @brief - * Contains definition of global variables for H264 encoder - * - * @author - * Ittiam - * - * @remarks - * - ******************************************************************************* - */ +******************************************************************************* +* @file +* ih264_trans_data.c +* +* @brief +* Contains definition of global variables for H264 encoder +* +* @author +* ittiam +* +* @remarks +* +******************************************************************************* +*/ + +/*****************************************************************************/ +/* File Includes */ +/*****************************************************************************/ +/* User Include Files */ #include "ih264_typedefs.h" #include "ih264_trans_data.h" /*****************************************************************************/ -/* Extern global definitions */ +/* Global definitions */ /*****************************************************************************/ -/* - * Since we don't have a division operation in neon - * we will multiply by LCM of 16,6,10 and scale accordingly - * so care that to get the actual transform you need to divide by LCM - * LCM = 240 - */ - -const UWORD16 g_scal_coff_h264_4x4[16] ={ - 15,40,40,40, - 40,24,40,24, - 15,40,40,15, - 40,24,40,24}; - - - -const UWORD16 g_scal_coff_h264_8x8[16]= - { - 16, 15, 20, 15, - 15, 14, 19, 14, - 20, 19, 25, 19, - 15, 14, 19, 14 - }; -/* - * The scaling is by an 8x8 matrix, but due its 4x4 symmetry we can use - * a 4x4 matrix for scaling - * now since divide is to be avoided, we will compute 1/ values and scale it up - * to preserve information since our data is max 10 bit +1 sign bit we can shift a maximum of 21 bits up - * hence multiply the matrix as such -{16.000 15.059 20.227 15.059 -15.059 14.173 19.051 14.173 -20.227 19.051 25.600 19.051 -15.059 14.173 19.051 14.173}; -{512, 544, 405, 544, -544, 578, 430, 578, -405, 430, 320, 430, -544, 578, 430, 578};*/ - - /** ****************************************************************************** * @brief Scale Table for quantizing 4x4 subblock. To quantize a given 4x4 DCT @@ -123,7 +91,6 @@ const UWORD16 gu2_quant_scale_matrix_4x4[96] = 4559, 2893, 4559, 2893, 7282, 4559, 7282, 4559, 4559, 2893, 4559, 2893, - }; /** @@ -148,19 +115,18 @@ const UWORD16 gu2_quant_scale_matrix_4x4[96] = 174762, 349525, 699050, 1398101, 2796202, } - * * round factor constructed by setting a = 0.49 - *{ - 16056, 32112, 64225, - 128450, 256901, 513802, - 1027604, 2055208, 4110417, - }; - - * round factor constructed by setting a = 0.5 + { + 16056, 32112, 64225, + 128450, 256901, 513802, + 1027604, 2055208, 4110417, + } + * round factor constructed by setting a = 0.5 + { 16384, 32768, 65536, 131072, 262144, 524288, - 1048576, 2097152, 4194304, - + 1048576, 2097152, 4194304, + } ****************************************************************************** */ const UWORD32 gu4_forward_quant_round_factor_4x4[9] = @@ -170,8 +136,6 @@ const UWORD32 gu4_forward_quant_round_factor_4x4[9] = 2796202, }; - - /** ****************************************************************************** * @brief Threshold Table. Quantizing the given DCT coefficient is done only if @@ -286,17 +250,13 @@ const UWORD16 gu2_quant_scale_matrix_8x8 [384] = 6830, 6428, 8640, 6428, 6830, 6428, 8640, 6428, 9118, 8640, 11570, 8640, 9118, 8640, 11570, 8640, 6830, 6428, 8640, 6428, 6830, 6428, 8640, 6428, - }; - /** ****************************************************************************** * @brief Specification of QPc as a function of qPi - * * input : qp luma * output : qp chroma. - * * @remarks Refer Table 8-15 of h264 specification. ****************************************************************************** */ diff --git a/common/ih264_trans_data.h b/common/ih264_trans_data.h index dc77ae74..8c60668e 100644 --- a/common/ih264_trans_data.h +++ b/common/ih264_trans_data.h @@ -17,109 +17,40 @@ ***************************************************************************** * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore */ + /** - ******************************************************************************* - * @file - * ih264_trans_data.h - * - * @brief - * Contains declaration of global variables for H264 transform , qnat and inverse quant - * - * @author - * Ittiam - * - * @remarks - * - ******************************************************************************* - */ -#ifndef IH264_GLOBAL_DATA_H_ -#define IH264_GLOBAL_DATA_H_ +******************************************************************************* +* @file +* ih264_trans_data.h +* +* @brief +* Contains declaration of global variables for H264 transform, qunat and +* inverse quant +* +* @author +* ittiam +* +* @remarks +* none +* +******************************************************************************* +*/ + +#ifndef _IH264_TRANS_DATA_H_ +#define _IH264_TRANS_DATA_H_ /*****************************************************************************/ /* Extern global declarations */ /*****************************************************************************/ -/* Scaling matrices for h264 quantization */ -extern const UWORD16 g_scal_coff_h264_4x4[16]; -extern const UWORD16 g_scal_coff_h264_8x8[16]; - - -/** - ****************************************************************************** - * @brief Scale Table for quantizing 4x4 subblock. To quantize a given 4x4 DCT - * transformed block, the coefficient at index location (i,j) is scaled by one of - * the constants in this table and right shift the result by (QP_BITS_h264_4x4 + - * floor(qp/6)), here qp is the quantization parameter used to quantize the mb. - * - * input : qp%6, index location (i,j) - * output : scale constant. - * - * @remarks 16 constants for each index position of the subblock and 6 for each - * qp%6 in the range 0-5 inclusive. - ****************************************************************************** - */ extern const UWORD16 gu2_quant_scale_matrix_4x4[96]; -/** - ****************************************************************************** - * @brief Round Factor for quantizing subblock. While quantizing a given 4x4 DCT - * transformed block, the coefficient at index location (i,j) is scaled by one of - * the constants in the table gu2_forward_quant_scalar_4x4 and then right shift - * the result by (QP_BITS_h264_4x4 + floor(qp/6)). - * Before right shifting a round factor is added. - * The round factor can be any value [a * (1 << (QP_BITS_h264_4x4 + floor(qp/6)))] - * for 'a' lies in the range 0-0.5. - * Here qp is the quantization parameter used to quantize the mb. - * - * input : qp/6 - * output : round factor. - * - * @remarks The round factor is constructed by setting a = 1/3 - ****************************************************************************** - */ extern const UWORD32 gu4_forward_quant_round_factor_4x4[9]; -/** - ****************************************************************************** - * @brief Threshold Table. Quantizing the given DCT coefficient is done only if - * it exceeds the threshold value presented in this table. - * - * input : qp/6, qp%6, index location (i,j) - * output : Threshold constant. - * - * @remarks 16 constants for each index position of the subblock and 6 for each - * qp%6 in the range 0-5 inclusive and 9 for each qp/6 in the range 0-51. - ****************************************************************************** - */ extern const UWORD16 gu2_forward_quant_threshold_4x4[96]; -/** - ****************************************************************************** - * @brief Scale Table for quantizing 8x8 subblock. To quantize a given 8x8 DCT - * transformed block, the coefficient at index location (i,j) is scaled by one of - * the constants in this table and right shift the result by (QP_BITS_h264_8x8 + - * floor(qp/6)), here qp is the quantization parameter used to quantize the mb. - * - * input : qp%6, index location (i,j) - * output : scale constant. - * - * @remarks 64 constants for each index position of the subblock and 6 for each - * qp%6 in the range 0-5 inclusive. - ****************************************************************************** - */ extern const UWORD16 gu2_quant_scale_matrix_8x8 [384]; -/** - ****************************************************************************** - * @brief Specification of QPc as a function of qPi - * - * input : qp luma - * output : qp chroma. - * - * @remarks Refer Table 8-15 of h264 specification. - ****************************************************************************** - */ extern const UWORD8 gu1_qpc_fqpi[52]; - -#endif /* IH264_GLOBAL_DATA_H_ */ +#endif /* _IH264_TRANS_DATA_H_ */ diff --git a/common/ih264_trans_macros.h b/common/ih264_trans_macros.h index 79e3aa37..7325d8d0 100644 --- a/common/ih264_trans_macros.h +++ b/common/ih264_trans_macros.h @@ -17,6 +17,7 @@ ***************************************************************************** * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore */ + /** ******************************************************************************* * @file @@ -27,16 +28,16 @@ * quantization * * @author -* Ittiam +* ittiam * * @remark -* None +* none * ******************************************************************************* */ -#ifndef IH264_TRANS_MACROS_H_ -#define IH264_TRANS_MACROS_H_ +#ifndef _IH264_TRANS_MACROS_H_ +#define _IH264_TRANS_MACROS_H_ /*****************************************************************************/ /* Function Macros */ @@ -124,4 +125,4 @@ shft+= add_f, \ shft = shft>>w) -#endif /* IH264_TRANS_MACROS_H_ */ +#endif /* _IH264_TRANS_MACROS_H_ */ diff --git a/common/ih264_trans_quant_itrans_iquant.h b/common/ih264_trans_quant_itrans_iquant.h index 83551aad..f6293821 100644 --- a/common/ih264_trans_quant_itrans_iquant.h +++ b/common/ih264_trans_quant_itrans_iquant.h @@ -17,56 +17,56 @@ ***************************************************************************** * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore */ + /** - ******************************************************************************* - * @file - * ih264_trans_quant.h - * - * @brief - * Contains declarations for forward and inverse transform paths for H264 - * - * @author - * Ittiam - * - * @remarks - * - ******************************************************************************* - */ +******************************************************************************* +* @file +* ih264_trans_quant_itrans_iquant.h +* +* @brief +* Contains declarations for forward and inverse transform / quant functions +* for H264 +* +* @author +* ittiam +* +* @remarks +* none +* +******************************************************************************* +*/ -#ifndef IH264_TRANS_QUANT_H_ -#define IH264_TRANS_QUANT_H_ +#ifndef _IH264_TRANS_QUANT_ITRANS_IQUANT_H_ +#define _IH264_TRANS_QUANT_ITRANS_IQUANT_H_ /*****************************************************************************/ /* Extern Function Declarations */ /*****************************************************************************/ - typedef void ih264_resi_trans_dctrans_quant_ft(UWORD8*pu1_src, - UWORD8 *pu1_pred, - WORD16 *pi2_out, - WORD32 src_strd, - WORD32 pred_strd, - WORD32 dst_strd, - const UWORD16 *pu2_scale_mat, - const UWORD16 *pu2_thresh_mat, - UWORD32 u4_qbit, - UWORD32 u4_round_fact, - UWORD8 *pu1_nnz); + UWORD8 *pu1_pred, + WORD16 *pi2_out, + WORD32 src_strd, + WORD32 pred_strd, + WORD32 dst_strd, + const UWORD16 *pu2_scale_mat, + const UWORD16 *pu2_thresh_mat, + UWORD32 u4_qbit, + UWORD32 u4_round_fact, + UWORD8 *pu1_nnz); typedef void ih264_idctrans_iquant_itrans_recon_ft(WORD16 *pi2_src, - UWORD8 *pu1_pred, - UWORD8 *pu1_out, - WORD32 src_strd, - WORD32 pred_strd, - WORD32 out_strd, - const UWORD16 *pu2_iscale_mat, - const UWORD16 *pu2_weigh_mat, - UWORD32 qp_div, - UWORD32 pi4_cntrl, - WORD32 *pi4_tmp); - + UWORD8 *pu1_pred, + UWORD8 *pu1_out, + WORD32 src_strd, + WORD32 pred_strd, + WORD32 out_strd, + const UWORD16 *pu2_iscale_mat, + const UWORD16 *pu2_weigh_mat, + UWORD32 qp_div, + UWORD32 pi4_cntrl, + WORD32 *pi4_tmp); -/*Function prototype declarations*/ typedef void ih264_resi_trans_quant_ft(UWORD8*pu1_src, UWORD8 *pu1_pred, WORD16 *pi2_out, @@ -166,6 +166,7 @@ typedef void ih264_hadamard_quant_ft(WORD16 *pi2_src, WORD16 *pi2_dst, const UWORD16 *pu2_threshold_matrix, UWORD32 u4_qbits, UWORD32 u4_round_factor,UWORD8 *pu1_nnz); +/* C Declarations */ ih264_resi_trans_quant_ft ih264_resi_trans_quant_4x4; ih264_resi_trans_quant_ft ih264_resi_trans_quant_chroma_4x4; ih264_resi_trans_quant_ft ih264_resi_trans_quant_8x8; @@ -180,7 +181,7 @@ ih264_ihadamard_scaling_ft ih264_ihadamard_scaling_2x2_uv; ih264_hadamard_quant_ft ih264_hadamard_quant_4x4; ih264_hadamard_quant_ft ih264_hadamard_quant_2x2_uv; -/*A9 Declarations*/ +/* A9 Declarations */ ih264_resi_trans_quant_ft ih264_resi_trans_quant_4x4_a9; ih264_resi_trans_quant_ft ih264_resi_trans_quant_chroma_4x4_a9; ih264_iquant_itrans_recon_ft ih264_iquant_itrans_recon_4x4_a9; @@ -198,7 +199,7 @@ ih264_ihadamard_scaling_ft ih264_ihadamard_scaling_2x2_uv_a9; ih264_hadamard_quant_ft ih264_hadamard_quant_4x4_a9; ih264_hadamard_quant_ft ih264_hadamard_quant_2x2_uv_a9; -/*Av8 Declarations*/ +/* AV8 Declarations */ ih264_resi_trans_quant_ft ih264_resi_trans_quant_4x4_av8; ih264_resi_trans_quant_ft ih264_resi_trans_quant_chroma_4x4_av8; ih264_iquant_itrans_recon_ft ih264_iquant_itrans_recon_4x4_av8; @@ -212,7 +213,7 @@ ih264_ihadamard_scaling_ft ih264_ihadamard_scaling_2x2_uv_av8; ih264_hadamard_quant_ft ih264_hadamard_quant_4x4_av8; ih264_hadamard_quant_ft ih264_hadamard_quant_2x2_uv_av8; -/*SSSE3 Declarations*/ +/* SSSE3 Declarations */ ih264_iquant_itrans_recon_ft ih264_iquant_itrans_recon_4x4_ssse3; ih264_iquant_itrans_recon_ft ih264_iquant_itrans_recon_8x8_ssse3; ih264_iquant_itrans_recon_ft ih264_iquant_itrans_recon_4x4_dc_ssse3; @@ -220,7 +221,8 @@ ih264_iquant_itrans_recon_ft ih264_iquant_itrans_recon_8x8_dc_ssse3; ih264_iquant_itrans_recon_chroma_ft ih264_iquant_itrans_recon_chroma_4x4_dc_ssse3; ih264_ihadamard_scaling_ft ih264_ihadamard_scaling_4x4_ssse3; ih264_ihadamard_scaling_ft ih264_ihadamard_scaling_2x2_uv_ssse3; -/*SSSE42 Declarations*/ + +/* SSSE42 Declarations */ ih264_resi_trans_quant_ft ih264_resi_trans_quant_4x4_sse42; ih264_resi_trans_quant_ft ih264_resi_trans_quant_chroma_4x4_sse42; ih264_iquant_itrans_recon_ft ih264_iquant_itrans_recon_4x4_sse42; @@ -229,4 +231,4 @@ ih264_ihadamard_scaling_ft ih264_ihadamard_scaling_4x4_sse42; ih264_hadamard_quant_ft ih264_hadamard_quant_4x4_sse42; ih264_hadamard_quant_ft ih264_hadamard_quant_2x2_uv_sse42; -#endif /* IH264_TRANS_QUANT_H_ */ +#endif /* _IH264_TRANS_QUANT_ITRANS_IQUANT_H_ */ diff --git a/common/ih264_typedefs.h b/common/ih264_typedefs.h index 29138c6b..4456649a 100644 --- a/common/ih264_typedefs.h +++ b/common/ih264_typedefs.h @@ -17,19 +17,20 @@ ***************************************************************************** * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore */ + /** ******************************************************************************* * @file * ih264_typedefs.h * * @brief -* Type definitions used in the code +* Type definitions used in the software * * @author -* Ittiam +* ittiam * * @remarks -* None +* none * ******************************************************************************* */ @@ -61,4 +62,4 @@ typedef int64_t WORD64; typedef char CHAR; typedef double DOUBLE; -#endif /* _IH264_TYPEDEFS_H_ */ +#endif /* _IH264_TYPEDEFS_H_ */ diff --git a/common/ih264_weighted_pred.c b/common/ih264_weighted_pred.c index d5d73f2f..bc46bd64 100644 --- a/common/ih264_weighted_pred.c +++ b/common/ih264_weighted_pred.c @@ -17,71 +17,88 @@ ***************************************************************************** * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore */ -/*****************************************************************************/ -/* */ -/* File Name : ih264_weighted_pred.c */ -/* */ -/* Description : Contains function definitions for weighted */ -/* prediction functions */ -/* */ -/* List of Functions : ih264_default_weighted_pred_luma() */ -/* ih264_default_weighted_pred_chroma() */ -/* ih264_weighted_pred_luma() */ -/* ih264_weighted_pred_chroma() */ -/* ih264_weighted_bipred_luma() */ -/* ih264_weighted_bipred_chroma() */ -/* */ -/* Issues / Problems : None */ -/* */ -/* Revision History : */ -/* */ -/* DD MM YYYY Author(s) Changes */ -/* 07 01 2015 Kaushik Initial version */ -/* Senthoor */ -/* */ -/*****************************************************************************/ + +/** +******************************************************************************* +* @file +* ih264_weighted_pred.c +* +* @brief +* Contains function definitions for weighted prediction functions +* +* @author +* ittiam +* +* @par List of Functions: +* - ih264_default_weighted_pred_luma +* - ih264_default_weighted_pred_chroma +* - ih264_weighted_pred_luma +* - ih264_weighted_pred_chroma +* - ih264_weighted_bipred_luma +* - ih264_weighted_bipred_chroma +* +* @remarks +* +******************************************************************************* +*/ + /*****************************************************************************/ /* File Includes */ /*****************************************************************************/ -/* User include files */ +/* User Include Files */ #include "ih264_typedefs.h" #include "ih264_macros.h" -#include "ih264_platform_macros.h" #include "ih264_weighted_pred.h" +#include "ih264_platform_macros.h" + /*****************************************************************************/ -/* Function definitions . */ -/*****************************************************************************/ -/*****************************************************************************/ -/* */ -/* Function Name : ih264_default_weighted_pred_luma */ -/* */ -/* Description : This function performs the default weighted prediction */ -/* as described in sec 8.4.2.3.1 titled "Default weighted */ -/* sample prediction process" for luma. The function gets */ -/* two ht x wd blocks, calculates their rounded-average and */ -/* stores it in the destination block. (ht,wd) can be */ -/* (4,4), (8,4), (4,8), (8,8), (16,8), (8,16) or (16,16). */ -/* */ -/* Inputs : puc_src1 - Pointer to source 1 */ -/* puc_src2 - Pointer to source 2 */ -/* puc_dst - Pointer to destination */ -/* src_strd1 - stride for source 1 */ -/* src_strd1 - stride for source 2 */ -/* dst_strd - stride for destination */ -/* ht - height of the block */ -/* wd - width of the block */ -/* */ -/* Issues : None */ -/* */ -/* Revision History: */ -/* */ -/* DD MM YYYY Author(s) Changes */ -/* 07 01 2015 Kaushik Initial Version */ -/* Senthoor */ -/* */ +/* Function definitions */ /*****************************************************************************/ + +/** +******************************************************************************* +* +* @brief default weighted prediction luma. +* +* @par Description +* This function performs the default weighted prediction as described in +* sec 8.4.2.3.1 titled "Default weighted sample prediction process" for luma. +* The function gets two ht x wd blocks, calculates their rounded-average and +* stores it in the destination block. (ht,wd) can be (4,4), (8,4), (4,8), +* (8,8), (16,8), (8,16) or (16,16) +* +* @param[in] pu1_src1 +* Pointer to source 1 +* +* @param[in] pu1_src2 +* Pointer to source 2 +* +* @param[in] pu1_dst +* Pointer to destination +* +* @param[in] src_strd1 +* stride for source 1 +* +* @param[in] src_strd2 +* stride for source 2 +* +* @param[in] dst_strd +* stride for destination +* +* @param[in] ht +* height of the block +* +* @param[in] wd +* width of the block +* +* @returns none +* +* @remarks none +* +******************************************************************************* +*/ void ih264_default_weighted_pred_luma(UWORD8 *pu1_src1, UWORD8 *pu1_src2, UWORD8 *pu1_dst, @@ -108,35 +125,48 @@ void ih264_default_weighted_pred_luma(UWORD8 *pu1_src1, } } -/*****************************************************************************/ -/* */ -/* Function Name : ih264_default_weighted_pred_chroma */ -/* */ -/* Description : This function performs the default weighted prediction */ -/* as described in sec 8.4.2.3.1 titled "Default weighted */ -/* sample prediction process" for chroma. The function gets */ -/* two ht x wd blocks, calculates their rounded-average and */ -/* stores it in the destination block. (ht,wd) can be */ -/* (2,2), (4,2) , (2,4), (4,4), (8,4), (4,8) or (8,8). */ -/* */ -/* Inputs : puc_src1 - Pointer to source 1 */ -/* puc_src2 - Pointer to source 2 */ -/* puc_dst - Pointer to destination */ -/* src_strd1 - stride for source 1 */ -/* src_strd1 - stride for source 2 */ -/* dst_strd - stride for destination */ -/* ht - height of the block */ -/* wd - width of the block */ -/* */ -/* Issues : None */ -/* */ -/* Revision History: */ -/* */ -/* DD MM YYYY Author(s) Changes */ -/* 07 01 2015 Kaushik Initial Version */ -/* Senthoor */ -/* */ -/*****************************************************************************/ +/** +******************************************************************************* +* +* @brief default weighted prediction chroma. +* +* @par Description +* This function performs the default weighted prediction as described in +* sec 8.4.2.3.1 titled "Default weighted sample prediction process" for chroma. +* The function gets two ht x wd blocks, calculates their rounded-average and +* stores it in the destination block. (ht,wd) can be (2,2), (4,2), (2,4), +* (4,4), (8,4), (4,8) or (8,8). +* +* @param[in] pu1_src1 +* Pointer to source 1 +* +* @param[in] pu1_src2 +* Pointer to source 2 +* +* @param[in] pu1_dst +* Pointer to destination +* +* @param[in] src_strd1 +* stride for source 1 +* +* @param[in] src_strd2 +* stride for source 2 +* +* @param[in] dst_strd +* stride for destination +* +* @param[in] ht +* height of the block +* +* @param[in] wd +* width of the block +* +* @returns none +* +* @remarks none +* +******************************************************************************* +*/ void ih264_default_weighted_pred_chroma(UWORD8 *pu1_src1, UWORD8 *pu1_src2, UWORD8 *pu1_dst, @@ -165,37 +195,51 @@ void ih264_default_weighted_pred_chroma(UWORD8 *pu1_src1, } } -/*****************************************************************************/ -/* */ -/* Function Name : ih264_weighted_pred_luma */ -/* */ -/* Description : This function performs the weighted prediction as */ -/* described in sec 8.4.2.3.2 titled "Weighted sample */ -/* prediction process" for luma. The function gets one */ -/* ht x wd block, weights it, rounds it off, offsets it, */ -/* saturates it to unsigned 8-bit and stores it in the */ -/* destination block. (ht,wd) can be (4,4), (8,4), (4,8), */ -/* (8,8), (16,8), (8,16) or (16,16). */ -/* */ -/* Inputs : puc_src - Pointer to source */ -/* puc_dst - Pointer to destination */ -/* src_strd - stride for source */ -/* dst_strd - stride for destination */ -/* log_wd - number of bits to be rounded off */ -/* wt - weight value */ -/* ofst - offset value */ -/* ht - height of the block */ -/* wd - width of the block */ -/* */ -/* Issues : None */ -/* */ -/* Revision History: */ -/* */ -/* DD MM YYYY Author(s) Changes */ -/* 07 01 2015 Kaushik Initial Version */ -/* Senthoor */ -/* */ -/*****************************************************************************/ +/** +******************************************************************************* +* +* @brief weighted prediction luma. +* +* @par Description +* This function performs the weighted prediction as described in +* sec 8.4.2.3.2 titled "weighted sample prediction process" for luma. +* The function gets one ht x wd block, weights it, rounds it off, offsets it, +* saturates it to unsigned 8-bit and stores it in the destination block. +* (ht,wd) can be (4,4), (8,4), (4,8), (8,8), (16,8), (8,16) or (16,16) +* +* @param[in] pu1_src +* Pointer to source +* +* @param[in] pu1_dst +* Pointer to destination +* +* @param[in] src_strd +* stride for source +* +* @param[in] dst_strd +* stride for destination +* +* @param[in] log_wd +* number of bits to be rounded off +* +* @param[in] wt +* weight value +* +* @param[in] ofst +* offset value +* +* @param[in] ht +* height of the block +* +* @param[in] wd +* width of the block +* +* @returns none +* +* @remarks none +* +******************************************************************************* +*/ void ih264_weighted_pred_luma(UWORD8 *pu1_src, UWORD8 *pu1_dst, WORD32 src_strd, @@ -239,37 +283,51 @@ void ih264_weighted_pred_luma(UWORD8 *pu1_src, } } -/*****************************************************************************/ -/* */ -/* Function Name : ih264_weighted_pred_chroma */ -/* */ -/* Description : This function performs the weighted prediction as */ -/* described in sec 8.4.2.3.2 titled "Weighted sample */ -/* prediction process" for chroma. The function gets one */ -/* ht x wd block, weights it, rounds it off, offsets it, */ -/* saturates it to unsigned 8-bit and stores it in the */ -/* destination block. (ht,wd) can be (2,2), (4,2), (2,4), */ -/* (4,4), (8,4), (4,8) or (8,8). */ -/* */ -/* Inputs : puc_src - Pointer to source */ -/* puc_dst - Pointer to destination */ -/* src_strd - stride for source */ -/* dst_strd - stride for destination */ -/* log_wd - number of bits to be rounded off */ -/* wt - weight values for u and v */ -/* ofst - offset values for u and v */ -/* ht - height of the block */ -/* wd - width of the block */ -/* */ -/* Issues : None */ -/* */ -/* Revision History: */ -/* */ -/* DD MM YYYY Author(s) Changes */ -/* 07 01 2015 Kaushik Initial Version */ -/* Senthoor */ -/* */ -/*****************************************************************************/ +/** +******************************************************************************* +* +* @brief weighted prediction chroma. +* +* @par Description +* This function performs the weighted prediction as described in +* sec 8.4.2.3.2 titled "weighted sample prediction process" for chroma. +* The function gets one ht x wd block, weights it, rounds it off, offsets it, +* saturates it to unsigned 8-bit and stores it in the destination block. +* (ht,wd) can be (2,2), (4,2), (2,4), (4,4), (8,4), (4,8) or (8,8). +* +* @param[in] pu1_src +* Pointer to source +* +* @param[in] pu1_dst +* Pointer to destination +* +* @param[in] src_strd +* stride for source +* +* @param[in] dst_strd +* stride for destination +* +* @param[in] log_wd +* number of bits to be rounded off +* +* @param[in] wt +* weight values for u and v +* +* @param[in] ofst +* offset values for u and v +* +* @param[in] ht +* height of the block +* +* @param[in] wd +* width of the block +* +* @returns none +* +* @remarks none +* +******************************************************************************* +*/ void ih264_weighted_pred_chroma(UWORD8 *pu1_src, UWORD8 *pu1_dst, WORD32 src_strd, @@ -328,41 +386,64 @@ void ih264_weighted_pred_chroma(UWORD8 *pu1_src, } } -/*****************************************************************************/ -/* */ -/* Function Name : ih264_weighted_bi_pred_luma */ -/* */ -/* Description : This function performs the weighted biprediction as */ -/* described in sec 8.4.2.3.2 titled "Weighted sample */ -/* prediction process" for luma. The function gets two */ -/* ht x wd blocks, weights them, adds them, rounds off the */ -/* sum, offsets it, saturates it to unsigned 8-bit and */ -/* stores it in the destination block. (ht,wd) can be */ -/* (4,4), (8,4), (4,8), (8,8), (16,8), (8,16) or (16,16). */ -/* */ -/* Inputs : puc_src1 - Pointer to source 1 */ -/* puc_src2 - Pointer to source 2 */ -/* puc_dst - Pointer to destination */ -/* src_strd1 - stride for source 1 */ -/* src_strd2 - stride for source 2 */ -/* dst_strd2 - stride for destination */ -/* log_wd - number of bits to be rounded off */ -/* wt1 - weight value for source 1 */ -/* wt2 - weight value for source 2 */ -/* ofst1 - offset value for source 1 */ -/* ofst2 - offset value for source 2 */ -/* ht - height of the block */ -/* wd - width of the block */ -/* */ -/* Issues : None */ -/* */ -/* Revision History: */ -/* */ -/* DD MM YYYY Author(s) Changes */ -/* 07 01 2015 Kaushik Initial Version */ -/* Senthoor */ -/* */ -/*****************************************************************************/ +/** +******************************************************************************* +* +* @brief weighted bi-prediction luma. +* +* @par Description +* This function performs the weighted biprediction as described in +* sec 8.4.2.3.2 titled "weighted sample prediction process" for luma. +* The function gets two ht x wd blocks, weights them, adds them, rounds off +* the sum, offsets it, saturates it to unsigned 8-bit and stores it in the +* destination block. (ht,wd) can be (4,4), (8,4), (4,8), (8,8), (16,8), (8,16) +* or (16,16) +* +* @param[in] pu1_src1 +* Pointer to source 1 +* +* @param[in] pu1_src2 +* Pointer to source 2 +* +* @param[in] pu1_dst +* Pointer to destination +* +* @param[in] src_strd1 +* stride for source 1 +* +* @param[in] src_strd2 +* stride for source 2 +* +* @param[in] dst_strd +* stride for destination +* +* @param[in] log_wd +* number of bits to be rounded off +* +* @param[in] wt1 +* weight value for source 1 +* +* @param[in] wt2 +* weight value for source 2 +* +* @param[in] ofst1 +* offset value for source 1 +* +* @param[in] ofst2 +* offset value for source 2 +* +* @param[in] ht +* height of the block +* +* @param[in] wd +* width of the block +* +* @returns none +* +* @remarks none +* +******************************************************************************* +*/ void ih264_weighted_bi_pred_luma(UWORD8 *pu1_src1, UWORD8 *pu1_src2, UWORD8 *pu1_dst, @@ -404,41 +485,64 @@ void ih264_weighted_bi_pred_luma(UWORD8 *pu1_src1, } } -/*****************************************************************************/ -/* */ -/* Function Name : ih264_weighted_bi_pred_chroma */ -/* */ -/* Description : This function performs the weighted biprediction as */ -/* described in sec 8.4.2.3.2 titled "Weighted sample */ -/* prediction process" for chroma. The function gets two */ -/* ht x wd blocks, weights them, adds them, rounds off the */ -/* sum, offsets it, saturates it to unsigned 8-bit and */ -/* stores it in the destination block. (ht,wd) can be */ -/* (2,2), (4,2), (2,4), (4,4), (8,4), (4,8) or (8,8). */ -/* */ -/* Inputs : puc_src1 - Pointer to source 1 */ -/* puc_src2 - Pointer to source 2 */ -/* puc_dst - Pointer to destination */ -/* src_strd1 - stride for source 1 */ -/* src_strd2 - stride for source 2 */ -/* dst_strd2 - stride for destination */ -/* log_wd - number of bits to be rounded off */ -/* wt1 - weight values for u and v in source 1 */ -/* wt2 - weight values for u and v in source 2 */ -/* ofst1 - offset value for u and v in source 1 */ -/* ofst2 - offset value for u and v in source 2 */ -/* ht - height of the block */ -/* wd - width of the block */ -/* */ -/* Issues : None */ -/* */ -/* Revision History: */ -/* */ -/* DD MM YYYY Author(s) Changes */ -/* 07 01 2015 Kaushik Initial Version */ -/* Senthoor */ -/* */ -/*****************************************************************************/ +/** +******************************************************************************* +* +* @brief weighted bi-prediction chroma. +* +* @par Description +* This function performs the weighted biprediction as described in +* sec 8.4.2.3.2 titled "weighted sample prediction process" for chroma. +* The function gets two ht x wd blocks, weights them, adds them, rounds off +* the sum, offsets it, saturates it to unsigned 8-bit and stores it in the +* destination block. (ht,wd) can be (2,2), (4,2), (2,4), (4,4), (8,4), (4,8) +* or (8,8) +* +* @param[in] pu1_src1 +* Pointer to source 1 +* +* @param[in] pu1_src2 +* Pointer to source 2 +* +* @param[in] pu1_dst +* Pointer to destination +* +* @param[in] src_strd1 +* stride for source 1 +* +* @param[in] src_strd2 +* stride for source 2 +* +* @param[in] dst_strd +* stride for destination +* +* @param[in] log_wd +* number of bits to be rounded off +* +* @param[in] wt1 +* weight value for source 1 +* +* @param[in] wt2 +* weight value for source 2 +* +* @param[in] ofst1 +* offset value for source 1 +* +* @param[in] ofst2 +* offset value for source 2 +* +* @param[in] ht +* height of the block +* +* @param[in] wd +* width of the block +* +* @returns none +* +* @remarks none +* +******************************************************************************* +*/ void ih264_weighted_bi_pred_chroma(UWORD8 *pu1_src1, UWORD8 *pu1_src2, UWORD8 *pu1_dst, diff --git a/common/ih264_weighted_pred.h b/common/ih264_weighted_pred.h index f9b93b0f..44a7aa6c 100644 --- a/common/ih264_weighted_pred.h +++ b/common/ih264_weighted_pred.h @@ -27,43 +27,16 @@ * Declarations of functions used for weighted prediction * * @author -* Ittiam -* -* @par List of Functions: -* -ih264_default_weighted_pred_luma -* -ih264_default_weighted_pred_chroma -* -ih264_weighted_pred_luma -* -ih264_weighted_pred_chroma -* -ih264_weighted_bi_pred_luma -* -ih264_weighted_bi_pred_chroma -* -ih264_default_weighted_pred_luma_a9q -* -ih264_default_weighted_pred_chroma_a9q -* -ih264_weighted_pred_luma_a9q -* -ih264_weighted_pred_luma_a9q -* -ih264_weighted_bi_pred_luma_a9q -* -ih264_weighted_bi_pred_chroma_a9q -* -ih264_default_weighted_pred_luma_av8 -* -ih264_default_weighted_pred_chroma_av8 -* -ih264_weighted_pred_luma_av8 -* -ih264_weighted_pred_chroma_av8 -* -ih264_weighted_bi_pred_luma_av8 -* -ih264_weighted_bi_pred_chroma_av8 -* -ih264_default_weighted_pred_luma_sse42 -* -ih264_default_weighted_pred_chroma_sse42 -* -ih264_weighted_pred_luma_sse42 -* -ih264_weighted_pred_chroma_sse42 -* -ih264_weighted_bi_pred_luma_sse42 -* -ih264_weighted_bi_pred_chroma_sse42 -* +* ittiam * * @remarks -* None +* none * ******************************************************************************* */ -#ifndef IH264_WEIGHTED_PRED_H_ -#define IH264_WEIGHTED_PRED_H_ +#ifndef _IH264_WEIGHTED_PRED_H_ +#define _IH264_WEIGHTED_PRED_H_ /*****************************************************************************/ /* Extern Function Declarations */ @@ -101,64 +74,37 @@ typedef void ih264_weighted_bi_pred_ft(UWORD8 *puc_src1, WORD32 ht, WORD32 wd); -/* No NEON Declarations */ - +/* C Declarations */ ih264_default_weighted_pred_ft ih264_default_weighted_pred_luma; - ih264_default_weighted_pred_ft ih264_default_weighted_pred_chroma; - ih264_weighted_pred_ft ih264_weighted_pred_luma; - ih264_weighted_pred_ft ih264_weighted_pred_chroma; - ih264_weighted_bi_pred_ft ih264_weighted_bi_pred_luma; - ih264_weighted_bi_pred_ft ih264_weighted_bi_pred_chroma; /* A9 NEON Declarations */ - ih264_default_weighted_pred_ft ih264_default_weighted_pred_luma_a9q; - ih264_default_weighted_pred_ft ih264_default_weighted_pred_chroma_a9q; - ih264_weighted_pred_ft ih264_weighted_pred_luma_a9q; - ih264_weighted_pred_ft ih264_weighted_pred_chroma_a9q; - ih264_weighted_bi_pred_ft ih264_weighted_bi_pred_luma_a9q; - ih264_weighted_bi_pred_ft ih264_weighted_bi_pred_chroma_a9q; - /* AV8 NEON Declarations */ - ih264_default_weighted_pred_ft ih264_default_weighted_pred_luma_av8; - ih264_default_weighted_pred_ft ih264_default_weighted_pred_chroma_av8; - ih264_weighted_pred_ft ih264_weighted_pred_luma_av8; - ih264_weighted_pred_ft ih264_weighted_pred_chroma_av8; - ih264_weighted_bi_pred_ft ih264_weighted_bi_pred_luma_av8; - ih264_weighted_bi_pred_ft ih264_weighted_bi_pred_chroma_av8; - /* SSE42 Intrinsic Declarations */ - ih264_default_weighted_pred_ft ih264_default_weighted_pred_luma_sse42; - ih264_default_weighted_pred_ft ih264_default_weighted_pred_chroma_sse42; - ih264_weighted_pred_ft ih264_weighted_pred_luma_sse42; - ih264_weighted_pred_ft ih264_weighted_pred_chroma_sse42; - ih264_weighted_bi_pred_ft ih264_weighted_bi_pred_luma_sse42; - ih264_weighted_bi_pred_ft ih264_weighted_bi_pred_chroma_sse42; -#endif /* IH264_WEIGHTED_PRED_H_ */ +#endif /* _IH264_WEIGHTED_PRED_H_ */ -/** Nothing past this point */ diff --git a/common/ithread.h b/common/ithread.h index 45e755fc..e5b13551 100644 --- a/common/ithread.h +++ b/common/ithread.h @@ -17,53 +17,40 @@ ***************************************************************************** * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore */ -/*****************************************************************************/ -/* */ -/* File Name : ithread.h */ -/* */ -/* Description : This file contains all the necessary structure and */ -/* enumeration definitions needed for the Application */ -/* Program Interface(API) of the */ -/* Thread Abstraction Layer */ -/* */ -/* List of Functions : ithread_get_handle_size */ -/* ithread_get_mutex_lock_size */ -/* ithread_create */ -/* ithread_join */ -/* ithread_get_mutex_struct_size */ -/* ithread_mutex_init */ -/* ithread_mutex_destroy */ -/* ithread_mutex_lock */ -/* ithread_mutex_unlock */ -/* ithread_yield */ -/* ithread_sleep */ -/* ithread_msleep */ -/* ithread_usleep */ -/* ithread_get_sem_struct_size */ -/* ithread_sem_init */ -/* ithread_sem_post */ -/* ithread_sem_wait */ -/* ithread_sem_destroy */ -/* ithread_set_affinity */ -/* */ -/* Issues / Problems : None */ -/* */ -/* Revision History : */ -/* */ -/* DD MM YYYY Author(s) Changes */ -/* 06 09 2012 Harish Initial Version */ -/* */ -/*****************************************************************************/ + +/** +******************************************************************************* +* @file +* ithread.h +* +* @brief +* Wrapper functions for thread operations. Library uses these functions during +* multi-thread execution. These calls can be mapped to POSIX, win threads, ... +* basing on platform +* +* @author +* ittiam +* +* @remarks +* none +* +******************************************************************************* +*/ #ifndef _ITHREAD_H_ #define _ITHREAD_H_ +/*****************************************************************************/ +/* Function Declarations */ +/*****************************************************************************/ UWORD32 ithread_get_handle_size(void); UWORD32 ithread_get_mutex_lock_size(void); WORD32 ithread_create(void *thread_handle, void *attribute, void *strt, void *argument); +void ithread_exit(void *val_ptr); + WORD32 ithread_join(void *thread_id, void ** val_ptr); WORD32 ithread_get_mutex_struct_size(void);